9 #include "vxd/modules/vxdDQM/VXDDQMExpressRecoModule.h"
11 #include <framework/datastore/StoreArray.h>
12 #include <framework/datastore/RelationArray.h>
14 #include <svd/dataobjects/SVDShaperDigit.h>
15 #include <svd/dataobjects/SVDCluster.h>
16 #include <svd/geometry/SensorInfo.h>
18 #include <pxd/dataobjects/PXDDigit.h>
19 #include <pxd/dataobjects/PXDCluster.h>
20 #include <pxd/geometry/SensorInfo.h>
22 #include <vxd/geometry/SensorInfoBase.h>
23 #include <vxd/geometry/GeoTools.h>
27 #include <boost/format.hpp>
29 #include "TDirectory.h"
48 setDescription(
"VXD DQM module for Express Reco "
49 "Recommended Number of events for monitor is 40 kEvents or more to fill all histograms "
52 setPropertyFlags(c_ParallelProcessingCertified);
53 addParam(
"UseDigits", m_UseDigits,
54 "flag <0,1> for using digits only, no cluster information will be required, default = 0 ", m_UseDigits);
55 addParam(
"CorrelationGranulation", m_CorrelationGranulation,
56 "Set granulation of histogram plots, default is 1 degree, min = 0.02 degree, max = 1 degree ", m_CorrelationGranulation);
57 addParam(
"SwapPXD", m_SwapPXD,
"flag <0,1> very special case for swap of phi-theta coordinates, default = 0 ", m_SwapPXD);
58 addParam(
"CutCorrelationSigPXD", m_CutCorrelationSigPXD,
59 "Cut threshold of PXD signal for accepting to correlations, default = 0 ADU ", m_CutCorrelationSigPXD);
60 addParam(
"CutCorrelationSigUSVD", m_CutCorrelationSigUSVD,
61 "Cut threshold of SVD signal for accepting to correlations in u, default = 0 ADU ", m_CutCorrelationSigUSVD);
62 addParam(
"CutCorrelationSigVSVD", m_CutCorrelationSigVSVD,
63 "Cut threshold of SVD signal for accepting to correlations in v, default = 0 ADU ", m_CutCorrelationSigVSVD);
64 addParam(
"CutCorrelationTimeSVD", m_CutCorrelationTimeSVD,
65 "Cut threshold of SVD time window for accepting to correlations, default = 70 ns ", m_CutCorrelationTimeSVD);
67 addParam(
"histogramDirectoryName", m_histogramDirectoryName,
"Name of the directory where histograms will be placed",
68 std::string(
"VXDExpReco"));
72 VXDDQMExpressRecoModule::~VXDDQMExpressRecoModule()
80 void VXDDQMExpressRecoModule::defineHisto()
82 auto gTools = VXD::GeoCache::getInstance().getGeoTools();
83 if (gTools->getNumberOfLayers() == 0) {
84 B2WARNING(
"Missing geometry for VXD, check steering file.");
87 if (gTools->getNumberOfPXDLayers() == 0) {
88 B2WARNING(
"Missing geometry for PXD.");
90 if (gTools->getNumberOfSVDLayers() == 0) {
91 B2WARNING(
"Missing geometry for SVD.");
95 TDirectory* oldDir = gDirectory;
96 if (m_histogramDirectoryName !=
"") {
97 oldDir->mkdir(m_histogramDirectoryName.c_str());
98 oldDir->cd(m_histogramDirectoryName.c_str());
101 if (m_CorrelationGranulation > 5.0) m_CorrelationGranulation = 5.0;
102 if (m_CorrelationGranulation < 0.02) m_CorrelationGranulation = 0.02;
105 int h_MaxBins = 2000;
110 int nVXDLayers = gTools->getNumberOfLayers();
113 m_correlationsSP = (TH2F**)
new TH2F*[nVXDLayers * nVXDLayers];
114 m_correlationsSP1DPhi = (TH1F**)
new TH1F*[nVXDLayers * nVXDLayers];
115 m_correlationsSP1DTheta = (TH1F**)
new TH1F*[nVXDLayers * nVXDLayers];
118 for (
int i = 0; i < nVXDLayers; i++) {
119 for (
int j = 0; j < nVXDLayers; j++) {
120 m_correlationsSP[nVXDLayers * j + i] = NULL;
121 m_correlationsSP1DPhi[nVXDLayers * j + i] = NULL;
122 m_correlationsSP1DTheta[nVXDLayers * j + i] = NULL;
126 string Diru = str(format(
"Phi"));
127 string Dirv = str(format(
"Theta"));
128 string Unit = str(format(
"degree"));
129 string AxisTitPhi = str(format(
"%1% position [%2%]") % Diru.c_str() %
Unit.c_str());
130 string AxisTitTheta = str(format(
"%1% position [%2%]") % Dirv.c_str() %
Unit.c_str());
132 AxisTitPhi = str(format(
"From digits: %1%") % AxisTitPhi);
133 AxisTitTheta = str(format(
"From digits: %1%") % AxisTitTheta);
136 int i = layer1.getLayerNumber() - gTools->getFirstLayer();
137 float uSize1s, uSize1e;
138 float vSize1s, vSize1e;
139 int nStripsU1, nStripsV1;
144 nStripsU1 = (uSize1e - uSize1s) / m_CorrelationGranulation;
145 if (nStripsU1 > h_MaxBins) nStripsU1 = h_MaxBins;
146 nStripsV1 = nStripsU1;
148 int j = layer2.getLayerNumber() - gTools->getFirstLayer();
149 float uSize2s, uSize2e;
150 float vSize2s, vSize2e;
151 int nStripsU2, nStripsV2;
156 nStripsU2 = nStripsU1;
157 nStripsV2 = nStripsV1;
160 string nameSP = str(format(
"DQMER_VXD_Hitmap_L%1%") % layer2.getLayerNumber());
161 string titleSP = str(format(
"DQM ER VXD Hitmap, layer %1%") % layer2.getLayerNumber());
162 m_correlationsSP[nVXDLayers * j + i] =
new TH2F(nameSP.c_str(), titleSP.c_str(),
163 nStripsU2, uSize2s, uSize2e,
164 nStripsV2, vSize2s, vSize2e);
165 m_correlationsSP[nVXDLayers * j + i]->GetXaxis()->SetTitle(AxisTitPhi.c_str());
166 m_correlationsSP[nVXDLayers * j + i]->GetYaxis()->SetTitle(AxisTitTheta.c_str());
167 m_correlationsSP[nVXDLayers * j + i]->GetZaxis()->SetTitle(
"hits");
169 nameSP = str(format(
"DQMER_VXD_Hitmap_%1%_L%2%") % Diru.c_str() % layer2.getLayerNumber());
170 titleSP = str(format(
"DQM ER VXD Hitmap in %1%, layer %2%") % Diru.c_str() % layer2.getLayerNumber());
171 m_correlationsSP1DPhi[nVXDLayers * j + i] =
new TH1F(nameSP.c_str(), titleSP.c_str(),
172 nStripsU2, uSize2s, uSize2e);
173 m_correlationsSP1DPhi[nVXDLayers * j + i]->GetXaxis()->SetTitle(AxisTitPhi.c_str());
174 m_correlationsSP1DPhi[nVXDLayers * j + i]->GetYaxis()->SetTitle(
"hits");
176 nameSP = str(format(
"DQMER_VXD_Hitmap_%1%_L%2%") % Dirv.c_str() % layer2.getLayerNumber());
177 titleSP = str(format(
"DQM ER VXD Hitmap in %1%, layer %2%") % Dirv.c_str() % layer2.getLayerNumber());
178 m_correlationsSP1DTheta[nVXDLayers * j + i] =
new TH1F(nameSP.c_str(), titleSP.c_str(),
179 nStripsV2, vSize2s, vSize2e);
180 m_correlationsSP1DTheta[nVXDLayers * j + i]->GetXaxis()->SetTitle(AxisTitTheta.c_str());
181 m_correlationsSP1DTheta[nVXDLayers * j + i]->GetYaxis()->SetTitle(
"hits");
184 string nameSP = str(format(
"DQMER_VXD_Correlations_%1%_L%2%_L%3%") % Diru.c_str() % layer1.getLayerNumber() %
185 layer2.getLayerNumber());
186 string titleSP = str(format(
"DQM ER VXD Correlations in %1%, layers %2% %3%") % Diru.c_str() % layer1.getLayerNumber() %
187 layer2.getLayerNumber());
188 m_correlationsSP[nVXDLayers * j + i] =
new TH2F(nameSP.c_str(), titleSP.c_str(),
189 nStripsU1, uSize1s, uSize1e,
190 nStripsU2, uSize2s, uSize2e);
191 string axisxtitle = str(format(
"%1%, layer %2%") % AxisTitPhi.c_str() % layer1.getLayerNumber());
192 string axisytitle = str(format(
"%1%, layer %2%") % AxisTitPhi.c_str() % layer2.getLayerNumber());
193 m_correlationsSP[nVXDLayers * j + i]->GetXaxis()->SetTitle(axisxtitle.c_str());
194 m_correlationsSP[nVXDLayers * j + i]->GetYaxis()->SetTitle(axisytitle.c_str());
195 m_correlationsSP[nVXDLayers * j + i]->GetZaxis()->SetTitle(
"hits");
197 nameSP = str(format(
"DQMER_VXD_1D_Correlations_%1%_L%2%_L%3%") % Diru.c_str() % layer1.getLayerNumber() % layer2.getLayerNumber());
198 titleSP = str(format(
"DQM ER VXD 1D Correlations in %1%, layers %2% %3%") % Diru.c_str() % layer1.getLayerNumber() %
199 layer2.getLayerNumber());
200 m_correlationsSP1DPhi[nVXDLayers * j + i] =
new TH1F(nameSP.c_str(), titleSP.c_str(),
201 nStripsU1, uSize1s, uSize1e);
202 axisxtitle = str(format(
"%1%, layer %2% - %3%") % AxisTitPhi.c_str() % layer1.getLayerNumber() % layer2.getLayerNumber());
203 m_correlationsSP1DPhi[nVXDLayers * j + i]->GetXaxis()->SetTitle(axisxtitle.c_str());
204 m_correlationsSP1DPhi[nVXDLayers * j + i]->GetYaxis()->SetTitle(
"hits");
206 string nameSP = str(format(
"DQMER_VXD_Correlations_%1%_L%2%_L%3%") % Dirv.c_str() % layer1.getLayerNumber() %
207 layer2.getLayerNumber());
208 string titleSP = str(format(
"DQM ER VXD Correlations in %1%, layers %2% %3%") % Dirv.c_str() % layer1.getLayerNumber() %
209 layer2.getLayerNumber());
210 m_correlationsSP[nVXDLayers * j + i] =
new TH2F(nameSP.c_str(), titleSP.c_str(),
211 nStripsV1, vSize1s, vSize1e,
212 nStripsV2, vSize2s, vSize2e);
213 string axisxtitle = str(format(
"%1%, layer %2%") % AxisTitTheta.c_str() % layer1.getLayerNumber());
214 string axisytitle = str(format(
"%1%, layer %2%") % AxisTitTheta.c_str() % layer2.getLayerNumber());
215 m_correlationsSP[nVXDLayers * j + i]->GetXaxis()->SetTitle(axisxtitle.c_str());
216 m_correlationsSP[nVXDLayers * j + i]->GetYaxis()->SetTitle(axisytitle.c_str());
217 m_correlationsSP[nVXDLayers * j + i]->GetZaxis()->SetTitle(
"hits");
219 nameSP = str(format(
"DQMER_VXD_1D_Correlations_%1%_L%2%_L%3%") % Dirv.c_str() % layer1.getLayerNumber() % layer2.getLayerNumber());
220 titleSP = str(format(
"DQM ER VXD 1D Correlations in %1%, layers %2% %3%") % Dirv.c_str() % layer1.getLayerNumber() %
221 layer2.getLayerNumber());
222 m_correlationsSP1DTheta[nVXDLayers * j + i] =
new TH1F(nameSP.c_str(), titleSP.c_str(),
223 nStripsV1, -vSize1e, vSize1e);
224 axisxtitle = str(format(
"%1%, layer %2% - %3%") % AxisTitTheta.c_str() % layer1.getLayerNumber() % layer2.getLayerNumber());
225 m_correlationsSP1DTheta[nVXDLayers * j + i]->GetXaxis()->SetTitle(axisxtitle.c_str());
226 m_correlationsSP1DTheta[nVXDLayers * j + i]->GetYaxis()->SetTitle(
"hits");
235 void VXDDQMExpressRecoModule::initialize()
240 auto gTools = VXD::GeoCache::getInstance().getGeoTools();
241 if (gTools->getNumberOfLayers() != 0) {
247 RelationArray relPXDClusterDigits(storePXDClusters, storePXDDigits);
248 RelationArray relSVDClusterDigits(storeSVDClusters, storeSVDShaperDigits);
249 m_storePXDClustersName = storePXDClusters.
getName();
250 m_relPXDClusterDigitName = relPXDClusterDigits.
getName();
251 m_storeSVDClustersName = storeSVDClusters.
getName();
252 m_relSVDClusterDigitName = relSVDClusterDigits.
getName();
258 m_storePXDDigitsName = storePXDDigits.
getName();
259 m_storeSVDShaperDigitsName = storeSVDShaperDigits.
getName();
263 void VXDDQMExpressRecoModule::beginRun()
265 auto gTools = VXD::GeoCache::getInstance().getGeoTools();
266 if (gTools->getNumberOfLayers() == 0)
return;
269 int nVXDLayers = gTools->getNumberOfLayers();
270 for (
int i = 0; i < nVXDLayers; i++) {
271 for (
int j = 0; j < nVXDLayers; j++) {
272 if (m_correlationsSP[nVXDLayers * j + i] != NULL) m_correlationsSP[nVXDLayers * j + i]->Reset();
273 if (m_correlationsSP1DPhi[nVXDLayers * j + i] != NULL) m_correlationsSP1DPhi[nVXDLayers * j + i]->Reset();
274 if (m_correlationsSP1DTheta[nVXDLayers * j + i] != NULL) m_correlationsSP1DTheta[nVXDLayers * j + i]->Reset();
280 void VXDDQMExpressRecoModule::event()
282 auto gTools = VXD::GeoCache::getInstance().getGeoTools();
283 if (gTools->getNumberOfLayers() == 0)
return;
291 const RelationArray relPXDClusterDigits(storePXDClusters, storePXDDigits, m_relPXDClusterDigitName);
292 const RelationArray relSVDClusterDigits(storeSVDClusters, storeSVDShaperDigits, m_relSVDClusterDigitName);
295 if (!storePXDDigits && !storeSVDShaperDigits)
return;
298 int nVXDLayers = gTools->getNumberOfLayers();
299 int firstVXDLayer = gTools->getFirstLayer();
300 int firstPXDLayer = gTools->getFirstPXDLayer();
301 int lastPXDLayer = gTools->getLastPXDLayer();
302 int firstSVDLayer = gTools->getFirstSVDLayer();
303 int lastSVDLayer = gTools->getLastSVDLayer();
313 if (MaxHits == 0)
return;
315 for (
int i1 = 0; i1 < MaxHits; i1++) {
318 float fPosSPU1 = 0.0;
319 float fPosSPV1 = 0.0;
327 const PXDDigit& digitPXD1 = *storePXDDigits[i1];
329 if ((iLayer1 < firstPXDLayer) || (iLayer1 > lastPXDLayer))
continue;
330 index1 = iLayer1 - firstVXDLayer;
332 if (fCharge1 < m_CutCorrelationSigPXD)
continue;
334 auto info =
dynamic_cast<const PXD::SensorInfo&
>(VXD::GeoCache::get(sensorID1));
335 TVector3 rLocal1(info.getUCellPosition(digitPXD1.
getUCellID()), info.getVCellPosition(digitPXD1.
getVCellID()), 0);
336 TVector3 ral1 = info.pointToGlobal(rLocal1);
340 fPosSPU1 = ral1.Phi() / TMath::Pi() * 180;
341 fPosSPV1 = ral1.Theta() / TMath::Pi() * 180;
343 fPosSPV1 = ral1.Phi() / TMath::Pi() * 180;
344 fPosSPU1 = ral1.Theta() / TMath::Pi() * 180;
349 if ((iLayer1 < firstSVDLayer) || (iLayer1 > lastSVDLayer))
continue;
350 index1 = iLayer1 - firstVXDLayer;
353 auto info =
dynamic_cast<const SVD::SensorInfo&
>(VXD::GeoCache::get(sensorID1));
357 for (
size_t i = 0; i < SVDShaperDigit::c_nAPVSamples; ++i) {
358 float fCharge1 = samples[i];
359 if (fCharge1 > m_CutCorrelationSigUSVD) iCont = 1;
361 if (iCont == 0)
continue;
362 float possi = info.getUCellPosition(digitSVD1.
getCellID());
363 TVector3 rLocal1(possi, 0 , 0);
364 TVector3 ral1 = info.pointToGlobal(rLocal1);
366 fPosSPU1 = ral1.Phi() / TMath::Pi() * 180;
369 for (
size_t i = 0; i < SVDShaperDigit::c_nAPVSamples; ++i) {
370 float fCharge1 = samples[i];
371 if (fCharge1 > m_CutCorrelationSigVSVD) iCont = 1;
373 if (iCont == 0)
continue;
376 float possi = info.getVCellPosition(digitSVD1.
getCellID());
378 TVector3 rLocal1(0, possi, 0);
379 TVector3 ral1 = info.pointToGlobal(rLocal1);
381 fPosSPV1 = ral1.Theta() / TMath::Pi() * 180;
386 const PXDCluster& clusterPXD1 = *storePXDClusters[i1];
388 if ((iLayer1 < firstPXDLayer) || (iLayer1 > lastPXDLayer))
continue;
389 index1 = iLayer1 - firstVXDLayer;
390 float fCharge1 = clusterPXD1.
getCharge();
391 if (fCharge1 < m_CutCorrelationSigPXD)
continue;
393 auto info =
dynamic_cast<const PXD::SensorInfo&
>(VXD::GeoCache::get(sensorID1));
394 TVector3 rLocal1(clusterPXD1.
getU(), clusterPXD1.
getV(), 0);
395 TVector3 ral1 = info.pointToGlobal(rLocal1);
399 fPosSPU1 = ral1.Phi() / TMath::Pi() * 180;
400 fPosSPV1 = ral1.Theta() / TMath::Pi() * 180;
402 fPosSPV1 = ral1.Phi() / TMath::Pi() * 180;
403 fPosSPU1 = ral1.Theta() / TMath::Pi() * 180;
408 if ((iLayer1 < firstSVDLayer) || (iLayer1 > lastSVDLayer))
continue;
409 index1 = iLayer1 - firstVXDLayer;
410 float fCharge1 = clusterSVD1.
getCharge();
413 auto info =
dynamic_cast<const SVD::SensorInfo&
>(VXD::GeoCache::get(sensorID1));
415 if (fCharge1 < m_CutCorrelationSigUSVD * 200)
continue;
416 TVector3 rLocal1(clusterSVD1.
getPosition(), 0 , 0);
417 TVector3 ral1 = info.pointToGlobal(rLocal1);
419 fPosSPU1 = ral1.Phi() / TMath::Pi() * 180;
421 if (fCharge1 < m_CutCorrelationSigVSVD * 200)
continue;
423 TVector3 ral1 = info.pointToGlobal(rLocal1);
425 fPosSPV1 = ral1.Theta() / TMath::Pi() * 180;
430 if ((iIsU1 == 1) && (iIsV1 == 1)) {
431 if (m_correlationsSP[nVXDLayers * index1 + index1] != NULL)
432 m_correlationsSP[nVXDLayers * index1 + index1]->Fill(fPosSPU1, fPosSPV1);
433 if (m_correlationsSP1DPhi[nVXDLayers * index1 + index1] != NULL)
434 m_correlationsSP1DPhi[nVXDLayers * index1 + index1]->Fill(fPosSPU1);
435 if (m_correlationsSP1DTheta[nVXDLayers * index1 + index1] != NULL)
436 m_correlationsSP1DTheta[nVXDLayers * index1 + index1]->Fill(fPosSPV1);
438 for (
int i2 = 0; i2 < MaxHits; i2++) {
441 float fPosSPU2 = 0.0;
442 float fPosSPV2 = 0.0;
450 const PXDDigit& digitPXD2 = *storePXDDigits[i2];
452 if ((iLayer2 < firstPXDLayer) || (iLayer2 > lastPXDLayer))
continue;
453 index2 = iLayer2 - firstVXDLayer;
455 if (fCharge2 < m_CutCorrelationSigPXD)
continue;
457 auto info =
dynamic_cast<const PXD::SensorInfo&
>(VXD::GeoCache::get(sensorID2));
458 TVector3 rLocal2(info.getUCellPosition(digitPXD2.
getUCellID()), info.getVCellPosition(digitPXD2.
getVCellID()), 0);
459 TVector3 ral2 = info.pointToGlobal(rLocal2);
463 fPosSPU2 = ral2.Phi() / TMath::Pi() * 180;
464 fPosSPV2 = ral2.Theta() / TMath::Pi() * 180;
466 fPosSPV2 = ral2.Phi() / TMath::Pi() * 180;
467 fPosSPU2 = ral2.Theta() / TMath::Pi() * 180;
472 if ((iLayer2 < firstSVDLayer) || (iLayer2 > lastSVDLayer))
continue;
473 index2 = iLayer2 - firstVXDLayer;
476 auto info =
dynamic_cast<const SVD::SensorInfo&
>(VXD::GeoCache::get(sensorID2));
481 for (
size_t i = 0; i < SVDShaperDigit::c_nAPVSamples; ++i) {
482 float fCharge2 = samples[i];
483 if (fCharge2 > m_CutCorrelationSigUSVD) iCont = 1;
485 if (iCont == 0)
continue;
486 float possi = info.getUCellPosition(digitSVD2.
getCellID());
487 TVector3 rLocal2(possi, 0 , 0);
488 TVector3 ral2 = info.pointToGlobal(rLocal2);
490 fPosSPU2 = ral2.Phi() / TMath::Pi() * 180;
493 for (
size_t i = 0; i < SVDShaperDigit::c_nAPVSamples; ++i) {
494 float fCharge2 = samples[i];
495 if (fCharge2 > m_CutCorrelationSigVSVD) iCont = 1;
497 if (iCont == 0)
continue;
498 float possi = info.getVCellPosition(digitSVD2.
getCellID());
499 TVector3 rLocal2(0, possi, 0);
500 TVector3 ral2 = info.pointToGlobal(rLocal2);
502 fPosSPV2 = ral2.Theta() / TMath::Pi() * 180;
507 const PXDCluster& clusterPXD2 = *storePXDClusters[i2];
509 if ((iLayer2 < firstPXDLayer) || (iLayer2 > lastPXDLayer))
continue;
510 index2 = iLayer2 - firstVXDLayer;
511 float fCharge2 = clusterPXD2.
getCharge();
512 if (fCharge2 < m_CutCorrelationSigPXD)
continue;
514 auto info =
dynamic_cast<const PXD::SensorInfo&
>(VXD::GeoCache::get(sensorID2));
515 TVector3 rLocal2(clusterPXD2.
getU(), clusterPXD2.
getV(), 0);
516 TVector3 ral2 = info.pointToGlobal(rLocal2);
520 fPosSPU2 = ral2.Phi() / TMath::Pi() * 180;
521 fPosSPV2 = ral2.Theta() / TMath::Pi() * 180;
523 fPosSPV2 = ral2.Phi() / TMath::Pi() * 180;
524 fPosSPU2 = ral2.Theta() / TMath::Pi() * 180;
529 if ((iLayer2 < firstSVDLayer) || (iLayer2 > lastSVDLayer))
continue;
530 index2 = iLayer2 - firstVXDLayer;
531 float fCharge2 = clusterSVD2.
getCharge();
534 auto info =
dynamic_cast<const SVD::SensorInfo&
>(VXD::GeoCache::get(sensorID2));
536 if (fCharge2 < m_CutCorrelationSigUSVD * 200)
continue;
537 TVector3 rLocal2(clusterSVD2.
getPosition(), 0 , 0);
538 TVector3 ral2 = info.pointToGlobal(rLocal2);
540 fPosSPU2 = ral2.Phi() / TMath::Pi() * 180;
542 if (fCharge2 < m_CutCorrelationSigVSVD * 200)
continue;
544 TVector3 ral2 = info.pointToGlobal(rLocal2);
546 fPosSPV2 = ral2.Theta() / TMath::Pi() * 180;
550 if ((iIsPXD1 == 0) && (iIsPXD2 == 0))
551 if ((fabs(fTime1 - fTime2)) > m_CutCorrelationTimeSVD)
continue;
553 if ((index1 == index2) && (iIsU1 == 1) && (iIsV2 == 1) && (iIsPXD1 == 0) && (iIsPXD2 == 0)) {
555 if (m_correlationsSP[nVXDLayers * index2 + index1] != NULL)
556 m_correlationsSP[nVXDLayers * index2 + index1]->Fill(fPosSPU1, fPosSPV2);
557 if (m_correlationsSP1DPhi[nVXDLayers * index2 + index1] != NULL)
558 m_correlationsSP1DPhi[nVXDLayers * index2 + index1]->Fill(fPosSPU1);
559 if (m_correlationsSP1DTheta[nVXDLayers * index2 + index1] != NULL)
560 m_correlationsSP1DTheta[nVXDLayers * index2 + index1]->Fill(fPosSPV2);
561 }
else if ((index1 < index2) && (iIsU1 == iIsU2) && (iIsU1 == 1)) {
563 if (m_correlationsSP[nVXDLayers * index2 + index1] != NULL)
564 m_correlationsSP[nVXDLayers * index2 + index1]->Fill(fPosSPU1, fPosSPU2);
565 if (m_correlationsSP1DPhi[nVXDLayers * index2 + index1] != NULL)
566 m_correlationsSP1DPhi[nVXDLayers * index2 + index1]->Fill(fPosSPU2 - fPosSPU1);
567 }
else if ((index1 > index2) && (iIsV1 == iIsV2) && (iIsV1 == 1)) {
569 if (m_correlationsSP[nVXDLayers * index2 + index1] != NULL)
570 m_correlationsSP[nVXDLayers * index2 + index1]->Fill(fPosSPV2, fPosSPV1);
571 if (m_correlationsSP1DTheta[nVXDLayers * index2 + index1] != NULL)
572 m_correlationsSP1DTheta[nVXDLayers * index2 + index1]->Fill(fPosSPV2 - fPosSPV1);
HistoModule.h is supposed to be used instead of Module.h for the modules with histogram definitions t...
The PXD Cluster class This class stores all information about reconstructed PXD clusters The position...
float getV() const
Get v coordinate of hit position.
unsigned short getCharge() const
Get collected charge.
VxdID getSensorID() const
Get the sensor ID.
float getU() const
Get u coordinate of hit position.
unsigned short getVCellID() const
Get cell ID in v.
unsigned short getUCellID() const
Get cell ID in u.
unsigned short getCharge() const
Get collected charge.
VxdID getSensorID() const
Get the sensor ID.
Specific implementation of SensorInfo for PXD Sensors which provides additional pixel specific inform...
Low-level class to create/modify relations between StoreArrays.
The SVD Cluster class This class stores all information about reconstructed SVD clusters.
float getClsTime() const
Get average of waveform maximum times of cluster strip signals.
float getCharge() const
Get collected charge.
VxdID getSensorID() const
Get the sensor ID.
bool isUCluster() const
Get the direction of strips.
float getPosition(double v=0) const
Get the coordinate of reconstructed hit.
The SVD ShaperDigit class.
std::array< APVFloatSampleType, c_nAPVSamples > APVFloatSamples
array of APVFloatSampleType objects
VxdID getSensorID() const
Get the sensor ID.
APVFloatSamples getSamples() const
Get array of samples.
short int getCellID() const
Get strip ID.
bool isUStrip() const
Get strip direction.
float getFADCTime() const
Get digit FADCTime estimate.
Specific implementation of SensorInfo for SVD Sensors which provides additional sensor specific infor...
bool isRequired(const std::string &name="")
Ensure this array/object has been registered previously.
const std::string & getName() const
Return name under which the object is saved in the DataStore.
Accessor to arrays stored in the data store.
int getEntries() const
Get the number of objects in the array.
Class to faciliate easy access to sensor information of the VXD like coordinate transformations or pi...
const std::set< Belle2::VxdID > getLayers(SensorInfoBase::SensorType sensortype=SensorInfoBase::VXD)
Return a set of all known Layers.
Class to uniquely identify a any structure of the PXD and SVD.
baseType getLayerNumber() const
Get the layer id.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.