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