Belle II Software  release-06-00-14
SVDTimeValidationCollectorModule.cc
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 #include <svd/modules/svdTimeValidationCollector/SVDTimeValidationCollectorModule.h>
9 
10 using namespace std;
11 using namespace Belle2;
12 
13 //-----------------------------------------------------------------
14 // Register the Module
15 //-----------------------------------------------------------------
16 REG_MODULE(SVDTimeValidationCollector)
17 
18 //-----------------------------------------------------------------
19 // Implementation
20 //-----------------------------------------------------------------
21 
23 {
24  //Set module properties
25 
26  setDescription("Collector module used to create the histograms needed for the SVD 6-Sample CoG, 3-Sample CoG and 3-Sample ELS Time calibration");
27  setPropertyFlags(c_ParallelProcessingCertified);
28 
29  addParam("SVDClustersName", m_svdClusters, "Name of the SVDClusters list", m_svdClusters);
30  addParam("SVDClustersOnTracksName", m_svdClustersOnTracks, "Name of the SVDClustersOnTracks list", m_svdClustersOnTracks);
31  addParam("EventT0Name", m_eventTime, "Name of the EventT0 list", m_eventTime);
32  addParam("SVDEventInfoName", m_svdEventInfo, "Name of the SVDEventInfo list", m_svdEventInfo);
33  addParam("RecoTracksName", m_recotrack, "Name of the RecoTracks list", m_recotrack);
34  addParam("TracksName", m_track, "Name of the Tracks list", m_track);
35 }
36 
37 void SVDTimeValidationCollectorModule::prepare()
38 {
39 
40  TH1F hClsTimeOnTracks("clsTimeOnTracks__L@layerL@ladderS@sensor@view",
41  "clsTimeOnTracks in @layer.@ladder.@sensor @view/@side",
42  300, -150, 150);
43  hClsTimeOnTracks.GetXaxis()->SetTitle("clsTime_onTracks (ns)");
44  auto _hClsTimeOnTracks = new SVDHistograms<TH1F>(hClsTimeOnTracks);
45 
46  TH1F hClsTimeAll("clsTimeAll__L@layerL@ladderS@sensor@view",
47  "clsTimeAll in @layer.@ladder.@sensor @view/@side",
48  300, -150, 150);
49  hClsTimeAll.GetXaxis()->SetTitle("clsTime_all (ns)");
50  auto _hClsTimeAll = new SVDHistograms<TH1F>(hClsTimeAll);
51 
52  TH1F hClsDiffTimeOnTracks("clsDiffTimeOnTracks__L@layerL@ladderS@sensor@view",
53  "clsDiffTimeOnTracks in @layer.@ladder.@sensor @view/@side",
54  300, -150, 150);
55  hClsDiffTimeOnTracks.GetXaxis()->SetTitle("clsDiffTime_onTracks (ns)");
56  auto _hClsDiffTimeOnTracks = new SVDHistograms<TH1F>(hClsDiffTimeOnTracks);
57 
58  auto hEventT0 = new TH1F("hEventT0", "EventT0", 300, -150, 150);
59  registerObject<TH1F>("hEventT0", hEventT0);
60 
61  m_svdCls.isRequired(m_svdClusters);
62  m_svdClsOnTrk.isRequired(m_svdClustersOnTracks);
63  m_eventT0.isRequired(m_eventTime);
64  m_svdEI.isRequired(m_svdEventInfo);
65  m_recoTrk.isRequired(m_recotrack);
66  m_trk.isRequired(m_track);
67 
68  VXD::GeoCache& geoCache = VXD::GeoCache::getInstance();
69 
70  for (auto layer : geoCache.getLayers(VXD::SensorInfoBase::SVD)) {
71  for (auto ladder : geoCache.getLadders(layer)) {
72  for (Belle2::VxdID sensor : geoCache.getSensors(ladder)) {
73  for (int view = SVDHistograms<TH1F>::VIndex ; view < SVDHistograms<TH1F>::UIndex + 1; view++) {
74  registerObject<TH1F>(_hClsTimeOnTracks->getHistogram(sensor, view)->GetName(), _hClsTimeOnTracks->getHistogram(sensor, view));
75  registerObject<TH1F>(_hClsTimeAll->getHistogram(sensor, view)->GetName(), _hClsTimeAll->getHistogram(sensor, view));
76  registerObject<TH1F>(_hClsDiffTimeOnTracks->getHistogram(sensor, view)->GetName(), _hClsDiffTimeOnTracks->getHistogram(sensor,
77  view));
78  }
79  }
80  }
81  }
82 }
83 
84 
85 void SVDTimeValidationCollectorModule::collect()
86 {
87  if (m_eventT0->hasEventT0()) {
88  float eventT0 = m_eventT0->getEventT0();
89  getObjectPtr<TH1F>("hEventT0")->Fill(eventT0);
90 
91  // Fill histograms clusters on tracks
92  for (const auto& svdCluster : m_svdClsOnTrk) {
93  // get cluster time
94  float clTime = svdCluster.getClsTime();
95 
96  //get cluster layer, ladder sensor and side
97  auto theVxdID = svdCluster.getSensorID();
98  auto layer_num = theVxdID.getLayerNumber();
99  auto ladder_num = theVxdID.getLadderNumber();
100  auto sensor_num = theVxdID.getSensorNumber();
101  char side = 'V';
102  if (svdCluster.isUCluster())
103  side = 'U';
104 
105  auto hClsTimeOnTracks_name = Form("clsTimeOnTracks__L%dL%dS%d%c", layer_num, ladder_num, sensor_num, side);
106 
107  auto hClsDiffTimeOnTracks_name = Form("clsDiffTimeOnTracks__L%dL%dS%d%c", layer_num, ladder_num, sensor_num, side);
108 
109  getObjectPtr<TH1F>(hClsTimeOnTracks_name)->Fill(clTime);
110  getObjectPtr<TH1F>(hClsDiffTimeOnTracks_name)->Fill(clTime - eventT0);
111  };
112 
113  // Fill histograms with all clusters
114  for (const auto& svdCluster : m_svdCls) {
115  // get cluster time
116  float clTime = svdCluster.getClsTime();
117 
118  //get cluster layer, ladder sensor and side
119  auto theVxdID = svdCluster.getSensorID();
120  auto layer_num = theVxdID.getLayerNumber();
121  auto ladder_num = theVxdID.getLadderNumber();
122  auto sensor_num = theVxdID.getSensorNumber();
123  char side = 'V';
124  if (svdCluster.isUCluster())
125  side = 'U';
126 
127  auto hClsTimeAll_name = Form("clsTimeAll__L%dL%dS%d%c", layer_num, ladder_num, sensor_num, side);
128 
129  getObjectPtr<TH1F>(hClsTimeAll_name)->Fill(clTime);
130  };
131  }
132 }
Calibration collector module base class.
Collector module used to create the histograms needed for the SVD CoG-Time calibration.
Class to faciliate easy access to sensor information of the VXD like coordinate transformations or pi...
Definition: GeoCache.h:39
Class to uniquely identify a any structure of the PXD and SVD.
Definition: VxdID.h:33
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:650
Abstract base class for different kinds of events.