00001
00002
00003
00004
00005
00006
00007
00009
00010 class StChain;
00011 StChain *Chain=0;
00012 class StBFChain;
00013 StBFChain *chain1, *chain2, *chain3;
00014
00015 void bfcMixer_Ftpc(const Int_t Nevents=20,
00016 const Char_t *daqfile="/star/rcf/test/daq/2008/emb/st_fmsslow_adc_9069059_raw_1520001.daq",
00017 const Char_t *tagfile="/star/rcf/test/daq/2008/emb/daqtags/st_fmsslow_adc_9069059_raw_1520001.tags.root",
00018 const Double_t pt_low=0.2,
00019 const Double_t pt_high=0.5,
00020 const Double_t eta_low=2.25,
00021 const Double_t eta_high=4.45,
00022 const Double_t vzlow = -50.0,
00023 const Double_t vzhigh = 50.0,
00024 const Int_t pid=8,
00025 const Double_t mult=1,
00026 const std::vector<Int_t> triggers = 0,
00027 const Char_t *prodName = "P08iepp",
00028 const Char_t* type = "FlatPt"){
00029
00030 TString prodP08iepp("DbV20081117 B2008a ITTF IAna ppOpt l3onl emcDY2 fpd ftpc trgd ZDCvtx NosvtIT NossdIT Corr4 OSpaceZ2 OGridLeak3D VFMCE -hitfilt");
00031
00032
00033
00034
00035 TString prodP08iedAu("DbV20090213 P2008 ITTF OSpaceZ2 OGridLeak3D beamLine VFMCE TpxClu -VFMinuit -hitfilt");
00036 TString prodP10iapp("DbV20091001 pp2009c TpcRS ITTF OSpaceZ2 OGridLeak3D beamLine, VFMCE TpcRS -VFMinuit -hitfilt");
00037 TString geomP08ic("ry2008");
00038 TString chain1Opt("in,magF,tpcDb,NoDefault,TpxRaw,-ittf,NoOutput");
00039
00040 TString chain2Opt("NoInput,PrepEmbed,gen_T,geomT,sim_T,ftpcT,trs,fss,-ittf,-tpc_daq,nodefault");
00041 chain2Opt += " "; chain2Opt += geomP08ic;
00042
00043 TString chain3Opt("");
00044 if (prodName == "P08icpp") { chain3Opt = prodP08icpp; }
00045 else if (prodName == "P08iepp") { chain3Opt = prodP08iepp; }
00046 else if (prodName == "P08icAuAu9") { chain3Opt = prodP08icAuAu9; }
00047 else if (prodName == "P08icdAu") { chain3Opt = prodP08icdAu; }
00048 else if (prodName == "P08iedAu") { chain3Opt = prodP08iedAu; }
00049 else if (prodName == "P08icAuAu200") { chain3Opt = prodP08icAuAu200;}
00050 else if (prodName == "P10iapp") { chain3opt = prodP10iapp;}
00051 else {
00052 cout << "Choice prodName does not correspond to known chain. Processing impossible. " << endl;
00053 return;
00054 }
00055 chain3Opt += ",Embedding,TpcMixer,GeantOut,MiniMcMk,McAna,-in,NoInput,useInTracker";
00056 chain3Opt += ","; chain3Opt += geomP08ic;
00057
00058 gROOT->LoadMacro("bfc.C");
00059 if (gClassTable->GetID("StBFChain") < 0) Load();
00060
00061 Chain = new StChain("Embedding");
00062
00063 bfc(-1,chain1Opt,daqfile);
00064 chain1 = chain;
00065 chain1->SetName("One");
00066 Chain->cd();
00067
00068 bfc(-1,chain2Opt);
00069 chain2 = chain;
00070 chain2->SetName("Two");
00071 Chain->cd();
00072 #if 1
00073 if (chain2->GetOption("TRS")){
00074 StTrsMaker *trsMk = (StTrsMaker *) chain2->GetMaker("Trs");
00075 if (! trsMk) {
00076 cout << "Cannot find Trs in chain2" << endl;
00077 return;
00078 }
00079 trsMk->setNormalFactor(1.32);
00080 trsMk->SetMode(0);
00081 }
00082 #endif
00083
00084 gSystem->Load("StFtpcMixerMaker");
00085 StFtpcMixerMaker *ftpcmixer = new StFtpcMixerMaker("FtpcMixer","daq","fss");
00086 ftpcmixer->SetInput("Input1","StDAQReader");
00087 ftpcmixer->SetInput("Input2","Event");
00088
00089 TString OutputFileName(gSystem->BaseName(daqfile));
00090 OutputFileName.ReplaceAll("*","");
00091 OutputFileName.ReplaceAll(".daq","");
00092
00093 OutputFileName.Append(".root");
00094 bfc(-1,chain3Opt,0,OutputFileName);
00095 chain3 = chain;
00096 chain3->SetName("Three");
00097 Chain->cd();
00098
00099 StTpcMixerMaker *mixer = (StTpcMixerMaker *) chain3->Maker("TpcMixer");
00100 if( prodName == "P08icAuAu200")
00101 {
00102 mixer->SetInput("Input1","MixerEvent");
00103 }
00104 else
00105 {
00106 mixer->SetInput("Input1","TpxRaw/.data/Event");
00107 }
00108 mixer->SetInput("Input2","Trs/.const/Event");
00109 Chain->cd();
00110
00111 #if 0
00112
00113
00114
00115 gSystem->Load("StEmcSimulatorMaker");
00116 gSystem->Load("StEmcMixerMaker");
00117 gSystem->Load("StEEmcSimulatorMaker");
00118
00119 StMcEventMaker* mcEventMaker = new StMcEventMaker();
00120 StEmcSimulatorMaker *bemcSim = new StEmcSimulatorMaker();
00121 StEmcMixerMaker *bemcMixer = new StEmcMixerMaker();
00122 chain3->AddAfter("emcRaw",bemcMixer);
00123 chain3->AddAfter("emcRaw",bemcSim);
00124 chain3->AddAfter("emcRaw",mcEventMaker);
00125 bemcMixer->SetDebug(0);
00126
00127
00128
00129 StEEmcFastMaker *eemcFastSim = new StEEmcFastMaker();
00130 StEEmcMixerMaker *eemcMixer = new StEEmcMixerMaker();
00131
00132
00133
00134
00135 chain3->AddAfter("emcRaw",eemcMixer);
00136 chain3->AddAfter("emcRaw",eemcFastSim);
00137
00138 eemcFastSim->SetEmbeddingMode();
00139
00140
00141
00142 bool useEndcapSlowSim = true;
00143 if(useEndcapSlowSim) {
00144 StEEmcSlowMaker *slowSim=new StEEmcSlowMaker();
00145 chain3->AddAfter("EEmcFastSim",slowSim);
00146 slowSim->setEmbeddingMode();
00147 }
00148 #endif
00149
00150
00151
00152 {
00153 TDatime t;
00154 gMessMgr->QAInfo() << Form("Run is started at Date/Time %i/%i",t.GetDate(),t.GetTime()) << endm;
00155 }
00156 gMessMgr->QAInfo() << Form("Run on %s in %s",gSystem->HostName(),gSystem->WorkingDirectory()) << endm;
00157 gMessMgr->QAInfo() << Form("with %s", Chain->GetCVS()) << endm;
00158
00159 StPrepEmbedMaker *embMk = (StPrepEmbedMaker *) Chain->Maker("PrepEmbed");
00160 if (! embMk) return;
00161 cout << "bfcMixer: Setting PID: "<<pid<<endl;
00162 embMk->SetTagFile(tagfile);
00163
00164 embMk->SetOpt( pt_low, pt_high, eta_low, eta_high, 0., 6.283185, type);
00165
00166 embMk->SetPartOpt( pid,mult);
00167
00168
00169 embMk->SetSkipMode(kTRUE);
00170
00171
00172
00173
00174 if ( !triggers.empty() ){
00175 for(std::vector<Int_t>::iterator iter = triggers.begin(); iter != triggers.end(); iter++){
00176 embMk->SetTrgOpt((*iter)) ;
00177 }
00178 }
00179
00180
00181 embMk->SetZVertexCut(vzlow, vzhigh) ;
00182
00183 TAttr::SetDebug(0);
00184 Chain->SetAttr(".Privilege",0,"*" );
00185 Chain->SetAttr(".Privilege",1,"StBFChain::*" );
00186 Chain->SetAttr(".Privilege",1,"StIOInterFace::*" );
00187 Chain->SetAttr(".Privilege",1,"St_geant_Maker::*");
00188 Chain->SetAttr(".Privilege",1,"StPrepEmbedMaker::*");
00189
00190 if (Nevents < 0) return;
00191 Int_t iInit = Chain->Init();
00192 if (iInit >= kStEOF) {Chain->FatalErr(iInit,"on init"); return;}
00193 StMaker *treeMk = Chain->GetMaker("outputStream");
00194 Chain->EventLoop(Nevents,treeMk);
00195 gMessMgr->QAInfo() << "Run completed " << endm;
00196 gSystem->Exec("date");
00197 }
00198
00199