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.

308 lines
9.7 KiB

  1. #include "hitutils.h"
  2. #include <string>
  3. #include <stdio.h>
  4. #include <iostream>
  5. #include <vector>
  6. #include <utility>
  7. #include <TH2.h>
  8. #include <TF1.h>
  9. #include <TStyle.h>
  10. #include <TCanvas.h>
  11. #include <TFile.h>
  12. #include <TTree.h>
  13. #include <TSystemDirectory.h>
  14. #include <gsl/gsl_statistics.h>
  15. #include <math.h>
  16. #include <gsl/gsl_errno.h>
  17. #include <gsl/gsl_fft_complex.h>
  18. #include <TF1.h>
  19. #include <TGraphErrors.h>
  20. #include <gsl/gsl_sort.h>
  21. #include <TVector.h>
  22. #include "TStopwatch.h"
  23. #include "Math/MinimizerOptions.h"
  24. #include "TVirtualFitter.h"
  25. #include "TMatrixD.h"
  26. Double_t S[128], T[128], SumT, SumS, SumS2, SumST, SumT2, SumY, SumYS, SumYT, sigmaABC, muABC,p,c, b, b_den, b_num, SumYYP, SumYYM, MeanY;
  27. TMatrixD M1(3,3);
  28. TMatrixD M1inv(3,3);
  29. TVectorD ABC(3);
  30. TVectorD M2(3);
  31. Double_t M1elements_b0[9] = {0.};
  32. Double_t M1elements_b1[9] = {0.};
  33. Double_t M1elements_b2[9] = {0.};
  34. Double_t M1elements_b3[9] = {0.};
  35. TMatrixD matrix(2,2);
  36. TMatrixD *M1pointer = &M1;
  37. TVectorD *M2pointer = &M2;
  38. TVectorD *ABCpointer = &ABC;
  39. int eventID = 0;
  40. int framestart=0;
  41. int frameend = 0;
  42. double board_b0_ch[128];
  43. double board_b1_ch[128];
  44. double board_b2_ch[128];
  45. double board_b3_ch[128];
  46. double board_b0_ch_bkg[128];
  47. double board_b1_ch_bkg[128];
  48. double board_b2_ch_bkg[128];
  49. double board_b3_ch_bkg[128];
  50. double signal_b0 = 0.;
  51. double signal_b1 = 0.;
  52. double signal_b2 = 0.;
  53. double signal_b3 = 0.;
  54. double signal_cor_b0 = 0.;
  55. double signal_cor_b1 = 0.;
  56. double signal_cor_b2 = 0.;
  57. double signal_cor_b3 = 0.;
  58. double signal_b0_left = 0.;
  59. double signal_b1_left = 0.;
  60. double signal_b2_left = 0.;
  61. double signal_b3_left = 0.;
  62. double signal_b0_right = 0.;
  63. double signal_b1_right = 0.;
  64. double signal_b2_right = 0.;
  65. double signal_b3_right = 0.;
  66. double signal_gsl_b0[128];
  67. double signal_gsl_b1[128];
  68. double signal_gsl_b2[128];
  69. double signal_gsl_b3[128];
  70. double signal_reg[128];
  71. double channellist_gsl_b0[128];
  72. double channellist_gsl_b1[128];
  73. double channellist_gsl_b2[128];
  74. double channellist_gsl_b3[128];
  75. double channellist[128];
  76. double channellist_reg[128];
  77. double pos[128];
  78. double maxchannelamp_b0 =0.;
  79. double maxchannelamp_b1 =0.;
  80. double maxchannelamp_b2 =0.;
  81. double maxchannelamp_b3 =0.;
  82. int maxchannel_b0 =0;
  83. int maxchannel_b1 =0;
  84. int maxchannel_b2 =0;
  85. int maxchannel_b3 =0;
  86. int numtocalc_b0 =0;
  87. int numtocalc_b1 =0;
  88. int numtocalc_b2 =0;
  89. int numtocalc_b3 =0;
  90. int numtocalc_reg =0;
  91. int nfwhm_b0 = 0;
  92. int nfwhm_b1 = 0;
  93. int nfwhm_b2 = 0;
  94. int nfwhm_b3 = 0;
  95. double beamPosX_b0,beamPosX_b1,beamPosX_b2,beamPosX_b3;
  96. double beamFocusX_b0,beamFocusX_b1,beamFocusX_b2,beamFocusX_b3;
  97. double beamPosX_fit_b0,beamPosX_fit_b1,beamPosX_fit_b2,beamPosX_fit_b3;
  98. double beamFocusX_fit_b0,beamFocusX_fit_b1,beamFocusX_fit_b2,beamFocusX_fit_b3;
  99. double beamSkewX_b0,beamSkewX_b1,beamSkewX_b2,beamSkewX_b3;
  100. double beamKurtX_b0,beamKurtX_b1,beamKurtX_b2,beamKurtX_b3;
  101. int beamNumX_b0,beamNumX_b1,beamNumX_b2,beamNumX_b3;
  102. double beamRsqr_b0,beamRsqr_b1,beamRsqr_b2,beamRsqr_b3;
  103. double beamChi2_fit_b0,beamChi2_fit_b1,beamChi2_fit_b2,beamChi2_fit_b3;
  104. double beamPosX_reg_b0,beamPosX_reg_b1,beamPosX_reg_b2,beamPosX_reg_b3;
  105. double beamFocusX_reg_b0,beamFocusX_reg_b1,beamFocusX_reg_b2,beamFocusX_reg_b3;
  106. double beamPeakX_reg_b0,beamPeakX_reg_b1,beamPeakX_reg_b2,beamPeakX_reg_b3;
  107. double beamSidebandNoise_b0, beamSidebandNoise_b1, beamSidebandNoise_b2, beamSidebandNoise_b3 ;
  108. int sidenumtocalc_b0,sidenumtocalc_b1,sidenumtocalc_b2,sidenumtocalc_b3;
  109. size_t size = 5;
  110. const int length = 100; //length of the rolling average
  111. double array_b0[length] = {0.};
  112. double array_b1[length] = {0.};
  113. double array_b2[length] = {0.};
  114. double array_b3[length] = {0.};
  115. double arrayavg_b0 = 0.;
  116. double arrayavg_b1 = 0.;
  117. double arrayavg_b2 = 0.;
  118. double arrayavg_b3 = 0.;
  119. bool graphsaved_b0 = false;
  120. bool graphsaved_b1 = false;
  121. bool graphsaved_b2 = false;
  122. bool graphsaved_b3 = false;
  123. TVector beamontime(0,3,0.,0.,0.,0.,"END");
  124. TVector * beamontime_ptr = &beamontime;
  125. double calibration_b0[128] = {0.};
  126. double calibration_b1[128] = {0.};
  127. double calibration_b2[128] = {0.};
  128. double calibration_b3[128] = {0.};
  129. TF1 * gausfunc_b0 = new TF1("gausfunc_b0","gaus(0)+[3]");
  130. TF1 * gausfunc_b1 = new TF1("gausfunc_b1","gaus(0)+[3]");
  131. TGraphErrors * gausgraph_b0;
  132. TGraphErrors * gausgraph_b1;
  133. Int_t lastfit_b0 = 0;
  134. Int_t lastfit_b1 = 0;
  135. double errorx[128];
  136. double errory[128];
  137. bool samplenoise = false;
  138. bool beam_off = true;
  139. bool beam_wason = false;
  140. int beamoffcounter = 0;
  141. int beamoncounter = 0;
  142. Double_t mybeta = 0.;
  143. Double_t lorentz_gamma = 0.;
  144. Double_t zsqr = 0.;
  145. Double_t sp_air = 0.;
  146. Double_t sp_ps = 0.;
  147. Double_t sp2_air = 0.;
  148. Double_t sp2_ps = 0.;
  149. Double_t intcorr = 1.;
  150. Double_t x, q, median;
  151. Double_t signaloffset_b0[30];
  152. Double_t signaloffset_b1[30];
  153. Double_t signaloffset_b2[30];
  154. Double_t signaloffset_b3[30];
  155. 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]
  156. 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]
  157. 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]
  158. 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]
  159. 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]
  160. 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]
  161. 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]
  162. 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]
  163. ///// ic1/SP intensity correction factor = 19.8E6+/-0.1E6 particles/s per nA/(Mevcm2/g)
  164. bool smooth_on;
  165. bool doFit;
  166. bool doLinInt;
  167. bool ethercat;
  168. char * ethercatfile;
  169. char * filename;
  170. char * offsetfilename;
  171. char * timestampfilename ;
  172. char * rootfilename ;
  173. ifstream file;
  174. ifstream timestampfile;
  175. ifstream offsetfile;
  176. int board_b;
  177. long int fileframesize;
  178. BufferData* dataptr;
  179. TFile *rootFile;
  180. TH2D * th2_signal_vs_channel_b0;
  181. TH2D * th2_signal_vs_channel_b1;
  182. TH2D * th2_signal_vs_channel_b2;
  183. TH2D * th2_signal_vs_channel_b3 ;
  184. TH2D * th2_signal_vs_channel_sub_b0;
  185. TH2D * th2_signal_vs_channel_sub_b1;
  186. TH2D * th2_signal_vs_channel_sub_b2;
  187. TH2D * th2_signal_vs_channel_sub_b3;
  188. TH1D * th1_signal_b0;
  189. TH1D * th1_signal_b1;
  190. TH1D * th1_signal_b2;
  191. TH1D * th1_signal_b3;
  192. TH1D * h_regresidual_b0;
  193. TH1D * h_regresidual_b1;
  194. TH1D * h_regresidual_b2;
  195. TH1D * h_regresidual_b3;
  196. TGraph * graph_bkg_b0;
  197. TGraph * graph_bkg_b1;
  198. TGraph * graph_bkg_b2;
  199. TGraph * graph_bkg_b3;
  200. TGraph * gr_b0; TGraph * gr_b1; TGraph * gr_b2; TGraph * gr_b3;
  201. TGraph * gr_sm_b0; TGraph * gr_sm_b1; TGraph * gr_sm_b2; TGraph * gr_sm_b3;
  202. TH2D * th2_signal_vs_channel_bkg_b0;
  203. TH2D * th2_signal_vs_channel_bkg_b1;
  204. TH2D * th2_signal_vs_channel_bkg_b2;
  205. TH2D * th2_signal_vs_channel_bkg_b3;
  206. TH2D * th2_resid_vs_channel_bkg_b0;
  207. TH2D * th2_resid_vs_channel_bkg_b1;
  208. TH2D * th2_resid_vs_channel_bkg_b2;
  209. TH2D * th2_resid_vs_channel_bkg_b3;
  210. TH1D* h_beamSignal_b0[30];
  211. TH1D* h_beamSignal_b1[30];
  212. TH1D* h_beamSignal_b2[30];
  213. TH1D* h_beamSignal_b3[30];
  214. int energy_indexbin = 0;
  215. char histname[30] = "";
  216. TH1D* h_beamSignal_ic1[30];
  217. TH1D* h_beamSignal_cor_b0[30];
  218. TH1D* h_beamSignal_cor_b1[30];
  219. TH1D* h_beamSignal_cor_b2[30];
  220. TH1D* h_beamSignal_cor_b3[30];
  221. Double_t beamSignal_cor_b0_mean[30];
  222. Double_t beamSignal_cor_b1_mean[30];
  223. Double_t beamSignal_cor_b2_mean[30];
  224. Double_t beamSignal_cor_b3_mean[30];
  225. Double_t mybeta_graph[30];
  226. int goodevents_b0=0;
  227. int goodevents_b1=0;
  228. int goodevents_b2=0;
  229. int goodevents_b3=0;
  230. TTree *rootTree;
  231. int k = 0;
  232. // int count = 0;
  233. double ic1, ic2, mw1_focusx, mw1_focusy, mw2_focusx, mw2_focusy, mw1_posx, mw1_posy, mw2_posx, mw2_posy;
  234. double ic1_avg, ic2_avg, mw1_focusx_avg, mw1_focusy_avg, mw2_focusx_avg, mw2_focusy_avg, mw1_posx_avg, mw1_posy_avg, mw2_posx_avg, mw2_posy_avg;
  235. double analog_in1;
  236. double energy_index;
  237. double energy;
  238. double energy_list_p[27] = {48.12, 59.82, 70.03, 79.17, 87.53, 95.3, 102.61, 109.56, 116.2, 122.57, 128.72, 134.65, 140.41, 146.01, 151.5, 156.89, 162.21, 167.46, 172.62, 177.7, 184.81, 191.87, 198.76, 205.48, 212.06, 218.51, 0.};
  239. double energy_list_he[27] = {50.57, 61.86, 71.73, 80.64, 88.85, 96.52, 103.76, 110.64, 117.23, 123.55, 129.64, 135.55, 141.27, 146.84, 152.26, 157.56, 162.73, 167.8, 172.77, 177.64, 184.56, 191.54, 198.36, 205.03, 211.57, 217.98, 0.};
  240. double energy_list_c[27] = {88.83,110.58,129.79,147.13,163.09,178.01,192.13,205.6,218.52,230.98,243.03,254.71,266.08,277.19,288.1,298.87,309.52,320.07,330.48,340.77,355.22,369.64,383.78,397.66,411.32,424.77,0.};
  241. double energy_list_o[27] = {103.77, 129.65, 152.42, 172.98, 191.96, 209.63, 226.53, 242.58, 258.11, 273.04, 287.5, 301.55, 315.32, 328.61, 341.84, 354.88, 367.94, 380.48, 393.09, 405.65, 423.23, 440.82, 458.11, 475.28, 491.93, 508.38, 0.};
  242. double intensity_index;
  243. double intensity;
  244. double intensity_list_p[16] = {0., 8.00E+07, 1.20E+08, 2.00E+08, 3.20E+08,4.00E+08, 6.00E+08, 8.00E+08, 1.20E+09, 2.00E+09, 3.20E+09, 4.00E+09, 6.00E+09, 8.00E+09, 1.20E+10, 2.00E+10};
  245. double intensity_list_he[16] = { 0., 2.00E+07, 3.00E+07, 5.00E+07, 8.00E+07, 1.00E+08, 1.50E+08, 2.00E+08, 3.00E+08, 5.00E+08, 8.00E+08, 1.00E+09, 1.50E+09, 2.00E+09, 3.00E+09, 5.00E+09};
  246. double intensity_list_c[16] = {0.,2.00E+06, 3.00E+06, 5.00E+06, 8.00E+06, 1.00E+07, 1.50E+07, 2.00E+07, 3.00E+07, 5.00E+07, 8.00E+07, 1.00E+08, 1.50E+08, 2.00E+08, 3.00E+08, 5.00E+08};
  247. double intensity_list_o[16] = {0., 1.00E+06, 1.50E+06, 2.50E+06, 4.00E+06, 5.00E+06, 8.00E+06, 1.00E+07, 1.50E+07, 2.50E+07, 4.00E+07, 5.00E+07, 8.00E+07, 1.00E+08, 1.50E+08, 2.50E+08 };
  248. double ionsort;
  249. double rel_time2,time2;
  250. double timeoffset;
  251. int mwoffset;
  252. double timewindow;
  253. double timeoffset2;
  254. double timewindow2;