8 #include <svd/modules/svdPerformance/SVDPerformanceModule.h>
9 #include <framework/datastore/StoreObjPtr.h>
10 #include <framework/datastore/RelationVector.h>
12 #include <mdst/dataobjects/MCParticle.h>
13 #include <mdst/dataobjects/HitPatternVXD.h>
14 #include <svd/dataobjects/SVDTrueHit.h>
16 #include <boost/foreach.hpp>
23 SVDPerformanceModule::SVDPerformanceModule() :
Module()
24 , m_nTracks(0), m_Pvalue(), m_mom(0), m_nSVDhits(0)
27 setDescription(
"This module check performances of SVD reconstruction of VXD TB data");
29 addParam(
"outputFileName", m_rootFileName,
"Name of output root file.", std::string(
"SVDPerformance_output.root"));
30 addParam(
"SVDEventInfo", m_svdEventInfoName,
"Defines the name of the EventInfo",
string(
""));
32 addParam(
"is2017TBanalysis", m_is2017TBanalysis,
"True if analyzing 2017 TB data.",
bool(
false));
33 addParam(
"isSimulation", m_isSimulation,
"True if analyzing simulated data.",
bool(
false));
35 addParam(
"debugLowTime", m_debugLowTime,
"Cluster Time below this number will produce a printout.",
float(0.));
37 addParam(
"ShaperDigitsName", m_ShaperDigitName,
"Name of ShaperDigit Store Array.", std::string(
""));
38 addParam(
"RecoDigitsName", m_RecoDigitName,
"Name of RecoDigit Store Array.", std::string(
""));
39 addParam(
"ClustersName", m_ClusterName,
"Name of Cluster Store Array.", std::string(
""));
40 addParam(
"TrackListName", m_TrackName,
"Name of Track Store Array.", std::string(
""));
41 addParam(
"TrackFitResultListName", m_TrackFitResultName,
"Name of TracksFitResult Store Array.", std::string(
""));
44 SVDPerformanceModule::~SVDPerformanceModule()
92 TString nameLayer =
"";
95 TString nameSensor =
"";
99 else if (i == 1 || i == 2)
106 for (
int k = 0; k <
m_nSides; k ++) {
109 TString nameSide =
"";
116 TString NameOfHisto =
"shaper_N_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
117 TString TitleOfHisto =
"number of ShaperDigits (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
122 NameOfHisto =
"reco_N_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
123 TitleOfHisto =
"number of RecoDigits (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
126 NameOfHisto =
"reco_charge_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
127 TitleOfHisto =
"charge of RecoDigits (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
130 NameOfHisto =
"reco_energy_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
131 TitleOfHisto =
"energy collected by RecoDigits (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
134 NameOfHisto =
"reco_noise_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
135 TitleOfHisto =
"strip noise (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
138 NameOfHisto =
"reco_time_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
139 TitleOfHisto =
"strip time (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
144 NameOfHisto =
"clTRK_N_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
145 TitleOfHisto =
"number of clusters related to Tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
148 NameOfHisto =
"clTRK_size_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
149 TitleOfHisto =
"cluster size (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
152 NameOfHisto =
"clTRK_charge_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
153 TitleOfHisto =
"cluster Charge (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
156 NameOfHisto =
"clTRK_energy_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
157 TitleOfHisto =
"cluster Energy (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
160 NameOfHisto =
"clTRK_SN_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
161 TitleOfHisto =
"cluster S/N (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
164 NameOfHisto =
"clTRK_chrgVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
165 TitleOfHisto =
"cluster charge VS size (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
166 h_cltrkChargeVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 500, 0, 100000,
"charge (e-)", 15, 0, 15,
"cl size",
169 NameOfHisto =
"clTRK_SNVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
170 TitleOfHisto =
"cluster SN ratio VS size (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
171 h_cltrkSNVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 150, 0, 150,
"S/N", 15, 0, 15,
"cl size",
174 NameOfHisto =
"clTRK_TimeVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
175 TitleOfHisto =
"cluster time VS size (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
176 h_cltrkTimeVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 200, -100, 100,
"cluster time (ns)", 15, 0, 15,
"cl size",
179 NameOfHisto =
"clTRK_time_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
180 TitleOfHisto =
"cluster time (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
183 NameOfHisto =
"clTRK_timeTB1_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
184 TitleOfHisto =
"cluster time - TB = 1 (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
187 NameOfHisto =
"clTRK_timeTB2_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
188 TitleOfHisto =
"cluster time - TB = 2 (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
191 NameOfHisto =
"clTRK_timeTB3_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
192 TitleOfHisto =
"cluster time - TB = 3 (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
195 NameOfHisto =
"clTRK_timeTB4_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
196 TitleOfHisto =
"cluster time - TB = 4 (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
200 NameOfHisto =
"clTRK_timeVStrueTime_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
201 TitleOfHisto =
"cluster time VS true hit time (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
207 NameOfHisto =
"1clTRK_charge_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
208 TitleOfHisto =
"1-strip cluster Charge (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
212 NameOfHisto =
"1clTRK_SN_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
213 TitleOfHisto =
"1-strip cluster S/N (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
217 NameOfHisto =
"2clTRK_charge_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
218 TitleOfHisto =
"2-strip cluster Charge (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
222 NameOfHisto =
"2clTRK_SN_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
223 TitleOfHisto =
"2-strip cluster S/N (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
227 NameOfHisto =
"clNOtrk_N_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
228 TitleOfHisto =
"number of clusters NOT related to Tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
231 NameOfHisto =
"clNOtrk_size_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
232 TitleOfHisto =
"cluster size, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
235 NameOfHisto =
"clNOtrk_charge_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
236 TitleOfHisto =
"cluster Charge, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
239 NameOfHisto =
"clNOtrk_energy_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
240 TitleOfHisto =
"cluster Energy, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
243 NameOfHisto =
"clNOtrk_maxbin_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
244 TitleOfHisto =
"cluster Seed maxbin, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
247 NameOfHisto =
"clNOtrk_energyVSmaxbin_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
248 TitleOfHisto =
"cluster Energy vs seed max bin U, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
250 h_clEnergyVSMaxbin[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 360, 0, 360,
"energy (keV)", 6, 0, 6,
"seed max bin",
254 NameOfHisto =
"clNOtrk_energyVSsizeMB12_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
255 TitleOfHisto =
"cluster Energy vs Size, maxbin = 1,2 U, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
258 h_clEnergyVSSize_mb12[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 360, 0, 360,
"energy (keV)", 15, 0, 15,
"cl size",
261 NameOfHisto =
"clNOtrk_energyVSsizeMB345_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
262 TitleOfHisto =
"cluster Energy vs Size, maxbin = 3,4,5 U, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
265 h_clEnergyVSSize_mb345[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 360, 0, 360,
"energy (keV)", 15, 0, 15,
"cl size",
268 NameOfHisto =
"clNOtrk_energyVSsizeMB6_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
269 TitleOfHisto =
"cluster Energy vs Size, maxbin = 6 U, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
272 h_clEnergyVSSize_mb6[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 360, 0, 360,
"energy (keV)", 15, 0, 15,
"cl size",
276 NameOfHisto =
"clNOtrk_energyVScoorU_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
277 TitleOfHisto =
"cluster Energy vs coor U, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide
280 h_clEnergyVSCoorU[i][j][1] =
createHistogram2D(NameOfHisto, TitleOfHisto, 360, 0, 360,
"energy (keV)", 200, -3, 3,
"coor U (cm)",
283 NameOfHisto =
"clNOtrk_coorU1VScoorU2_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
284 TitleOfHisto =
"cluster coor1 U vs coor2 U, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
290 NameOfHisto =
"clNOtrk_cellIDU1VScellIDU2_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
291 TitleOfHisto =
"cluster cellID1 U vs cellID2 U, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
297 NameOfHisto =
"clNOtrk_energy12VSdeltaU_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
298 TitleOfHisto =
"cluster energy1+2 U vs delta U, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
302 "delta U (# of cells)",
306 NameOfHisto =
"clNOtrk_energyVScoorV_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
307 TitleOfHisto =
"cluster Energy vs coor V, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide
313 NameOfHisto =
"clNOtrk_coorV1VScoorV2_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
314 TitleOfHisto =
"cluster coor1 V vs coor2 V, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
319 NameOfHisto =
"clNOtrk_cellIDV1VScellIDV2_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
320 TitleOfHisto =
"cluster cellID1 V vs cellID2 V, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
326 NameOfHisto =
"clNOtrk_energy12VSdeltaV_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
327 TitleOfHisto =
"cluster energy1+2 V vs delta V, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
331 "delta V (# of cells)",
336 NameOfHisto =
"clNOtrk_SN_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
337 TitleOfHisto =
"cluster S/N, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
340 NameOfHisto =
"clNOtrk_chrgVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
341 TitleOfHisto =
"cluster charge VS size, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
342 h_clChargeVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 500, 0, 100000,
"charge (e-)", 15, 0, 15,
"cl size",
344 NameOfHisto =
"clNOtrk_SNVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
345 TitleOfHisto =
"cluster S/N ratio VS size, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
347 h_clSNVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 150, 0, 150,
"S/N", 15, 0, 15,
"cl size",
350 NameOfHisto =
"clNOtrk_TimeVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
351 TitleOfHisto =
"cluster time VS size, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
352 h_clTimeVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 200, -100, 100,
"cluster time (ns)", 15, 0, 15,
"cl size",
355 NameOfHisto =
"clNOtrk_time_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
356 TitleOfHisto =
"cluster time (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
361 NameOfHisto =
"clNOtrk_timeVStrueTime_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
362 TitleOfHisto =
"cluster time VS true hit time (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
363 h_clTimeVSTrueTime[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 200, -100, 100,
"cluster time", 60, -30, 30,
"true time",
368 TString NameOfHisto =
"clNOtrk_nUVSnV_L" + nameLayer +
"S" + nameSensor;
369 TString TitleOfHisto =
"Number of U clusters VS number of V cluster, TB=3,4,5 (L" + nameLayer +
", sensor" + nameSensor +
")";
370 h_clNuVSNv[i][j] =
createHistogram2D(NameOfHisto, TitleOfHisto, 50, 0, 50,
"# V cluster", 50, 0, 50,
"# U clusters",
373 NameOfHisto =
"clNOtrk_coorUVScoorV_L" + nameLayer +
"S" + nameSensor;
374 TitleOfHisto =
"cluster coor U VS cluster coor V, TB=3,4,5 (L" + nameLayer +
", sensor" + nameSensor +
")";
375 h_clCoorUVSCoorV[i][j] =
createHistogram2D(NameOfHisto, TitleOfHisto, 200, -6.5, 6.5,
"coor V", 200, -3, 3,
"coor U",
378 NameOfHisto =
"clNOtrk_energyUVSenergyV_L" + nameLayer +
"S" + nameSensor;
379 TitleOfHisto =
"cluster energy U VS cluster energy V, TB=3,4,5 (L" + nameLayer +
", sensor" + nameSensor +
")";
387 h_cltrk_UU =
createHistogram1D(
"clTRK_dt_UU",
"track-related U-U clusters time difference", 200, -100, 100,
"time difference (ns)",
389 h_cltrk_VV =
createHistogram1D(
"clTRK_dt_VV",
"track-related V-V clusters time difference", 200, -100, 100,
"time difference (ns)",
391 h_cltrk_UV =
createHistogram1D(
"clTRK_dt_UV",
"track-related U-V clusters time difference", 200, -100, 100,
"time difference (ns)",
395 "L4u cluster time", 200, -100, 100,
"L5u cluster time",
399 "L4v cluster time", 200, -100, 100,
"L5v cluster time",
403 "L5u cluster time", 200, -100, 100,
"L5v cluster time",
436 float c_eTOkeV = 3.6 / 1000;
453 for (
int k = 0; k <
m_nSides; k ++) {
454 nShaperDigi[i][j][k] = 0;
455 nRecoDigi[i][j][k] = 0;
473 tfr = track.getTrackFitResultWithClosestMass(
Const::pion);
488 for (
int cl = 0 ; cl < (int)svdClustersTrack.
size(); cl++) {
490 float clCharge = svdClustersTrack[cl]->getCharge();
491 float clEnergy = svdClustersTrack[cl]->getCharge() * c_eTOkeV;
492 int clSize = svdClustersTrack[cl]->getSize();
493 float clSN = svdClustersTrack[cl]->getSNR();
494 float clTime = svdClustersTrack[cl]->getClsTime();
498 int side = svdClustersTrack[cl]->isUCluster();
500 nCltrk[layer][sensor][side]++;
504 h_cltrkSN[layer][sensor][side]->Fill(clSN);
518 for (
int cll = 0 ; cll < cl; cll++) {
520 int side2 = svdClustersTrack[cll]->isUCluster();
522 if ((
VxdID(theVxdID2).getLayerNumber() == 5) && (side2 != side)) {
524 h_cltrkTime_L5uL5v->Fill(svdClustersTrack[cl]->getClsTime(), svdClustersTrack[cll]->getClsTime());
526 h_cltrkTime_L5uL5v->Fill(svdClustersTrack[cll]->getClsTime(), svdClustersTrack[cl]->getClsTime());
531 if (side2 && side2 == side)
532 h_cltrkTime_L4uL5u->Fill(svdClustersTrack[cl]->getClsTime(), svdClustersTrack[cll]->getClsTime());
534 if (!side2 && side2 == side)
535 h_cltrkTime_L4vL5v->Fill(svdClustersTrack[cl]->getClsTime(), svdClustersTrack[cll]->getClsTime());
541 for (
int cl2 = 0 ; cl2 < cl ; cl2++) {
543 int layerDist = abs(
VxdID(theVxdID).getLayerNumber() - svdClustersTrack[cl2]->getSensorID().getLayerNumber());
545 int side2 = svdClustersTrack[cl2]->isUCluster();
547 if (layerDist == 0) {
548 if ((side == 0) && (side2 == 1))
549 h_cltrk_UV -> Fill(svdClustersTrack[cl2]->getClsTime() - svdClustersTrack[cl]->getClsTime());
551 if ((side == 1) && (side2 == 0))
552 h_cltrk_UV -> Fill(svdClustersTrack[cl]->getClsTime() - svdClustersTrack[cl2]->getClsTime());
553 }
else if (layerDist == 1) {
554 if ((side == 1) && (side2 == 1))
555 h_cltrk_UU -> Fill(svdClustersTrack[cl]->getClsTime() - svdClustersTrack[cl2]->getClsTime());
557 if ((side == 0) && (side2 == 0))
558 h_cltrk_VV -> Fill(svdClustersTrack[cl]->getClsTime() - svdClustersTrack[cl2]->getClsTime());
567 B2DEBUG(10,
"CLUSTER WITH A TIME BELOW " <<
m_debugLowTime <<
"ns");
568 B2DEBUG(10,
"size = " << svdClustersTrack[cl]->getSize() <<
", SNR = " << svdClustersTrack[cl]->getSNR() <<
" charge = " <<
569 svdClustersTrack[cl]->getCharge() <<
", SeedCharge = " << svdClustersTrack[cl]->getSeedCharge() <<
", time = " <<
570 svdClustersTrack[cl]->getClsTime());
577 for (
int i = 0; i < (int)svdTrueHitsTrack.
size(); i++) {
579 h_cltrkTimeVSTrueTime[layer][sensor][side]->Fill(svdClustersTrack[cl]->getClsTime(), svdTrueHitsTrack[i]->getGlobalTime());
581 B2DEBUG(10,
"True Hit Time = " << svdTrueHitsTrack[i]->getGlobalTime() <<
", EnergyDep = " << svdTrueHitsTrack[i]->getEnergyDep() <<
582 ", size = " << svdTrueHitsTrack.
size());
589 if ((
int)mcParticleTrack.
size() > 0)
590 B2DEBUG(10,
"MCParticle PDG = " << mcParticleTrack[0]->getPDG() <<
", energy = " << mcParticleTrack[0]->getEnergy() <<
", size = "
591 << mcParticleTrack.
size());
598 h_1cltrkSN[layer][sensor][side]->Fill(svdClustersTrack[cl]->getSNR());
603 h_2cltrkSN[layer][sensor][side]->Fill(svdClustersTrack[cl]->getSNR());
610 B2DEBUG(1,
"%%%%%%%% NEW EVENT, number of Tracks = " <<
m_Tracks.getEntries());
613 for (
int digi = 0 ; digi <
m_svdShapers.getEntries(); digi++) {
620 nShaperDigi[layer][sensor][side]++;
624 if (((layer == 0) && (
m_svdShapers[digi]->getCellID() > 767)) ||
625 ((layer != 0) && (
m_svdShapers[digi]->getCellID() > 511)))
626 B2WARNING(
" SVDShaperDigits: unexpected cellID for Layer " << layer <<
" Ladder " <<
VxdID(theVxdID).getLadderNumber() <<
627 " Sensor " <<
VxdID(theVxdID).getSensorNumber() <<
" V side, strip = " <<
m_svdShapers[digi]->getCellID());
630 B2WARNING(
" SVDShaperDigits: unexpected cellID for Layer " << layer <<
" Ladder " <<
VxdID(theVxdID).getLadderNumber() <<
631 " Sensor " <<
VxdID(theVxdID).getSensorNumber() <<
" U side, strip = " <<
m_svdShapers[digi]->getCellID());
638 for (
int digi = 0 ; digi <
m_svdRecos.getEntries(); digi++) {
652 nRecoDigi[layer][sensor][side]++;
665 float seed_maxbin = -1;
669 if ((
int)theRC.
size() > 0)
676 for (
int r = 0; r < (int)theRecoDigits.
size(); r++)
677 if (theRecoDigits.
weight(r) > charge) {
679 charge = theRecoDigits[r]->getCharge();
682 if (index_seed > -1) {
686 samples = theSeedShaperDigits[0]->getSamples();
688 const int nAPVSamples = 6;
689 for (
int k = 0; k < nAPVSamples; k ++) {
690 if (samples[k] > amplitude) {
691 amplitude = samples[k];
702 for (
int cl2 = 0 ; cl2 < cl; cl2++) {
714 float clEnergy2 =
m_svdClusters[cl2]->getCharge() * c_eTOkeV;
715 if ((layer != layer2) || (sensor != sensor2))
718 if (seed_maxbin < 2 || seed_maxbin > 4)
722 for (
int r = 0; r < (int)theRecoDigits.
size(); r++)
723 if (cellID1 < theRecoDigits[r]->getCellID())
724 cellID1 = theRecoDigits[r]->getCellID();
728 for (
int r = 0; r < (int)theRecoDigits2.
size(); r++)
729 if (cellID1 - theRecoDigits2[r]->getCellID() < dist)
730 dist = cellID1 - theRecoDigits2[r]->getCellID();
732 if (side == 1 && side2 == 1) {
737 if (side == 0 && side2 == 0) {
743 if (side == 1 && side2 == 0) {
747 if (side == 0 && side2 == 1) {
753 nCl[layer][sensor][side]++;
756 h_clCharge[layer][sensor][side]->Fill(clCharge);
757 h_clEnergy[layer][sensor][side]->Fill(clEnergy);
762 else if (seed_maxbin == 5)
766 nCl345[layer][sensor][side]++;
772 h_clSize[layer][sensor][side]->Fill(clSize);
773 h_clSN[layer][sensor][side]->Fill(clSN);
774 h_clTime[layer][sensor][side]->Fill(clTime);
782 if (svdTrueHits.
size() > 0)
790 for (
int k = 0; k <
m_nSides; k ++) {
791 h_nShaper[i][j][k]->Fill(nShaperDigi[i][j][k]);
792 h_nReco[i][j][k]->Fill(nRecoDigi[i][j][k]);
793 h_nCl[i][j][k]->Fill(nCl[i][j][k]);
794 h_clNuVSNv[i][j]->Fill(nCl345[i][j][0], nCl345[i][j][1]);
795 h_nCltrk[i][j][k]->Fill(nCltrk[i][j][k]);
823 TDirectory* oldDir = gDirectory;
826 TDirectory* dir_track = oldDir->mkdir(
"tracks");
829 while ((obj = nextH_track())) {
830 if (obj->InheritsFrom(
"TH1F"))((TH1F*)obj)->Scale(1. /
m_nEvents);
835 TDirectory* dir_shaper = oldDir->mkdir(
"shaper");
838 TString layerName =
"shaperL";
840 TDirectory* dir_layer = dir_shaper->mkdir(layerName.Data());
843 while ((obj = nextH_shaper())) {
844 if (obj->InheritsFrom(
"TH1F"))((TH1F*)obj)->Scale(1. /
m_nEvents);
850 TDirectory* dir_reco = oldDir->mkdir(
"reco");
853 TString layerName =
"recoL";
855 TDirectory* dir_layer = dir_reco->mkdir(layerName.Data());
858 while ((obj = nextH_reco())) {
859 if (obj->InheritsFrom(
"TH1F"))((TH1F*)obj)->Scale(1. /
m_nEvents);
864 TDirectory* dir_cluster = oldDir->mkdir(
"clusters");
867 TString layerName =
"clusterL";
869 TDirectory* dir_layer = dir_cluster->mkdir(layerName.Data());
872 while ((obj = nextH_cluster())) {
873 if (obj->InheritsFrom(
"TH1F"))((TH1F*)obj)->Scale(1. /
m_nEvents);
878 TDirectory* dir_clTRK = oldDir->mkdir(
"clustersTrk");
881 TString layerName =
"clstrkL";
883 TDirectory* dir_layer = dir_clTRK->mkdir(layerName.Data());
886 while ((obj = nextH_clTRK())) {
887 if (obj->InheritsFrom(
"TH1F"))((TH1F*)obj)->Scale(1. /
m_nEvents);
894 while ((obj = nextH_corr())) {
895 if (obj->InheritsFrom(
"TH1F"))
911 Int_t nbins, Double_t min, Double_t max,
912 const char* xtitle, TList* histoList)
915 TH1F* h =
new TH1F(name, title, nbins, min, max);
917 h->GetXaxis()->SetTitle(xtitle);
927 Int_t nbinsX, Double_t minX, Double_t maxX,
929 Int_t nbinsY, Double_t minY, Double_t maxY,
930 const char* titleY, TList* histoList)
933 TH2F* h =
new TH2F(name, title, nbinsX, minX, maxX, nbinsY, minY, maxY);
935 h->GetXaxis()->SetTitle(titleX);
936 h->GetYaxis()->SetTitle(titleY);
static const ChargedStable pion
charged pion particle
static const ChargedStable electron
electron particle
Class for type safe access to objects that are referred to in relations.
size_t size() const
Get number of relations.
float weight(int index) const
Get weight with index.
Class to store SVD mode information.
baseType getTriggerBin() const
Get the triggerBin id.
uint8_t baseType
The base integer type for SVDModeByte.
float getNoiseInElectrons(const VxdID &sensorID, const bool &isU, const unsigned short &strip) const
This method provides the correct noise conversion into electrons, taking into account that the noise ...
std::array< APVFloatSampleType, c_nAPVSamples > APVFloatSamples
array of APVFloatSampleType objects
bool isRequired(const std::string &name="")
Ensure this array/object has been registered previously.
int getEntries() const
Get the number of objects in the array.
Values of the result of a track fit with a given particle hypothesis.
double getPValue() const
Getter for Chi2 Probability of the track fit.
TVector3 getMomentum() const
Getter for vector of momentum at closest approach of track in r/phi projection.
HitPatternVXD getHitPatternVXD() const
Getter for the hit pattern in the VXD;.
Class that bundles various TrackFitResults.
Class to uniquely identify a any structure of the PXD and SVD.
unsigned short baseType
The base integer type for VxdID.
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.