1 #include <svd/modules/svdPerformance/SVDPerformanceModule.h>
2 #include <framework/datastore/StoreObjPtr.h>
3 #include <framework/datastore/RelationVector.h>
5 #include <mdst/dataobjects/MCParticle.h>
6 #include <mdst/dataobjects/HitPatternVXD.h>
7 #include <svd/dataobjects/SVDTrueHit.h>
9 #include <boost/foreach.hpp>
16 SVDPerformanceModule::SVDPerformanceModule() :
Module()
17 , m_nTracks(0), m_Pvalue(), m_mom(0), m_nSVDhits(0)
20 setDescription(
"This module check performances of SVD reconstruction of VXD TB data");
22 addParam(
"outputFileName",
m_rootFileName,
"Name of output root file.", std::string(
"SVDPerformance_output.root"));
23 addParam(
"SVDEventInfo", m_svdEventInfoName,
"Defines the name of the EventInfo",
string(
""));
25 addParam(
"is2017TBanalysis", m_is2017TBanalysis,
"True if analyzing 2017 TB data.",
bool(
false));
26 addParam(
"isSimulation", m_isSimulation,
"True if analyzing simulated data.",
bool(
false));
28 addParam(
"debugLowTime", m_debugLowTime,
"Cluster Time below this number will produce a printout.",
float(0.));
31 addParam(
"RecoDigitsName", m_RecoDigitName,
"Name of RecoDigit Store Array.", std::string(
""));
32 addParam(
"ClustersName", m_ClusterName,
"Name of Cluster Store Array.", std::string(
""));
33 addParam(
"TrackListName", m_TrackName,
"Name of Track Store Array.", std::string(
""));
34 addParam(
"TrackFitResultListName", m_TrackFitResultName,
"Name of TracksFitResult Store Array.", std::string(
""));
37 SVDPerformanceModule::~SVDPerformanceModule()
85 TString nameLayer =
"";
88 TString nameSensor =
"";
92 else if (i == 1 || i == 2)
99 for (
int k = 0; k <
m_nSides; k ++) {
102 TString nameSide =
"";
109 TString NameOfHisto =
"shaper_N_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
110 TString TitleOfHisto =
"number of ShaperDigits (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
115 NameOfHisto =
"reco_N_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
116 TitleOfHisto =
"number of RecoDigits (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
119 NameOfHisto =
"reco_charge_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
120 TitleOfHisto =
"charge of RecoDigits (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
123 NameOfHisto =
"reco_energy_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
124 TitleOfHisto =
"energy collected by RecoDigits (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
127 NameOfHisto =
"reco_noise_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
128 TitleOfHisto =
"strip noise (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
131 NameOfHisto =
"reco_time_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
132 TitleOfHisto =
"strip time (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
137 NameOfHisto =
"clTRK_N_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
138 TitleOfHisto =
"number of clusters related to Tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
141 NameOfHisto =
"clTRK_size_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
142 TitleOfHisto =
"cluster size (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
145 NameOfHisto =
"clTRK_charge_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
146 TitleOfHisto =
"cluster Charge (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
149 NameOfHisto =
"clTRK_energy_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
150 TitleOfHisto =
"cluster Energy (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
153 NameOfHisto =
"clTRK_SN_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
154 TitleOfHisto =
"cluster S/N (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
157 NameOfHisto =
"clTRK_chrgVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
158 TitleOfHisto =
"cluster charge VS size (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
159 h_cltrkChargeVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 500, 0, 100000,
"charge (e-)", 15, 0, 15,
"cl size",
162 NameOfHisto =
"clTRK_SNVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
163 TitleOfHisto =
"cluster SN ratio VS size (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
164 h_cltrkSNVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 150, 0, 150,
"S/N", 15, 0, 15,
"cl size",
167 NameOfHisto =
"clTRK_TimeVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
168 TitleOfHisto =
"cluster time VS size (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
169 h_cltrkTimeVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 200, -100, 100,
"cluster time (ns)", 15, 0, 15,
"cl size",
172 NameOfHisto =
"clTRK_time_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
173 TitleOfHisto =
"cluster time (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
176 NameOfHisto =
"clTRK_timeTB1_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
177 TitleOfHisto =
"cluster time - TB = 1 (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
180 NameOfHisto =
"clTRK_timeTB2_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
181 TitleOfHisto =
"cluster time - TB = 2 (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
184 NameOfHisto =
"clTRK_timeTB3_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
185 TitleOfHisto =
"cluster time - TB = 3 (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
188 NameOfHisto =
"clTRK_timeTB4_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
189 TitleOfHisto =
"cluster time - TB = 4 (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
193 NameOfHisto =
"clTRK_timeVStrueTime_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
194 TitleOfHisto =
"cluster time VS true hit time (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
200 NameOfHisto =
"1clTRK_charge_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
201 TitleOfHisto =
"1-strip cluster Charge (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
205 NameOfHisto =
"1clTRK_SN_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
206 TitleOfHisto =
"1-strip cluster S/N (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
210 NameOfHisto =
"2clTRK_charge_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
211 TitleOfHisto =
"2-strip cluster Charge (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
215 NameOfHisto =
"2clTRK_SN_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
216 TitleOfHisto =
"2-strip cluster S/N (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
220 NameOfHisto =
"clNOtrk_N_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
221 TitleOfHisto =
"number of clusters NOT related to Tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
224 NameOfHisto =
"clNOtrk_size_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
225 TitleOfHisto =
"cluster size, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
228 NameOfHisto =
"clNOtrk_charge_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
229 TitleOfHisto =
"cluster Charge, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
232 NameOfHisto =
"clNOtrk_energy_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
233 TitleOfHisto =
"cluster Energy, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
236 NameOfHisto =
"clNOtrk_maxbin_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
237 TitleOfHisto =
"cluster Seed maxbin, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
240 NameOfHisto =
"clNOtrk_energyVSmaxbin_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
241 TitleOfHisto =
"cluster Energy vs seed max bin U, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
243 h_clEnergyVSMaxbin[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 360, 0, 360,
"energy (keV)", 6, 0, 6,
"seed max bin",
247 NameOfHisto =
"clNOtrk_energyVSsizeMB12_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
248 TitleOfHisto =
"cluster Energy vs Size, maxbin = 1,2 U, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
251 h_clEnergyVSSize_mb12[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 360, 0, 360,
"energy (keV)", 15, 0, 15,
"cl size",
254 NameOfHisto =
"clNOtrk_energyVSsizeMB345_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
255 TitleOfHisto =
"cluster Energy vs Size, maxbin = 3,4,5 U, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
258 h_clEnergyVSSize_mb345[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 360, 0, 360,
"energy (keV)", 15, 0, 15,
"cl size",
261 NameOfHisto =
"clNOtrk_energyVSsizeMB6_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
262 TitleOfHisto =
"cluster Energy vs Size, maxbin = 6 U, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
265 h_clEnergyVSSize_mb6[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 360, 0, 360,
"energy (keV)", 15, 0, 15,
"cl size",
269 NameOfHisto =
"clNOtrk_energyVScoorU_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
270 TitleOfHisto =
"cluster Energy vs coor U, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide
273 h_clEnergyVSCoorU[i][j][1] =
createHistogram2D(NameOfHisto, TitleOfHisto, 360, 0, 360,
"energy (keV)", 200, -3, 3,
"coor U (cm)",
276 NameOfHisto =
"clNOtrk_coorU1VScoorU2_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
277 TitleOfHisto =
"cluster coor1 U vs coor2 U, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
283 NameOfHisto =
"clNOtrk_cellIDU1VScellIDU2_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
284 TitleOfHisto =
"cluster cellID1 U vs cellID2 U, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
290 NameOfHisto =
"clNOtrk_energy12VSdeltaU_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
291 TitleOfHisto =
"cluster energy1+2 U vs delta U, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
295 "delta U (# of cells)",
299 NameOfHisto =
"clNOtrk_energyVScoorV_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
300 TitleOfHisto =
"cluster Energy vs coor V, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide
306 NameOfHisto =
"clNOtrk_coorV1VScoorV2_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
307 TitleOfHisto =
"cluster coor1 V vs coor2 V, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
312 NameOfHisto =
"clNOtrk_cellIDV1VScellIDV2_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
313 TitleOfHisto =
"cluster cellID1 V vs cellID2 V, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
319 NameOfHisto =
"clNOtrk_energy12VSdeltaV_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
320 TitleOfHisto =
"cluster energy1+2 V vs delta V, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
324 "delta V (# of cells)",
329 NameOfHisto =
"clNOtrk_SN_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
330 TitleOfHisto =
"cluster S/N, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
333 NameOfHisto =
"clNOtrk_chrgVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
334 TitleOfHisto =
"cluster charge VS size, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
335 h_clChargeVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 500, 0, 100000,
"charge (e-)", 15, 0, 15,
"cl size",
337 NameOfHisto =
"clNOtrk_SNVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
338 TitleOfHisto =
"cluster S/N ratio VS size, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
340 h_clSNVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 150, 0, 150,
"S/N", 15, 0, 15,
"cl size",
343 NameOfHisto =
"clNOtrk_TimeVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
344 TitleOfHisto =
"cluster time VS size, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
345 h_clTimeVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 200, -100, 100,
"cluster time (ns)", 15, 0, 15,
"cl size",
348 NameOfHisto =
"clNOtrk_time_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
349 TitleOfHisto =
"cluster time (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
354 NameOfHisto =
"clNOtrk_timeVStrueTime_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
355 TitleOfHisto =
"cluster time VS true hit time (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
356 h_clTimeVSTrueTime[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 200, -100, 100,
"cluster time", 60, -30, 30,
"true time",
361 TString NameOfHisto =
"clNOtrk_nUVSnV_L" + nameLayer +
"S" + nameSensor;
362 TString TitleOfHisto =
"Number of U clusters VS number of V cluster, TB=3,4,5 (L" + nameLayer +
", sensor" + nameSensor +
")";
363 h_clNuVSNv[i][j] =
createHistogram2D(NameOfHisto, TitleOfHisto, 50, 0, 50,
"# V cluster", 50, 0, 50,
"# U clusters",
366 NameOfHisto =
"clNOtrk_coorUVScoorV_L" + nameLayer +
"S" + nameSensor;
367 TitleOfHisto =
"cluster coor U VS cluster coor V, TB=3,4,5 (L" + nameLayer +
", sensor" + nameSensor +
")";
368 h_clCoorUVSCoorV[i][j] =
createHistogram2D(NameOfHisto, TitleOfHisto, 200, -6.5, 6.5,
"coor V", 200, -3, 3,
"coor U",
371 NameOfHisto =
"clNOtrk_energyUVSenergyV_L" + nameLayer +
"S" + nameSensor;
372 TitleOfHisto =
"cluster energy U VS cluster energy V, TB=3,4,5 (L" + nameLayer +
", sensor" + nameSensor +
")";
380 h_cltrk_UU =
createHistogram1D(
"clTRK_dt_UU",
"track-related U-U clusters time difference", 200, -100, 100,
"time difference (ns)",
382 h_cltrk_VV =
createHistogram1D(
"clTRK_dt_VV",
"track-related V-V clusters time difference", 200, -100, 100,
"time difference (ns)",
384 h_cltrk_UV =
createHistogram1D(
"clTRK_dt_UV",
"track-related U-V clusters time difference", 200, -100, 100,
"time difference (ns)",
388 "L4u cluster time", 200, -100, 100,
"L5u cluster time",
392 "L4v cluster time", 200, -100, 100,
"L5v cluster time",
396 "L5u cluster time", 200, -100, 100,
"L5v cluster time",
429 float c_eTOkeV = 3.6 / 1000;
446 for (
int k = 0; k <
m_nSides; k ++) {
447 nShaperDigi[i][j][k] = 0;
448 nRecoDigi[i][j][k] = 0;
481 for (
int cl = 0 ; cl < (int)svdClustersTrack.
size(); cl++) {
483 float clCharge = svdClustersTrack[cl]->getCharge();
484 float clEnergy = svdClustersTrack[cl]->getCharge() * c_eTOkeV;
485 int clSize = svdClustersTrack[cl]->getSize();
486 float clSN = svdClustersTrack[cl]->getSNR();
487 float clTime = svdClustersTrack[cl]->getClsTime();
491 int side = svdClustersTrack[cl]->isUCluster();
493 nCltrk[layer][sensor][side]++;
497 h_cltrkSN[layer][sensor][side]->Fill(clSN);
511 for (
int cll = 0 ; cll < cl; cll++) {
513 int side2 = svdClustersTrack[cll]->isUCluster();
515 if ((
VxdID(theVxdID2).getLayerNumber() == 5) && (side2 != side)) {
517 h_cltrkTime_L5uL5v->Fill(svdClustersTrack[cl]->getClsTime(), svdClustersTrack[cll]->getClsTime());
519 h_cltrkTime_L5uL5v->Fill(svdClustersTrack[cll]->getClsTime(), svdClustersTrack[cl]->getClsTime());
524 if (side2 && side2 == side)
525 h_cltrkTime_L4uL5u->Fill(svdClustersTrack[cl]->getClsTime(), svdClustersTrack[cll]->getClsTime());
527 if (!side2 && side2 == side)
528 h_cltrkTime_L4vL5v->Fill(svdClustersTrack[cl]->getClsTime(), svdClustersTrack[cll]->getClsTime());
534 for (
int cl2 = 0 ; cl2 < cl ; cl2++) {
536 int layerDist = abs(
VxdID(theVxdID).getLayerNumber() - svdClustersTrack[cl2]->getSensorID().getLayerNumber());
538 int side2 = svdClustersTrack[cl2]->isUCluster();
540 if (layerDist == 0) {
541 if ((side == 0) && (side2 == 1))
542 h_cltrk_UV -> Fill(svdClustersTrack[cl2]->getClsTime() - svdClustersTrack[cl]->getClsTime());
544 if ((side == 1) && (side2 == 0))
545 h_cltrk_UV -> Fill(svdClustersTrack[cl]->getClsTime() - svdClustersTrack[cl2]->getClsTime());
546 }
else if (layerDist == 1) {
547 if ((side == 1) && (side2 == 1))
548 h_cltrk_UU -> Fill(svdClustersTrack[cl]->getClsTime() - svdClustersTrack[cl2]->getClsTime());
550 if ((side == 0) && (side2 == 0))
551 h_cltrk_VV -> Fill(svdClustersTrack[cl]->getClsTime() - svdClustersTrack[cl2]->getClsTime());
560 B2DEBUG(10,
"CLUSTER WITH A TIME BELOW " <<
m_debugLowTime <<
"ns");
561 B2DEBUG(10,
"size = " << svdClustersTrack[cl]->getSize() <<
", SNR = " << svdClustersTrack[cl]->getSNR() <<
" charge = " <<
562 svdClustersTrack[cl]->getCharge() <<
", SeedCharge = " << svdClustersTrack[cl]->getSeedCharge() <<
", time = " <<
563 svdClustersTrack[cl]->getClsTime());
570 for (
int i = 0; i < (int)svdTrueHitsTrack.
size(); i++) {
572 h_cltrkTimeVSTrueTime[layer][sensor][side]->Fill(svdClustersTrack[cl]->getClsTime(), svdTrueHitsTrack[i]->getGlobalTime());
574 B2DEBUG(10,
"True Hit Time = " << svdTrueHitsTrack[i]->getGlobalTime() <<
", EnergyDep = " << svdTrueHitsTrack[i]->getEnergyDep() <<
575 ", size = " << svdTrueHitsTrack.
size());
582 if ((
int)mcParticleTrack.
size() > 0)
583 B2DEBUG(10,
"MCParticle PDG = " << mcParticleTrack[0]->getPDG() <<
", energy = " << mcParticleTrack[0]->getEnergy() <<
", size = "
584 << mcParticleTrack.
size());
591 h_1cltrkSN[layer][sensor][side]->Fill(svdClustersTrack[cl]->getSNR());
596 h_2cltrkSN[layer][sensor][side]->Fill(svdClustersTrack[cl]->getSNR());
603 B2DEBUG(1,
"%%%%%%%% NEW EVENT, number of Tracks = " <<
m_Tracks.getEntries());
606 for (
int digi = 0 ; digi <
m_svdShapers.getEntries(); digi++) {
613 nShaperDigi[layer][sensor][side]++;
617 if (((layer == 0) && (
m_svdShapers[digi]->getCellID() > 767)) ||
618 ((layer != 0) && (
m_svdShapers[digi]->getCellID() > 511)))
619 B2WARNING(
" SVDShaperDigits: unexpected cellID for Layer " << layer <<
" Ladder " <<
VxdID(theVxdID).getLadderNumber() <<
620 " Sensor " <<
VxdID(theVxdID).getSensorNumber() <<
" V side, strip = " <<
m_svdShapers[digi]->getCellID());
623 B2WARNING(
" SVDShaperDigits: unexpected cellID for Layer " << layer <<
" Ladder " <<
VxdID(theVxdID).getLadderNumber() <<
624 " Sensor " <<
VxdID(theVxdID).getSensorNumber() <<
" U side, strip = " <<
m_svdShapers[digi]->getCellID());
631 for (
int digi = 0 ; digi <
m_svdRecos.getEntries(); digi++) {
645 nRecoDigi[layer][sensor][side]++;
658 float seed_maxbin = -1;
662 if ((
int)theRC.
size() > 0)
669 for (
int r = 0; r < (int)theRecoDigits.
size(); r++)
670 if (theRecoDigits.
weight(r) > charge) {
672 charge = theRecoDigits[r]->getCharge();
675 if (index_seed > -1) {
679 samples = theSeedShaperDigits[0]->getSamples();
681 const int nAPVSamples = 6;
682 for (
int k = 0; k < nAPVSamples; k ++) {
683 if (samples[k] > amplitude) {
684 amplitude = samples[k];
695 for (
int cl2 = 0 ; cl2 < cl; cl2++) {
707 float clEnergy2 =
m_svdClusters[cl2]->getCharge() * c_eTOkeV;
708 if ((layer != layer2) || (sensor != sensor2))
711 if (seed_maxbin < 2 || seed_maxbin > 4)
715 for (
int r = 0; r < (int)theRecoDigits.
size(); r++)
716 if (cellID1 < theRecoDigits[r]->getCellID())
717 cellID1 = theRecoDigits[r]->getCellID();
721 for (
int r = 0; r < (int)theRecoDigits2.
size(); r++)
722 if (cellID1 - theRecoDigits2[r]->getCellID() < dist)
723 dist = cellID1 - theRecoDigits2[r]->getCellID();
725 if (side == 1 && side2 == 1) {
730 if (side == 0 && side2 == 0) {
736 if (side == 1 && side2 == 0) {
740 if (side == 0 && side2 == 1) {
746 nCl[layer][sensor][side]++;
749 h_clCharge[layer][sensor][side]->Fill(clCharge);
750 h_clEnergy[layer][sensor][side]->Fill(clEnergy);
755 else if (seed_maxbin == 5)
759 nCl345[layer][sensor][side]++;
765 h_clSize[layer][sensor][side]->Fill(clSize);
766 h_clSN[layer][sensor][side]->Fill(clSN);
767 h_clTime[layer][sensor][side]->Fill(clTime);
775 if (svdTrueHits.
size() > 0)
783 for (
int k = 0; k <
m_nSides; k ++) {
784 h_nShaper[i][j][k]->Fill(nShaperDigi[i][j][k]);
785 h_nReco[i][j][k]->Fill(nRecoDigi[i][j][k]);
786 h_nCl[i][j][k]->Fill(nCl[i][j][k]);
787 h_clNuVSNv[i][j]->Fill(nCl345[i][j][0], nCl345[i][j][1]);
788 h_nCltrk[i][j][k]->Fill(nCltrk[i][j][k]);
816 TDirectory* oldDir = gDirectory;
819 TDirectory* dir_track = oldDir->mkdir(
"tracks");
822 while ((obj = nextH_track())) {
823 if (obj->InheritsFrom(
"TH1F"))((TH1F*)obj)->Scale(1. /
m_nEvents);
828 TDirectory* dir_shaper = oldDir->mkdir(
"shaper");
831 TString layerName =
"shaperL";
833 TDirectory* dir_layer = dir_shaper->mkdir(layerName.Data());
836 while ((obj = nextH_shaper())) {
837 if (obj->InheritsFrom(
"TH1F"))((TH1F*)obj)->Scale(1. /
m_nEvents);
843 TDirectory* dir_reco = oldDir->mkdir(
"reco");
846 TString layerName =
"recoL";
848 TDirectory* dir_layer = dir_reco->mkdir(layerName.Data());
851 while ((obj = nextH_reco())) {
852 if (obj->InheritsFrom(
"TH1F"))((TH1F*)obj)->Scale(1. /
m_nEvents);
857 TDirectory* dir_cluster = oldDir->mkdir(
"clusters");
860 TString layerName =
"clusterL";
862 TDirectory* dir_layer = dir_cluster->mkdir(layerName.Data());
865 while ((obj = nextH_cluster())) {
866 if (obj->InheritsFrom(
"TH1F"))((TH1F*)obj)->Scale(1. /
m_nEvents);
871 TDirectory* dir_clTRK = oldDir->mkdir(
"clustersTrk");
874 TString layerName =
"clstrkL";
876 TDirectory* dir_layer = dir_clTRK->mkdir(layerName.Data());
879 while ((obj = nextH_clTRK())) {
880 if (obj->InheritsFrom(
"TH1F"))((TH1F*)obj)->Scale(1. /
m_nEvents);
887 while ((obj = nextH_corr())) {
888 if (obj->InheritsFrom(
"TH1F"))
904 Int_t nbins, Double_t min, Double_t max,
905 const char* xtitle, TList* histoList)
908 TH1F* h =
new TH1F(name, title, nbins, min, max);
910 h->GetXaxis()->SetTitle(xtitle);
920 Int_t nbinsX, Double_t minX, Double_t maxX,
922 Int_t nbinsY, Double_t minY, Double_t maxY,
923 const char* titleY, TList* histoList)
926 TH2F* h =
new TH2F(name, title, nbinsX, minX, maxX, nbinsY, minY, maxY);
928 h->GetXaxis()->SetTitle(titleX);
929 h->GetYaxis()->SetTitle(titleY);