00001 #include "TString.h"
00002 #include "assert.h"
00003 void doPhoton(unsigned long nEvents, char *infile,char *jobid,char *flag,char *coll,Int_t nFiles=0,char *timestampfile)
00004 {
00005 Bool_t debug=kFALSE;
00006 Bool_t debugg=kFALSE;
00007
00008 Bool_t USERANDOMIZER=kFALSE;
00009
00010 gSystem->Load("StarRoot");
00011 gSystem->Load("St_base");
00012
00013
00014 gSystem->Load("liblog4cxx.so");
00015 gSystem->Load("StStarLogger.so");
00016 StLoggerManager::StarLoggerInit();
00017
00018
00019 gSystem->Load("StChain");
00020 gSystem->Load("St_Tables");
00021 gSystem->Load("StarMagField");
00022 gSystem->Load("StMagF");
00023 gSystem->Load("StUtilities");
00024 gSystem->Load("StTreeMaker");
00025 gSystem->Load("StIOMaker");
00026 gSystem->Load("StarClassLibrary");
00027 gSystem->Load("StTpcDb");
00028 gSystem->Load("StDetectorDbMaker");
00029 gSystem->Load("StDbUtilities");
00030 gSystem->Load("StEvent");
00031 gSystem->Load("StEventUtilities");
00032 gSystem->Load("StMcEvent");
00033 gSystem->Load("StMcEventMaker");
00034 gSystem->Load("StAssociationMaker");
00035 gSystem->Load("StStrangeMuDstMaker");
00036 gSystem->Load("StEmcUtil");
00037 gSystem->Load("StEEmcUtil");
00038 gSystem->Load("StMuDSTMaker");
00039
00040 gSystem->Load("StBichsel");
00041
00042 gROOT->LoadMacro("$STAR/StRoot/StMuDSTMaker/COMMON/macros/loadSharedLibraries.C");
00043 loadSharedLibraries();
00044
00045
00046 gSystem->Load("StDaqLib");
00047 gSystem->Load("StDbLib");
00048 gSystem->Load("StDbBroker");
00049 gSystem->Load("St_db_Maker");
00050
00051
00052 gSystem->Load("StEmcRawMaker");
00053 gSystem->Load("StEmcADCtoEMaker");
00054 gSystem->Load("StPreEclMaker");
00055 gSystem->Load("StEpcMaker");
00056
00057 gSystem->Load("StEmcSimulatorMaker");
00058 gSystem->Load("StEmcMixerMaker");
00059
00060 gSystem->Load("StEmcTriggerMaker");
00061
00062
00063 gSystem->Load("StTimeRandomizerMaker");
00064
00065 gSystem->Load("/star/u/russcher/MyEvent/MyEvent");
00066 gSystem->Load("StPhotonMaker");
00067
00068 cout<<"Finished loading libraries"<<endl;
00069
00070 StChain* chain = new StChain("bfc");
00071
00072 StEmcADCtoEMaker* adcMaker=0;
00073 StPreEclMaker* preEcl=0;
00074
00075 StTimeRandomizerMaker* rndMaker=0;
00076 St_db_Maker* dbMk=0;
00077
00078 StDetectorDbMaker* detDbMk=0;
00079
00080 TString output(jobid);
00081 output.Append("_");
00082 output.Append(coll);
00083 output.Append("_");
00084 output.Append(flag);
00085 output.Append(".root");
00086
00087 TString input(infile);
00088 if(strcmp(flag,"mc")==0||strcmp(flag,"realembed")==0||strcmp(flag,"embed")==0){
00089 if(input.EndsWith("list")){
00090 cout<<endl<<"running on event.root, prepend @ on "<<input.Data()<<endl;
00091 input.Prepend("@");
00092 }
00093 }
00094
00095 StIOMaker* ioMaker=0;
00096 StMcEventMaker* mcEventMaker=0;
00097 StEmcSimulatorMaker* emcSim=0;
00098
00099
00100 if(strcmp(flag,"real")==0){
00101 cout << "Processing REAL data" << endl;
00102
00103 if(nFiles==0){
00104 cout<<"running on MuDst without number of files specified!!!"<<endl;
00105 return;
00106 }
00107 StMuDstMaker* mudstMaker = new StMuDstMaker(0,0,"",input.Data(),"",nFiles);
00108 dbMk = new St_db_Maker("db","MySQL:StarDb", "$STAR/StarDb");
00109 detDbMk = new StDetectorDbMaker();
00110 StMuDbReader* dbReader = StMuDbReader::instance();
00111 StMuDst2StEventMaker *m2e = new StMuDst2StEventMaker();
00112 }
00113
00114
00115 if(strcmp(flag,"realembed")==0){
00116 cout << "Processing REALEMBED data" << endl;
00117
00118 ioMaker = new StIOMaker("IO","r",input.Data());
00119 ioMaker->SetIOMode("r");
00120 ioMaker->SetBranch("*",0,"0");
00121 ioMaker->SetBranch("eventBranch", 0, "r");
00122
00123 dbMk = new St_db_Maker("db","MySQL:StarDb", "$STAR/StarDb");
00124 }
00125
00126
00127 if(strcmp(flag,"mc")==0)
00128 {
00129 ioMaker = new StIOMaker("IO","r",input.Data());
00130 ioMaker->SetIOMode("r");
00131 ioMaker->SetBranch("*",0,"0");
00132 ioMaker->SetBranch("eventBranch", 0, "r");
00133 ioMaker->SetBranch("geantBranch",0,"r");
00134
00135
00136 if(USERANDOMIZER){
00137 rndMaker=new StTimeRandomizerMaker();
00138 rndMaker->setRunTimesFilename(timestampfile);
00139 rndMaker->setNormalizeEventsTotal(3000);
00140 rndMaker->setDatasetNameStEvent("IO_Root/.data/bfcTree/eventBranch/StEvent");
00141 rndMaker->setSeed(0);
00142 rndMaker->setBaseEventId(0);
00143 }
00144
00145 dbMk = new St_db_Maker("db","MySQL:StarDb", "$STAR/StarDb");
00146 if(strcmp(coll,"dAu")==0 && !USERANDOMIZER){
00147 dbMk->SetDateTime(20030313,000000);
00148 }
00149 if(strcmp(coll,"pp05")==0 && !USERANDOMIZER){
00150 int date=20050508;
00151 int time=000001;
00152 dbMk->SetDateTime(date,time);
00153 }
00154 mcEventMaker = new StMcEventMaker();
00155 mcEventMaker->doPrintEventInfo=debug;
00156 mcEventMaker->doPrintMemoryInfo=debug;
00157 mcEventMaker->doPrintCpuInfo=debug;
00158
00159 cout << "Processing MC data" << endl;
00160
00161
00162 emcSim = new StEmcSimulatorMaker();
00163 emcSim->setCalibOffset(kBarrelEmcTowerId,0.0);
00164 emcSim->setCalibOffset(kBarrelSmdEtaStripId,0.0);
00165 emcSim->setCalibOffset(kBarrelSmdPhiStripId,0.0);
00166 emcSim->setCalibSpread(kBarrelSmdEtaStripId,0.2);
00167 emcSim->setCalibSpread(kBarrelSmdPhiStripId,0.2);
00168 if(strcmp(coll,"dAu")==0){
00169 emcSim->setCalibSpread(kBarrelEmcTowerId,0.1);
00170 }
00171 if(strcmp(coll,"pp05")==0){
00172 emcSim->setCalibSpread(kBarrelEmcTowerId,0.07);
00173 }
00174
00175
00176
00177 }
00178
00179 if(strcmp(flag,"embed")==0){
00180 ioMaker = new StIOMaker("IO","r",input.Data());
00181 ioMaker->SetDebug(debug);
00182 ioMaker->SetIOMode("r");
00183 ioMaker->SetBranch("*",0,"0");
00184 ioMaker->SetBranch("eventBranch", 0, "r");
00185 ioMaker->SetBranch("geantBranch",0,"r");
00186
00187 cout << "Processing EMBED data" << endl;
00188
00189 dbMk=new St_db_Maker("db","MySQL:StarDb", "$STAR/StarDb");
00190 cout<<"database done"<<endl;
00191
00192 adcMaker=new StEmcADCtoEMaker();
00193 adcMaker->setPrint(debug);
00194 adcMaker->saveAllStEvent(kTRUE);
00195 cout<<"first adcmaker done"<<endl;
00196
00197 StEmcPreMixerMaker* preMixer=new StEmcPreMixerMaker("preEmbed");
00198 cout<<"added premixer"<<endl;
00199
00200 mcEventMaker=new StMcEventMaker();
00201 mcEventMaker->doPrintEventInfo=debug;
00202 mcEventMaker->doPrintMemoryInfo=debug;
00203 mcEventMaker->doPrintCpuInfo=debug;
00204 cout<<"added mcEventmaker"<<endl;
00205
00206 emcSim = new StEmcSimulatorMaker();
00207 cout<<"adjust for new simulator!"<<endl;
00208 return;
00209
00210 StEmcMixerMaker* emcMix=new StEmcMixerMaker();
00211 emcMix->setEmbedAll(kTRUE);
00212 emcMix->setPrint(debug);
00213 cout<<"mixer done"<<endl;
00214
00215 }
00216
00217 StEmcADCtoEMaker *adc=0;
00218
00219 if(strcmp(flag,"mc")!=0){
00220 adc=new StEmcADCtoEMaker("EReadEmbed2");
00221 adc->setPrint(debug);
00222 if(strcmp(flag,"embed")==0) adc->setEmbeddingMode(kTRUE);
00223 }
00224
00225 preEcl = new StPreEclMaker();
00226 StEpcMaker *epc = new StEpcMaker();
00227
00228 preEcl->setPrint(debug);
00229 epc->setPrint(debug);
00230
00231 StEmcTriggerMaker *emcTrigger=new StEmcTriggerMaker();
00232 emcTrigger->setDbMaker(dbMk);
00233
00234 StPhotonMaker* photonMaker = new StPhotonMaker("photonMaker",output.Data(),flag,coll,debugg);
00235 photonMaker->setDbMaker(dbMk);
00236 if(strcmp(flag,"mc")!=0) photonMaker->setAdcMaker(adc);
00237
00238 chain->Init();
00239
00240 if(preEcl){
00241 cout<<endl<<"Using old clustering, setting parameters now!"<<endl;
00242 preEcl->SetClusterConditions("bemc", 4, .35, .0350, 0.02, kFALSE);
00243 preEcl->SetClusterConditions("bprs", 1, 500., 500., 501., kFALSE);
00244 preEcl->SetClusterConditions("bsmde", 5, .20, .0005, 0.10, kFALSE);
00245 preEcl->SetClusterConditions("bsmdp", 5, .20, .0005, 0.10, kFALSE);
00246 }
00247
00248 cout<<endl<<"******** Starting to loop over chain->Make()!!!! *********"<<endl<<endl;
00249
00250 for(unsigned long iev=0;iev<nEvents; iev++){
00251 if(iev%100==0) cout<<"processing event: "<<iev<<endl;
00252 chain->Clear();
00253 Int_t iret = chain->Make(iev);
00254 if(iev%100==0){
00255
00256 photonMaker->saveHistograms();
00257 }
00258 if(iret==2) cout<<"### Last Event Processed. Status = "<<iret<<endl;
00259 if(iret==3) cout<<"### Error Event Processed. Status = "<<iret<<endl;
00260 if(iret==4) cout<<"### Fatal Event Processed. Status = "<<iret<<endl;
00261
00262 if(iret>1) break;
00263 }
00264
00265
00266 chain->Finish();
00267
00268 }
00269
00270
00271
00272
00273
00274
00275
00276