11 #include <svd/modules/svdOccupancyCalibrationsCollector/SVDOccupancyCalibrationsCollectorModule.h>
31 setDescription(
"This module collects hits from shaper digits to compute per sensor SVD occupancy ");
32 setPropertyFlags(c_ParallelProcessingCertified);
34 addParam(
"SVDShaperDigitsName", m_svdShaperDigitName,
"Name of the SVDClusters list", std::string(
"SVDShaperDigits"));
36 addParam(
"HistogramTree", m_tree,
"Name of the tree in which the histograms are saved", std::string(
"tree"));
39 void SVDOccupancyCalibrationsCollectorModule::prepare()
42 m_eventMetaData.isRequired();
43 m_storeDigits.isRequired(m_svdShaperDigitName);
47 TH1F hOccupancy768(
"Occupancy768_L@layerL@ladderS@sensor@view",
"Strip Occupancy of @layer.@ladder.@sensor @view/@side side", 768,
50 hOccupancy768.GetXaxis()->SetTitle(
"cellID");
51 TH1F hOccupancy512(
"Occupancy512_L@layerL@ladderS@sensor@view",
"Strip Occupancy of @layer.@ladder.@sensor @view/@side side", 512,
54 hOccupancy512.GetXaxis()->SetTitle(
"cellID");
55 hm_occupancy =
new SVDHistograms<TH1F>(hOccupancy768, hOccupancy768, hOccupancy768, hOccupancy512);
57 m_histogramTree =
new TTree(
"tree",
"tree");
58 m_histogramTree->Branch(
"hist",
"TH1F", &m_hist, 32000, 0);
59 m_histogramTree->Branch(
"layer", &m_layer,
"layer/I");
60 m_histogramTree->Branch(
"ladder", &m_ladder,
"ladder/I");
61 m_histogramTree->Branch(
"sensor", &m_sensor,
"sensor/I");
62 m_histogramTree->Branch(
"view", &m_side,
"view/I");
64 m_hnevents =
new TH1F(
"hnevents",
"Number of events", 1, 0, 1);
67 registerObject<TTree>(
"HTreeOccupancyCalib", m_histogramTree);
71 void SVDOccupancyCalibrationsCollectorModule::startRun()
76 for (
auto layer : geoCache.getLayers(VXD::SensorInfoBase::SVD)) {
77 for (
auto ladder : geoCache.getLadders(layer)) {
84 (hm_occupancy->getHistogram(sensor, view))->Reset();
94 void SVDOccupancyCalibrationsCollectorModule::collect()
97 int nDigits = m_storeDigits.getEntries();
98 m_hnevents->Fill(0.0);
105 while (i < nDigits) {
106 VxdID theVxdID = m_storeDigits[i]->getSensorID();
107 int side = m_storeDigits[i]->isUStrip();
108 int CellID = m_storeDigits[i]->getCellID();
110 hm_occupancy->fill(theVxdID, side, CellID);
118 void SVDOccupancyCalibrationsCollectorModule::finish()
122 void SVDOccupancyCalibrationsCollectorModule::closeRun()
125 int nevents = m_hnevents->GetEntries();
128 B2RESULT(
"number of events " << nevents);
131 std::set<Belle2::VxdID> svdLayers = aGeometry.
getLayers(VXD::SensorInfoBase::SVD);
132 std::set<Belle2::VxdID>::iterator itSvdLayers = svdLayers.begin();
134 while ((itSvdLayers != svdLayers.end())
135 && (itSvdLayers->getLayerNumber() != 7)) {
137 std::set<Belle2::VxdID> svdLadders = aGeometry.
getLadders(*itSvdLayers);
138 std::set<Belle2::VxdID>::iterator itSvdLadders = svdLadders.begin();
140 while (itSvdLadders != svdLadders.end()) {
142 std::set<Belle2::VxdID> svdSensors = aGeometry.
getSensors(*itSvdLadders);
143 std::set<Belle2::VxdID>::iterator itSvdSensors = svdSensors.begin();
145 while (itSvdSensors != svdSensors.end()) {
147 for (
int k = 0; k < m_nSides; k ++) {
149 (hm_occupancy->getHistogram(*itSvdSensors, k))->Scale(1. / nevents);
150 B2INFO(
"occupancy histo scaled by the number of events");
151 m_hist = hm_occupancy->getHistogram(*itSvdSensors, k);
152 m_layer = itSvdSensors->getLayerNumber();
153 m_ladder = itSvdSensors->getLadderNumber();
154 m_sensor = itSvdSensors->getSensorNumber();
157 getObjectPtr<TTree>(
"HTreeOccupancyCalib")->Fill();
158 B2INFO(
"Filled sensors:" << m_layer <<
"." << m_ladder <<
"." << m_sensor <<
"." << m_side);