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);
553 if (maker==
"StKFVertexMaker" && GetOption(
"laserIT")) mk->SetAttr(
"laserIT" ,kTRUE);
555 if (maker==
"StGenericVertexMaker") {
557 if (GetOption(
"Sti") || GetOption(
"StiCA") || GetOption(
"StiVMC" ) ) mk->SetAttr(
"ITTF" , kTRUE);
558 if (GetOption(
"VFMinuit" ) ) mk->SetAttr(
"VFMinuit" , kTRUE);
559 if (GetOption(
"VFppLMV" ) ) mk->SetAttr(
"VFppLMV" , kTRUE);
560 if (GetOption(
"VFppLMV5" ) ) mk->SetAttr(
"VFppLMV5" , kTRUE);
561 if ( GetOption(
"VFPPVEv") ) {
562 gSystem->Load(
"StBTofUtil.so");
563 mk->SetAttr(
"VFPPVEv" , kTRUE);
565 else if (GetOption(
"VFPPV") && GetOption(
"Sti")) mk->SetAttr(
"VFPPV", kTRUE);
566 if (GetOption(
"VFPPVEvNoBtof")){
567 gSystem->Load(
"StBTofUtil.so");
568 mk->SetAttr(
"VFPPVEvNoBtof", kTRUE);
570 if (GetOption(
"VFPPVnoCTB" ) ) mk->SetAttr(
"VFPPVnoCTB" , kTRUE);
571 if (GetOption(
"VFFV" ) ) mk->SetAttr(
"VFFV" , kTRUE);
572 if (GetOption(
"VFMCE" ) ) mk->SetAttr(
"VFMCE" , kTRUE);
573 if (GetOption(
"VFMinuit2" ) ) mk->SetAttr(
"VFMinuit2" , kTRUE);
574 if (GetOption(
"VFMinuit3" ) ) mk->SetAttr(
"VFMinuit3" , kTRUE);
575 if (GetOption(
"beamLine" ) ) mk->SetAttr(
"BeamLine" , kTRUE);
576 if (GetOption(
"beamLine3D" ) ) mk->SetAttr(
"BeamLine3D" , kTRUE);
577 if (GetOption(
"CtbMatchVtx") ) mk->SetAttr(
"CTB" , kTRUE);
578 if (GetOption(
"min2trkVtx" ) ) mk->SetAttr(
"minTracks" , 2);
579 if (GetOption(
"VtxSeedCalG") ) mk->SetAttr(
"calibBeamline" , kTRUE);
580 if (GetOption(
"usePct4Vtx" ) ) mk->SetAttr(
"PCT" , kTRUE);
581 if (GetOption(
"useBTOF4Vtx") ) mk->SetAttr(
"BTOF" , kTRUE);
582 if (GetOption(
"useBTOFmatchOnly") ) mk->SetAttr(
"useBTOFmatchOnly", kTRUE);
586 if (GetOption(
"VFStoreX") ) mk->SetAttr(
"VFStore" , 100);
590 if (maker==
"StKFVertexMaker") {
591 if (GetOption(
"beamLine" ) ) mk->SetAttr(
"BeamLine" , kTRUE);
593 if (maker==
"StAssociationMaker") {
595 LOG_QA <<
"StBFChain::Instantiate Setting the Parameters for the Association Maker" << endm;
598 if (GetOption(
"ITTF") || GetOption(
"StiVMC") || GetOption(
"useInTracker"))
599 cmd = Form (
"((StAssociationMaker *) %p)->useInTracker();",mk);
600 cmd +=
"StMcParameterDB* parameterDB = StMcParameterDB::instance();";
603 cmd +=
"parameterDB->setXCutTpc(.5);";
604 cmd +=
"parameterDB->setYCutTpc(.5);";
605 cmd +=
"parameterDB->setZCutTpc(.5);";
607 cmd +=
"parameterDB->setReqCommonHitsTpc(3);";
610 cmd +=
"parameterDB->setRCutFtpc(.3);";
611 cmd +=
"parameterDB->setPhiCutFtpc(5*(3.1415927/180.0));";
613 cmd +=
"parameterDB->setReqCommonHitsFtpc(3);";
616 cmd +=
"parameterDB->setXCutSvt(.08);";
617 cmd +=
"parameterDB->setYCutSvt(.08);";
618 cmd +=
"parameterDB->setZCutSvt(.08);";
620 cmd +=
"parameterDB->setReqCommonHitsSvt(1);";
621 if (GetOption(
"IdTruth")) cmd += Form(
"((StAssociationMaker *) %p)->useIdAssoc();",mk);
624 if (maker ==
"StMiniMcMaker" && GetOption(
"IdTruth") && ! GetOption(
"OldMiniMc")) {
626 gMessMgr->QAInfo() <<
"StBFChain::Instantiate create simplified MiniMcTree in " << maker << endm;
631 if (GetOption(
"ppOpt") ) {
632 if (maker ==
"StTrsMaker")
636 if (maker ==
"StStrangeMuDstMaker" && GetOption(
"CMuDST")&& GetOption(
"StrngMuDST") ) {
638 mk -> SetAttr(
"DoV0", 1 );
639 mk -> SetAttr(
"DoXi", 1 );
640 mk -> SetAttr(
"DoKink", 1 );
641 mk -> SetAttr(
"SetNoKeep", 1 );
647 if ( maker ==
"StEmcRawMaker" && GetOption(
"BEmcDebug"))
651 if ( maker ==
"StEmcRawMaker" && GetOption(
"BEmcChkStat"))
652 mk->SetAttr(
"BEmcCheckStatus",kTRUE);
655 if ( maker ==
"StEmcRawMaker" && GetOption(
"picoWrite") ) {
660 if ( maker ==
"StTriggerSimuMaker" && GetOption(
"picoWrite") ) {
668 if (maker ==
"StMuDstMaker" && GetOption(
"ezTree") ){
669 TString cmd(Form(
"StMuDstMaker *pMuMk = (StMuDstMaker *) %p;",mk));
670 if ( ! GetOption(
"CMuDST")) cmd +=
"pMuMk->SetStatus(\"*\",0);";
671 cmd +=
"pMuMk->SetStatus(\"EztAll\",1);";
676 if (maker ==
"StFstRawHitMaker" && GetOption(
"fstEvtRawHit") ){
677 mk->SetAttr(
"fstEvtRawHit", kTRUE);
681 if (maker ==
"StMuDstMaker" && GetOption(
"fstMuRawHit") ){
682 mk->SetAttr(
"fstMuRawHit", kTRUE);
685 if ( maker ==
"StPicoDstMaker"){
686 if ( GetOption(
"picoWrite") ) mk->SetMode(1);
687 if ( GetOption(
"picoRead") ) mk->SetMode(2);
688 if ( GetOption(
"PicoVtxVpd")) mk->SetAttr(
"PicoVtxMode",
"PicoVtxVpd");
689 else if ( GetOption(
"PicoVtxFXT")) mk->SetAttr(
"PicoVtxMode",
"PicoVtxFXT");
690 else if ( GetOption(
"PicoVtxMtd")) mk->SetAttr(
"PicoVtxMode",
"PicoVtxMtd");
691 else if ( GetOption(
"PicoVtxVpdOrDefault")) mk->SetAttr(
"PicoVtxMode",
"PicoVtxVpdOrDefault");
692 else if ( GetOption(
"PicoVtxDefault")) mk->SetAttr(
"PicoVtxMode",
"PicoVtxDefault");
693 if ( GetOption(
"PicoCovMtxWrite")) mk->SetAttr(
"PicoCovMtxMode",
"PicoCovMtxWrite");
694 else if ( GetOption(
"PicoCovMtxSkip")) mk->SetAttr(
"PicoCovMtxMode",
"PicoCovMtxSkip");
695 if ( GetOption(
"PicoBEmcSmdWrite")) mk->SetAttr(
"PicoBEmcSmdMode",
"PicoBEmcSmdWrite");
696 else if ( GetOption(
"PicoBEmcSmdSkip")) mk->SetAttr(
"PicoBEmcSmdMode",
"PicoBEmcSmdSkip");
700 if (maker ==
"StLaserEventMaker"){
703 if (maker ==
"StDetectorDbMaker") {
704 if ( GetOption(
"DbRichSca") ) mk->SetMode(1);
706 if (maker ==
"StTpcRSMaker") {
707 if (! GetOption(
"TrsToF")) {
708 Int_t mode = mk->GetMode();
712 if (GetOption(
"EbyET0")) mk->SetAttr(
"EbyET0", kTRUE);
714 if (maker ==
"StTrsMaker") {
716 if (GetOption(
"TrsPileUp")) mode += 1;
717 if (GetOption(
"TrsToF")) mode += 2;
718 if (mode) mk->SetMode(mode);
722 if (maker ==
"StTofrMatchMaker"){
726 if (maker ==
"StSpaceChargeEbyEMaker") {
727 if ( GetOption(
"SpcChgCal") ||
728 GetOption(
"SpcChgCalG")) mk->SetMode(2);
729 if ( GetOption(
"SCScalerCal") ) mk->SetMode(4);
730 if ( GetOption(
"EastOff")) mk->SetAttr(
"EastOff",kTRUE);
731 if ( GetOption(
"WestOff")) mk->SetAttr(
"WestOff",kTRUE);
733 if (maker ==
"StEventQAMaker" && GetOption(
"QAalltrigs"))
734 ProcessLine(Form(
"((StEventQAMaker *) %p)->AllTriggers();",mk));
736 if(maker==
"StV0FinderMaker" && Key==
"v0svt"){
737 TString cmd(Form(
"StV0FinderMaker *V0mk=(StV0FinderMaker*) %p;",mk));
738 cmd +=
"V0mk->SetLanguageUsage(0);";
739 cmd +=
"V0mk->SetSVTUsage(1);";
740 cmd +=
"V0mk->SetV0LanguageUsage(3);";
743 if(maker==
"StXiFinderMaker" && Key==
"xisvt"){
744 TString cmd(Form(
"StXiFinderMaker *Ximk=(StXiFinderMaker*) %p;",mk));
745 cmd +=
"Ximk->SetLanguageUsage(0);";
746 cmd +=
"Ximk->SetSVTUsage(1);";
747 cmd +=
"Ximk->SetV0LanguageUsage(3);";
748 cmd +=
"Ximk->SetXiLanguageUsage(5);";
753 if (maker ==
"StTpcRTSHitMaker") {
754 if ( GetOption(
"TpxClu2D")) mk->SetAttr(
"TpxClu2D", kTRUE);
755 if ( GetOption(
"TPC23")) mk->SetAttr(
"TPC23", kTRUE);
757 if (maker ==
"StTpcDbMaker"){
758 if ( GetOption(
"Simu") && ! GetOption(
"NoSimuDb")) mk->SetAttr(
"Simu",kTRUE);
759 if ( GetOption(
"useLDV") ) mk->SetAttr(
"useLDV",kTRUE) ;
760 if ( GetOption(
"useCDV") ) mk->SetAttr(
"useCDV",kTRUE) ;
761 if ( GetOption(
"useNewLDV") ) mk->SetAttr(
"useNewLDV",kTRUE);
762 if ( GetOption(
"shadow") ) mk->SetAttr(
"NoReset",kTRUE);
763 if ( GetOption(
"ExB")){
764 mk->SetAttr(
"ExB", kTRUE);
765 if ( GetOption(
"EB1") ) mk->SetAttr(
"EB1", kTRUE);
766 else if ( GetOption(
"EB2") ) mk->SetAttr(
"EB2", kTRUE);
770 if(GetOption(
"RY1H") ||
771 GetOption(
"RY2000") ||
772 GetOption(
"RY2001") ||
773 GetOption(
"RY2001N") ||
774 GetOption(
"RY2003") ||
775 GetOption(
"RY2003X")) mk->SetAttr(
"OldRuns", kTRUE);
782 if( GetOption(
"OBmap") ) mk->SetAttr(
"OBmap" , kTRUE);
783 if( GetOption(
"OPr13") ) mk->SetAttr(
"OPr13" , kTRUE);
784 if( GetOption(
"OPr40") ) mk->SetAttr(
"OPr40" , kTRUE);
785 if( GetOption(
"OTwist") ) mk->SetAttr(
"OTwist" , kTRUE);
786 if( GetOption(
"OClock") ) mk->SetAttr(
"OClock" , kTRUE);
787 if( GetOption(
"OCentm") ) mk->SetAttr(
"OCentm" , kTRUE);
788 if( GetOption(
"OECap") ) mk->SetAttr(
"OECap" , kTRUE);
789 if( GetOption(
"OIFC") ) mk->SetAttr(
"OIFC" , kTRUE);
790 if( GetOption(
"OSpaceZ") ) mk->SetAttr(
"OSpaceZ" , kTRUE);
791 if( GetOption(
"OSpaceZ2") ) {
792 if( GetOption(
"FXT") ) mk->SetAttr(
"OSpaceFXT" , kTRUE);
793 else mk->SetAttr(
"OSpaceZ2" , kTRUE);
795 if( GetOption(
"OShortR") ) mk->SetAttr(
"OShortR" , kTRUE);
796 if( GetOption(
"OBMap2d") ) mk->SetAttr(
"OBMap2d" , kTRUE);
797 if( GetOption(
"OGridLeak") ) mk->SetAttr(
"OGridLeak" , kTRUE);
798 if( GetOption(
"OGridLeak3D")) mk->SetAttr(
"OGridLeak3D", kTRUE);
799 if( GetOption(
"OGridLeakFull")) mk->SetAttr(
"OGridLeakFull", kTRUE);
800 if( GetOption(
"OGGVoltErr") ) mk->SetAttr(
"OGGVoltErr" , kTRUE);
801 if( GetOption(
"OSectorAlign"))mk->SetAttr(
"OSectorAlign",kTRUE);
802 if( GetOption(
"ODistoSmear")) mk->SetAttr(
"ODistoSmear", kTRUE);
803 if( GetOption(
"OAbortGap")) mk->SetAttr(
"OAbortGap" , kTRUE);
807 if (maker ==
"StTpcHitMover" && GetOption(
"EbyET0")) {
808 mk->SetAttr(
"EbyET0", kTRUE);
810 if ((maker ==
"StdEdxY2Maker" || maker ==
"StTpcHitMover") &&
811 GetOption(
"EmbeddingShortCut")) {
812 mk->SetAttr(
"EmbeddingShortCut", kTRUE);
815 if (maker ==
"StdEdxY2Maker" && !GetOption(
"CalcdNdx")) {
816 mk->SetAttr(
"SkipdNdx", kTRUE);
818 if (maker ==
"StSvtDbMaker" || maker ==
"StSsdDbMaker"){
821 if (GetOption(
"Simu") && ! GetOption(
"NoSimuDb")) mk->SetMode(1);
825 if ((maker ==
"StFtpcClusterMaker" ||
826 maker ==
"StFtpcTrackMaker" ) &&
827 GetOption(
"fdbg")) mk->SetMode(mk->GetMode()+2);
828 if ( ( maker ==
"StFtpcClusterMaker" ||
829 maker ==
"StFtpcTrackMaker" ) &&
830 GetOption(
"flaser")) mk->SetMode(mk->GetMode()+1);
832 if ((maker ==
"StFtpcClusterMaker" ||
833 maker ==
"StFtpcTrackMaker" ) &&
834 GetOption(
"fgain")) mk->SetMode(mk->GetMode()+4);
838 if ( maker ==
"StPmdReadMaker" &&
839 GetOption(
"pmdRaw")) mk->SetAttr(
"pmdRaw",kTRUE);
845 if (maker ==
"StPxlSimMaker") {
846 if (GetOption(
"pxlSlowSim")) mk->SetAttr(
"useDIGMAPSSim",kTRUE);
850 if (maker ==
"StFmsDbMaker"){
851 if(fFmsGainCorrTag!=
"") mk->SetAttr(
"FmsGainCorr",fFmsGainCorrTag.Data());
856 if (maker ==
"StHitFilterMaker") {
857 if (GetOption(
"SvtHitFilt")){
859 LOG_QA <<
"SVT hit filter is ON" << endm;
860 TString cmd(Form(
"StHitFilterMaker *Filtmk=(StHitFilterMaker*) %p;",mk));
861 cmd +=
"Filtmk->setPtLowerCut(-99.);";
862 cmd +=
"Filtmk->setPtUpperCut(-99.);";
863 cmd +=
"Filtmk->setAbsEtaCut(-99);";
864 cmd +=
"Filtmk->setAbsZVertCut(30);";
866 }
else if (GetOption(
"TpcHitFilt")){
868 LOG_QA <<
"TPC hit filter is ON" << endm;
869 TString cmd(Form(
"StHitFilterMaker *Filtmk=(StHitFilterMaker*) %p;",mk));
870 cmd +=
"Filtmk->setPtLowerCut(-99.);";
871 cmd +=
"Filtmk->setPtUpperCut(-99.);";
872 cmd +=
"Filtmk->setAbsEtaCut(-99);";
873 cmd +=
"Filtmk->setAbsZVertCut(999);";
875 }
else if (GetOption(
"HftHitFilt")){
877 LOG_QA <<
"HFT hit filter is ON" << endm;
878 TString cmd(Form(
"StHitFilterMaker *Filtmk=(StHitFilterMaker*) %p;",mk));
879 cmd +=
"Filtmk->setAbsZVertCut(-1);";
880 cmd +=
"Filtmk->setKeepWestHighEtaHitsForFgt(0);";
883 LOG_QA <<
"Default hit filtering is ON" << endm;
886 if (GetOption(
"KeepTpcHit")) mode |= (1 << kTpcId);
887 if (GetOption(
"KeepSvtHit")) mode |= (1 << kSvtId);
890 if (GetOption(
"KeepFgtHit")){
891 TString cmd(Form(
"StHitFilterMaker *Filtmk=(StHitFilterMaker*) %p;",mk));
892 cmd +=
"Filtmk->setKeepWestHighEtaHitsForFgt(1.0);";
896 if (maker ==
"StMiniMcMaker" && fFileOut !=
"") {
897 ProcessLine(Form(
"((StMiniMcMaker *) %p)->setFileName(\"%s\");", mk, fFileOut.Data()));
899 if (maker ==
"StMcAnalysisMaker") {
901 if (GetOption(
"McAnaTpc")) mode += 0x1;
902 if (GetOption(
"McAnaSvt")) mode += 0x2;
903 if (GetOption(
"McAnaSsd")) mode += 0x4;
905 ProcessLine(Form(
"((StMaker *) %p)->SetMode(%i);", mk, mode));
907 if (maker ==
"StBTofCalibMaker") {
908 if (GetOption(
"UseProjectedVertex")) mk->SetAttr(
"UseProjectedVertex",kTRUE);
909 if (GetOption(
"setOutlierRej4BToft0")) mk->SetAttr(
"setPPPAOutlierRej", kTRUE);
910 if (GetOption(
"ImpBToFt0Mode")) mk->SetAttr(
"pppAMode", kTRUE);
911 if (GetOption(
"btofFXT")) mk->SetAttr(
"btofFXT", kTRUE);
913 if (maker ==
"StVpdCalibMaker" && GetOption(
"ImpBToFt0Mode")) mk->SetAttr(
"pppAMode", kTRUE);
915 if (maker ==
"StEventMaker" && fFiltTrg.Length()) {
916 mk->SetAttr(
"FiltTrg",(Int_t) (fFiltTrg.BeginsWith(
'+') ? 1 : -1));
917 TString FiltTrgFlavor = fFiltTrg(1,128);
918 if (FiltTrgFlavor.Length())
919 SetFlavor((FiltTrgFlavor +=
"+ofl").Data(),
"trgOfflineFilter");
921 if (maker ==
"StTagsMaker"){
922 if ( GetOption(
"shadow") ) mk->SetAttr(
"shadow",kTRUE);
927 if (name ==
"") strncpy (fBFC[i].Name,(Char_t *) mk->
GetName() ,
sizeof(fBFC[i].Name));
928 if (myChain) myChain->AddMaker(mk);
932 LOG_QA <<
" ======================================" << endm;
933 LOG_QA <<
" problem with Instantiation of " << fBFC[i].Maker << endm;
934 LOG_QA <<
" ======================================" << endm;
941 if (GetOption(
"MakeDoc")) MakeDoc();
943 if (GetOption(
"Debug")) SetDEBUG(1);
944 if (GetOption(
"Debug1")) SetDEBUG(1);
945 if (GetOption(
"Debug2")) SetDEBUG(2);
946 if (GetOption(
"nohistos")) SetAttr(
".histos",0,
"*");
947 else SetAttr(
".histos",1,
"*");
948 if (GetOption(
"NoRepeat")) gMessMgr->IgnoreRepeats();
950 if (GetOption(
"svt1hit")) SetAttr(
"minPrecHits",1,
"Sti");
951 if (GetOption(
"svt1hit")) SetAttr(
"minPrecHits",1,
"StiCA");
952 if (GetOption(
"svt1hit")) SetAttr(
"minPrecHits",1,
"StiVMC");
954 for (
unsigned int n=0 ; n < Gproperty.size() ; n++ ){
955 gMessMgr->QAInfo() <<
"+++ Setting attribute "
956 << (Gproperty.at(n)).Data() <<
" = " << (Gvalue.at(n)).Data() <<
" for "
957 << (Gpattern.at(n).Data()) << endm;
959 SetAttr( (Gproperty.at(n)).Data(),
960 (Gvalue.at(n)).Data(),
961 (Gpattern.at(n)).Data() );
967 Int_t StBFChain::Init() {
970 Info(
"Init",
"Time=%s Cwd=%s",td.AsString(),gSystem->pwd());
974 if (fNoChainOptions) {
976 if (GetOption(
"Simu") && ! (GetOption(
"mtin") || GetOption(
"PrepEmbed") || GetOption(
"pythiaEmbed"))) {
982 if (fEvtHddr->GetRunNumber() < 0 || fEvtHddr->GetRunNumber() >= 1000000) {
983 fEvtHddr->SetRunNumber(1);
987 if (fNoChainOptions) {
988 if (GetOption(
"NoOutput") || GetOption(
"EvOutOnly")) {
989 if (! GetOption(
"RMuDst"))
990 SetAttr(
".call",
"SetActive(0)",
"MuDst");
991 if (! GetOption(
"EvOutOnly")) {
992 SetAttr(
".call",
"SetActive(0)",
"outputStream");
994 SetAttr(
".call",
"SetActive(0)",
"kink2");
995 SetAttr(
".call",
"SetActive(0)",
"StTagsMaker::");
996 SetAttr(
".call",
"SetActive(0)",
"StStrangeMuDstMaker::");
1001 if (fNoChainOptions) {
1002 if (GetOption(
"misalign") && TClass::GetClass(
"AgPosition") )
1003 gROOT->ProcessLine(
"AgPosition::SetReal();");
1004 else if ( TClass::GetClass(
"AgPosition") )
1005 gROOT->ProcessLine(
"AgPosition::SetIdeal();");
1011 if (GetOption(
"Sti") || GetOption(
"StiCA") ||
1012 GetOption(
"StiVMC") ||GetOption(
"VMC") ||
1013 GetOption(
"VMCPassive")) {
1014 const DbAlias_t *DbAlias = GetDbAliases();
1015 for (Int_t i = 0; DbAlias[i].tag; i++) {
1017 dbTag += DbAlias[i].tag;
1018 if (GetOption(dbTag)) {
1019 TString path(
"./StarDb/AgiGeometry:$STAR/StarDb/AgiGeometry");
1020 if (GetOption(
"AgML")) {
1021 path =
"./StarDb/AgMLGeometry:$STAR/StarDb/AgMLGeometry";
1023 if (GetOption(
"VmcGeo")) {
1024 path =
"./StarDb/VmcGeo:$STAR/StarDb/VmcGeo";
1026 TString geom(
"Geometry.");
1027 geom += DbAlias[i].geometry;
1029 Char_t *file = gSystem->Which(path.Data(),geom,kReadPermission);
1031 LOG_INFO <<
"StBFChain::Init force load of " << file << endm;
1032 TString command =
".L "; command += file;
1033 gInterpreter->ProcessLine(command);
1034 gInterpreter->Calc(
"CreateTable()");
1035 command.ReplaceAll(
".L ",
".U ");
1036 gInterpreter->ProcessLine(command);
1039 LOG_INFO <<
"StBFChain::Init file for geometry tag " << geom <<
" has not been found in path" << path << endm;
1047 return StChain::Init();
1053 TFile *tf = GetTFile();
1054 if (tf) {tf->Write(); tf->Flush(); tf->Close();
delete tf; SetTFile(0);}
1055 if (!fBFC)
return kStOK;
1057 SafeDelete(fchainOpt);
1065 Int_t StBFChain::AddAB (
const Char_t *mkname,
const StMaker *maker,
const Int_t Opt) {
1066 if (! maker || strlen(mkname) == 0)
return kStErr;
1067 StMaker *parent = maker->GetParentMaker();
1069 TList *list = parent->GetMakeList();
1070 list->Remove((
StMaker *)maker);
1073 parent = mk->GetParentMaker();
if (!parent)
return kStErr;
1074 TList *list = parent->GetMakeList();
if (!list)
return kStErr;
1075 if (Opt > 0) list->AddAfter (mk,(
StMaker*)maker);
1076 else list->AddBefore(mk,(
StMaker*)maker);
1081 Int_t StBFChain::ParseString (
const TString &tChain, TObjArray &Opt, Bool_t Sort) {
1083 TObjArray *obj = tChain.Tokenize(
"[^ ;,]+");
1084 Int_t nParsed = obj->GetEntries();
1086 if (GetChain() && GetChain()->Debug() > 2) {
1087 gMessMgr->QAInfo() <<
"ParseString " << tChain.Data() << endm;
1088 for (k = 0; k < nParsed; k++) {
1090 gMessMgr->QAInfo() << k <<
"\t" << ((TObjString *) obj->At(k))->
GetName() << endm;
1094 for (k = 0; k < nParsed; k++) {
if (obj->At(k)) {
if (k != N) obj->AddAt(obj->At(k),N); N++;}}
1098 if (curChain && Sort) {
1099 TArrayI idT(nParsed); Int_t *idx = idT.GetArray();
1100 TArrayI kdT(nParsed); Int_t *kdx = kdT.GetArray();
1101 for (k = 0; k < nParsed; k++) {
1102 TString
string = ((TObjString *) obj->At(k))->GetString();
1103 kdx[k] = TMath::Abs(curChain->
kOpt(
string,kFALSE));
1105 TMath::Sort(nParsed,kdx,idx,0);
1107 for (k = 0; k < nParsed; k++) {
1108 Opt.AddAtAndExpand(obj->At(idx[k]),k);
1109 if (k == 0) sChain = ((TObjString *)Opt[k])->GetString();
1110 else {sChain +=
","; sChain += ((TObjString *)Opt[k])->GetString();}
1112 if (N > 1 && curChain->Debug() > 2) {
1113 gMessMgr->QAInfo() <<
"Requested chain is :\t" << tChain.Data() << endm;
1114 gMessMgr->QAInfo() <<
"Sorted chain is :\t" << sChain.Data() << endm;
1116 }
else for (k = 0; k < nParsed; k++) Opt.AddAtAndExpand(obj->At(k),k);
1117 obj->SetOwner(kFALSE);
1126 Int_t kO =
kOpt(&Tag, Check);
1141 for (Int_t i = 1; i< fNoChainOptions; i++) {
1142 opt = TString(fBFC[i].Key);
1144 nopt = TString(
"-");
1146 if (Tag == opt) {
return i;}
1147 else {
if (Tag == nopt) {
return -i;}}
1148 opt = fBFC[i].Maker;
1151 if (Tag == opt) {
return i;}
1152 else {
if (Tag == nopt) {
return -i;}}
1165 if (Tag.BeginsWith(
"dbv") || Tag.BeginsWith(
"sdt")) {
1168 if (Tag.Length() == 11 || Tag.Length() == 18)
return 0;
1173 if ( TPRegexp(BFC_DBREGEXP).Match(Tag) == 7)
return 0;
1175 if (Tag.BeginsWith(
"rung")) {
1181 if(Tag.BeginsWith(
"fmsGainCorr")){
1187 if ( Tag.BeginsWith(
"gopt") && Tag.Length() == 13 )
return 0;
1189 if ( Tag.BeginsWith(
"FiltTrg",TString::kIgnoreCase) ) {
1191 if ( TPRegexp(
"^FiltTrg(Inc|Exc)?(_.*)*$").Match(Tag,
"i") > 0)
return 0;
1193 if ( Tag.BeginsWith(
"VFStore",TString::kIgnoreCase) ||
1194 Tag.BeginsWith(
"TpcVpdVzDiffCut",TString::kIgnoreCase)
1198 if ( Tag.Index(
':') != 0)
return 0;
1203 gMessMgr->Error() <<
"Option " << Tag.Data() <<
" has not been recognized" << endm;
1209 void StBFChain::SetOptions(
const Char_t *options,
const Char_t *chainName) {
1210 TString tChain(options);
1212 Int_t nParsed = ParseString(tChain,Opts,kTRUE);
1213 for (Int_t l = 0; l < nParsed; l++) {
1214 TString Tag = ((TObjString *)Opts[l])->GetString();
1216 Int_t in = Tag.Index(
"=");
1218 TString subTag(Tag.Data(),in);
1220 kgo =
kOpt(subTag.Data());
1222 int len=
sizeof(fBFC[kgo].Comment);
1223 memset(fBFC[kgo].Comment,0,len);
1224 TString Comment(Tag.Data()+in+1,Tag.Capacity()-in-1);
1225 if ( Comment.Length() <= len ){
1226 strncpy (fBFC[kgo].Comment, Comment.Data(),
sizeof(fBFC[kgo].Comment));
1227 gMessMgr->QAInfo() << Form(
" Set %s = %s", fBFC[kgo].Key,fBFC[kgo].Comment) << endm;
1229 gMessMgr->Error() << Form(
" Cpy problem [%s] is > %d - adjust BFC Comment field size",
1230 Comment.Data(),len) << endm;
1236 kgo =
kOpt(Tag.Data(),kFALSE);
1240 TString Comment(fBFC[kgo].Comment);
1241 TString Opts(fBFC[kgo].Opts);
1242 if (Tag.BeginsWith(
"Test.",TString::kIgnoreCase) && ! Comment.BeginsWith(
"/star/") &&
1243 Opts.BeginsWith(
"test_",TString::kIgnoreCase)) {
1244 SetOptions(Opts,Tag);
1246 if ((Tag.BeginsWith(
"Test.",TString::kIgnoreCase) ||
1247 Tag.BeginsWith(
"test_",TString::kIgnoreCase) ||
1248 Tag.BeginsWith(
"eval_",TString::kIgnoreCase)) && Comment.BeginsWith(
"/star/") ) {
1250 gMessMgr->QAInfo() <<
"Default Test chain set " << fBFC[fkChain].Key <<
" with input " << fBFC[fkChain].Comment << endm;
1263 if (Tag.BeginsWith(
"dbv")) {
1264 if (Tag.Length() == 11) (
void) sscanf(Tag.Data(),
"dbv%8d",&FDate);
1265 if (Tag.Length() == 18) (
void) sscanf(Tag.Data(),
"dbv%8d.%6d",&FDate,&FTime);
1266 if (Tag.Length() == 11 || Tag.Length() == 18) {
1267 gMessMgr->QAInfo() << Tag.Data() <<
" ... but still will be considered as a dynamic timestamp (Max DB EntryTime) "
1268 << FDate <<
"." << FTime << endm;
1269 #ifdef USE_BFCTIMESTAMP
1273 TObjArray *subStrL = TPRegexp(BFC_DBREGEXP).MatchS(Tag);
1278 TS.Date = (((TObjString *) subStrL->At(2))->GetString()).Atoi();
1280 TS.Detector = ((TObjString *) subStrL->At(4))->GetString();
1281 TS.Realm = ((TObjString *) subStrL->At(6))->GetString();
1283 if ( TS.Realm.IsNull() ){ realm =
"*";}
1284 else { realm = TS.Realm;}
1286 GTSOptions.push_back(TS);
1288 LOG_WARN <<
"Override timestamp for detector requested\n\t"
1289 <<
"Detector " << TS.Detector <<
"\n\t"
1290 <<
"Realm " << realm <<
"\n\t"
1291 <<
"Date " << TS.Date <<
"\n\t"
1292 <<
"Time " << TS.Time << endm;
1296 }
else if (Tag.BeginsWith(
"sdt")) {
1297 if (Tag.Length() == 11) (
void) sscanf(Tag.Data(),
"sdt%8d",&FDateS);
1298 if (Tag.Length() == 18) (
void) sscanf(Tag.Data(),
"sdt%8d.%6d",&FDateS,&FTimeS);
1299 if (Tag.Length() == 11 || Tag.Length() == 18) {
1300 gMessMgr->QAInfo() << Tag.Data() <<
" ... but still will be considered as a dynamic timestamp (Event Time) "
1301 << FDateS <<
"." << FTimeS << endm;
1307 }
else if ( Tag.BeginsWith(
"gopt") && Tag.Length() == 13){
1310 char GOptName[4],GOptValue[7];
1311 TString property(
".gopt.");
1314 (void) sscanf(Tag.Data(),
"gopt%3s%6s",GOptName,GOptValue);
1318 property += GOptName;
1319 Gproperty.push_back(property);
1320 Gvalue.push_back(GOptValue);
1321 Gpattern.push_back(
"*");
1331 gMessMgr->QAInfo() << Tag.Data() <<
" ... this will set an general attribute "
1332 <<
property.Data() <<
" with value " << GOptValue <<
" to "
1338 }
else if (Tag.BeginsWith(
"rung")) {
1340 if (Tag.Length() > 4) (
void) sscanf(Tag.Data(),
"rung.%d",&fRunG);
1341 gMessMgr->QAInfo() << Tag.Data() <<
" will be considered as Run number (& rndm seed set) "
1342 << fRunG <<
" for simulation." << endm;
1346 }
else if (Tag.BeginsWith(
"VFStore" ,TString::kIgnoreCase) ||
1347 Tag.BeginsWith(
"TpcVpdVzDiffCut",TString::kIgnoreCase)
1350 Ssiz_t idx = Tag.Index(
':');
1356 Gproperty.push_back(Tag(0,idx));
1357 Gvalue.push_back(Tag(idx+1,64));
1359 Gpattern.push_back(
"*");
1361 gMessMgr->QAInfo() <<
"Detecting " << Tag(0,idx).Data() <<
" = " << Tag(idx+1,64).Data() <<
" as global property" << endm;
1368 }
else if (Tag.BeginsWith(
"FiltTrg",TString::kIgnoreCase)) {
1369 TString filtTrgTag = Tag;
1370 Ssiz_t flavorIdx = Tag.Index(
'_');
1371 if (flavorIdx > 0) {
1372 filtTrgTag = Tag(0,flavorIdx);
1373 fFiltTrg = Tag(flavorIdx+1,64);
1375 if (filtTrgTag.CompareTo(
"FiltTrgExc",TString::kIgnoreCase)==0) {
1376 gMessMgr->QAInfo() <<
"Trigger Filtering exclude with flavor=" << fFiltTrg << endm;
1377 fFiltTrg.Prepend(
'-');
1378 }
else if (filtTrgTag.CompareTo(
"FiltTrgInc",TString::kIgnoreCase)==0 ||
1379 filtTrgTag.CompareTo(
"FiltTrg" ,TString::kIgnoreCase)==0) {
1380 gMessMgr->QAInfo() <<
"Trigger Filtering include with flavor=" << fFiltTrg << endm;
1381 fFiltTrg.Prepend(
'+');
1387 }
else if (Tag.BeginsWith(
"fmsGainCorr",TString::kIgnoreCase)) {
1388 fFmsGainCorrTag = Tag;
1391 kgo =
kOpt(Tag.Data(),kFALSE);
1396 static const Char_t *path =
".:.$STAR_HOST_SYS/lib::.$STAR_HOST_SYS/LIB:$STAR/.$STAR_HOST_SYS/lib:$STAR/.$STAR_HOST_SYS/LIB";
1397 TString File = Tag; File +=
".so";
1398 Char_t *file = gSystem->Which(path,File.Data(),kReadPermission);
1401 Bfc_st row = {
"",
"",
"",
"",
"",
"",
"",kTRUE};
1402 memcpy (&row.Key, Tag.Data(), Tag.Length());
1403 if (Tag.Contains(
"Maker")) memcpy (&row.Maker, Tag.Data(), Tag.Length());
1404 memcpy (&row.Libs, Tag.Data(), Tag.Length());
1405 fchainOpt->
AddAt(&row);
1406 fNoChainOptions = fchainOpt->
GetNRows();
1407 fBFC = fchainOpt->GetTable();
1410 kgo =
kOpt(Tag.Data(),kFALSE);
1414 gMessMgr->QAInfo() <<
" Invalid Option " << Tag.Data() <<
". !! ABORT !! " << endm;
1429 assert(k<fNoChainOptions);
1430 Int_t n = strlen(fBFC[k].Opts);
1431 if (n > 0) SetOptions(fBFC[k].Opts,fBFC[k].Key);
1432 if (!fBFC[k].Flag) {
1433 fBFC[k].Flag = kTRUE;
1434 gMessMgr->QAInfo() << Form(
" Switch On %20s by %s", fBFC[k].Key, chainName) << endm;
1437 assert(-k<fNoChainOptions);
1438 if (k < 0 && fBFC[-k].Flag) {
1439 fBFC[-k].Flag = kFALSE;
1440 gMessMgr->QAInfo() << Form(
" Switch Off %20s by %s", fBFC[-k].Key, chainName) << endm;
1447 Bool_t StBFChain::GetOption(
const Int_t k)
const
1449 return (k>0 && k <fNoChainOptions) ? fBFC[k].Flag : kFALSE;
1474 Int_t o =
kOpt(Opt);
1476 else if(!GetOption(o))
return NULL;
1477 else return(fBFC[o].Comment);
1512 TString tChain(chainOpts);
1516 if (tChain ==
"" || tChain.CompareTo(
"ittf",TString::kIgnoreCase) == 0) {
1517 gMessMgr->QAInfo() <<
"\tPossible Chain Options are:" << endm;
1518 for (k=0;k<fNoChainOptions;k++)
1520 << Form(
" %3d: %-30s:%-12s:%-12s:%s:%s:%s:%s"
1521 ,k,fBFC[k].Key,fBFC[k].Name,fBFC[k].Chain,fBFC[k].Opts,fBFC[k].Maker,fBFC[k].Libs,fBFC[k].Comment)
1526 TString STAR_VERSION(
"$STAR_VERSION");
1527 gSystem->ExpandPathName(STAR_VERSION);
1528 gMessMgr->QAInfo() <<
"==============================================" << endm;
1529 gMessMgr->QAInfo() <<
"============= You are in " << STAR_VERSION.Data() <<
" ===============" << endm;
1530 gMessMgr->QAInfo() <<
"Requested chain " <<
GetName() <<
" is :\t" << tChain.Data() << endm;
1531 SetOptions(tChain,
"Chain");
1532 if (GetOption(
"NewTpcAlignment")) {
1533 gMessMgr->QAInfo() <<
"Set environment to use NewTpcAlignment" << endm;
1534 gEnv->SetValue(
"NewTpcAlignment",1);
1536 if (!GetOption(
"NoDefault")) {
1538 if (gClassTable->GetID(
"TGiant3") >= 0) {
1540 SetOption(
"-VMCPassive",
"Default,TGiant3");
1541 SetOption(
"-VMCAppl",
"Default,TGiant3");
1542 SetOption(
"-RootVMC",
"Default,TGiant3");
1543 if (GetOption(
"xgeometry")) {
1544 SetOption(
"-geometry",
"Default,-xgeometry");
1545 SetOption(
"-geomNoField",
"Default,-xgeometry");
1548 if (GetOption(
"fzin")) {
1549 gMessMgr->Error() <<
"Option fzin cannot be used in root.exe. Use root4star" << endm;
1552 if (GetOption(
"ntin")) {
1553 gMessMgr->Error() <<
"Option ntin cannot be used in root.exe. Use root4star" << endm;
1557 if (GetOption(
"gstar") || GetOption(
"pythia")) {
1558 SetOption(
"VMC",
"Default,-TGiant3,gstar");
1560 SetOption(
"-pythia",
"Default,-TGiant3");
1564 SetOption(
"-geantL",
"Default,-TGiant3");
1565 SetOption(
"-geometry",
"Default,-TGiant3");
1566 SetOption(
"-geomNoField",
"Default,-TGiant3");
1568 if (! (GetOption(
"VMC") || GetOption(
"VMCPassive"))) {
1569 SetOption(
"VMCPassive",
"Default,-TGiant3");
1573 SetOption(
"StarMiniCern",
"Default,-TGiant3");
1576 if (GetOption(
"ITTF") && ! (GetOption(
"Sti") || GetOption(
"StiCA") || GetOption(
"StiVMC"))) {
1577 TString STAR_LEVEL(gSystem->Getenv(
"STAR_LEVEL"));
1578 if (STAR_LEVEL ==
".DEV2")
SetOption(
"StiCA",
"Default,ITTF");
1582 if (!GetOption(
"Eval") && GetOption(
"AllEvent"))
SetOption(
"Eval",
"-Eval,AllEvent");
1586 for (k = 1; k<fNoChainOptions;k++) {
1588 gMessMgr->QAInfo() << Form(
"================== %20s\tis ON \t: %s",
1589 (
char *) fBFC[k].Key, (
char *) fBFC[k].Comment) << endm;
1590 Bfc->
AddAt(&fBFC[k]);
1596 void StBFChain::Set_IO_Files (
const Char_t *infile,
const Char_t *outfile){
1599 if (strlen(infile) > 2) {
1600 gc = TString(infile,3);
1604 SetInputFile(infile);
1608 void StBFChain::SetInputFile (
const Char_t *infile){
1610 if (infile) fInFile = infile;
1611 if (fInFile !=
"") {
1612 fInFile.ReplaceAll(
"\n",
";");
1613 fInFile.ReplaceAll(
"#",
";");
1614 fInFile.ReplaceAll(
":",
";");
1615 gMessMgr->QAInfo() <<
"Input file name = " << fInFile.Data() << endm;
1618 fInFile = fBFC[fkChain].Comment;
1619 fInFile.ReplaceAll(
"\n",
";");
1620 gMessMgr->QAInfo() <<
"Default Input file name = " << fInFile.Data() <<
" for chain : " << fBFC[fkChain].Key << endm;
1623 if (fInFile ==
"") {
SetOption(
"-in",
"No Input File");
SetOption(
"-InTree",
"NoInput File");
return;}
1624 if (!GetOption(
"fzin") && !GetOption(
"ntin")) {
1627 ParseString(fInFile,Files);
1630 while ((File = (TObjString *) next())) {
1631 TString
string = File->GetString();
1632 if (!
string.Contains(
"*") && !
string.BeginsWith(
"@") &&
1633 gSystem->AccessPathName(
string.Data())) {
1634 gMessMgr->Error() <<
"StBFChain::SetInputFile *** NO FILE: " <<
string.Data() <<
", exit!" << endm;
1637 else fSetFiles->AddFile(File->String().Data());
1645 if (! GetOption(
"NoOutput")) {
1649 if (fInFile !=
"") {
1650 if (GetOption(
"fzin") || GetOption(
"ntin")) {
1652 ParseString(fInFile,words);
1653 TIter nextL(&words);
1654 TObjString *word = 0;
1655 while ((word = (TObjString *) nextL())) {
1656 if (word->GetString().Contains(
".fz") ||
1657 word->GetString().Contains(
".nt")) {
1658 fFileOut = gSystem->BaseName(word->GetName());
1663 fFileOut = gSystem->BaseName(fInFile.Data());
1664 if (GetOption(
"shadow")) {
1665 TObjArray* fileOutTokens = fFileOut.Tokenize(
"_.");
1666 TString& runToken = ((TObjString*) (fileOutTokens->At(2)))->String();
1667 TString& seqToken = ((TObjString*) (fileOutTokens->At(4)))->String();
1668 if (!(runToken.CompareTo(
"adc"))) {
1669 runToken = ((TObjString*) (fileOutTokens->At(3)))->String();
1670 seqToken = ((TObjString*) (fileOutTokens->At(5)))->String();
1672 if (!(runToken.IsDigit())) {
1673 LOG_ERROR <<
"Unable to locate run number in filename for shadowing." << endm;
1675 fFileOut.ReplaceAll(runToken,Form(
"%d",
1676 StShadowMaker::getRunNumber(runToken.Atoi())));
1678 if (!(seqToken.IsDigit())) {
1679 LOG_ERROR <<
"Unable to locate file sequence number in filename for shadowing." << endm;
1681 fFileOut.ReplaceAll(seqToken,Form(
"%07d",
1682 StShadowMaker::getFileSeq(seqToken.Atoi())));
1684 delete fileOutTokens;
1688 if (fFileOut ==
"") {
1689 if (GetOption(
"pythia")) fFileOut =
"pythia.root";
1690 else if (GetOption(
"hijing")) fFileOut =
"hijing.root";
1691 else if (GetOption(
"VMC")) fFileOut =
"VMC.root";
1692 else if (GetOption(
"gstar")) fFileOut =
"gtrack.root";
1694 if ( fFileOut !=
"") {
1695 fFileOut.ReplaceAll(
"*",
"");
1696 fFileOut.ReplaceAll(
"@",
"");
1697 fFileOut.ReplaceAll(
"..",
".");
1698 fFileOut.ReplaceAll(
".daq",
"");
1699 fFileOut.ReplaceAll(
".fzd",
"");
1700 fFileOut.ReplaceAll(
".fz",
"");
1701 fFileOut.ReplaceAll(
".nt",
"");
1702 fFileOut.ReplaceAll(
".root",
"");
1703 fFileOut.ReplaceAll(
".list",
"");
1704 fFileOut.ReplaceAll(
".lis",
"");
1706 fFileOut.Append(
".root");
1710 if (fFileOut !=
"") gMessMgr->QAInfo() <<
"Output root file name " << fFileOut.Data() << endm;
1711 else SetOption(
"NoOutput",
"No Output File");
1713 if ( ( GetOption(
"tags") || GetOption(
"lana") ) && (fFileOut !=
"") ){
1714 TString TagsName = fFileOut;
1715 if( GetOption(
"lana") ){
1716 TagsName.ReplaceAll(
".root",
".laser.root");
1717 }
else if ( GetOption(
"mtdEvtFilt") ){
1718 TagsName.ReplaceAll(
".root",
".pretags.root");
1720 TagsName.ReplaceAll(
".root",
".tags.root");
1722 SetTFile(
new TFile(TagsName.Data(),
"RECREATE"));
1735 if (geantMk && geantMk->InheritsFrom(
"St_geant_Maker")) {
1736 SetInput(
"geant",
".make/geant/.data");
1737 TString GeomVersion(
"");
1739 geantMk->SetAttr(
"RunG",fRunG);
1741 if (!GetOption(
"fzin") || GetOption(
"ForceGeometry")) {
1742 GeomVersion =
"y2004x";
1743 const DbAlias_t *DbAlias = GetDbAliases();
1745 for (Int_t i = 0; DbAlias[i].tag; i++) {
1747 r += DbAlias[i].tag;
1748 if ( !GetOption(DbAlias[i].tag,kFALSE) && !GetOption(r,kFALSE))
continue;
1749 GeomVersion = DbAlias[i].geometry;
1753 if (! found) gMessMgr->QAInfo() <<
"StBFChain::SetGeantOptions() Chain has not found geometry tag. Use " << GeomVersion << endm;
1754 TString GeometryOpt;
1755 if (GetOption(
"phys_off")) {GeometryOpt +=
"detp phys_off=1;"; geantMk->SetAttr(
"phys_off",kTRUE);}
1756 if (GetOption(
"hadr_off")) {GeometryOpt +=
"detp hadr_off=1;"; geantMk->SetAttr(
"hadr_off",kTRUE);}
1757 GeometryOpt += (
"detp geometry ");
1758 GeometryOpt += GeomVersion;
1759 ProcessLine(Form(
"((St_geant_Maker *) %p)->LoadGeometry(\"%s\");",geantMk,GeometryOpt.Data()));
1761 if ((GetOption(
"fzin") || GetOption(
"ntin") || GetOption(
"mtin") || fInFile.Data()[0] ==
';') && fInFile !=
"")
1762 ProcessLine(Form(
"((St_geant_Maker *) %p)->SetInputFile(\"%s\")",geantMk,fInFile.Data()));
1781 if (GetOption(
"Agi")) mk->SetAlias(
"VmcGeometry",
"db/.const/StarDb/AgiGeometry");
1782 else if (GetOption(
"AgML") ) mk->SetAlias(
"VmcGeometry",
"db/.const/StarDb/AgMLGeometry");
1783 else if (GetOption(
"VmcGeo")) mk->SetAlias(
"VmcGeometry",
"db/.const/StarDb/VmcGeo");
1784 else mk->SetAlias(
"VmcGeometry",
"db/.const/StarDb/AgiGeometry");
1786 Int_t Idate=0,Itime=0;
1789 for (i = 1; i < fNoChainOptions; i++) {
1790 if (fBFC[i].Flag && !strncmp(fBFC[i].Key ,
"DbV",3)){
1794 gMessMgr->QAInfo() <<
"StBFChain::SetDbOptions Found time-stamp " << fBFC[i].Key <<
" [" << fBFC[i].Comment <<
"]" << endm;
1795 (void) sscanf(fBFC[i].Comment,
"%d/%d",&Idate,&Itime);
1801 if( ! Idate && FDate){
1802 gMessMgr->QAInfo() <<
"StBFChain::SetDbOptions Switching to user chosen dynamic time-stamp (MaxEntry) "
1803 << FDate <<
" " << FTime << endm;
1804 gMessMgr->QAInfo() <<
"Chain may crash if time-stamp is not validated by db interface" << endm;
1813 gMessMgr->QAInfo() <<
"StBFChain::SetDbOptions Switching to user chosen dynamic time-stamp (Start)"
1814 << FDateS <<
" " << FTimeS << endm;
1815 gMessMgr->QAInfo() <<
"Chain may crash if time-stamp is not validated by db interface" << endm;
1817 db->SetDateTime(FDateS,FTimeS);
1819 if (GetOption(
"simu")) {
1820 const DbAlias_t *DbAlias = GetDbAliases();
1822 for (Int_t i = 0; DbAlias[i].tag; i++) {
1823 if (GetOption(DbAlias[i].tag,kFALSE)) {
1824 db->SetDateTime(DbAlias[i].tag);
1829 if (! found) {gMessMgr->QAInfo() <<
"StBFChain::SetDbOptions() Chain has not set a time-stamp" << endm;}
1831 gMessMgr->QAInfo() << db->
GetName()
1832 <<
" Maker set time = "
1833 << db->GetDateTime().GetDate() <<
"."
1834 << db->GetDateTime().GetTime() << endm;
1835 if (GetOption(
"SIMU") && m_EvtHddr) {
1836 gMessMgr->QAInfo() <<
GetName() <<
" Chain set time from " << db->
GetName() << endm;
1837 m_EvtHddr->SetDateTime(db->GetDateTime());
1844 db->SetMaxEntryTime(Idate,Itime);
1845 gMessMgr->Info() <<
"\tSet DataBase max entry time " << Idate <<
"/" << Itime
1846 <<
" for St_db_Maker(\"" << db->
GetName() <<
"\")" << endm;
1848 #ifdef USE_BFCTIMESTAMP
1853 for (UInt_t i = 0; i < GTSOptions.size() ; i++){
1854 if ( (GTSOptions[i].Realm).IsNull() ){ realm =
"*";}
1855 else { realm = GTSOptions[i].Realm;}
1860 if ( GTSOptions[i].Type == 1){
1861 db->AddMaxEntryTimeOverride(GTSOptions[i].Date,0,
1862 (
char *) realm.Data(),
1863 (
char *) GTSOptions[i].Detector.Data());
1865 LOG_INFO <<
"Recovering override stamp " << i <<
" :: "
1866 << GTSOptions[i].Detector <<
", " << realm <<
", "
1867 << GTSOptions[i].Date <<
", " << GTSOptions[i].Time << endm;
1869 LOG_WARN <<
"Found override type " << GTSOptions[i].Type <<
" no treated yet"
1870 << GTSOptions[i].Detector <<
", " << realm <<
", "
1871 << GTSOptions[i].Date <<
", " << GTSOptions[i].Time << endm;
1878 if (!GetOption(
"fzin")) {
1883 Field_t FieldOptions[5] = {
1884 {
"FullMagFNegative", -1.0},
1885 {
"FullMagFPositive", 1.0},
1886 {
"HalfMagFNegative", -0.5},
1887 {
"HalfMagFPositive", 0.5},
1891 if (GetOption(
"FieldON")) {
1892 if (GetOption(
"ReverseField")) k = 0;
1894 }
else if (GetOption(
"HalfField")) {
1895 if (GetOption(
"ReverseField")) k = 2;
1897 }
else if (GetOption(
"FieldOff")) k = 4;
1899 SetFlavor(FieldOptions[k].name,
"MagFactor");
1900 gMessMgr->QAInfo() <<
"StBFChain::SetDbOptions SetFlavor(\"" << FieldOptions[k].name
1901 <<
"\",\"MagFactor\")" << endm;
1902 if ( gClassTable->GetID(
"StarMagField") >= 0) {
1904 Form(
"if (!StarMagField::Instance()) new StarMagField( StarMagField::EBField::kMapped, %f, kTRUE);",
1905 FieldOptions[k].scale);
1910 if (
this == GetTopChain()) {
1912 if (! GetOption(
"TpcDb") ) {mk->SetAttr(
"blacklist",
"tpc"); gMessMgr->QAInfo() <<
"blacklist tpc" << endm;}
1913 if (!(GetOption(
"SvtDb")||GetOption(
"SvtCalDb"))) {mk->SetAttr(
"blacklist",
"svt"); gMessMgr->QAInfo() <<
"blacklist svt" << endm;}
1914 if (!(GetOption(
"SsdDb")||GetOption(
"SsdCalDb"))) {mk->SetAttr(
"blacklist",
"ssd"); gMessMgr->QAInfo() <<
"blacklist ssd" << endm;}
1915 if (!(GetOption(
"SstDb")||GetOption(
"SstCalDb"))) {mk->SetAttr(
"blacklist",
"sst"); gMessMgr->QAInfo() <<
"blacklist sst" << endm;}
1916 if (! GetOption(
"EemcDb") ) {mk->SetAttr(
"blacklist",
"eemc"); gMessMgr->QAInfo() <<
"blacklist eemc"<< endm;}
1917 if (! GetOption(
"FmsDb") ) {mk->SetAttr(
"blacklist",
"fms"); gMessMgr->QAInfo() <<
"blacklist fms" << endm;}
1919 if (GetOption(
"NoSvtIt")) {mk->SetAttr(
"blacklist",
"svt"); gMessMgr->QAInfo() <<
"blacklist svt" << endm;}
1920 if (GetOption(
"NoSsdIt")) {mk->SetAttr(
"blacklist",
"ssd"); gMessMgr->QAInfo() <<
"blacklist ssd" << endm;}
1921 if (GetOption(
"NoSstIt")) {mk->SetAttr(
"blacklist",
"sst"); gMessMgr->QAInfo() <<
"blacklist sst" << endm;}
1930 if (!treeMk)
return;
1931 if (GetOption(
"EvOut")){
1932 gMessMgr->QAInfo() <<
"Will Write StEvent out, treeMk->GetFile() = " << treeMk->GetFile() << endm;
1933 treeMk->IntoBranch(
"eventBranch",
"StEvent");
1934 if (GetOption(
"EvOutOnly"))
return;
1936 if (! GetOption(
"nohistos")) treeMk->SetBranch(
"histBranch");
1937 if (! GetOption(
"norunco")) treeMk->SetBranch(
"runcoBranch");
1938 if (GetOption(
"McEvent") && GetOption(
"McEvOut")){
1939 gMessMgr->QAInfo() <<
"Will Write StMcEvent out, treeMk->GetFile() = " << treeMk->GetFile() << endm;
1940 treeMk->IntoBranch(
"McEventBranch",
"StMcEvent");
1942 if (GetOption(
"GeantOut")) treeMk->IntoBranch(
"geantBranch",
"geant");
1943 if (GetOption(
"AllEvent")) {
1944 if (GetOption(
"fzin") ||
1945 GetOption(
"ntin") ||
1946 GetOption(
"gstar") ||
1947 GetOption(
"pythia") ||
1949 GetOption(
"PrepEmbed")) {
1950 treeMk->IntoBranch(
"geantBranch",
"geant");
1951 treeMk->IntoBranch(
"geantBranch",
"geant/.data/particle");
1952 treeMk->IntoBranch(
"geantBranch",
"geant/.data/g2t_rch_hit");
1957 Long_t StBFChain::ProcessLine(
const char *line) {
1958 if (! line || !strlen(line))
return -1;
1959 if (Debug()) gMessMgr->QAInfo() <<
"ProcessLine " << line << endm;
1960 TInterpreter::EErrorCode error = TInterpreter::kNoError;
1961 Long_t res = gInterpreter->ProcessLine(line, &error);
1962 if (error != TInterpreter::kNoError) {
1963 gMessMgr->Error() <<
"StBFChain::ProcessLine command:" << line <<
" has failed. Quit job." << endm;
1969 TString StBFChain::GetGeometry()
const
1972 for (Int_t i=0;i<n;i++) {
1973 if (!fchainOpt->GetTable()[i].Flag)
continue;
1974 TString k(fchainOpt->GetTable()[i].Key);
1976 if (k[0]!=
'y')
continue;
1977 if (k[1]!=
'2')
continue;
1978 if (k[2] <
'0' || k[2]>
'9')
continue;
1979 if (k[3] <
'0' || k[3]>
'9')
continue;
1980 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.