52float idchambers[59] = {27.1, 28.1, 3.1, 1.1, 29.1, 4.1, 33.1, 30.1, 5.1, 19.3, 31.1, 6.1,
53 2.1, 32.1, 15.2, 16.2, 17.2, 18.2, 19.2, 20.2, 7.1, 115.2, 113.1, 117.1,
54 35.1, 9.1, 37.1, 11.1, 39.1, 13.1, 34.1, 8.1, 36.1, 10.1, 38.1, 12.1,
55 21.2, 23.2, 25.2, 22.2, 24.2, 26.2, 107.2, 108.2, 109.2, 110.2, 111.2, 112.2,
56 114.1, 116.2, 118.1, 14.1, 40.1, 119.2, 120.2, 121.2, 122.2, 123.2, 124.2};
62int champos_left[30] = {25, 26, 11, 9, 27, 12, 31, 28, 13, 23, 29, 14, 10, 30, 17,
63 18, 19, 20, 21, 22, 15, 16, 8, 24, 1, 3, 5, 33, 35, 37};
65int champos_right[
NUMBER_CHAMBERS - 30] = {25, 9, 27, 11, 29, 13, 24, 8, 26, 10, 28, 12, 17, 19, 21,
66 18, 20, 22, 1, 3, 5, 15, 23, 31, 14, 30, 33, 35, 37};
81#if ROOT_VERSION_CODE < ROOT_VERSION(5, 99, 99)
82 gROOT->LoadMacro(
"$VMCWORKDIR/macro/run/bmnloadlibs.C");
86 const char* bname =
gSystem->BaseName(fname);
88 strcpy(runfile, bname);
89 char* cdigi = strstr(runfile,
"digi");
91 strcat(runfile,
"raw.root");
92 printf(
"Decoded raw ROOT file name is %s\n", runfile);
103 for (
int i = 0;
i < 30;
i++) {
111 for (
int i = 24;
i < 53;
i++)
123 if (bmnTree->
Add(fname) == 0) {
124 printf(
"Can't find BMN digits tree in file %s!\n", fname);
130 char name[128], title[128];
131 Int_t startEvent = 0;
134 printf(
"\nNumber of events in tree is %d\n", nEvents);
147 TH2F *htvss1 = 0, *htvss2 = 0, *hsvss = 0;
148 TH1F *htimemax1 = 0, *htimemax2 = 0;
153 char fname_root[128], *delim = 0;
154 strcpy(fname_root,
gSystem->BaseName(fname));
155 if ((delim = strrchr(fname_root, (
int)
'.')))
157 strcat(fname_root,
"_results.root");
158 f =
new TFile(fname_root,
"RECREATE",
"Results of BmnTOF700");
163 sprintf(title,
"Time, chamber %.1f",
idchambers[
i]);
164 htime[
i] =
new TH1F(name, title, 4000, -50, 50);
165 sprintf(name,
"Width_chamber_%.1f",
idchambers[
i]);
166 sprintf(title,
"Width, chamber %.1f",
idchambers[
i]);
167 hwidth[
i] =
new TH1F(name, title, 2500, 0, 5000);
168 sprintf(name,
"LR-Diff_chamber_%.1f",
idchambers[
i]);
169 sprintf(title,
"LR-Diff, chamber %.1f",
idchambers[
i]);
170 hlrdiff[
i] =
new TH1F(name, title, 200, -5, 5);
171 sprintf(name,
"Strips_rate_chamber_%.1f",
idchambers[
i]);
172 sprintf(title,
"Strips rate, chamber %.1f",
idchambers[
i]);
173 hstrips[
i] =
new TH1F(name, title, 32, 0, 32);
174 sprintf(name,
"Time_chamber_%.1f_max_strip",
idchambers[
i]);
175 sprintf(title,
"Time, chamber %.1f, max strip",
idchambers[
i]);
176 htimemax[
i] =
new TH1F(name, title, 4000, -50, 50);
177 sprintf(name,
"Strips_rate_chamber_%.1f_max_strip",
idchambers[
i]);
178 sprintf(title,
"Strips rate, chamber %.1f, max strip",
idchambers[
i]);
179 hstripsmax[
i] =
new TH1F(name, title, 32, 0, 32);
180 sprintf(name,
"Time_profile_chamber_%.1f",
idchambers[
i]);
181 sprintf(title,
"Time profile, chamber %.1f",
idchambers[
i]);
182 timeprof[
i] =
new TProfile(name, title, 1000, 0, 5000, -20, +20,
"e");
185 sprintf(name,
"X_coordinate");
186 sprintf(title,
"X coordinate of TOF700 hit");
187 hxhit =
new TH1F(name, title, 300, -150, +150);
191 hdiff =
new TH1F(name, title, 10000, -200, 200);
195 htvst =
new TH2F(name, title, 1000, -20, 20, 1000, -20, 20);
199 htimemax1 =
new TH1F(name, title, 2000, -50, 50);
203 htimemax2 =
new TH1F(name, title, 2000, -50, 50);
207 htvss1 =
new TH2F(name, title, 32, 0, 32, 2000, -50, 50);
211 htvss2 =
new TH2F(name, title, 32, 0, 32, 2000, -50, 50);
215 hsvss =
new TH2F(name, title, 32, 0, 32, 32, 0, 32);
217 Int_t nchamb1 = 0, nchamb2 = 0, nchamb12 = 0, nchamb21 = 0, nchamb12n = 0, nchamb12nn = 0;
219 for (
Int_t iEv = startEvent; iEv < startEvent + nEvents; iEv++) {
222 if (iEv % 10000 == 0) {
223 cout <<
"Event: " << iEv <<
"/" << startEvent + nEvents << endl;
245 Float_t lrdiff = digit->GetDiff();
252 hwidth[plane]->
Fill(width);
253 smax1[plane] = strip;
254 if (width > wmax[plane]) {
262 if (width <
wmi[plane] || width >
wma[plane])
264 htime[plane]->
Fill(time);
265 hstrips[plane]->
Fill(strip);
266 hlrdiff[plane]->
Fill(lrdiff);
267 hxhit->
Fill(
TOF2->get_hit_x(plane, strip, lrdiff));
278 || (smax1[8] >= 0) || (smax1[10] >= 0))
289 timeprof[
i]->
Fill(wmax[
i], tmax[
i]);
295 htimemax[
i]->
Fill(tmax[
i]);
296 hstripsmax[
i]->
Fill(smax[
i]);
325 printf(
"Efficiency (normalize to chamber %3d) = %.1f %%\n",
DIFF_CHAMB_1, (
float)nchamb12 / nchamb1 * 100.);
327 printf(
"Efficiency (normalize to chamber %3d) = %.1f %% (3 chambers)\n",
DIFF_CHAMB_1,
328 (
float)nchamb12n / nchamb1 * 100.);
330 printf(
"Efficiency (normalize to chamber %3d) = %.1f %% (5 chambers)\n",
DIFF_CHAMB_1,
331 (
float)nchamb12nn / nchamb1 * 100.);
333 printf(
"Efficiency (normalize to chamber %3d) = %.1f %%\n",
DIFF_CHAMB_2, (
float)nchamb21 / nchamb1 * 100.);
335 FitIn(hdiff, -0.2, +0.2);
337 FitIn(htime[
i], -0.2, +0.2);
339 FitIn(htimemax[
i], -0.2, +0.2);
442 gPad->AddExec(
"exselt",
"select_hist()");
445 gPad->AddExec(
"exselt",
"select_hist()");
448 gPad->AddExec(
"exselt",
"select_hist()");
451 gPad->AddExec(
"exselt",
"select_hist()");
458 gPad->AddExec(
"exselt",
"select_hist()");
461 gPad->AddExec(
"exselt",
"select_hist()");
463 TCanvas* cstrstr =
new TCanvas(
"cstrstr",
"Strip vs strip", 900, 900);
468 gPad->AddExec(
"exselt",
"select_hist()");
476 double mean, sigm, sigmw = 0., lev1 = 1.75, lev2 = 3.;
477 double total = 0, peak = 0;
481 printf(
"Number of histogram '%s' entries is too few!\n", h->
GetTitle());
490 printf(
"Number of non-empty bins is too few in histogram '%s'!\n", h->
GetTitle());
497 if (sigm < h->GetBinWidth(1))
499 TF1* fg =
new TF1(
"fg",
"gaus", mean - lev1 * sigmw, mean + lev1 * sigmw);
505 h->
Fit(fg,
"Q0IB",
"", mean - lev1 * sigmw, mean + lev1 * sigmw);
509 h->
SetAxisRange(mean - lev1 * sigmw, mean + lev1 * sigmw);
519 if (sigm < h->GetBinWidth(1))
521 TF1* fg =
new TF1(
"fg",
"gaus", mean - lev1 * sigmw, mean + lev1 * sigmw);
526 h->
Fit(fg,
"Q0IB",
"", mean - lev1 * sigmw, mean + lev1 * sigmw);
530 h->
SetAxisRange(mean - lev1 * sigmw, mean + lev1 * sigmw);
542 mib = h->
FindBin(mean - lev1 * sigm);
543 mab = h->
FindBin(mean + lev1 * sigm);
544 if ((mab - mib + 1) < 4) {
546 mib = h->
FindBin(mean - lev1 * sigm);
547 mab = h->
FindBin(mean + lev1 * sigm);
548 if ((mab - mib + 1) < 4) {
552 double min0 = mean - lev1 * sigm;
553 double max0 = mean + lev1 * sigm;
554 h->
Fit(
"gaus",
"Q0I",
"", mean - lev1 * sigm, mean + lev1 * sigm);
557 mean = ff->GetParameter(1);
559 sigm = ff->GetParameter(2);
560 if (mean < min0 || mean > max0) {
561 h->
Fit(
"gaus",
"Q0I",
"", mean - lev1 * sigm, mean + lev1 * sigm);
563 mean = ff->GetParameter(1);
564 sigm = ff->GetParameter(2);
566 h->
Fit(
"gaus",
"Q0I",
"", mean - lev1 * sigm, mean + lev1 * sigm);
569 mean = ff->GetParameter(1);
571 sigm = ff->GetParameter(2);
572 h->
Fit(
"gaus",
"Q0I",
"", mean - lev1 * sigm, mean + lev1 * sigm);
575 mean = ff->GetParameter(1);
577 sigm = ff->GetParameter(2);
580 mib = h->
FindBin(mean - lev2 * sigm);
581 mab = h->
FindBin(mean + lev2 * sigm);
583 peak = h->
Integral(mib < 1 ? 1 : mib, mab > nbi ? nbi : mab);
585 return total > 0. ? peak / total * 100. : 0.;