11 #include <svd/modules/svdTimeCalibrationCollector/SVDTimeCalibrationCollectorModule.h>
29 setDescription(
"Collector module used to create the histograms needed for the SVD 6-Sample CoG, 3-Sample CoG and 3-Sample ELS Time calibration");
30 setPropertyFlags(c_ParallelProcessingCertified);
32 addParam(
"SVDClustersFromTracksName", m_svdClusters,
"Name of the SVDClusters list", m_svdClusters);
33 addParam(
"EventT0Name", m_eventTime,
"Name of the EventT0 list", m_eventTime);
34 addParam(
"SVDEventInfoName", m_svdEventInfo,
"Name of the SVDEventInfo list", m_svdEventInfo);
35 addParam(
"RawCoGBinWidth", m_rawCoGBinWidth,
"Bin Width [ns] for raw CoG time", m_rawCoGBinWidth);
38 void SVDTimeCalibrationCollectorModule::prepare()
40 TH2F hEventT0vsCoG(
"eventT0vsCoG__L@layerL@ladderS@sensor@view",
41 "EventT0Sync vs rawTime in @layer.@ladder.@sensor @view/@side",
42 int(200 / m_rawCoGBinWidth), -100, 100, 100, -100, 100);
43 hEventT0vsCoG.GetYaxis()->SetTitle(
"EventT0Sync (ns)");
44 hEventT0vsCoG.GetXaxis()->SetTitle(
"raw_time (ns)");
47 TH1F hEventT0(
"eventT0__L@layerL@ladderS@sensor@view",
48 "EventT0Sync in @layer.@ladder.@sensor @view/@side",
50 hEventT0.GetXaxis()->SetTitle(
"event_t0 (ns)");
53 TH1F hEventT0NoSync(
"eventT0nosync__L@layerL@ladderS@sensor@view",
54 "EventT0NoSync in @layer.@ladder.@sensor @view/@side",
56 hEventT0NoSync.GetXaxis()->SetTitle(
"event_t0 (ns)");
59 m_hEventT0FromCDC =
new TH1F(
"hEventT0FromCDC",
"EventT0FromCDC", 200, -100, 100);
60 registerObject<TH1F>(
"hEventT0FromCDC", m_hEventT0FromCDC);
61 m_hEventT0FromCDCSync =
new TH1F(
"hEventT0FromCDCSync",
"EventT0FromCDCSync", 200, -100, 100);
62 registerObject<TH1F>(
"hEventT0FromCDCSync", m_hEventT0FromCDCSync);
63 m_hRawTimeL3V =
new TH1F(
"hRawTimeL3V",
"RawCoGTimeL3V", 300, -150, 150);
64 registerObject<TH1F>(
"hRawTimeL3V", m_hRawTimeL3V);
66 m_svdCls.isRequired(m_svdClusters);
67 m_eventT0.isRequired(m_eventTime);
68 m_svdEI.isRequired(m_svdEventInfo);
72 for (
auto layer : geoCache.getLayers(VXD::SensorInfoBase::SVD)) {
73 for (
auto ladder : geoCache.getLadders(layer)) {
76 registerObject<TH2F>(m_hEventT0vsCoG->getHistogram(sensor, view)->GetName(), m_hEventT0vsCoG->getHistogram(sensor, view));
77 registerObject<TH1F>(m_hEventT0->getHistogram(sensor, view)->GetName(), m_hEventT0->getHistogram(sensor, view));
78 registerObject<TH1F>(m_hEventT0nosync->getHistogram(sensor, view)->GetName(), m_hEventT0nosync->getHistogram(sensor, view));
85 void SVDTimeCalibrationCollectorModule::startRun()
90 for (
auto layer : geoCache.getLayers(VXD::SensorInfoBase::SVD)) {
91 for (
auto ladder : geoCache.getLadders(layer)) {
98 getObjectPtr<TH2F>(m_hEventT0vsCoG->getHistogram(sensor, view)->GetName())->Reset();
99 getObjectPtr<TH1F>(m_hEventT0->getHistogram(sensor, view)->GetName())->Reset();
100 getObjectPtr<TH1F>(m_hEventT0nosync->getHistogram(sensor, view)->GetName())->Reset();
107 void SVDTimeCalibrationCollectorModule::collect()
111 if (m_eventT0->hasTemporaryEventT0(Const::EDetector::CDC)) {
112 auto evtT0List_CDC = m_eventT0->getTemporaryEventT0s(Const::EDetector::CDC);
115 eventT0 = evtT0List_CDC.back().eventT0;
116 getObjectPtr<TH1F>(
"hEventT0FromCDC")->Fill(eventT0);
119 if (!m_svdCls.isValid()) {
120 B2WARNING(
"!!!! File is not Valid: isValid() = " << m_svdCls.isValid());
126 std::string m_svdEventInfoName =
"SVDEventInfo";
127 if (!temp_eventinfo.isOptional(
"SVDEventInfo"))
128 m_svdEventInfoName =
"SVDEventInfoSim";
130 if (!eventinfo) B2ERROR(
"No SVDEventInfo!");
132 for (
int cl = 0 ; cl < m_svdCls.getEntries(); cl++) {
134 float clTime_ftsw = m_svdCls[cl]->getClsTime();
137 float clTime = eventinfo->getTimeInSVDReference(clTime_ftsw, m_svdCls[cl]->getFirstFrame());
140 int side = m_svdCls[cl]->isUCluster();
144 short unsigned int layer = m_svdCls[cl]->getSensorID().getLayerNumber();
147 if (m_eventT0->hasTemporaryEventT0(Const::EDetector::CDC)) {
149 float eventT0Sync = eventinfo->getTimeInSVDReference(eventT0, m_svdCls[cl]->getFirstFrame());
151 getObjectPtr<TH2F>(m_hEventT0vsCoG->getHistogram(theVxdID, side)->GetName())->Fill(clTime, eventT0Sync);
152 getObjectPtr<TH1F>(m_hEventT0->getHistogram(theVxdID, side)->GetName())->Fill(eventT0Sync);
153 getObjectPtr<TH1F>(m_hEventT0nosync->getHistogram(theVxdID, side)->GetName())->Fill(eventT0);
154 getObjectPtr<TH1F>(
"hEventT0FromCDCSync")->Fill(eventT0Sync);
155 if (layer == 3 && side == 0) {getObjectPtr<TH1F>(
"hRawTimeL3V")->Fill(clTime_ftsw);}