8 #include <geometry/GeometryManager.h>
10 #include <vxd/geometry/GeoCache.h>
13 #include <framework/database/IntervalOfValidity.h>
14 #include <framework/database/DBImportObjPtr.h>
16 #include <svd/calibration/SVDHotStripsCalibrations.h>
17 #include <svd/calibration/SVDOccupancyCalibrations.h>
18 #include <svd/modules/svdCalibration/SVDHotStripFinderModule.h>
28 setDescription(
"The svdHotStripFinder module finds hot strips in SVD data SVDShaperDigit");
30 addParam(
"outputFileName", m_rootFileName,
"Name of output root file.", std::string(
"SVDHotStripFinder.root"));
31 addParam(
"threshold", m_thr,
"Threshold cut for Hot strip finder in percent",
float(4.0));
32 addParam(
"searchBase", m_base,
33 "number of strips used to compute the average occupancy, possible choices = 32, 64, 128. Default = -1, use all sensor strips.",
36 addParam(
"zeroSuppression", m_zs,
"ZeroSuppression cut of the input SVDShaperDigits",
float(5));
37 addParam(
"firstExp", m_firstExp,
"experiment number",
int(-1));
38 addParam(
"firstRun", m_firstRun,
"run number",
int(-1));
39 addParam(
"lastExp", m_lastExp,
"open iov",
int(-1));
40 addParam(
"lastRun", m_lastRun,
"open iov",
int(-1));
41 addParam(
"ShaperDigits", m_ShaperDigitName,
"shaper digit name", std::string(
""));
43 addParam(
"useHSFinderV1", m_useHSFinderV1,
"Set to false only if you want to test the second version of the algorithm",
45 addParam(
"absOccThreshold", m_absThr,
46 "Absolute occupancy threshold: at a first loop, flag as Hot Strip (HS) all those whose occupancy > absOccThreshold",
float(0.2));
47 addParam(
"relOccPrec", m_relOccPrec,
48 "Number of times the average sensor occupancy considered to fix the sensor dependent threshold, as for example occ_threshold = relOccPrec x occ_average",
50 addParam(
"verbose", m_verbose,
" True by default, it allows to switch off the printing of all found HS.",
bool(
true));
55 SVDHotStripFinderModule::~SVDHotStripFinderModule()
60 void SVDHotStripFinderModule::initialize()
63 m_eventMetaData.isRequired();
64 m_storeDigits.isRequired(m_ShaperDigitName);
66 B2DEBUG(25,
" ShaperDigits: " << m_ShaperDigitName);
68 m_histoList_occu =
new TList;
70 m_rootFilePtr =
new TFile(m_rootFileName.c_str(),
"RECREATE");
72 B2RESULT(
"You are using the first version of the HSFinder algorithm (see SVDHotStripFinder::terminate in the module)");
73 else B2RESULT(
"You are using the modified version of the HSFinder algorithm (see SVDHotStripFinder::endRun in the module)");
76 void SVDHotStripFinderModule::beginRun()
81 TH1F hOccupancy768(
"Occupancy768_L@layerL@ladderS@sensor@view",
"Strip Occupancy of @layer.@ladder.@sensor @view/@side side", 768,
84 hOccupancy768.GetXaxis()->SetTitle(
"cellID");
85 TH1F hOccupancy512(
"Occupancy512_L@layerL@ladderS@sensor@view",
"Strip Occupancy of @layer.@ladder.@sensor @view/@side side", 512,
88 hOccupancy512.GetXaxis()->SetTitle(
"cellID");
89 hm_occupancy =
new SVDHistograms<TH1F>(hOccupancy768, hOccupancy768, hOccupancy768, hOccupancy512);
91 TH1F hHotStrips768(
"HotStrips768_L@layerL@ladderS@sensor@view",
"Hot Strips of @layer.@ladder.@sensor @view/@side side", 768, 0,
93 hHotStrips768.GetXaxis()->SetTitle(
"cellID");
94 TH1F hHotStrips512(
"HotStrips512_L@layerL@ladderS@sensor@view",
"Hot Strips of @layer.@ladder.@sensor @view/@side side", 512, 0,
96 hHotStrips512.GetXaxis()->SetTitle(
"cellID");
97 hm_hot_strips =
new SVDHistograms<TH1F>(hHotStrips768, hHotStrips768, hHotStrips768, hHotStrips512);
99 TH1F hOccupancy_after768(
"OccupancyAfter768_L@layerL@ladderS@sensor@view",
100 "Non-Hot Strip Occupancy after HSF of @layer.@ladder.@sensor @view/@side side", 768, 0, 768);
101 hOccupancy_after768.GetXaxis()->SetTitle(
"cellID");
102 TH1F hOccupancy_after512(
"OccupancyAfter512_L@layerL@ladderS@sensor@view",
103 "Non-Hot Strip Occupancy after HSF of @layer.@ladder.@sensor @view/@side side", 512, 0, 512);
104 hOccupancy_after512.GetXaxis()->SetTitle(
"cellID");
105 hm_occupancy_after =
new SVDHistograms<TH1F>(hOccupancy_after768, hOccupancy_after768, hOccupancy_after768, hOccupancy_after512);
107 TH1F hOccAll(
"occAll_L@layerL@ladderS@sensor@view",
"Strip Occupancy Distribution of @layer.@ladder.@sensor @view/@side side", 1000,
109 hOccAll.GetXaxis()->SetTitle(
"occupancy");
112 TH1F hOccHot(
"occHot_L@layerL@ladderS@sensor@view",
"Hot Strip Occupancy Distribution of @layer.@ladder.@sensor @view/@side side",
114 hOccHot.GetXaxis()->SetTitle(
"occupancy");
117 TH1F hOccAfter(
"occAfter_L@layerL@ladderS@sensor@view",
118 "Non-Hot Strip Occupancy Distribution of @layer.@ladder.@sensor @view/@side side", 1000, 0, 0.05);
119 hOccAfter.GetXaxis()->SetTitle(
"occupancy");
123 TH1F hDist(
"dist_L@layerL@ladderS@sensor@view",
"DSSD occupancy distribution of @layer.@ladder.@sensor @view/@side side", 100, 0,
125 hDist.GetXaxis()->SetTitle(
"occupancy");
128 TH1F hDist1(
"dist1_L@layerL@ladderS@sensor@view",
"DSSD true occupancy distribution of @layer.@ladder.@sensor @view/@side side",
131 hDist.GetXaxis()->SetTitle(
"occupancy");
133 TH2F hDist12(
"dist2d_L@layerL@ladderS@sensor@view",
134 "DSSD true vs sensor occupancy distribution of @layer.@ladder.@sensor @view/@side side", 1000, 0, 0.05, 1000, 0, 0.05);
135 hDist12.GetXaxis()->SetTitle(
"sensor occupancy");
136 hDist12.GetYaxis()->SetTitle(
"occupancy");
140 m_hHotStripsSummary =
new SVDSummaryPlots(
"hotStripsSummary@view",
"Number of HotStrips on @view/@side Side");
144 h_tot_dqm = createHistogram1D(
"htodqm",
"HS per sensor", 28, 0, 28.0,
"HS per sensor", m_histoList_occu);
145 h_tot_dqm1 = createHistogram1D(
"htodqm1",
"HS per sensor1", 350, 0, 350.0,
"HS per sensor ", m_histoList_occu);
147 h_tot_dist = createHistogram1D(
"htotdist",
"Occupancy distribution", 1000, 0, 0.05,
"Relative occupancy", m_histoList_occu);
148 h_tot_dist1 = createHistogram1D(
"htotdist1",
"True occupancy distribution", 1000, 0, 0.05,
"occupancy", m_histoList_occu);
149 h_tot_dist12 = createHistogram2D(
"htotdist2d",
"True vs sensor occupancy distribution", 1000, 0, 0.05,
"sensor occupancy", 1000, 0,
150 0.05,
"occupancy", m_histoList_occu);
151 h_nevents = createHistogram1D(
"hnevents",
"Number of events", 1, 0, 1,
"", m_histoList_occu);
155 void SVDHotStripFinderModule::event()
158 int nDigits = m_storeDigits.getEntries();
159 h_nevents->Fill(0.0);
166 while (i < nDigits) {
167 VxdID theVxdID = m_storeDigits[i]->getSensorID();
168 int side = m_storeDigits[i]->isUStrip();
169 int CellID = m_storeDigits[i]->getCellID();
171 hm_occupancy->fill(theVxdID, side, CellID);
180 void SVDHotStripFinderModule::endRun()
183 int exp = m_eventMetaData->getExperiment();
184 int run = m_eventMetaData->getRun();
186 if (!m_useHSFinderV1) {
188 TDirectory* oldDir =
nullptr;
189 TDirectory* dir_occuL[4] = {
nullptr,
nullptr,
nullptr,
nullptr};
192 if (m_rootFilePtr !=
nullptr) {
195 dir_occuL[0] = oldDir->mkdir(
"layer3");
196 dir_occuL[1] = oldDir->mkdir(
"layer4");
197 dir_occuL[2] = oldDir->mkdir(
"layer5");
198 dir_occuL[3] = oldDir->mkdir(
"layer6");
204 int nevents = h_nevents->GetEntries();
209 occDBObjPtr.
construct(-99., Form(
"SVDOccupancy_exp%d_run%d_zs%1.1f", exp, run, m_zs));
212 hotStripsDBObjPtr.
construct(0, Form(
"SVDHotStrips_exp%d_run%d_zs%1.1f_absThr%f_relOccPrec%f", exp, run, m_zs, m_absThr,
215 B2RESULT(
"number of events " << nevents);
218 std::set<Belle2::VxdID> svdLayers = aGeometry.
getLayers(VXD::SensorInfoBase::SVD);
219 std::set<Belle2::VxdID>::iterator itSvdLayers = svdLayers.begin();
221 while ((itSvdLayers != svdLayers.end())
222 && (itSvdLayers->getLayerNumber() != 7)) {
224 std::set<Belle2::VxdID> svdLadders = aGeometry.
getLadders(*itSvdLayers);
225 std::set<Belle2::VxdID>::iterator itSvdLadders = svdLadders.begin();
227 while (itSvdLadders != svdLadders.end()) {
229 std::set<Belle2::VxdID> svdSensors = aGeometry.
getSensors(*itSvdLadders);
230 std::set<Belle2::VxdID>::iterator itSvdSensors = svdSensors.begin();
232 while (itSvdSensors != svdSensors.end()) {
234 for (
int k = 0; k < m_nSides; k ++) {
237 int layer = itSvdSensors->getLayerNumber();
238 int ladder = itSvdSensors->getLadderNumber();
239 int sensor = itSvdSensors->getSensorNumber();
243 if (!k && layer != 3) nstrips = 512;
245 double stripOcc[768];
246 for (
int i = 0; i < nstrips; i++) {stripOcc[i] = 0; hsflag[i] = 0;}
247 double stripOccAfterAbsCut[768];
248 (hm_occupancy->getHistogram(*itSvdSensors, k))->Scale(1. / nevents);
249 for (
int l = 0; l < nstrips; l++) {
253 stripOcc[l] = (double)(hm_occupancy->getHistogram(*itSvdSensors, k)->GetBinContent(l + 1));
256 occDBObjPtr->set(layer, ladder, sensor, k, l, stripOcc[l]);
257 hm_occAll->fill(*itSvdSensors, k, stripOcc[l]);
260 if (stripOcc[l] > m_absThr) {
261 stripOccAfterAbsCut[l] = 0;
264 stripOccAfterAbsCut[l] = stripOcc[l];
267 B2DEBUG(1,
"Measured strip occupancy for strip " << l <<
":" << stripOccAfterAbsCut[l]);
273 while (moreHS && theHSFinder(stripOccAfterAbsCut, hsflag, nstrips)) {
274 moreHS = theHSFinder(stripOccAfterAbsCut, hsflag, nstrips);
278 for (
int l = 0; l < nstrips; l++) {
279 hotStripsDBObjPtr->set(layer, ladder, sensor, k, l, (
int)hsflag[l]);
280 if (hsflag[l] == 0) {
281 hm_occupancy_after->getHistogram(*itSvdSensors, k)->SetBinContent(l + 1 , stripOccAfterAbsCut[l]);
282 hm_occAfter->fill(*itSvdSensors, k, stripOccAfterAbsCut[l]);
284 hm_hot_strips->getHistogram(*itSvdSensors, k)->SetBinContent(l + 1, 1);
285 hm_occHot->fill(*itSvdSensors, k, stripOcc[l]);
287 TString aux_side =
"V/N";
288 if (k) aux_side =
"U/P";
289 if (m_verbose) B2RESULT(
"HS found, occupancy = " << stripOcc[l] <<
", Layer: " << layer <<
" Ladder: " << ladder <<
" Sensor: "
291 " Side: " << k <<
" channel: " << l);
297 for (
int s = 0; s < hm_hot_strips->getHistogram(*itSvdSensors, k)->GetEntries(); s++)
298 m_hHotStripsSummary->fill(*itSvdSensors, k, 1);
300 if (m_rootFilePtr !=
nullptr) {
301 dir_occuL[layer - 3]->cd();
302 hm_occupancy->getHistogram(*itSvdSensors, k)->Write();
303 hm_hot_strips->getHistogram(*itSvdSensors, k)->SetLineColor(kBlack);
304 hm_hot_strips->getHistogram(*itSvdSensors, k)->SetMarkerColor(kBlack);
305 hm_hot_strips->getHistogram(*itSvdSensors, k)->SetFillStyle(3001);
306 hm_hot_strips->getHistogram(*itSvdSensors, k)->SetFillColor(kBlack);
307 hm_hot_strips->getHistogram(*itSvdSensors, k)->Write();
308 hm_occupancy_after->getHistogram(*itSvdSensors, k)->SetLineColor(kRed);
309 hm_occupancy_after->getHistogram(*itSvdSensors, k)->SetMarkerColor(kRed);
310 hm_occupancy_after->getHistogram(*itSvdSensors, k)->Write();
311 hm_occAll->getHistogram(*itSvdSensors, k)->Write();
312 hm_occHot->getHistogram(*itSvdSensors, k)->SetLineColor(kBlack);
313 hm_occHot->getHistogram(*itSvdSensors, k)->SetFillStyle(3001);
314 hm_occHot->getHistogram(*itSvdSensors, k)->SetFillColor(kBlack);
315 hm_occHot->getHistogram(*itSvdSensors, k)->SetMarkerColor(kBlack);
316 hm_occHot->getHistogram(*itSvdSensors, k)->Write();
317 hm_occAfter->getHistogram(*itSvdSensors, k)->SetLineColor(kRed);
318 hm_occAfter->getHistogram(*itSvdSensors, k)->SetMarkerColor(kRed);
319 hm_occAfter->getHistogram(*itSvdSensors, k)->Write();
322 B2DEBUG(1,
" L" << layer <<
"." << ladder <<
"." << sensor <<
".isU=" << k);
333 if (m_rootFilePtr !=
nullptr) {
335 m_hHotStripsSummary->getHistogram(0)->Write();
336 m_hHotStripsSummary->getHistogram(1)->Write();
339 m_rootFilePtr->Close();
341 if (m_firstExp == -1)
345 if (m_firstRun == -1)
352 hotStripsDBObjPtr.
import(iov);
353 B2RESULT(
"Imported to database.");
357 void SVDHotStripFinderModule::terminate()
359 if (m_useHSFinderV1) {
360 TDirectory* oldDir =
nullptr;
362 TDirectory* dir_occuL[4] = {
nullptr,
nullptr,
nullptr,
nullptr};
365 if (m_rootFilePtr !=
nullptr) {
368 dir_occuL[0] = oldDir->mkdir(
"layer3");
369 dir_occuL[1] = oldDir->mkdir(
"layer4");
370 dir_occuL[2] = oldDir->mkdir(
"layer5");
371 dir_occuL[3] = oldDir->mkdir(
"layer6");
382 int nevents = h_nevents->GetEntries();
387 B2DEBUG(1,
"number of events " << nevents);
390 std::set<Belle2::VxdID> svdLayers = aGeometry.
getLayers(VXD::SensorInfoBase::SVD);
391 std::set<Belle2::VxdID>::iterator itSvdLayers = svdLayers.begin();
393 while ((itSvdLayers != svdLayers.end())
394 && (itSvdLayers->getLayerNumber() != 7)) {
396 std::set<Belle2::VxdID> svdLadders = aGeometry.
getLadders(*itSvdLayers);
397 std::set<Belle2::VxdID>::iterator itSvdLadders = svdLadders.begin();
399 while (itSvdLadders != svdLadders.end()) {
401 std::set<Belle2::VxdID> svdSensors = aGeometry.
getSensors(*itSvdLadders);
402 std::set<Belle2::VxdID>::iterator itSvdSensors = svdSensors.begin();
404 while (itSvdSensors != svdSensors.end()) {
406 for (
int k = 0; k < m_nSides; k ++) {
409 int i = itSvdSensors->getLayerNumber() - 3;
410 int m = itSvdSensors->getLadderNumber() - 1;
411 int j = itSvdSensors->getSensorNumber() - 1;
412 float position1[768];
417 for (
int l = 0; l < 24; l++) {
421 for (
int l = 0; l < 768; l++) {
423 position1[l] = hm_occupancy->getHistogram(*itSvdSensors, k)->GetBinContent(l + 1);
426 if (position1[l] == 0) { flag[l] = 0;}
431 div_t test = div(l, ibase);
432 nCltrk[test.quot] = nCltrk[test.quot] + position1[l];
437 for (
int l = 0; l < 768; l++) {
438 div_t test = div(l, ibase);
443 float tmp_occ = position1[l] / (float)nCltrk[test.quot];
444 float tmp_occ1 = position1[l] / (
float)nevents;
445 position1[l] = tmp_occ;
447 hm_dist->fill(*itSvdSensors, k, tmp_occ);
448 h_tot_dist->Fill(tmp_occ);
449 hm_dist1->fill(*itSvdSensors, k, tmp_occ1);
450 h_tot_dist1->Fill(tmp_occ1);
451 hm_dist12->fill(*itSvdSensors, k, tmp_occ, tmp_occ1);
452 h_tot_dist12->Fill(tmp_occ, tmp_occ1);
456 for (
int l = 0; l < 24; l++) {
462 for (
int l = 0; l < 768; l++) {
463 div_t test = div(l, ibase);
464 float threshold_corrections = 1.0;
468 threshold_corrections = threshold_corrections * sqrt(768.0 / (
float)it1st);
469 if (ibase == 32) threshold_corrections = 24.0;
470 if (ibase == 64) threshold_corrections = 12.0;
471 if (ibase == 128) threshold_corrections = 6.0;
473 if (position1[l] > 0.01 * m_thr * threshold_corrections) {
477 B2RESULT(
"1st pass HS found! Layer: " << i + 3 <<
" Ladder: " << m <<
" Sensor: " << j <<
" Side: " << k <<
" channel: " << l);
481 occupancy[test.quot] = occupancy[test.quot] + hm_occupancy->getHistogram(*itSvdSensors, k)->GetBinContent(l + 1);
490 for (
int l = 0; l < 768; l++) {
491 div_t test = div(l, ibase);
492 position1[l] = position1[l] * nCltrk[test.quot] / (float)occupancy[test.quot];
493 float threshold_corrections = 1.0;
494 threshold_corrections = threshold_corrections * sqrt(768.0 / (
float)it);
495 if (ibase == 32) threshold_corrections = 24.0;
496 if (ibase == 64) threshold_corrections = 12.0;
497 if (ibase == 128) threshold_corrections = 6.0;
499 if ((flag[l]) && (position1[l] > 0.01 * m_thr * threshold_corrections)) {
503 B2RESULT(
"2nd pass HS FOUND! Layer: " << i + 3 <<
" Ladder: " << m <<
" Sensor: " << j <<
" Side: " << k <<
" channel: " << l);
510 for (
int l = 0; l < 768; l++) {
512 B2DEBUG(1, hsflag[l]);
514 float tmpOcc = hm_occupancy->getHistogram(*itSvdSensors, k)->GetBinContent(l + 1) / (double)nevents;
515 hm_occAll->fill(*itSvdSensors, k, tmpOcc);
517 if (hsflag[l] == 0) {
518 hm_occupancy_after->getHistogram(*itSvdSensors, k)->SetBinContent(l + 1, tmpOcc);
519 hm_occAfter->fill(*itSvdSensors, k, tmpOcc);
521 hm_hot_strips->getHistogram(*itSvdSensors, k)->SetBinContent(l + 1, 1);
522 hm_occHot->fill(*itSvdSensors, k, tmpOcc);
526 if (m_rootFilePtr !=
nullptr) {
527 hm_occupancy->getHistogram(*itSvdSensors, k)->Scale(1.0 / (
double)nevents);
530 hm_occupancy->getHistogram(*itSvdSensors, k)->Write();
531 hm_hot_strips->getHistogram(*itSvdSensors, k)->SetLineColor(kBlack);
532 hm_hot_strips->getHistogram(*itSvdSensors, k)->SetFillStyle(3001);
533 hm_hot_strips->getHistogram(*itSvdSensors, k)->SetFillColor(kBlack);
534 hm_hot_strips->getHistogram(*itSvdSensors, k)->SetMarkerColor(kBlack);
535 hm_hot_strips->getHistogram(*itSvdSensors, k)->Write();
536 hm_occupancy_after->getHistogram(*itSvdSensors, k)->SetLineColor(kRed);
537 hm_occupancy_after->getHistogram(*itSvdSensors, k)->SetMarkerColor(kRed);
538 hm_occupancy_after->getHistogram(*itSvdSensors, k)->Write();
539 hm_occAll->getHistogram(*itSvdSensors, k)->Write();
540 hm_occHot->getHistogram(*itSvdSensors, k)->SetLineColor(kBlack);
541 hm_occHot->getHistogram(*itSvdSensors, k)->SetFillStyle(3001);
542 hm_occHot->getHistogram(*itSvdSensors, k)->SetFillColor(kBlack);
543 hm_occHot->getHistogram(*itSvdSensors, k)->SetMarkerColor(kBlack);
544 hm_occHot->getHistogram(*itSvdSensors, k)->Write();
545 hm_occAfter->getHistogram(*itSvdSensors, k)->SetLineColor(kRed);
546 hm_occAfter->getHistogram(*itSvdSensors, k)->SetMarkerColor(kRed);
547 hm_occAfter->getHistogram(*itSvdSensors, k)->Write();
551 B2DEBUG(1,
" side " << i <<
" " << j <<
" " << m <<
" " << k);
558 for (
int iy = 0; iy < iths; iy++) {
559 h_tot_dqm->Fill(
float(itsensor));
560 h_tot_dqm1->Fill(
float(itsensor));
563 for (
int s = 0; s < hm_hot_strips->getHistogram(*itSvdSensors, k)->GetEntries(); s++)
564 m_hHotStripsSummary->fill(*itSvdSensors, k, 1);
576 if (m_rootFilePtr !=
nullptr) {
579 m_hHotStripsSummary->getHistogram(0)->Write();
580 m_hHotStripsSummary->getHistogram(1)->Write();
583 TIter nextH_occu(m_histoList_occu);
584 while ((obj = nextH_occu()))
587 m_rootFilePtr->Close();
593 TH1F* SVDHotStripFinderModule::createHistogram1D(
const char* name,
const char* title,
594 Int_t nbins, Double_t min, Double_t max,
595 const char* xtitle, TList* histoList)
598 TH1F* h =
new TH1F(name, title, nbins, min, max);
600 h->GetXaxis()->SetTitle(xtitle);
610 TH2F* SVDHotStripFinderModule::createHistogram2D(
const char* name,
const char* title,
611 Int_t nbinsX, Double_t minX, Double_t maxX,
613 Int_t nbinsY, Double_t minY, Double_t maxY,
614 const char* titleY, TList* histoList)
617 TH2F* h =
new TH2F(name, title, nbinsX, minX, maxX, nbinsY, minY, maxY);
618 h->GetXaxis()->SetTitle(titleX);
619 h->GetYaxis()->SetTitle(titleY);
628 bool SVDHotStripFinderModule::theHSFinder(
double* stripOccAfterAbsCut,
int* hsflag,
int nstrips)
635 int N = nstrips / m_base;
637 for (
int sector = 0; sector < N; sector++) {
640 double sensorOccAverage = 0;
642 for (
int l = sector * m_base; l < sector * m_base + m_base; l++) {
643 sensorOccAverage = sensorOccAverage + stripOccAfterAbsCut[l];
644 if (stripOccAfterAbsCut[l] > 0) nafter++;
646 sensorOccAverage = sensorOccAverage / nafter;
648 B2DEBUG(1,
"Average occupancy: " << sensorOccAverage);
650 for (
int l = sector * m_base; l < sector * m_base + m_base; l++) {
654 if (stripOccAfterAbsCut[l] > sensorOccAverage * m_relOccPrec) {
657 stripOccAfterAbsCut[l] = 0;
bool import(const IntervalOfValidity &iov)
Import the object to database.
Class for importing a single object to the database.
void construct(Args &&... params)
Construct an object of type T in this DBImportObjPtr using the provided constructor arguments.
A class that describes the interval of experiments/runs for which an object in the database is valid.
class to summarize SVD quantities per sensor and side
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.
const std::set< Belle2::VxdID > & getSensors(Belle2::VxdID ladder) const
Return a set of all sensor IDs belonging to a given ladder.
const std::set< Belle2::VxdID > & getLadders(Belle2::VxdID layer) const
Return a set of all ladder IDs belonging to a given layer.
Class to uniquely identify a any structure of the PXD and SVD.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.