Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.35 KB | None | 0 0
  1. #define GeantTreeAnalysis_cxx
  2. #define n_quad 4
  3. #define n_layer_per_quad 4
  4. #define pos_layer_1 450
  5. #define pos_layer_2 150
  6. #define pos_layer_3 -150
  7. #define pos_layer_4 -450
  8.  
  9. #include "Functions.h"
  10. #include <cstdlib>
  11. #include <iostream>
  12. #include <iomanip>
  13. #include <fstream>
  14. #include <TCanvas.h>
  15. #include <TGaxis.h>
  16. #include <TH2.h>
  17. #include <TH3.h>
  18. #include <TEfficiency.h>
  19. #include <TGraph.h>
  20. #include <TMultiGraph.h>
  21. #include <TStyle.h>
  22. #include <sstream>
  23. #include "TMath.h"
  24. #include <math.h>
  25. #include <string>
  26. #include <TFile.h>
  27. #include <vector>
  28. #include <TLegend.h>
  29.  
  30. using namespace std;
  31.  
  32.  
  33. void GeantTreeAnalysis::Loop()
  34. {
  35. if (fChain == 0)
  36. return;
  37.  
  38. bool DELTA_RAY_CUTS=true;
  39.  
  40. std::ostringstream tmp;
  41. Long64_t nentries = fChain->GetEntriesFast();
  42. ofstream results;
  43. results.open ("results_selection.txt");
  44. //Declaration before Loop
  45. TH1I* h0 = new TH1I("h0", "Cut flow", 10, 0.5, 10.5);
  46. TH1F* h1 = new TH1F("h1", "p_t in x-z plane", 100, 0, 1000);
  47. TH1F* h2 = new TH1F("h2", "Energy of Track", 100, 0, 1000);
  48. TH1F* h3 = new TH1F("h3", "Energydeposition along Track", 50, 0, 50);
  49. TH1F* h4 = new TH1F("h4", "angle between muon and electron x,z plane", 180, 0, 180);
  50. TH1F* Edep_layer[n_layer_per_quad * n_quad];
  51. // TH1F* Edep_layernocut[n_layer_per_quad * n_quad];
  52. // TH1F* Edep_layerallcut[n_layer_per_quad * n_quad];
  53. TLegend* leg = new TLegend(0.72,0.6,0.9,0.75);
  54.  
  55. for(int i = 0; i < n_layer_per_quad * n_quad; i++){
  56. char *histname = new char[30];
  57. sprintf(histname, "Edep_layer_%d",i);
  58. Edep_layer[i]=new TH1F(histname,"Energy deposited",25,0,5);
  59. }
  60. /*for(int i = 0; i < n_layer_per_quad * n_quad; i++){
  61. char *histname = new char[30];
  62. sprintf(histname, "Edep_layer_%d_nocut",i);
  63. Edep_layernocut[i]=new TH1F(histname,"Energy deposited",50,0,50);
  64. }
  65. for(int i = 0; i < n_layer_per_quad * n_quad; i++){
  66. char *histname = new char[30];
  67. sprintf(histname, "Edep_layer_%d_allcut",i);
  68. Edep_layerallcut[i]=new TH1F(histname,"Energy deposited",50,0,50);
  69. }*/
  70. //label bins in cut flow
  71. h0->GetXaxis()->SetBinLabel(1, "All events");
  72. h0->GetXaxis()->SetBinLabel(2, "Muon pos z");
  73. h0->GetXaxis()->SetBinLabel(3, "Muon pos");
  74. h0->GetXaxis()->SetBinLabel(4, "electron pos");
  75. h0->GetXaxis()->SetBinLabel(5, "e Energy cut");
  76. h0->GetXaxis()->SetBinLabel(6, "e tracklength cut");
  77. h0->GetXaxis()->SetBinLabel(7, "electron pos 2");
  78. h0->GetXaxis()->SetBinLabel(8, "straightness");
  79. //Fill_TH(string HistoName, string sbin, float value_x, EventClass::HistoGraphType hgtype) --> HistoName->Fill(sbin.c_str(),value_x); Fill_TH("cutflow","All events", 1, EventClass::myTH1I);
  80.  
  81. Long64_t jentry;
  82. Long64_t nbytes = 0, nb = 0;
  83. //Loop over all events to get a hitmap
  84. for ( jentry = 0; jentry < 20000; jentry++) { if(jentry%1000==0){std::cout<<" event "<<jentry<<endl;}
  85. Long64_t ientry = LoadTree(jentry);
  86. nb = fChain->GetEntry(jentry);
  87. nbytes += nb;
  88. h0->Fill("All events",1);
  89.  
  90. if (Geant4Trajectories->at(0).GetPoints().at(Geant4Trajectories->at(0).GetPoints().size()-1).GetPosition().Z()>425){continue;}
  91. int passlayer = 0; h0->Fill("Muon pos z",1);
  92. for (int j = 0; j< Geant4Trajectories->at(0).GetPoints().size(); ++j ){
  93. if(Geant4Trajectories->at(0).GetPoints().at(j).GetPosition().Z()<425){passlayer= j; break;}
  94. }
  95. if (abs(Geant4Trajectories->at(0).GetPoints().at(passlayer).GetPosition().X())>1330.1||abs(Geant4Trajectories->at(0).GetPoints().at(passlayer).GetPosition().Y())>1330.1) {continue;} //std::cout<<"Muon does not cross first active area in ev"<<jentry<<endl;continue;}
  96. h0->Fill("Muon pos",1);
  97. int numtrack = 0;
  98. for (int i = 0; i < Geant4Trajectories->size(); ++i){
  99. if(Geant4Trajectories->at(i).GetParticleName().substr(0,1) == "e"){
  100. if(Geant4Trajectories->at(i).GetPoints().size()>1){
  101. if (Geant4Trajectories->at(i).GetPoints().at(Geant4Trajectories->at(i).GetPoints().size()-1).GetPosition().Z()<425 & Geant4Trajectories->at(i).GetPoints().at(0).GetPosition().Z()>-425 & abs(Geant4Trajectories->at(0).GetPoints().at(0).GetPosition().X())<1330.1 & abs(Geant4Trajectories->at(0).GetPoints().at(0).GetPosition().Y())<1330.1 ){++numtrack;}
  102. }
  103. }
  104.  
  105. }
  106. //std::cout<<numtrack<<endl;
  107.  
  108. if (numtrack == 0){continue;}//std::cout<<"No track found in active area in ev "<<jentry<<endl;} */
  109. h0->Fill("electron pos",1);
  110. for (int k = 0; k < Geant4Trajectories->size(); ++k){
  111. double p_x = 0, p_z = 0, p_t = 0, depE = 0, theta = 0, twoDtot = 0, A = 0, B = 0 ;
  112. double v1[3], v2[3];
  113. if(Geant4Trajectories->at(k).GetParticleName().substr(0,1) != "e"){continue;}
  114. if(Geant4Trajectories->at(k).GetPoints().size()<2){continue;}
  115. if (DELTA_RAY_CUTS){
  116. if (Geant4Trajectories->at(k).GetPoints().at(0).GetEnergy()<1) {continue;} h0->Fill("e Energy cut",1);
  117. if (Distance(Geant4Trajectories->at(k).GetPoints().at(0).GetPosition(),Geant4Trajectories->at(k).GetPoints().at(Geant4Trajectories->at(k).GetPoints().size()-1).GetPosition())<7){continue;} h0->Fill("e tracklength cut",1);
  118. if (Geant4Trajectories->at(k).GetPoints().at(Geant4Trajectories->at(k).GetPoints().size()-1).GetPosition().Z()>425 || Geant4Trajectories->at(k).GetPoints().at(0).GetPosition().Z()<-425){continue;} h0->Fill("electron pos 2",1);
  119.  
  120.  
  121.  
  122. double realtracklength = 0;
  123. for (int m = 1; m < Geant4Trajectories->at(k).GetPoints().size(); ++m ){
  124. realtracklength = realtracklength + Distance(Geant4Trajectories->at(k).GetPoints().at(m-1).GetPosition(),Geant4Trajectories->at(k).GetPoints().at(m).GetPosition());
  125. }
  126. if (Distance(Geant4Trajectories->at(k).GetPoints().at(0).GetPosition(),Geant4Trajectories->at(k).GetPoints().at(Geant4Trajectories->at(k).GetPoints().size()-1).GetPosition())/realtracklength <0.98){continue;} h0->Fill("straightness",1);
  127. }
  128.  
  129. p_x = Geant4Trajectories->at(k).GetPoints().at(0).GetMomentum().X();
  130. p_z = Geant4Trajectories->at(k).GetPoints().at(0).GetMomentum().Z();
  131. p_t = sqrt(p_x*p_x +p_z*p_z);
  132. //if (p_t!=0) {}
  133. h1->Fill(p_t);
  134.  
  135. h2->Fill(Geant4Trajectories->at(k).GetPoints().at(0).GetEnergy());
  136.  
  137. //calculate angle: vetor 1 muon, vector 2 electron, starting point = vertex, end point
  138.  
  139. v1[0]= Geant4Trajectories->at(k).GetPoints().at(0).GetPosition().X()-Geant4Trajectories->at(0).GetPoints().at(Geant4Trajectories->at(0).GetPoints().size()-1).GetPosition().X();
  140. //v1[1]= Geant4Trajectories->at(k).GetPoints().at(0).GetPosition().Y()-Geant4Trajectories->at(0).GetPoints().at(Geant4Trajectories->at(0).GetPoints().size()-1).GetPosition().Y();
  141. v1[2]= Geant4Trajectories->at(k).GetPoints().at(0).GetPosition().Z()-Geant4Trajectories->at(0).GetPoints().at(Geant4Trajectories->at(0).GetPoints().size()-1).GetPosition().Z();
  142. v2[0]= Geant4Trajectories->at(k).GetPoints().at(0).GetPosition().X()-Geant4Trajectories->at(k).GetPoints().at(Geant4Trajectories->at(k).GetPoints().size()-1).GetPosition().X();
  143. //v2[1]= Geant4Trajectories->at(k).GetPoints().at(0).GetPosition().Y()-Geant4Trajectories->at(k).GetPoints().at(Geant4Trajectories->at(k).GetPoints().size()-1).GetPosition().Y();
  144. v2[2]= Geant4Trajectories->at(k).GetPoints().at(0).GetPosition().Z()-Geant4Trajectories->at(k).GetPoints().at(Geant4Trajectories->at(k).GetPoints().size()-1).GetPosition().Z();
  145.  
  146. twoDtot = ((v1[0]*v2[0])+(v1[2]*v2[2]));
  147. A = pow(v1[0],2)+pow(v1[2],2);
  148. A = sqrt(A);
  149. B = pow(v2[0],2)+pow(v2[2],2);
  150. B = sqrt(B);
  151. theta = acos(twoDtot/(A*B))*180.0 / M_PI;//min( acos(twoDtot/(A*B))*180.0 / M_PI, (180 - acos(twoDtot/(A*B))*180.0/M_PI));
  152. //std::cout<<theta<<" Degree"<<endl;
  153. h4->Fill(theta);
  154.  
  155. for (int l = 0; l < Geant4Hits->size(); ++l){
  156. if (Geant4Hits->at(l).GetTrackID() == Geant4Trajectories->at(k).GetTrackID()){depE = depE + Geant4Hits->at(l).GetEnergyDep();}
  157. }
  158. h3->Fill(depE);
  159.  
  160. for (int layer = 1; layer < n_layer_per_quad * n_quad +1; ++layer){
  161. for (int l = 0; l < Geant4Hits->size(); ++l){
  162. if (Geant4Hits->at(l).GetTrackID() == Geant4Trajectories->at(k).GetTrackID()& WhichLayer(Geant4Hits->at(l))== layer)
  163. {depE = depE + Geant4Hits->at(l).GetEnergyDep();
  164. //if(depE>5& layer !=1) {std::cout<<"energy deposited"<<depE<<" in layer "<<layer<<" trackid"<<Geant4Hits->at(l).GetTrackID()<<"in ev "<<jentry<<" particle type "<<Geant4Hits->at(l).GetParticleName()<<"creation process "<<Geant4Hits->at(l).GetProcessName()<<endl;}
  165. string layer_name = Geant4Hits->at(l).GetSEName();
  166. int layer_number = 0;
  167. if (layer_name.substr(0, 9) == "quadlayer"){
  168. layer_number = atoi(layer_name.substr(9, 2).c_str());
  169. }
  170. //std::cout<<WhichQuad(Geant4Hits->at(l))<<" in quadlayer "<<WhichLayer(Geant4Hits->at(l))<< " in layer loop "<<layer<<" in ev "<<jentry<<" hit in "<<layer_name<<"Track ID "<<Geant4Hits->at(l).GetTrackID()<<" Hit z position "<<Geant4Hits->at(l).GetPoint().GetPosition().Z()<<endl;
  171. }
  172. }
  173. if (depE != 0){Edep_layer[layer-1]->Fill(depE);}
  174. depE = 0;
  175. }
  176.  
  177.  
  178. //h2->Fill(Geant4Trajectories->at(k).GetPoints().at(0).GetEnergy(),Distance(Geant4Trajectories->at(k).GetPoints().at(0).GetPosition(),Geant4Trajectories->at(k).GetPoints().at(Geant4Trajectories->at(k).GetPoints().size()-1).GetPosition()));
  179. // h3->Fill(Geant4Trajectories->at(k).GetPoints().size(),Distance(Geant4Trajectories->at(k).GetPoints().at(0).GetPosition(),Geant4Trajectories->at(k).GetPoints().at(Geant4Trajectories->at(k).GetPoints().size()-1).GetPosition()));
  180.  
  181.  
  182. //}
  183. //std::cout<<p_t<<endl;
  184.  
  185. //}
  186. //}}} //ifcheck
  187. }
  188. }
  189. ///end of brakets for eventdisplay loop
  190. gStyle->SetOptStat();
  191. leg->AddEntry(Edep_layer[1],"sTGC1","f");
  192. leg->AddEntry(Edep_layer[5],"sTGC2","f");
  193. leg->AddEntry(Edep_layer[9],"sTGC3","f");
  194. leg->AddEntry(Edep_layer[13],"sTGC4","f");
  195.  
  196. TCanvas* c1 = new TCanvas("c1", "p_t no cut", 800, 800);
  197. h1->Draw("E");
  198. h1->GetXaxis()->SetTitle("p_t (MeV)");
  199. h1->GetYaxis()->SetTitle("#tracks");
  200. h1->GetYaxis()->SetTitleOffset( 1.5 );
  201. h1->SetStats(1);
  202. c1->SetLogy();
  203. c1->SetLogx();
  204. if (DELTA_RAY_CUTS) c1->Print("p_t_cutlog.pdf");
  205. else c1->Print("p_t_nocutnolog.pdf");
  206. TCanvas* c2 = new TCanvas("c2", "Energy of Track", 800, 800);
  207. h2->Draw("E");
  208. h2->GetXaxis()->SetTitle("Energy (MeV)");
  209. h2->GetYaxis()->SetTitle("#tracks");
  210. h2->GetYaxis()->SetTitleOffset( 1.5 );
  211. h2->SetStats(1);
  212. c2->SetLeftMargin(1000);
  213. c2->SetRightMargin(10);
  214. c2->SetLogz();
  215. c2->SetLogx();
  216. c2->SetLogy();
  217. if (DELTA_RAY_CUTS) c2->Print("Trackenergy_cutlog.pdf");
  218. else c2->Print("Trackenergy_nocutlog.pdf");
  219. //
  220. TCanvas* c3 = new TCanvas("c3", "Deposited_energy_nocut", 800, 800);
  221. h3->Draw("E");
  222. h3->GetXaxis()->SetTitle("Deposited_energy (MeV)");
  223. h3->GetYaxis()->SetTitle("#tracks");
  224. h3->GetYaxis()->SetTitleOffset( 1.5 );
  225. c3->SetLogy();
  226. h3->SetStats(1);
  227. if (DELTA_RAY_CUTS) c3->Print("depE_cutlog.pdf");
  228. else c3->Print("depE_nocutlog.pdf");
  229. TCanvas* c4 = new TCanvas("c4", "Opening Angle 2D", 800, 800);
  230. h4->Draw("E");
  231. h4->GetXaxis()->SetTitle("Opening angle (deg)");
  232. h4->GetYaxis()->SetTitle("#tracks");
  233. h4->GetYaxis()->SetTitleOffset( 1.5 );
  234. h4->SetStats(1);
  235. //c4->SetLogy();
  236. if (DELTA_RAY_CUTS) c4->Print("theta_cut.pdf");
  237. else c4->Print("theta_nocut.pdf");
  238. results.close();
  239. TCanvas* c0 = new TCanvas("c0", "Cutflow", 800, 800);
  240. h0->Draw("HISTTEXT");
  241. h0->GetXaxis()->SetTitle("Cuts");
  242. h0->GetYaxis()->SetTitle("#events");
  243. h0->GetYaxis()->SetTitleOffset( 1.5 );
  244. //c3->SetLogy();
  245. h0->SetStats(1);
  246. c0->Print("cutflowsel.pdf");
  247. TCanvas* csTGC1 = new TCanvas("csTGC1", "Energydeposited M3SP", 800, 800);
  248. csTGC1->Divide(2,2);
  249. for (int i = 0 ; i < 4 ; ++i){
  250. csTGC1->cd(i+1);
  251. Edep_layer[i]->Draw("E");
  252. Edep_layer[i]->SetLineColor(1);
  253. Edep_layer[i+4]->Draw("SAME,E");
  254. Edep_layer[i+4]->SetLineColor(kRed);
  255. Edep_layer[i+8]->Draw("SAME,E");
  256. Edep_layer[i+12]->Draw("SAME,E");
  257. Edep_layer[i+12]->SetLineColor(kGreen+2);
  258. Edep_layer[i]->GetXaxis()->SetTitle("Deposited_energy (MeV)");
  259. Edep_layer[i]->GetYaxis()->SetTitle("#tracks");
  260. Edep_layer[i]->GetYaxis()->SetTitleOffset( 1.5 );
  261. Edep_layer[i]->SetStats(1);
  262. leg->Draw();}
  263.  
  264. //csTGC1->SetLogy();
  265. csTGC1->Print("depE_sTGCsel.pdf");
  266.  
  267. TCanvas* csTGC2 = new TCanvas("csTGC2", "Energydeposited M3SC", 800, 800);
  268. csTGC2->Divide(2,2);
  269. for (int i = 4 ; i < 8 ; ++i){
  270. csTGC2->cd(i-3);
  271. Edep_layer[i]->Draw("E");
  272. Edep_layer[i]->GetXaxis()->SetTitle("Deposited_energy (MeV)");
  273. Edep_layer[i]->GetYaxis()->SetTitle("#tracks");
  274. Edep_layer[i]->GetYaxis()->SetTitleOffset( 1.5 );
  275. Edep_layer[i]->SetStats(1);}
  276. csTGC2->SetLogy();
  277. csTGC2->Print("depE_sTGC2.pdf");
  278.  
  279. TCanvas* csTGC3 = new TCanvas("csTGC3", "Energydeposited M2LP", 800, 800);
  280. csTGC3->Divide(2,2);
  281. for (int i = 8 ; i < 12 ; ++i){
  282. csTGC3->cd(i-7);
  283. Edep_layer[i]->Draw("E");
  284. Edep_layer[i]->GetXaxis()->SetTitle("Deposited_energy (MeV)");
  285. Edep_layer[i]->GetYaxis()->SetTitle("#tracks");
  286. Edep_layer[i]->GetYaxis()->SetTitleOffset( 1.5 );
  287. Edep_layer[i]->SetStats(1);}
  288. csTGC3->SetLogy();
  289. csTGC3->Print("depE_sTGC3.pdf");
  290.  
  291. TCanvas* csTGC4 = new TCanvas("csTGC4", "Energydeposited M2LC", 800, 800);
  292. csTGC4->Divide(2,2);
  293. for (int i = 12 ; i < 16 ; ++i){
  294. csTGC4->cd(i-11);
  295. Edep_layer[i]->Draw("E");
  296. Edep_layer[i]->GetXaxis()->SetTitle("Deposited_energy (MeV)");
  297. Edep_layer[i]->GetYaxis()->SetTitle("#tracks");
  298. Edep_layer[i]->GetYaxis()->SetTitleOffset( 1.5 );
  299. Edep_layer[i]->SetStats(1);}
  300. csTGC4->SetLogy();
  301. csTGC4->Print("depE_sTGC4.pdf");
  302. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement