11 #include <svd/modules/svdChargeSharing/SVDChargeSharingAnalysisModule.h>
13 #include <TDirectory.h>
14 #include <TCollection.h>
15 #include <reconstruction/dataobjects/VXDDedxTrack.h>
16 #include <vxd/geometry/GeoCache.h>
17 #include <mdst/dataobjects/HitPatternVXD.h>
19 #include <boost/foreach.hpp>
52 setDescription(
"Module for monitoring DSSD cluster charge deposition");
55 addParam(
"outputDirName", m_outputDirName,
"Name of the output directory.");
56 addParam(
"outputRootFileName", m_outputRootFileName,
"Name of output rootfile.");
57 addParam(
"useTrackInfo", m_useTrackInfo,
"True if using clusters related to tracks in the analysis",
bool(
true));
100 TString nameSensorType =
"";
103 for (
int j = 0; j <
m_nSides; j++) {
104 TString nameSide =
"";
105 nameSide = (j > 0 ?
"U" :
"V");
108 NameOfHisto =
"DSSDClusterSize_" + nameSensorType +
"Side_" + nameSide;
109 TitleOfHisto =
"DSSD Cluster Size: " + nameSensorType +
", Side " + nameSide;
112 NameOfHisto =
"DSSDClusterSizeVsMomentum_" + nameSensorType +
"Side_" + nameSide;
113 TitleOfHisto =
"DSSD Cluster Size vs. Track Momentum: " + nameSensorType +
", Side " + nameSide;
117 NameOfHisto =
"DSSDClusterSizeVsIncidentAngle_" + nameSensorType +
"Side_" + nameSide;
118 TitleOfHisto =
"DSSD Cluster Size vs. Incident Angle: " + nameSensorType +
", Side " + nameSide;
122 NameOfHisto =
"DSSDClusterSizeVsSNR_" + nameSensorType +
"Side_" + nameSide;
123 TitleOfHisto =
"DSSD Cluster Size vs. SNR: " + nameSensorType +
", Side " + nameSide;
128 TString nameclSize =
"";
129 if (k < 2) nameclSize += k + 1;
130 else nameclSize +=
">= 3";
133 NameOfHisto =
"DSSDClusterCharge_" + nameSensorType +
"Side_" + nameSide +
"clSize_" + nameclSize;
134 TitleOfHisto =
"DSSD Cluster Charge: " + nameSensorType +
", Side " + nameSide +
", clSize " + nameclSize;
138 NameOfHisto =
"DSSDClusterChargeVsMomentum_" + nameSensorType +
"Side_" + nameSide +
"clSize_" + nameclSize;
139 TitleOfHisto =
"DSSD Cluster Charge vs. Track Momentum: " + nameSensorType +
", Side " + nameSide +
", clSize " + nameclSize;
144 NameOfHisto =
"DSSDClusterChargeVsIncidentAngle_" + nameSensorType +
"Side_" + nameSide +
"clSize_" + nameclSize;
145 TitleOfHisto =
"DSSD Cluster Charge vs. Incident Angle: " + nameSensorType +
", Side " + nameSide +
", clSize " + nameclSize;
150 NameOfHisto =
"DSSDClusterChargeVsSNR_" + nameSensorType +
"Side_" + nameSide +
"clSize_" + nameclSize;
151 TitleOfHisto =
"DSSD Cluster Charge vs. SNR: " + nameSensorType +
", Side " + nameSide +
", clSize " + nameclSize;
156 NameOfHisto =
"DSSDClusterSNR_" + nameSensorType +
"Side_" + nameSide +
"clSize_" + nameclSize;
157 TitleOfHisto =
"DSSD Cluster SNR: " + nameSensorType +
", Side " + nameSide +
", clSize " + nameclSize;
161 NameOfHisto =
"DSSDClusterSNRVsMomentum_" + nameSensorType +
"Side_" + nameSide +
"clSize_" + nameclSize;
162 TitleOfHisto =
"DSSD Cluster SNR vs. Track Momentum: " + nameSensorType +
", Side " + nameSide +
", clSize " + nameclSize;
166 NameOfHisto =
"DSSDClusterSNRVsIncAngle_" + nameSensorType +
"Side_" + nameSide +
"clSize_" + nameclSize;
167 TitleOfHisto =
"DSSD Cluster SNR vs. Incident Angle: " + nameSensorType +
", Side " + nameSide +
", clSize " + nameclSize;
178 B2ERROR(
" you must use track information! change the module parameter to TRUE");
202 for (
int cl = 0; cl < static_cast<int>(svdClustersTrack.
size()); cl++) {
203 VxdID cl_VxdID = svdClustersTrack[cl]->getSensorID();
207 int side =
static_cast<int>(svdClustersTrack[cl]->isUCluster());
208 float clCharge = svdClustersTrack[cl]->getCharge();
209 float clSNR = svdClustersTrack[cl]->getSNR();
210 unsigned short clSize = svdClustersTrack[cl]->getSize();
211 unsigned short clSizeIndex;
212 unsigned short sensTypeIndex;
219 clSizeIndex = clSize >= 3 ? 2 : clSize - 1;
232 h_clCharge[sensTypeIndex][side][clSizeIndex]->Fill(clCharge);
235 h_clChargeVsSNR[sensTypeIndex][side][clSizeIndex]->Fill(clSNR, clCharge);
238 h_clSize[sensTypeIndex][side]->Fill(clSize);
244 h_clSNR[sensTypeIndex][side][clSizeIndex]->Fill(clSNR);
260 for (
int j = 0; j <
m_nSides; j++) {
261 std::string nameSensorType =
"";
263 std::string nameSide =
"";
264 nameSide = (j > 0 ?
"U" :
"V");
267 c->SaveAs((
m_outputDirName +
"/clChargeComparison_" + nameSensorType + nameSide +
".png").c_str());
270 gSystem->ProcessEvents();
274 c->SaveAs((
m_outputDirName +
"/clSNRComparison_" + nameSensorType + nameSide +
".png").c_str());
277 gSystem->ProcessEvents();
284 TDirectory* oldDir = gDirectory;
286 TDirectory* dir_clCharge = oldDir->mkdir(
"clCharge");
287 TDirectory* dir_clChargeVsSNR = oldDir->mkdir(
"clChargeVsSNR");
288 TDirectory* dir_clSize = oldDir->mkdir(
"clSize");
289 TDirectory* dir_clSNR = oldDir->mkdir(
"clSNR");
295 dir_clChargeSt->cd();
299 while ((obj =
dynamic_cast<TH1F*
>(nextH_clCharge()))) {
304 dir_clChargeVsSNR->cd();
305 TDirectory* dir_clChargeVsSNRSt = dir_clChargeVsSNR->mkdir(
m_nameSensorTypes[i].c_str());
306 dir_clChargeVsSNRSt->cd();
308 while ((obj =
dynamic_cast<TH2F*
>(nextH_clChargeVsSNR()))) {
317 while ((obj =
dynamic_cast<TH1F*
>(nextH_clSize()))) {
326 while ((obj =
dynamic_cast<TH1F*
>(nextH_clSNR()))) {
335 Int_t nbins, Double_t min, Double_t max,
336 const char* xtitle,
const char* ytitle, TList* histoList)
338 TH1F* h =
new TH1F(name, title, nbins, min, max);
339 h->GetXaxis()->SetTitle(xtitle);
340 h->GetYaxis()->SetTitle(ytitle);
348 Int_t nbinsX, Double_t minX, Double_t maxX,
350 Int_t nbinsY, Double_t minY, Double_t maxY,
351 const char* titleY, TList* histoList)
354 TH2F* h =
new TH2F(name, title, nbinsX, minX, maxX, nbinsY, minY, maxY);
356 h->GetXaxis()->SetTitle(titleX);
357 h->GetYaxis()->SetTitle(titleY);
367 TCanvas* c =
new TCanvas(
"c",
"c");
370 gStyle->SetOptStat(0);
371 gStyle->SetOptTitle(0);
372 gStyle->SetCanvasPreferGL(1);
374 h1->SetLineColor(kRed);
375 h1->SetFillColorAlpha(kRed, 0.35);
377 h2->SetLineColor(kBlue);
378 h2->SetFillColorAlpha(kBlue, 0.35);
380 h3->SetLineColor(kGreen);
381 h3->SetFillColorAlpha(kGreen, 0.35);
383 h2->GetYaxis()->SetTitleOffset(1.4);
388 auto legend =
new TLegend(0.7, 0.7, 0.9, 0.9);
389 legend->SetTextAlign(22);
390 legend->AddEntry(h1,
"clSize 1",
"f");
391 legend->AddEntry(h2,
"clSize 2",
"f");
392 legend->AddEntry(h3,
"clSize >= 3",
"f");