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>
22 , m_nTracks(0), m_Pvalue(), m_mom(0), m_nSVDhits(0)
25 setDescription(
"This module check performances of SVD reconstruction of VXD TB data");
27 addParam(
"outputFileName",
m_rootFileName,
"Name of output root file.", std::string(
"SVDPerformance_output.root"));
33 addParam(
"debugLowTime",
m_debugLowTime,
"Cluster Time below this number will produce a printout.",
float(0.));
86 TString nameLayer =
"";
89 TString nameSensor =
"";
93 else if (i == 1 || i == 2)
100 for (
int k = 0; k <
m_nSides; k ++) {
103 TString nameSide =
"";
110 TString NameOfHisto =
"shaper_N_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
111 TString TitleOfHisto =
"number of ShaperDigits (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
116 NameOfHisto =
"reco_N_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
117 TitleOfHisto =
"number of RecoDigits (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
120 NameOfHisto =
"reco_charge_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
121 TitleOfHisto =
"charge of RecoDigits (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
124 NameOfHisto =
"reco_energy_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
125 TitleOfHisto =
"energy collected by RecoDigits (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
128 NameOfHisto =
"reco_noise_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
129 TitleOfHisto =
"strip noise (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
132 NameOfHisto =
"reco_time_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
133 TitleOfHisto =
"strip time (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
138 NameOfHisto =
"clTRK_N_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
139 TitleOfHisto =
"number of clusters related to Tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
142 NameOfHisto =
"clTRK_size_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
143 TitleOfHisto =
"cluster size (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
146 NameOfHisto =
"clTRK_charge_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
147 TitleOfHisto =
"cluster Charge (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
150 NameOfHisto =
"clTRK_energy_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
151 TitleOfHisto =
"cluster Energy (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
154 NameOfHisto =
"clTRK_SN_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
155 TitleOfHisto =
"cluster S/N (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
158 NameOfHisto =
"clTRK_chrgVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
159 TitleOfHisto =
"cluster charge VS size (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
160 h_cltrkChargeVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 500, 0, 100000,
"charge (e-)", 15, 0, 15,
"cl size",
163 NameOfHisto =
"clTRK_SNVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
164 TitleOfHisto =
"cluster SN ratio VS size (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
165 h_cltrkSNVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 150, 0, 150,
"S/N", 15, 0, 15,
"cl size",
168 NameOfHisto =
"clTRK_TimeVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
169 TitleOfHisto =
"cluster time VS size (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
170 h_cltrkTimeVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 200, -100, 100,
"cluster time (ns)", 15, 0, 15,
"cl size",
173 NameOfHisto =
"clTRK_time_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
174 TitleOfHisto =
"cluster time (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
177 NameOfHisto =
"clTRK_timeTB1_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
178 TitleOfHisto =
"cluster time - TB = 1 (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
181 NameOfHisto =
"clTRK_timeTB2_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
182 TitleOfHisto =
"cluster time - TB = 2 (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
185 NameOfHisto =
"clTRK_timeTB3_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
186 TitleOfHisto =
"cluster time - TB = 3 (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
189 NameOfHisto =
"clTRK_timeTB4_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
190 TitleOfHisto =
"cluster time - TB = 4 (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
194 NameOfHisto =
"clTRK_timeVStrueTime_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
195 TitleOfHisto =
"cluster time VS true hit time (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
201 NameOfHisto =
"1clTRK_charge_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
202 TitleOfHisto =
"1-strip cluster Charge (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
206 NameOfHisto =
"1clTRK_SN_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
207 TitleOfHisto =
"1-strip cluster S/N (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
211 NameOfHisto =
"2clTRK_charge_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
212 TitleOfHisto =
"2-strip cluster Charge (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
216 NameOfHisto =
"2clTRK_SN_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
217 TitleOfHisto =
"2-strip cluster S/N (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
221 NameOfHisto =
"clNOtrk_N_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
222 TitleOfHisto =
"number of clusters NOT related to Tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
225 NameOfHisto =
"clNOtrk_size_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
226 TitleOfHisto =
"cluster size, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
229 NameOfHisto =
"clNOtrk_charge_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
230 TitleOfHisto =
"cluster Charge, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
233 NameOfHisto =
"clNOtrk_energy_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
234 TitleOfHisto =
"cluster Energy, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
237 NameOfHisto =
"clNOtrk_maxbin_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
238 TitleOfHisto =
"cluster Seed maxbin, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
241 NameOfHisto =
"clNOtrk_energyVSmaxbin_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
242 TitleOfHisto =
"cluster Energy vs seed max bin U, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
244 h_clEnergyVSMaxbin[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 360, 0, 360,
"energy (keV)", 6, 0, 6,
"seed max bin",
248 NameOfHisto =
"clNOtrk_energyVSsizeMB12_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
249 TitleOfHisto =
"cluster Energy vs Size, maxbin = 1,2 U, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
252 h_clEnergyVSSize_mb12[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 360, 0, 360,
"energy (keV)", 15, 0, 15,
"cl size",
255 NameOfHisto =
"clNOtrk_energyVSsizeMB345_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
256 TitleOfHisto =
"cluster Energy vs Size, maxbin = 3,4,5 U, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
259 h_clEnergyVSSize_mb345[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 360, 0, 360,
"energy (keV)", 15, 0, 15,
"cl size",
262 NameOfHisto =
"clNOtrk_energyVSsizeMB6_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
263 TitleOfHisto =
"cluster Energy vs Size, maxbin = 6 U, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
266 h_clEnergyVSSize_mb6[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 360, 0, 360,
"energy (keV)", 15, 0, 15,
"cl size",
270 NameOfHisto =
"clNOtrk_energyVScoorU_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
271 TitleOfHisto =
"cluster Energy vs coor U, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide
274 h_clEnergyVSCoorU[i][j][1] =
createHistogram2D(NameOfHisto, TitleOfHisto, 360, 0, 360,
"energy (keV)", 200, -3, 3,
"coor U (cm)",
277 NameOfHisto =
"clNOtrk_coorU1VScoorU2_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
278 TitleOfHisto =
"cluster coor1 U vs coor2 U, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
284 NameOfHisto =
"clNOtrk_cellIDU1VScellIDU2_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
285 TitleOfHisto =
"cluster cellID1 U vs cellID2 U, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
291 NameOfHisto =
"clNOtrk_energy12VSdeltaU_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
292 TitleOfHisto =
"cluster energy1+2 U vs delta U, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
296 "delta U (# of cells)",
300 NameOfHisto =
"clNOtrk_energyVScoorV_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
301 TitleOfHisto =
"cluster Energy vs coor V, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide
307 NameOfHisto =
"clNOtrk_coorV1VScoorV2_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
308 TitleOfHisto =
"cluster coor1 V vs coor2 V, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
313 NameOfHisto =
"clNOtrk_cellIDV1VScellIDV2_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
314 TitleOfHisto =
"cluster cellID1 V vs cellID2 V, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
320 NameOfHisto =
"clNOtrk_energy12VSdeltaV_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
321 TitleOfHisto =
"cluster energy1+2 V vs delta V, TB=3,4,5 NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," +
325 "delta V (# of cells)",
330 NameOfHisto =
"clNOtrk_SN_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
331 TitleOfHisto =
"cluster S/N, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
334 NameOfHisto =
"clNOtrk_chrgVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
335 TitleOfHisto =
"cluster charge VS size, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
336 h_clChargeVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 500, 0, 100000,
"charge (e-)", 15, 0, 15,
"cl size",
338 NameOfHisto =
"clNOtrk_SNVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
339 TitleOfHisto =
"cluster S/N ratio VS size, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
341 h_clSNVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 150, 0, 150,
"S/N", 15, 0, 15,
"cl size",
344 NameOfHisto =
"clNOtrk_TimeVSsize_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
345 TitleOfHisto =
"cluster time VS size, NOT related to tracks (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
346 h_clTimeVSSize[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 200, -100, 100,
"cluster time (ns)", 15, 0, 15,
"cl size",
349 NameOfHisto =
"clNOtrk_time_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
350 TitleOfHisto =
"cluster time (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
355 NameOfHisto =
"clNOtrk_timeVStrueTime_L" + nameLayer +
"S" + nameSensor +
"" + nameSide;
356 TitleOfHisto =
"cluster time VS true hit time (L" + nameLayer +
", sensor" + nameSensor +
"," + nameSide +
" side)";
357 h_clTimeVSTrueTime[i][j][k] =
createHistogram2D(NameOfHisto, TitleOfHisto, 200, -100, 100,
"cluster time", 60, -30, 30,
"true time",
362 TString NameOfHisto =
"clNOtrk_nUVSnV_L" + nameLayer +
"S" + nameSensor;
363 TString TitleOfHisto =
"Number of U clusters VS number of V cluster, TB=3,4,5 (L" + nameLayer +
", sensor" + nameSensor +
")";
364 h_clNuVSNv[i][j] =
createHistogram2D(NameOfHisto, TitleOfHisto, 50, 0, 50,
"# V cluster", 50, 0, 50,
"# U clusters",
367 NameOfHisto =
"clNOtrk_coorUVScoorV_L" + nameLayer +
"S" + nameSensor;
368 TitleOfHisto =
"cluster coor U VS cluster coor V, TB=3,4,5 (L" + nameLayer +
", sensor" + nameSensor +
")";
369 h_clCoorUVSCoorV[i][j] =
createHistogram2D(NameOfHisto, TitleOfHisto, 200, -6.5, 6.5,
"coor V", 200, -3, 3,
"coor U",
372 NameOfHisto =
"clNOtrk_energyUVSenergyV_L" + nameLayer +
"S" + nameSensor;
373 TitleOfHisto =
"cluster energy U VS cluster energy V, TB=3,4,5 (L" + nameLayer +
", sensor" + nameSensor +
")";
381 h_cltrk_UU =
createHistogram1D(
"clTRK_dt_UU",
"track-related U-U clusters time difference", 200, -100, 100,
"time difference (ns)",
383 h_cltrk_VV =
createHistogram1D(
"clTRK_dt_VV",
"track-related V-V clusters time difference", 200, -100, 100,
"time difference (ns)",
385 h_cltrk_UV =
createHistogram1D(
"clTRK_dt_UV",
"track-related U-V clusters time difference", 200, -100, 100,
"time difference (ns)",
389 "L4u cluster time", 200, -100, 100,
"L5u cluster time",
393 "L4v cluster time", 200, -100, 100,
"L5v cluster time",
397 "L5u cluster time", 200, -100, 100,
"L5v cluster time",
430 float c_eTOkeV = 3.6 / 1000;
447 for (
int k = 0; k <
m_nSides; k ++) {
448 nShaperDigi[i][j][k] = 0;
449 nRecoDigi[i][j][k] = 0;
467 tfr = track.getTrackFitResultWithClosestMass(
Const::pion);
482 for (
int cl = 0 ; cl < (int)svdClustersTrack.
size(); cl++) {
484 float clCharge = svdClustersTrack[cl]->getCharge();
485 float clEnergy = svdClustersTrack[cl]->getCharge() * c_eTOkeV;
486 int clSize = svdClustersTrack[cl]->getSize();
487 float clSN = svdClustersTrack[cl]->getSNR();
488 float clTime = svdClustersTrack[cl]->getClsTime();
492 int side = svdClustersTrack[cl]->isUCluster();
494 nCltrk[layer][sensor][side]++;
498 h_cltrkSN[layer][sensor][side]->Fill(clSN);
512 for (
int cll = 0 ; cll < cl; cll++) {
514 int side2 = svdClustersTrack[cll]->isUCluster();
516 if ((
VxdID(theVxdID2).getLayerNumber() == 5) && (side2 != side)) {
518 h_cltrkTime_L5uL5v->Fill(svdClustersTrack[cl]->getClsTime(), svdClustersTrack[cll]->getClsTime());
520 h_cltrkTime_L5uL5v->Fill(svdClustersTrack[cll]->getClsTime(), svdClustersTrack[cl]->getClsTime());
525 if (side2 && side2 == side)
526 h_cltrkTime_L4uL5u->Fill(svdClustersTrack[cl]->getClsTime(), svdClustersTrack[cll]->getClsTime());
528 if (!side2 && side2 == side)
529 h_cltrkTime_L4vL5v->Fill(svdClustersTrack[cl]->getClsTime(), svdClustersTrack[cll]->getClsTime());
535 for (
int cl2 = 0 ; cl2 < cl ; cl2++) {
537 int layerDist = abs(
VxdID(theVxdID).getLayerNumber() - svdClustersTrack[cl2]->getSensorID().getLayerNumber());
539 int side2 = svdClustersTrack[cl2]->isUCluster();
541 if (layerDist == 0) {
542 if ((side == 0) && (side2 == 1))
543 h_cltrk_UV -> Fill(svdClustersTrack[cl2]->getClsTime() - svdClustersTrack[cl]->getClsTime());
545 if ((side == 1) && (side2 == 0))
546 h_cltrk_UV -> Fill(svdClustersTrack[cl]->getClsTime() - svdClustersTrack[cl2]->getClsTime());
547 }
else if (layerDist == 1) {
548 if ((side == 1) && (side2 == 1))
549 h_cltrk_UU -> Fill(svdClustersTrack[cl]->getClsTime() - svdClustersTrack[cl2]->getClsTime());
551 if ((side == 0) && (side2 == 0))
552 h_cltrk_VV -> Fill(svdClustersTrack[cl]->getClsTime() - svdClustersTrack[cl2]->getClsTime());
561 B2DEBUG(10,
"CLUSTER WITH A TIME BELOW " <<
m_debugLowTime <<
"ns");
562 B2DEBUG(10,
"size = " << svdClustersTrack[cl]->getSize() <<
", SNR = " << svdClustersTrack[cl]->getSNR() <<
" charge = " <<
563 svdClustersTrack[cl]->getCharge() <<
", SeedCharge = " << svdClustersTrack[cl]->getSeedCharge() <<
", time = " <<
564 svdClustersTrack[cl]->getClsTime());
571 for (
int i = 0; i < (int)svdTrueHitsTrack.
size(); i++) {
573 h_cltrkTimeVSTrueTime[layer][sensor][side]->Fill(svdClustersTrack[cl]->getClsTime(), svdTrueHitsTrack[i]->getGlobalTime());
575 B2DEBUG(10,
"True Hit Time = " << svdTrueHitsTrack[i]->getGlobalTime() <<
", EnergyDep = " << svdTrueHitsTrack[i]->getEnergyDep() <<
576 ", size = " << svdTrueHitsTrack.
size());
583 if ((
int)mcParticleTrack.
size() > 0)
584 B2DEBUG(10,
"MCParticle PDG = " << mcParticleTrack[0]->getPDG() <<
", energy = " << mcParticleTrack[0]->getEnergy() <<
", size = "
585 << mcParticleTrack.
size());
592 h_1cltrkSN[layer][sensor][side]->Fill(svdClustersTrack[cl]->getSNR());
597 h_2cltrkSN[layer][sensor][side]->Fill(svdClustersTrack[cl]->getSNR());
604 B2DEBUG(1,
"%%%%%%%% NEW EVENT, number of Tracks = " <<
m_Tracks.getEntries());
607 for (
int digi = 0 ; digi <
m_svdShapers.getEntries(); digi++) {
614 nShaperDigi[layer][sensor][side]++;
618 if (((layer == 0) && (
m_svdShapers[digi]->getCellID() > 767)) ||
619 ((layer != 0) && (
m_svdShapers[digi]->getCellID() > 511)))
620 B2WARNING(
" SVDShaperDigits: unexpected cellID for Layer " << layer <<
" Ladder " <<
VxdID(theVxdID).getLadderNumber() <<
621 " Sensor " <<
VxdID(theVxdID).getSensorNumber() <<
" V side, strip = " <<
m_svdShapers[digi]->getCellID());
624 B2WARNING(
" SVDShaperDigits: unexpected cellID for Layer " << layer <<
" Ladder " <<
VxdID(theVxdID).getLadderNumber() <<
625 " Sensor " <<
VxdID(theVxdID).getSensorNumber() <<
" U side, strip = " <<
m_svdShapers[digi]->getCellID());
632 for (
int digi = 0 ; digi <
m_svdRecos.getEntries(); digi++) {
646 nRecoDigi[layer][sensor][side]++;
659 float seed_maxbin = -1;
663 if ((
int)theRC.
size() > 0)
670 for (
int r = 0; r < (int)theRecoDigits.
size(); r++)
671 if (theRecoDigits.
weight(r) > charge) {
673 charge = theRecoDigits[r]->getCharge();
676 if (index_seed > -1) {
680 samples = theSeedShaperDigits[0]->getSamples();
682 const int nAPVSamples = 6;
683 for (
int k = 0; k < nAPVSamples; k ++) {
684 if (samples[k] > amplitude) {
685 amplitude = samples[k];
696 for (
int cl2 = 0 ; cl2 < cl; cl2++) {
708 float clEnergy2 =
m_svdClusters[cl2]->getCharge() * c_eTOkeV;
709 if ((layer != layer2) || (sensor != sensor2))
712 if (seed_maxbin < 2 || seed_maxbin > 4)
716 for (
int r = 0; r < (int)theRecoDigits.
size(); r++)
717 if (cellID1 < theRecoDigits[r]->getCellID())
718 cellID1 = theRecoDigits[r]->getCellID();
722 for (
int r = 0; r < (int)theRecoDigits2.
size(); r++)
723 if (cellID1 - theRecoDigits2[r]->getCellID() < dist)
724 dist = cellID1 - theRecoDigits2[r]->getCellID();
726 if (side == 1 && side2 == 1) {
731 if (side == 0 && side2 == 0) {
737 if (side == 1 && side2 == 0) {
741 if (side == 0 && side2 == 1) {
747 nCl[layer][sensor][side]++;
750 h_clCharge[layer][sensor][side]->Fill(clCharge);
751 h_clEnergy[layer][sensor][side]->Fill(clEnergy);
756 else if (seed_maxbin == 5)
760 nCl345[layer][sensor][side]++;
766 h_clSize[layer][sensor][side]->Fill(clSize);
767 h_clSN[layer][sensor][side]->Fill(clSN);
768 h_clTime[layer][sensor][side]->Fill(clTime);
776 if (svdTrueHits.
size() > 0)
784 for (
int k = 0; k <
m_nSides; k ++) {
785 h_nShaper[i][j][k]->Fill(nShaperDigi[i][j][k]);
786 h_nReco[i][j][k]->Fill(nRecoDigi[i][j][k]);
787 h_nCl[i][j][k]->Fill(nCl[i][j][k]);
788 h_clNuVSNv[i][j]->Fill(nCl345[i][j][0], nCl345[i][j][1]);
789 h_nCltrk[i][j][k]->Fill(nCltrk[i][j][k]);
812 TDirectory* oldDir = gDirectory;
815 TDirectory* dir_track = oldDir->mkdir(
"tracks");
818 while ((obj = nextH_track())) {
819 if (obj->InheritsFrom(
"TH1F"))((TH1F*)obj)->Scale(1. /
m_nEvents);
824 TDirectory* dir_shaper = oldDir->mkdir(
"shaper");
827 TString layerName =
"shaperL";
829 TDirectory* dir_layer = dir_shaper->mkdir(layerName.Data());
832 while ((obj = nextH_shaper())) {
833 if (obj->InheritsFrom(
"TH1F"))((TH1F*)obj)->Scale(1. /
m_nEvents);
839 TDirectory* dir_reco = oldDir->mkdir(
"reco");
842 TString layerName =
"recoL";
844 TDirectory* dir_layer = dir_reco->mkdir(layerName.Data());
847 while ((obj = nextH_reco())) {
848 if (obj->InheritsFrom(
"TH1F"))((TH1F*)obj)->Scale(1. /
m_nEvents);
853 TDirectory* dir_cluster = oldDir->mkdir(
"clusters");
856 TString layerName =
"clusterL";
858 TDirectory* dir_layer = dir_cluster->mkdir(layerName.Data());
861 while ((obj = nextH_cluster())) {
862 if (obj->InheritsFrom(
"TH1F"))((TH1F*)obj)->Scale(1. /
m_nEvents);
867 TDirectory* dir_clTRK = oldDir->mkdir(
"clustersTrk");
870 TString layerName =
"clstrkL";
872 TDirectory* dir_layer = dir_clTRK->mkdir(layerName.Data());
875 while ((obj = nextH_clTRK())) {
876 if (obj->InheritsFrom(
"TH1F"))((TH1F*)obj)->Scale(1. /
m_nEvents);
883 while ((obj = nextH_corr())) {
884 if (obj->InheritsFrom(
"TH1F"))
900 Int_t nbins, Double_t min, Double_t max,
901 const char* xtitle, TList* histoList)
904 TH1F* h =
new TH1F(name, title, nbins, min, max);
906 h->GetXaxis()->SetTitle(xtitle);
916 Int_t nbinsX, Double_t minX, Double_t maxX,
918 Int_t nbinsY, Double_t minY, Double_t maxY,
919 const char* titleY, TList* histoList)
922 TH2F* h =
new TH2F(name, title, nbinsX, minX, maxX, nbinsY, minY, maxY);
924 h->GetXaxis()->SetTitle(titleX);
925 h->GetYaxis()->SetTitle(titleY);
static const ChargedStable pion
charged pion particle
static const ChargedStable electron
electron particle
void setDescription(const std::string &description)
Sets the description of the module.
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.
ROOT::Math::XYZVector 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.
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.