00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00044
00045 class StChain;
00046 StChain *Chain=0;
00047 class StBFChain;
00048 StBFChain *chain1, *chain2, *chain3;
00049
00050 void bfcMixer_Tpx(Int_t Nevents=100,
00051 const Char_t *daqfile="/star/rcf/test/daq/2009/embed/st_physics_adc_10128048_raw_1320001.daq",
00052 const Char_t *tagfile="/star/rcf/test/daq/2009/embed/st_physics_adc_10128048_raw_1320001.tags.root",
00053 Double_t pt_low=0.1,
00054 Double_t pt_high=5.0,
00055 Double_t eta_low=-1.5,
00056 Double_t eta_high=1.5,
00057 Double_t vzlow = -150.0,
00058 Double_t vzhigh = 150.0,
00059 Double_t vr = 100.0,
00060 Int_t pid=9,
00061 Double_t mult=100,
00062 std::vector<Int_t> triggers = 0,
00063 const Char_t *prodName = "P08iepp",
00064 const Char_t* type = "FlatPt",
00065 const bool bPythia = false,
00066 const Char_t *fzdfile="test.fzd"
00067 ){
00068
00069 TString prodP08iepp("DbV20081117 B2008a ITTF IAna ppOpt l3onl emcDY2 fpd ftpc trgd ZDCvtx NosvtIT NossdIT Corr4 OSpaceZ2 OGridLeak3D VFMCE -hitfilt");
00070
00071
00072
00073
00074 TString prodP08iedAu("DbV20090213 P2008 ITTF OSpaceZ2 OGridLeak3D beamLine VFMCE TpxClu -VFMinuit -hitfilt");
00075 TString prodP10iapp("DbV20091001 pp2009c TpcRS ITTF OSpaceZ2 OGridLeak3D beamLine, VFMCE TpcRS -VFMinuit -hitfilt");
00076
00077
00078 TString prodP10icpp200("DbV20100301 pp2009c ITTF BEmcChkStat btof Corr4 OSpaceZ2 OGridLeak3D VFMCE TpxClu -hitfilt");
00079
00080 TString prodP09igpp500("DbV20091225 pp2009c ITTF BEmcChkStat btof Corr4 OSpaceZ2 OGridLeak3D VFMCE TpxClu -hitfilt");
00081
00082 TString prodP11ibpp500("DbV20110310 OGGVoltErr pp2009c ITTF VFPPVnoCTB BEmcChkStat beamLine Corr4 OSpaceZ2 OGridLeak3D");
00083 prodP11ibpp500 += " VFPPVnoCTB beamLine TpxClu -VFMinuit -hitfilt";
00084
00085
00086 TString prodP10ikAuAu62("DbV20110413 P2010a,btof,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D,VFMCE TpxClu -VFMinuit -hitfilt");
00087 TString prodP10ihAuAu39("DbV20100909 P2010a,btof,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D,VFMCE TpxClu -VFMinuit -hitfilt");
00088 TString prodP10ikAuAu39("DbV20100909 P2010a,btof,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D,VFMCE TpxClu -VFMinuit -hitfilt");
00089 TString prodP10ihAuAu11("DbV20100821 P2010a,btof,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D,VFMCE TpxClu -VFMinuit -hitfilt");
00090 TString prodP10ihAuAu7("DbV20100821 P2010a,btof,BEmcChkStat,Corr4,OSpaceZ2,OGridLeak3D,VFMCE TpxClu -VFMinuit -hitfilt");
00091
00092
00093 TString prodP10ikAuAu200("DbV20101213 P2010a pmdReco btof BEmcChkStat Corr4 OSpaceZ2 OGridLeak3D VFMCE TpxClu -VFMinuit -hitfilt");
00094
00095
00096 TString prodP11idAuAu200("DbV20111124 P2011a pmdReco btof mtdDat BEmcChkStat Corr4 OSpaceZ2 OGridLeak3D VFMCE TpxClu -VFMinuit -hitfilt");
00097
00098
00099 TString prodP11idAuAu27("DbV20110911 P2011a btof mtddat pmdReco BEmcChkStat Corr4 OSpaceZ2 OGridLeak3D VFMCE TpxClu -VFMinuit -hitfilt");
00100
00101
00102 TString prodP11idAuAu19("DbV20110820 P2011a btof mtddat pmdReco BEmcChkStat Corr4 OSpaceZ2 OGridLeak3D VFMCE TpxClu -VFMinuit -hitfilt");
00103
00104
00105 TString prodP11idpp500("DbV20110923 pp2011a btof mtddat fmsdat BEmcChkStat Corr4 OSpaceZ2 OGridLeak3D VFMCE TpxClu -hitfilt");
00106
00107 TString geomP08ic("ry2008e");
00108 TString geomP10ic("ry2009d");
00109 TString geomP10ih("ry2010c");
00110 TString geomP10ik(geomP10ih);
00111 TString geomP11id("ry2011");
00112
00113 TString chain1Opt("in,magF,tpcDb,NoDefault,TpxRaw,-ittf,NoOutput");
00114 TString chain2Opt("gen_T,geomT,sim_T,TpcRS,-ittf,-tpc_daq,nodefault");
00115
00116 if(bPythia){
00117 chain2Opt += ",fzin";
00118 }
00119 else {
00120 chain2Opt += ",NoInput,PrepEmbed";
00121 }
00122 chain2Opt += " ";
00123
00124 TString chain3Opt("");
00125 if (prodName == "P08icpp") { chain3Opt = prodP08icpp; chain2Opt += geomP08ic;}
00126 else if (prodName == "P08iepp") { chain3Opt = prodP08iepp; chain2Opt += geomP08ic;}
00127 else if (prodName == "P08icAuAu9") { chain3Opt = prodP08icAuAu9; chain2Opt += geomP08ic;}
00128 else if (prodName == "P08icdAu") { chain3Opt = prodP08icdAu; chain2Opt += geomP08ic;}
00129 else if (prodName == "P08iedAu") { chain3Opt = prodP08iedAu; chain2Opt += geomP08ic;}
00130 else if (prodName == "P08icAuAu200") { chain3Opt = prodP08icAuAu200; chain2Opt += geomP08ic;}
00131 else if (prodName == "P09igpp500") { chain3Opt = prodP09igpp500; chain2Opt += geomP10ic;}
00132 else if (prodName == "P11ibpp500") { chain3Opt = prodP11ibpp500; chain2Opt += geomP10ic;}
00133 else if (prodName == "P10iapp") { chain3Opt = prodP10iapp; chain2Opt += geomP10ih;}
00134 else if (prodName == "P10icpp200") { chain3Opt = prodP10icpp200; chain2Opt += geomP10ic;}
00135 else if (prodName == "P10ikAuAu62") { chain3Opt = prodP10ikAuAu62; chain2Opt += geomP10ik;}
00136 else if (prodName == "P10ihAuAu39") { chain3Opt = prodP10ihAuAu39; chain2Opt += geomP10ih;}
00137 else if (prodName == "P10ikAuAu39") { chain3Opt = prodP10ikAuAu39; chain2Opt += geomP10ik;}
00138 else if (prodName == "P10ihAuAu11") { chain3Opt = prodP10ihAuAu11; chain2Opt += geomP10ih;}
00139 else if (prodName == "P10ihAuAu7") { chain3Opt = prodP10ihAuAu7; chain2Opt += geomP10ih;}
00140 else if (prodName == "P10ikAuAu200") { chain3Opt = prodP10ikAuAu200; chain2Opt += geomP10ik;}
00141 else if (prodName == "P11idAuAu200") { chain3Opt = prodP11idAuAu200; chain2Opt += geomP11id;}
00142 else if (prodName == "P11idAuAu27") { chain3Opt = prodP11idAuAu27; chain2Opt += geomP11id;}
00143 else if (prodName == "P11idAuAu19") { chain3Opt = prodP11idAuAu19; chain2Opt += geomP11id;}
00144 else if (prodName == "P11idpp500") { chain3Opt = prodP11idpp500; chain2Opt += geomP11id;}
00145
00146 else {
00147 cout << "Choice prodName " << prodName << " does not correspond to known chain. Processing impossible. " << endl;
00148 return;
00149 }
00150 chain3Opt += ",Embedding,TpcMixer,GeantOut,MiniMcMk,McAna,-in,NoInput,useInTracker";
00151
00152
00153 gROOT->LoadMacro("bfc.C");
00154 if (gClassTable->GetID("StBFChain") < 0) Load();
00155
00156 Chain = new StChain("Embedding");
00157
00158 bfc(-1,chain1Opt,daqfile);
00159 chain1 = chain;
00160 chain1->SetName("One");
00161 Chain->cd();
00162
00163 if(bPythia){
00164 bfc(-1,chain2Opt,fzdfile);
00165 chain2 = chain;
00166 chain2->SetName("Two");
00167 Chain->cd();
00168 if (chain2->GetOption("TRS")){
00169 StTrsMaker *trsMk = (StTrsMaker *) chain2->GetMaker("Trs");
00170 if (! trsMk) {
00171 cout << "Cannot find Trs in chain2" << endl;
00172 return;
00173 }
00174 trsMk->setNormalFactor(1.32);
00175 }
00176 }
00177 else {
00178 bfc(-1,chain2Opt);
00179 chain2 = chain;
00180 chain2->SetName("Two");
00181 Chain->cd();
00182 }
00183 #if 0
00184 if (chain2->GetOption("TRS")){
00185 StTrsMaker *trsMk = (StTrsMaker *) chain2->GetMaker("Trs");
00186 if (! trsMk) {
00187 cout << "Cannot find Trs in chain2" << endl;
00188 return;
00189 }
00190 trsMk->setNormalFactor(1.32);
00191 trsMk->SetMode(0);
00192 }
00193 #endif
00194
00195
00196
00197
00198 TString OutputFileName(gSystem->BaseName(daqfile));
00199 OutputFileName.ReplaceAll("*","");
00200 OutputFileName.ReplaceAll(".daq","");
00201
00202 OutputFileName.Append(".root");
00203 bfc(-1,chain3Opt,0,OutputFileName);
00204 chain3 = chain;
00205 chain3->SetName("Three");
00206 Chain->cd();
00207
00208 StTpcMixerMaker *mixer = (StTpcMixerMaker *) chain3->Maker("TpcMixer");
00209 if( prodName == "P08icAuAu200")
00210 {
00211 mixer->SetInput("Input1","MixerEvent");
00212 }
00213 else
00214 {
00215 mixer->SetInput("Input1","TpxRaw/.data/Event");
00216 }
00217
00218 if (chain2Opt.Contains("TpcRS",TString::kIgnoreCase)) {
00219 mixer->SetInput("Input2","TpcRS/Event");
00220 } else {
00221 mixer->SetInput("Input2","Trs/.const/Event");
00222 }
00223 Chain->cd();
00224
00225
00226
00227
00228 gSystem->Load("StEmcSimulatorMaker");
00229 gSystem->Load("StEmcMixerMaker");
00230 gSystem->Load("StEEmcSimulatorMaker");
00231
00232 StMcEventMaker* mcEventMaker = new StMcEventMaker();
00233 StEmcSimulatorMaker *bemcSim = new StEmcSimulatorMaker();
00234 StEmcMixerMaker *bemcMixer = new StEmcMixerMaker();
00235 chain3->AddAfter("emcRaw",bemcMixer);
00236 chain3->AddAfter("emcRaw",bemcSim);
00237 chain3->AddAfter("emcRaw",mcEventMaker);
00238 bemcMixer->SetDebug(0);
00239
00240
00241
00242 StEEmcFastMaker *eemcFastSim = new StEEmcFastMaker();
00243 StEEmcMixerMaker *eemcMixer = new StEEmcMixerMaker();
00244
00245
00246
00247
00248 chain3->AddAfter("emcRaw",eemcMixer);
00249 chain3->AddAfter("emcRaw",eemcFastSim);
00250
00251 eemcFastSim->SetEmbeddingMode();
00252
00253
00254
00255 bool useEndcapSlowSim = true;
00256 if(useEndcapSlowSim) {
00257 StEEmcSlowMaker *slowSim=new StEEmcSlowMaker();
00258 chain3->AddAfter("EEmcFastSim",slowSim);
00259 slowSim->setEmbeddingMode();
00260 }
00261
00262
00263
00264
00265 {
00266 TDatime t;
00267 gMessMgr->QAInfo() << Form("Run is started at Date/Time %i/%i",t.GetDate(),t.GetTime()) << endm;
00268 }
00269 gMessMgr->QAInfo() << Form("Run on %s in %s",gSystem->HostName(),gSystem->WorkingDirectory()) << endm;
00270 gMessMgr->QAInfo() << Form("with %s", Chain->GetCVS()) << endm;
00271
00272 if(!bPythia){
00273 StPrepEmbedMaker *embMk = (StPrepEmbedMaker *) Chain->Maker("PrepEmbed");
00274 if (! embMk) return;
00275 cout << "bfcMixer: Setting PID: "<<pid<<endl;
00276 embMk->SetTagFile(tagfile);
00277
00278 embMk->SetOpt( pt_low, pt_high, eta_low, eta_high, 0., 6.283185, type);
00279
00280 embMk->SetPartOpt( pid,mult);
00281
00282
00283 embMk->SetSkipMode(kTRUE);
00284
00285
00286
00287
00288 if ( !triggers.empty() ){
00289 for(std::vector<Int_t>::iterator iter = triggers.begin(); iter != triggers.end(); iter++){
00290 embMk->SetTrgOpt((*iter)) ;
00291 }
00292 }
00293
00294 embMk->SetZVertexCut(vzlow, vzhigh) ;
00295
00296 embMk->SetVrCut(vr);
00297 }
00298
00299 TAttr::SetDebug(0);
00300 Chain->SetAttr(".Privilege",0,"*" );
00301 Chain->SetAttr(".Privilege",1,"StBFChain::*" );
00302 Chain->SetAttr(".Privilege",1,"StIOInterFace::*" );
00303 Chain->SetAttr(".Privilege",1,"St_geant_Maker::*");
00304 if(!bPythia)Chain->SetAttr(".Privilege",1,"StPrepEmbedMaker::*");
00305
00306 if (Nevents < 0) return;
00307 Int_t iInit = Chain->Init();
00308 if (iInit >= kStEOF) {Chain->FatalErr(iInit,"on init"); return;}
00309 StMaker *treeMk = Chain->GetMaker("outputStream");
00310 Chain->EventLoop(Nevents,treeMk);
00311 gMessMgr->QAInfo() << "Run completed " << endm;
00312 gSystem->Exec("date");
00313 }
00314
00315 void bfcMixer_Tpx(Int_t Nevents, const Char_t *daqfile, Char_t *tagfile,
00316 Double_t pt_low, Double_t pt_high, Double_t eta_low, Double_t eta_high,
00317 Double_t vzlow, Double_t vzhigh, Double_t vr, Int_t pid, Double_t mult,
00318 const Char_t *triggersC, const Char_t *prodName, const Char_t* type) {
00319 std::vector<Int_t> triggers;
00320 if (triggersC) {
00321 TPMERegexp pm(":");
00322 Int_t N = pm.Split(triggersC);
00323 for (Int_t i = 0; i < N; i++) {
00324 TString num(pm[i]);
00325 triggers.push_back(num.Atoi());
00326 }
00327 }
00328 bfcMixer_Tpx(Nevents, daqfile, tagfile, pt_low, pt_high, eta_low, eta_high, vzlow, vzhigh, vr, pid, mult, triggers, prodName, type);
00329 }