14 fName = title +
"_cl";
19 const vector<Color_t> ChipColors{kBlue, kYellow + 3, kGreen + 2, kRed, kMagenta - 1};
21 numberOfStrips = stationSet->GetSiliconStation(0)->GetModule(0)->GetStripLayer(0).GetNStrips();
22 Int_t numberOfStations = stationSet->GetNStations();
23 nStations = numberOfStations;
24 canStripPads.resize(nStations);
25 canSignalPads.resize(nStations);
26 canStripSignalPads.resize(nStations);
27 canStripNoisePads.resize(nStations);
28 canChipSignalPads.resize(nStations);
30 NamesStrip.resize(nStations);
31 NamesSignal.resize(nStations);
32 NamesStripSignal.resize(nStations);
33 NamesStripNoise.resize(nStations);
34 NamesChipSignal.resize(nStations);
36 for (Int_t iStation = 0; iStation < nStations; iStation++) {
38 vector<vector<TH1I*>> rowSilicon;
39 vector<vector<Double_t>> signalsInModule;
40 vector<TH2F*> rowSilicon2D;
41 vector<vector<TH2F*>> firstStrip_Signal;
42 vector<vector<TH1F*>> firstStrip_Noise;
43 vector<vector<vector<TH1F*>>> rowChipSignal;
47 if ((Int_t)maxMods < st->GetNModules())
50 for (Int_t iModule = 0; iModule < st->
GetNModules(); iModule++) {
51 vector<TH1I*> colSilicon;
52 vector<Double_t> signalsInLayers;
53 vector<TH2F*> secondStripSignal;
54 vector<TH1F*> secondStripNoise;
55 vector<vector<TH1F*>> colChipSignal;
58 if ((Int_t)maxLayers < mod->GetNStripLayers())
60 for (Int_t iLayer = 0; iLayer < 2 ; iLayer++) {
61 vector<TH1F*> layerChipSignal;
63 signalsInLayers.push_back(0);
64 name = Form(fTitle +
"_Station_%d_module_%d_layer_%d", iStation, iModule, iLayer);
66 h->GetXaxis()->SetTitle(
"Strip Number");
67 h->GetYaxis()->SetTitle(
"Activation Count");
74 colSilicon.push_back(h);
76 name = Form(fTitle +
"StripVsSignal" +
"_Station_%d_module_%d_layer_%d", iStation, iModule, iLayer);
78 hist->GetXaxis()->SetTitle(
"Strip Number");
79 hist->GetYaxis()->SetTitle(
"Signal");
81 secondStripSignal.push_back(hist);
83 name = Form(fTitle +
"StripVsNoise" +
"_Station_%d_module_%d_layer_%d", iStation, iModule, iLayer);
85 stripNoise->SetTitle(name);
86 stripNoise->GetXaxis()->SetTitle(
"Strip Number");
87 stripNoise->GetYaxis()->SetTitle(
"Noise");
88 stripNoise->SetLineWidth(2);
90 stripNoise->SetLineColor(1);
92 stripNoise->SetLineColor(2);
95 secondStripNoise.push_back(stripNoise);
97 for (UInt_t iChip = 0; iChip < numberOfChips; ++iChip) {
98 name = Form(fTitle +
"ChipSignal" +
"_Station_%d_module_%d_layer_%d_chip_%d", iStation, iModule,
100 TH1F* chipSignal =
new TH1F(name, name, 500, 0, 2500);
101 chipSignal->GetXaxis()->SetTitle(
"Signal");
102 chipSignal->GetYaxis()->SetTitle(
"Count");
103 chipSignal->SetLineColor(ChipColors[iChip]);
104 chipSignal->SetLineWidth(2);
106 layerChipSignal.push_back(chipSignal);
108 colChipSignal.push_back(layerChipSignal);
110 name = Form(
"Signal_Layer0_Layer1_st%d_mod%d", iStation, iModule);
111 TH2F* h =
new TH2F(name, name, 250, 0, 2500, 250, 0, 2500);
112 h->GetXaxis()->SetTitle(
"Signal in layer 0");
113 h->GetYaxis()->SetTitle(
"Signal in layer 1");
115 rowSilicon2D.push_back(h);
116 signalsInModule.push_back(signalsInLayers);
117 firstStrip_Signal.push_back(secondStripSignal);
118 firstStrip_Noise.push_back(secondStripNoise);
119 rowSilicon.push_back(colSilicon);
120 rowChipSignal.push_back(colChipSignal);
122 histSiliconStrip.push_back(rowSilicon);
123 signalSilicon.push_back(signalsInModule);
124 histSiliconSignal2D.push_back(rowSilicon2D);
125 histSiliconStripSignal.push_back(firstStrip_Signal);
126 histSiliconStripNoise.push_back(firstStrip_Noise);
127 histSiliconChipSignal.push_back(rowChipSignal);
131 name = fTitle +
"Canvas";
133 name = fTitle +
"SignalCanvas";
135 name = fTitle +
"StripSignalCanvas";
136 canSiliconStripSignal =
new TCanvas(name, name,
PAD_WIDTH * maxLayers,
PAD_HEIGHT * sumMods);
137 name = fTitle +
"StripNoiseCanvas";
138 canSiliconStripNoise =
new TCanvas(name, name,
PAD_WIDTH * maxLayers,
PAD_HEIGHT * sumMods);
139 name = fTitle +
"ChipSignalCanvas";
140 canSiliconChipSignal =
new TCanvas(name, name,
PAD_WIDTH * maxLayers,
PAD_HEIGHT * sumMods);
142 for (Int_t iStation = 0; iStation < numberOfStations; iStation++) {
145 canStripPads[iStation].resize(numberOfModules * 1);
146 canSignalPads[iStation].resize(numberOfModules * 1);
147 canStripSignalPads[iStation].resize(numberOfModules * maxLayers);
148 canStripNoisePads[iStation].resize(numberOfModules * 1);
149 canChipSignalPads[iStation].resize(numberOfModules * maxLayers);
150 NamesStrip[iStation].resize(numberOfModules * 1);
151 NamesSignal[iStation].resize(numberOfModules * 1);
152 NamesStripSignal[iStation].resize(numberOfModules * maxLayers);
153 NamesStripNoise[iStation].resize(numberOfModules * 1);
154 NamesChipSignal[iStation].resize(numberOfModules * maxLayers);
163 if (fStation == stationNumber)
170 fStation = stationNumber;
174 for (
auto& pad : canStripPads[fStation])
178 for (
auto& pad : canSignalPads[fStation])
182 for (
auto& pad : canStripSignalPads[fStation])
186 for (
auto& pad : canSignalPads[fStation])
190 for (
auto& pad : canChipSignalPads[fStation])
194 const vector<TString> LayerNames{
"p+",
"n+"};
195 for (Int_t iModule = 0; iModule < numberOfModules; iModule++) {
197 Int_t iPad = iModule;
199 Double_t l_x0 = 0.15;
200 Double_t l_y0 = 0.75;
203 TLegend* legend =
new TLegend(l_x0, l_y0, l_x0 + l_w, l_y0 + l_h);
204 legend->SetTextSize(0.03);
205 for (Int_t iLayer = 0; iLayer < 2 ; iLayer++) {
206 legend->AddEntry(histSiliconStrip[fStation][iModule][iLayer], LayerNames[iLayer]);
207 p->
aux.push_back(histSiliconStrip[fStation][iModule][iLayer]);
210 canStripPads[fStation][iPad] = p;
211 canSiliconStrip->GetPad(iPad + 1)->SetGrid();
212 NamesStrip[fStation][iPad] = canStripPads[fStation][iPad]->name;
216 for (Int_t iModule = 0; iModule < numberOfModules; iModule++) {
219 p->
current = histSiliconSignal2D[fStation][iModule];
220 Int_t iPad = iModule;
221 canSignalPads[fStation][iPad] = p;
222 canSiliconSignal->GetPad(iPad + 1)->SetGrid();
223 NamesSignal[fStation][iPad] = canSignalPads[fStation][iPad]->current->GetName();
228 for (Int_t iModule = 0; iModule < numberOfModules; iModule++) {
229 for (Int_t iLayer = 0; iLayer < 2 ; iLayer++) {
232 p->
current = histSiliconStripSignal[fStation][iModule][iLayer];
233 Int_t iPad = modCtr * maxLayers + iLayer;
234 canStripSignalPads[fStation][iPad] = p;
235 canSiliconStripSignal->GetPad(iPad + 1)->SetGrid();
236 NamesStripSignal[fStation][iPad] = canStripSignalPads[fStation][iPad]->current->GetName();
242 for (Int_t iModule = 0; iModule < numberOfModules; iModule++) {
245 Double_t l_x0 = 0.15;
246 Double_t l_y0 = 0.75;
249 TLegend* legend =
new TLegend(l_x0, l_y0, l_x0 + l_w, l_y0 + l_h);
250 legend->SetTextSize(0.03);
251 for (Int_t iLayer = 0; iLayer < 2 ; iLayer++) {
252 legend->AddEntry(histSiliconStripNoise[fStation][iModule][iLayer], LayerNames[iLayer]);
253 p->
aux.push_back(histSiliconStripNoise[fStation][iModule][iLayer]);
256 Int_t iPad = iModule;
257 p->
name = Form(fTitle +
"StripVsNoise" +
"_Station_%d_module_%d", fStation, iModule);
258 canStripNoisePads[fStation][iPad] = p;
259 canSiliconStripNoise->GetPad(iPad + 1)->SetGrid();
260 NamesStripNoise[stationNumber][iPad] = canStripNoisePads[stationNumber][iPad]->name;
264 for (Int_t iModule = 0; iModule < numberOfModules; iModule++) {
265 for (Int_t iLayer = 0; iLayer < 2; iLayer++) {
268 Double_t l_x0 = 0.75;
272 TLegend* legend =
new TLegend(l_x0, l_y0, l_x0 + l_w, l_y0 + l_h);
273 legend->SetTextSize(0.04);
274 for (UInt_t iChip = 0; iChip < numberOfChips; iChip++) {
275 legend->AddEntry(histSiliconChipSignal[fStation][iModule][iLayer][iChip], Form(
"ASIC# %d", iChip + 1));
276 p->
aux.push_back(histSiliconChipSignal[fStation][iModule][iLayer][iChip]);
279 Int_t iPad = modCtr * maxLayers + iLayer;
280 p->
name = Form(fTitle +
"ChipSignal" +
"_Station_%d_module_%d", fStation, iModule);
281 canChipSignalPads[fStation][iPad] = p;
282 canSiliconChipSignal->GetPad(iPad + 1)->SetGrid();
283 NamesChipSignal[fStation][iPad] = canChipSignalPads[fStation][iPad]->name;
284 canSiliconChipSignal->GetPad(iPad + 1)->SetTitle(NamesChipSignal[fStation][iPad]);
290 canSiliconStrip->UpdateAsync();
291 canSiliconSignal->UpdateAsync();
292 canSiliconStripSignal->UpdateAsync();
293 canSiliconStripNoise->UpdateAsync();
294 canSiliconChipSignal->UpdateAsync();
296 canSiliconStrip->Modified();
297 canSiliconSignal->Modified();
298 canSiliconStripSignal->Modified();
299 canSiliconStripNoise->Modified();
300 canSiliconChipSignal->Modified();
327 canSiliconChipSignal->Clear();
328 canSiliconStrip->Clear();
329 canSiliconSignal->Clear();
330 canSiliconStripSignal->Clear();
331 canSiliconStripNoise->Clear();
333 canSiliconStrip->SetWindowSize(
PAD_WIDTH * maxLayers, 400 * numberOfModules);
334 canSiliconSignal->SetWindowSize(
PAD_WIDTH * maxLayers, 400 * numberOfModules);
335 canSiliconStripSignal->SetWindowSize(
PAD_WIDTH * maxLayers, 400 * numberOfModules);
336 canSiliconStripNoise->SetWindowSize(
PAD_WIDTH * maxLayers, 400 * numberOfModules);
337 canSiliconChipSignal->SetWindowSize(
PAD_WIDTH * maxLayers, 400 * numberOfModules);
339 canSiliconStrip->Divide(1, numberOfModules, 0.01, 0.01 / numberOfModules);
340 canSiliconSignal->Divide(1, numberOfModules, 0.01, 0.01 / numberOfModules);
341 canSiliconStripSignal->Divide(maxLayers, numberOfModules, 0.01 / maxLayers, 0.01 / numberOfModules);
342 canSiliconStripNoise->Divide(1, numberOfModules, 0.01, 0.01 / numberOfModules);
343 canSiliconChipSignal->Divide(maxLayers, numberOfModules, 0.01 / maxLayers, 0.01 / numberOfModules);
349 delete canSiliconStrip;
350 delete canSiliconSignal;
351 delete canSiliconStripSignal;
352 delete canSiliconStripNoise;
355 for (Int_t iStation = 0; iStation < nStations; ++iStation) {
356 for (
auto pad : canStripPads[iStation])
360 for (
auto padSignal : canSignalPads[iStation])
364 for (
auto padStripSignal : canStripSignalPads[iStation])
366 delete padStripSignal;
368 for (
auto padStripNoise : canStripNoisePads[iStation])
370 delete padStripNoise;
372 for (
auto padChipSignal : canChipSignalPads[iStation])
374 delete padChipSignal;
376 for (
size_t iSt = 0; iSt < histSiliconStrip.size(); ++iSt) {
377 for (
size_t iMod = 0; iMod < histSiliconStrip[iSt].size(); ++iMod) {
378 for (
size_t iLayer = 0; iLayer < histSiliconStrip[iSt][iMod].size(); ++iLayer) {
379 delete histSiliconStrip[iSt][iMod][iLayer];
380 delete histSiliconStripSignal[iSt][iMod][iLayer];
381 delete histSiliconStripNoise[iSt][iMod][iLayer];
382 for (UInt_t iChip = 0; iChip < numberOfChips; iChip++)
383 delete histSiliconChipSignal[iSt][iMod][iLayer][iChip];
385 delete histSiliconSignal2D[iSt][iMod];
460 TClonesArray* siliconDigits = fDigiArrays->
silicon;
463 for (Int_t digIndex = 0; digIndex < siliconDigits->GetEntriesFast(); digIndex++) {
465 Int_t
module = gs->GetModule();
469 histSiliconStrip[station][module][layer]->Fill(siliconStrip);
470 histSiliconStripSignal[station][module][layer]->Fill(siliconStrip, gs->
GetStripSignal());
471 histSiliconStripNoise[station][module][layer]->SetBinContent(siliconStrip, gs->
GetStripNoise());
473 histSiliconChipSignal[station][module][layer][Int_t(siliconStrip / (numberOfStrips / numberOfChips))]->Fill(
477 for (
size_t iStation = 0; iStation < signalSilicon.size(); ++iStation)
478 for (
size_t iModule = 0; iModule < signalSilicon[iStation].size(); ++iModule)
479 if (signalSilicon[iStation][iModule][0] && signalSilicon[iStation][iModule][1]) {
480 histSiliconSignal2D[iStation][iModule]->Fill(signalSilicon[iStation][iModule][0],
481 signalSilicon[iStation][iModule][1]);