1 #include <svd/modules/svdPerformance/SVDB4CommissioningPlotsModule.h>
2 #include <framework/datastore/RelationVector.h>
4 #include <mdst/dataobjects/HitPatternVXD.h>
5 #include <vxd/geometry/GeoCache.h>
7 #include <boost/foreach.hpp>
14 SVDB4CommissioningPlotsModule::SVDB4CommissioningPlotsModule() :
Module()
15 , m_nTracks(0), m_Pvalue(), m_mom(0), m_nSVDhits(0)
18 setDescription(
"This module check performances of SVD reconstruction on Commissioning data");
20 addParam(
"outputFileName", m_rootFileName,
"Name of output root file.", std::string(
"SVDB4CommissioningPlots_output.root"));
22 addParam(
"RecoDigitsName", m_RecoDigitName,
"Name of RecoDigit Store Array.", std::string(
"SVDRecoDigits"));
23 addParam(
"ClustersName", m_ClusterName,
"Name of Cluster Store Array.", std::string(
"SVDClusters"));
24 addParam(
"TrackListName", m_TrackName,
"Name of Track Store Array.", std::string(
"Tracks"));
25 addParam(
"TrackFitResultListName", m_TrackFitResultName,
"Name of TracksFitResult Store Array.", std::string(
"TrackFitResults"));
28 SVDB4CommissioningPlotsModule::~SVDB4CommissioningPlotsModule()
60 TH1F hRecoCharge(
"reco_charge_L@layerL@ladderS@sensor@view",
61 "Charge of RecoDigits in @layer.@ladder.@sensor @view/@side side",
63 hRecoCharge.GetXaxis()->SetTitle(
"charge (ke-)");
66 TH1F hRecoEnergy(
"reco_energy_L@layerL@ladderS@sensor@view",
67 "Energy of RecoDigits in @layer.@ladder.@sensor @view/@side side",
69 hRecoEnergy.GetXaxis()->SetTitle(
"energy (keV)");
72 TH1F hRecoTime(
"reco_time_L@layerL@ladderS@sensor@view",
73 "Time of RecoDigits in @layer.@ladder.@sensor @view/@side side",
75 hRecoTime.GetXaxis()->SetTitle(
"time (ns)");
78 TH1F hRecoNoise(
"reco_noise_L@layerL@ladderS@sensor@view",
79 "Noise of RecoDigits in @layer.@ladder.@sensor @view/@side side",
81 hRecoNoise.GetXaxis()->SetTitle(
"strip noise (e-)");
85 TH1F hClusterCharge(
"cluster_charge_L@layerL@ladderS@sensor@view",
86 "Charge of Clusters in @layer.@ladder.@sensor @view/@side side",
88 hClusterCharge.GetXaxis()->SetTitle(
"charge (ke-)");
91 TH1F hClusterSize(
"cluster_size_L@layerL@ladderS@sensor@view",
92 "Clusters Size for @layer.@ladder.@sensor @view/@side side",
94 hClusterSize.GetXaxis()->SetTitle(
"cluster size");
97 TH1F hClusterSNR(
"cluster_SNR_L@layerL@ladderS@sensor@view",
98 "SNR of Clusters in @layer.@ladder.@sensor @view/@side side",
100 hClusterSNR.GetXaxis()->SetTitle(
"SNR");
103 TH1F hClusterEnergy(
"cluster_energy_L@layerL@ladderS@sensor@view",
104 "Energy of Clusters in @layer.@ladder.@sensor @view/@side side",
106 hClusterEnergy.GetXaxis()->SetTitle(
"energy (keV)");
109 TH1F hClusterTime(
"cluster_time_L@layerL@ladderS@sensor@view",
110 "Time of Clusters in @layer.@ladder.@sensor @view/@side side",
112 hClusterTime.GetXaxis()->SetTitle(
"time (ns)");
116 TH1F hClusterTrkCharge(
"clusterTrk_charge_L@layerL@ladderS@sensor@view",
117 "Charge of Clusters Related to Tracks in @layer.@ladder.@sensor @view/@side side",
119 hClusterTrkCharge.GetXaxis()->SetTitle(
"charge (ke-)");
122 TH1F hClusterTrkSize(
"clusterTrk_size_L@layerL@ladderS@sensor@view",
123 "Cluster Size for @layer.@ladder.@sensor @view/@side side",
125 hClusterTrkSize.GetXaxis()->SetTitle(
"cluster size");
128 TH1F hClusterTrkSNR(
"clusterTrk_SNR_L@layerL@ladderS@sensor@view",
129 "SNR of Clusters Related to Tracks in @layer.@ladder.@sensor @view/@side side",
131 hClusterTrkSNR.GetXaxis()->SetTitle(
"SNR");
134 TH1F hClusterTrkEnergy(
"clusterTrk_energy_L@layerL@ladderS@sensor@view",
135 "Energy of Clusters Related to Tracks in @layer.@ladder.@sensor @view/@side side",
137 hClusterTrkEnergy.GetXaxis()->SetTitle(
"energy (keV)");
140 TH1F hClusterTrkTime(
"clusterTrk_time_L@layerL@ladderS@sensor@view",
141 "Time of Clusters Related to Tracks in @layer.@ladder.@sensor @view/@side side",
143 hClusterTrkTime.GetXaxis()->SetTitle(
"time (ns)");
146 TH1F hClusterTrkInterstripPos(
"clusterTrk_interstripPos_L@layerL@ladderS@sensor@view",
147 "Interstrip Position of Clusters Related to Tracks in @layer.@ladder.@sensor @view/@side side",
149 hClusterTrkInterstripPos.GetXaxis()->SetTitle(
"interstrip position");
153 m_nTracks =
new TH1F(
"h1nTracks",
"number of Tracks per event", 50, 0, 50);
154 m_nTracks->GetXaxis()->SetTitle(
"n Tracks");
155 m_Pvalue =
new TH1F(
"h1pValue",
"Tracks p value", 100, 0, 1);
156 m_Pvalue->GetXaxis()->SetTitle(
"p value");
157 m_mom =
new TH1F(
"h1momentum",
" Tracks Momentum", 200, 0, 10);
158 m_mom->GetXaxis()->SetTitle(
"p (GeV/c)");
159 m_nSVDhits =
new TH1F(
"h1nSVDhits",
"# SVD hits per track", 20, 0, 20);
160 m_nSVDhits->GetXaxis()->SetTitle(
"# SVD hits");
171 float c_eTOkeV = 3.6 / 1000;
190 for (
int cl = 0 ; cl < (int)svdClustersTrack.
size(); cl++) {
192 float clCharge = svdClustersTrack[cl]->getCharge();
193 float clEnergy = svdClustersTrack[cl]->getCharge() * c_eTOkeV;
194 int clSize = svdClustersTrack[cl]->getSize();
195 float clSN = svdClustersTrack[cl]->getSNR();
196 float clTime = svdClustersTrack[cl]->getClsTime();
197 float clPosition = svdClustersTrack[cl]->getPosition();
199 int side = svdClustersTrack[cl]->isUCluster();
205 float clInterstripPos = fmod(clPosition, pitch) / pitch;
221 B2DEBUG(1,
"%%%%%%%% NEW EVENT, number of Tracks = " <<
m_Tracks.getEntries());
226 for (
int digi = 0 ; digi <
m_svdRecos.getEntries(); digi++) {
252 bool isAssigned =
false;
254 if (theRC.
size() > 0) {
278 B2INFO(
"SVDB4CommissioningPlotsModule::endRun(), writing the histograms");
283 TDirectory* oldDir = gDirectory;
285 TDirectory* dir_track = oldDir->mkdir(
"tracks");
292 TDirectory* dir_reco = oldDir->mkdir(
"recoDigits");
293 TDirectory* dir_clusterAssigned = oldDir->mkdir(
"clusters_assigned");
294 TDirectory* dir_clusterNotAssigned = oldDir->mkdir(
"clusters_not_assigned");
299 TString layerName = Form(
"layer%d", layer.getLayerNumber());
300 TDirectory* dir_reco_layer = dir_reco->mkdir(layerName.Data());
301 TDirectory* dir_clusterAssigned_layer = dir_clusterAssigned->mkdir(layerName.Data());
302 TDirectory* dir_clusterNotAssigned_layer = dir_clusterNotAssigned->mkdir(layerName.Data());
303 for (
auto ladder : geoCache.getLadders(layer))
307 dir_reco_layer->cd();
312 dir_clusterAssigned_layer->cd();
319 dir_clusterNotAssigned_layer->cd();