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.

337 lines
14 KiB

  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <iostream>
  4. #include <vector>
  5. #include <utility>
  6. #include <TFile.h>
  7. #include <TTree.h>
  8. #include <TSystemDirectory.h>
  9. #include <string.h>
  10. #include <TFile.h>
  11. #include <TTree.h>
  12. #include <TH1.h>
  13. #include <TH2.h>
  14. #include <TNtuple.h>
  15. #include <iostream>
  16. #include <fstream>
  17. #include <TRandom.h>
  18. #include <TROOT.h>
  19. #include <algorithm>
  20. #include <assert.h>
  21. #include <math.h>
  22. #include <stdlib.h>
  23. #include <time.h>
  24. #include <sys/time.h>
  25. #include <TCanvas.h>
  26. #include <TF1.h>
  27. #include <TProfile.h>
  28. #include <TVectorD.h>
  29. #include <cstdlib>
  30. #include <cmath>
  31. #include <vector>
  32. #include <TApplication.h>
  33. using namespace std;
  34. int main(int argc, char **argv)
  35. {
  36. // Working directories
  37. const char *dirname = "/work/leverington/beamprofilemonitor/hitdata/HIT_26-11-2016/with_timestamp/";
  38. const char *listfile = "intensitylist_carbon.prn";
  39. ifstream in;
  40. ofstream ic1energyfile,ic2energyfile, beamenergyfile,beamenergyfile_iccorr, noisefile, focusfile,focusHITfile, skewfile, kurtfile,focusFitfile,chi2Fitfile;
  41. TFile *f;
  42. TTree *tree;
  43. Int_t nfiles = 0;
  44. Int_t EList = 0;
  45. Double_t Energy = 0.;
  46. Double_t F1 = 0.;
  47. Double_t Intensity = 0.;
  48. Double_t SP = 0.;
  49. char Filename[50];
  50. Int_t id = 0;
  51. Double_t signalmean = 0.;
  52. Double_t signalmeanerror = 0.;
  53. Double_t signalmean_corr = 0.;
  54. Double_t signalmeanerror_corr = 0.;
  55. Double_t signalmean_offsetcorr = 0.;
  56. Double_t signalmeanerror_offsetcorr = 0.;
  57. Double_t ic1mean = 0.;
  58. Double_t ic1meanerror = 0.;
  59. Double_t ic2mean = 0.;
  60. Double_t ic2meanerror = 0.;
  61. Double_t sp_air = 0.;
  62. Double_t sp_ps = 0.;
  63. Double_t sp2_air = 0.;
  64. Double_t sp2_ps = 0.;
  65. Double_t ic_beam_ratio = 0.;
  66. Double_t ic_beam_ratioerror = 0.;
  67. Double_t totalcurrent = 0.;
  68. Double_t totaltime = 0.;
  69. Double_t intcorr = 0.;
  70. Double_t icbpmcorrelation = 0.;
  71. Double_t noisemean = 0.;
  72. Double_t noiseRMS = 0.;
  73. Double_t focusmean = 0.;
  74. Double_t focusRMS = 0.;
  75. Double_t skewmean = 0.;
  76. Double_t skewRMS = 0.;
  77. Double_t kurtmean = 0.;
  78. Double_t kurtRMS = 0.;
  79. Double_t focusFitmean = 0.;
  80. Double_t focusFitRMS = 0.;
  81. Double_t chi2Fitmean = 0.;
  82. Double_t chi2FitRMS = 0.;
  83. cout << "Trying to open"<< Form(": %s%s",dirname, listfile)<<"... " << endl;
  84. in.open(Form("%s%s",dirname, listfile));
  85. ic1energyfile.open("ic1energyfile_int_c.txt");
  86. ic2energyfile.open("ic2energyfile_int_c.txt");
  87. beamenergyfile.open("beamenergyfile_int_c.txt");
  88. beamenergyfile_iccorr.open("beamenergyfile_iccorr_int_c.txt");
  89. noisefile.open("noisefile_int_c.txt");
  90. focusfile.open("focusfile_int_c.txt");
  91. focusHITfile.open("focusHITfile_int_c.txt");
  92. skewfile.open("skewfile_int_c.txt");
  93. kurtfile.open("kurtfile_int_c.txt");
  94. focusFitfile.open("focusFitfile_int_c.txt");
  95. chi2Fitfile.open("chi2Fitfile_int_c.txt");
  96. TF1 * f_sp_air = new TF1("f_sp_air","[0]*pow(x,[1])+[2]", 50, 250); //stopping power of protons in Air [MeV cm2 /g]
  97. f_sp_air->SetParameters(303.746, -0.873697,1.01335); //protons between 50 and 300 MeV
  98. TF1 * f_sp_ps = new TF1("f_sp_ps","[0]*pow(x,[1])+[2]", 50, 250); //stopping power of protons in polystyrene [MeV cm2 /g]
  99. f_sp_ps->SetParameters(361.936, -0.892255, 1.19133); //protons between 50 and 220 MeV
  100. TF1 * f_h2sp_air = new TF1("f_h2sp_air","[0]*pow(x,[1])+[2]", 50, 250); //stopping power of helium in air [MeV cm2 /g]
  101. f_h2sp_air->SetParameters(1236.51, -0.880225, 4.17041); //helium between 50 and 300 MeV
  102. TF1 * f_h2sp_ps = new TF1("f_h2sp_ps","[0]*pow(x,[1])+[2]", 50, 250); //stopping power of helium in polystyrene [MeV cm2 /g]
  103. f_h2sp_ps->SetParameters(1387.08, -0.882686,4.60833); //heelium between 50 and 300 MeV
  104. TF1 * f_c12sp_air = new TF1("f_c12sp_air","[0]*pow(x,[1])+[2]", 80, 480); //stopping power of carbon in air [MeV cm2 /g]
  105. f_c12sp_air->SetParameters(13291.2, -0.925464,45.3876); //carbon between 80 and 480 MeV
  106. TF1 * f_c12sp_ps = new TF1("f_c12sp_ps","[0]*pow(x,[1])+[2]", 80, 480); //stopping power of carbon in polystyrene [MeV cm2 /g]
  107. f_c12sp_ps->SetParameters(14538.9, -0.922423,49.2859); //carbon between 80 and 480 MeV
  108. TF1 * f_o16sp_air = new TF1("f_o16sp_air","[0]*pow(x,[1])+[2]", 80, 480); //stopping power of oxygen in air [MeV cm2 /g]
  109. f_o16sp_air->SetParameters(24624.9, -0.925425,80.6828); //oxygen between 80 and 480 MeV
  110. TF1 * f_o16sp_ps = new TF1("f_o16sp_ps","[0]*pow(x,[1])+[2]", 80,480); //stopping power of oxygen in polystyrene [MeV cm2 /g]
  111. f_o16sp_ps->SetParameters(26465.6, -0.928309,88.6728); //oxygen between 80 and 480 MeV
  112. ///// ic1/SP intensity correction factor = 19.8E6+/-0.1E6 particles/s per nA/(Mevcm2/g)
  113. if (!in) {
  114. cout << Form("%s%s",dirname, listfile) << " not found." << endl;
  115. return 0;}
  116. cout << Form("%s%s",dirname, listfile) << " opened." << endl;
  117. in >> EList >> Energy >> F1 >> Intensity >> SP >> Filename >> id;//prime the while loop
  118. while (!in.eof()) {
  119. TFile * file = TFile::Open(Form("%s%s",dirname,Filename));
  120. TFile * outfile = TFile::Open(Form("plots/%s_plots",Filename),"RECREATE");
  121. cout << Filename << endl;
  122. // TH1D* signalDist = 0;
  123. // file->GetObject("signalDist",signalDist);
  124. // signalmean = signalDist->GetMean();
  125. // signalmeanerror = signalDist->GetMeanError();
  126. // cout << signalmean << " " << signalmeanerror << endl;
  127. // delete signalDist;
  128. // TCanvas *c1 = new TCanvas("c1");
  129. TTree *data;
  130. file->GetObject("newdata", data);
  131. TH2D *h_beamSignal_channel = (TH2D*)file->Get("th2d_beamSignal_channel");
  132. TH2D *h_bkg_channel = (TH2D*)file->Get("th2d_bkg_channel");
  133. noisemean = h_bkg_channel->GetMean(2);
  134. noiseRMS = h_bkg_channel->GetRMS(2);
  135. TVectorD *v = (TVectorD*)file->Get("icinfo");
  136. // v->Print();
  137. totalcurrent = (*v)[0];
  138. totaltime = (*v)[1];
  139. // data->Print();
  140. TH1D* h_beamSignal_1 = new TH1D("h_beamSignal_1","h_beamSignal_1",510,-5000,50000);
  141. TH1D* h_ic1_1 = new TH1D("h_ic1_1","h_ic1_1",510,-5000,50000);
  142. TH1D* h_ic2_1 = new TH1D("h_ic2_1","h_ic2_1",510,-5000,50000);
  143. TH1D* h_ic1_corr = new TH1D("h_ic1_corr","h_ic1_corr",210,-0.04,8);
  144. TH1D* h_ic2_corr = new TH1D("h_ic2_corr","h_ic2_corr",210,-0.04,8);
  145. TH2D* h_beamSignal_v_ic_pscorr = new TH2D("h_beamSignal_v_ic_pscorr","h_beamSignal_v_ic_pscorr",400,-0.05,8.,400,-.05,3.0);
  146. TH1D* h_beamSignal_offsetcorr = new TH1D("h_beamSignal_offsetcorr","h_beamSignal_offsetcorr",210,-.05,8.);
  147. TH1D* h_beamSignal_corr = new TH1D("h_beamSignal_corr","h_beamSignal_corr",210,-.0500,8);
  148. TH1D* h_ic_beam_diff = new TH1D("h_ic_beam_diff","h_ic_beam_diff",400,-4,4);
  149. TH2D* h_beamSignal_v_ic_corr = new TH2D("h_beamSignal_v_ic_corr","h_beamSignal_v_ic_corr",210,-.05,8.,410,-3.0,3.0);
  150. TH2D* h_ic_v_ic_pscorr = new TH2D("h_ic_v_ic_pscorr","h_ic_v_ic_pscorr",400,-.05,8.,400,-0.05,8);
  151. TH2D* h_ic_v_ic_corr = new TH2D("h_ic_v_ic_corr","h_ic_v_ic_corr",210,-.05,8.,410,-3.0,3.0);
  152. TH1D* h_ic_beam_ratio = new TH1D("h_ic_beam_ratio","h_ic_beam_ratio",500,0,500.);
  153. TH2D* h_beamSignal_v_ic = new TH2D("h_beamSignal_v_ic","h_beamSignal_v_ic",510,-5000,50000,510,-5000,50000);
  154. TH1D* h_beamFocusX_1 = new TH1D("h_beamFocusX_1","h_beamFocusX_1",200,0,50.);
  155. TH1D* h_beamSkewX_1 = new TH1D("h_beamSkewX_1","h_beamSkewX_1",200,0,50.);
  156. TH1D* h_beamKurtX_1 = new TH1D("h_beamKurtX_1","h_beamKurtX_1",200,0,50.);
  157. TH1D* h_beamFocusX_fit = new TH1D("h_beamFocusX_fit","h_beamFocusX_fit",200,0,50.);
  158. TH1D* h_beamChi2_fit = new TH1D("h_beamChi2_fit","h_beamChi2_fit",200,0,50.);
  159. sp_air = f_c12sp_air->Eval(Energy)*(Intensity/1.0E6);
  160. sp_ps = f_c12sp_ps->Eval(Energy)*(Intensity/1.0E6);
  161. sp2_air = f_c12sp_air->Eval(Energy);
  162. sp2_ps = f_c12sp_ps->Eval(Energy);
  163. cout << sp_air << " " << sp_ps << " " << sp2_air << " " << sp2_ps << endl;
  164. // data->Project("h_beamSignal_1","beamPeakX_fit","ic1_1>0.1&&beamChi2_fit<1000");
  165. // data->Project("h_beamSignal_1","beamSignal_1-beamSidebandNoise_1","ic1_1>0.1");
  166. data->Project("h_beamSignal_1", "beamPeakX_fit*sqrt(2)*beamFocusX_fit/2.3548" ,"beamon==1&&ic1_1>0.001&&beamChi2_fit<200&&beamPeakX_fit>20");
  167. data->Project("h_beamFocusX_1","beamFocusX_1","ic1_1>0.01");
  168. data->Project("h_beamSkewX_1","beamSkewX_1","ic1_1>0.01");
  169. data->Project("h_beamKurtX_1","beamKurtX_1","ic1_1>0.01");
  170. data->Project("h_beamFocusX_fit","beamFocusX_fit","ic1_1>0.01&&beamChi2_fit<1000");
  171. data->Project("h_beamChi2_fit","beamChi2_fit","ic1_1>0.01&&beamChi2_fit<1000");
  172. focusmean = h_beamFocusX_1->GetMean();
  173. focusRMS = h_beamFocusX_1->GetRMS();
  174. skewmean = h_beamSkewX_1->GetMean();
  175. skewRMS = h_beamSkewX_1->GetRMS();
  176. kurtmean = h_beamKurtX_1->GetMean();
  177. kurtRMS = h_beamKurtX_1->GetRMS();
  178. focusFitmean = h_beamFocusX_fit->GetMean();
  179. focusFitRMS = h_beamFocusX_fit->GetRMS();
  180. chi2Fitmean = h_beamChi2_fit->GetMean();
  181. chi2FitRMS = h_beamChi2_fit->GetRMS();
  182. data->Project("h_ic1_1","ic1_1","ic1_1>0.01");
  183. data->Project("h_ic2_1","ic2_1","ic2_1>0.01");
  184. data->Project("h_ic1_corr",Form("ic1_1/%f",sp_air),"ic1_1>0.01");
  185. data->Project("h_ic2_corr",Form("ic2_1/%f",sp_air),"ic2_1>0.01");
  186. data->Project("h_ic_v_ic_pscorr",Form("ic1_1/%f:ic2_1/%f", sp_air, sp_air),"ic1_1>0.01&&ic2_1>0.01");
  187. h_ic_v_ic_pscorr->FitSlicesY(0,0,-1,5);
  188. TF1 * f2 = new TF1("f2","pol1");
  189. f2->SetParameters(10, 1.0);
  190. TH1D* h_ic_v_ic_pscorr_1 = (TH1D*)gDirectory->Get("h_ic_v_ic_pscorr_1");
  191. Int_t fitsuccess2 = h_ic_v_ic_pscorr_1->Fit(f2,"R","",0.2,4.5);
  192. data->Project("h_ic_v_ic_corr",Form("((ic1_1/%f-%f)/%f - ic2_1/%f)/(ic2_1/%f):ic2_1/%f", sp_air,f2->GetParameter(0), f2->GetParameter(1), sp_air,sp_air,sp_air),"ic1_1>0.01&&ic2_1>0.01");
  193. h_ic_v_ic_corr->FitSlicesY(0,0,-1,5);
  194. data->Project("h_beamSignal_v_ic_pscorr",Form("beamSignal_1/%f:ic2_1/%f",sp_ps,sp_air),"ic2_1>0.01");
  195. data->Project("h_beamSignal_v_ic","beamSignal_1:ic1_1","ic2_1>0.01");
  196. icbpmcorrelation = h_beamSignal_v_ic->GetCorrelationFactor();
  197. h_beamSignal_v_ic_pscorr->FitSlicesY(0,0,-1,10);
  198. TH1D* h_beamSignal_v_ic_pscorr_1 = (TH1D*)gDirectory->Get("h_beamSignal_v_ic_pscorr_1");
  199. TF1 * f1 = new TF1("f1","pol1");
  200. f1->SetParameters(10, 1.0);
  201. Int_t fitsuccess = h_beamSignal_v_ic_pscorr_1->Fit(f1,"R","",0.2,4.5);
  202. // cout << fitsuccess << " " << f1->GetParameter(0) << " " << f1->GetParameter(1) << endl;;
  203. data->Project("h_beamSignal_corr",Form("(beamSignal_1/%f-%f)/%f",sp_ps, f1->GetParameter(0), f1->GetParameter(1)),"ic2_1>0.01");
  204. data->Project("h_beamSignal_offsetcorr",Form("(beamSignal_1/%f-%f)",sp_ps, f1->GetParameter(0)),"ic2_1>0.01");
  205. data->Project("h_ic_beam_diff",Form("(beamSignal_1/%f-%f)/%f-(ic2_1/%f)", sp_ps,f1->GetParameter(0), f1->GetParameter(1),sp_air),"ic2_1>0.01");
  206. data->Project("h_beamSignal_v_ic_corr",Form("((beamSignal_1/%f-%f)/%f-(ic2_1)/%f)/(ic2_1/%f):(ic2_1)/%f", sp_ps,f1->GetParameter(0), f1->GetParameter(1),sp_air,sp_air,sp_air),"ic2_1>0.01");
  207. data->Project("h_ic_beam_ratio","(beamSignal_1/ic1_1)","ic1_1>0.01");
  208. h_beamSignal_v_ic_corr->FitSlicesY(0,0,-1,5);
  209. signalmean = h_beamSignal_1->GetMean();
  210. signalmeanerror = h_beamSignal_1->GetMeanError();
  211. signalmean_corr = h_beamSignal_corr->GetMean();
  212. signalmeanerror_corr = h_beamSignal_corr->GetMeanError();
  213. signalmean_offsetcorr = h_beamSignal_offsetcorr->GetMean();
  214. signalmeanerror_offsetcorr = h_beamSignal_offsetcorr->GetMeanError();
  215. ic1mean = h_ic1_1->GetMean();
  216. ic1meanerror = h_ic1_1->GetMeanError();
  217. ic2mean = h_ic2_1->GetMean();
  218. ic2meanerror = h_ic2_1->GetMeanError();
  219. ic_beam_ratio=h_ic_beam_ratio->GetMean();
  220. ic_beam_ratioerror=h_ic_beam_ratio->GetRMS();
  221. intcorr = (Intensity /19.8E6) / (totalcurrent/sp2_air/totaltime);
  222. //cout << id << " " <<sp_air << " " << ic1mean/sp_air << " " << ic1meanerror/sp2_air << endl;
  223. // cout << id <<" " << Intensity/1.0E6*intcorr << " " <<signalmean/(Intensity/1.0E6)/(ic1mean/sp_air) << " " << signalmeanerror/(Intensity/1.0E6)/(ic1mean/sp_air) << endl;
  224. ic1energyfile << Intensity/1.0E6*intcorr << " " << ic1mean *intcorr << " " << ic1meanerror*intcorr<< " " << Filename << endl;
  225. // ic2energyfile << sp2_air << " " << ic2mean / (Intensity/1.0E6) / (0.659869 + 1.50842 * sp2_air) << " " << ic2meanerror/sp_air << " " << Filename << endl;
  226. beamenergyfile << Intensity/1.E6*intcorr << " " << signalmean*intcorr << " " << signalmeanerror*intcorr << endl;
  227. beamenergyfile_iccorr << Intensity/1.0E6*intcorr << " " <<ic_beam_ratio*sp2_air/sp2_ps/84.5 << " " << ic_beam_ratioerror*sp2_air/sp2_ps/84.5 << endl;
  228. cout << Intensity/1.0E6*intcorr << " " << totalcurrent << " " << totaltime/1000. << " " << totalcurrent / sp2_air << " " << totalcurrent/sp2_air/totaltime<< " " << Intensity << " " << (ic1mean/0.312) / (totalcurrent/totaltime) << " " << intcorr << endl;
  229. ic2energyfile << Intensity/1.0E6*intcorr << " " << icbpmcorrelation << endl;
  230. noisefile << Intensity/1.0E6*intcorr << " " << noisemean << " " << noiseRMS << endl;
  231. focusfile << Intensity/1.0E6*intcorr << " " << focusmean*0.8 << " " << focusRMS*0.8 << endl;
  232. focusHITfile << Intensity/1.0E6*intcorr << " " << F1 << endl;
  233. skewfile << Intensity/1.0E6*intcorr << " " << skewmean << " " << skewRMS << endl;
  234. kurtfile << Intensity/1.0E6*intcorr << " " << kurtmean << " " << kurtRMS << endl;
  235. focusFitfile << Intensity/1.0E6*intcorr << " " << focusFitmean*0.8 << " " << focusFitRMS*0.8 << endl;
  236. chi2Fitfile << Intensity/1.0E6*intcorr << " " << chi2Fitmean << " " << chi2FitRMS << endl;
  237. // h_beamSignal_1->Draw("");
  238. // c1->SaveAs(Form("figs/h_beamsignal_%i.pdf",nfiles));
  239. // c1->Destructor();
  240. file->Close();
  241. outfile->Write();
  242. outfile->Close();
  243. in >> EList >> Energy >> F1 >> Intensity >> SP >> Filename >> id;
  244. // cout << EList << Energy << F1 << Intensity << SP << Filename << id << endl;
  245. nfiles++;
  246. }
  247. ic1energyfile.close();
  248. ic2energyfile.close();
  249. beamenergyfile.close();
  250. beamenergyfile_iccorr.close();
  251. noisefile.close();
  252. focusfile.close();
  253. focusHITfile.close();
  254. skewfile.close();
  255. kurtfile.close();
  256. in.close();
  257. focusFitfile.close();
  258. chi2Fitfile.close();
  259. return 0;
  260. }