6 #include "TObjString.h"
8 #include "TInterpreter.h"
9 #include "TClassTable.h"
10 #include "StMemStat.h"
11 #include "StBFChain.h"
12 #include "StBFChainOpt.h"
13 #include "St_db_Maker/St_db_Maker.h"
14 #include "StTreeMaker/StTreeMaker.h"
15 #include "StIOMaker/StIOMaker.h"
16 #include "StMessMgr.h"
17 #include "StShadowMaker/StShadowMaker.h"
26 #define STR_OBSOLETE "WARNING *** Option is OBSOLETE ***"
38 #define BFC_DBREGEXP "(dbv|sdt)(\\d+)(_)(.*)(_)(.*)"
60 static const Char_t *path =
"./StRoot/StBFChain:$STAR/StRoot/StBFChain";
61 TString fileName(
"BFC.C");
62 Char_t *file = gSystem->Which(path,fileName,kReadPermission);
64 if (! file) { LOG_FATAL << Form(
"StBFChain::Setup\tFile %s has not been found in path %s",fileName.Data(),path) << endm; }
65 else { LOG_WARN << Form(
"StBFChain::Setup\tFile %s has been found as %s",fileName.Data(),file) << endm; }
68 if (! file) Fatal(
"StBFChain::Setup",
"File %s has not been found in path %s",fileName.Data(),path);
69 else Warning(
"StBFChain::Setup",
"File %s has been found as %s",fileName.Data(),file);
73 gInterpreter->ProcessLine(cmd);
74 fchainOpt = (
St_Bfc *) gInterpreter->Calc(
"CreateTable()");
77 gInterpreter->ProcessLine(cmd);
80 fNoChainOptions = fchainOpt->
GetNRows();
81 fBFC = fchainOpt->GetTable();
83 const DbAlias_t *DbAlias = GetDbAliases();
84 Bfc_st row = {
"",
"",
"",
"db,detDb",
"",
"",
"",kFALSE};
85 for (Int_t i = 0; DbAlias[i].tag; i++) {
86 for (Int_t r = 0; r < 2; r++) {
89 dbTag += DbAlias[i].tag;
90 if (!
kOpt(dbTag,kFALSE)) {
91 memset (&row.Key, 0,
sizeof(row.Key));
92 memcpy (&row.Key, dbTag.Data(), dbTag.Length());
93 fchainOpt->
AddAt(&row);
94 fNoChainOptions = fchainOpt->
GetNRows();
95 fBFC = fchainOpt->GetTable();
119 static const Char_t *prefix[3] = {
"lib_",
"lib",
""};
120 Int_t status =
kStOk;
122 TString lib(gSystem->GetLibraries(0,
"D"));
123 TObjArray LoadedLibs;
124 ParseString(lib,LoadedLibs);
125 TIter next(&LoadedLibs);
126 TObjString *LoadedLib;
127 while ((LoadedLib = (TObjString *) next())){
128 TString Base(gSystem->BaseName(LoadedLib->GetName()));
129 Base.ReplaceAll(
".so",
"");
130 Base.ReplaceAll(
".sl",
"");
131 if (Base.BeginsWith(
"lib_")) Base.ReplaceAll(
"lib_",
"");
132 if (Base.BeginsWith(
"lib")) Base.ReplaceAll(
"lib",
"");
133 LoadedLib->SetString(Base);
135 for (i = 1; i< fNoChainOptions; i++) {
137 if (strlen(fBFC[i].Libs) > 0) {
139 ParseString(fBFC[i].Libs,Libs);
141 TObjString *libe = 0;
143 while ((libe = (TObjString *) nextL())) {
144 TString libN(libe->GetString());
145 if (libN.BeginsWith(
"lib_")) libN.ReplaceAll(
"lib_",
"");
146 if (libN.BeginsWith(
"lib")) libN.ReplaceAll(
"lib",
"");
149 for (Int_t j = 0; j < 3; j++) {
150 libL = prefix[j]; libL += libN;
152 if ((path = gSystem->DynamicPathName(libL,kTRUE)))
break;
156 TIter next(&LoadedLibs);
157 TObjString *LoadedLib;
158 while ((LoadedLib = (TObjString *) next())){
159 TString Base(LoadedLib->GetName());
161 if (Base == libN) {iok = 1;
break;}
163 if (iok > 0)
continue;
169 iok = gSystem->Load(libL);
172 LOG_FATAL <<
"problem with loading of " << libL.Data() << endm;
173 LOG_FATAL << fBFC[i].Key <<
" is switched off \t!!!!" << endm;
178 Int_t libraryload =
kStErr;
179 assert(libraryload!=
kStErr);
182 LOG_QA << Form(
"Library %-22s [%15s] (%s)\tis loaded",libL.Data(),fBFC[i].Key,path) << endm;
183 StMemStat::doPs(libL.Data(),
"Load");
184 LoadedLibs.Add(
new TObjString(libN));
187 if ( ! index(fBFC[i].Libs,
',') || Debug() > 1 ) {
188 LOG_WARN <<
"No path for Key=" << fBFC[i].Key <<
"-> Searched for [" << libL
189 <<
"] from Libs=" << fBFC[i].Libs <<
" (will proceed)" << endm;
216 Int_t status =
kStOk;
218 if (! fNoChainOptions)
return status;
219 Long64_t maxsize = kMaxLong64;
220 TTree::SetMaxTreeSize(maxsize);
221 for (i = 1; i< fNoChainOptions; i++) {
222 if (! fBFC[i].Flag)
continue;
223 TString maker(fBFC[i].Maker);
224 if (maker ==
"")
continue;
225 TString Key(fBFC[i].Key);
226 TString name(fBFC[i].Name);
231 if (maker ==
"St_db_Maker" || maker ==
"StTpcDbMaker" ||
232 maker ==
"StSvtDbMaker" || maker ==
"StSsdDbMaker" || maker ==
"StSstDbMaker" ||
233 maker ==
"StDetectorDbMaker" ||
234 maker ==
"StMagFMaker" ||
235 maker ==
"StEEmcDbMaker" ||
236 maker ==
"St_geant_Maker" ||
237 maker ==
"StVMCMaker") {
238 mk = GetTopChain()->GetMakerInheritsFrom(maker);
240 if (maker ==
"St_geant_Maker" || maker ==
"StVMCMaker") {
241 LOG_INFO <<
"StBFChain::Instantiate ignore request for instantiation of " << maker
242 <<
"(\"" << fBFC[i].Name <<
"\") because chain alreary has one." << endm;
245 if (name ==
"" || name == mk->
GetName()) {
246 LOG_INFO <<
"StBFChain::Instantiate ignore request for instantiation of " << maker
247 <<
"(\"" << fBFC[i].Name <<
"\") because chain alreary has one"
248 <<
" but accumulate options" << endm;
253 if (strlen(fBFC[i].Chain) > 0) myChain = GetMaker(fBFC[i].Chain);
254 if (maker ==
"St_db_Maker"){
255 if (Key.CompareTo(
"db",TString::kIgnoreCase) == 0) {
258 TString MySQLDb(
"MySQL:StarDb");
259 TString MainCintDb(
"$STAR/StarDb");
260 TString MainCintDbObj(
"$STAR/.$STAR_HOST_SYS/obj/StarDb");
261 TString MyCintDb(
"$PWD/StarDb");
262 TString MyCintDbObj(
"$PWD/.$STAR_HOST_SYS/obj/StarDb");
263 if (GetOption(
"NoMySQLDb")) {MySQLDb =
"";}
266 if (GetOption(
"NoLocalCintDb")) {MyCintDb =
"";}
267 if (GetOption(
"NoStarCintDb") ) {MainCintDb =
"";}
268 if (GetOption(
"NoCintDb") ) {MainCintDb =
""; MyCintDb =
"";}
272 for (j = 0; j < 10; j++) Dirs[j] =
"";
274 if (MySQLDb !=
"") {Dirs[j] = MySQLDb; j++;}
275 if (MainCintDb !=
"") {Dirs[j] = MainCintDb; j++;}
276 if (MainCintDbObj !=
"") {Dirs[j] = MainCintDbObj; j++;}
277 if (MyCintDb !=
"") {Dirs[j] = MyCintDb; j++;}
278 if (MyCintDbObj !=
"") {Dirs[j] = MyCintDbObj; j++;}
279 dbMk =
new St_db_Maker(fBFC[i].Name,Dirs[0],Dirs[1],Dirs[2],Dirs[3],Dirs[4]);
280 if (!dbMk)
goto Error;
282 TString namec = dbMk->
GetName();
283 int len =
sizeof(fBFC[i].Name);
284 if ( namec.Length() <= len){
285 strncpy (fBFC[i].Name, namec.Data(),len);
287 gMessMgr->Error() <<
"Maker name [" << namec
288 <<
"] length is > " << len
289 <<
" - increase BFC Name field length" << endm;
293 TString flavors =
"ofl";
296 if (GetOption(
"FXT")) flavors.Prepend(
"FXT+");
299 if (GetOption(
"Simu") && ! GetOption(
"NoSimuDb")) flavors.Prepend(
"sim+");
303 TString firstFileName = fSetFiles->GetFileName(0);
304 firstFileName = firstFileName(firstFileName.Last(
'/')+1,firstFileName.Length());
305 if (firstFileName.BeginsWith(
"st_")) {
306 TString fileStream = firstFileName(3,firstFileName.Index(
'_',3)-3);
307 if (fileStream.Length()>0) flavors.Prepend(fileStream +=
'+');
311 LOG_INFO <<
"Using DB flavors: " << flavors << endm;
312 dbMk->SetFlavor(flavors.Data());
315 if (GetOption(
"dbSnapshot")) dbMk->SetAttr(
"dbSnapshot",
"dbSnapshot.root",dbMk->
GetName());
320 if (!mk && maker ==
"StIOMaker" && fSetFiles) {
322 if (GetOption(
"InTree")) {
323 Char_t line[80] =
"bfcTree";
324 Int_t k =
kOpt(
"InTree");
325 sscanf(fBFC[k].Comment,
"%s",line);
326 inpMk =
new StIOMaker(
"inputStream",
"r",fSetFiles,line);
328 else inpMk =
new StIOMaker(
"inputStream",
"r",fSetFiles);
332 int len =
sizeof(fBFC[i].Name);
333 if ( namec.Length() <= len){
334 strncpy (fBFC[i].Name, namec.Data() , len);
336 gMessMgr->Error() <<
"Maker name [" << namec
337 <<
"] length is > " << len
338 <<
" - increase BFC Name field length" << endm;
341 SetInput(
"StDAQReader",
".make/inputStream/.make/inputStream_DAQ/.const/StDAQReader");
342 if (GetOption(
"ReadAll")) {
344 const Char_t *allBranches[] = {
345 "emc_rawBranch",
"eventBranch",
"ftpc_rawBranch",
346 "geantBranch",
"globalBranch",
"McEventBranch",
"svt_hitsBranch",
"svt_tracksBranch",
347 "tpc_hitsBranch",
"trgBranch",0};
348 for (Int_t i = 0; allBranches[i]; i++) inpMk->SetBranch(allBranches[i],0,
"r");
350 if (GetOption(
"adcOnly")) mk->SetAttr(
"adcOnly",1); ;
355 if (!mk && maker ==
"StTreeMaker" && fFileOut !=
"") {
357 if (GetOption(
"OutTree")) {
358 Char_t line[80] =
"bfcTree";
359 Int_t k =
kOpt(
"OutTree");
360 sscanf(fBFC[k].Comment,
"%s",line);
361 treeMk =
new StTreeMaker(
"outputStream",fFileOut.Data(),line);
363 else treeMk =
new StTreeMaker(
"outputStream",fFileOut.Data());
366 TString namec = treeMk->
GetName();
367 int len =
sizeof(fBFC[i].Name);
368 if ( namec.Length() <= len ){
369 strncpy (fBFC[i].Name, namec.Data() , len);
371 gMessMgr->Error() <<
"Maker name [" << namec
372 <<
"] length is > " << len
373 <<
" - increase BFC Name field length" << endm;
383 if (strlen(fBFC[i].Name) > 0) mk = New(fBFC[i].Maker,fBFC[i].Name);
384 else mk = New(fBFC[i].Maker);
386 LOG_FATAL << Form(
"StBFChain::Instantiate() problem with instantiation Maker=[%s] Name=[%s]",fBFC[i].Maker,fBFC[i].Name) << endm;
393 int len =
sizeof(fBFC[i].Name);
394 if ( namec.Length() <= len){
395 strncpy (fBFC[i].Name,namec.Data(),len);
397 gMessMgr->Error() <<
"Maker name [" << namec
398 <<
"] length is > " << len
399 <<
" - increase BFC Name field length" << endm;
403 if (maker ==
"StTpcDbMaker" && GetOption(
"laserIT")) mk->SetAttr(
"laserIT" ,kTRUE);
404 if (maker ==
"StDAQMaker") {
405 if (GetOption(
"adcOnly")) mk->SetAttr(
"adcOnly",1); ;
408 if (maker ==
"St_geant_Maker") {
410 if (!GetOption(
"fzin") &&
411 !GetOption(
"ntin") &&
412 !GetOption(
"gstar") &&
413 !GetOption(
"pythia")) NwGeant = 5;
414 if (GetOption(
"big")) NwGeant = 20;
415 if (GetOption(
"bigbig")) NwGeant = 40;
416 if (GetOption(
"huge")) NwGeant = 80;
417 ProcessLine(Form(
"((St_geant_Maker *) %p)->SetNwGEANT(%i);",mk,NwGeant));
418 if (GetOption(
"Higz")) ProcessLine(Form(
"((St_geant_Maker *) %p)->SetIwtype(1);",mk));
419 if (GetOption(
"paw")) ProcessLine(Form(
"((St_geant_Maker *) %p)->SetNwPAW(2);",mk));
420 if (GetOption(
"fzin") ||
422 GetOption(
"gstar") ||
423 GetOption(
"pythia") ||
424 GetOption(
"hijing") ||
425 GetOption(
"PrepEmbed") ||
429 if (GetOption(
"PrepEmbed") || GetOption(
"pythiaEmbed")) mk->SetAttr(
"Don'tTouchTimeStamp",kTRUE);
430 if (GetOption(
"flux")) mk->SetAttr(
"flux",kTRUE);
431 if (GetOption(
"pythia")) {
432 mk->SetAttr(
"Pythia",kTRUE);
433 if (GetOption(
"Wenu")) mk->SetAttr(
"Wenu",kTRUE);
434 if (GetOption(
"beamLine")) mk->SetAttr(
"beamLine",kTRUE);
436 if (GetOption(
"hijing")) {
437 mk->SetAttr(
"hijing",kTRUE);
450 if (maker ==
"StVMCMaker") {
451 if (GetOption(
"VMCPassive")) {
452 mk->SetAttr(
"VMCPassive",kTRUE);
455 if (GetOption(
"phys_off")) mk->SetAttr(
"phys_off",kTRUE);
456 if (GetOption(
"hadr_off")) mk->SetAttr(
"hadr_off",kTRUE);
458 if (ProcessLine(Form(
"((StVMCMaker *) %p)->SetInputFile(\"%s\")",mk,fInFile.Data())))
462 if (GetOption(
"Embedding")) mk->SetAttr(
"Embedding",kTRUE);
468 if (maker ==
"StiMaker" || maker ==
"StiVMCMaker" ) {
471 if ( GetOption(
"StiCA") ) {
472 mk->SetAttr(
"seedFinders",
"CA DEF");
476 if ( GetOption(
"hitreuseon") ){
477 mk->SetAttr(
"SetMaxTimes", 100);
481 mk->SetAttr(
"activeiTpc", GetOption(
"iTpcIT") ? kTRUE : kFALSE);
484 if (GetOption(
"NoSvtIT")){
485 mk->SetAttr(
"useSvt" ,kFALSE);
487 if (GetOption(
"SvtIT")){
488 mk->SetAttr(
"useSvt" ,kTRUE);
489 mk->SetAttr(
"activeSvt" ,kTRUE);
492 if ( GetOption(
"NoSsdIT") &&
493 !GetOption(
"SstIT") ){
494 mk->SetAttr(
"useSsd" ,kFALSE);
496 if (GetOption(
"SsdIT")){
497 mk->SetAttr(
"useSsd" ,kTRUE);
498 mk->SetAttr(
"activeSsd" ,kTRUE);
504 if (GetOption(
"HpdIT")){
505 mk->SetAttr(
"useHpd" ,kTRUE);
506 mk->SetAttr(
"activeHpd" ,kTRUE);
510 if (GetOption(
"NoPxlIT")) {
511 mk->SetAttr(
"usePxl" ,kTRUE);
512 mk->SetAttr(
"usePixel" ,kTRUE);
514 if (GetOption(
"PixelIT") || GetOption(
"PxlIT") ){
515 mk->SetAttr(
"usePxl" ,kTRUE);
516 mk->SetAttr(
"usePixel" ,kTRUE);
517 mk->SetAttr(
"activePxl" ,kTRUE);
518 mk->SetAttr(
"activePixel",kTRUE);
521 if (GetOption(
"NoIstIT")) {
522 mk->SetAttr(
"useIst" ,kTRUE);
524 if (GetOption(
"IstIT")){
525 mk->SetAttr(
"useIst" ,kTRUE);
526 mk->SetAttr(
"activeIst" ,kTRUE);
529 if (GetOption(
"NoSstIT")) {
530 mk->SetAttr(
"useSst" ,kTRUE);
532 if (GetOption(
"SstIT")){
533 mk->SetAttr(
"useSst" ,kTRUE);
534 mk->SetAttr(
"activeSst" ,kTRUE);
539 if (GetOption(
"BTofIT")){
540 mk->SetAttr(
"useBTof" ,kTRUE);
541 mk->SetAttr(
"activeBTof" ,kTRUE);
544 if (GetOption(
"StiPulls")) mk->SetAttr(
"makePulls" ,kTRUE);
545 if (GetOption(
"skip1row")) mk->SetAttr(
"skip1row" ,kTRUE);
546 if (GetOption(
"EastOff")) mk->SetAttr(
"EastOff" ,kTRUE);
547 if (GetOption(
"WestOff")) mk->SetAttr(
"WestOff" ,kTRUE);
548 if (GetOption(
"laserIT")) mk->SetAttr(
"laserIT" ,kTRUE);
549 if (GetOption(
"Alignment")) mk->SetAttr(
"Alignment" ,kTRUE);
550 if (GetOption(
"Cosmics")) mk->SetAttr(
"Cosmics" ,kTRUE);
554 if (maker==
"StGmtClusterMaker") {
555 if (GetOption(
"gmtCosmics")) mk->SetAttr(
"gmtCosmics", kTRUE);
558 if (maker==
"StKFVertexMaker" && GetOption(
"laserIT")) mk->SetAttr(
"laserIT" ,kTRUE);
560 if (maker==
"StGenericVertexMaker") {
562 if (GetOption(
"Sti") || GetOption(
"StiCA") || GetOption(
"StiVMC" ) ) mk->SetAttr(
"ITTF" , kTRUE);
563 if (GetOption(
"VFMinuit" ) ) mk->SetAttr(
"VFMinuit" , kTRUE);
564 if (GetOption(
"VFppLMV" ) ) mk->SetAttr(
"VFppLMV" , kTRUE);
565 if (GetOption(
"VFppLMV5" ) ) mk->SetAttr(
"VFppLMV5" , kTRUE);
566 if ( GetOption(
"VFPPVEv") ) {
567 gSystem->Load(
"StBTofUtil.so");
568 mk->SetAttr(
"VFPPVEv" , kTRUE);
570 else if (GetOption(
"VFPPV") && GetOption(
"Sti")) mk->SetAttr(
"VFPPV", kTRUE);
571 if (GetOption(
"VFPPVEvNoBtof")){
572 gSystem->Load(
"StBTofUtil.so");
573 mk->SetAttr(
"VFPPVEvNoBtof", kTRUE);
575 if (GetOption(
"VFPPVnoCTB" ) ) mk->SetAttr(
"VFPPVnoCTB" , kTRUE);
576 if (GetOption(
"VFFV" ) ) mk->SetAttr(
"VFFV" , kTRUE);
577 if (GetOption(
"VFMCE" ) ) mk->SetAttr(
"VFMCE" , kTRUE);
578 if (GetOption(
"VFMinuit2" ) ) mk->SetAttr(
"VFMinuit2" , kTRUE);
579 if (GetOption(
"VFMinuit3" ) ) mk->SetAttr(
"VFMinuit3" , kTRUE);
580 if (GetOption(
"beamLine" ) ) mk->SetAttr(
"BeamLine" , kTRUE);
581 if (GetOption(
"beamLine3D" ) ) mk->SetAttr(
"BeamLine3D" , kTRUE);
582 if (GetOption(
"CtbMatchVtx") ) mk->SetAttr(
"CTB" , kTRUE);
583 if (GetOption(
"min2trkVtx" ) ) mk->SetAttr(
"minTracks" , 2);
584 if (GetOption(
"VtxSeedCalG") ) mk->SetAttr(
"calibBeamline" , kTRUE);
585 if (GetOption(
"usePct4Vtx" ) ) mk->SetAttr(
"PCT" , kTRUE);
586 if (GetOption(
"useBTOF4Vtx") ) mk->SetAttr(
"BTOF" , kTRUE);
587 if (GetOption(
"useBTOFmatchOnly") ) mk->SetAttr(
"useBTOFmatchOnly", kTRUE);
588 if (GetOption(
"FXT" ) ) mk->SetAttr(
"FXT" , kTRUE);
592 if (GetOption(
"VFStoreX") ) mk->SetAttr(
"VFStore" , 100);
596 if (maker==
"StKFVertexMaker") {
597 if (GetOption(
"beamLine" ) ) mk->SetAttr(
"BeamLine" , kTRUE);
599 if (maker==
"StAssociationMaker") {
601 LOG_QA <<
"StBFChain::Instantiate Setting the Parameters for the Association Maker" << endm;
604 if (GetOption(
"ITTF") || GetOption(
"StiVMC") || GetOption(
"useInTracker"))
605 cmd = Form (
"((StAssociationMaker *) %p)->useInTracker();",mk);
606 cmd +=
"StMcParameterDB* parameterDB = StMcParameterDB::instance();";
609 cmd +=
"parameterDB->setXCutTpc(.5);";
610 cmd +=
"parameterDB->setYCutTpc(.5);";
611 cmd +=
"parameterDB->setZCutTpc(.5);";
613 cmd +=
"parameterDB->setReqCommonHitsTpc(3);";
616 cmd +=
"parameterDB->setRCutFtpc(.3);";
617 cmd +=
"parameterDB->setPhiCutFtpc(5*(3.1415927/180.0));";
619 cmd +=
"parameterDB->setReqCommonHitsFtpc(3);";
622 cmd +=
"parameterDB->setXCutSvt(.08);";
623 cmd +=
"parameterDB->setYCutSvt(.08);";
624 cmd +=
"parameterDB->setZCutSvt(.08);";
626 cmd +=
"parameterDB->setReqCommonHitsSvt(1);";
627 if (GetOption(
"IdTruth")) cmd += Form(
"((StAssociationMaker *) %p)->useIdAssoc();",mk);
630 if (maker ==
"StMiniMcMaker" && GetOption(
"IdTruth") && ! GetOption(
"OldMiniMc")) {
632 gMessMgr->QAInfo() <<
"StBFChain::Instantiate create simplified MiniMcTree in " << maker << endm;
637 if (GetOption(
"ppOpt") ) {
638 if (maker ==
"StTrsMaker")
642 if (maker ==
"StStrangeMuDstMaker" && GetOption(
"CMuDST")&& GetOption(
"StrngMuDST") ) {
644 mk -> SetAttr(
"DoV0", 1 );
645 mk -> SetAttr(
"DoXi", 1 );
646 mk -> SetAttr(
"DoKink", 1 );
647 mk -> SetAttr(
"SetNoKeep", 1 );
653 if ( maker ==
"StEmcRawMaker" && GetOption(
"BEmcDebug"))
657 if ( maker ==
"StEmcRawMaker" && GetOption(
"BEmcChkStat"))
658 mk->SetAttr(
"BEmcCheckStatus",kTRUE);
661 if ( maker ==
"StEmcRawMaker" && GetOption(
"picoWrite") ) {
666 if ( maker ==
"StTriggerSimuMaker" && GetOption(
"picoWrite") ) {
674 if (maker ==
"StMuDstMaker" && GetOption(
"ezTree") ){
675 TString cmd(Form(
"StMuDstMaker *pMuMk = (StMuDstMaker *) %p;",mk));
676 if ( ! GetOption(
"CMuDST")) cmd +=
"pMuMk->SetStatus(\"*\",0);";
677 cmd +=
"pMuMk->SetStatus(\"EztAll\",1);";
682 if (maker ==
"StFstRawHitMaker" && GetOption(
"fstEvtRawHit") ){
683 mk->SetAttr(
"fstEvtRawHit", kTRUE);
687 if (maker ==
"StMuDstMaker" && GetOption(
"fstMuRawHit") ){
688 mk->SetAttr(
"fstMuRawHit", kTRUE);
691 if ( maker ==
"StPicoDstMaker"){
692 if ( GetOption(
"picoWrite") ) mk->SetMode(1);
693 if ( GetOption(
"picoRead") ) mk->SetMode(2);
694 if ( GetOption(
"PicoVtxVpd")) mk->SetAttr(
"PicoVtxMode",
"PicoVtxVpd");
695 else if ( GetOption(
"PicoVtxFXT")) mk->SetAttr(
"PicoVtxMode",
"PicoVtxFXT");
696 else if ( GetOption(
"PicoVtxMtd")) mk->SetAttr(
"PicoVtxMode",
"PicoVtxMtd");
697 else if ( GetOption(
"PicoVtxVpdOrDefault")) mk->SetAttr(
"PicoVtxMode",
"PicoVtxVpdOrDefault");
698 else if ( GetOption(
"PicoVtxDefault")) mk->SetAttr(
"PicoVtxMode",
"PicoVtxDefault");
699 if ( GetOption(
"PicoCovMtxWrite")) mk->SetAttr(
"PicoCovMtxMode",
"PicoCovMtxWrite");
700 else if ( GetOption(
"PicoCovMtxSkip")) mk->SetAttr(
"PicoCovMtxMode",
"PicoCovMtxSkip");
701 if ( GetOption(
"PicoBEmcSmdWrite")) mk->SetAttr(
"PicoBEmcSmdMode",
"PicoBEmcSmdWrite");
702 else if ( GetOption(
"PicoBEmcSmdSkip")) mk->SetAttr(
"PicoBEmcSmdMode",
"PicoBEmcSmdSkip");
706 if (maker ==
"StLaserEventMaker"){
709 if (maker ==
"StDetectorDbMaker") {
710 if ( GetOption(
"DbRichSca") ) mk->SetMode(1);
712 if (maker ==
"StTpcRSMaker") {
713 if (! GetOption(
"TrsToF")) {
714 Int_t mode = mk->GetMode();
718 if (GetOption(
"EbyET0")) mk->SetAttr(
"EbyET0", kTRUE);
720 if (maker ==
"StTrsMaker") {
722 if (GetOption(
"TrsPileUp")) mode += 1;
723 if (GetOption(
"TrsToF")) mode += 2;
724 if (mode) mk->SetMode(mode);
728 if (maker ==
"StTofrMatchMaker"){
732 if (maker ==
"StSpaceChargeEbyEMaker") {
733 if ( GetOption(
"SpcChgCal") ||
734 GetOption(
"SpcChgCalG")) mk->SetMode(2);
735 if ( GetOption(
"SCScalerCal") ) mk->SetMode(4);
736 if ( GetOption(
"EastOff")) mk->SetAttr(
"EastOff",kTRUE);
737 if ( GetOption(
"WestOff")) mk->SetAttr(
"WestOff",kTRUE);
739 if (maker ==
"StEventQAMaker") {
740 if ( GetOption(
"QAalltrigs")) mk->SetAttr(
"allTrigs",kTRUE);
741 if ( GetOption(
"QAallevents")) mk->SetAttr(
"allEvents",kTRUE);
744 if(maker==
"StV0FinderMaker" && Key==
"v0svt"){
745 TString cmd(Form(
"StV0FinderMaker *V0mk=(StV0FinderMaker*) %p;",mk));
746 cmd +=
"V0mk->SetLanguageUsage(0);";
747 cmd +=
"V0mk->SetSVTUsage(1);";
748 cmd +=
"V0mk->SetV0LanguageUsage(3);";
751 if(maker==
"StXiFinderMaker" && Key==
"xisvt"){
752 TString cmd(Form(
"StXiFinderMaker *Ximk=(StXiFinderMaker*) %p;",mk));
753 cmd +=
"Ximk->SetLanguageUsage(0);";
754 cmd +=
"Ximk->SetSVTUsage(1);";
755 cmd +=
"Ximk->SetV0LanguageUsage(3);";
756 cmd +=
"Ximk->SetXiLanguageUsage(5);";
761 if (maker ==
"StTpcRTSHitMaker") {
762 if ( GetOption(
"TpxClu2D")) mk->SetAttr(
"TpxClu2D", kTRUE);
763 if ( GetOption(
"TPC23")) mk->SetAttr(
"TPC23", kTRUE);
765 if (maker ==
"StTpcDbMaker"){
766 if ( GetOption(
"Simu") && ! GetOption(
"NoSimuDb")) mk->SetAttr(
"Simu",kTRUE);
767 if ( GetOption(
"useLDV") ) mk->SetAttr(
"useLDV",kTRUE) ;
768 if ( GetOption(
"useCDV") ) mk->SetAttr(
"useCDV",kTRUE) ;
769 if ( GetOption(
"useNewLDV") ) mk->SetAttr(
"useNewLDV",kTRUE);
770 if ( GetOption(
"shadow") ) mk->SetAttr(
"NoReset",kTRUE);
771 if ( GetOption(
"ExB")){
772 mk->SetAttr(
"ExB", kTRUE);
773 if ( GetOption(
"EB1") ) mk->SetAttr(
"EB1", kTRUE);
774 else if ( GetOption(
"EB2") ) mk->SetAttr(
"EB2", kTRUE);
778 if(GetOption(
"RY1H") ||
779 GetOption(
"RY2000") ||
780 GetOption(
"RY2001") ||
781 GetOption(
"RY2001N") ||
782 GetOption(
"RY2003") ||
783 GetOption(
"RY2003X")) mk->SetAttr(
"OldRuns", kTRUE);
790 if( GetOption(
"OBmap") ) mk->SetAttr(
"OBmap" , kTRUE);
791 if( GetOption(
"OPr13") ) mk->SetAttr(
"OPr13" , kTRUE);
792 if( GetOption(
"OPr40") ) mk->SetAttr(
"OPr40" , kTRUE);
793 if( GetOption(
"OTwist") ) mk->SetAttr(
"OTwist" , kTRUE);
794 if( GetOption(
"OClock") ) mk->SetAttr(
"OClock" , kTRUE);
795 if( GetOption(
"OCentm") ) mk->SetAttr(
"OCentm" , kTRUE);
796 if( GetOption(
"OECap") ) mk->SetAttr(
"OECap" , kTRUE);
797 if( GetOption(
"OIFC") ) mk->SetAttr(
"OIFC" , kTRUE);
798 if( GetOption(
"OSpaceZ") ) mk->SetAttr(
"OSpaceZ" , kTRUE);
799 if( GetOption(
"OSpaceZ2") ) {
800 if( GetOption(
"FXT") ) mk->SetAttr(
"OSpaceFXT" , kTRUE);
801 else mk->SetAttr(
"OSpaceZ2" , kTRUE);
803 if( GetOption(
"OShortR") ) mk->SetAttr(
"OShortR" , kTRUE);
804 if( GetOption(
"OBMap2d") ) mk->SetAttr(
"OBMap2d" , kTRUE);
805 if( GetOption(
"OGridLeak") ) mk->SetAttr(
"OGridLeak" , kTRUE);
806 if( GetOption(
"OGridLeak3D")) mk->SetAttr(
"OGridLeak3D", kTRUE);
807 if( GetOption(
"OGridLeakFull")) mk->SetAttr(
"OGridLeakFull", kTRUE);
808 if( GetOption(
"OGGVoltErr") ) mk->SetAttr(
"OGGVoltErr" , kTRUE);
809 if( GetOption(
"OSectorAlign"))mk->SetAttr(
"OSectorAlign",kTRUE);
810 if( GetOption(
"ODistoSmear")) mk->SetAttr(
"ODistoSmear", kTRUE);
811 if( GetOption(
"OAbortGap")) mk->SetAttr(
"OAbortGap" , kTRUE);
815 if (maker ==
"StTpcHitMover" && GetOption(
"EbyET0")) {
816 mk->SetAttr(
"EbyET0", kTRUE);
818 if ((maker ==
"StdEdxY2Maker" || maker ==
"StTpcHitMover") &&
819 GetOption(
"EmbeddingShortCut")) {
820 mk->SetAttr(
"EmbeddingShortCut", kTRUE);
823 if (maker ==
"StdEdxY2Maker" && !GetOption(
"CalcdNdx")) {
824 mk->SetAttr(
"SkipdNdx", kTRUE);
826 if (maker ==
"StSvtDbMaker" || maker ==
"StSsdDbMaker"){
829 if (GetOption(
"Simu") && ! GetOption(
"NoSimuDb")) mk->SetMode(1);
833 if ((maker ==
"StFtpcClusterMaker" ||
834 maker ==
"StFtpcTrackMaker" ) &&
835 GetOption(
"fdbg")) mk->SetMode(mk->GetMode()+2);
836 if ( ( maker ==
"StFtpcClusterMaker" ||
837 maker ==
"StFtpcTrackMaker" ) &&
838 GetOption(
"flaser")) mk->SetMode(mk->GetMode()+1);
840 if ((maker ==
"StFtpcClusterMaker" ||
841 maker ==
"StFtpcTrackMaker" ) &&
842 GetOption(
"fgain")) mk->SetMode(mk->GetMode()+4);
846 if ( maker ==
"StPmdReadMaker" &&
847 GetOption(
"pmdRaw")) mk->SetAttr(
"pmdRaw",kTRUE);
853 if (maker ==
"StPxlSimMaker") {
854 if (GetOption(
"pxlSlowSim")) mk->SetAttr(
"useDIGMAPSSim",kTRUE);
858 if (maker ==
"StFmsDbMaker"){
859 if(fFmsGainCorrTag!=
"") mk->SetAttr(
"FmsGainCorr",fFmsGainCorrTag.Data());
864 if (maker ==
"StHitFilterMaker") {
865 if (GetOption(
"SvtHitFilt")){
867 LOG_QA <<
"SVT hit filter is ON" << endm;
868 TString cmd(Form(
"StHitFilterMaker *Filtmk=(StHitFilterMaker*) %p;",mk));
869 cmd +=
"Filtmk->setPtLowerCut(-99.);";
870 cmd +=
"Filtmk->setPtUpperCut(-99.);";
871 cmd +=
"Filtmk->setAbsEtaCut(-99);";
872 cmd +=
"Filtmk->setAbsZVertCut(30);";
874 }
else if (GetOption(
"TpcHitFilt")){
876 LOG_QA <<
"TPC hit filter is ON" << endm;
877 TString cmd(Form(
"StHitFilterMaker *Filtmk=(StHitFilterMaker*) %p;",mk));
878 cmd +=
"Filtmk->setPtLowerCut(-99.);";
879 cmd +=
"Filtmk->setPtUpperCut(-99.);";
880 cmd +=
"Filtmk->setAbsEtaCut(-99);";
881 cmd +=
"Filtmk->setAbsZVertCut(999);";
883 }
else if (GetOption(
"HftHitFilt")){
885 LOG_QA <<
"HFT hit filter is ON" << endm;
886 TString cmd(Form(
"StHitFilterMaker *Filtmk=(StHitFilterMaker*) %p;",mk));
887 cmd +=
"Filtmk->setAbsZVertCut(-1);";
888 cmd +=
"Filtmk->setKeepWestHighEtaHitsForFgt(0);";
891 LOG_QA <<
"Default hit filtering is ON" << endm;
894 if (GetOption(
"KeepTpcHit")) mode |= (1 << kTpcId);
895 if (GetOption(
"KeepSvtHit")) mode |= (1 << kSvtId);
898 if (GetOption(
"KeepFgtHit")){
899 TString cmd(Form(
"StHitFilterMaker *Filtmk=(StHitFilterMaker*) %p;",mk));
900 cmd +=
"Filtmk->setKeepWestHighEtaHitsForFgt(1.0);";
904 if (maker ==
"StMiniMcMaker" && fFileOut !=
"") {
905 ProcessLine(Form(
"((StMiniMcMaker *) %p)->setFileName(\"%s\");", mk, fFileOut.Data()));
907 if (maker ==
"StMcAnalysisMaker") {
909 if (GetOption(
"McAnaTpc")) mode += 0x1;
910 if (GetOption(
"McAnaSvt")) mode += 0x2;
911 if (GetOption(
"McAnaSsd")) mode += 0x4;
913 ProcessLine(Form(
"((StMaker *) %p)->SetMode(%i);", mk, mode));
915 if (maker ==
"StBTofCalibMaker") {
916 if (GetOption(
"UseProjectedVertex")) mk->SetAttr(
"UseProjectedVertex",kTRUE);
917 if (GetOption(
"setOutlierRej4BToft0")) mk->SetAttr(
"setPPPAOutlierRej", kTRUE);
918 if (GetOption(
"ImpBToFt0Mode")) mk->SetAttr(
"pppAMode", kTRUE);
919 if (GetOption(
"btofFXT")) mk->SetAttr(
"btofFXT", kTRUE);
921 if (maker ==
"StVpdCalibMaker" && GetOption(
"ImpBToFt0Mode")) mk->SetAttr(
"pppAMode", kTRUE);
923 if (maker ==
"StEventMaker" && fFiltTrg.Length()) {
924 mk->SetAttr(
"FiltTrg",(Int_t) (fFiltTrg.BeginsWith(
'+') ? 1 : -1));
925 TString FiltTrgFlavor = fFiltTrg(1,128);
926 if (FiltTrgFlavor.Length())
927 SetFlavor((FiltTrgFlavor +=
"+ofl").Data(),
"trgOfflineFilter");
929 if (maker ==
"StTagsMaker"){
930 if ( GetOption(
"shadow") ) mk->SetAttr(
"shadow",kTRUE);
935 if (name ==
"") strncpy (fBFC[i].Name,(Char_t *) mk->
GetName() ,
sizeof(fBFC[i].Name));
936 if (myChain) myChain->AddMaker(mk);
940 LOG_QA <<
" ======================================" << endm;
941 LOG_QA <<
" problem with Instantiation of " << fBFC[i].Maker << endm;
942 LOG_QA <<
" ======================================" << endm;
949 if (GetOption(
"MakeDoc")) MakeDoc();
951 if (GetOption(
"Debug")) SetDEBUG(1);
952 if (GetOption(
"Debug1")) SetDEBUG(1);
953 if (GetOption(
"Debug2")) SetDEBUG(2);
954 if (GetOption(
"nohistos")) SetAttr(
".histos",0,
"*");
955 else SetAttr(
".histos",1,
"*");
956 if (GetOption(
"NoRepeat")) gMessMgr->IgnoreRepeats();
958 if (GetOption(
"svt1hit")) SetAttr(
"minPrecHits",1,
"Sti");
959 if (GetOption(
"svt1hit")) SetAttr(
"minPrecHits",1,
"StiCA");
960 if (GetOption(
"svt1hit")) SetAttr(
"minPrecHits",1,
"StiVMC");
962 for (
unsigned int n=0 ; n < Gproperty.size() ; n++ ){
963 gMessMgr->QAInfo() <<
"+++ Setting attribute "
964 << (Gproperty.at(n)).Data() <<
" = " << (Gvalue.at(n)).Data() <<
" for "
965 << (Gpattern.at(n).Data()) << endm;
967 SetAttr( (Gproperty.at(n)).Data(),
968 (Gvalue.at(n)).Data(),
969 (Gpattern.at(n)).Data() );
975 Int_t StBFChain::Init() {
978 Info(
"Init",
"Time=%s Cwd=%s",td.AsString(),gSystem->pwd());
982 if (fNoChainOptions) {
984 if (GetOption(
"Simu") && ! (GetOption(
"mtin") || GetOption(
"PrepEmbed") || GetOption(
"pythiaEmbed"))) {
990 if (fEvtHddr->GetRunNumber() < 0 || fEvtHddr->GetRunNumber() >= 1000000) {
991 fEvtHddr->SetRunNumber(1);
995 if (fNoChainOptions) {
996 if (GetOption(
"NoOutput") || GetOption(
"EvOutOnly")) {
997 if (! GetOption(
"RMuDst"))
998 SetAttr(
".call",
"SetActive(0)",
"MuDst");
999 if (! GetOption(
"EvOutOnly")) {
1000 SetAttr(
".call",
"SetActive(0)",
"outputStream");
1002 SetAttr(
".call",
"SetActive(0)",
"kink2");
1003 SetAttr(
".call",
"SetActive(0)",
"StTagsMaker::");
1004 SetAttr(
".call",
"SetActive(0)",
"StStrangeMuDstMaker::");
1009 if (fNoChainOptions) {
1010 if (GetOption(
"misalign") && TClass::GetClass(
"AgPosition") )
1011 gROOT->ProcessLine(
"AgPosition::SetReal();");
1012 else if ( TClass::GetClass(
"AgPosition") )
1013 gROOT->ProcessLine(
"AgPosition::SetIdeal();");
1019 if (GetOption(
"Sti") || GetOption(
"StiCA") ||
1020 GetOption(
"StiVMC") ||GetOption(
"VMC") ||
1021 GetOption(
"VMCPassive")) {
1022 const DbAlias_t *DbAlias = GetDbAliases();
1023 for (Int_t i = 0; DbAlias[i].tag; i++) {
1025 dbTag += DbAlias[i].tag;
1026 if (GetOption(dbTag)) {
1027 TString path(
"./StarDb/AgiGeometry:$STAR/StarDb/AgiGeometry");
1028 if (GetOption(
"AgML")) {
1029 path =
"./StarDb/AgMLGeometry:$STAR/StarDb/AgMLGeometry";
1031 if (GetOption(
"VmcGeo")) {
1032 path =
"./StarDb/VmcGeo:$STAR/StarDb/VmcGeo";
1034 TString geom(
"Geometry.");
1035 geom += DbAlias[i].geometry;
1037 Char_t *file = gSystem->Which(path.Data(),geom,kReadPermission);
1039 LOG_INFO <<
"StBFChain::Init force load of " << file << endm;
1040 TString command =
".L "; command += file;
1041 gInterpreter->ProcessLine(command);
1042 gInterpreter->Calc(
"CreateTable()");
1043 command.ReplaceAll(
".L ",
".U ");
1044 gInterpreter->ProcessLine(command);
1047 LOG_INFO <<
"StBFChain::Init file for geometry tag " << geom <<
" has not been found in path" << path << endm;
1055 return StChain::Init();
1061 TFile *tf = GetTFile();
1062 if (tf) {tf->Write(); tf->Flush(); tf->Close();
delete tf; SetTFile(0);}
1063 if (!fBFC)
return kStOK;
1065 SafeDelete(fchainOpt);
1073 Int_t StBFChain::AddAB (
const Char_t *mkname,
const StMaker *maker,
const Int_t Opt) {
1074 if (! maker || strlen(mkname) == 0)
return kStErr;
1075 StMaker *parent = maker->GetParentMaker();
1077 TList *list = parent->GetMakeList();
1078 list->Remove((
StMaker *)maker);
1081 parent = mk->GetParentMaker();
if (!parent)
return kStErr;
1082 TList *list = parent->GetMakeList();
if (!list)
return kStErr;
1083 if (Opt > 0) list->AddAfter (mk,(
StMaker*)maker);
1084 else list->AddBefore(mk,(
StMaker*)maker);
1089 Int_t StBFChain::ParseString (
const TString &tChain, TObjArray &Opt, Bool_t Sort) {
1091 TObjArray *obj = tChain.Tokenize(
"[^ ;,]+");
1092 Int_t nParsed = obj->GetEntries();
1094 if (GetChain() && GetChain()->Debug() > 2) {
1095 gMessMgr->QAInfo() <<
"ParseString " << tChain.Data() << endm;
1096 for (k = 0; k < nParsed; k++) {
1098 gMessMgr->QAInfo() << k <<
"\t" << ((TObjString *) obj->At(k))->
GetName() << endm;
1102 for (k = 0; k < nParsed; k++) {
if (obj->At(k)) {
if (k != N) obj->AddAt(obj->At(k),N); N++;}}
1106 if (curChain && Sort) {
1107 TArrayI idT(nParsed); Int_t *idx = idT.GetArray();
1108 TArrayI kdT(nParsed); Int_t *kdx = kdT.GetArray();
1109 for (k = 0; k < nParsed; k++) {
1110 TString
string = ((TObjString *) obj->At(k))->GetString();
1111 kdx[k] = TMath::Abs(curChain->
kOpt(
string,kFALSE));
1113 TMath::Sort(nParsed,kdx,idx,0);
1115 for (k = 0; k < nParsed; k++) {
1116 Opt.AddAtAndExpand(obj->At(idx[k]),k);
1117 if (k == 0) sChain = ((TObjString *)Opt[k])->GetString();
1118 else {sChain +=
","; sChain += ((TObjString *)Opt[k])->GetString();}
1120 if (N > 1 && curChain->Debug() > 2) {
1121 gMessMgr->QAInfo() <<
"Requested chain is :\t" << tChain.Data() << endm;
1122 gMessMgr->QAInfo() <<
"Sorted chain is :\t" << sChain.Data() << endm;
1124 }
else for (k = 0; k < nParsed; k++) Opt.AddAtAndExpand(obj->At(k),k);
1125 obj->SetOwner(kFALSE);
1134 Int_t kO =
kOpt(&Tag, Check);
1149 for (Int_t i = 1; i< fNoChainOptions; i++) {
1150 opt = TString(fBFC[i].Key);
1152 nopt = TString(
"-");
1154 if (Tag == opt) {
return i;}
1155 else {
if (Tag == nopt) {
return -i;}}
1156 opt = fBFC[i].Maker;
1159 if (Tag == opt) {
return i;}
1160 else {
if (Tag == nopt) {
return -i;}}
1173 if (Tag.BeginsWith(
"dbv") || Tag.BeginsWith(
"sdt")) {
1176 if (Tag.Length() == 11 || Tag.Length() == 18)
return 0;
1181 if ( TPRegexp(BFC_DBREGEXP).Match(Tag) == 7)
return 0;
1183 if (Tag.BeginsWith(
"rung")) {
1189 if(Tag.BeginsWith(
"fmsGainCorr")){
1195 if ( Tag.BeginsWith(
"gopt") && Tag.Length() == 13 )
return 0;
1197 if ( Tag.BeginsWith(
"FiltTrg",TString::kIgnoreCase) ) {
1199 if ( TPRegexp(
"^FiltTrg(Inc|Exc)?(_.*)*$").Match(Tag,
"i") > 0)
return 0;
1201 if ( Tag.BeginsWith(
"VFStore",TString::kIgnoreCase) ||
1202 Tag.BeginsWith(
"TpcVpdVzDiffCut",TString::kIgnoreCase)
1206 if ( Tag.Index(
':') != 0)
return 0;
1211 gMessMgr->Error() <<
"Option " << Tag.Data() <<
" has not been recognized" << endm;
1217 void StBFChain::SetOptions(
const Char_t *options,
const Char_t *chainName) {
1218 TString tChain(options);
1220 Int_t nParsed = ParseString(tChain,Opts,kTRUE);
1221 for (Int_t l = 0; l < nParsed; l++) {
1222 TString Tag = ((TObjString *)Opts[l])->GetString();
1224 Int_t in = Tag.Index(
"=");
1226 TString subTag(Tag.Data(),in);
1228 kgo =
kOpt(subTag.Data());
1230 int len=
sizeof(fBFC[kgo].Comment);
1231 memset(fBFC[kgo].Comment,0,len);
1232 TString Comment(Tag.Data()+in+1,Tag.Capacity()-in-1);
1233 if ( Comment.Length() <= len ){
1234 strncpy (fBFC[kgo].Comment, Comment.Data(),
sizeof(fBFC[kgo].Comment));
1235 gMessMgr->QAInfo() << Form(
" Set %s = %s", fBFC[kgo].Key,fBFC[kgo].Comment) << endm;
1237 gMessMgr->Error() << Form(
" Cpy problem [%s] is > %d - adjust BFC Comment field size",
1238 Comment.Data(),len) << endm;
1244 kgo =
kOpt(Tag.Data(),kFALSE);
1248 TString Comment(fBFC[kgo].Comment);
1249 TString Opts(fBFC[kgo].Opts);
1250 if (Tag.BeginsWith(
"Test.",TString::kIgnoreCase) && ! Comment.BeginsWith(
"/star/") &&
1251 Opts.BeginsWith(
"test_",TString::kIgnoreCase)) {
1252 SetOptions(Opts,Tag);
1254 if ((Tag.BeginsWith(
"Test.",TString::kIgnoreCase) ||
1255 Tag.BeginsWith(
"test_",TString::kIgnoreCase) ||
1256 Tag.BeginsWith(
"eval_",TString::kIgnoreCase)) && Comment.BeginsWith(
"/star/") ) {
1258 gMessMgr->QAInfo() <<
"Default Test chain set " << fBFC[fkChain].Key <<
" with input " << fBFC[fkChain].Comment << endm;
1271 if (Tag.BeginsWith(
"dbv")) {
1272 if (Tag.Length() == 11) (
void) sscanf(Tag.Data(),
"dbv%8d",&FDate);
1273 if (Tag.Length() == 18) (
void) sscanf(Tag.Data(),
"dbv%8d.%6d",&FDate,&FTime);
1274 if (Tag.Length() == 11 || Tag.Length() == 18) {
1275 gMessMgr->QAInfo() << Tag.Data() <<
" ... but still will be considered as a dynamic timestamp (Max DB EntryTime) "
1276 << FDate <<
"." << FTime << endm;
1277 #ifdef USE_BFCTIMESTAMP
1281 TObjArray *subStrL = TPRegexp(BFC_DBREGEXP).MatchS(Tag);
1286 TS.Date = (((TObjString *) subStrL->At(2))->GetString()).Atoi();
1288 TS.Detector = ((TObjString *) subStrL->At(4))->GetString();
1289 TS.Realm = ((TObjString *) subStrL->At(6))->GetString();
1291 if ( TS.Realm.IsNull() ){ realm =
"*";}
1292 else { realm = TS.Realm;}
1294 GTSOptions.push_back(TS);
1296 LOG_WARN <<
"Override timestamp for detector requested\n\t"
1297 <<
"Detector " << TS.Detector <<
"\n\t"
1298 <<
"Realm " << realm <<
"\n\t"
1299 <<
"Date " << TS.Date <<
"\n\t"
1300 <<
"Time " << TS.Time << endm;
1304 }
else if (Tag.BeginsWith(
"sdt")) {
1305 if (Tag.Length() == 11) (
void) sscanf(Tag.Data(),
"sdt%8d",&FDateS);
1306 if (Tag.Length() == 18) (
void) sscanf(Tag.Data(),
"sdt%8d.%6d",&FDateS,&FTimeS);
1307 if (Tag.Length() == 11 || Tag.Length() == 18) {
1308 gMessMgr->QAInfo() << Tag.Data() <<
" ... but still will be considered as a dynamic timestamp (Event Time) "
1309 << FDateS <<
"." << FTimeS << endm;
1315 }
else if ( Tag.BeginsWith(
"gopt") && Tag.Length() == 13){
1318 char GOptName[4],GOptValue[7];
1319 TString property(
".gopt.");
1322 (void) sscanf(Tag.Data(),
"gopt%3s%6s",GOptName,GOptValue);
1326 property += GOptName;
1327 Gproperty.push_back(property);
1328 Gvalue.push_back(GOptValue);
1329 Gpattern.push_back(
"*");
1339 gMessMgr->QAInfo() << Tag.Data() <<
" ... this will set an general attribute "
1340 <<
property.Data() <<
" with value " << GOptValue <<
" to "
1346 }
else if (Tag.BeginsWith(
"rung")) {
1348 if (Tag.Length() > 4) (
void) sscanf(Tag.Data(),
"rung.%d",&fRunG);
1349 gMessMgr->QAInfo() << Tag.Data() <<
" will be considered as Run number (& rndm seed set) "
1350 << fRunG <<
" for simulation." << endm;
1354 }
else if (Tag.BeginsWith(
"VFStore" ,TString::kIgnoreCase) ||
1355 Tag.BeginsWith(
"TpcVpdVzDiffCut",TString::kIgnoreCase)
1358 Ssiz_t idx = Tag.Index(
':');
1364 Gproperty.push_back(Tag(0,idx));
1365 Gvalue.push_back(Tag(idx+1,64));
1367 Gpattern.push_back(
"*");
1369 gMessMgr->QAInfo() <<
"Detecting " << Tag(0,idx).Data() <<
" = " << Tag(idx+1,64).Data() <<
" as global property" << endm;
1376 }
else if (Tag.BeginsWith(
"FiltTrg",TString::kIgnoreCase)) {
1377 TString filtTrgTag = Tag;
1378 Ssiz_t flavorIdx = Tag.Index(
'_');
1379 if (flavorIdx > 0) {
1380 filtTrgTag = Tag(0,flavorIdx);
1381 fFiltTrg = Tag(flavorIdx+1,64);
1383 if (filtTrgTag.CompareTo(
"FiltTrgExc",TString::kIgnoreCase)==0) {
1384 gMessMgr->QAInfo() <<
"Trigger Filtering exclude with flavor=" << fFiltTrg << endm;
1385 fFiltTrg.Prepend(
'-');
1386 }
else if (filtTrgTag.CompareTo(
"FiltTrgInc",TString::kIgnoreCase)==0 ||
1387 filtTrgTag.CompareTo(
"FiltTrg" ,TString::kIgnoreCase)==0) {
1388 gMessMgr->QAInfo() <<
"Trigger Filtering include with flavor=" << fFiltTrg << endm;
1389 fFiltTrg.Prepend(
'+');
1395 }
else if (Tag.BeginsWith(
"fmsGainCorr",TString::kIgnoreCase)) {
1396 fFmsGainCorrTag = Tag;
1399 kgo =
kOpt(Tag.Data(),kFALSE);
1404 static const Char_t *path =
".:.$STAR_HOST_SYS/lib::.$STAR_HOST_SYS/LIB:$STAR/.$STAR_HOST_SYS/lib:$STAR/.$STAR_HOST_SYS/LIB";
1405 TString File = Tag; File +=
".so";
1406 Char_t *file = gSystem->Which(path,File.Data(),kReadPermission);
1409 Bfc_st row = {
"",
"",
"",
"",
"",
"",
"",kTRUE};
1410 memcpy (&row.Key, Tag.Data(), Tag.Length());
1411 if (Tag.Contains(
"Maker")) memcpy (&row.Maker, Tag.Data(), Tag.Length());
1412 memcpy (&row.Libs, Tag.Data(), Tag.Length());
1413 fchainOpt->
AddAt(&row);
1414 fNoChainOptions = fchainOpt->
GetNRows();
1415 fBFC = fchainOpt->GetTable();
1418 kgo =
kOpt(Tag.Data(),kFALSE);
1422 gMessMgr->QAInfo() <<
" Invalid Option " << Tag.Data() <<
". !! ABORT !! " << endm;
1437 assert(k<fNoChainOptions);
1438 Int_t n = strlen(fBFC[k].Opts);
1439 if (n > 0) SetOptions(fBFC[k].Opts,fBFC[k].Key);
1440 if (!fBFC[k].Flag) {
1441 fBFC[k].Flag = kTRUE;
1442 gMessMgr->QAInfo() << Form(
" Switch On %20s by %s", fBFC[k].Key, chainName) << endm;
1445 assert(-k<fNoChainOptions);
1446 if (k < 0 && fBFC[-k].Flag) {
1447 fBFC[-k].Flag = kFALSE;
1448 gMessMgr->QAInfo() << Form(
" Switch Off %20s by %s", fBFC[-k].Key, chainName) << endm;
1455 Bool_t StBFChain::GetOption(
const Int_t k)
const
1457 return (k>0 && k <fNoChainOptions) ? fBFC[k].Flag : kFALSE;
1482 Int_t o =
kOpt(Opt);
1484 else if(!GetOption(o))
return NULL;
1485 else return(fBFC[o].Comment);
1520 TString tChain(chainOpts);
1524 if (tChain ==
"" || tChain.CompareTo(
"ittf",TString::kIgnoreCase) == 0) {
1525 gMessMgr->QAInfo() <<
"\tPossible Chain Options are:" << endm;
1526 for (k=0;k<fNoChainOptions;k++)
1528 << Form(
" %3d: %-30s:%-12s:%-12s:%s:%s:%s:%s"
1529 ,k,fBFC[k].Key,fBFC[k].Name,fBFC[k].Chain,fBFC[k].Opts,fBFC[k].Maker,fBFC[k].Libs,fBFC[k].Comment)
1534 TString STAR_VERSION(
"$STAR_VERSION");
1535 gSystem->ExpandPathName(STAR_VERSION);
1536 gMessMgr->QAInfo() <<
"==============================================" << endm;
1537 gMessMgr->QAInfo() <<
"============= You are in " << STAR_VERSION.Data() <<
" ===============" << endm;
1538 gMessMgr->QAInfo() <<
"Requested chain " <<
GetName() <<
" is :\t" << tChain.Data() << endm;
1539 SetOptions(tChain,
"Chain");
1540 if (GetOption(
"NewTpcAlignment")) {
1541 gMessMgr->QAInfo() <<
"Set environment to use NewTpcAlignment" << endm;
1542 gEnv->SetValue(
"NewTpcAlignment",1);
1544 if (!GetOption(
"NoDefault")) {
1546 if (gClassTable->GetID(
"TGiant3") >= 0) {
1548 SetOption(
"-VMCPassive",
"Default,TGiant3");
1549 SetOption(
"-VMCAppl",
"Default,TGiant3");
1550 SetOption(
"-RootVMC",
"Default,TGiant3");
1551 if (GetOption(
"xgeometry")) {
1552 SetOption(
"-geometry",
"Default,-xgeometry");
1553 SetOption(
"-geomNoField",
"Default,-xgeometry");
1556 if (GetOption(
"fzin")) {
1557 gMessMgr->Error() <<
"Option fzin cannot be used in root.exe. Use root4star" << endm;
1560 if (GetOption(
"ntin")) {
1561 gMessMgr->Error() <<
"Option ntin cannot be used in root.exe. Use root4star" << endm;
1565 if (GetOption(
"gstar") || GetOption(
"pythia")) {
1566 SetOption(
"VMC",
"Default,-TGiant3,gstar");
1568 SetOption(
"-pythia",
"Default,-TGiant3");
1572 SetOption(
"-geantL",
"Default,-TGiant3");
1573 SetOption(
"-geometry",
"Default,-TGiant3");
1574 SetOption(
"-geomNoField",
"Default,-TGiant3");
1576 if (! (GetOption(
"VMC") || GetOption(
"VMCPassive"))) {
1577 SetOption(
"VMCPassive",
"Default,-TGiant3");
1581 SetOption(
"StarMiniCern",
"Default,-TGiant3");
1584 if (GetOption(
"ITTF") && ! (GetOption(
"Sti") || GetOption(
"StiCA") || GetOption(
"StiVMC"))) {
1585 TString STAR_LEVEL(gSystem->Getenv(
"STAR_LEVEL"));
1586 if (STAR_LEVEL ==
".DEV2")
SetOption(
"StiCA",
"Default,ITTF");
1590 if (!GetOption(
"Eval") && GetOption(
"AllEvent"))
SetOption(
"Eval",
"-Eval,AllEvent");
1594 for (k = 1; k<fNoChainOptions;k++) {
1596 gMessMgr->QAInfo() << Form(
"================== %20s\tis ON \t: %s",
1597 (
char *) fBFC[k].Key, (
char *) fBFC[k].Comment) << endm;
1598 Bfc->
AddAt(&fBFC[k]);
1604 void StBFChain::Set_IO_Files (
const Char_t *infile,
const Char_t *outfile){
1607 if (strlen(infile) > 2) {
1608 gc = TString(infile,3);
1612 SetInputFile(infile);
1616 void StBFChain::SetInputFile (
const Char_t *infile){
1618 if (infile) fInFile = infile;
1619 if (fInFile !=
"") {
1620 fInFile.ReplaceAll(
"\n",
";");
1621 fInFile.ReplaceAll(
"#",
";");
1622 fInFile.ReplaceAll(
":",
";");
1623 gMessMgr->QAInfo() <<
"Input file name = " << fInFile.Data() << endm;
1626 fInFile = fBFC[fkChain].Comment;
1627 fInFile.ReplaceAll(
"\n",
";");
1628 gMessMgr->QAInfo() <<
"Default Input file name = " << fInFile.Data() <<
" for chain : " << fBFC[fkChain].Key << endm;
1631 if (fInFile ==
"") {
SetOption(
"-in",
"No Input File");
SetOption(
"-InTree",
"NoInput File");
return;}
1632 if (!GetOption(
"fzin") && !GetOption(
"ntin")) {
1635 ParseString(fInFile,Files);
1638 while ((File = (TObjString *) next())) {
1639 TString
string = File->GetString();
1640 if (!
string.Contains(
"*") && !
string.BeginsWith(
"@") &&
1641 gSystem->AccessPathName(
string.Data())) {
1642 gMessMgr->Error() <<
"StBFChain::SetInputFile *** NO FILE: " <<
string.Data() <<
", exit!" << endm;
1645 else fSetFiles->AddFile(File->String().Data());
1653 if (! GetOption(
"NoOutput")) {
1657 if (fInFile !=
"") {
1658 if (GetOption(
"fzin") || GetOption(
"ntin")) {
1660 ParseString(fInFile,words);
1661 TIter nextL(&words);
1662 TObjString *word = 0;
1663 while ((word = (TObjString *) nextL())) {
1664 if (word->GetString().Contains(
".fz") ||
1665 word->GetString().Contains(
".nt")) {
1666 fFileOut = gSystem->BaseName(word->GetName());
1671 fFileOut = gSystem->BaseName(fInFile.Data());
1672 if (GetOption(
"shadow")) {
1673 TObjArray* fileOutTokens = fFileOut.Tokenize(
"_.");
1674 TString& runToken = ((TObjString*) (fileOutTokens->At(2)))->String();
1675 TString& seqToken = ((TObjString*) (fileOutTokens->At(4)))->String();
1676 if (!(runToken.CompareTo(
"adc"))) {
1677 runToken = ((TObjString*) (fileOutTokens->At(3)))->String();
1678 seqToken = ((TObjString*) (fileOutTokens->At(5)))->String();
1680 if (!(runToken.IsDigit())) {
1681 LOG_ERROR <<
"Unable to locate run number in filename for shadowing." << endm;
1683 fFileOut.ReplaceAll(runToken,Form(
"%d",
1684 StShadowMaker::getRunNumber(runToken.Atoi())));
1686 if (!(seqToken.IsDigit())) {
1687 LOG_ERROR <<
"Unable to locate file sequence number in filename for shadowing." << endm;
1689 fFileOut.ReplaceAll(seqToken,Form(
"%07d",
1690 StShadowMaker::getFileSeq(seqToken.Atoi())));
1692 delete fileOutTokens;
1696 if (fFileOut ==
"") {
1697 if (GetOption(
"pythia")) fFileOut =
"pythia.root";
1698 else if (GetOption(
"hijing")) fFileOut =
"hijing.root";
1699 else if (GetOption(
"VMC")) fFileOut =
"VMC.root";
1700 else if (GetOption(
"gstar")) fFileOut =
"gtrack.root";
1702 if ( fFileOut !=
"") {
1703 fFileOut.ReplaceAll(
"*",
"");
1704 fFileOut.ReplaceAll(
"@",
"");
1705 fFileOut.ReplaceAll(
"..",
".");
1706 fFileOut.ReplaceAll(
".daq",
"");
1707 fFileOut.ReplaceAll(
".fzd",
"");
1708 fFileOut.ReplaceAll(
".fz",
"");
1709 fFileOut.ReplaceAll(
".nt",
"");
1710 fFileOut.ReplaceAll(
".root",
"");
1711 fFileOut.ReplaceAll(
".list",
"");
1712 fFileOut.ReplaceAll(
".lis",
"");
1714 fFileOut.Append(
".root");
1718 if (fFileOut !=
"") gMessMgr->QAInfo() <<
"Output root file name " << fFileOut.Data() << endm;
1719 else SetOption(
"NoOutput",
"No Output File");
1721 if ( ( GetOption(
"tags") || GetOption(
"lana") ) && (fFileOut !=
"") ){
1722 TString TagsName = fFileOut;
1723 if( GetOption(
"lana") ){
1724 TagsName.ReplaceAll(
".root",
".laser.root");
1725 }
else if ( GetOption(
"mtdEvtFilt") ){
1726 TagsName.ReplaceAll(
".root",
".pretags.root");
1728 TagsName.ReplaceAll(
".root",
".tags.root");
1730 SetTFile(
new TFile(TagsName.Data(),
"RECREATE"));
1743 if (geantMk && geantMk->InheritsFrom(
"St_geant_Maker")) {
1744 SetInput(
"geant",
".make/geant/.data");
1745 TString GeomVersion(
"");
1747 geantMk->SetAttr(
"RunG",fRunG);
1749 if (!GetOption(
"fzin") || GetOption(
"ForceGeometry")) {
1750 GeomVersion =
"y2004x";
1751 const DbAlias_t *DbAlias = GetDbAliases();
1753 for (Int_t i = 0; DbAlias[i].tag; i++) {
1755 r += DbAlias[i].tag;
1756 if ( !GetOption(DbAlias[i].tag,kFALSE) && !GetOption(r,kFALSE))
continue;
1757 GeomVersion = DbAlias[i].geometry;
1761 if (! found) gMessMgr->QAInfo() <<
"StBFChain::SetGeantOptions() Chain has not found geometry tag. Use " << GeomVersion << endm;
1762 TString GeometryOpt;
1763 if (GetOption(
"phys_off")) {GeometryOpt +=
"detp phys_off=1;"; geantMk->SetAttr(
"phys_off",kTRUE);}
1764 if (GetOption(
"hadr_off")) {GeometryOpt +=
"detp hadr_off=1;"; geantMk->SetAttr(
"hadr_off",kTRUE);}
1765 GeometryOpt += (
"detp geometry ");
1766 GeometryOpt += GeomVersion;
1767 ProcessLine(Form(
"((St_geant_Maker *) %p)->LoadGeometry(\"%s\");",geantMk,GeometryOpt.Data()));
1769 if ((GetOption(
"fzin") || GetOption(
"ntin") || GetOption(
"mtin") || fInFile.Data()[0] ==
';') && fInFile !=
"")
1770 ProcessLine(Form(
"((St_geant_Maker *) %p)->SetInputFile(\"%s\")",geantMk,fInFile.Data()));
1789 if (GetOption(
"Agi")) mk->SetAlias(
"VmcGeometry",
"db/.const/StarDb/AgiGeometry");
1790 else if (GetOption(
"AgML") ) mk->SetAlias(
"VmcGeometry",
"db/.const/StarDb/AgMLGeometry");
1791 else if (GetOption(
"VmcGeo")) mk->SetAlias(
"VmcGeometry",
"db/.const/StarDb/VmcGeo");
1792 else mk->SetAlias(
"VmcGeometry",
"db/.const/StarDb/AgiGeometry");
1794 Int_t Idate=0,Itime=0;
1797 for (i = 1; i < fNoChainOptions; i++) {
1798 if (fBFC[i].Flag && !strncmp(fBFC[i].Key ,
"DbV",3)){
1802 gMessMgr->QAInfo() <<
"StBFChain::SetDbOptions Found time-stamp " << fBFC[i].Key <<
" [" << fBFC[i].Comment <<
"]" << endm;
1803 (void) sscanf(fBFC[i].Comment,
"%d/%d",&Idate,&Itime);
1809 if( ! Idate && FDate){
1810 gMessMgr->QAInfo() <<
"StBFChain::SetDbOptions Switching to user chosen dynamic time-stamp (MaxEntry) "
1811 << FDate <<
" " << FTime << endm;
1812 gMessMgr->QAInfo() <<
"Chain may crash if time-stamp is not validated by db interface" << endm;
1821 gMessMgr->QAInfo() <<
"StBFChain::SetDbOptions Switching to user chosen dynamic time-stamp (Start)"
1822 << FDateS <<
" " << FTimeS << endm;
1823 gMessMgr->QAInfo() <<
"Chain may crash if time-stamp is not validated by db interface" << endm;
1825 db->SetDateTime(FDateS,FTimeS);
1827 if (GetOption(
"simu")) {
1828 const DbAlias_t *DbAlias = GetDbAliases();
1830 for (Int_t i = 0; DbAlias[i].tag; i++) {
1831 if (GetOption(DbAlias[i].tag,kFALSE)) {
1832 db->SetDateTime(DbAlias[i].tag);
1837 if (! found) {gMessMgr->QAInfo() <<
"StBFChain::SetDbOptions() Chain has not set a time-stamp" << endm;}
1839 gMessMgr->QAInfo() << db->
GetName()
1840 <<
" Maker set time = "
1841 << db->GetDateTime().GetDate() <<
"."
1842 << db->GetDateTime().GetTime() << endm;
1843 if (GetOption(
"SIMU") && m_EvtHddr) {
1844 gMessMgr->QAInfo() <<
GetName() <<
" Chain set time from " << db->
GetName() << endm;
1845 m_EvtHddr->SetDateTime(db->GetDateTime());
1852 db->SetMaxEntryTime(Idate,Itime);
1853 gMessMgr->Info() <<
"\tSet DataBase max entry time " << Idate <<
"/" << Itime
1854 <<
" for St_db_Maker(\"" << db->
GetName() <<
"\")" << endm;
1856 #ifdef USE_BFCTIMESTAMP
1861 for (UInt_t i = 0; i < GTSOptions.size() ; i++){
1862 if ( (GTSOptions[i].Realm).IsNull() ){ realm =
"*";}
1863 else { realm = GTSOptions[i].Realm;}
1868 if ( GTSOptions[i].Type == 1){
1869 db->AddMaxEntryTimeOverride(GTSOptions[i].Date,0,
1870 (
char *) realm.Data(),
1871 (
char *) GTSOptions[i].Detector.Data());
1873 LOG_INFO <<
"Recovering override stamp " << i <<
" :: "
1874 << GTSOptions[i].Detector <<
", " << realm <<
", "
1875 << GTSOptions[i].Date <<
", " << GTSOptions[i].Time << endm;
1877 LOG_WARN <<
"Found override type " << GTSOptions[i].Type <<
" no treated yet"
1878 << GTSOptions[i].Detector <<
", " << realm <<
", "
1879 << GTSOptions[i].Date <<
", " << GTSOptions[i].Time << endm;
1886 if (!GetOption(
"fzin")) {
1891 Field_t FieldOptions[5] = {
1892 {
"FullMagFNegative", -1.0},
1893 {
"FullMagFPositive", 1.0},
1894 {
"HalfMagFNegative", -0.5},
1895 {
"HalfMagFPositive", 0.5},
1899 if (GetOption(
"FieldON")) {
1900 if (GetOption(
"ReverseField")) k = 0;
1902 }
else if (GetOption(
"HalfField")) {
1903 if (GetOption(
"ReverseField")) k = 2;
1905 }
else if (GetOption(
"FieldOff")) k = 4;
1907 SetFlavor(FieldOptions[k].name,
"MagFactor");
1908 gMessMgr->QAInfo() <<
"StBFChain::SetDbOptions SetFlavor(\"" << FieldOptions[k].name
1909 <<
"\",\"MagFactor\")" << endm;
1910 if ( gClassTable->GetID(
"StarMagField") >= 0) {
1912 Form(
"if (!StarMagField::Instance()) new StarMagField( StarMagField::EBField::kMapped, %f, kTRUE);",
1913 FieldOptions[k].scale);
1918 if (
this == GetTopChain()) {
1920 if (! GetOption(
"TpcDb") ) {mk->SetAttr(
"blacklist",
"tpc"); gMessMgr->QAInfo() <<
"blacklist tpc" << endm;}
1921 if (!(GetOption(
"SvtDb")||GetOption(
"SvtCalDb"))) {mk->SetAttr(
"blacklist",
"svt"); gMessMgr->QAInfo() <<
"blacklist svt" << endm;}
1922 if (!(GetOption(
"SsdDb")||GetOption(
"SsdCalDb"))) {mk->SetAttr(
"blacklist",
"ssd"); gMessMgr->QAInfo() <<
"blacklist ssd" << endm;}
1923 if (!(GetOption(
"SstDb")||GetOption(
"SstCalDb"))) {mk->SetAttr(
"blacklist",
"sst"); gMessMgr->QAInfo() <<
"blacklist sst" << endm;}
1924 if (! GetOption(
"EemcDb") ) {mk->SetAttr(
"blacklist",
"eemc"); gMessMgr->QAInfo() <<
"blacklist eemc"<< endm;}
1925 if (! GetOption(
"FmsDb") ) {mk->SetAttr(
"blacklist",
"fms"); gMessMgr->QAInfo() <<
"blacklist fms" << endm;}
1927 if (GetOption(
"NoSvtIt")) {mk->SetAttr(
"blacklist",
"svt"); gMessMgr->QAInfo() <<
"blacklist svt" << endm;}
1928 if (GetOption(
"NoSsdIt")) {mk->SetAttr(
"blacklist",
"ssd"); gMessMgr->QAInfo() <<
"blacklist ssd" << endm;}
1929 if (GetOption(
"NoSstIt")) {mk->SetAttr(
"blacklist",
"sst"); gMessMgr->QAInfo() <<
"blacklist sst" << endm;}
1938 if (!treeMk)
return;
1939 if (GetOption(
"EvOut")){
1940 gMessMgr->QAInfo() <<
"Will Write StEvent out, treeMk->GetFile() = " << treeMk->GetFile() << endm;
1941 treeMk->IntoBranch(
"eventBranch",
"StEvent");
1942 if (GetOption(
"EvOutOnly"))
return;
1944 if (! GetOption(
"nohistos")) treeMk->SetBranch(
"histBranch");
1945 if (! GetOption(
"norunco")) treeMk->SetBranch(
"runcoBranch");
1946 if (GetOption(
"McEvent") && GetOption(
"McEvOut")){
1947 gMessMgr->QAInfo() <<
"Will Write StMcEvent out, treeMk->GetFile() = " << treeMk->GetFile() << endm;
1948 treeMk->IntoBranch(
"McEventBranch",
"StMcEvent");
1950 if (GetOption(
"GeantOut")) treeMk->IntoBranch(
"geantBranch",
"geant");
1951 if (GetOption(
"AllEvent")) {
1952 if (GetOption(
"fzin") ||
1953 GetOption(
"ntin") ||
1954 GetOption(
"gstar") ||
1955 GetOption(
"pythia") ||
1957 GetOption(
"PrepEmbed")) {
1958 treeMk->IntoBranch(
"geantBranch",
"geant");
1959 treeMk->IntoBranch(
"geantBranch",
"geant/.data/particle");
1960 treeMk->IntoBranch(
"geantBranch",
"geant/.data/g2t_rch_hit");
1965 Long_t StBFChain::ProcessLine(
const char *line) {
1966 if (! line || !strlen(line))
return -1;
1967 if (Debug()) gMessMgr->QAInfo() <<
"ProcessLine " << line << endm;
1968 TInterpreter::EErrorCode error = TInterpreter::kNoError;
1969 Long_t res = gInterpreter->ProcessLine(line, &error);
1970 if (error != TInterpreter::kNoError) {
1971 gMessMgr->Error() <<
"StBFChain::ProcessLine command:" << line <<
" has failed. Quit job." << endm;
1977 TString StBFChain::GetGeometry()
const
1980 for (Int_t i=0;i<n;i++) {
1981 if (!fchainOpt->GetTable()[i].Flag)
continue;
1982 TString k(fchainOpt->GetTable()[i].Key);
1984 if (k[0]!=
'y')
continue;
1985 if (k[1]!=
'2')
continue;
1986 if (k[2] <
'0' || k[2]>
'9')
continue;
1987 if (k[3] <
'0' || k[3]>
'9')
continue;
1988 if (k[4] <
'0' || k[4]>
'9')
continue;
virtual Int_t Instantiate()
Maker-instantiation handler.
virtual Int_t Finish()
Really the destructor (close files, delete pointers etc ...)
virtual Char_t * GetOptionString(const Char_t *)
Returns the comment string associated to an option.
virtual void SetIOMode(Option_t *iomode="w")
number of transactions
void SetFlags(const Char_t *Chain="gstar tfs")
Scan all flags, check if they are correct, manipulate the comment if necessary.
virtual void SetTreeOptions()
Creates output-tree branches.
virtual void SetGeantOptions(StMaker *geant=0)
Handles all geant options.
virtual void SetDbOptions(StMaker *db=0)
Treats the DbV options used for database timestamp.
virtual Int_t kOpt(const TString *Tag, Bool_t Check=kTRUE) const
Check option if defined.
virtual Long_t GetNRows() const
Returns the number of the used rows for the wrapped table.
virtual Int_t AddAt(const void *c)
virtual const char * GetName() const
special overload
virtual void SetOption(const Int_t k, const Char_t *chain="Chain")
Enable/disable valid command line options.
virtual Int_t Load()
Routine handling library loading depending on chain options.
virtual ~StBFChain()
Destructor. Call Finish() . See this method for detail on what is cleaned.
void SetOutputFile(const Char_t *outfile=0)
Takes care of output file name (extension)
virtual void SetActive(Bool_t k=kTRUE)
Setters for flags and switches.