57#if !(!defined(__CLING__) || defined(__MAKECLING__))
61 const Int_t nColors = 16;
62 Int_t ColorMap[nColors] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 49, 11, 12, 13, 14, 15, 16};
65 const Int_t boxWidth = 40;
66 const Int_t boxHeigth = 200;
67 const Int_t Bins = 400;
69 TString inFileNameBase =
Form(
"dst-%d.root", runID);
71 TString inFileNameEve =
Form(
"eve-%d-isAll.root", runID);
78 Form(
"dst-%d-emb-qgsm-4h-isAll-BaseOff.root", runID);
80 TString fnames[
COLS] = {inFileNameEve, inFileNameEmb};
82 TString EHNames[
COLS] = {
"MCEventHeader.",
"DstEventHeader."};
83 TString hitNames[
COLS] = {
"StsPoint",
"BmnInnerHits"};
84 TString hitNamesGEM[
COLS] = {
"StsPoint",
"BmnGemStripHit"};
85 TString hitNamesSil[
COLS] = {
"SiliconPoint",
"BmnSiliconHit"};
86 TString hitNamesCSC[
COLS] = {
"CSCPoint",
"BmnCSCHit"};
87 TString trackNames[
COLS] = {
"MCTrack",
"BmnGlobalTrack"};
100 hHitMatch[0][0] =
new TH2D(
"hHM-XZ-MC",
"Hits XZ MC", Bins, -boxWidth, boxWidth, Bins, 0, boxHeigth);
101 hHitMatch[0][1] =
new TH2D(
"hHM-YZ-MC",
"Hits YZ MC", Bins, -boxWidth, boxWidth, Bins, 0, boxHeigth);
102 hHitMatch[1][0] =
new TH2D(
"hHM-XZ-Emb",
"Hits XZ Emb", Bins, -boxWidth, boxWidth, Bins, 0, boxHeigth);
103 hHitMatch[1][1] =
new TH2D(
"hHM-YZ-Emb",
"Hits YZ Emb", Bins, -boxWidth, boxWidth, Bins, 0, boxHeigth);
121 TString xmlConfFileName = fPeriodID == 7 ?
"SiliconRunSpring2018.xml" :
"SiliconRunSpring2017.xml";
122 xmlConfFileName =
TString(getenv(
"VMCWORKDIR")) +
"/parameters/silicon/XMLConfigs/" + xmlConfFileName;
123 printf(
"xmlConfFileName %s\n", xmlConfFileName.
Data());
126 xmlConfFileName = fPeriodID == 7 ?
"GemRunSpring2018.xml" :
"GemRunSpring2017.xml";
127 xmlConfFileName =
TString(getenv(
"VMCWORKDIR")) +
"/parameters/gem/XMLConfigs/" + xmlConfFileName;
128 printf(
"xmlConfFileName %s\n", xmlConfFileName.
Data());
131 xmlConfFileName = fPeriodID == 7 ?
"CSCRunSpring2018.xml" :
"CSCRunSpring2017.xml";
132 xmlConfFileName =
TString(getenv(
"VMCWORKDIR")) +
"/parameters/csc/XMLConfigs/" + xmlConfFileName;
133 printf(
"xmlConfFileName %s\n", xmlConfFileName.
Data());
137 vector<vector<vector<UInt_t>>> hitVectorSil;
138 vector<vector<vector<UInt_t>>> ptVectorSil;
139 vector<vector<vector<Double_t>>> effVectorSil;
142 vector<vector<UInt_t>> row;
143 row.resize(st->
GetNModules(), vector<UInt_t>(2, 0));
144 hitVectorSil.push_back(row);
145 ptVectorSil.push_back(row);
146 vector<vector<Double_t>> rowDbl;
147 rowDbl.resize(st->
GetNModules(), vector<Double_t>(2, 0.0));
148 effVectorSil.push_back(rowDbl);
151 vector<vector<vector<UInt_t>>> hitVectorGem;
152 vector<vector<vector<UInt_t>>> ptVectorGem;
153 vector<vector<vector<Double_t>>> effVectorGem;
156 vector<PadInfo*> canStripPads;
157 vector<PadInfo*> canStripPads2D;
158 vector<TH2D*> ptsHistGemSt;
159 vector<TH2D*> effHistGemSt;
160 vector<TH1D*> effHistGemStResX;
161 vector<TH1D*> effHistGemStResY;
162 vector<vector<vector<TH1D*>>> ptsHistGem;
163 vector<vector<vector<TH1D*>>> effHistGem;
164 vector<vector<vector<TH2D*>>> ptsHistGem2D;
165 vector<vector<vector<TH2D*>>> effHistGem2D;
166 const Int_t StBinX = 200;
167 const Int_t StBinY = 100;
174 vector<vector<UInt_t>> row;
175 row.resize(st->
GetNModules(), vector<UInt_t>(2, 0));
176 hitVectorGem.push_back(row);
177 ptVectorGem.push_back(row);
178 vector<vector<Double_t>> rowDbl;
179 rowDbl.resize(st->
GetNModules(), vector<Double_t>(2, 0.0));
180 effVectorGem.push_back(rowDbl);
182 TH2D* hst =
new TH2D(
n.Data(),
n.Data(), StBinX,
190 ptsHistGemSt.push_back(hst);
192 n =
Form(
"h-eff-%d", iStation);
193 TH2D* hstEff =
new TH2D(
n.Data(),
n.Data(), StBinX,
201 effHistGemSt.push_back(hstEff);
203 n =
Form(
"h-resX-%d", iStation);
204 TH1D* hrx =
new TH1D(
n.Data(),
n.Data(), StBinX, -ResMax, ResMax);
205 effHistGemStResX.push_back(hrx);
207 n =
Form(
"h-resY-%d", iStation);
208 TH1D* hry =
new TH1D(
n.Data(),
n.Data(), StBinX, -ResMax, ResMax);
209 effHistGemStResY.push_back(hry);
211 vector<vector<TH1D*>> hmods;
212 vector<vector<TH1D*>> hmodsEff;
213 vector<vector<TH2D*>> hmods2D;
214 vector<vector<TH2D*>> hmodsEff2D;
217 if (maxLayers < mod->GetNStripLayers() / 2)
219 vector<TH1D*> hzones;
220 vector<TH1D*> hzonesEff;
221 vector<TH2D*> hzones2D;
222 vector<TH2D*> hzonesEff2D;
226 TString name =
Form(
"h-pts-%d-%d-%d", iStation, iMod, iZone);
231 name = name +
"-projection";
235 hzones2D.push_back(h2d);
237 name =
Form(
"h-eff-%d-%d-%d", iStation, iMod, iZone);
242 name = name +
"-projection";
245 hzonesEff.push_back(heff);
246 hzonesEff2D.push_back(heff2d);
248 hmods2D.push_back(hzones2D);
249 hmodsEff2D.push_back(hzonesEff2D);
250 hmods.push_back(hzones);
251 hmodsEff.push_back(hzonesEff);
253 ptsHistGem2D.push_back(hmods2D);
254 effHistGem2D.push_back(hmodsEff2D);
255 ptsHistGem.push_back(hmods);
256 effHistGem.push_back(hmodsEff);
259 TString name =
"Gem_Eff_Canvas";
261 name =
"Gem_Eff_Canvas2D";
263 canGemStrip->
Divide(maxLayers, sumMods);
264 canGemStrip2D->
Divide(maxLayers, sumMods);
265 canStripPads.resize(sumMods * maxLayers);
266 canStripPads2D.resize(sumMods * maxLayers);
275 p->
current = effHistGem[iStation][iModule][iZone];
278 p2D->
current = effHistGem2D[iStation][iModule][iZone];
279 Int_t iPad = modCtr * maxLayers + iZone;
280 canStripPads[iPad] = p;
282 canStripPads2D[iPad] = p2D;
289 vector<vector<vector<UInt_t>>> hitVectorCSC;
290 vector<vector<vector<UInt_t>>> ptVectorCSC;
291 vector<vector<vector<Double_t>>> effVectorCSC;
294 vector<vector<UInt_t>> row;
295 row.resize(st->
GetNModules(), vector<UInt_t>(2, 0));
296 hitVectorCSC.push_back(row);
297 ptVectorCSC.push_back(row);
298 vector<vector<Double_t>> rowDbl;
299 rowDbl.resize(st->
GetNModules(), vector<Double_t>(2, 0.0));
300 effVectorCSC.push_back(rowDbl);
305 files[
i] =
new TFile(fnames[
i],
"READ");
306 if (files[
i]->IsOpen())
307 printf(
"file %s opened\n", fnames[
i].Data());
309 fprintf(stderr,
"file %s open error\n", fnames[
i].Data());
313 trees[
i] = (
TTree*)files[
i]->Get(treeNames[
i]);
345 printf(
"Gathering hits<->points correspondence:\n");
347 for (
Int_t iEv = 0; iEv < nEvs; iEv++) {
350 UInt_t EventId = MCEH->GetEventID();
356 while (iExpEvent < 1000000) {
360 if (EventId == EHs[
i]->GetEventId())
362 if (EventId < EHs[
i]->GetEventId()) {
363 printf(
"\n%d tree %u event lost!\n",
i, EventId);
368 (vector<vector<vector<TH2*>>>&)effHistGem2D);
391 printf(
"\nHit Maker Efficiency BigZone HotZone \n");
393 printf(
"GEM Station = %d\n", iStation);
395 effHistGemSt[iStation]->Divide(ptsHistGemSt[iStation]);
397 effHistGemSt[iStation]->Draw(
"colz");
398 cc->
SaveAs(
Form(
"eff-lam-corr-station_%d.png", iStation));
419 printf(
"\tiMod = %d\n", iMod);
422 Double_t ptInt = ptsHistGem2D[iStation][iMod][iZone]->Integral();
425 eff = effHistGem2D[iStation][iMod][iZone]->Integral() / ptInt;
432 effHistGem[iStation][iMod][iZone]->Divide(ptsHistGem[iStation][iMod][iZone]);
484 cout <<
"#recorded entries = " << nEvs <<
" in " << fnames[0] << endl;
491 iEv = (iEv == 0) ? iEv : iEv - 1;
494 iEv = (iEv < nEvs) ? iEv + 1 : iEv;
504 UInt_t EventId = MCEH->GetEventID();
505 printf(
"iEv = %d EventId = %u \n", iEv, EventId);
526 hHitMatch[
i][row]->
Reset();
535 hHitMatch[
i][0]->
Fill(hit->GetX(), hit->GetZ());
536 hHitMatch[
i][1]->
Fill(hit->GetY(), hit->GetZ());
541 hHitMatch[
i][0]->
Fill(hit->GetX(), hit->GetZ());
542 hHitMatch[
i][1]->
Fill(hit->GetY(), hit->GetZ());
635 hHitMatch[col][row]->
Draw(
"SAME");
637 hHitMatch[col][row]->
Draw(
"");
642 can->SaveAs(
Form(
"can-%d.pdf", runID));
647 delete hHitMatch[
i][j];