BmnRoot 26.10.0-210-gc52d34b0
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
run_reco_bmn.C
Go to the documentation of this file.
1// Macro for reconstruction of simulated and experimental BM@N events
2// inFileName - input file with data (MC or exp. data)
3// dstFileName - output file with reconstructed data (full DST format)
4// nStartEvent - number of first event to process (starts with zero), default: 0
5// nEvents - number of events to process after nStartEvent, 0 - all events of the given file after nStartEvent to
6// geometryTag - geometry tag for experimental data, "" means the latest geometry for BM@N Run (by creation date)
7// tracking - tracking algorithm: VectorFinder (default), L1Tracking (for online), CellAuto
15
16void run_reco_bmn(TString inFileName = "/home/igor/DATA/bmn/26.02.0/digi/run_Top_9555_ev0_p0.root",
17 TString dstFileName = "/home/igor/data.cache/Run9compare/rc_default.run_Top_9555_ev0_p0.root",
18 Int_t nStartEvent = 0,
19 Int_t nEvents = 1000,
20 TString geometryTag = "",
21 enumTracking tracking = VectorFinder)
22{
23 gDebug = 0; // ROOT debug option
24 // if (gEnv) gEnv->SetValue("Root.Stacktrace", 0);
25 // Verbosity level (0 = summary only, 1 = event-level, 2 = track-level, 3 = full debug)
26 Int_t iVerbose = 0;
27 // Log level for LOG(severity): "fatal", "error", "alarm", "important", "warn", "state", "info", "detail", "debug",
28 // "debug[1-4]", "trace", "nolog"
29 FairLogger::GetLogger()->SetLogScreenLevel("info");
30 gRandom->SetSeed(0); // set seed for PRNG
31
32 // ----- Timer ---------------------------------------------------------
33 TStopwatch timer;
34 timer.Start();
35
36 // check input file exists
37 if (!BmnFunctionSet::CheckFileExist(inFileName, 1))
38 exit(-1);
39
40 // ----- Reconstruction run --------------------------------------------
41 FairRunAna* fRunAna = new FairRunAna();
42 fRunAna->SetEventHeader(new DstEventHeader());
43
44 Bool_t isTarget = kTRUE; // flag for tracking (run with target or not)
45 Bool_t isExp = (BmnFunctionSet::isSimulationFile(inFileName)
46 == 0); // flag for FairRunAna tasks whether simulation or experimental data are used
47
48 // Declare input source as simulation file or experimental data
49 FairSource* fFileSource;
50 Int_t run_period = -1, run_number = -1;
51 if (!isExp) { // for simulation files
52 fFileSource = new FairFileSource(inFileName);
53 // define BM@N session number using MC file metaobjects
54 run_period = BmnFunctionSet::GetPeriodNumber(((FairFileSource*)fFileSource)->GetInFile());
55 } else // for experimental files
56 {
57 // set source - digit file without auxilary FairRoot directories
58 // returns real run_period and run_number from the source file
59 fFileSource = new BmnFileSource(inFileName, run_period, run_number);
60
61 // get geometry for run
62 GeoSetup gSetup;
63 if (geometryTag.Strip(TString::kBoth) == "")
64 geometryTag = gSetup.GetLastApprovedSetupTag(TString::Format("run%d", run_period)).c_str();
65 int errStatus = gSetup.LoadSetupToGeoManager(geometryTag.Data());
66 if (errStatus != 0)
67 LOG(fatal) << "Geometry '" << geometryTag << "' not loaded. Error status: " << errStatus << endl;
68 LOG(info) << "Geometry with '" << geometryTag << "' tag is chosen";
69
70 // set magnetic field with factor corresponding to the given run
71 UniRun* pCurrentRun = UniRun::GetRun(run_period, run_number, usePreviousIfMissing);
72 if (pCurrentRun == 0)
73 exit(-6);
74 Double_t field_voltage = 0;
75 if (pCurrentRun->GetFieldVoltage())
76 field_voltage = *pCurrentRun->GetFieldVoltage();
77 else {
78 if (usePreviousIfMissing) // get value from a previous run with non-null value
79 {
80 int prev_mag_period = run_period, prev_mag_run = run_number;
81 field_voltage = UniRun::FindPreviousFieldVoltage(prev_mag_period, prev_mag_run);
82 if ((field_voltage == 0) and (prev_mag_run == run_number) and (prev_mag_period == run_period))
83 LOG(fatal) << "no any field voltage was found for run " << run_period << ":" << run_number << endl;
84 } else
85 LOG(fatal) << "no field voltage was found for run " << run_period << ":" << run_number << endl;
86 }
87 Double_t map_voltage = (run_period < 8) ? 55.87 : 112.0;
88 Double_t fieldScale = 0.;
89 if (field_voltage < 10) {
90 fieldScale = 0;
91 } else {
92 fieldScale = (field_voltage) / map_voltage;
93 // the scale is slightly corrected for the beam energies, for which the correction is known
94 Double_t* beam_energy = pCurrentRun->GetEnergy();
95 if (beam_energy == nullptr)
96 LOG(warning) << "no beam energy was found for run " << run_period << ":" << run_number
97 << ", the field map scale is not corrected";
98 else {
99 fieldScale *= BmnFunctionSet::GetFieldScaleCorrection(*beam_energy);
100 delete beam_energy;
101 }
102 }
103 BmnFieldMap* magField = nullptr;
104 magField = dynamic_cast<BmnFieldMap*>(gSetup.GetMagneticField(fieldScale));
105 // magField = new BmnNewFieldMap("FieldMap_1900_extrap_noPed.root");
106 // magField->SetScale(fieldScale);
107 magField->Init();
108 fRunAna->SetField(magField);
109 isExp = kTRUE;
110 TString targ = "-";
111 if (pCurrentRun->GetTargetParticle() == "") {
112 isTarget = kFALSE;
113 } else {
114 targ = pCurrentRun->GetTargetParticle();
115 isTarget = kTRUE;
116 }
117 TString beam = pCurrentRun->GetBeamParticle();
118 if (beam == "")
119 beam = "-";
120 cout << "\n\n|||||||||||||||| EXPERIMENTAL RUN SUMMARY ||||||||||||||||" << endl;
121 cout << "||\t\t\t\t\t\t\t||" << endl;
122 cout << "||\t\tPeriod:\t\t" << run_period << "\t\t\t||" << endl;
123 cout << "||\t\tNumber:\t\t" << run_number << "\t\t\t||" << endl;
124 cout << "||\t\tBeam:\t\t" << beam << "\t\t\t||" << endl;
125 cout << "||\t\tTarget:\t\t" << targ << "\t\t\t||" << endl;
126 cout << "||\t\tField scale:\t" << setprecision(4) << fieldScale << "\t\t\t||" << endl;
127 cout << "||\t\t\t\t\t\t\t||" << endl;
128 cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||\n\n" << endl;
129 // remove(geoFileName.Data());
130 }
131
132 fRunAna->SetSource(fFileSource);
133
134 if (dstFileName == "")
135 dstFileName = "bmndst.root";
136 // if directory for the output file does not exist, then create
137 if (BmnFunctionSet::CreateDirectoryTree(dstFileName, 1) < 0)
138 exit(-2);
139 fRunAna->SetSink(new FairRootFileSink(dstFileName));
140 fRunAna->SetGenerateRunInfo(false);
141
142 // if nEvents is equal 0 then all events of the given file starting with "nStartEvent" should be processed
143 if (nEvents == 0)
144 nEvents = MpdGetNumEvents::GetNumROOTEvents((char*)inFileName.Data()) - nStartEvent;
145
146 // Add TObjectString file names to a TList which is passed as input to the FairParAsciiFileIo
147 // The FairParAsciiFileIo creates a concatenated input parameter file all_<pid>.par, which is then can be used
148 // TList* parFileNameList = new TList();
149
150 // ====================================================================== //
151 // === Pileup Event Classification === //
152 // ====================================================================== //
153 if (run_period == 8 && isExp) {
154 BmnEventSelector* eventSelector = new BmnEventSelector();
155 eventSelector->SetRunId(run_number);
156 eventSelector->SetInputFileName("$VMCWORKDIR/input/eventSelector_calib_run8.root");
157 fRunAna->AddTask(eventSelector);
158 }
159
160 // ====================================================================== //
161 // === Fill basic trigger information === //
162 // ====================================================================== //
163 BmnFillTrigInfoDst* trig = new BmnFillTrigInfoDst(isExp);
164 fRunAna->AddTask(trig);
165
166 // ====================================================================== //
167 // === Hits in front of the target === //
168 // ====================================================================== //
169 if (run_period >= 8) {
170 if (isExp) {
171 BmnSiBTHitMaker* sibtHM = new BmnSiBTHitMaker(run_period, run_number, isExp);
172 fRunAna->AddTask(sibtHM);
173 }
174 } else {
175 if (!isExp) {
177 fRunAna->AddTask(mwpcHP);
178 }
179 BmnMwpcHitFinder* mwpcHM = new BmnMwpcHitFinder(isExp, run_period, run_number);
180 fRunAna->AddTask(mwpcHM);
181 }
182
183 // ====================================================================== //
184 // === VSP hit finder === //
185 // ====================================================================== //
186 BmnVSPHitMaker* vspHM = new BmnVSPHitMaker(run_period, run_number, isExp);
187 if (isExp)
188 vspHM->SetHitMatching(kFALSE);
189 fRunAna->AddTask(vspHM);
190
191 // ====================================================================== //
192 // === Silicon hit finder === //
193 // ====================================================================== //
194 BmnSiliconHitMaker* siliconHM = new BmnSiliconHitMaker(run_period, run_number, isExp);
195 if (isExp)
196 siliconHM->SetHitMatching(kFALSE);
197 fRunAna->AddTask(siliconHM);
198
199 // ====================================================================== //
200 // === GEM hit finder === //
201 // ====================================================================== //
202 BmnGemStripHitMaker* gemHM = new BmnGemStripHitMaker(run_period, run_number, isExp);
203 if (isExp)
204 gemHM->SetHitMatching(kFALSE);
205 fRunAna->AddTask(gemHM);
206
207 // ====================================================================== //
208 // === CSC hit finder === //
209 // ====================================================================== //
210 BmnCSCHitMaker* cscHM = new BmnCSCHitMaker(run_period, run_number, isExp);
211 if (isExp)
212 cscHM->SetHitMatching(kFALSE);
213 fRunAna->AddTask(cscHM);
214
215 // ====================================================================== //
216 // === TOF400 hit finder === //
217 // ====================================================================== //
218 BmnTof1HitProducer* tof400HP = new BmnTof1HitProducer("TOF400", kTOF1, !isExp, iVerbose, kFALSE);
219 tof400HP->SetPeriodRun(run_period, run_number);
220 fRunAna->AddTask(tof400HP);
221
222 // ====================================================================== //
223 // === TOF700 hit finder === //
224 // ====================================================================== //
225 BmnTof1HitProducer* tof700HP = new BmnTof1HitProducer("TOF700", kTOF701, !isExp, iVerbose, kFALSE);
226 tof700HP->SetPeriodRun(run_period, run_number);
227 fRunAna->AddTask(tof700HP);
228
229 // ====================================================================== //
230 // === DCH hit finder === //
231 // ====================================================================== //
232 // if (!isExp) {
233 // BmnDchHitProducer* dchHP = new BmnDchHitProducer();
234 // fRunAna->AddTask(dchHP);
235 // }
236
237 // ====================================================================== //
238 // === FHCAL/ZDC === //
239 // ====================================================================== //
240 bool IsGlobalCoordinates = true;
241 if (run_period >= 8) {
242 // TODO check isExp
243 BmnFHCalReconstructor* fhcalReco = new BmnFHCalReconstructor(isExp, IsGlobalCoordinates);
244 fhcalReco->SetRecoCutsFile(Form("FHCAL_reco_cuts_period%d.txt", run_period));
245 fRunAna->AddTask(fhcalReco);
246 } else {
247 BmnZdcAnalyzer* zdcAna = new BmnZdcAnalyzer();
248 fRunAna->AddTask(zdcAna);
249 }
250
251 // ====================================================================== //
252 // === ScWall === //
253 // ====================================================================== //
254 IsGlobalCoordinates = true;
255 BmnScWallReconstructor* scwallReco = new BmnScWallReconstructor(isExp, IsGlobalCoordinates);
256 scwallReco->SetRecoCutsFile(Form("SCWALL_reco_cuts_period%d.txt", run_period));
257 fRunAna->AddTask(scwallReco);
258
259 // ====================================================================== //
260 // === Hodo === //
261 // ====================================================================== //
262
263 BmnHodoReconstructor* hodoReco = new BmnHodoReconstructor(isExp);
264 hodoReco->SetRecoCutsFile(Form("HODO_reco_cuts_period%d.json", run_period));
265 fRunAna->AddTask(hodoReco);
266
267 // ====================================================================== //
268 // === Ndet === //
269 // ====================================================================== //
270 BmnNdetReconstructor* ndetReco = new BmnNdetReconstructor(isExp);
271 ndetReco->SetRecoCutsFile(Form("NDET_reco_cuts_period%d.json", run_period));
272 fRunAna->AddTask(ndetReco);
273
274 // ====================================================================== //
275 // === Vacuum Wall === //
276 // ====================================================================== //
277
279 fRunAna->AddTask(vacReco);
280
281 // ====================================================================== //
282 // === Inner Tracking === //
283 // ====================================================================== //
284 if (run_period > 8)
285 CbmStsDigiScheme::Instance(9); // AZ-310126
286
287 TString innerTrackBranchName; // use different track container
288 if (tracking == L1Tracking)
289 innerTrackBranchName = "StsTrack";
290 else
291 innerTrackBranchName = "StsVector";
292 if (run_period >= 8) {
293 BmnToCbmHitConverter* hitConverter = new BmnToCbmHitConverter(iVerbose, isExp);
294 // AZ-150224 hitConverter->SetFixedErrors(0.05, 0.25, 0.02, 0.65);
295 hitConverter->SetFixedErrors(0.08 / sqrt(12) * 1.2, 0.1234, 0.01 / sqrt(12), 0.1234); // AZ-150224
296 hitConverter->EnableAlignment(true); // AZ-310126
297 // AZ-310126
298 if (run_period > 8) {
299 hitConverter->SetGemConfigFile("GemRun9.xml");
300 hitConverter->SetSilConfigFile("SiliconRun9.xml");
301 hitConverter->SetVspConfigFile("VSP_Run9.xml");
302 }
303 //
304 fRunAna->AddTask(hitConverter);
305
306 CbmKF* kalman = new CbmKF();
307 fRunAna->AddTask(kalman);
308
309 CbmL1* l1 = new CbmL1();
310 TString stsMatBudgetFile = "";
311 l1->SetMaterialBudgetFileName(stsMatBudgetFile);
312 // AZ-310126 fRunAna->AddTask(l1);
313
314 if (tracking == L1Tracking) {
315 FairTask* stsFindTracks = new CbmStsFindTracks(iVerbose, "CbmL1StsTrackFinder");
316 fRunAna->AddTask(stsFindTracks);
317 }
318 if (tracking == VectorFinder) {
319 // BmnStsVectorFinder* vf = new BmnStsVectorFinder();
321 vf->SetMatBudgetFileName("$VMCWORKDIR/parameters/reco/sts_matbudget_run8.root");
322 if (run_period > 8) {
323 vf->SetNofSiStations(5); // AZ-310126 - 4Si+VSP
324 }
325 fRunAna->AddTask(vf);
326 }
327
328 BmnStsMatchTracks* stsMatchTracks = new BmnStsMatchTracks(iVerbose);
329 stsMatchTracks->SetTrackBranch(innerTrackBranchName);
330 fRunAna->AddTask(stsMatchTracks);
331 }
332
333 // ====================================================================== //
334 // === Beam Tracking === //
335 // ====================================================================== //
336 if (run_period >= 8) {
337 if (isExp) {
338 BmnBeamTracking* beamTF = new BmnBeamTracking(run_period);
339 fRunAna->AddTask(beamTF);
340 }
341 } else {
342 BmnMwpcTrackFinder* mwpcTF = new BmnMwpcTrackFinder(isExp, run_period, run_number);
343 fRunAna->AddTask(mwpcTF);
344 }
345
346 // ====================================================================== //
347 // === Tracking (DCH) === //
348 // ====================================================================== //
349 // BmnDchTrackFinder* dchTF = new BmnDchTrackFinder(run_period, run_number, isExp);
350 // dchTF->SetTransferFunction("transfer_func.txt");
351 // fRunAna->AddTask(dchTF);
352
353 // ====================================================================== //
354 // === Primary vertex finding === //
355 // ====================================================================== //
356 // if (run_period >= 8) {
357 CbmPrimaryVertexFinder* pvFinder = new CbmPVFinderKF();
358 CbmFindPrimaryVertex* findVertex = new CbmFindPrimaryVertex(pvFinder);
359 findVertex->SetTrackBranch(innerTrackBranchName);
360 fRunAna->AddTask(findVertex);
361
362 // AZ-150224
364 fRunAna->AddTask(pvMPD);
365
367 fRunAna->AddTask(combPV);
368 //
369 // // } else {
370 // BmnVertexFinder* gemVF = new BmnVertexFinder(run_period);
371 // fRunAna->AddTask(gemVF);
372 //}
373
374 // ====================================================================== //
375 // === Global Tracking === //
376 // ====================================================================== //
378 glTF->SetPeriodNumber(run_period);
379 glTF->SetInnerTracksBranchName(innerTrackBranchName);
380 fRunAna->AddTask(glTF);
381
382 // BmnVertexFinder* gemVF = new BmnVertexFinder(run_period);
383 // fRunAna->AddTask(gemVF);
384
385 // ====================================================================== //
386 // === Matching global track to MC track procedure === //
387 // ====================================================================== //
388 if (!isExp) {
389 BmnMatchRecoToMC* mcMatching = new BmnMatchRecoToMC();
390 mcMatching->SetInnerTracksBranchName(innerTrackBranchName);
391 fRunAna->AddTask(mcMatching);
392 }
393
394 // ====================================================================== //
395 // === dE/dx procedure === //
396 // ====================================================================== //
397 // only for Run 8: station/sector numbers are hardcoded in BmnDedx for the Run 8 setup,
398 // BmnDedx.cxx:30-31: fNSt(11) и fNSect({6, 10, 14, 18, 8, 8, 8, 8, 8, 8, 8}) only for Run8 (4 Si + 7 GEM)
399 // so, for Run 9 setup with VSP added, the indexes of the stations goes out of the array bounds
400 if (run_period == 8) {
401 BmnDedx* dedx = new BmnDedx(run_number);
402 fRunAna->AddTask(dedx);
403 }
404
405 // ====================================================================== //
406 // === Residual analysis === //
407 // ====================================================================== //
408 if (run_period < 8) {
409 BmnResiduals* res = new BmnResiduals(run_period, run_number);
410 fRunAna->AddTask(res);
411 }
412
413 // ====================================================================== //
414 // === Centrality === //
415 // ====================================================================== //
416 CentralityClusterizer* cclusterizer = new CentralityClusterizer("XeCsI@3.8AGeV_MBT_7clusters_period8.root");
417 fRunAna->AddTask(cclusterizer);
418
419 // Fill DST Event Header
420 BmnFillDstTask* dst_task = new BmnFillDstTask(nStartEvent, nEvents, isExp, run_period, run_number);
421 fRunAna->AddTask(dst_task);
422
423 // ----- Parameter database (input) -------------------------------------
424 FairRuntimeDb* rtdb = fRunAna->GetRuntimeDb();
425 FairParRootFileIo* parIo1 = new FairParRootFileIo();
426 // FairParAsciiFileIo* parIo2 = new FairParAsciiFileIo();
427 parIo1->open(inFileName.Data());
428 // parIo2->open(parFileNameList, "in");
429 rtdb->setFirstInput(parIo1);
430 // rtdb->setSecondInput(parIo2);
431 // -------------------------------------------------------------------------
432
433 // ----- Initialize FaiRunAna --------------------------------------------
434 fRunAna->GetMainTask()->SetVerbose(iVerbose);
435 fRunAna->Init();
436 // -------------------------------------------------------------------------
437
438 // ----- Parameter database (output) ------------------------------------
439 FairParRootFileIo* parOut = new FairParRootFileIo(kTRUE);
440 // parOut->open(dstFileName);
441 parOut->open(gFile);
442 rtdb->setOutput(parOut);
443 if (isExp)
444 rtdb->getContainer("FairGeoParSet")->setDescription(geometryTag.Data());
445 rtdb->writeContainer(rtdb->getContainer("FairGeoParSet"), rtdb->getCurrentRun());
446 rtdb->saveOutput();
447 // rtdb->print();
448 // -------------------------------------------------------------------------
449
450 // ----- Run FairRunAna -------------------------------------------------
451 fRunAna->Run(nStartEvent, nStartEvent + nEvents);
452 // -------------------------------------------------------------------------
453
454 // ----- Finish --------------------------------------------------------
455 delete fRunAna;
456 delete pvFinder;
457 timer.Stop();
458 Double_t rtime = timer.RealTime();
459 Double_t ctime = timer.CpuTime();
460 cout << endl << endl;
461 cout << "Macro finished successfully." << endl; // marker of successful execution
462 cout << "Input file is " + inFileName << endl;
463 cout << "Output file is " + dstFileName << endl;
464 cout << "Real time " << rtime << " s, CPU time " << ctime << " s" << endl;
465 cout << endl;
466 // ------------------------------------------------------------------------
467}
@ kTOF1
@ kTOF701
bool Bool_t
int Int_t
Int_t gDebug
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
#define gFile
R__EXTERN TRandom * gRandom
char * Form(const char *fmt,...)
void run_reco_bmn(TString inFileName="/home/igor/DATA/bmn/26.02.0/digi/run_Top_9555_ev0_p0.root", TString dstFileName="/home/igor/data.cache/Run9compare/rc_default.run_Top_9555_ev0_p0.root", Int_t nStartEvent=0, Int_t nEvents=1000, TString geometryTag="", enumTracking tracking=VectorFinder)
void SetHitMatching(Bool_t opt=kTRUE)
void SetInputFileName(const char *name)
void SetRunId(int runId)
Class for BmnFHCalEvent reconstruction (creation) from BmnFHCalDigi {Data} or BmnFHCalDigit {Sim}...
void SetRecoCutsFile(TString reco_cuts_file)
virtual void Init()
BmnFileSource.h.
static int CreateDirectoryTree(TString &fileName, int iVerbose=0, EAccessMode mode=kWritePermission)
static double GetFieldScaleCorrection(double energy)
static int isSimulationFile(TString fileName="")
static int GetPeriodNumber(TFile *root_file, int method_number=0)
static int CheckFileExist(TString &fileName, int iVerbose=0, EAccessMode mode=kFileExists)
void SetHitMatching(Bool_t opt=kTRUE)
void SetInnerTracksBranchName(TString name)
void SetPeriodNumber(Short_t p)
Class for BmnHodoEvent reconstruction (creation) from BmnHodoDigi {Data} or BmnHodoDigit {Sim}...
void SetRecoCutsFile(const std::string &cuts)
The BmnKFPrimaryVertexFinder class - adaptation of MpdKfPrimaryVertexFinder.
void SetInnerTracksBranchName(TString name)
Class for BmnNdetEvent reconstruction (creation) from BmnNdetDigi {Data} or BmnNdetDigit {Sim}...
void SetRecoCutsFile(const std::string &cuts)
Class for BmnScWallEvent reconstruction (creation) from BmnScWallDigi {Data} or BmnScWallDigit {Sim}...
void SetRecoCutsFile(TString reco_cuts_file)
void SetHitMatching(Bool_t opt=kTRUE)
void SetTrackBranch(TString trBranch="StsTrack")
void SetMatBudgetFileName(TString s)
void EnableAlignment(Bool_t is_align_enabled=kTRUE)
void SetFixedErrors(Float_t dXgem=0.015, Float_t dYgem=0.058, Float_t dXsil=0.003, Float_t dYsil=0.021)
void SetGemConfigFile(TString file)
void SetVspConfigFile(TString file)
void SetSilConfigFile(TString file)
void SetPeriodRun(Int_t p, Int_t r)
void SetHitMatching(Bool_t opt=kTRUE)
Class for BmnVacWall points info transition on reconstruction stage.
void SetTrackBranch(TString trBranch="StsTrack")
The CbmKF Kalman Filter algorithm.
Definition CbmKF.h:28
Definition CbmL1.h:48
void SetMaterialBudgetFileName(TString s)
Definition CbmL1.h:86
CbmPVFinderKF.
static CbmStsDigiScheme * Instance(int version=1)
CbmStsFindTracks.
Class for event centrality determination through clusterization.
GeoSetup class.
Definition GeoSetup.h:40
int LoadSetupToGeoManager(string_view setup_tag)
Load selected geometry setup from the Local Geometry Database and create gGeoManager instance.
Definition GeoSetup.cxx:512
FairField * GetMagneticField(double scale=-1)
Get magnetic field of the current setup geometry.
Definition GeoSetup.cxx:877
string GetLastApprovedSetupTag(string_view tag_prefix)
Get tag for the last approved setup corresponding to the pattern.
Definition GeoSetup.cxx:122
static Int_t GetNumROOTEvents(const char *filename, const char *treename="", int iVerbose=2)
Double_t RealTime()
void Start(Bool_t reset=kTRUE)
Double_t CpuTime()
void Stop()
static TString Format(const char *fmt,...)
UniRun.h Class for the table: run_.
Definition UniRun.h:21
double * GetEnergy()
get energy of the current run
Definition UniRun.h:113
static UniRun * GetRun(int period_number, int run_number)
get run from the database
Definition UniRun.cxx:161
TString GetBeamParticle()
get beam particle of the current run
Definition UniRun.h:109
double * GetFieldVoltage()
get field voltage of the current run
Definition UniRun.h:121
static double FindPreviousFieldVoltage(int &period_number, int &run_number)
get field voltage value if period_number > 0 and run_number > 0: from the closest previous run,...
Definition UniRun.cxx:908
TString GetTargetParticle()
get target particle of the current run
Definition UniRun.h:111
enumTracking
@ L1Tracking
@ VectorFinder
bool usePreviousIfMissing
Definition run_reco_bmn.C:8
RVec< PromoteType< T > > sqrt(const RVec< T > &v)