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.

565 lines
17 KiB

  1. B//////////////////////////////////////////////////////////
  2. // This class has been automatically generated on
  3. // Tue Sep 12 15:40:57 2017 by ROOT version 5.34/32
  4. // from TTree t/t
  5. // found on file: ../../HIT_26-11-2016/with_timestamp/pin/PiN_run1.root
  6. //////////////////////////////////////////////////////////
  7. #ifndef analyse2_h
  8. #define analyse2_h
  9. #include <TROOT.h>
  10. #include <TChain.h>
  11. #include <TFile.h>
  12. #include <TTree.h>
  13. #include <stdio.h>
  14. #include <TH2D.h>
  15. #include <TH1D.h>
  16. #include <TProfile.h>
  17. #include <TCanvas.h>
  18. #include <TF1.h>
  19. #include <TMath.h>
  20. #include <vector>
  21. #include <utility>
  22. #include <TString.h>
  23. #include <TDirectory.h>
  24. #include <TString.h>
  25. #include <TVectorD.h>
  26. #include <TGraph.h>
  27. #include <TGraphErrors.h>
  28. #include <cmath>
  29. #include <TPaveStats.h>
  30. #include <TText.h>
  31. #include <TROOT.h>
  32. #include <TStyle.h>
  33. #include <TObjArray.h>
  34. #include <TLegend.h>
  35. using namespace std;
  36. // Header file for the classes stored in the TTree if any.
  37. // Fixed size dimensions of array or collections stored in the TTree if any.
  38. class analyse2 {
  39. public :
  40. TTree *fChain; //!pointer to the analyzed TTree or TChain
  41. Int_t fCurrent; //!current Tree number in a TChain
  42. TTree *data;
  43. TTree *newdata;
  44. // Declaration of leaf types
  45. Double_t time;
  46. Double_t event_id;
  47. Double_t sync_out;
  48. Double_t sync_in;
  49. Double_t data_ok;
  50. Double_t led_voltage;
  51. Double_t current;
  52. Double_t ch00;
  53. Double_t ch01;
  54. Double_t ch02;
  55. Double_t ch03;
  56. Double_t ch04;
  57. Double_t ch05;
  58. Double_t ch06;
  59. Double_t ch07;
  60. Double_t ch08;
  61. Double_t ch09;
  62. Double_t ch10;
  63. Double_t ch11;
  64. Double_t ch12;
  65. Double_t ch13;
  66. Double_t ch14;
  67. Double_t ch15;
  68. Double_t ch16;
  69. Double_t ch17;
  70. Double_t ch18;
  71. Double_t ch19;
  72. Double_t ch20;
  73. Double_t ch21;
  74. Double_t ch22;
  75. Double_t ch23;
  76. Double_t ch24;
  77. Double_t ch25;
  78. Double_t ch26;
  79. Double_t ch27;
  80. Double_t ch28;
  81. Double_t ch29;
  82. Double_t ch30;
  83. Double_t ch31;
  84. Double_t ch32;
  85. Double_t ch33;
  86. Double_t ch34;
  87. Double_t ch35;
  88. Double_t ch36;
  89. Double_t ch37;
  90. Double_t ch38;
  91. Double_t ch39;
  92. Double_t ch40;
  93. Double_t ch41;
  94. Double_t ch42;
  95. Double_t ch43;
  96. Double_t ch44;
  97. Double_t ch45;
  98. Double_t ch46;
  99. Double_t ch47;
  100. Double_t ch48;
  101. Double_t ch49;
  102. Double_t ch50;
  103. Double_t ch51;
  104. Double_t ch52;
  105. Double_t ch53;
  106. Double_t ch54;
  107. Double_t ch55;
  108. Double_t ch56;
  109. Double_t ch57;
  110. Double_t ch58;
  111. Double_t ch59;
  112. Double_t ch60;
  113. Double_t ch61;
  114. Double_t ch62;
  115. Double_t ch63;
  116. Double_t ic1;
  117. Double_t ic2;
  118. Double_t mw1_focusx;
  119. Double_t mw1_focusy;
  120. Double_t mw2_focusx;
  121. Double_t mw2_focusy;
  122. Double_t mw1_posx;
  123. Double_t mw1_posy;
  124. Double_t mw2_posx;
  125. Double_t mw2_posy;
  126. // List of branches
  127. TBranch *b_time; //!
  128. TBranch *b_event_id; //!
  129. TBranch *b_sync_out; //!
  130. TBranch *b_sync_in; //!
  131. TBranch *b_data_ok; //!
  132. TBranch *b_led_voltage; //!
  133. TBranch *b_current; //!
  134. TBranch *b_ch00; //!
  135. TBranch *b_ch01; //!
  136. TBranch *b_ch02; //!
  137. TBranch *b_ch03; //!
  138. TBranch *b_ch04; //!
  139. TBranch *b_ch05; //!
  140. TBranch *b_ch06; //!
  141. TBranch *b_ch07; //!
  142. TBranch *b_ch08; //!
  143. TBranch *b_ch09; //!
  144. TBranch *b_ch10; //!
  145. TBranch *b_ch11; //!
  146. TBranch *b_ch12; //!
  147. TBranch *b_ch13; //!
  148. TBranch *b_ch14; //!
  149. TBranch *b_ch15; //!
  150. TBranch *b_ch16; //!
  151. TBranch *b_ch17; //!
  152. TBranch *b_ch18; //!
  153. TBranch *b_ch19; //!
  154. TBranch *b_ch20; //!
  155. TBranch *b_ch21; //!
  156. TBranch *b_ch22; //!
  157. TBranch *b_ch23; //!
  158. TBranch *b_ch24; //!
  159. TBranch *b_ch25; //!
  160. TBranch *b_ch26; //!
  161. TBranch *b_ch27; //!
  162. TBranch *b_ch28; //!
  163. TBranch *b_ch29; //!
  164. TBranch *b_ch30; //!
  165. TBranch *b_ch31; //!
  166. TBranch *b_ch32; //!
  167. TBranch *b_ch33; //!
  168. TBranch *b_ch34; //!
  169. TBranch *b_ch35; //!
  170. TBranch *b_ch36; //!
  171. TBranch *b_ch37; //!
  172. TBranch *b_ch38; //!
  173. TBranch *b_ch39; //!
  174. TBranch *b_ch40; //!
  175. TBranch *b_ch41; //!
  176. TBranch *b_ch42; //!
  177. TBranch *b_ch43; //!
  178. TBranch *b_ch44; //!
  179. TBranch *b_ch45; //!
  180. TBranch *b_ch46; //!
  181. TBranch *b_ch47; //!
  182. TBranch *b_ch48; //!
  183. TBranch *b_ch49; //!
  184. TBranch *b_ch50; //!
  185. TBranch *b_ch51; //!
  186. TBranch *b_ch52; //!
  187. TBranch *b_ch53; //!
  188. TBranch *b_ch54; //!
  189. TBranch *b_ch55; //!
  190. TBranch *b_ch56; //!
  191. TBranch *b_ch57; //!
  192. TBranch *b_ch58; //!
  193. TBranch *b_ch59; //!
  194. TBranch *b_ch60; //!
  195. TBranch *b_ch61; //!
  196. TBranch *b_ch62; //!
  197. TBranch *b_ch63; //!
  198. TBranch *b_ic1; //!
  199. TBranch *b_ic2; //!
  200. TBranch *b_mw1_focusx; //!
  201. TBranch *b_mw1_focusy; //!
  202. TBranch *b_mw2_focusx; //!
  203. TBranch *b_mw2_focusy; //!
  204. TBranch *b_mw1_posx; //!
  205. TBranch *b_mw1_posy; //!
  206. TBranch *b_mw2_posx; //!
  207. TBranch *b_mw2_posy; //!
  208. char *file;
  209. TFile *fileIn;
  210. TFile *fileOut;
  211. TObjArray objectArray;
  212. TBranch *b_channels[64];
  213. TBranch *b_baseline[64];
  214. double channels[64];
  215. double baseline[64];
  216. double channellist[64];
  217. TBranch *b_beamPosX_1;
  218. TBranch *b_beamFocusX_1;
  219. TBranch *b_beamSignal_1;
  220. TBranch *b_beamSkewX_1;
  221. TBranch *b_beamKurtX_1;
  222. TBranch *b_ic1_1; //!
  223. TBranch *b_ic2_1; //!
  224. TBranch *b_mw1_focusx_1; //!
  225. TBranch *b_mw1_focusy_1; //!
  226. TBranch *b_mw2_focusx_1; //!
  227. TBranch *b_mw2_focusy_1; //!
  228. TBranch *b_mw1_posx_1; //!
  229. TBranch *b_mw1_posy_1; //!
  230. TBranch *b_mw2_posx_1; //!
  231. TBranch *b_mw2_posy_1; //!
  232. TBranch *b_baseline_integral;
  233. TBranch *b_time_1; //!
  234. double time_1;
  235. double ic1_1;
  236. double ic2_1;
  237. double mw1_focusx_1;
  238. double mw2_focusx_1;
  239. double mw2_posx_1;
  240. double mw1_posx_1;
  241. double mw1_focusy_1;
  242. double mw2_focusy_1;
  243. double mw2_posy_1;
  244. double mw1_posy_1;
  245. double beamPosX_1;
  246. double beamFocusX_1;
  247. double beamSignal_1;
  248. double beamSkewX_1;
  249. double beamKurtX_1;
  250. double baseline_integral;
  251. analyse2(TTree *tree=0);
  252. virtual ~analyse2();
  253. virtual Int_t Cut(Long64_t entry);
  254. virtual Int_t GetEntry(Long64_t entry);
  255. virtual Long64_t LoadTree(Long64_t entry);
  256. virtual void Init(TTree *tree);
  257. virtual void Loop();
  258. virtual Bool_t Notify();
  259. virtual void Show(Long64_t entry = -1);
  260. double channelWidth;
  261. void Initialize(const char *dirname, const char *filename, int baselineEvents = 1000, int prelimEvents = 10000, double beamLevel = 0.1, bool firstFibermat = true, double readOutFrequency = 1000., int integrationTime = 100);
  262. void Baseline(bool useFirstEvents, int nBaselineEvents);
  263. void Save();
  264. void Close();
  265. TH2F * th2f_mw1_beamPosX;
  266. TH2F * th2f_ic1_beamSignal;
  267. };
  268. #endif
  269. #ifdef analyse2_cxx
  270. analyse2::analyse2(TTree *tree) : fChain(0)
  271. {
  272. // if parameter tree is not specified (or zero), connect the file
  273. // used to generate this class and read the Tree.
  274. if (tree == 0) {
  275. cerr << "no TTree found." << endl;
  276. }
  277. Init(tree);
  278. }
  279. analyse2::~analyse2()
  280. {
  281. if (!fChain) return;
  282. delete fChain->GetCurrentFile();
  283. }
  284. Int_t analyse2::GetEntry(Long64_t entry)
  285. {
  286. // Read contents of entry.
  287. if (!fChain) return 0;
  288. return fChain->GetEntry(entry);
  289. }
  290. Long64_t analyse2::LoadTree(Long64_t entry)
  291. {
  292. // Set the environment to read one entry
  293. if (!fChain) return -5;
  294. Long64_t centry = fChain->LoadTree(entry);
  295. if (centry < 0) return centry;
  296. if (fChain->GetTreeNumber() != fCurrent) {
  297. fCurrent = fChain->GetTreeNumber();
  298. Notify();
  299. }
  300. return centry;
  301. }
  302. void analyse2::Init(TTree *tree)
  303. {
  304. // The Init() function is called when the selector needs to initialize
  305. // a new tree or chain. Typically here the branch addresses and branch
  306. // pointers of the tree will be set.
  307. // It is normally not necessary to make changes to the generated
  308. // code, but the routine can be extended by the user if needed.
  309. // Init() will be called many times when running on PROOF
  310. // (once per file to be processed).
  311. // Set branch addresses and branch pointers
  312. if (!tree) return;
  313. fChain = tree;
  314. fCurrent = -1;
  315. fChain->SetMakeClass(1);
  316. fChain->SetBranchAddress("time", &time, &b_time);
  317. fChain->SetBranchAddress("event_id", &event_id, &b_event_id);
  318. fChain->SetBranchAddress("sync_out", &sync_out, &b_sync_out);
  319. fChain->SetBranchAddress("sync_in", &sync_in, &b_sync_in);
  320. fChain->SetBranchAddress("data_ok", &data_ok, &b_data_ok);
  321. fChain->SetBranchAddress("led_voltage", &led_voltage, &b_led_voltage);
  322. fChain->SetBranchAddress("current", &current, &b_current);
  323. fChain->SetBranchAddress("ch00", &ch00, &b_ch00);
  324. fChain->SetBranchAddress("ch01", &ch01, &b_ch01);
  325. fChain->SetBranchAddress("ch02", &ch02, &b_ch02);
  326. fChain->SetBranchAddress("ch03", &ch03, &b_ch03);
  327. fChain->SetBranchAddress("ch04", &ch04, &b_ch04);
  328. fChain->SetBranchAddress("ch05", &ch05, &b_ch05);
  329. fChain->SetBranchAddress("ch06", &ch06, &b_ch06);
  330. fChain->SetBranchAddress("ch07", &ch07, &b_ch07);
  331. fChain->SetBranchAddress("ch08", &ch08, &b_ch08);
  332. fChain->SetBranchAddress("ch09", &ch09, &b_ch09);
  333. fChain->SetBranchAddress("ch10", &ch10, &b_ch10);
  334. fChain->SetBranchAddress("ch11", &ch11, &b_ch11);
  335. fChain->SetBranchAddress("ch12", &ch12, &b_ch12);
  336. fChain->SetBranchAddress("ch13", &ch13, &b_ch13);
  337. fChain->SetBranchAddress("ch14", &ch14, &b_ch14);
  338. fChain->SetBranchAddress("ch15", &ch15, &b_ch15);
  339. fChain->SetBranchAddress("ch16", &ch16, &b_ch16);
  340. fChain->SetBranchAddress("ch17", &ch17, &b_ch17);
  341. fChain->SetBranchAddress("ch18", &ch18, &b_ch18);
  342. fChain->SetBranchAddress("ch19", &ch19, &b_ch19);
  343. fChain->SetBranchAddress("ch20", &ch20, &b_ch20);
  344. fChain->SetBranchAddress("ch21", &ch21, &b_ch21);
  345. fChain->SetBranchAddress("ch22", &ch22, &b_ch22);
  346. fChain->SetBranchAddress("ch23", &ch23, &b_ch23);
  347. fChain->SetBranchAddress("ch24", &ch24, &b_ch24);
  348. fChain->SetBranchAddress("ch25", &ch25, &b_ch25);
  349. fChain->SetBranchAddress("ch26", &ch26, &b_ch26);
  350. fChain->SetBranchAddress("ch27", &ch27, &b_ch27);
  351. fChain->SetBranchAddress("ch28", &ch28, &b_ch28);
  352. fChain->SetBranchAddress("ch29", &ch29, &b_ch29);
  353. fChain->SetBranchAddress("ch30", &ch30, &b_ch30);
  354. fChain->SetBranchAddress("ch31", &ch31, &b_ch31);
  355. fChain->SetBranchAddress("ch32", &ch32, &b_ch32);
  356. fChain->SetBranchAddress("ch33", &ch33, &b_ch33);
  357. fChain->SetBranchAddress("ch34", &ch34, &b_ch34);
  358. fChain->SetBranchAddress("ch35", &ch35, &b_ch35);
  359. fChain->SetBranchAddress("ch36", &ch36, &b_ch36);
  360. fChain->SetBranchAddress("ch37", &ch37, &b_ch37);
  361. fChain->SetBranchAddress("ch38", &ch38, &b_ch38);
  362. fChain->SetBranchAddress("ch39", &ch39, &b_ch39);
  363. fChain->SetBranchAddress("ch40", &ch40, &b_ch40);
  364. fChain->SetBranchAddress("ch41", &ch41, &b_ch41);
  365. fChain->SetBranchAddress("ch42", &ch42, &b_ch42);
  366. fChain->SetBranchAddress("ch43", &ch43, &b_ch43);
  367. fChain->SetBranchAddress("ch44", &ch44, &b_ch44);
  368. fChain->SetBranchAddress("ch45", &ch45, &b_ch45);
  369. fChain->SetBranchAddress("ch46", &ch46, &b_ch46);
  370. fChain->SetBranchAddress("ch47", &ch47, &b_ch47);
  371. fChain->SetBranchAddress("ch48", &ch48, &b_ch48);
  372. fChain->SetBranchAddress("ch49", &ch49, &b_ch49);
  373. fChain->SetBranchAddress("ch50", &ch50, &b_ch50);
  374. fChain->SetBranchAddress("ch51", &ch51, &b_ch51);
  375. fChain->SetBranchAddress("ch52", &ch52, &b_ch52);
  376. fChain->SetBranchAddress("ch53", &ch53, &b_ch53);
  377. fChain->SetBranchAddress("ch54", &ch54, &b_ch54);
  378. fChain->SetBranchAddress("ch55", &ch55, &b_ch55);
  379. fChain->SetBranchAddress("ch56", &ch56, &b_ch56);
  380. fChain->SetBranchAddress("ch57", &ch57, &b_ch57);
  381. fChain->SetBranchAddress("ch58", &ch58, &b_ch58);
  382. fChain->SetBranchAddress("ch59", &ch59, &b_ch59);
  383. fChain->SetBranchAddress("ch60", &ch60, &b_ch60);
  384. fChain->SetBranchAddress("ch61", &ch61, &b_ch61);
  385. fChain->SetBranchAddress("ch62", &ch62, &b_ch62);
  386. fChain->SetBranchAddress("ch63", &ch63, &b_ch63);
  387. fChain->SetBranchAddress("ic1", &ic1, &b_ic1);
  388. fChain->SetBranchAddress("ic2", &ic2, &b_ic2);
  389. fChain->SetBranchAddress("mw1_focusx", &mw1_focusx, &b_mw1_focusx);
  390. fChain->SetBranchAddress("mw1_focusy", &mw1_focusy, &b_mw1_focusy);
  391. fChain->SetBranchAddress("mw2_focusx", &mw2_focusx, &b_mw2_focusx);
  392. fChain->SetBranchAddress("mw2_focusy", &mw2_focusy, &b_mw2_focusy);
  393. fChain->SetBranchAddress("mw1_posx", &mw1_posx, &b_mw1_posx);
  394. fChain->SetBranchAddress("mw1_posy", &mw1_posy, &b_mw1_posy);
  395. fChain->SetBranchAddress("mw2_posx", &mw2_posx, &b_mw2_posx);
  396. fChain->SetBranchAddress("mw2_posy", &mw2_posy, &b_mw2_posy);
  397. Notify();
  398. }
  399. Bool_t analyse2::Notify()
  400. {
  401. // The Notify() function is called when a new file is opened. This
  402. // can be either for a new TTree in a TChain or when when a new TTree
  403. // is started when using PROOF. It is normally not necessary to make changes
  404. // to the generated code, but the routine can be extended by the
  405. // user if needed. The return value is currently not used.
  406. return kTRUE;
  407. }
  408. void analyse2::Show(Long64_t entry)
  409. {
  410. // Print contents of entry.
  411. // If entry is not specified, print current entry
  412. if (!fChain) return;
  413. fChain->Show(entry);
  414. }
  415. Int_t analyse2::Cut(Long64_t entry)
  416. {
  417. // This function may be called from Loop.
  418. // returns 1 if entry is accepted.
  419. // returns -1 otherwise.
  420. return 1;
  421. }
  422. void analyse2::Initialize(const char *dirname, const char *filename, int baselineEvents, int prelimEvents, double beamLevel, bool firstFibermat, double readOutFrequency, int integrationTime)
  423. {
  424. TString fn = TString(filename);
  425. TString dn = TString(dirname);
  426. channelWidth = 0.8;
  427. TString inName = dn + "pin/" + fn;
  428. fileIn = new TFile(inName, "READ");
  429. fileIn->GetObject("t", fChain);
  430. fChain->Print();
  431. Init(fChain);
  432. TString outname = filename;
  433. outname.Insert(0, "SAVE_");
  434. outname.Insert(0, dirname);
  435. fileOut = new TFile(outname.Data(), "RECREATE");
  436. newdata = new TTree("newdata", "newdata");
  437. for (int n = 0; n < 64; n++)
  438. {
  439. baseline[n] = 0.;
  440. channellist[n] = double(n);
  441. char bname[20];
  442. sprintf(bname, "ch%02d", n);
  443. b_channels[n] = fChain->GetBranch(bname);
  444. b_channels[n]->SetAddress(&channels[n]);
  445. }
  446. b_beamPosX_1 = newdata->Branch("beamPosX_1", &beamPosX_1);
  447. b_beamFocusX_1 = newdata->Branch("beamFocusX_1", &beamFocusX_1);
  448. b_beamSignal_1 = newdata->Branch("beamSignal_1", &beamSignal_1);
  449. b_beamSkewX_1 = newdata->Branch("beamSkewX_1", &beamSkewX_1);
  450. b_beamKurtX_1 = newdata->Branch("beamKurtX_1", &beamKurtX_1);
  451. b_ic1_1 = newdata->Branch("ic1_1", &ic1_1);
  452. b_ic2_1 = newdata->Branch("ic2_1", &ic2_1);
  453. b_mw1_focusx_1 = newdata->Branch("mw1_focusx_1", &mw1_focusx_1);
  454. b_mw1_posx_1 = newdata->Branch("mw1_posx_1", &mw1_posx_1);
  455. b_mw2_focusx_1 = newdata->Branch("mw2_focusx_1", &mw2_focusx_1);
  456. b_mw2_posx_1 = newdata->Branch("mw2_posx_1", &mw2_posx_1);
  457. b_mw1_focusy_1 = newdata->Branch("mw1_focusy_1", &mw1_focusy_1);
  458. b_mw1_posy_1 = newdata->Branch("mw1_posy_1", &mw1_posy_1);
  459. b_mw2_focusy_1 = newdata->Branch("mw2_focusy_1", &mw2_focusy_1);
  460. b_mw2_posy_1 = newdata->Branch("mw2_posy_1", &mw2_posy_1);
  461. b_time_1 = newdata->Branch("time_1", &time_1);
  462. //histograms;
  463. th2f_mw1_beamPosX = new TH2F("th2f_mw1_beamPosX","th2f_mw1_beamPosX",200,0,64,200,0,30);
  464. th2f_ic1_beamSignal = new TH2F("th2f_ic1_beamSignal","th2f_ic1_beamSignal",200,0,300,200,0,30000);
  465. }
  466. void analyse2::Baseline(bool useFirstEvents, int nBaselineEvents)
  467. {
  468. Long64_t nevents = fChain->GetEntriesFast();
  469. baseline_integral = 0.;
  470. // use the first/last nBaselineEvents events to calculate the average/baseline
  471. if (!useFirstEvents)
  472. { // last
  473. for (int i = nevents - nBaselineEvents; i < nevents; i++)
  474. {
  475. fChain->GetEvent(i);
  476. for (int ch = 0; ch < 64; ch++)
  477. {
  478. baseline[ch] += channels[ch] / double(nBaselineEvents);
  479. baseline_integral +=baseline[ch];
  480. }
  481. }
  482. }
  483. else
  484. {
  485. for (int i = 1; i <= nBaselineEvents; i++)
  486. {
  487. fChain->GetEvent(i);
  488. for (int ch = 0; ch < 64; ch++)
  489. {
  490. baseline[ch] += channels[ch] / double(nBaselineEvents);
  491. baseline_integral +=baseline[ch];
  492. }
  493. }
  494. }
  495. }
  496. void analyse2::Save()
  497. {
  498. //fileIn->Close();
  499. //fileOut->cd();
  500. newdata->AutoSave();
  501. }
  502. void analyse2::Close()
  503. {
  504. fileIn->Close();
  505. fileOut->Close();
  506. if(fChain) delete fChain->GetCurrentFile();
  507. }
  508. #endif // #ifdef analyse2_cxx