CbmRoot
CbmMcbmCheckTimingAlgo.cxx
Go to the documentation of this file.
1 /********************************************************************************
2  * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
3  * *
4  * This software is distributed under the terms of the *
5  * GNU Lesser General Public Licence (LGPL) version 3, *
6  * copied verbatim in the file "LICENSE" *
7  ********************************************************************************/
9 
10 #include "CbmDigiManager.h"
11 #include "CbmFlesHistosTools.h"
12 #include "CbmMuchBeamTimeDigi.h"
13 #include "CbmPsdDigi.h"
14 #include "CbmRichDigi.h"
15 #include "CbmStsDigi.h"
16 #include "CbmTofDigi.h"
17 #include "CbmTrdDigi.h"
18 
19 #include "FairLogger.h"
20 #include "FairRootManager.h"
21 #include "FairRunOnline.h"
22 
23 #include "TH1.h"
24 #include "TH2.h"
25 #include "THttpServer.h"
26 #include <TFile.h>
27 
28 #include <iomanip>
29 #include <iostream>
30 using std::fixed;
31 using std::setprecision;
32 
33 // ---- Default constructor -------------------------------------------
35 
36 // ---- Destructor ----------------------------------------------------
38 
39 // ---- Initialisation ----------------------------------------------
41  // Load all necessary parameter containers from the runtime data base
42  /*
43  FairRunAna* ana = FairRunAna::Instance();
44  FairRuntimeDb* rtdb=ana->GetRuntimeDb();
45 
46  <CbmMcbmCheckTimingAlgoDataMember> = (<ClassPointer>*)
47  (rtdb->getContainer("<ContainerName>"));
48  */
49 }
50 
51 // ---- Init ----------------------------------------------------------
57  for (std::vector<CheckTimingDetector>::iterator det = fvDets.begin();
58  det != fvDets.end();
59  ++det) {
60  CheckDataPresence(*det);
61  } // for( std::vector< CheckTimingDetector >::iterator det = fvDets.begin(); det != fvDets.end(); ++det )
62 
63  CreateHistos();
64 
65  return kTRUE;
66 }
67 
69  // Get a handle from the IO manager
70  FairRootManager* ioman = FairRootManager::Instance();
73  fDigiMan->Init();
74 
76  if (ECbmModuleId::kT0 == detToCheck.detId) {
77  // Get a pointer to the previous already existing data level
78  fpT0DigiVec = ioman->InitObjectAs<std::vector<CbmTofDigi> const*>("T0Digi");
79  if (!fpT0DigiVec) {
80  LOG(fatal) << "No storage with T0 digis found while it should be used. "
81  "Stopping there!";
82  } // if ( ! fpT0DigiVec )
83  } // if( ECbmModuleId::kT0 == detToCheck.detId )
84  else if (!fDigiMan->IsPresent(detToCheck.detId)) {
85  LOG(fatal) << "No " << detToCheck.sName
86  << " digis found while it should be used. Stopping there!";
87  } // else if ( ! fDigiMan->IsPresent( detToCheck.detId ) ) of if( ECbmModuleId::kT0 == detToCheck.detId )
88 }
89 
92  /* clang-format off */
93 
95  uint32_t iNbBinsLog = 0;
97  std::vector<double> dBinsLogVector = GenerateLogBinArray( 9, 9, 1, iNbBinsLog );
98  double* dBinsLog = dBinsLogVector.data();
99 
100  for( std::vector< CheckTimingDetector >::iterator det = fvDets.begin(); det != fvDets.end(); ++det )
101  {
102  fvhDetSelfDiff.push_back( new TH1D( Form( "h%sSelfDiff", (*det).sName.data() ),
103  Form( "time difference between consecutivs %s Digis;time diff [ns];Counts",
104  (*det).sName.data() ),
105  iNbBinsLog, dBinsLog )
106  );
107 
108  fvhDetToRefDiff.push_back( new TH1D( Form( "h%s%sDiff", (*det).sName.data(), fRefDet.sName.data() ),
109  Form( "%s - %s time difference;time diff [ns];Counts",
110  (*det).sName.data(), fRefDet.sName.data() ),
111  (*det).uRangeNbBins, (*det).dTimeRangeBeg, (*det).dTimeRangeEnd )
112  );
113 
114  fvhDetToRefDiffRefCharge.push_back( new TH2F( Form( "h%s%sDiffRefCharge", (*det).sName.data(), fRefDet.sName.data() ),
115  Form( "%s - %s;time diff [ns]; %s Charge [a.u]; Counts",
116  (*det).sName.data(), fRefDet.sName.data(), fRefDet.sName.data() ),
117  (*det).uRangeNbBins, (*det).dTimeRangeBeg, (*det).dTimeRangeEnd,
118  256, 0, 256 )
119  );
120  fvhDetToRefDiffDetCharge.push_back( new TH2F( Form( "h%s%sDiffDetCharge", (*det).sName.data(), fRefDet.sName.data() ),
121  Form( "%s - %s;time diff [ns]; %s Charge [a.u]; Counts",
122  (*det).sName.data(), fRefDet.sName.data(), (*det).sName.data() ),
123  (*det).uRangeNbBins, (*det).dTimeRangeBeg, (*det).dTimeRangeEnd,
124  256, 0, 256 )
125  );
126  fvhDetToRefDiffEvo.push_back( new TH2F( Form( "h%s%sDiffEvo", (*det).sName.data(), fRefDet.sName.data() ),
127  Form( "%s - %s;TS; time diff [ns];Counts",
128  (*det).sName.data(), fRefDet.sName.data() ),
129  1000, 0, 10000,
130  (*det).uRangeNbBins, (*det).dTimeRangeBeg, (*det).dTimeRangeEnd )
131  );
132  fvhDetToRefDiffEvoLong.push_back( new TH2F( Form( "h%s%sDiffEvoLong", (*det).sName.data(), fRefDet.sName.data() ),
133  Form( "%s - %s;TS; time diff [ns];Counts",
134  (*det).sName.data(), fRefDet.sName.data() ),
135  1800, 0, 18000,
136  (*det).uRangeNbBins, (*det).dTimeRangeBeg, (*det).dTimeRangeEnd )
137  );
138  LOG( info ) << "Created histos for " << (*det).sName;
139  } // for( std::vector< CheckTimingDetector >::iterator det = fvDets.begin(); det != fvDets.end(); ++det )
140 
142  fvhDetSelfDiff.push_back( new TH1D( Form( "h%sSelfDiff", fRefDet.sName.data() ),
143  Form( "time difference between consecutivs %s Digis;time diff [ns];Counts",
144  fRefDet.sName.data() ),
145  iNbBinsLog, dBinsLog )
146  );
147 
149  FairRunOnline* run = FairRunOnline::Instance();
150  if( run )
151  {
152  THttpServer* server = run->GetHttpServer();
153  if( nullptr != server )
154  {
156  for( UInt_t uDetIdx = 0; uDetIdx < fvDets.size(); ++uDetIdx )
157  {
158  server->Register("/CheckTiming/SelfDiff", fvhDetSelfDiff[ uDetIdx ] );
159  server->Register("/CheckTiming/RefDiff", fvhDetToRefDiff[ uDetIdx ] );
160  server->Register("/CheckTiming/DiffCharge", fvhDetToRefDiffRefCharge[ uDetIdx ] );
161  server->Register("/CheckTiming/DiffCharge", fvhDetToRefDiffDetCharge[ uDetIdx ] );
162  server->Register("/CheckTiming/DiffEvo", fvhDetToRefDiffEvo[ uDetIdx ] );
163  server->Register("/CheckTiming/DiffEvo", fvhDetToRefDiffEvoLong[ uDetIdx ] );
164  } // for( std::vector< CheckTimingDetector >::iterator det = fvDets.begin(); det != fvDets.end(); ++det )
165 
167  server->Register("/CheckTiming/SelfDiff", fvhDetSelfDiff[ fvDets.size() ] );
168  } // if( nullptr != server )
169  } // if( run )
170 
172  /* clang-format on */
173 }
174 // ---- ReInit -------------------------------------------------------
175 Bool_t CbmMcbmCheckTimingAlgo::ReInit() { return kTRUE; }
176 
177 // ---- Exec ----------------------------------------------------------
179  LOG(debug) << "executing TS " << fuNbTs;
180 
181  switch (fRefDet.detId) {
182  case ECbmModuleId::kSts: {
183  CheckInterSystemOffset<CbmStsDigi>();
184  break;
185  } // case ECbmModuleId::kSts:
186  case ECbmModuleId::kMuch: {
187  CheckInterSystemOffset<CbmMuchBeamTimeDigi>();
188  break;
189  } // case ECbmModuleId::kMuch:
190  case ECbmModuleId::kTrd: {
191  CheckInterSystemOffset<CbmTrdDigi>();
192  break;
193  } // case ECbmModuleId::kTrd:
194  case ECbmModuleId::kTof: {
195  CheckInterSystemOffset<CbmTofDigi>();
196  break;
197  } // case ECbmModuleId::kTof:
198  case ECbmModuleId::kRich: {
199  CheckInterSystemOffset<CbmRichDigi>();
200  break;
201  } // case ECbmModuleId::kRich:
202  case ECbmModuleId::kPsd: {
203  CheckInterSystemOffset<CbmPsdDigi>();
204  break;
205  } // case ECbmModuleId::kPsd:
206  case ECbmModuleId::kT0: {
207  CheckInterSystemOffset<CbmTofDigi>();
208  break;
209  } // case ECbmModuleId::kT0:
210  default: {
211  LOG(fatal) << "CbmMcbm2019TimeWinEventBuilderAlgo::LoopOnSeeds => "
212  << "Trying to search matches with unsupported det: "
213  << fRefDet.sName;
214  break;
215  } // default:
216  } // switch( fRefDet )
217 
218  fuNbTs++;
219 }
220 
221 template<class DigiRef>
223  UInt_t uNbRefDigis = 0;
224  switch (fRefDet.detId) {
226  LOG(fatal)
227  << "CbmMcbmCheckTimingAlgo::Exec => Unknow reference detector enum! "
228  << fRefDet.sName;
229  break;
230  } // Digi containers controlled by DigiManager
231  case ECbmModuleId::kT0: {
232  uNbRefDigis = fpT0DigiVec->size();
233  break;
234  } // case ECbmModuleId::kT0
235  default: {
236  uNbRefDigis = fDigiMan->GetNofDigis(fRefDet.detId);
237  break;
238  } // default:
239  } // switch( fRefDet.detId )
240 
242  for (std::vector<CheckTimingDetector>::iterator det = fvDets.begin();
243  det != fvDets.end();
244  ++det) {
245  (*det).iPrevRefFirstDigi = 0;
246  } // for( std::vector< CheckTimingDetector >::iterator det = fvDets.begin(); det != fvDets.end(); ++det )
247 
248  for (UInt_t uDigi = 0; uDigi < uNbRefDigis; ++uDigi) {
249  LOG(debug) << Form("Checking seed %6u / %6u", uDigi, uNbRefDigis);
250 
251  Double_t dRefTime = 0;
252  Double_t dRefCharge = 0;
254  dRefTime = fpT0DigiVec->at(uDigi).GetTime();
255  dRefCharge = fpT0DigiVec->at(uDigi).GetCharge();
256  } // if( ECbmModuleId::kT0 == fRefDet.detId )
257  else {
258  dRefTime = fDigiMan->Get<DigiRef>(uDigi)->GetTime();
259  dRefCharge = fDigiMan->Get<DigiRef>(uDigi)->GetCharge();
260  } // else of if( ECbmModuleId::kT0 == fRefDet.detId )
261 
263  fvhDetSelfDiff[fvDets.size()]->Fill(dRefTime - fRefDet.dPrevTime);
264  fRefDet.dPrevTime = dRefTime;
265 
270  if (fRefDet.uChargeCutMin < dRefCharge
271  && dRefCharge < fRefDet.uChargeCutMax) {
272  continue;
273  } // if( fRefDet.uChargeCutMin < dRefCharge && dRefCharge < fRefDet.uChargeCutMax )
274  } // if( fRefDet.uChargeCutMin < fRefDet.uChargeCutMax )
275  else {
277  if (fRefDet.uChargeCutMin < dRefCharge
278  || dRefCharge < fRefDet.uChargeCutMax) {
279  continue;
280  } // if( fRefDet.uChargeCutMin < dRefCharge || dRefCharge < fRefDet.uChargeCutMax )
281  } // else of if( fRefDet.uChargeCutMin < fRefDet.uChargeCutMax )
282  } // if( fRefDet.uChargeCutMin =! fRefDet.uChargeCutMax )
283 
285  for (UInt_t uDetIdx = 0; uDetIdx < fvDets.size(); ++uDetIdx) {
286  switch (fvDets[uDetIdx].detId) {
287  case ECbmModuleId::kSts: {
288  FillTimeOffsetHistos<CbmStsDigi>(dRefTime, dRefCharge, uDetIdx);
289  break;
290  } // case ECbmModuleId::kSts:
291  case ECbmModuleId::kMuch: {
292  FillTimeOffsetHistos<CbmMuchBeamTimeDigi>(
293  dRefTime, dRefCharge, uDetIdx);
294  break;
295  } // case ECbmModuleId::kMuch:
296  case ECbmModuleId::kTrd: {
297  FillTimeOffsetHistos<CbmTrdDigi>(dRefTime, dRefCharge, uDetIdx);
298  break;
299  } // case ECbmModuleId::kTrd:
300  case ECbmModuleId::kTof: {
301  FillTimeOffsetHistos<CbmTofDigi>(dRefTime, dRefCharge, uDetIdx);
302  break;
303  } // case ECbmModuleId::kTof:
304  case ECbmModuleId::kRich: {
305  FillTimeOffsetHistos<CbmRichDigi>(dRefTime, dRefCharge, uDetIdx);
306  break;
307  } // case ECbmModuleId::kRich:
308  case ECbmModuleId::kPsd: {
309  FillTimeOffsetHistos<CbmPsdDigi>(dRefTime, dRefCharge, uDetIdx);
310  break;
311  } // case ECbmModuleId::kPsd:
312  case ECbmModuleId::kT0: {
313  FillTimeOffsetHistos<CbmTofDigi>(dRefTime, dRefCharge, uDetIdx);
314  break;
315  } // case ECbmModuleId::kT0:
316  default: {
317  LOG(fatal) << "CbmMcbmCheckTimingAlgo::CheckInterSystemOffset => "
318  << "Trying to search matches with unsupported det: "
319  << fvDets[uDetIdx].sName;
320  break;
321  } // default:
322  } // switch( fvDets[ uDetIdx ].detId )
323  } // for( UInt_t uDetIdx = 0; uDetIdx < fvDets.size(); ++uDetIdx )
324  } // for( UInt_t uDigi = 0; uDigi < uNbRefDigis; ++uDigi )
325 }
326 
327 template<class Digi>
328 void CbmMcbmCheckTimingAlgo::FillTimeOffsetHistos(const Double_t dRefTime,
329  const Double_t dRefCharge,
330  UInt_t uDetIdx) {
331  UInt_t uNbDigis = 0;
332  switch (fvDets[uDetIdx].detId) {
334  LOG(fatal) << "CbmMcbmCheckTimingAlgo::FillTimeOffsetHistos => Unknow "
335  "detector enum! "
336  << fRefDet.sName;
337  break;
338  } // Digi containers controlled by DigiManager
339  case ECbmModuleId::kT0: {
340  uNbDigis = fpT0DigiVec->size();
341  break;
342  } // case ECbmModuleId::kT0
343  default: {
344  uNbDigis = fDigiMan->GetNofDigis(fvDets[uDetIdx].detId);
345  break;
346  } // default:
347  } // switch( fRefDet.detId )
348 
349  UInt_t uFirstDigiInWin = fvDets[uDetIdx].iPrevRefFirstDigi;
350 
351  for (UInt_t uDigiIdx = fvDets[uDetIdx].iPrevRefFirstDigi; uDigiIdx < uNbDigis;
352  ++uDigiIdx) {
353  Double_t dTime = 0;
354  Double_t dCharge = 0;
355  if (ECbmModuleId::kT0 == fvDets[uDetIdx].detId) {
356  dTime = fpT0DigiVec->at(uDigiIdx).GetTime();
357  dCharge = fpT0DigiVec->at(uDigiIdx).GetCharge();
358  } // if( ECbmModuleId::kT0 == fRefDet.detId )
359  else {
360  dTime = fDigiMan->Get<Digi>(uDigiIdx)->GetTime();
361  dCharge = fDigiMan->Get<Digi>(uDigiIdx)->GetCharge();
362  } // else of if( ECbmModuleId::kT0 == fRefDet.detId )
363 
366  if (fvDets[uDetIdx].dPrevTime <= dTime) {
367  fvhDetSelfDiff[uDetIdx]->Fill(dTime - fvDets[uDetIdx].dPrevTime);
368  fvDets[uDetIdx].dPrevTime = dTime;
369  } // if( fvDets[ uDetIdx ].dPrevTime < dTime )
370 
371  Double_t dDiffTime = dTime - dRefTime;
372 
373  if (dDiffTime < fvDets[uDetIdx].dTimeRangeBeg) {
374  ++uFirstDigiInWin; // Update Index of first digi in Win to next digi
375  continue; // not yet in interesting range
376  } // if (diffTime > offsetRange)
377  if (fvDets[uDetIdx].dTimeRangeEnd < dDiffTime) {
379  break;
380  } // if( fvDets[ uDetIdx ].dTimeRangeEnd < dDiffTime )
381 
383  if (fvDets[uDetIdx].uChargeCutMin != fvDets[uDetIdx].uChargeCutMax) {
384  if (fvDets[uDetIdx].uChargeCutMin < fvDets[uDetIdx].uChargeCutMax) {
386  if (fvDets[uDetIdx].uChargeCutMin < dCharge
387  && dCharge < fvDets[uDetIdx].uChargeCutMax) {
388  continue;
389  } // if( fvDets[ uDetIdx ].uChargeCutMin < dCharge && dCharge < fvDets[ uDetIdx ].uChargeCutMax )
390  } // if( fvDets[ uDetIdx ].uChargeCutMin < fvDets[ uDetIdx ].uChargeCutMax )
391  else {
393  if (fvDets[uDetIdx].uChargeCutMin < dCharge
394  || dCharge < fvDets[uDetIdx].uChargeCutMax) {
395  continue;
396  } // if( fvDets[ uDetIdx ].uChargeCutMin < dCharge || dCharge < fvDets[ uDetIdx ].uChargeCutMax )
397  } // else of if( fvDets[ uDetIdx ].uChargeCutMin < fvDets[ uDetIdx ].uChargeCutMax )
398  } // if( fvDets[ uDetIdx ].uChargeCutMin != fvDets[ uDetIdx ].uChargeCutMax )
399 
401  fvhDetToRefDiff[uDetIdx]->Fill(dDiffTime);
402  fvhDetToRefDiffRefCharge[uDetIdx]->Fill(dDiffTime, dRefCharge);
403  fvhDetToRefDiffDetCharge[uDetIdx]->Fill(dDiffTime, dCharge);
404  fvhDetToRefDiffEvo[uDetIdx]->Fill(fuNbTs, dDiffTime);
405  fvhDetToRefDiffEvoLong[uDetIdx]->Fill(fuNbTs, dDiffTime);
406  } // for( UInt_t uDigiIdx = fvDets[ uDetIdx ].iPrevRefFirstDigi; uDigiIdx < uNbDigis; ++uDigiIdx )
407 
409  fvDets[uDetIdx].iPrevRefFirstDigi = uFirstDigiInWin;
410 }
411 
412 // ---- Finish --------------------------------------------------------
414  LOG(info) << Form("Checked %6d Timeslices", fuNbTs);
415 }
416 
418  TFile* old = gFile;
419  TFile* outfile = TFile::Open(fOutFileName, "RECREATE");
420 
421  for (UInt_t uDetIdx = 0; uDetIdx < fvDets.size(); ++uDetIdx) {
422  LOG(info) << "Saving histos for " << fvDets[uDetIdx].sName;
423  fvhDetSelfDiff[uDetIdx]->Write();
424  fvhDetToRefDiff[uDetIdx]->Write();
425  fvhDetToRefDiffRefCharge[uDetIdx]->Write();
426  fvhDetToRefDiffDetCharge[uDetIdx]->Write();
427  fvhDetToRefDiffEvo[uDetIdx]->Write();
428  fvhDetToRefDiffEvoLong[uDetIdx]->Write();
429  LOG(info) << "Saved histos for " << fvDets[uDetIdx].sName;
430  } // for( std::vector< CheckTimingDetector >::iterator det = fvDets.begin(); det != fvDets.end(); ++det )
431 
433  fvhDetSelfDiff[fvDets.size()]->Write();
434 
435  outfile->Close();
436  delete outfile;
437 
438  gFile = old;
439 }
440 
441 // ---- Finish --------------------------------------------------------
443  std::string sNameIn,
444  Double_t dTimeRangeBegIn,
445  Double_t dTimeRangeEndIn,
446  UInt_t uRangeNbBinsIn,
447  UInt_t uChargeCutMinIn,
448  UInt_t uChargeCutMaxIn) {
449  fRefDet.detId = refDetIn;
450  fRefDet.sName = sNameIn;
451  fRefDet.dTimeRangeBeg = dTimeRangeBegIn;
452  fRefDet.dTimeRangeEnd = dTimeRangeEndIn;
453  fRefDet.uRangeNbBins = uRangeNbBinsIn;
454  fRefDet.uChargeCutMin = uChargeCutMinIn;
455  fRefDet.uChargeCutMax = uChargeCutMaxIn;
456 }
458  std::string sNameIn,
459  Double_t dTimeRangeBegIn,
460  Double_t dTimeRangeEndIn,
461  UInt_t uRangeNbBinsIn,
462  UInt_t uChargeCutMinIn,
463  UInt_t uChargeCutMaxIn) {
464  std::vector<CheckTimingDetector>::iterator det;
465  for (det = fvDets.begin(); det != fvDets.end(); ++det) {
466  if ((*det).detId == detIn) {
467  LOG(warning)
468  << "CbmMcbmCheckTimingAlgo::AddCheckDetector => Detector already in "
469  "list, this call will only update the parameters!";
470 
471  (*det).dTimeRangeBeg = dTimeRangeBegIn;
472  (*det).dTimeRangeEnd = dTimeRangeEndIn;
473  (*det).uRangeNbBins = uRangeNbBinsIn;
474  (*det).uChargeCutMin = uChargeCutMinIn;
475  (*det).uChargeCutMax = uChargeCutMaxIn;
476 
477  break;
478  } // if( (*det).detId == detIn )
479  } // for( det = fvDets.begin(); det != fvDets.end(); ++det )
480 
481  if (fvDets.end() == det) {
482  fvDets.push_back(CheckTimingDetector(detIn, sNameIn));
483  det = fvDets.end();
484  det--;
485  (*det).dTimeRangeBeg = dTimeRangeBegIn;
486  (*det).dTimeRangeEnd = dTimeRangeEndIn;
487  (*det).uRangeNbBins = uRangeNbBinsIn;
488  (*det).uChargeCutMin = uChargeCutMinIn;
489  (*det).uChargeCutMax = uChargeCutMaxIn;
490  } // if( fvDets.end() == det )
491 }
492 
494  for (std::vector<CheckTimingDetector>::iterator det = fvDets.begin();
495  det != fvDets.end();
496  ++det) {
497  if ((*det).detId == detIn) {
498  fvDets.erase(det);
499  break;
500  } // if( (*det).detId == detIn )
501  } // for( std::vector< CheckTimingDetector >::iterator det = fvDets.begin(); det != fvDets.end(); ++det )
502 }
503 
CbmMcbmCheckTimingAlgo.h
CbmMcbmCheckTimingAlgo::ReInit
Bool_t ReInit()
Definition: CbmMcbmCheckTimingAlgo.cxx:175
CbmMcbmCheckTimingAlgo::fvhDetToRefDiffEvoLong
std::vector< TH2 * > fvhDetToRefDiffEvoLong
Definition: CbmMcbmCheckTimingAlgo.h:130
CbmPsdDigi.h
CbmMcbmCheckTimingAlgo::fuNbTs
UInt_t fuNbTs
Definition: CbmMcbmCheckTimingAlgo.h:113
CbmMcbmCheckTimingAlgo::WriteHistos
void WriteHistos()
Definition: CbmMcbmCheckTimingAlgo.cxx:417
CbmDigiManager::Init
InitStatus Init()
Initialisation.
Definition: CbmDigiManager.cxx:71
CbmMcbmCheckTimingAlgo::RemoveCheckDetector
void RemoveCheckDetector(ECbmModuleId detIn)
Definition: CbmMcbmCheckTimingAlgo.cxx:493
CbmMcbmCheckTimingAlgo::CreateHistos
void CreateHistos()
Definition: CbmMcbmCheckTimingAlgo.cxx:90
ECbmModuleId::kT0
@ kT0
ToF start Detector.
CbmMcbmCheckTimingAlgo::fvDets
std::vector< CheckTimingDetector > fvDets
Definition: CbmMcbmCheckTimingAlgo.h:116
CbmMcbmCheckTimingAlgo::FillTimeOffsetHistos
void FillTimeOffsetHistos(const Double_t dRefTime, const Double_t dRefCharge, UInt_t uDetIdx)
Definition: CbmMcbmCheckTimingAlgo.cxx:328
CbmMcbmCheckTimingAlgo::~CbmMcbmCheckTimingAlgo
~CbmMcbmCheckTimingAlgo()
Definition: CbmMcbmCheckTimingAlgo.cxx:37
ECbmModuleId
ECbmModuleId
Definition: CbmDefs.h:33
CbmDigiManager::GetNofDigis
static Int_t GetNofDigis(ECbmModuleId systemId)
Definition: CbmDigiManager.cxx:62
CbmDigiManager::UseMuchBeamTimeDigi
void UseMuchBeamTimeDigi(Bool_t choice=kTRUE)
Use CbmMuchBeamTimeDigi instead of CbmMuchDigi for MUCH.
Definition: CbmDigiManager.h:130
CheckTimingDetector::sName
std::string sName
Definition: CbmMcbmCheckTimingAlgo.h:30
CbmTofDigi.h
ECbmModuleId::kTof
@ kTof
Time-of-flight Detector.
CbmMcbmCheckTimingAlgo::CbmMcbmCheckTimingAlgo
CbmMcbmCheckTimingAlgo()
Definition: CbmMcbmCheckTimingAlgo.cxx:34
CbmMcbmCheckTimingAlgo::fvhDetToRefDiff
std::vector< TH1 * > fvhDetToRefDiff
Definition: CbmMcbmCheckTimingAlgo.h:126
CbmDigiManager::IsPresent
static Bool_t IsPresent(ECbmModuleId systemId)
Presence of a digi branch.
Definition: CbmDigiManager.cxx:112
CbmDigiManager::Instance
static CbmDigiManager * Instance()
Static instance.
Definition: CbmDigiManager.h:93
CbmMcbmCheckTimingAlgo::SetReferenceDetector
void SetReferenceDetector(ECbmModuleId refDetIn, std::string sNameIn, Double_t dTimeRangeBegIn=-1000.0, Double_t dTimeRangeEndIn=1000.0, UInt_t uRangeNbBinsIn=320, UInt_t uChargeCutMinIn=0, UInt_t uChargeCutMaxIn=0)
Definition: CbmMcbmCheckTimingAlgo.cxx:442
CheckTimingDetector::uRangeNbBins
UInt_t uRangeNbBins
Definition: CbmMcbmCheckTimingAlgo.h:33
CbmMcbmCheckTimingAlgo::fOutFileName
TString fOutFileName
Definition: CbmMcbmCheckTimingAlgo.h:133
CbmRichDigi.h
CbmMcbmCheckTimingAlgo::AddCheckDetector
void AddCheckDetector(ECbmModuleId detIn, std::string sNameIn, Double_t dTimeRangeBegIn=-1000.0, Double_t dTimeRangeEndIn=1000.0, UInt_t uRangeNbBinsIn=320, UInt_t uChargeCutMinIn=0, UInt_t uChargeCutMaxIn=0)
Definition: CbmMcbmCheckTimingAlgo.cxx:457
CbmTrdDigi.h
CbmStsDigi.h
CbmDigiManager::Get
const Digi * Get(Int_t index) const
Get a digi object.
Definition: CbmDigiManager.h:52
CheckTimingDetector
Definition: CbmMcbmCheckTimingAlgo.h:20
CbmMcbmCheckTimingAlgo::fvhDetSelfDiff
std::vector< TH1 * > fvhDetSelfDiff
vectors storing histograms for each detector under investigation
Definition: CbmMcbmCheckTimingAlgo.h:125
CbmMuchBeamTimeDigi.h
ECbmModuleId::kRich
@ kRich
Ring-Imaging Cherenkov Detector.
ClassImp
ClassImp(CbmConverterManager) InitStatus CbmConverterManager
Definition: CbmConverterManager.cxx:12
CbmMcbmCheckTimingAlgo::CheckDataPresence
void CheckDataPresence(CheckTimingDetector detToCheck)
Definition: CbmMcbmCheckTimingAlgo.cxx:68
CbmMcbmCheckTimingAlgo::CheckInterSystemOffset
void CheckInterSystemOffset()
Definition: CbmMcbmCheckTimingAlgo.cxx:222
CheckTimingDetector::uChargeCutMin
UInt_t uChargeCutMin
Definition: CbmMcbmCheckTimingAlgo.h:34
ECbmModuleId::kTrd
@ kTrd
Transition Radiation Detector.
CheckTimingDetector::dTimeRangeEnd
Double_t dTimeRangeEnd
Definition: CbmMcbmCheckTimingAlgo.h:32
GenerateLogBinArray
std::vector< double > GenerateLogBinArray(uint32_t uNbDecadesLog, uint32_t uNbStepsDecade, uint32_t uNbSubStepsInStep, uint32_t &uNbBinsLog)
Definition: CbmFlesHistosTools.cxx:6
CbmMcbmCheckTimingAlgo::fpT0DigiVec
const std::vector< CbmTofDigi > * fpT0DigiVec
Definition: CbmMcbmCheckTimingAlgo.h:110
CbmDigiManager.h
CbmMcbmCheckTimingAlgo::fRefDet
CheckTimingDetector fRefDet
Definition: CbmMcbmCheckTimingAlgo.h:115
CheckTimingDetector::uChargeCutMax
UInt_t uChargeCutMax
Charge cut used for example to reject/select pulser, no effect if equal, select if min < max,...
Definition: CbmMcbmCheckTimingAlgo.h:36
CbmFlesHistosTools.h
CbmMcbmCheckTimingAlgo
Definition: CbmMcbmCheckTimingAlgo.h:44
ECbmModuleId::kMuch
@ kMuch
Muon detection system.
ECbmModuleId::kPsd
@ kPsd
Projectile spectator detector.
CbmMcbmCheckTimingAlgo::SetParContainers
void SetParContainers()
Definition: CbmMcbmCheckTimingAlgo.cxx:40
ECbmModuleId::kNotExist
@ kNotExist
If not found.
CbmMcbmCheckTimingAlgo::Finish
void Finish()
Definition: CbmMcbmCheckTimingAlgo.cxx:413
CbmMcbmCheckTimingAlgo::fvhDetToRefDiffRefCharge
std::vector< TH2 * > fvhDetToRefDiffRefCharge
Definition: CbmMcbmCheckTimingAlgo.h:127
CbmMcbmCheckTimingAlgo::fvhDetToRefDiffDetCharge
std::vector< TH2 * > fvhDetToRefDiffDetCharge
Definition: CbmMcbmCheckTimingAlgo.h:128
CbmMcbmCheckTimingAlgo::fvhDetToRefDiffEvo
std::vector< TH2 * > fvhDetToRefDiffEvo
Definition: CbmMcbmCheckTimingAlgo.h:129
CheckTimingDetector::dPrevTime
Double_t dPrevTime
Charge cut used for example to reject/select pulser, no effect if equal, select if min < max,...
Definition: CbmMcbmCheckTimingAlgo.h:40
CheckTimingDetector::dTimeRangeBeg
Double_t dTimeRangeBeg
Definition: CbmMcbmCheckTimingAlgo.h:31
CbmMcbmCheckTimingAlgo::ProcessTs
void ProcessTs()
Definition: CbmMcbmCheckTimingAlgo.cxx:178
ECbmModuleId::kSts
@ kSts
Silicon Tracking System.
CbmMcbmCheckTimingAlgo::Init
Bool_t Init()
Definition: CbmMcbmCheckTimingAlgo.cxx:52
CbmMcbmCheckTimingAlgo::fDigiMan
CbmDigiManager * fDigiMan
Definition: CbmMcbmCheckTimingAlgo.h:107
CheckTimingDetector::detId
ECbmModuleId detId
Settings.
Definition: CbmMcbmCheckTimingAlgo.h:29