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