data analysis scripts
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

687 lines
27 KiB

  1. #include <TFile.h>
  2. #include <TTree.h>
  3. #include <stdio.h>
  4. #include <vector>
  5. #include <TSystemDirectory.h>
  6. #include <TH2D.h>
  7. #include <TH1D.h>
  8. #include <TProfile.h>
  9. #include <TCanvas.h>
  10. #include <TF1.h>
  11. #include <TMath.h>
  12. #include <vector>
  13. #include <utility>
  14. #include <TString.h>
  15. #include <TDirectory.h>
  16. #include <TString.h>
  17. #include <TVectorD.h>
  18. #include <TGraph.h>
  19. #include <TGraphErrors.h>
  20. #include <cmath>
  21. #include <TPaveStats.h>
  22. #include <TText.h>
  23. #include <TROOT.h>
  24. #include <TStyle.h>
  25. #include <TObjArray.h>
  26. using namespace std;
  27. TFile *fileIn;
  28. TFile *fileOut;
  29. TTree *data;
  30. int spill_profile_number = 0;
  31. double readOutFrequency = 3000;
  32. double maxSignal;
  33. double minSignal;
  34. double minPosX;
  35. double maxPosX;
  36. double c3 = 0.8;
  37. void CompareWidth(const char *dirname, const char *filename);
  38. void SavePDF(const char *dirname, const char *filename);
  39. double CalFWHM(TH1D *hist);
  40. Double_t fitfunc(Double_t *x, Double_t *par);
  41. void process()
  42. {
  43. const char *dirname = "/mnt/g/HIT/time_aligned/20161126/";
  44. const char *pin_dirname = "/mnt/g/HIT/time_aligned/20161126/pin/";
  45. const char *ext = ".root";
  46. TSystemDirectory dir(dirname, dirname);
  47. TSystemDirectory pin_dir(pin_dirname, pin_dirname);
  48. TList *files = dir.GetListOfFiles();
  49. if (files)
  50. {
  51. TSystemFile *file;
  52. TString fname;
  53. TIter next(files);
  54. while ((file = (TSystemFile *)next()))
  55. {
  56. fname = file->GetName();
  57. if (!file->IsDirectory() && fname.EndsWith(ext) && (fname.BeginsWith("SAVE_PiN_run")))
  58. {
  59. CompareWidth(dirname, fname.Data());
  60. SavePDF(dirname, fname.Data());
  61. }
  62. }
  63. }
  64. }
  65. void CompareWidth(const char *dirname, const char *filename)
  66. {
  67. TString fn = TString(filename);
  68. TString dn = TString(dirname);
  69. TString inName = dn + fn;
  70. TString outName = dn + "Output/New_" + fn;
  71. fileIn = new TFile(inName, "read");
  72. fileOut = new TFile(outName, "recreate");
  73. fileIn->GetObject("newdata", data);
  74. TH2D *sigIcScatterPlot14, *mwPosScatterPlot13;
  75. TH1D *signalDist, *icSignal, *icSignal2;
  76. TH2D *deltaPos_time[10];
  77. fileIn->GetObject("sigIcScatterPlot11", sigIcScatterPlot14);
  78. fileIn->GetObject("mwPosScatterPlot11", mwPosScatterPlot13);
  79. fileIn->GetObject("signalDist", signalDist);
  80. fileIn->GetObject("icSignal", icSignal);
  81. //fileIn->GetObject("icSignal2", icSignal2);
  82. TH1D *icFitSlicesX = (TH1D *)sigIcScatterPlot14->ProfileX();
  83. TH1D *pos_mw = mwPosScatterPlot13->ProfileY();
  84. TH1D *pos_mw_x = mwPosScatterPlot13->ProfileX();
  85. TH1D *beamPosX = (TH1D *)fileIn->Get("beamPosX");
  86. TH1D *mwPosX = (TH1D *)fileIn->Get("mwPosX");
  87. TH1D *beamFocusX = (TH1D *)fileIn->Get("beamFocusX");
  88. TH1D *sigHist = (TH1D *)fileIn->Get("sigHist");
  89. TH1D *ic1Hist = (TH1D *)fileIn->Get("ic1Hist");
  90. TH1D *ic2Hist = (TH1D *)fileIn->Get("ic2Hist");
  91. TCanvas *SignalComp;
  92. Double_t norm_sig = sigHist->Integral();
  93. Double_t norm_ic1 = ic1Hist->Integral();
  94. Double_t norm_ic2 = ic2Hist->Integral();
  95. double mean = beamPosX->GetMean();
  96. double mean_mw = mwPosX->GetMean();
  97. double sigma = beamPosX->GetStdDev();
  98. double sigma_min = beamFocusX->GetMinimum();
  99. double sigma_max = beamFocusX->GetMaximum();
  100. minPosX = mean - 3 * sigma;
  101. maxPosX = mean + 3 * sigma;
  102. icFitSlicesX->Fit("pol1");
  103. pos_mw->Fit("pol1", "", "", mean - 3 * sigma, mean + 3 * sigma);
  104. maxSignal = icFitSlicesX->GetMaximum();
  105. minSignal = icFitSlicesX->GetMinimum();
  106. double posX, FocusX, beamSignal, ic1, ic2, mw1_posx, mw1_focusx, beamOn, mw2_posx, mw2_focusx;
  107. TBranch *b_ic1 = data->GetBranch("ic1_1");
  108. b_ic1->SetAddress(&ic1);
  109. TBranch *b_ic2 = data->GetBranch("ic2_1");
  110. b_ic2->SetAddress(&ic2);
  111. TBranch *b_mw1_focusx = data->GetBranch("mw1_focusx_1");
  112. b_mw1_focusx->SetAddress(&mw1_focusx);
  113. TBranch *b_mw1_posx = data->GetBranch("mw1_posx_1");
  114. b_mw1_posx->SetAddress(&mw1_posx);
  115. TBranch *b_mw2_focusx = data->GetBranch("mw2_focusx_1");
  116. b_mw2_focusx->SetAddress(&mw2_focusx);
  117. TBranch *b_mw2_posx = data->GetBranch("mw2_posx_1");
  118. b_mw2_posx->SetAddress(&mw2_posx);
  119. TBranch *b_beamPosX = data->GetBranch("beamPosX_1");
  120. b_beamPosX->SetAddress(&posX);
  121. TBranch *b_beamFocusX = data->GetBranch("beamFocusX_1");
  122. b_beamFocusX->SetAddress(&FocusX);
  123. TBranch *b_beamSignal = data->GetBranch("beamSignal_1");
  124. b_beamSignal->SetAddress(&beamSignal);
  125. TBranch *b_beamOn = data->GetBranch("beamOn");
  126. b_beamOn->SetAddress(&beamOn);
  127. data->Draw("mw1_posx_1>>his");
  128. data->Draw("mw2_posx_1>>his2");
  129. TH1F *his = (TH1F *)gDirectory->Get("his");
  130. TH1F *his2 = (TH1F *)gDirectory->Get("his2");
  131. double shift_MWPC = his->GetMean() - his2->GetMean();
  132. vector<int> spillTimes;
  133. int nevents = data->GetEntries();
  134. int countspillsize = 1;
  135. spillTimes.push_back(0);
  136. for (int i = 0; i < nevents; i++)
  137. {
  138. data->GetEntry(i);
  139. if (beamOn == 0)
  140. {
  141. if ((i - spillTimes[countspillsize - 1]) < 10)
  142. {
  143. continue;
  144. }
  145. spillTimes.push_back(i);
  146. countspillsize++;
  147. }
  148. }
  149. int nspills = spillTimes.size() - 1;
  150. printf("N_Spills: %d\n", nspills);
  151. TH2D *timeCenters = new TH2D("timeCenters", "", nevents / 100, 0., nevents / readOutFrequency, 100, mean - 6. * sigma, mean + 6 * sigma);
  152. TH2D *timeWidths = new TH2D("timeWidths", "", nevents / 100, 0., nevents / readOutFrequency, 100, 0., 25);
  153. TH1D *signalResCompare = new TH1D("signalCompare_new", "", 100, -0.5, 0.5);
  154. TH1D *ICResCompare = new TH1D("ICCompare_new", "", 100, -0.2, 0.2);
  155. TH1D *posCompare = new TH1D("posCompare_new", "", 100, -1, 1);
  156. for (int j = 0; j < nspills; j++)
  157. {
  158. TString name;
  159. name.Form("deltaPos_time%d", j);
  160. printf("spilltime_start: %d\n", spillTimes[j]);
  161. printf("spilltime_end: %d\n", spillTimes[j + 1]);
  162. deltaPos_time[j] = new TH2D(name.Data(), name.Data(), 1000, (double)spillTimes[j] / readOutFrequency, (double)spillTimes[j + 1] / readOutFrequency, 100, -0.4, 0.4);
  163. }
  164. TH2D *deltaPos_time_MWPC = new TH2D("deltaPos_time_MWPC", "deltaPos_time_MWPC", 1000, (double)spillTimes[spill_profile_number] / readOutFrequency, (double)spillTimes[spill_profile_number + 1] / readOutFrequency, 100, -0.4, 0.4);
  165. TH2D *deltaSig_time = new TH2D("deltaSig_time", "", nevents / 100, 0., nevents / readOutFrequency, 100, -0.5, 0.5);
  166. TH2D *deltaSig2_time = new TH2D("deltaSig2_time", "", nevents / 100, 0., nevents / readOutFrequency, 100, -0.5, 0.5);
  167. TH2D *ic1_ic2_time = new TH2D("ic1_ic2_time", "", nevents / 100, 0., nevents / readOutFrequency, 100, -0.5, 0.5);
  168. TH2D *deltaSig_Sig = new TH2D("deltaSig_Sig", "", 100, minSignal - 25, maxSignal + 25, 100, -1, 1);
  169. TH2D *deltaIC_IC = new TH2D("deltaIC_IC", "", 100, minSignal - 25, maxSignal + 25, 100, -1, 1);
  170. TH2D *Sig_time = new TH2D("Sig_time", "", nevents / 100, 0., nevents / readOutFrequency, 100, 0, maxSignal);
  171. TH2D *ic1_time = new TH2D("ic1_time", "", nevents / 100, 0., nevents / readOutFrequency, 100, 0, maxSignal);
  172. TH2D *ic2_time = new TH2D("ic2_time", "", nevents / 100, 0., nevents / readOutFrequency, 100, 0, maxSignal);
  173. TH2D *Fibre_posx_Signal = new TH2D("Center_Signal", "", 100, minSignal - 25, maxSignal + 25, 100, (mean - 6. * sigma), (mean + 6. * sigma));
  174. TH1D *SignalFiberScaled = new TH1D("SignalFiberScaled", "", 100, 0, maxSignal + 25);
  175. for (int j = 0; j < nspills; j++)
  176. {
  177. printf("spilltime_start: %d\n", spillTimes[j]);
  178. printf("spilltime_end: %d\n", spillTimes[j + 1]);
  179. for (int i = spillTimes[j]; i < spillTimes[j + 1]; i++)
  180. {
  181. data->GetEntry(i);
  182. /*if (beamOn == 0)
  183. {
  184. // deltaPos_time->Write();
  185. // deltaSig_time->Write();
  186. //spillTimes.push_back(i);
  187. continue;
  188. }*/
  189. timeCenters->Fill(i / readOutFrequency, posX);
  190. timeWidths->Fill(i / readOutFrequency, FocusX);
  191. posCompare->Fill(posX - mean - 1.25 * (mw1_posx - mean_mw));
  192. deltaPos_time_MWPC->Fill(i / readOutFrequency, mw1_posx - mw2_posx - shift_MWPC);
  193. signalResCompare->Fill((beamSignal - ic1 * norm_sig / norm_ic1) * 2 / (beamSignal + ic1 * norm_sig / norm_ic1));
  194. ICResCompare->Fill((ic2 - ic1 * norm_ic2 / norm_ic1) * 2 / (ic2 + ic1));
  195. deltaSig_time->Fill(i / readOutFrequency, (beamSignal - ic1 * norm_sig / norm_ic1) / beamSignal);
  196. deltaSig2_time->Fill(i / readOutFrequency, (beamSignal - ic1 * norm_sig / norm_ic1) / beamSignal);
  197. ic1_ic2_time->Fill(i / readOutFrequency, (ic2 - ic1 * norm_ic2 / norm_ic1) / ic1);
  198. deltaPos_time[j]->Fill(i / readOutFrequency, posX - mean - 1.25 * (mw1_posx - mean_mw));
  199. deltaSig_Sig->Fill(beamSignal, (beamSignal - ic1 * norm_sig / norm_ic1) / beamSignal);
  200. deltaIC_IC->Fill(ic1, (ic2 - ic1 * norm_ic2 / norm_ic1) * 2 / (ic2 + ic1));
  201. Sig_time->Fill(i / readOutFrequency, beamSignal);
  202. ic1_time->Fill(i / readOutFrequency, ic1);
  203. SignalFiberScaled->Fill(beamSignal);
  204. Fibre_posx_Signal->Fill(beamSignal, posX);
  205. }
  206. }
  207. fileIn->Close();
  208. fileOut->cd();
  209. signalResCompare->Fit("gaus");
  210. TObjArray aSlices, bSlices;
  211. timeCenters->Write();
  212. timeWidths->Write();
  213. icFitSlicesX->Write();
  214. pos_mw->Write();
  215. posCompare->Write();
  216. deltaPos_time_MWPC->Write();
  217. TH1D *tmp = deltaPos_time_MWPC->ProjectionY();
  218. tmp->SetStats(1111);
  219. tmp->Fit("gaus");
  220. tmp->Write();
  221. signalResCompare->Write();
  222. ICResCompare->Write();
  223. for (int j = 0; j < nspills; j++)
  224. {
  225. deltaPos_time[j]->Write();
  226. }
  227. deltaSig_time->Write();
  228. deltaSig_time->FitSlicesY(0, 0, -1, 5, "QNR", &aSlices);
  229. for (int i = 0; i < 4; i++)
  230. {
  231. aSlices[i]->Write();
  232. }
  233. deltaSig2_time->Write();
  234. ic1_ic2_time->Write();
  235. deltaSig_Sig->Write();
  236. deltaIC_IC->Write();
  237. deltaSig_Sig->FitSlicesY(0, 0, -1, 5, "QNR", &aSlices);
  238. for (int i = 0; i < 4; i++)
  239. {
  240. aSlices[i]->Write();
  241. }
  242. deltaIC_IC->FitSlicesY(0, 0, -1, 5, "QNR", &aSlices);
  243. for (int i = 0; i < 4; i++)
  244. {
  245. aSlices[i]->Write();
  246. }
  247. Sig_time->Write();
  248. ic1_time->Write();
  249. //Fibre_posx_Signal->Fit("pol1");
  250. Fibre_posx_Signal->Write();
  251. SignalFiberScaled->Write();
  252. //fileOut->Write();
  253. fileOut->Save();
  254. }
  255. void SavePDF(const char *dirname, const char *filename)
  256. {
  257. //Set PDF line width = minimum
  258. gStyle->SetLineScalePS(1);
  259. gStyle->SetOptFit(kTRUE);
  260. TString fn = TString(filename);
  261. TString dn = TString(dirname);
  262. TString inName = dn + fn;
  263. TString outName = dn + "Output/New_" + fn;
  264. TString outPDF = outName;
  265. outPDF.Replace(outPDF.Length() - 4, 4, TString("pdf"));
  266. fileIn = new TFile(inName, "read");
  267. fileOut = new TFile(outName, "read");
  268. TString str;
  269. TF1 *func = new TF1("doublegaus", fitfunc, 0, 64, 6);
  270. double mean;
  271. double sigma;
  272. double constant;
  273. //Define Canvas:
  274. TCanvas *canvas1_1 = new TCanvas("canvas1", "", 1024, 768);
  275. TCanvas *canvas2_1 = new TCanvas("canvas2", "", 1280, 500);
  276. canvas2_1->Divide(2, 1);
  277. TCanvas *canvas3_1 = new TCanvas("canvas3", "", 1366, 500);
  278. canvas3_1->Divide(3, 1);
  279. TCanvas *canvas2_2 = new TCanvas("canvas4", "", 1366, 1024);
  280. canvas2_2->Divide(2, 2);
  281. //Get Histos
  282. TH2D *timeCenters = (TH2D *)fileIn->Get("timeCenters");
  283. TH2D *timeCenters_MWPC = (TH2D *)fileIn->Get("timeCenters_MWPC");
  284. TH2D *timeWidths = (TH2D *)fileIn->Get("timeWidths");
  285. TH2D *timeWidths_MWPC = (TH2D *)fileIn->Get("timeWidths_MWPC");
  286. TH2D *Center_Signal = (TH2D *)fileOut->Get("Center_Signal");
  287. TH1D *Center_Signal_pfc = Center_Signal->ProfileX();
  288. TString name;
  289. name.Form("deltaPos_time%d", spill_profile_number);
  290. TH2D *Diff_time = (TH2D *)fileOut->Get(name.Data()); //(TH2D *)fileIn->Get("Diff_time");
  291. TH1D *posCompare = Diff_time->ProjectionY(); //(TH1D *)fileOut->Get("posCompare_new");
  292. TH2D *Diff_time_MWPC = (TH2D *)fileOut->Get("deltaPos_time_MWPC");
  293. TH1D *posCompare_MWPC = Diff_time_MWPC->ProjectionY();
  294. TH1D *comppos_weighted = (TH1D *)fileIn->Get("comppos_weighted");
  295. TH1D *compsig_weighted = (TH1D *)fileIn->Get("compsig_weighted");
  296. TH1D *signalResCompare = (TH1D *)fileOut->Get("signalCompare_new");
  297. TH2D *signalRes_Sig = (TH2D *)fileOut->Get("deltaSig_Sig");
  298. TH1D *signalRes_Sig_1 = (TH1D *)fileOut->Get("deltaSig_Sig_1");
  299. TH1D *signalRes_Sig_2 = (TH1D *)fileOut->Get("deltaSig_Sig_2");
  300. TH1D *ICResCompare = (TH1D *)fileOut->Get("ICCompare_new");
  301. TH2D *deltaIC_IC = (TH2D *)fileOut->Get("deltaIC_IC");
  302. TH1D *deltaIC_IC_1 = (TH1D *)fileOut->Get("deltaIC_IC_1");
  303. TH1D *deltaIC_IC_2 = (TH1D *)fileOut->Get("deltaIC_IC_2");
  304. //TH2D *
  305. TH2D *deltaSig_time = (TH2D *)fileOut->Get("deltaSig_time");
  306. TH1D *deltaSig_time_fs2 = (TH1D *)fileOut->Get("deltaSig_time_2");
  307. TH2D *deltaPos_time = (TH2D *)fileOut->Get(name.Data());
  308. TH2D *deltaSig2_time = (TH2D *)fileOut->Get("deltaSig2_time");
  309. TH2D *ic1_ic2_time = (TH2D *)fileOut->Get("ic1_ic2_time");
  310. TH2D *Sig_time = (TH2D *)fileOut->Get("Sig_time");
  311. TH2D *ic1_time = (TH2D *)fileOut->Get("ic1_time");
  312. TH2D *mwPosScatterPlot = (TH2D *)fileIn->Get("mwPosScatterPlot11");
  313. TH2D *sigIcScatterPlot = (TH2D *)fileIn->Get("sigIcScatterPlot11");
  314. TH1D *mwPosScatterPlot_pfx = mwPosScatterPlot->ProfileX();
  315. TH1D *sigIcScatterPlot_pfx = sigIcScatterPlot->ProfileX();
  316. //Draw in canvas
  317. //page1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
  318. canvas2_2->cd(1);
  319. timeCenters->Draw("colz");
  320. timeCenters->GetXaxis()->SetTitle("time [s]");
  321. timeCenters->GetYaxis()->SetTitle("Beam Position [mm]");
  322. timeCenters->SetTitle("Fiber position vs time");
  323. canvas2_2->cd(2);
  324. timeCenters_MWPC->Draw("colz");
  325. timeCenters_MWPC->GetXaxis()->SetTitle("time [s]");
  326. timeCenters_MWPC->GetYaxis()->SetTitle("Beam Position [mm]");
  327. timeCenters_MWPC->SetTitle("MWPC position vs time");
  328. canvas2_2->cd(3);
  329. timeWidths->Draw("colz");
  330. timeWidths->GetXaxis()->SetTitle("time [s]");
  331. timeWidths->GetYaxis()->SetTitle("Beam widths [mm]");
  332. timeWidths->SetTitle("Fiber widths vs time");
  333. canvas2_2->cd(4);
  334. timeWidths_MWPC->Draw("colz");
  335. timeWidths_MWPC->GetXaxis()->SetTitle("time [s]");
  336. timeWidths_MWPC->GetYaxis()->SetTitle("Beam widths [mm]");
  337. timeWidths_MWPC->SetTitle("MWPC Beam widths vs time");
  338. canvas2_2->Print(outPDF + "(", "Title: position vs Time");
  339. //page222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
  340. canvas2_1->cd(1);
  341. Center_Signal->Draw("colz");
  342. Center_Signal->GetXaxis()->SetTitle("Signal [particles]");
  343. Center_Signal->GetYaxis()->SetTitle("Beam Position [mm]");
  344. Center_Signal->SetTitle("Fiber position vs signal");
  345. canvas2_1->cd(2);
  346. Center_Signal_pfc->Draw("E1");
  347. canvas2_1->Update();
  348. Center_Signal_pfc->SetTitle("Average Fiber position vs signal");
  349. Center_Signal_pfc->Fit("pol1");
  350. double slope_c = Center_Signal_pfc->GetFunction("pol1")->GetParameter(1);
  351. str.Form("Slope = %.9f", slope_c);
  352. TPaveStats *st0 = (TPaveStats *)Center_Signal_pfc->FindObject("stats");
  353. st0->SetName("mystats");
  354. st0->AddText(str.Data());
  355. Center_Signal_pfc->SetStats(0);
  356. canvas2_1->Modified();
  357. Center_Signal_pfc->GetXaxis()->SetTitle("Signal [particles]");
  358. Center_Signal_pfc->GetYaxis()->SetTitle("Average Beam Position [mm]");
  359. Center_Signal_pfc->SetAxisRange(minPosX + 0.05, maxPosX - 0.05, "Y");
  360. Center_Signal_pfc->SetAxisRange(0, 0.8 * maxSignal, "X");
  361. canvas2_1->Print(outPDF, "Title: Position vs Signal");
  362. //page333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
  363. canvas2_2->cd(1);
  364. Diff_time->SetTitle("X(fibre)-X(MWPC) vs time");
  365. Diff_time->Draw("colz");
  366. Diff_time->GetXaxis()->SetTitle("time [s]");
  367. Diff_time->GetYaxis()->SetTitle("posX(fiber)-posX(MWPC) / [mm]");
  368. canvas2_2->cd(2);
  369. posCompare->SetTitle("X(fibre)-X(MWPC) distribution");
  370. //fit gaus
  371. posCompare->Fit("gaus");
  372. mean = posCompare->GetFunction("gaus")->GetParameter(1);
  373. sigma = posCompare->GetFunction("gaus")->GetParameter(2);
  374. constant = posCompare->GetFunction("gaus")->GetParameter(0);
  375. //fit doublegaus
  376. func->SetNpx(1000);
  377. func->SetParameter(0, constant);
  378. func->SetParameter(1, mean);
  379. func->SetParameter(2, sigma);
  380. func->SetParameter(3, constant);
  381. func->SetParameter(4, sigma);
  382. func->SetParameter(5, 0.);
  383. posCompare->Fit("doublegaus");
  384. double val, x1, x2, pos = -1, fwhm;
  385. int bin1, bin2;
  386. bin1 = posCompare->FindFirstBinAbove(posCompare->GetMaximum() / 2);
  387. bin2 = posCompare->FindLastBinAbove(posCompare->GetMaximum() / 2);
  388. fwhm = (posCompare->GetBinCenter(bin2) + posCompare->GetBinCenter(bin2 + 1) - posCompare->GetBinCenter(bin1) - posCompare->GetBinCenter(bin1 - 1)) * 0.5;
  389. str.Form("fwhm = %.3f mm", fwhm);
  390. TText *t = new TText(300.5, 300.5, str.Data());
  391. //t->Draw("SAME");
  392. posCompare->Draw("E1");
  393. printf("FWHM: %f\n", fwhm);
  394. canvas2_2->Update();
  395. TPaveStats *st = (TPaveStats *)posCompare->FindObject("stats");
  396. st->SetName("mystats");
  397. TList *listOfLines = st->GetListOfLines();
  398. TLatex *myt = new TLatex(0, 0, str.Data());
  399. listOfLines->Add(myt);
  400. str.Form("c3 = %.3f ", c3);
  401. TLatex *latex_page3_2 = new TLatex();
  402. latex_page3_2->DrawLatex(-0.2, 40., str.Data());
  403. posCompare->SetStats(0);
  404. canvas2_2->Modified();
  405. posCompare->GetXaxis()->SetTitle("X(fiber)-X(MWPC)");
  406. posCompare->GetYaxis()->SetTitle("counts");
  407. canvas2_2->cd(3);
  408. Diff_time_MWPC->SetTitle("MWPC PosX1-PosX2");
  409. Diff_time_MWPC->Draw("colz");
  410. Diff_time_MWPC->GetXaxis()->SetTitle("time [s]");
  411. Diff_time_MWPC->GetYaxis()->SetTitle("X(MWPC1)-X(MWPC2) / [mm]");
  412. canvas2_2->cd(4);
  413. posCompare_MWPC->SetTitle("MWPC PosX1-PosX2");
  414. posCompare_MWPC->Draw("colz");
  415. posCompare_MWPC->GetXaxis()->SetTitle("X(MWPC1)-X(MWPC2) / [mm]");
  416. posCompare_MWPC->GetYaxis()->SetTitle("");
  417. posCompare_MWPC->Fit("gaus");
  418. mean = posCompare_MWPC->GetFunction("gaus")->GetParameter(1);
  419. sigma = posCompare_MWPC->GetFunction("gaus")->GetParameter(2);
  420. constant = posCompare_MWPC->GetFunction("gaus")->GetParameter(0);
  421. func->SetNpx(1000);
  422. func->SetParameter(0, constant);
  423. func->SetParameter(1, mean);
  424. func->SetParameter(2, sigma);
  425. func->SetParameter(3, constant / 10.);
  426. func->SetParameter(4, sigma * 4.);
  427. func->SetParameter(5, 0.);
  428. posCompare_MWPC->Fit("doublegaus");
  429. posCompare_MWPC->Draw("E1");
  430. bin1 = posCompare_MWPC->FindFirstBinAbove(posCompare_MWPC->GetMaximum() / 2);
  431. bin2 = posCompare_MWPC->FindLastBinAbove(posCompare_MWPC->GetMaximum() / 2);
  432. fwhm = (posCompare_MWPC->GetBinCenter(bin2) + posCompare_MWPC->GetBinCenter(bin2 + 1) - posCompare_MWPC->GetBinCenter(bin1) - posCompare_MWPC->GetBinCenter(bin1 - 1)) * 0.5;
  433. str.Form("fwhm = %.3f", fwhm);
  434. //t->Draw("SAME");
  435. posCompare_MWPC->Draw("E1");
  436. printf("FWHM: %f\n", fwhm);
  437. canvas2_2->Update();
  438. st = (TPaveStats *)posCompare_MWPC->FindObject("stats");
  439. st->SetName("mystats");
  440. listOfLines = st->GetListOfLines();
  441. myt = new TLatex(0, 0, str.Data());
  442. listOfLines->Add(myt);
  443. posCompare_MWPC->SetStats(0);
  444. canvas2_2->Modified();
  445. canvas2_2->Print(outPDF, "Title: Position compare");
  446. //page444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
  447. canvas2_2->cd(1);
  448. signalRes_Sig->SetTitle("S(Fibre)-S(IC) vs S(Fibre)");
  449. signalRes_Sig->Draw("colz");
  450. canvas2_2->cd(2);
  451. signalResCompare->SetTitle("S(Fibre)-S(IC) distribution");
  452. signalResCompare->Fit("gaus");
  453. mean = signalResCompare->GetFunction("gaus")->GetParameter(1);
  454. sigma = signalResCompare->GetFunction("gaus")->GetParameter(2);
  455. constant = signalResCompare->GetFunction("gaus")->GetParameter(0);
  456. func->SetNpx(1000);
  457. func->SetParameter(0, constant);
  458. func->SetParameter(1, mean);
  459. func->SetParameter(2, sigma);
  460. func->SetParameter(3, constant / 10.);
  461. func->SetParameter(4, sigma * 4.);
  462. func->SetParameter(5, 0.);
  463. signalResCompare->Fit("doublegaus");
  464. signalResCompare->Draw("E1");
  465. bin1 = signalResCompare->FindFirstBinAbove(signalResCompare->GetMaximum() / 2);
  466. bin2 = signalResCompare->FindLastBinAbove(signalResCompare->GetMaximum() / 2);
  467. fwhm = (signalResCompare->GetBinCenter(bin2) + signalResCompare->GetBinCenter(bin2 + 1) - signalResCompare->GetBinCenter(bin1) - signalResCompare->GetBinCenter(bin1 - 1)) * 0.5;
  468. str.Form("fwhm = %.3f", fwhm);
  469. //t->Draw("SAME");
  470. signalResCompare->Draw("E1");
  471. printf("FWHM: %f\n", fwhm);
  472. canvas2_2->Update();
  473. st = (TPaveStats *)signalResCompare->FindObject("stats");
  474. st->SetName("mystats");
  475. listOfLines = st->GetListOfLines();
  476. TLatex *myt2 = new TLatex(0, 0, str.Data());
  477. listOfLines->Add(myt2);
  478. signalResCompare->SetStats(0);
  479. canvas2_2->Modified();
  480. signalResCompare->GetXaxis()->SetTitle("S(Fibre)-S(IC)/S");
  481. signalResCompare->GetYaxis()->SetTitle("counts");
  482. canvas2_2->cd(3);
  483. signalRes_Sig_1->SetTitle("S(Fibre)-S(IC) vs S(Fibre)");
  484. signalRes_Sig_1->Draw("E1");
  485. signalRes_Sig_1->GetXaxis()->SetTitle("E(fiber)");
  486. signalRes_Sig_1->GetYaxis()->SetTitle("(E(fiber)-E(MWPC))//E");
  487. signalRes_Sig_1->SetAxisRange(0, maxSignal * 0.7, "X");
  488. signalRes_Sig_1->SetAxisRange(-0.4, 0.4, "Y");
  489. canvas2_2->cd(4);
  490. signalRes_Sig_2->SetTitle("sigma(S(Fibre)-S(IC)) vs S(Fibre)");
  491. signalRes_Sig_2->Draw("E1");
  492. signalRes_Sig_2->GetXaxis()->SetTitle("E(fiber)");
  493. signalRes_Sig_2->GetYaxis()->SetTitle("sigma(E(fiber)-E(MWPC))//E");
  494. signalRes_Sig_2->SetAxisRange(0, maxSignal, "X");
  495. signalRes_Sig_2->SetAxisRange(0.01, 0.25, "Y");
  496. canvas2_2->Print(outPDF, "Title: IC Signal Resolution vs Signal");
  497. //page44545454545454545455454545454545454545454545445454545454545454545454545454555454545454545454545454545454
  498. canvas2_2->cd(1);
  499. deltaIC_IC->SetTitle("S(IC2)-S(IC2)/S vs S(IC1)");
  500. deltaIC_IC->Draw("colz");
  501. canvas2_2->cd(2);
  502. ICResCompare->SetTitle("S(IC2)-S(IC2)/S distribution");
  503. ICResCompare->Fit("gaus");
  504. mean = ICResCompare->GetFunction("gaus")->GetParameter(1);
  505. sigma = ICResCompare->GetFunction("gaus")->GetParameter(2);
  506. constant = ICResCompare->GetFunction("gaus")->GetParameter(0);
  507. func->SetNpx(1000);
  508. func->SetParameter(0, constant);
  509. func->SetParameter(1, mean);
  510. func->SetParameter(2, sigma);
  511. func->SetParameter(3, constant / 10.);
  512. func->SetParameter(4, sigma * 4.);
  513. func->SetParameter(5, 0.);
  514. ICResCompare->Fit("doublegaus");
  515. ICResCompare->Draw("E1");
  516. bin1 = ICResCompare->FindFirstBinAbove(ICResCompare->GetMaximum() / 2);
  517. bin2 = ICResCompare->FindLastBinAbove(ICResCompare->GetMaximum() / 2);
  518. fwhm = (ICResCompare->GetBinCenter(bin2) + ICResCompare->GetBinCenter(bin2 + 1) - ICResCompare->GetBinCenter(bin1) - ICResCompare->GetBinCenter(bin1 - 1)) * 0.5;
  519. str.Form("fwhm = %.3f", fwhm);
  520. //t->Draw("SAME");
  521. ICResCompare->Draw("E1");
  522. printf("FWHM: %f\n", fwhm);
  523. canvas2_2->Update();
  524. st = (TPaveStats *)ICResCompare->FindObject("stats");
  525. st->SetName("mystats");
  526. listOfLines = st->GetListOfLines();
  527. TLatex *myt3 = new TLatex(0, 0, str.Data());
  528. listOfLines->Add(myt3);
  529. ICResCompare->SetStats(0);
  530. canvas2_2->Modified();
  531. ICResCompare->GetXaxis()->SetTitle("S(IC2)-S(IC2)/S");
  532. ICResCompare->GetYaxis()->SetTitle("counts");
  533. canvas2_2->cd(3);
  534. deltaIC_IC_1->SetTitle("S(IC2)-S(IC2)/S vs S(IC1)");
  535. deltaIC_IC_1->Draw("E1");
  536. deltaIC_IC_1->GetXaxis()->SetTitle("S(IC)");
  537. deltaIC_IC_1->GetYaxis()->SetTitle("S(IC2)-S(IC2)/S");
  538. deltaIC_IC_1->SetAxisRange(0, maxSignal * 0.7, "X");
  539. deltaIC_IC_1->SetAxisRange(-0.4, 0.4, "Y");
  540. canvas2_2->cd(4);
  541. deltaIC_IC_2->SetTitle("sigma(S(IC2)-S(IC2)/S) vs S(IC)");
  542. deltaIC_IC_2->Draw("E1");
  543. deltaIC_IC_2->GetXaxis()->SetTitle("E(fiber)");
  544. deltaIC_IC_2->GetYaxis()->SetTitle("sigma(S(IC2)-S(IC2)/S)");
  545. deltaIC_IC_2->SetAxisRange(0, maxSignal, "X");
  546. deltaIC_IC_2->SetAxisRange(0.01, 0.25, "Y");
  547. canvas2_2->Print(outPDF, "Title: IC Signal Resolution vs Signal");
  548. //page555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
  549. canvas2_2->cd(1);
  550. deltaSig_time->SetTitle("S(Fibre)-S(IC1) vs time");
  551. deltaSig_time->Draw("colz");
  552. deltaSig_time->GetXaxis()->SetTitle("time [s]");
  553. deltaSig_time->GetYaxis()->SetTitle("signal difference/signal %");
  554. canvas2_2->cd(2);
  555. deltaSig_time_fs2->SetTitle("Signal difference vs time_fitSlicesY_(sigma)");
  556. deltaSig_time_fs2->Draw("colz");
  557. deltaSig_time_fs2->GetXaxis()->SetTitle("time [s]");
  558. deltaSig_time_fs2->GetYaxis()->SetTitle("sigma(signal difference) [particles]");
  559. canvas2_2->cd(3);
  560. deltaSig2_time->SetTitle("S(Fibre)-S(IC2) vs time");
  561. deltaSig2_time->Draw("colz");
  562. deltaSig2_time->GetXaxis()->SetTitle("time [s]");
  563. deltaSig2_time->GetYaxis()->SetTitle("signal [particles]");
  564. canvas2_2->cd(4);
  565. ic1_ic2_time->SetTitle("S(ic1)-S(ic2) vs time");
  566. ic1_ic2_time->Draw("colz");
  567. ic1_ic2_time->GetXaxis()->SetTitle("time [s]");
  568. ic1_ic2_time->GetYaxis()->SetTitle("signal [particles]");
  569. canvas2_2->Print(outPDF, "Title: Beam position vs Time");
  570. //page 6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
  571. canvas2_1->cd(1);
  572. comppos_weighted->Draw();
  573. str.Form("fwhm = %.3f", CalFWHM(comppos_weighted));
  574. TLatex *latex = new TLatex();
  575. latex->DrawLatex(-0.2, 40., str.Data());
  576. canvas2_1->cd(2);
  577. compsig_weighted->Draw();
  578. str.Form("fwhm = %.3f", CalFWHM(compsig_weighted));
  579. TLatex *latex2 = new TLatex();
  580. latex2->DrawLatex(-0.2, 45., str.Data());
  581. canvas2_1->Print(outPDF, "Title: weighted resoultion");
  582. //page 777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
  583. canvas2_2->cd(1);
  584. mwPosScatterPlot->SetTitle("Fibre position vs MWPC position");
  585. mwPosScatterPlot->Draw("colz");
  586. mwPosScatterPlot->GetXaxis()->SetTitle("MWPC position [mm]");
  587. mwPosScatterPlot->GetYaxis()->SetTitle("Fibre position [mm]");
  588. canvas2_2->cd(2);
  589. mwPosScatterPlot_pfx->SetTitle("mean MWPC position vs Fibre position");
  590. mwPosScatterPlot_pfx->Fit("pol1");
  591. mwPosScatterPlot_pfx->Draw("colz");
  592. mwPosScatterPlot_pfx->SetAxisRange(minPosX, maxPosX, "Y");
  593. mwPosScatterPlot_pfx->GetXaxis()->SetTitle("MWPC position [mm]");
  594. mwPosScatterPlot_pfx->GetYaxis()->SetTitle("Fibre position [mm]");
  595. canvas2_2->cd(3);
  596. sigIcScatterPlot->SetTitle("Fibre signal vs ic signal");
  597. sigIcScatterPlot->Draw("colz");
  598. sigIcScatterPlot->GetXaxis()->SetTitle("ic signal [n]");
  599. sigIcScatterPlot->GetYaxis()->SetTitle("Fibre signal [n]");
  600. canvas2_2->cd(4);
  601. sigIcScatterPlot_pfx->SetTitle("mean IC signal vs Fibre signal");
  602. sigIcScatterPlot_pfx->Fit("pol1");
  603. sigIcScatterPlot_pfx->Draw("colz");
  604. canvas2_2->Update();
  605. st = (TPaveStats *)sigIcScatterPlot_pfx->FindObject("stats");
  606. st->SetName("mystats");
  607. listOfLines = st->GetListOfLines();
  608. TText *tconst = st->GetLineWith("Mean x");
  609. TText *tconst1 = st->GetLineWith("Entries");
  610. TText *tconst2 = st->GetLineWith("Mean y");
  611. listOfLines->Remove(tconst);
  612. listOfLines->Remove(tconst1);
  613. listOfLines->Remove(tconst2);
  614. sigIcScatterPlot_pfx->GetXaxis()->SetTitle("ic signal [n]");
  615. sigIcScatterPlot_pfx->GetYaxis()->SetTitle("Fibre signal [n]");
  616. canvas2_2->Print(outPDF + ")", "Title: Alignment");
  617. }
  618. Double_t fitfunc(Double_t *x, Double_t *par)
  619. {
  620. Double_t arg1 = 0;
  621. if (par[2] != 0)
  622. arg1 = (x[0] - par[1]) / par[2];
  623. Double_t fitval1 = par[0] * TMath::Exp(-0.5 * arg1 * arg1);
  624. Double_t arg2 = 0;
  625. if (par[4] != 0)
  626. arg2 = (x[0] - par[1]) / par[4];
  627. Double_t fitval2 = par[3] * TMath::Exp(-0.5 * arg2 * arg2);
  628. Double_t fitsum = par[5] + fitval1 + fitval2;
  629. return fitsum;
  630. }
  631. double CalFWHM(TH1D *hist)
  632. {
  633. double val, x1, x2, pos = -1, fwhm;
  634. int bin1, bin2;
  635. bin1 = hist->FindFirstBinAbove(hist->GetMaximum() / 2);
  636. bin2 = hist->FindLastBinAbove(hist->GetMaximum() / 2);
  637. fwhm = (hist->GetBinCenter(bin2) + hist->GetBinCenter(bin2 + 1) - hist->GetBinCenter(bin1) - hist->GetBinCenter(bin1 - 1)) * 0.5;
  638. return fwhm;
  639. }