00001
00002
00003
00004
00005
00006
00007
00008
00010
00011 class StChain;
00012 StChain *Chain=0;
00013 class StBFChain;
00014 StBFChain *chain1, *chain2, *chain3;
00015
00016 void bfcMixer_TpcSvtSsd(const Int_t Nevents=500,Int_t isSvtIn=1, Int_t isSsdIn=1,
00017 const Char_t *daqfile="/star/rcf/test/daq/2007/113/8113044/st_physics_8113044_raw_1040042.daq",
00018 const Char_t *tagfile="/star/rcf/test/embedding/2007ProductionMinBias/FullField/P08if/2007/113/8113044/st_physics_8113044_raw_1040042.tags.root",
00019 const Double_t pt_low=0.1,
00020 const Double_t pt_high=5.0,
00021 const Double_t eta_low=-1.1,
00022 const Double_t eta_high=1.1,
00023 const Double_t vzlow=-175.0,
00024 const Double_t vzhigh=175.0,
00025 const Int_t pid=8,
00026 const Double_t mult = 100.,
00027 const std::vector<Int_t> triggers = 0,
00028 const Char_t* prodName = "P08icAuAu",
00029 const Char_t* mode="flatpt"
00030 ) {
00031
00032 TString DbVP06idpp("DbV20060729 ");
00033 TString DbVP07icCuCu("DbV20070518 ");
00034 TString DbVP08icAuAu("DbV20080418 ");
00035
00036
00037 TString prodP06idpp("pp2006b ITTF OSpaceZ2 OGridLeak3D VFMCE -VFPPVnoCTB -hitfilt");
00038
00039
00040
00041
00042
00043 TString prodP07icCuCu("P2005b DbV20070518 MakeEvent ITTF ToF ssddat spt SsdIt SvtIt pmdRaw OGridLeak OShortR OSpaceZ2 KeepSvtHit skip1row VFMCE -VFMinuit -hitfilt");
00044
00045
00046
00047
00048
00049 TString prodP08icAuAu("B2007g ITTF adcOnly IAna KeepSvtHit VFMCE -hitfilt l3onl emcDY2 fpd ftpc trgd ZDCvtx svtIT ssdIT Corr5 -dstout");
00050
00051 TString geomP06id("ry2006");
00052 TString geomP07ic("ry2005f");
00053 TString geomP08ic("ry2007g");
00054
00055 TString chain1Opt("in magF tpcDb NoDefault -ittf NoOutput");
00056 TString chain2Opt("NoInput PrepEmbed gen_T geomT sim_T trs -ittf -tpc_daq nodefault");
00057
00058 TString chain3Opt("");
00059 if( prodName == "P06idpp") {
00060 chain1Opt.Prepend(DbVP06idpp);
00061 chain2Opt += " "; chain2Opt += geomP06id;
00062 chain3Opt = prodP06idpp ;
00063 }
00064 else if( prodName == "P07ic" ){
00065 chain1Opt.Prepend(DbVP07icCuCu);
00066 chain2Opt += " "; chain2Opt += geomP07ic;
00067 chain3Opt = prodP07icCuCu;
00068 }
00069 else if ( prodName == "P08icAuAu" ){
00070 chain1Opt.Prepend(DbVP08icAuAu);
00071 chain2Opt += " "; chain2Opt += geomP08ic;
00072 chain3Opt = prodP08icAuAu ;
00073 }
00074 else{
00075 cout << "Choice prodName does not correspond to known chain. Processing impossible. " << endl;
00076 return;
00077 }
00078
00079
00080 chain3Opt += " Embedding onlraw McEvent McEvOut GeantOut MiniMcMk McAna IdTruth -in NoInput,useInTracker -hitfilt -TrsPileUp -TrsToF";
00081
00082
00083 if (isSvtIn) chain3Opt += " SvtEmbed";
00084 if (isSsdIn) {
00085 chain1Opt += ",ssddat";
00086 chain2Opt += ",ssd,McEvent,-spt";
00087 chain3Opt += ",SsdEmbed";
00088 }
00089
00090 if( prodName == "P06idpp") {
00091 chain3Opt.Prepend(DbVP06idpp);
00092 chain3Opt += " "; chain3Opt += geomP06id;
00093 }
00094 else if( prodName == "P07ic" ){
00095 chain3Opt.Prepend(DbVP07icCuCu);
00096 chain3Opt += " "; chain3Opt += geomP07ic;
00097 }
00098 else if ( prodName == "P08icAuAu" ){
00099 chain3Opt.Prepend(DbVP08icAuAu);
00100 chain3Opt += " "; chain3Opt += geomP08ic;
00101 }
00102 else{
00103 cout << "Choice prodName does not correspond to known chain. Processing impossible. " << endl;
00104 return;
00105 }
00106
00107
00108 gROOT->LoadMacro("bfc.C");
00109 if (gClassTable->GetID("StBFChain") < 0) Load();
00110
00111 Chain = new StChain("Embedding");
00112
00113 bfc(-1,chain1Opt,daqfile);
00114 chain1 = chain;
00115 chain1->SetName("One");
00116 Chain->cd();
00117
00118 bfc(-1,chain2Opt);
00119 chain2 = chain;
00120 chain2->SetName("Two");
00121 Chain->cd();
00122 if (chain2->GetOption("TRS")){
00123 StTrsMaker *trsMk = (StTrsMaker *) chain2->GetMaker("Trs");
00124 if (! trsMk) {
00125 cout << "Cannot find Trs in chain2" << endl;
00126 return;
00127 }
00128 trsMk->setNormalFactor(1.05);
00129 trsMk->SetMode(0);
00130 }
00131
00132 gSystem->Load("StMixerMaker");
00133 StMixerMaker *mixer = new StMixerMaker("Mixer","daq","trs");
00134
00135 mixer->SetInput("Input1","StDAQReader");
00136 mixer->SetInput("Input2","Event");
00137
00138
00139
00140
00141 TString OutputFileName(gSystem->BaseName(daqfile));
00142 OutputFileName.ReplaceAll("*","");
00143 OutputFileName.ReplaceAll(".daq","");
00144
00145 OutputFileName.Append(".root");
00146 bfc(-1,chain3Opt,0,OutputFileName);
00147 chain3 = chain;
00148 chain3->SetName("Three");
00149 Chain->cd();
00150 StMaker *tpcdaqMk = chain3->GetMaker("tpc_raw");
00151 if(!tpcdaqMk ) {
00152 cout <<" Error: no tpc daq maker. End. "<<endl;
00153 return;
00154 }
00155 tpcdaqMk->SetMode(1);
00156 tpcdaqMk->SetInput("Event","MixerEvent");
00157 Chain->cd();
00158
00159 {
00160 TDatime t;
00161 gMessMgr->QAInfo() << Form("Run is started at Date/Time %i/%i",t.GetDate(),t.GetTime()) << endm;
00162 }
00163 gMessMgr->QAInfo() << Form("Run on %s in %s",gSystem->HostName(),gSystem->WorkingDirectory()) << endm;
00164 gMessMgr->QAInfo() << Form("with %s", Chain->GetCVS()) << endm;
00165
00166 StPrepEmbedMaker *embMk = (StPrepEmbedMaker *) Chain->Maker("PrepEmbed");
00167 if (! embMk) return;
00168 embMk->SetTagFile(tagfile);
00169
00170 embMk->SetOpt( pt_low, pt_high, eta_low, eta_high, 0., 6.283185, mode);
00171
00172 embMk->SetPartOpt( pid,mult);
00173
00174
00175 embMk->SetSkipMode(kFALSE) ;
00176
00177
00178
00179
00180 if ( !triggers.empty() ){
00181 for(std::vector<Int_t>::iterator iter = triggers.begin(); iter != triggers.end(); iter++){
00182 embMk->SetTrgOpt((*iter)) ;
00183 }
00184 }
00185
00186
00187 embMk->SetZVertexCut(vzlow, vzhigh) ;
00188
00189 TAttr::SetDebug(0);
00190 Chain->SetAttr(".Privilege",0,"*" );
00191 Chain->SetAttr(".Privilege",1,"StBFChain::*" );
00192 Chain->SetAttr(".Privilege",1,"StIOInterFace::*" );
00193 Chain->SetAttr(".Privilege",1,"St_geant_Maker::*");
00194 Chain->SetAttr(".Privilege",1,"StPrepEmbedMaker::*");
00195 StMaker *SsdEmbed = Chain->Maker("SsdEmbed");
00196 if (SsdEmbed) {
00197 cout << "SsdEmbed has been found ----------------------------------------" << endl;
00198 SsdEmbed->SetInput("SsdRealData","One/.make/SpaStrip/.data/spa_strip");
00199 SsdEmbed->SetInput("SsdSimuData","Two/.make/SpaStrip/.data/spa_strip");
00200 StMaker *SsdPoint = Chain->Maker("SsdPoint");
00201 if (SsdPoint) {
00202 cout << "SsdPoint has been found----------------------------------------" << endl;
00203 SsdPoint->SetInput("SpaStrip","SsdEmbed");
00204 }
00205 }
00206
00207 if (Nevents < 0) return;
00208 Int_t iInit = Chain->Init();
00209 if (iInit >= kStEOF) {Chain->FatalErr(iInit,"on init"); return;}
00210 StMaker *treeMk = Chain->GetMaker("outputStream");
00211
00212 Chain->EventLoop(Nevents,treeMk);
00213 gMessMgr->QAInfo() << "Run completed " << endm;
00214 gSystem->Exec("date");
00215 }
00216
00217
00218
00219
00220