36 void genDst(
unsigned int Last,
41 void genDst(
unsigned int First,
49 gROOT->Macro(
"$STAR/StRoot/StMuDSTMaker/COMMON/macros/loadSharedLibraries.C");
50 gSystem->Load(
"StDbBroker");
51 gSystem->Load(
"St_db_Maker");
52 gSystem->Load(
"StEEmcUtil");
57 gSystem->Load(
"libMinuit");
59 gSystem->Load(
"StBTofUtil");
60 gSystem->Load(
"StGenericVertexMaker");
67 gSystem->Load(
"StEmcRawMaker");
68 gSystem->Load(
"StEmcADCtoEMaker");
69 gSystem->Load(
"StPreEclMaker");
70 gSystem->Load(
"StEpcMaker");
71 gSystem->Load(
"StEEmcDbMaker");
72 gSystem->Load(
"StFmsUtil");
73 gSystem->Load(
"StFmsDbMaker");
74 gSystem->Load(
"StTriggerUtilities");
77 gSystem->Load(
"libStPicoEvent");
78 gSystem->Load(
"libStPicoDstMaker");
84 gSystem->Load(
"libStarAgmlUtil");
85 gSystem->Load(
"libStarAgmlLib");
88 gSystem->Load(
"libGeometry");
89 gSystem->Load(
"libStarGeometry");
94 gSystem->Load(
"StDetectorDbMaker");
95 gSystem->Load(
"StarMagField");
96 gSystem->Load(
"StMagF");
97 gSystem->Load(
"StMtdUtil");
98 gSystem->Load(
"StMtdMatchMaker");
99 gSystem->Load(
"StMtdCalibMaker");
104 gSystem->Load(
"StBTofUtil");
105 gSystem->Load(
"StVpdCalibMaker");
106 gSystem->Load(
"StBTofCalibMaker");
107 gSystem->Load(
"StBTofMatchMaker");
112 gSystem->Load(
"StETofUtil");
113 gSystem->Load(
"StETofCalibMaker");
114 gSystem->Load(
"StETofHitMaker");
115 gSystem->Load(
"StETofMatchMaker");
118 void procGeoTag(TObjArray* optionTokens)
120 if (TClass::GetClass(
"AgBlock"))
return;
124 for (
int tk=0; tk < optionTokens->GetEntries(); tk++) {
125 TString& tok = ((TObjString*) (optionTokens->At(tk)))->String();
126 if (tok.BeginsWith(
"y20")){
128 optionTokens->RemoveAt(tk);
129 optionTokens->Compress();
135 AgModule::SetStacker(
new StarTGeoStacker );
140 if ( TClass::GetClass(
"StarGeometry") ) { StarGeometry::Construct( tag ); }
141 else { (
new Geometry() )->ConstructGeometry(tag); }
143 gMessMgr->Warning() <<
"No geometry tag passed! (e.g. y2017a)" << endm;
147 bool findAndRemoveOption(
const char* optionName, TObjArray* optionTokens,
bool doRemove=
true)
149 TString optName = optionName;
151 TObject* obj = optionTokens->FindObject(optName.Data());
154 optionTokens->Remove(obj);
155 optionTokens->Compress();
162 bool findOption(
const char* optionName, TObjArray* optionTokens)
164 return findAndRemoveOption(optionName,optionTokens,
false);
167 void genDst(
unsigned int First,
177 StMuDstMaker muDstMaker(0, 0,
"", infile,
"st:MuDst.root", 1e9);
185 TChain& muDstChain = *muDstMaker.
chain();
186 unsigned int nEntries = muDstChain.GetEntries();
187 unsigned int LastToRead = Last > 0 ? min(Last, nEntries) : nEntries;
188 gMessMgr->Info() << nEntries <<
" events in chain, " << LastToRead-First+1 <<
" will be read." << endm;
195 TTree* muDstTreeOut = 0;
198 TString CasedOptions = options;
199 TString Options = options;
201 TString optDelim =
" ,";
202 TObjArray* optionTokens = Options.Tokenize(optDelim);
203 optionTokens->SetOwner(kTRUE);
206 TString flavors =
"ofl";
209 if (findOption(
"FXT",optionTokens))
210 flavors.Prepend(
"FXT+");
213 if (findAndRemoveOption(
"Simu",optionTokens) && ! findAndRemoveOption(
"NoSimuDb",optionTokens))
214 flavors.Prepend(
"sim+");
217 TObject* firstFile = muDstChain.GetListOfFiles()->At(0);
219 TString firstFileName = firstFile->GetTitle();
220 firstFileName = firstFileName(firstFileName.Last(
'/')+1,firstFileName.Length());
221 if (firstFileName.BeginsWith(
"st_")) {
222 TString fileStream = firstFileName(3,firstFileName.Index(
'_',3)-3);
223 if (fileStream.Length()>0) flavors.Prepend(fileStream +=
'+');
227 gMessMgr->Info() <<
"Using DB flavors: " << flavors << endm;
228 db->SetFlavor(flavors.Data());
230 if (findAndRemoveOption(
"picodst",optionTokens)) {
239 muDstMaker.
SetStatus(
"PrimaryVertices", 1);
240 muDstMaker.
SetStatus(
"PrimaryTracks", 1);
263 trigSimu->setMC(
false);
266 trigSimu->useOfflineDB();
267 trigSimu->bemc->setConfig(StBemcTriggerSimu::kOffline);
269 if (findAndRemoveOption(
"btofmatch",optionTokens)) {
271 procGeoTag(optionTokens);
282 if (findAndRemoveOption(
"btofstartless",optionTokens)) {
287 if (findOption(
"FXT",optionTokens)) {
288 btofCalib->SetAttr(
"btofFXT", 1);
293 if (findAndRemoveOption(
"etofmatch",optionTokens)) {
295 procGeoTag(optionTokens);
305 if (findAndRemoveOption(
"mtdmatch",optionTokens)) {
307 procGeoTag(optionTokens);
318 }
else if (Options.Contains(
"vf")) {
327 muDstMaker.
SetStatus(
"PrimaryVertices",0);
330 TClonesArray* verticesRefitted =
new TClonesArray(
"StMuPrimaryVertex", 1000);
334 outFile =
new TFile(outfile,
"RECREATE");
337 TString fileStr = infile;
338 Ssiz_t dir = fileStr.Last(
'/');
340 gMessMgr->Error() <<
"No specification for output when input is in local directory!" << endm;
343 fileStr.Remove(0,dir+1);
344 outFile =
new TFile(fileStr.Data(),
"RECREATE");
346 muDstTreeOut = muDstChain.CloneTree(0);
347 muDstTreeOut->Branch(
"PrimaryVertices", &verticesRefitted, 65536, 99);
350 processMaker->ToWhiteConst(
"vtxArray",verticesRefitted);
351 processMaker->SetAttr(
"useMuDst",1);
355 gMessMgr->Info() <<
"No processing specified - just reading a MuDst?" << endm;
362 for (
int tk=0; tk < optionTokens->GetEntries(); tk++) {
363 TString& Tag = ((TObjString*) (optionTokens->At(tk)))->String();
366 if (Tag.BeginsWith(
"dbv")) {
368 if (Tag.Length() == 11) (
void) sscanf(Tag.Data(),
"dbv%8d",&FDate);
369 if (Tag.Length() == 18) (
void) sscanf(Tag.Data(),
"dbv%8d.%6d",&FDate,&FTime);
371 db->SetMaxEntryTime(FDate,FTime);
372 gMessMgr->Info() <<
"\tSet DataBase max entry time " << FDate <<
"/" << FTime
373 <<
" for St_db_Maker(\"" << db->
GetName() <<
"\")" << endm;
379 StMaker* attrMaker = processMaker;
380 Ssiz_t delim = Tag.
First(
':');
382 if (delim > 0 && Tag[delim+1] ==
':') {
383 TString altMakerName = Tag(0,delim);
385 Ssiz_t casedMakerNameIdx = CasedOptions.Index(altMakerName,0,TString::ECaseCompare::kIgnoreCase);
386 if (casedMakerNameIdx >= 0) altMakerName = CasedOptions(casedMakerNameIdx,delim);
387 StMaker* altMaker = fullChain.GetMaker(altMakerName.Data());
388 if (!altMaker) altMaker = fullChain.GetMakerInheritsFrom(altMakerName.Data());
390 gMessMgr->Warning() <<
"No maker found with name or class " << altMakerName.Data() << endm;
393 attrMaker = altMaker;
395 delim = Tag.First(
':');
398 attrMaker->SetAttr(Tag.Data(),1);
400 TString key(Tag(0,delim));
401 TString& val = Tag.Remove(0,delim+1);
402 if (val.IsDigit()) { attrMaker->SetAttr(key.Data(),val.Atoi()); }
403 else if (val.IsFloat()) { attrMaker->SetAttr(key.Data(),val.Atof()); }
404 else { attrMaker->SetAttr(key.Data(),val.Data()); }
407 processMaker->PrintAttr();
412 gMessMgr->QAInfo() << Form(
"Run is started at Date/Time %i/%i",t.GetDate(),t.GetTime()) << endm;
414 gMessMgr->QAInfo() << Form(
"Run on %s in %s",gSystem->HostName(),gSystem->WorkingDirectory()) << endm;
415 gMessMgr->QAInfo() << Form(
"with %s", fullChain.GetCVS()) << endm;
419 int iInit = fullChain.Init();
420 if (iInit >=
kStEOF) {fullChain.FatalErr(iInit,
"on init");
return;}
421 if (Last == 0)
return;
424 if (First > 1) fullChain.Skip(First - 1);
425 for (
unsigned int iEvent = First; iEvent <= LastToRead; iEvent++)
427 int iMake = fullChain.Make();
428 if (iMake) {fullChain.FatalErr(iMake,
"on make");
return;}
430 if (muDstTreeOut) muDstTreeOut->Fill();
432 int iClear = fullChain.Clear();
433 if (iClear) {fullChain.FatalErr(iClear,
"on clear");
return;}
444 gMessMgr->QAInfo() <<
"NumberOfEvents= " << eventCount << endm;
445 gMessMgr->QAInfo() <<
"Run completed " << endm;
459 void genDst(
unsigned int Last,
464 genDst(1,Last,options,infile,outfile);
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.
virtual TDataSet * Last() const
Return the last object in the list. Returns 0 when list is empty.
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
Muon Telescope Detector (MTD) Match Maker.
virtual const char * GetName() const
special overload
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 saveAllStEvent(Bool_t a)
Set to kTRUE if all hits are to be saved on StEvent.
void setMuDstIn()
switch to read in StEvent/MuDst