8 #include <svd/modules/svdTimeCalibrationCollector/SVDTimeCalibrationCollectorModule.h>
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);
29 addParam(
"SVDClustersFromTracksName", m_svdClusters,
"Name of the SVDClusters list", m_svdClusters);
30 addParam(
"EventT0Name", m_eventTime,
"Name of the EventT0 list", m_eventTime);
31 addParam(
"SVDEventInfoName", m_svdEventInfo,
"Name of the SVDEventInfo list", m_svdEventInfo);
32 addParam(
"RawCoGBinWidth", m_rawCoGBinWidth,
"Bin Width [ns] for raw CoG time", m_rawCoGBinWidth);
35 void SVDTimeCalibrationCollectorModule::prepare()
37 TH2F hEventT0vsCoG(
"eventT0vsCoG__L@layerL@ladderS@sensor@view",
38 "EventT0Sync vs rawTime in @layer.@ladder.@sensor @view/@side",
39 int(200 / m_rawCoGBinWidth), -100, 100, 100, -100, 100);
40 hEventT0vsCoG.GetYaxis()->SetTitle(
"EventT0Sync (ns)");
41 hEventT0vsCoG.GetXaxis()->SetTitle(
"raw_time (ns)");
44 TH1F hEventT0(
"eventT0__L@layerL@ladderS@sensor@view",
45 "EventT0Sync in @layer.@ladder.@sensor @view/@side",
47 hEventT0.GetXaxis()->SetTitle(
"event_t0 (ns)");
50 TH1F hEventT0NoSync(
"eventT0nosync__L@layerL@ladderS@sensor@view",
51 "EventT0NoSync in @layer.@ladder.@sensor @view/@side",
53 hEventT0NoSync.GetXaxis()->SetTitle(
"event_t0 (ns)");
56 m_hEventT0FromCDC =
new TH1F(
"hEventT0FromCDC",
"EventT0FromCDC", 200, -100, 100);
57 registerObject<TH1F>(
"hEventT0FromCDC", m_hEventT0FromCDC);
58 m_hEventT0FromCDCSync =
new TH1F(
"hEventT0FromCDCSync",
"EventT0FromCDCSync", 200, -100, 100);
59 registerObject<TH1F>(
"hEventT0FromCDCSync", m_hEventT0FromCDCSync);
60 m_hRawTimeL3V =
new TH1F(
"hRawTimeL3V",
"RawCoGTimeL3V", 300, -150, 150);
61 registerObject<TH1F>(
"hRawTimeL3V", m_hRawTimeL3V);
63 m_svdCls.isRequired(m_svdClusters);
64 m_eventT0.isRequired(m_eventTime);
65 m_svdEI.isRequired(m_svdEventInfo);
69 for (
auto layer : geoCache.getLayers(VXD::SensorInfoBase::SVD)) {
70 for (
auto ladder : geoCache.getLadders(layer)) {
73 registerObject<TH2F>(m_hEventT0vsCoG->getHistogram(sensor, view)->GetName(), m_hEventT0vsCoG->getHistogram(sensor, view));
74 registerObject<TH1F>(m_hEventT0->getHistogram(sensor, view)->GetName(), m_hEventT0->getHistogram(sensor, view));
75 registerObject<TH1F>(m_hEventT0nosync->getHistogram(sensor, view)->GetName(), m_hEventT0nosync->getHistogram(sensor, view));
82 void SVDTimeCalibrationCollectorModule::startRun()
87 for (
auto layer : geoCache.getLayers(VXD::SensorInfoBase::SVD)) {
88 for (
auto ladder : geoCache.getLadders(layer)) {
95 getObjectPtr<TH2F>(m_hEventT0vsCoG->getHistogram(sensor, view)->GetName())->Reset();
96 getObjectPtr<TH1F>(m_hEventT0->getHistogram(sensor, view)->GetName())->Reset();
97 getObjectPtr<TH1F>(m_hEventT0nosync->getHistogram(sensor, view)->GetName())->Reset();
104 void SVDTimeCalibrationCollectorModule::collect()
108 if (m_eventT0->hasTemporaryEventT0(Const::EDetector::CDC)) {
109 auto evtT0List_CDC = m_eventT0->getTemporaryEventT0s(Const::EDetector::CDC);
112 eventT0 = evtT0List_CDC.back().eventT0;
113 getObjectPtr<TH1F>(
"hEventT0FromCDC")->Fill(eventT0);
116 if (!m_svdCls.isValid()) {
117 B2WARNING(
"!!!! File is not Valid: isValid() = " << m_svdCls.isValid());
123 std::string m_svdEventInfoName =
"SVDEventInfo";
124 if (!temp_eventinfo.
isOptional(
"SVDEventInfo"))
125 m_svdEventInfoName =
"SVDEventInfoSim";
127 if (!eventinfo) B2ERROR(
"No SVDEventInfo!");
129 for (
int cl = 0 ; cl < m_svdCls.getEntries(); cl++) {
131 float clTime_ftsw = m_svdCls[cl]->getClsTime();
134 float clTime = eventinfo->getTimeInSVDReference(clTime_ftsw, m_svdCls[cl]->getFirstFrame());
137 int side = m_svdCls[cl]->isUCluster();
141 short unsigned int layer = m_svdCls[cl]->getSensorID().getLayerNumber();
144 if (m_eventT0->hasTemporaryEventT0(Const::EDetector::CDC)) {
146 float eventT0Sync = eventinfo->getTimeInSVDReference(eventT0, m_svdCls[cl]->getFirstFrame());
148 getObjectPtr<TH2F>(m_hEventT0vsCoG->getHistogram(theVxdID, side)->GetName())->Fill(clTime, eventT0Sync);
149 getObjectPtr<TH1F>(m_hEventT0->getHistogram(theVxdID, side)->GetName())->Fill(eventT0Sync);
150 getObjectPtr<TH1F>(m_hEventT0nosync->getHistogram(theVxdID, side)->GetName())->Fill(eventT0);
151 getObjectPtr<TH1F>(
"hEventT0FromCDCSync")->Fill(eventT0Sync);
152 if (layer == 3 && side == 0) {getObjectPtr<TH1F>(
"hRawTimeL3V")->Fill(clTime_ftsw);}
Calibration collector module base class.
Collector module used to create the histograms needed for the SVD CoG-Time calibration.
bool isOptional(const std::string &name="")
Tell the DataStore about an optional input.
Type-safe access to single objects in the data store.
Class to faciliate easy access to sensor information of the VXD like coordinate transformations or pi...
Class to uniquely identify a any structure of the PXD and SVD.
unsigned short baseType
The base integer type for VxdID.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.