00001 enum dataFormat {dst, evt};
00002
00003
00004 class StChain;
00005 StChain *chain=0;
00006
00007
00008
00009 Int_t usePath = 0;
00010 Int_t nFile = 0;
00011 TString thePath;
00012 TString theFileName;
00013 TString originalPath;
00014
00015
00016
00017 TBrowser *b=0;
00018 const char *venusFile ="set*geant.root";
00019 const char *venusPath ="/disk00001/star/auau200/venus412/default/b0_3/year_1b/hadronic_on/tfs_4/";
00020 const char *dstFile ="/disk00001/star/auau200/two_photon/starlight/twogam/year_1b/hadronic_on/tfs/ric0022_01_14552evts.dst.root";
00021 const char *xdfFile ="/afs/rhic.bnl.gov/star/data/samples/psc0054_07_40evts_dst.xdf";
00022 const char *mdcFile ="/disk00001/star/auau200/venus412/default/b0_3/year_1b/hadronic_on/tss/psc0081_07_40evts.root";
00023 const char *geantFile ="/disk00000/star/auau200/hijing135/jetq_off/b0_3/year_1b/hadronic_on/tfsr/set0041_01_53evts.geant.root";
00024 const char *fileList[] = {dstFile,xdfFile,mdcFile,0};
00025
00026 void wait(int n=1) {
00027 for ( int i=0; i<n*1e6; i++) { }
00028 }
00029 void mess(const char* c="alive") {
00030 for ( int i=0; i<10; i++) { cout << c << endl; }
00031 }
00032
00033
00034
00035 void StHbtExampleQQ(const dataFormat format, const Int_t nevents, const Char_t **fileList, const Char_t*, const Char_t* );
00036
00037
00038
00039
00040 void StHbtMicroDstMaker(const dataFormat format,
00041 const Int_t nevents=9999,
00042 const Char_t *path=venusPath,
00043 const Char_t *file=venusFile,
00044 const Char_t* outDir="/star/rcf/pwg/hbt/Laue/Test/SL00hg/",
00045 const Char_t* outFile="dummy",
00046 const Char_t* appendix="test.microDst")
00047 {
00048 const char *fileListQQ[]={0,0};
00049 if (path[0]=='-') {
00050 fileListQQ[0]=file;
00051 } else {
00052 fileListQQ[0] = gSystem->ConcatFileName(path,file);
00053 }
00054 StHbtExampleQQ(format,nevents,fileListQQ,outDir,outFile);
00055 }
00056
00057
00058 void StHbtExampleQQ(const dataFormat format, const Int_t nevents, const Char_t **fileList, const Char_t* dirName, const Char_t* fileName)
00059 {
00060
00061
00062 gSystem->Load("StarRoot");
00063 gSystem->Load("St_base");
00064 gSystem->Load("StChain");
00065 gSystem->Load("St_Tables");
00066 gSystem->Load("StMagF");
00067 gSystem->Load("StUtilities");
00068 gSystem->Load("StTreeMaker");
00069 gSystem->Load("StIOMaker");
00070 gSystem->Load("StarClassLibrary");
00071 gSystem->Load("xdf2root");
00072 gSystem->Load("St_xdfin_Maker");
00073 gSystem->Load("StEvent");
00074 gSystem->Load("StEventMaker");
00075 gSystem->Load("StEventUtilities");
00076 gSystem->Load("StMcEvent");
00077 gSystem->Load("StMcEventMaker");
00078 gSystem->Load("StAssociationMaker");
00079 gSystem->Load("StMcAnalysisMaker");
00080 gSystem->Load("StStrangeMuDstMaker");
00081 gSystem->Load("StHbtMaker");
00082
00083
00084 cout << " loading done " << endl;
00085
00086 chain = new StChain("StChain");
00087 chain->SetDebug();
00088
00089
00090 StFile *setFiles= new StFile();
00091 for (int ifil=0; fileList[ifil]; ifil++)
00092 setFiles->AddFile(fileList[ifil]);
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102 StIOMaker* ioMaker = new StIOMaker("IO","r",setFiles,"bfcTree");
00103 ioMaker->SetDebug();
00104
00105 ioMaker->SetIOMode("r");
00106 ioMaker->SetDebug();
00107 ioMaker->SetBranch("*",0,"0");
00108
00109
00110
00111
00112 cout << "Just instantiated StHbtTagReader... lets go StHbtMaker!" << endl;
00113
00114
00115
00116
00117 StEventMaker* eventMaker =0;
00118
00119 if (format==dst) {
00120 eventMaker = new StEventMaker("events","title");
00121 ioMaker->SetBranch("dstBranch",0,"r");
00122 cout << " dst" << endl;
00123 }
00124 else if(format==evt) {
00125 eventMaker =0;
00126 ioMaker->SetBranch("eventBranch",0,"r");
00127 cout << " evt" << endl;
00128 }
00129 else return;
00130 cout << "Just instantiated StEventMaker... lets go StHbtMaker!" << eventMaker << endl;
00131
00132
00133 StStrangeMuDstMaker* v0dst = new StStrangeMuDstMaker("v0dst");
00134 v0dst->DoV0();
00135 v0dst->DoKink();
00136 v0dst->SetNoKeep();
00137 v0dst->SetWrite();
00138
00139 cout << "Just instantiated StStrangeMuDstMaker... lets go StHbt!" << endl;
00140
00141
00142
00143
00144
00145
00146 StHbtMaker* hbtMaker = new StHbtMaker("HBT","title");
00147 cout << "StHbtMaker instantiated"<<endl;
00148
00149
00150
00151 cout << "StHbtMaker::Init - setting up Reader and Analyses..." << endl;
00152
00153 StHbtManager* TheManager = hbtMaker->HbtManager();
00154
00155
00156
00157
00158
00159
00160
00161
00162 StStandardHbtEventReader* Reader = new StStandardHbtEventReader;
00163 Reader->SetTheEventMaker(eventMaker);
00164 Reader->SetTheV0Maker(v0dst);
00165 Reader->SetTheTagReader(0);
00166 TheManager->SetEventReader(Reader);
00167
00168 cout << "READER SET UP.... " << endl;
00169
00170
00171
00172
00173 mikesEventCut* EventCut = new mikesEventCut;
00174 EventCut->SetEventMult(0,100000);
00175 EventCut->SetVertZPos(-75.0,75.0);
00176
00177
00178 franksTrackCut* AntiTrackCut = new franksTrackCut;
00179 AntiTrackCut->SetNSigmaPion(+1,-1.);
00180
00181 franksTrackCut* AllTrackCut = new franksTrackCut;
00182 AllTrackCut->SetNSigmaPion(-1000.0,1000.0);
00183 AllTrackCut->SetNSigmaKaon(-1000.0,1000.0);
00184 AllTrackCut->SetNSigmaProton(-1000.0,1000.0);
00185 AllTrackCut->SetNHits(10,1000);
00186 AllTrackCut->SetP(0.0,50.0);
00187 AllTrackCut->SetPt(0.0,50.0);
00188 AllTrackCut->SetRapidity(-15,15);
00189 AllTrackCut->SetDCA(0.0,200.);
00190 AllTrackCut->SetCharge(0);
00191 AllTrackCut->SetMass(0.139);
00192
00193 franksTrackCut* PionTrackCut = new franksTrackCut;
00194 PionTrackCut->SetNSigmaPion(-3.0,+3.);
00195 PionTrackCut->SetNSigmaKaon(-1000.0,1000.0);
00196 PionTrackCut->SetNSigmaProton(-1000.0,1000.0);
00197 PionTrackCut->SetNHits(10,1000);
00198 PionTrackCut->SetP(0.0,5.0);
00199 PionTrackCut->SetPt(0.0,5.0);
00200 PionTrackCut->SetRapidity(-1.5,1.5);
00201 PionTrackCut->SetDCA(0.0,2.);
00202 PionTrackCut->SetCharge(0);
00203 PionTrackCut->SetMass(0.139);
00204
00205 franksTrackCut* PionPlusTrackCut = new franksTrackCut;
00206 PionPlusTrackCut->SetNSigmaPion(-3.0,+3.);
00207 PionPlusTrackCut->SetNSigmaKaon(-1000.0,1000.0);
00208 PionPlusTrackCut->SetNSigmaProton(-1000.0,1000.0);
00209 PionPlusTrackCut->SetNHits(10,1000);
00210 PionPlusTrackCut->SetP(0.0,5.0);
00211 PionPlusTrackCut->SetPt(0.0,5.0);
00212 PionPlusTrackCut->SetRapidity(-1.5,1.5);
00213 PionPlusTrackCut->SetDCA(0.0,2.);
00214 PionPlusTrackCut->SetCharge(+1);
00215 PionPlusTrackCut->SetMass(0.139);
00216
00217 franksTrackCut* KaonTrackCut = new franksTrackCut;
00218
00219 KaonTrackCut->SetNSigmaKaon(-3.,3.);
00220
00221 KaonTrackCut->SetNHits(10,1000);
00222 KaonTrackCut->SetP(0.0,2.0);
00223 KaonTrackCut->SetPt(0.0,2.0);
00224 KaonTrackCut->SetRapidity(-1.5,1.5);
00225 KaonTrackCut->SetDCA(0.0,3.);
00226 KaonTrackCut->SetCharge(0);
00227 KaonTrackCut->SetMass(0.494);
00228
00229 franksTrackCut* KaonMinusTrackCut = new franksTrackCut;
00230 KaonMinusTrackCut->SetNSigmaPion(-1000.0,1000.0);
00231 KaonMinusTrackCut->SetNSigmaKaon(-3.,3.);
00232 KaonMinusTrackCut->SetNSigmaProton(-1000.0,1000.0);
00233 KaonMinusTrackCut->SetNHits(10,1000);
00234 KaonMinusTrackCut->SetP(0.0,5.0);
00235 KaonMinusTrackCut->SetPt(0.0,5.0);
00236 KaonMinusTrackCut->SetRapidity(-1.5,1.5);
00237 KaonMinusTrackCut->SetDCA(0.0,2.);
00238 KaonMinusTrackCut->SetCharge(-1);
00239 KaonMinusTrackCut->SetMass(0.494);
00240
00241 franksTrackCut* ProtonTrackCut = new franksTrackCut;
00242 ProtonTrackCut->SetNSigmaPion(-1000.0,1000.0);
00243 ProtonTrackCut->SetNSigmaKaon(-1000.,1000.);
00244 ProtonTrackCut->SetNSigmaProton(-3.0,3.0);
00245 ProtonTrackCut->SetNHits(10,1000);
00246 ProtonTrackCut->SetP(0.0,5.0);
00247 ProtonTrackCut->SetPt(0.0,5.0);
00248 ProtonTrackCut->SetRapidity(-1.5,1.5);
00249 ProtonTrackCut->SetDCA(0.0,2.);
00250 ProtonTrackCut->SetCharge(0);
00251 ProtonTrackCut->SetMass(0.938);
00252
00253
00254 helensV0Cut* AntiV0Cut = new helensV0Cut;
00255 AntiV0Cut->SetV0Type("blabla");
00256 AntiV0Cut->SetPt(+1,-1);
00257
00258 helensV0Cut* LambdaCut = new helensV0Cut;
00259 LambdaCut->SetV0Type("lambda");
00260 LambdaCut->SetV0MassRange(1.105,1.125);
00261 LambdaCut->SetdcaV0daughters(0.,1.0);
00262 LambdaCut->SetdcaV0ToPrimVertex(0.,1.);
00263 LambdaCut->SetdecayLengthV0(3.0,5000.);
00264 LambdaCut->SettpcHitsPos(10,50);
00265 LambdaCut->SettpcHitsNeg(10,50);
00266 LambdaCut->SetdcaPosToPrimVertex(1.8,50.);
00267 LambdaCut->SetdcaNegToPrimVertex(3.5,50.);
00268 LambdaCut->SetptArmV0(0.,0.25);
00269 LambdaCut->SetalphaV0(0.0,1.);
00270 LambdaCut->SetPt(0.,10.0);
00271 LambdaCut->SetRapidity(-50.0,50.0);
00272 LambdaCut->SetMass(1.11567);
00273
00274 helensV0Cut* K0Cut = new helensV0Cut;
00275 K0Cut->SetV0Type("K0");
00276 K0Cut->SetV0MassRange(.05,.05);
00277 K0Cut->SetdcaV0daughters(0.,0.5);
00278 K0Cut->SetdcaV0ToPrimVertex(0.,.5);
00279 K0Cut->SetdecayLengthV0(4.0,2000.);
00280 K0Cut->SetdecayLengthV0(2.676*1.,2.676*5.);
00281 K0Cut->SettpcHitsPos(0,1000);
00282 K0Cut->SettpcHitsNeg(0,1000);
00283 K0Cut->SetdcaPosToPrimVertex(0.2,1000.);
00284 K0Cut->SetdcaNegToPrimVertex(0.2,1000.);
00285 K0Cut->SetptArmV0(0.1,0.25);
00286 K0Cut->SetalphaV0(-1.,1.);
00287 K0Cut->SetptArmV0(-100.,+100.);
00288 K0Cut->SetalphaV0(-100.,+100.);
00289 K0Cut->SetPt(0.1,2.0);
00290 K0Cut->SetRapidity(-50.0,50.0);
00291 K0Cut->SetMass(0.49762);
00292
00293
00294
00295
00296
00297 StHbtTTreeReader* allWriter = new StHbtTTreeReader(1,ioMaker,"./","",".hbtTTreeMuDst","");
00298
00299 TheManager->AddEventWriter(allWriter);
00300 allWriter->SetEventCut(EventCut);
00301 allWriter->SetTrackCut(AllTrackCut);
00302 allWriter->SetV0Cut(AntiV0Cut);
00303 cout << "WRITER SET UP.... " << endl;
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376 chain->Init();
00377 chain->PrintInfo();
00378 for (Int_t iev=0;iev<nevents; iev++) {
00379 cout << "StHbtExample -- Working on eventNumber " << iev << endl;
00380 chain->Clear();
00381 int iret = chain->Make(iev);
00382 if (iret) {
00383 cout << "Bad return code!" << endl;
00384 break;
00385 }
00386 }
00387 chain->Finish();
00388
00389 cout << " End of Analysis " << endl;
00390 }
00391
00392
00393