39 void genDst(
unsigned int Last,
44 void genDst(
unsigned int First,
52 gROOT->Macro(
"$STAR/StRoot/StMuDSTMaker/COMMON/macros/loadSharedLibraries.C");
53 gSystem->Load(
"StDbBroker");
54 gSystem->Load(
"St_db_Maker");
55 gSystem->Load(
"StEEmcUtil");
60 gSystem->Load(
"libMinuit");
62 gSystem->Load(
"StBTofUtil");
63 gSystem->Load(
"StGenericVertexMaker");
70 gSystem->Load(
"StEmcRawMaker");
71 gSystem->Load(
"StEmcADCtoEMaker");
72 gSystem->Load(
"StPreEclMaker");
73 gSystem->Load(
"StEpcMaker");
74 gSystem->Load(
"StEEmcDbMaker");
75 gSystem->Load(
"StFmsUtil");
76 gSystem->Load(
"StFmsDbMaker");
77 gSystem->Load(
"StTriggerUtilities");
80 gSystem->Load(
"libStPicoEvent");
81 gSystem->Load(
"libStPicoDstMaker");
87 gSystem->Load(
"libStarAgmlUtil");
88 gSystem->Load(
"libStarAgmlLib");
91 gSystem->Load(
"libGeometry");
92 gSystem->Load(
"libStarGeometry");
97 gSystem->Load(
"StDetectorDbMaker");
98 gSystem->Load(
"StarMagField");
99 gSystem->Load(
"StMagF");
100 gSystem->Load(
"StMtdUtil");
101 gSystem->Load(
"StMtdMatchMaker");
102 gSystem->Load(
"StMtdCalibMaker");
107 gSystem->Load(
"StBTofUtil");
108 gSystem->Load(
"StVpdCalibMaker");
109 gSystem->Load(
"StBTofCalibMaker");
110 gSystem->Load(
"StBTofMatchMaker");
115 gSystem->Load(
"StETofUtil");
116 gSystem->Load(
"StETofCalibMaker");
117 gSystem->Load(
"StETofHitMaker");
118 gSystem->Load(
"StETofMatchMaker");
123 gSystem->Load(
"libStDetectorDbMaker.so");
124 gSystem->Load(
"StEvent");
125 gSystem->Load(
"StEventMaker");
128 gSystem->Load(
"StFwdUtils");
129 gSystem->Load(
"libStarGeneratorUtil.so");
130 gSystem->Load(
"libXMLIO");
131 gSystem->Load(
"libgenfit2");
132 gSystem->Load(
"libKiTrack");
134 gSystem->Load(
"libMathMore");
135 gSystem->Load(
"StEventUtilities");
136 gSystem->Load(
"StEpdUtil");
137 gSystem->Load(
"StFwdTrackMaker");
138 gSystem->Load(
"StFwdUtils");
140 gSystem->Load(
"StFttDbMaker");
141 gSystem->Load(
"StFttRawHitMaker");
142 gSystem->Load(
"StFttHitCalibMaker");
143 gSystem->Load(
"StFttClusterMaker");
144 gSystem->Load(
"StFttPointMaker");
146 gSystem->Load(
"libMinuit.so");
147 gSystem->Load(
"StFcsDbMaker");
148 gSystem->Load(
"StFcsRawHitMaker");
149 gSystem->Load(
"StFcsWaveformFitMaker");
150 gSystem->Load(
"StFcsClusterMaker");
151 gSystem->Load(
"StFcsPointMaker");
152 gSystem->Load(
"StFcsTrackMatchMaker");
155 gSystem->Load(
"StFstUtil");
156 gSystem->Load(
"StFstDbMaker");
157 gSystem->Load(
"StFstRawHitMaker");
158 gSystem->Load(
"StFstClusterMaker");
159 gSystem->Load(
"StFstHitMaker");
162 void procGeoTag(TObjArray* optionTokens)
164 if (TClass::GetClass(
"AgBlock"))
return;
168 for (
int tk=0; tk < optionTokens->GetEntries(); tk++) {
169 TString& tok = ((TObjString*) (optionTokens->At(tk)))->String();
170 if (tok.BeginsWith(
"y20")){
172 optionTokens->RemoveAt(tk);
173 optionTokens->Compress();
179 AgModule::SetStacker(
new StarTGeoStacker );
184 if ( TClass::GetClass(
"StarGeometry") ) { StarGeometry::Construct( tag ); }
185 else { (
new Geometry() )->ConstructGeometry(tag); }
187 gMessMgr->Warning() <<
"No geometry tag passed! (e.g. y2017a)" << endm;
191 bool findAndRemoveOption(
const char* optionName, TObjArray* optionTokens)
193 TString optName = optionName;
195 TObject* obj = optionTokens->FindObject(optName.Data());
197 optionTokens->Remove(obj);
198 optionTokens->Compress();
204 void genDst(
unsigned int First,
213 fullChain.SetDebug(1);
215 StMuDstMaker muDstMaker(0, 0,
"", infile,
"st:MuDst.root", 1e9);
223 TChain& muDstChain = *muDstMaker.
chain();
224 unsigned int nEntries = muDstChain.GetEntries();
225 unsigned int LastToRead = Last > 0 ? min(Last, nEntries) : nEntries;
226 gMessMgr->Info() << nEntries <<
" events in chain, " << LastToRead-First+1 <<
" will be read." << endm;
233 TTree* muDstTreeOut = 0;
236 TString CasedOptions = options;
237 TString Options = options;
239 TString optDelim =
" ,";
240 TObjArray* optionTokens = Options.Tokenize(optDelim);
241 optionTokens->SetOwner(kTRUE);
244 TString flavors =
"ofl";
247 if (findAndRemoveOption(
"Simu",optionTokens) && ! findAndRemoveOption(
"NoSimuDb",optionTokens))
248 flavors.Prepend(
"sim+");
251 TObject* firstFile = muDstChain.GetListOfFiles()->At(0);
253 TString firstFileName = firstFile->GetTitle();
254 firstFileName = firstFileName(firstFileName.Last(
'/')+1,firstFileName.Length());
255 if (firstFileName.BeginsWith(
"st_")) {
256 TString fileStream = firstFileName(3,firstFileName.Index(
'_',3)-3);
257 if (fileStream.Length()>0) flavors.Prepend(fileStream +=
'+');
264 if (findAndRemoveOption(
"picodst",optionTokens)) {
273 muDstMaker.
SetStatus(
"PrimaryVertices", 1);
274 muDstMaker.
SetStatus(
"PrimaryTracks", 1);
327 fttclu->SetTimeCut(1, -40, 40);
332 fwdTrack->setConfigForData( );
335 fwdTrack->setIncludePrimaryVertexInFit(
true);
337 fwdTrack->SetDebug(2);
340 match->setMaxDistance(6,10);
341 match->setFileName(
"fcstrk.root");
346 fwdAna->setLocalOutputFile(
"StFwdAnalysisMaker.root");
348 StFwdFitQAMaker *fwdFitQA =
new StFwdFitQAMaker();
349 fwdFitQA->SetDebug();
352 fwdQAMk->SetDebug(2);
355 if (findAndRemoveOption(
"btofmatch",optionTokens)) {
357 procGeoTag(optionTokens);
368 if (findAndRemoveOption(
"btofstartless",optionTokens)) {
375 if (findAndRemoveOption(
"etofmatch",optionTokens)) {
377 procGeoTag(optionTokens);
387 if (findAndRemoveOption(
"mtdmatch",optionTokens)) {
389 procGeoTag(optionTokens);
401 gMessMgr->Info() <<
"PicoSetup Complete" << endm;
402 }
else if (Options.Contains(
"fwd")) {
411 muDstMaker.
SetStatus(
"PrimaryVertices",0);
418 outFile =
new TFile(outfile,
"RECREATE");
421 TString fileStr = infile;
422 Ssiz_t dir = fileStr.Last(
'/');
424 gMessMgr->Error() <<
"No specification for output when input is in local directory!" << endm;
427 fileStr.Remove(0,dir+1);
428 outFile =
new TFile(fileStr.Data(),
"RECREATE");
430 muDstTreeOut = muDstChain.CloneTree(0);
431 muDstTreeOut->Branch(
"PrimaryVertices", &verticesRefitted, 65536, 99);
439 gMessMgr->Info() <<
"No processing specified - just reading a MuDst?" << endm;
446 for (
int tk=0; tk < optionTokens->GetEntries(); tk++) {
447 TString& Tag = ((TObjString*) (optionTokens->At(tk)))->String();
450 if (Tag.BeginsWith(
"dbv")) {
452 if (Tag.Length() == 11) (
void) sscanf(Tag.Data(),
"dbv%8d",&FDate);
453 if (Tag.Length() == 18) (
void) sscanf(Tag.Data(),
"dbv%8d.%6d",&FDate,&FTime);
463 StMaker* attrMaker = processMaker;
464 Ssiz_t delim = Tag.
First(
':');
466 if (delim > 0 && Tag[delim+1] ==
':') {
467 TString altMakerName = Tag(0,delim);
469 Ssiz_t casedMakerNameIdx = CasedOptions.Index(altMakerName,0,TString::ECaseCompare::kIgnoreCase);
470 if (casedMakerNameIdx >= 0) altMakerName = CasedOptions(casedMakerNameIdx,delim);
471 StMaker* altMaker = fullChain.GetMaker(altMakerName.Data());
472 if (!altMaker) altMaker = fullChain.GetMakerInheritsFrom(altMakerName.Data());
474 gMessMgr->Warning() <<
"No maker found with name or class " << altMakerName.Data() << endm;
477 attrMaker = altMaker;
479 delim = Tag.First(
':');
482 attrMaker->SetAttr(Tag.Data(),1);
484 TString key(Tag(0,delim));
485 TString& val = Tag.Remove(0,delim+1);
486 if (val.IsDigit()) { attrMaker->SetAttr(key.Data(),val.Atoi()); }
487 else if (val.IsFloat()) { attrMaker->SetAttr(key.Data(),val.Atof()); }
488 else { attrMaker->SetAttr(key.Data(),val.Data()); }
491 processMaker->PrintAttr();
496 gMessMgr->QAInfo() << Form(
"Run is started at Date/Time %i/%i",t.GetDate(),t.GetTime()) << endm;
498 gMessMgr->QAInfo() << Form(
"Run on %s in %s",gSystem->HostName(),gSystem->WorkingDirectory()) << endm;
499 gMessMgr->QAInfo() << Form(
"with %s", fullChain.GetCVS()) << endm;
501 gMessMgr->Info() <<
"Chain setup Complete" << endm;
504 int iInit = fullChain.Init();
505 if (iInit >=
kStEOF) {fullChain.FatalErr(iInit,
"on init");
return;}
506 if (Last == 0)
return;
509 if (First > 1) fullChain.Skip(First - 1);
510 for (
unsigned int iEvent = First; iEvent <= LastToRead; iEvent++)
515 fullChain.SetDebug(2);
516 fwdTrack->SetDebug(2);
518 int iMake = fullChain.Make();
519 if (iMake) {fullChain.FatalErr(iMake,
"on make");
return;}
521 if (muDstTreeOut) muDstTreeOut->Fill();
523 int iClear = fullChain.Clear();
524 if (iClear) {fullChain.FatalErr(iClear,
"on clear");
return;}
535 gMessMgr->QAInfo() <<
"NumberOfEvents= " << eventCount << endm;
536 gMessMgr->QAInfo() <<
"Run completed " << endm;
550 void genDst(
unsigned int Last,
555 cout << TString::Format(
"genDst( %u, '%s', '%s', '%s' )", Last, options, infile, outfile ) << endl;
556 genDst(1,Last,options,infile,outfile);
560 genDst(5000,
"y2023a picodst PicoVtxMode:PicoVtxDefault",
"/work/st_fwd_22355048_raw_1000012.MuDst.root",
"PROD.root");
563 void pico( TString f,
int n = 500){
564 genDst(n,
"y2023a picodst PicoVtxMode:PicoVtxDefault", f.Data(),
"PROD.root" );
virtual TDataSet * First() const
Return the first object in the list. Returns 0 when list is empty.
Class that converts MuDst into PicoDst.
virtual void Remove(TDataSet *set)
Remiove the "set" from this TDataSet.
void setMaxFailedHitsInFit(int n=-1)
Sets the maximum number of hits that can be considered failed before the entire track fit fails...
void setUseVpdStart(const Bool_t val=kTRUE)
switch to force whether or not to use the VPD as the start time
void setMuDstIn(Bool_t muDstIn=kTRUE)
switch to read in StEvent/MuDst
void setMuDstIn(const bool val=kTRUE)
switch to read in StEvent/MuDst
void setVtxMode(const PicoVtxMode vtxMode)
Set vertex selection mode.
Muon Telescope Detector (MTD) Match Maker.
TChain * chain()
In read mode, returns pointer to the chain of .MuDst.root files that where selected.
void SetStatus(const char *arrType, int status)
void setGeoCache(TString gc)
Sets geometry cache filename.
void setSeedFindingWithFst()
Use Fst hits in the Seed Finding.
void setMuDstIn()
switch to read in StEvent/MuDst