00001 #include "AlephNtupleWriter.h"
00002 #include <stdlib.h>
00003
00004
00005 AlephNtupleWriter::AlephNtupleWriter()
00006 {
00007 cards = NULL;
00008 size = 0;
00009 booked = false;
00010 type = 0;
00011 }
00012
00013
00014 AlephNtupleWriter::~AlephNtupleWriter() {}
00015
00016
00017 void AlephNtupleWriter::Initialize(AlephCardsReader* thecards, int mode)
00018 {
00019 cards = thecards;
00020
00021
00022 type = mode;
00023 switch (type)
00024 {
00025 case 1 :
00026 ROOTfile = new TFile(cards->getHist().c_str(),"RECREATE");
00027 ROOTtree = new TTree("analysis","alpha++ analysis");
00028 break;
00029 case 2 :
00030
00031 break;
00032 default :
00033 cerr << "ERROR: Bad Ntuple Type." << endl;
00034 exit(0);
00035 }
00036 }
00037
00038
00039 void AlephNtupleWriter::Fill()
00040 {
00041 switch (type)
00042 {
00043 case 1 :
00044 ROOTfile->cd();
00045 ROOTtree->Fill();
00046 break;
00047 case 2 :
00048 {
00049 if(!booked)
00050 {
00051 char d[NTMAXIN][8];
00052 for (int i =0;i<NTMAXIN;i++) for(int j=0;j<8;j++) d[i][j]=0;
00053 int cnt = 0;
00054 for(map<string,int>::iterator mapel = NamesIndexes.begin(); mapel != NamesIndexes.end(); mapel++)
00055 {
00056 for(int i=0;i<8;i++)
00057 {
00058 d[cnt][i] = mapel->first.c_str()[i];
00059 }
00060 cnt++;
00061 }
00062 HBOOKN(1000,"analysis",size," ",5000,d);
00063 booked = true;
00064 }
00065 float* myvars = new float[size];
00066 int cnt = 0;
00067 for(map<string,int>::iterator mapel=NamesIndexes.begin();mapel != NamesIndexes.end();mapel++)
00068 myvars[cnt++] = data[mapel->second];
00069 HFN(1000,myvars);
00070 delete [] myvars;
00071 }
00072 break;
00073 default :
00074 cerr << "ERROR: Bad Ntuple Type." << endl;
00075 exit(0);
00076 }
00077 }
00078
00079
00080 void AlephNtupleWriter::Terminate()
00081 {
00082 switch (type)
00083 {
00084 case 1 :
00085 ROOTfile->cd();
00086 ROOTtree->Write();
00087 ROOTfile->Close();
00088
00089
00090 delete ROOTfile;
00091 for(map<string,int*>::iterator mapel=SizeAddresses.begin();mapel != SizeAddresses.end();mapel++)
00092 delete mapel->second;
00093 for(vector<smart_void*>::iterator vecel=theObjects.begin();vecel < theObjects.end();vecel++)
00094 delete *vecel;
00095 break;
00096 case 2 :
00097
00098 break;
00099 default :
00100 cerr << "ERROR: Bad Ntuple Type." << endl;
00101 exit(0);
00102 }
00103 }
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141