Belle II Software  release-05-02-19
SVDDQMHitTimeModule.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2012 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Giulia Casarosa
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <svd/modules/svdDQM/SVDDQMHitTimeModule.h>
12 #include <framework/core/HistoModule.h>
13 
14 #include <TDirectory.h>
15 
16 using namespace Belle2;
17 
18 REG_MODULE(SVDDQMHitTime)
19 
20 //---------------------------------
22 {
23  setPropertyFlags(c_ParallelProcessingCertified); // parallel processing
24  setDescription("Make data quality monitoring plots for SVD Hit Time for bhabha, mu mu, and hadron samples seeded by different trigger times.(ECL, CDC)");
25  addParam("desynchronizeSVDTime", m_desynchSVDTime,
26  "if TRUE (default is FALSE): svdTime back in SVD time reference", bool(false));
27 
28 }
29 
30 //---------------------------------
32 
33 
34 //---------------------------------
36 {
37 
38  TDirectory* oldDir = gDirectory;
39  oldDir->mkdir("SVDHitTime")->cd();
40 
41  int nBins = 300 ;
42  double minT0 = -150 ;
43  double maxT0 = 150 ;
44 
45  TString refFrame = "in FTSW reference";
46  if (m_desynchSVDTime)
47  refFrame = "in SVD reference";
48 
49  m_l3v_bhabha_L1_ECLTRG = new TH1F("SVDTime_L3V_bhabha_ECLTRG",
50  Form("SVD L3 V-Side Cluster Time %s: bhabhas, ECLTRG time", refFrame.Data()),
51  nBins, minT0, maxT0);
52  m_l3v_bhabha_L1_ECLTRG->GetXaxis()->SetTitle("cluster time (ns)");
53  m_l3vEvtT0_bhabha_L1_ECLTRG = new TH1F("SVDTimeEvtT0_L3V_bhabha_ECLTRG",
54  "SVD L3 V-Side Cluster Time - EventT0 : bhabhas, ECLTRG time",
55  nBins, minT0, maxT0);
56  m_l3vEvtT0_bhabha_L1_ECLTRG->GetXaxis()->SetTitle("cluster time - EventT0 (ns)");
57 
58  m_l3v_hadron_L1_ECLTRG = new TH1F("SVDTime_L3V_hadron_ECLTRG",
59  Form("SVD L3 V-Side Cluster Time %s: hadrons, ECLTRG time", refFrame.Data()),
60  nBins, minT0, maxT0);
61  m_l3v_hadron_L1_ECLTRG->GetXaxis()->SetTitle("cluster time (ns)");
62  m_l3vEvtT0_hadron_L1_ECLTRG = new TH1F("SVDTimeEvtT0_L3V_hadron_ECLTRG",
63  "SVD L3 V-Side Cluster Time - EventT0 : hadrons, ECLTRG time",
64  nBins, minT0, maxT0);
65  m_l3vEvtT0_hadron_L1_ECLTRG->GetXaxis()->SetTitle("cluster time - EventT0 (ns)");
66 
67  m_l3v_mumu_L1_ECLTRG = new TH1F("SVDTime_L3V_mumu_ECLTRG",
68  Form("SVD L3 V-Side Cluster Time %s: mumus, ECLTRG time", refFrame.Data()),
69  nBins, minT0, maxT0);
70  m_l3v_mumu_L1_ECLTRG->GetXaxis()->SetTitle("cluster time (ns)");
71  m_l3vEvtT0_mumu_L1_ECLTRG = new TH1F("SVDTimeEvtT0_L3V_mumu_ECLTRG",
72  "SVD L3 V-Side Cluster Time - EventT0 : mumus, ECLTRG time",
73  nBins, minT0, maxT0);
74  m_l3vEvtT0_mumu_L1_ECLTRG->GetXaxis()->SetTitle("cluster time - EventT0 (ns)");
75 
76  m_l3v_bhabha_L1_CDCTRG = new TH1F("SVDTime_L3V_bhabha_CDCTRG",
77  Form("SVD L3 V-Side Cluster Time %s: bhabhas, CDCTRG time", refFrame.Data()),
78  nBins, minT0, maxT0);
79  m_l3v_bhabha_L1_CDCTRG->GetXaxis()->SetTitle("cluster time (ns)");
80  m_l3vEvtT0_bhabha_L1_CDCTRG = new TH1F("SVDTimeEvtT0_L3V_bhabha_CDCTRG",
81  "SVD L3 V-Side Cluster Time - EventT0 : bhabhas, CDCTRG time",
82  nBins, minT0, maxT0);
83  m_l3vEvtT0_bhabha_L1_CDCTRG->GetXaxis()->SetTitle("cluster time - EventT0 (ns)");
84 
85  m_l3v_hadron_L1_CDCTRG = new TH1F("SVDTime_L3V_hadron_CDCTRG",
86  Form("SVD L3 V-Side Cluster Time %s: hadrons, CDCTRG time", refFrame.Data()),
87  nBins, minT0, maxT0);
88  m_l3v_hadron_L1_CDCTRG->GetXaxis()->SetTitle("cluster time (ns)");
89  m_l3vEvtT0_hadron_L1_CDCTRG = new TH1F("SVDTimeEvtT0_L3V_hadron_CDCTRG",
90  "SVD L3 V-Side Cluster Time - EventT0 : hadrons, CDCTRG time",
91  nBins, minT0, maxT0);
92  m_l3vEvtT0_hadron_L1_CDCTRG->GetXaxis()->SetTitle("cluster time - EventT0 (ns)");
93 
94  m_l3v_mumu_L1_CDCTRG = new TH1F("SVDTime_L3V_mumu_CDCTRG",
95  Form("SVD L3 V-Side Cluster Time %s: mumus, CDCTRG time", refFrame.Data()),
96  nBins, minT0, maxT0);
97  m_l3v_mumu_L1_CDCTRG->GetXaxis()->SetTitle("cluster time (ns)");
98  m_l3vEvtT0_mumu_L1_CDCTRG = new TH1F("SVDTimeEvtT0_L3V_mumu_CDCTRG",
99  "SVD L3 V-Side Cluster Time - EventT0 : mumus, CDCTRG time",
100  nBins, minT0, maxT0);
101  m_l3vEvtT0_mumu_L1_CDCTRG->GetXaxis()->SetTitle("cluster time - EventT0 (ns)");
102 
103  oldDir->cd();
104 
105 }
106 
107 
108 //---------------------------------
110 {
111 
112  m_TrgResult.isOptional();
113  m_eventT0.isOptional();
114  m_svdEventInfo.isOptional();
115  m_clusters.isOptional();
116 
117  REG_HISTOGRAM
118 
119 }
120 
121 
122 
123 //---------------------------------
125 {
126 
127  m_l3v_bhabha_L1_ECLTRG->Reset();
129  m_l3v_hadron_L1_ECLTRG->Reset();
131  m_l3v_mumu_L1_ECLTRG->Reset();
132  m_l3vEvtT0_mumu_L1_ECLTRG->Reset();
133 
134  m_l3v_bhabha_L1_CDCTRG->Reset();
136  m_l3v_hadron_L1_CDCTRG->Reset();
138  m_l3v_mumu_L1_CDCTRG->Reset();
139  m_l3vEvtT0_mumu_L1_CDCTRG->Reset();
140 
141 }
142 
143 
144 //---------------------------------
146 {
147 
148  if (!m_TrgResult.isValid()) {
149  B2WARNING("Missing TRGSummary, SVDDQMHitTime is skipped.");
150  return;
151  }
152  if (!m_svdEventInfo.isValid()) {
153  B2WARNING("Missing SVDEventInfo, SVDDQMHitTime is skipped.");
154  return;
155  }
156 
157  if (!m_clusters.isValid()) {
158  B2WARNING("Missing SVDClusters, SVDDQMHitTime is skipped.");
159  return;
160  }
161 
162 
163  if (!m_objTrgSummary.isValid()) {
164  B2WARNING("TRGSummary object not available but required to indicate which detector provided the L1 trigger time");
165  return;
166  } else {
167  m_L1TimingSrc = m_objTrgSummary->getTimType();
168  }
169 
170  bool Is_ECL_L1TriggerSource = false ;
171  bool Is_CDC_L1TriggerSource = false ;
172  if (m_L1TimingSrc == 0) { // for L1 timing source is "ecl trigger"
173  Is_ECL_L1TriggerSource = true ;
174  } else if (m_L1TimingSrc == 3) { // for L1 timing source is "cdc trigger"
175  Is_CDC_L1TriggerSource = true ;
176  }
177  // else if(m_L1TimingSrc==5){ // for L1 timing source is "delayed Bhabha" }
178  B2DEBUG(20, "Is_ECL_L1TriggerSource = " << Is_ECL_L1TriggerSource) ;
179  B2DEBUG(20, "Is_CDC_L1TriggerSource= " << Is_CDC_L1TriggerSource) ;
180 
181 
182  if (!m_TrgResult.isValid()) {
183  B2WARNING("SoftwareTriggerResult object not available but require to select bhabha/mumu/hadron events for this module");
184  return;
185  }
186 
187  const std::map<std::string, int>& fresults = m_TrgResult->getResults();
188  if ((fresults.find("software_trigger_cut&skim&accept_bhabha") == fresults.end()) ||
189  (fresults.find("software_trigger_cut&skim&accept_mumu_2trk") == fresults.end()) ||
190  (fresults.find("software_trigger_cut&skim&accept_hadron") == fresults.end())) {
191  B2WARNING("SVDDQMHitTimeModule: Can't find required bhabha or mumu or hadron trigger identifier");
192  return;
193  }
194 
195 
196 
197  // determine if the event was part of the hadron skim or bhabha skim or mumu skim
198  const bool IsEvtAcceptedBhabha = (m_TrgResult->getResult("software_trigger_cut&skim&accept_bhabha") ==
200  const bool IsEvtAcceptedHadron = (m_TrgResult->getResult("software_trigger_cut&skim&accept_hadron") ==
202  const bool IsEvtAcceptedMumu = (m_TrgResult->getResult("software_trigger_cut&skim&accept_mumu_2trk") ==
204 
205 
206  B2DEBUG(20, "bhabha trigger result = " << static_cast<std::underlying_type<SoftwareTriggerCutResult>::type>
207  (m_TrgResult->getResult("software_trigger_cut&skim&accept_bhabha"))) ;
208  B2DEBUG(20, "hadron trigger result = " << static_cast<std::underlying_type<SoftwareTriggerCutResult>::type>
209  (m_TrgResult->getResult("software_trigger_cut&skim&accept_hadron"))) ;
210  B2DEBUG(20, "mu mu trigger result = " << static_cast<std::underlying_type<SoftwareTriggerCutResult>::type>
211  (m_TrgResult->getResult("software_trigger_cut&skim&accept_mumu_2trk"))) ;
212  B2DEBUG(20, "bhabha trigger comparison bool = " << IsEvtAcceptedBhabha) ;
213  B2DEBUG(20, "hadron trigger comparison bool = " << IsEvtAcceptedHadron) ;
214  B2DEBUG(20, "mumu trigger comparison bool = " << IsEvtAcceptedMumu) ;
215 
216 
217  // get EventT0 if present and valid
218  double eventT0 = -1000;
219  if (m_eventT0.isValid())
220  if (m_eventT0->hasEventT0())
221  eventT0 = m_eventT0->getEventT0();
222 
223  // if svd time in SVD time reference is shown, eventT0 is also synchronized with SVD reference frame, firstFrame = 0
224  if (m_desynchSVDTime && m_svdEventInfo.isValid())
225  eventT0 = eventT0 - m_svdEventInfo->getSVD2FTSWTimeShift(0);
226 
227  //loop on clusters
228  for (const SVDCluster& cluster : m_clusters) {
229 
230  //skip all non-L3 clusters
231  if (cluster.getSensorID().getLayerNumber() != 3) continue;
232  //skip all U-side clusters
233  if (cluster.isUCluster()) continue;
234 
235  double time = cluster.getClsTime();
236 
237  //if svd time is shown in SVD time reference we need to desynchronize (eventT0 is, instead, synchronized, see a few lines above
238  if (m_desynchSVDTime && m_svdEventInfo.isValid())
239  time = time - m_svdEventInfo->getSVD2FTSWTimeShift(cluster.getFirstFrame());
240 
241  // Fill the plots that used the ECL trigger as the L1 timing source
242  if (Is_ECL_L1TriggerSource) {
243  if (IsEvtAcceptedBhabha) {
244  m_l3v_bhabha_L1_ECLTRG->Fill(time);
245  m_l3vEvtT0_bhabha_L1_ECLTRG->Fill(time - eventT0);
246  }
247  if (IsEvtAcceptedHadron) {
248  m_l3v_hadron_L1_ECLTRG->Fill(time);
249  m_l3vEvtT0_hadron_L1_ECLTRG->Fill(time - eventT0);
250  }
251  if (IsEvtAcceptedMumu) {
252  m_l3v_mumu_L1_ECLTRG->Fill(time);
253  m_l3vEvtT0_mumu_L1_ECLTRG->Fill(time - eventT0);
254  }
255  }
256 
257  // Fill the plots that used the CDC trigger as the L1 timing source
258  else if (Is_CDC_L1TriggerSource) {
259  if (IsEvtAcceptedBhabha) {
260  m_l3v_bhabha_L1_CDCTRG->Fill(time);
261  m_l3vEvtT0_bhabha_L1_CDCTRG->Fill(time - eventT0);
262  }
263  if (IsEvtAcceptedHadron) {
264  m_l3v_hadron_L1_CDCTRG->Fill(time);
265  m_l3vEvtT0_hadron_L1_CDCTRG->Fill(time - eventT0);
266  }
267  if (IsEvtAcceptedMumu) {
268  m_l3v_mumu_L1_CDCTRG->Fill(time);
269  m_l3vEvtT0_mumu_L1_CDCTRG->Fill(time - eventT0);
270  }
271  }
272 
273  B2DEBUG(20, "eventT0 = " << eventT0 << " ns" << ", SVD HitTime = " << time << " ns") ;
274 
275  } //close loop on clusters
276 }
277 
278 
Belle2::SVDDQMHitTimeModule
This module to design collect the svd hit time for different detectors trigger timing and physics pro...
Definition: SVDDQMHitTimeModule.h:47
Belle2::SVDDQMHitTimeModule::~SVDDQMHitTimeModule
virtual ~SVDDQMHitTimeModule()
Destructor.
Definition: SVDDQMHitTimeModule.cc:31
Belle2::SVDDQMHitTimeModule::m_l3vEvtT0_mumu_L1_CDCTRG
TH1F * m_l3vEvtT0_mumu_L1_CDCTRG
svd time histogram for mu mu events wrt the CDC trigger time
Definition: SVDDQMHitTimeModule.h:100
REG_MODULE
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:652
Belle2::SVDDQMHitTimeModule::m_l3vEvtT0_bhabha_L1_ECLTRG
TH1F * m_l3vEvtT0_bhabha_L1_ECLTRG
svd time histogram for bhabha events wrt the ECL trigger time
Definition: SVDDQMHitTimeModule.h:89
Belle2::SVDDQMHitTimeModule::m_eventT0
StoreObjPtr< EventT0 > m_eventT0
EventT0 data object.
Definition: SVDDQMHitTimeModule.h:84
Belle2::SVDDQMHitTimeModule::m_l3vEvtT0_mumu_L1_ECLTRG
TH1F * m_l3vEvtT0_mumu_L1_ECLTRG
svd time histogram for mu mu events wrt the ECL trigger time
Definition: SVDDQMHitTimeModule.h:93
Belle2::SoftwareTriggerCutResult::c_accept
@ c_accept
Accept this event.
Belle2::SVDDQMHitTimeModule::m_TrgResult
StoreObjPtr< SoftwareTriggerResult > m_TrgResult
Trigger selection data object.
Definition: SVDDQMHitTimeModule.h:83
Belle2::SVDDQMHitTimeModule::m_objTrgSummary
StoreObjPtr< TRGSummary > m_objTrgSummary
Trigger Summary data object.
Definition: SVDDQMHitTimeModule.h:75
Belle2::SVDDQMHitTimeModule::m_l3v_hadron_L1_ECLTRG
TH1F * m_l3v_hadron_L1_ECLTRG
svd time histogram for hadronic events wrt the ECL trigger time
Definition: SVDDQMHitTimeModule.h:90
Belle2::SVDDQMHitTimeModule::m_l3v_bhabha_L1_CDCTRG
TH1F * m_l3v_bhabha_L1_CDCTRG
svd time histogram for bhabha events wrt the CDC trigger time
Definition: SVDDQMHitTimeModule.h:95
Belle2::SVDDQMHitTimeModule::m_L1TimingSrc
int m_L1TimingSrc
L1 timing source from getTimeType() in TRGSummary See ETimingTYpe in mdst/dataobjects/include/TRGSumm...
Definition: SVDDQMHitTimeModule.h:81
Belle2::SVDDQMHitTimeModule::event
virtual void event() override
This method is called for each event.
Definition: SVDDQMHitTimeModule.cc:145
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::SVDDQMHitTimeModule::m_l3vEvtT0_hadron_L1_CDCTRG
TH1F * m_l3vEvtT0_hadron_L1_CDCTRG
svd time histogram for hadronic events wrt the CDC trigger time
Definition: SVDDQMHitTimeModule.h:98
Belle2::SVDDQMHitTimeModule::m_svdEventInfo
StoreObjPtr< SVDEventInfo > m_svdEventInfo
SVDEventInfo data object.
Definition: SVDDQMHitTimeModule.h:85
Belle2::SVDDQMHitTimeModule::m_l3v_hadron_L1_CDCTRG
TH1F * m_l3v_hadron_L1_CDCTRG
svd time histogram for hadronic events wrt the CDC trigger time
Definition: SVDDQMHitTimeModule.h:97
Belle2::StoreArray::isValid
bool isValid() const
Check wether the array was registered.
Definition: StoreArray.h:298
Belle2::SVDDQMHitTimeModule::defineHisto
virtual void defineHisto() override
Definition of histograms.
Definition: SVDDQMHitTimeModule.cc:35
Belle2::SVDDQMHitTimeModule::initialize
virtual void initialize() override
Initialize the module.
Definition: SVDDQMHitTimeModule.cc:109
Belle2::SVDCluster
The SVD Cluster class This class stores all information about reconstructed SVD clusters.
Definition: SVDCluster.h:38
Belle2::SVDDQMHitTimeModule::beginRun
virtual void beginRun() override
This method is called for each run.
Definition: SVDDQMHitTimeModule.cc:124
Belle2::SVDDQMHitTimeModule::m_l3v_bhabha_L1_ECLTRG
TH1F * m_l3v_bhabha_L1_ECLTRG
svd time histogram for bhabha events wrt the ECL trigger time
Definition: SVDDQMHitTimeModule.h:88
Belle2::SVDDQMHitTimeModule::m_l3vEvtT0_hadron_L1_ECLTRG
TH1F * m_l3vEvtT0_hadron_L1_ECLTRG
svd time histogram for hadronic events wrt the ECL trigger time
Definition: SVDDQMHitTimeModule.h:91
Belle2::SVDDQMHitTimeModule::m_desynchSVDTime
bool m_desynchSVDTime
if TRUE: svdTime back in SVD time reference
Definition: SVDDQMHitTimeModule.h:73
Belle2::SVDDQMHitTimeModule::m_l3v_mumu_L1_ECLTRG
TH1F * m_l3v_mumu_L1_ECLTRG
svd time histogram for mu mu events wrt the ECL trigger time
Definition: SVDDQMHitTimeModule.h:92
Belle2::SVDDQMHitTimeModule::m_l3v_mumu_L1_CDCTRG
TH1F * m_l3v_mumu_L1_CDCTRG
svd time histogram for mu mu events wrt the CDC trigger time
Definition: SVDDQMHitTimeModule.h:99
Belle2::SVDDQMHitTimeModule::m_l3vEvtT0_bhabha_L1_CDCTRG
TH1F * m_l3vEvtT0_bhabha_L1_CDCTRG
svd time histogram for bhabha events wrt the CDC trigger time
Definition: SVDDQMHitTimeModule.h:96
Belle2::HistoModule
HistoModule.h is supposed to be used instead of Module.h for the modules with histogram definitions t...
Definition: HistoModule.h:29
Belle2::SVDDQMHitTimeModule::m_clusters
StoreArray< SVDCluster > m_clusters
Store array for clusters.
Definition: SVDDQMHitTimeModule.h:86