FairRoot/PandaRoot
DrawHits.cxx
Go to the documentation of this file.
1 // -------------------------------------------------------------------------
2 // ----- DrawHits source file -----
3 // ----- Created 20/10/09 by Diapnwita Dutta -----
4 // ----- -----
5 // ----- -----
6 // -------------------------------------------------------------------------
7 #include <fstream>
8 #include <iostream>
9 #include "stdio.h"
10 
11 #include "PndGeoDrc.h"
12 #include "DrawHits.h"
13 #include "FairRootManager.h"
14 #include "PndMCTrack.h"
15 #include "PndDrcBarPoint.h"
16 #include "PndDrcPDPoint.h"
17 #include "PndDrcHit.h"
18 #include "PndDrcPDHit.h"
19 #include "TVector3.h"
20 #include "TPolyLine.h"
21 #include "TLine.h"
22 #include "TLegend.h"
23 #include "TRandom.h"
24 #include "FairRunAna.h"
25 #include "FairRuntimeDb.h"
26 #include "FairBaseParSet.h"
27 #include "FairGeoVolume.h"
28 #include "TString.h"
29 #include "FairGeoTransform.h"
30 #include "FairGeoVector.h"
31 #include "FairGeoMedium.h"
32 #include "FairGeoNode.h"
33 #include "PndGeoDrcPar.h"
34 #include "TFormula.h"
35 #include "TMath.h"
36 #include "TParticlePDG.h"
37 #include "TDatabasePDG.h"
38 #include "TPDGCode.h"
39 #include "TGeoManager.h"
40 #include "TCanvas.h"
41 #include "TFile.h"
42 
43 
44 using std::endl;
45 using std::cout;
46 
47 // ----- Default constructor -------------------------------------------
49 :FairTask("DrawHits")
50 {
51  fGeo = new PndGeoDrc();
52 
53 }
54 // ----- Standard constructor with verbosity level -------------------------------------------
55 
57  :FairTask("DrawHits")
58 {
59  fVerbose = verbose;
60  fGeo = new PndGeoDrc();
61 }
62 // ----- Destructor ----------------------------------------------------
64 {
65  if (fGeo) delete fGeo;
66  fHistoList->Delete();
67  delete fHistoList;
68 }
69 // ----- Initialization -----------------------------------------------
70 InitStatus DrawHits::Init()
71 {
72  cout << " ---------- INITIALIZATION ------------" << endl;
73  nevents = 0;
74  // Get RootManager
75  FairRootManager* ioman = FairRootManager::Instance();
76  if ( ! ioman ) {
77  cout << "-E- DrawHits::Init: "
78  << "RootManager not instantiated!" << endl;
79  return kFATAL;
80  }
81 
82  // Get input array
83  fMCArray = (TClonesArray*) ioman->GetObject("MCTrack");
84  if ( ! fMCArray ) {
85  cout << "-W- DrawHits::Init: "
86  << "No MCTrack array!" << endl;
87  return kERROR;
88  }
89  // Get input array
90  fBarPointArray = (TClonesArray*) ioman->GetObject("DrcBarPoint");
91  if ( ! fBarPointArray ) {
92  cout << "-W- DrawHits::Init: "
93  << "No DrcBarPoint array!" << endl;
94  return kERROR;
95  }
96  // Get Photon point array
97  fPDPointArray = (TClonesArray*) ioman->GetObject("DrcPDPoint");
98  if ( ! fPDPointArray ) {
99  cout << "-W- DrawHits::Init: "
100  << "No DrcPDPoint array!" << endl;
101  return kERROR;
102  }
103  // Get input array
104  fHitArray = (TClonesArray*) ioman->GetObject("DrcHit");
105  if ( ! fHitArray ) {
106  cout << "-W- DrawHits::Init: "
107  << "No DrcHit array!" << endl;
108  return kERROR;
109  }
110  // Get input array
111  fPDHitArray = (TClonesArray*) ioman->GetObject("DrcPDHit");
112  if ( ! fPDHitArray ) {
113  cout << "-W- DrawHits::Init: "
114  << "No DrcPDHit array!" << endl;
115  return kERROR;
116  }
117 
118  cout << "-I- DrawHits: Intialization successfull" << endl;
119  CreateHisto();
120  return kSUCCESS;
121 
122 }
123 // ----- Execution of Task ---------------------------------------------
124 void DrawHits::Exec(Option_t*) // ion //[R.K.03/2017] unused variable(s)
125 {
126 
127  nevents++;
128  fDetectorID = 0;
129 
130 
131  // fNHits = 0;
132  ProcessBarHit();
134  ProcessPhotonMC();
135 }
136 //--------------Process Bar Hits----------------------------------------------------
138 {
139  PndDrcBarPoint* pt=NULL;
140  PndDrcHit* hit=NULL;
141  PndMCTrack* tr = NULL;
142  Double_t deg=180.0/TMath::Pi();
143 
144  // Loop over PndDrcHit
145  for(Int_t j=0; j<fHitArray->GetEntriesFast(); j++) {
146  //for(Int_t j=0; j<fBarPointArray->GetEntriesFast(); j++) {
147  if (fVerbose > 1) printf("\n\n=====> Event No. %d\n", nevents);
148 
149  hit = (PndDrcHit*)fHitArray->At(j);
150 
151  Double_t xH = hit->GetX();
152  Double_t yH = hit->GetY();
153  Double_t zH = hit->GetZ();
154 
155  Int_t mcRef= hit->GetRefIndex();
156  pt= (PndDrcBarPoint*)fBarPointArray->At(mcRef);
157  // pt= (PndDrcBarPoint*)fBarPointArray->At(j);
158  Int_t chtrID= pt->GetTrackID();
159  tr = (PndMCTrack*)fMCArray->At(chtrID);
160  Int_t chtrPdg= tr->GetPdgCode();
161  Int_t chtrMid=tr->GetMotherID();
162 
163  Double_t trPx = pt->GetPx();
164  Double_t trPy = pt->GetPy();
165  Double_t trPz = pt->GetPz();
166  Double_t trP = sqrt(trPx*trPx + trPy*trPy +trPz*trPz);
167  Double_t mass = pt->GetMass();
168  //Double_t energy = sqrt(trP*trP + mass*mass); //[R.K. 01/2017] unused variable?
169 
170  // for my tree phoTree:
171  xEnt = pt->GetX();
172  yEnt = pt->GetY();
173  zEnt = pt->GetZ();
174 
175  xbar = xH;
176  ybar = yH;
177  zbar = zH;
178 
179  //phoTree->Fill();
180  TVector3 barmom;
181  pt->Momentum(barmom);
182  Double_t angIn= barmom.Theta();
183  Double_t angDeg=angIn*deg;
184 
185  fThetaC = gRandom->Gaus(pt->GetThetaC(),0.008);
186  fErrThetaC = 0.; //rad
187 
188  if(abs(chtrPdg) == 321)fhThetaCMomK->Fill(trP,fThetaC);
189  if(abs(chtrPdg) == 211)fhThetaCMomP->Fill(trP,fThetaC);
190  if(abs(chtrPdg) == 13)fhThetaCMomM->Fill(trP,fThetaC);
191  if(abs(chtrPdg) == 11)fhThetaCMomE->Fill(trP,fThetaC);
192  if(chtrMid == -1){
193  fhMomAng->Fill(angDeg,trP);
194  cout<<"ang = "<<angDeg<<", mom = "<<trP<<endl;
195 
196  }//prim particle
197  fhThetaC->Fill(fThetaC);
198  fhThetaCMass->Fill(fThetaC,mass);
199 
200  }
201 }
202 //--------------Process Photon MC Points----------------------------------------------------
204 {
205  //Double_t deg=180.0/TMath::Pi(); //[R.K. 01/2017] unused variable?
206 
207 
208  PndMCTrack* ptr = NULL;
209  PndMCTrack* trMr=NULL;
210  for(Int_t l=0; l<fPDPointArray->GetEntriesFast(); l++) {
211  PndDrcPDPoint *Ppt = (PndDrcPDPoint*)fPDPointArray->At(l);
212  Int_t trID= Ppt->GetTrackID();
213  ptr = (PndMCTrack*)fMCArray->At(trID);
214 
215  Int_t trMID=ptr->GetMotherID();
216  trMr = (PndMCTrack*)fMCArray->At(trMID);
217  Int_t trMpdg=trMr->GetPdgCode();
218 
219  if(trMr->GetMotherID()==-1){
220 
221  Double_t xP= Ppt->GetX();
222  Double_t yP= Ppt->GetY();
223  //Double_t zP= Ppt->GetZ(); //[R.K. 01/2017] unused variable?
224 
225  fhXYPDMCPt->Fill(xP,yP);
226  if( nevents==1 && trMpdg ==321)fhXYPDMCPtKp->Fill(xP,yP);
227  if( nevents==1 && trMpdg ==-321)fhXYPDMCPtKn->Fill(xP,yP);
228  if( nevents==1 && trMpdg ==211)fhXYPDMCPtpip->Fill(xP,yP);
229  if( nevents==1 && trMpdg ==-211)fhXYPDMCPtpin->Fill(xP,yP);
230  if( nevents==1 && trMpdg ==13)fhXYPDMCPtmp->Fill(xP,yP);
231  if( nevents ==1 && trMpdg ==-13)fhXYPDMCPtmn->Fill(xP,yP);
232 
233  // Momentum of photon at PD point
234  Double_t Pfx= Ppt->GetPx();
235  Double_t Pfy= Ppt->GetPy();
236  Double_t Pfz= Ppt->GetPz();
237  //Double_t Pf = sqrt(Pfx*Pfx + Pfy*Pfy +Pfz*Pfz); //[R.K. 01/2017] unused variable?
238  Double_t etot = sqrt(Pfx*Pfx + Pfy*Pfy +Pfz*Pfz);
239  //Double_t nRefrac=1.467; //[R.K. 01/2017] unused variable?
240  //Double_t lambda=197.0*2.0*TMath::Pi()/nRefrac/(etot*1.0E9);//wavelength of photon in nm
241  Double_t lambda=197.0*2.0*TMath::Pi()/(etot*1.0E9);
242 
243  //if(lambda > 350. && lambda < 600.){
244  fhLambdaMC->Fill(lambda);
245  TVector3 photon;
246  TVector3 mother;
247  photon.SetXYZ(ptr->GetMomentum().X(), ptr->GetMomentum().Y(), ptr->GetMomentum().Z());
248  mother.SetXYZ(trMr->GetMomentum().X(), trMr->GetMomentum().Y(), trMr->GetMomentum().Z());
249  fhCHrealMC->Fill(photon.Angle(mother));
250  fhCHlamMC->Fill(lambda,mother.Angle(photon));
251  //}
252  }// Prim particle
253  }//Photon points
254 
255 }
256 //--------------Process Photon Hits----------------------------------------------------
258 {
259  PndDrcPDPoint* Ppt=NULL;
260  PndDrcPDHit* pdhit=NULL;
261  PndMCTrack* tr = NULL;
262  PndMCTrack* trMr;
263  if (fVerbose > 0) {
264  cout <<" Number of Detected Photon Hits : "<<fPDHitArray->GetEntries()<<endl;
265  }
266 
267 // Loop over PndDrcPDHits
268  for(Int_t k=0; k<fPDHitArray->GetEntriesFast(); k++) {
269 
270  pdhit = (PndDrcPDHit*)fPDHitArray->At(k);
271 
272  Int_t mcPDRef= pdhit->GetRefIndex();
273  Ppt = (PndDrcPDPoint*)fPDPointArray->At(mcPDRef);
274 
275  Int_t trID= Ppt->GetTrackID();
276  tr = (PndMCTrack*)fMCArray->At(trID);
277 
278  Int_t trMID=tr->GetMotherID();
279 
280  trMr = (PndMCTrack*)fMCArray->At(trMID);
281  Int_t trMpdg=trMr->GetPdgCode();
282 
283  if(trMr->GetMotherID()==-1){
284 
285 
286  Double_t xPHit= pdhit->GetX();
287  Double_t yPHit= pdhit->GetY();
288  Double_t zPHit= pdhit->GetZ();
289  Double_t time = pdhit->GetTime();
290 
291  // for my tree:
292  xhit = xPHit;
293  yhit = yPHit;
294  zhit = zPHit;
295  thit = time;
296 
297  pxMo = trMr->GetMomentum().X();
298  pyMo = trMr->GetMomentum().Y();
299  pzMo = trMr->GetMomentum().Z();
300  fPMo.SetXYZ(pxMo, pyMo, pzMo);
301 
302  fhPhoTheta->Fill(fPMo.Theta()/3.1415*180.);
303 
304  pxPho = tr->GetMomentum().X(); // initial momentum of a photon
305  pyPho = tr->GetMomentum().Y();
306  pzPho = tr->GetMomentum().Z();
307 
309 
310  // momentum of a photon on the PD Plane
311  fPx= Ppt->GetPx();
312  fPy= Ppt->GetPy();
313  fPz= Ppt->GetPz();
314 
315  // extrapolation of momentum on the PD Plane to the bar:
316  fXcross = xPHit - fPx/fPz*(120. + zPHit);
317  fYcross = yPHit - fPy/fPz*(120. + zPHit);
318 
319  //phoTree->Fill();
320  // ------------
321 
322  //Double_t xP= Ppt->GetX(); //[R.K. 01/2017] unused variable?
323  //Double_t yP= Ppt->GetY(); //[R.K. 01/2017] unused variable?
324  //Double_t zP= Ppt->GetZ(); //[R.K. 01/2017] unused variable?
325 
326  Double_t PPx= Ppt->GetPx();
327  Double_t PPy= Ppt->GetPy();
328  Double_t PPz= Ppt->GetPz();
329  Double_t etot = sqrt(PPx*PPx + PPy*PPy +PPz*PPz);
330  //Double_t nRefrac=1.467; //[R.K. 01/2017] unused variable?
331  //Double_t lambdah=197.0*2.0*TMath::Pi()/nRefrac/(etot*1.0E9);//wavelength of photon in nm
332  Double_t lambdah=197.0*2.0*TMath::Pi()/(etot*1.0E9);
333 
334  fhPDTime->Fill(time);
335  //if(lambdah > 350. && lambdah < 600.){
336  fhLambda->Fill(lambdah);
337  TVector3 photon1;
338  TVector3 mother1;
339  photon1.SetXYZ(tr->GetMomentum().X(), tr->GetMomentum().Y(), tr->GetMomentum().Z());
340  mother1.SetXYZ(trMr->GetMomentum().X(), trMr->GetMomentum().Y(), trMr->GetMomentum().Z());
341  fhCHreal->Fill(photon1.Angle(mother1));
342  fhCHlam->Fill(lambdah, photon1.Angle(mother1));
343  //}
344 
345  fhXYPDHit->Fill(xPHit,yPHit);
346 
347  if( nevents == 1 && trMpdg ==321)fhXYPDHitKp->Fill(xPHit,yPHit);
348  if( nevents == 1 && trMpdg ==-321)fhXYPDHitKn->Fill(xPHit,yPHit);
349  if( nevents == 1 && trMpdg ==211)fhXYPDHitpip->Fill(xPHit,yPHit);
350  if( nevents == 1 && trMpdg ==-211)fhXYPDHitpin->Fill(xPHit,yPHit);
351  if( nevents == 1 && trMpdg ==13)fhXYPDHitmp->Fill(xPHit,yPHit);
352  if( nevents == 1 && trMpdg ==-13)fhXYPDHitmn->Fill(xPHit,yPHit);
353  }// photon from primary particle
354  }// photon hits
355 }
356 
357 //---------------------------------------------------------------
359 {
360  // Creation of the TTree to hold the data for Cherenkov angle
361  phoTree = new TTree(fTreeName, "tree to get cherenkov angle");
362  phoTree->Branch("HitX", &xhit, "HitX/D");
363  phoTree->Branch("HitY", &yhit, "HitY/D");
364  phoTree->Branch("HitZ", &zhit, "HitZ/D");
365  phoTree->Branch("HitT", &thit, "HitT/D");
366  phoTree->Branch("MotherPx", &pxMo, "MotherPx/D");
367  phoTree->Branch("MotherPy", &pyMo, "MotherPy/D");
368  phoTree->Branch("MotherPz", &pzMo, "MotherPz/D");
369  phoTree->Branch("InitPhoPx", &pxPho, "InitPhoPx/D");
370  phoTree->Branch("InitPhoPy", &pyPho, "InitPhoPy/D");
371  phoTree->Branch("InitPhoPz", &pzPho, "InitPhoPz/D");
372  phoTree->Branch("xEntry", &xEnt, "xEntry/D");
373  phoTree->Branch("yEntry", &yEnt, "yEntry/D");
374  phoTree->Branch("zEntry", &zEnt, "zEntry/D");
375  phoTree->Branch("xBar", &xbar, "xBar/D");
376  phoTree->Branch("yBar", &ybar, "yBar/D");
377  phoTree->Branch("zBar", &zbar, "zBar/D");
378 
379  // Histogram list
380  fHistoList = new TList();
381 
382  //Histogram for Bar Hits
383 
384  fhThetaC = new TH1D("fhThetaC", "Cherenkov Angle", 100, 0, 1);
385  fhThetaCMass = new TH2D("fhThetaCMass", " ThetaC vs. Mass", 100, 0, 1, 100, 0, 0.6);
386  fhThetaCMomK = new TH2D("fhThetaCMomK", " ThetaC vs. Mom", 100, 0, 8.0, 100, 0, 1.);
387  fhThetaCMomP = new TH2D("fhThetaCMomP", " ThetaC vs. Mom", 100, 0, 8.0, 100, 0, 1.);
388  fhThetaCMomM = new TH2D("fhThetaCMomM", " ThetaC vs. Mom", 100, 0, 8.0, 100, 0, 1.);
389  fhThetaCMomE = new TH2D("fhThetaCMomE", " ThetaC vs. Mom", 100, 0, 8.0, 100, 0, 1.);
390  fhMomAng = new TH2D("fhMomAng", " Mom vs. Angle", 100, 0, 140.0, 100, 0.0,8.0);
391  fhPhoTheta = new TH1F("fhPhoTheta","Number of photons as a function of initial track theta", 150, 0., 150.);
392  fhPDPlane = new TH2F("fhPDPlane", "pixels hit by photons", 338,-109.85,109.85, 338,-109.85,109.85);
393 
394  //Histogram for Hits in Photon Detector
395 
396  fhLambda =new TH1D("fhLambda", "No of Photons vs. Lambda", 200, 100, 1000);
397  fhPDTime =new TH1D("fhPDTime", "Time in ns", 100, 0, 500);
398  fhXYPDHit = new TH2D("fhXYPDHit", "XY distribution of Photon Hits", 1000, -110, 110, 1000, -110, 110);
399 
400  fhCHreal = new TH1D("fhCHreal","Generated Cherenkov angle, hits", 100, 0.78, 0.88);
401  fhCHlam = new TH2D("fhCHlam","Cherenkov angle as a function of lambda", 1000,0.,1000.,100,0.7,0.9);
402 
403 //Histogram for MCPoints in Photon Detector
404  fhXYPDMCPt = new TH2D("fhXYPDMCpt", "XY distribution of Photon MCPt", 1000, -110, 110, 1000, -110, 110);
405  fhLambdaMC =new TH1D("fhLambdaMC", "No of Photons vs. Lambda", 200, 100, 1000);
406 
407  fhCHrealMC = new TH1D("fhCHrealMC","Generated Cherenkov angle, MC",100, 0.78, 0.88);
408  fhCHlamMC = new TH2D("fhCHlamMC","Cherenkov angle as a function of lambda", 1000,0.,1000.,100,0.7,0.9);
409 
410  fhCHlamE = new TH2D("fhCHlamE","CHerenkov angle as a function of lambda", 1000,0.,1000.,100,0.7,0.9);
411 
412 //Histogram for visualization
413  fhXYPDMCPtKp = new TH2D("fhXYPDMCptKp", "XY distribution of Photon MCPt", 1000, -110, 110, 1000, -110, 110);
414  fhXYPDMCPtKn = new TH2D("fhXYPDMCptKn", "XY distribution of Photon MCPt", 1000, -110, 110, 1000, -110, 110);
415  fhXYPDMCPtpip = new TH2D("fhXYPDMCptpip", "XY distribution of Photon MCPt", 1000, -110, 110, 1000, -110, 110);
416  fhXYPDMCPtpin = new TH2D("fhXYPDMCptpin", "XY distribution of Photon MCPt", 1000, -110, 110, 1000, -110, 110);
417  fhXYPDMCPtmp = new TH2D("fhXYPDMCptmp", "XY distribution of Photon MCPt", 1000, -110, 110, 1000, -110, 110);
418  fhXYPDMCPtmn = new TH2D("fhXYPDMCptmn", "XY distribution of Photon MCPt", 1000, -110, 110, 1000, -110, 110);
419 
420  fhXYPDHitKp = new TH2D("fhXYPDHitKp", "XY distribution of Photon Hit", 1000, -110, 110, 1000, -110, 110);
421  fhXYPDHitKn = new TH2D("fhXYPDHitKn", "XY distribution of Photon Hit", 1000, -110, 110, 1000, -110, 110);
422  fhXYPDHitpip = new TH2D("fhXYPDHitpip", "XY distribution of Photon Hit", 1000, -110, 110, 1000, -110, 110);
423  fhXYPDHitpin = new TH2D("fhXYPDHitpin", "XY distribution of Photon Hit", 1000, -110, 110, 1000, -110, 110);
424  fhXYPDHitmp = new TH2D("fhXYPDHitmp", "XY distribution of Photon Hit", 1000, -110, 110, 1000, -110, 110);
425  fhXYPDHitmn = new TH2D("fhXYPDHitmn", "XY distribution of Photon Hit", 1000, -110, 110, 1000, -110, 110);
426 
427 
428  fHistoList->Add(fhThetaC);
429  fHistoList->Add(fhThetaCMass);
430  fHistoList->Add(fhThetaCMomK);
431  fHistoList->Add(fhThetaCMomP);
432  fHistoList->Add(fhThetaCMomM);
433  fHistoList->Add(fhThetaCMomE);
434  fHistoList->Add(fhMomAng);
435  fHistoList->Add(fhPhoTheta);
436  fHistoList->Add(fhPDPlane);
437 
438  fHistoList->Add(fhLambda);
439  fHistoList->Add(fhLambdaMC);
440  fHistoList->Add(fhXYPDHit);
441  fHistoList->Add(fhXYPDMCPt);
442  fHistoList->Add(fhPDTime);
443  fHistoList->Add(fhCHreal);
444  fHistoList->Add(fhCHrealMC);
445  fHistoList->Add(fhCHlam);
446  fHistoList->Add(fhCHlamMC);
447  fHistoList->Add(fhCHlamE);
448 }
449 //------------------Write to File----------------------------------------------
451 {
452  phoTree->Write();
453  TIter next(fHistoList);
454  while ( TH1* histo = ((TH1*)next()) ) histo->Write();
455 }
456 // ----- Finish Task ---------------------------------------------------
458 {
459  cout << "-I- DrawHits: Finish" << endl;
460 
461  WriteToFile();
462  DrawHisto();
463 }
464 //----------------------------------------------------------------
466 {
467  Double_t deg=180.0/TMath::Pi();
468  TCanvas *C1= new TCanvas("C1","Cherenkov Angle vs. Mass ",500,500);
469  C1->Divide(1,1);
470  //Drawing Histo
471  C1->cd(1);
472  fhThetaCMass->SetMarkerColor(kBlue);
473  fhThetaCMass->SetMarkerStyle(20);
474  fhThetaCMass->SetMarkerSize(0.8);
475  fhThetaCMass->GetYaxis()->SetTitle("Mass (GeV/c^{2})");
476  fhThetaCMass->GetYaxis()->SetTitleOffset(1.0);
477  fhThetaCMass->GetXaxis()->SetTitle("#theta_{C} (rad)");
478  fhThetaCMass->SetTitle(0);
479  fhThetaCMass->SetStats(0);
480  fhThetaCMass->Draw();
481  C1->cd();
482  TCanvas *C1A= new TCanvas("C1A"," Mom vs. Cherenkov angle",500,500);
483  C1A->Divide(1,2);
484  C1A->cd(1);
485  fhThetaCMomK->SetMarkerColor(kBlue);
486  fhThetaCMomP->SetMarkerColor(kMagenta);
487  fhThetaCMomM->SetMarkerColor(kGreen);
488  fhThetaCMomE->SetMarkerColor(kBlack);
489  fhThetaCMomK->SetMarkerStyle(20);
490  fhThetaCMomK->SetMarkerSize(0.6);
491  fhThetaCMomP->SetMarkerStyle(20);
492  fhThetaCMomP->SetMarkerSize(0.6);
493  fhThetaCMomM->SetMarkerStyle(20);
494  fhThetaCMomM->SetMarkerSize(0.6);
495  fhThetaCMomE->SetMarkerStyle(20);
496  fhThetaCMomE->SetMarkerSize(0.6);
497  fhThetaCMomK->GetYaxis()->SetTitle("#theta_{C} (rad)");
498  fhThetaCMomK->GetYaxis()->SetTitleOffset(1.0);
499  fhThetaCMomK->GetXaxis()->SetTitle("p (GeV/c)");
500  fhThetaCMomK->SetTitle(0);
501  fhThetaCMomK->SetStats(0);
502  fhThetaCMomK->Draw();
503  fhThetaCMomM->Draw("same");
504  fhThetaCMomP->Draw("same");
505  fhThetaCMomE->Draw("same");
506  C1A->cd(2);
507  fhPhoTheta->Draw();
508 
509  TCanvas *C1B= new TCanvas("C1B"," Momentum vs. track angle",500,500);
510  C1B->Divide(1,1);
511  C1B->cd();
512  fhMomAng->SetMarkerColor(kBlue);
513  fhMomAng->SetMarkerStyle(20);
514  fhMomAng->SetMarkerSize(0.3);
515  fhMomAng->GetXaxis()->SetTitle("#theta (deg)");
516  fhMomAng->GetYaxis()->SetTitleOffset(1.0);
517  fhMomAng->GetYaxis()->SetTitle("p (GeV/c)");
518  fhMomAng->SetTitle(0);
519 // fhMomAng->SetStats(0);
520  fhMomAng->Draw();
521  C1B->cd();
522  TCanvas *C2= new TCanvas("C2","Photon Distribution" ,700,700);
523  C2->Divide(2,3);
524  C2->cd(1);
525  fhXYPDHit->SetMarkerColor(kBlue);
526  fhXYPDHit->SetMarkerStyle(20);
527  fhXYPDHit->SetMarkerSize(0.6);
528  fhXYPDHit->GetXaxis()->SetTitle("x_{Hit} (cm)");
529  fhXYPDHit->GetXaxis()->SetTitleOffset(1.0);
530  fhXYPDHit->GetYaxis()->SetTitle("y_{Hit} (cm)");
531  fhXYPDHit->SetTitle(0);
532  fhXYPDHit->Draw();
533  C2->cd(2);
534  fhXYPDMCPt->SetMarkerColor(kBlue);
535  fhXYPDMCPt->SetMarkerStyle(20);
536  fhXYPDMCPt->SetMarkerSize(0.6);
537  fhXYPDMCPt->GetXaxis()->SetTitle("x_{MC} (cm)");
538  fhXYPDMCPt->GetXaxis()->SetTitleOffset(1.0);
539  fhXYPDMCPt->GetYaxis()->SetTitle("y_{MC} (cm)");
540  fhXYPDMCPt->SetTitle(0);
541  fhXYPDMCPt->Draw();
542  C2->cd(3);
543  fhLambdaMC->SetLineColor(kBlue);
544  fhLambdaMC->SetMarkerStyle(20);
545  fhLambdaMC->SetMarkerSize(0.01);
546  fhLambdaMC->GetXaxis()->SetTitle("#lambda_{MC} (nm)");
547  fhLambdaMC->GetXaxis()->SetTitleOffset(1.0);
548  fhLambdaMC->GetYaxis()->SetTitle("Counts");
549  fhLambdaMC->SetTitle(0);
550 // fhLambdaMC->SetStats(0);
551  fhLambdaMC->Draw();
552  C2->cd(4);
553  fhLambda->SetLineColor(kRed);
554  fhLambda->SetMarkerStyle(20);
555  fhLambda->SetMarkerSize(0.01);
556  fhLambda->GetXaxis()->SetTitle("#lambda_{Hit} (nm)");
557  fhLambda->GetXaxis()->SetTitleOffset(1.0);
558  fhLambda->GetYaxis()->SetTitle("Counts");
559  fhLambda->SetTitle(0);
560 // fhLambda->SetStats(0);
561  fhLambda->Draw();
562  C2->cd(5);
563  fhCHrealMC->Draw();
564  fhCHrealMC->Fit("gaus");
565  C2->cd(6);
566  fhCHreal->Draw();
567  fhCHreal->Fit("gaus");
568  C2->cd();
569  TCanvas *C3= new TCanvas("C3","Time ",900,500);
570  C3->Divide();
571  //Drawing Histo
572  C3->cd();
573  fhPDTime->SetLineColor(kBlack);
574  fhPDTime->SetMarkerStyle(20);
575  fhPDTime->SetFillColor(2);
576  fhPDTime->GetXaxis()->SetTitle("Time (ns)");
577  fhPDTime->GetXaxis()->SetTitleOffset(1.0);
578  fhPDTime->GetYaxis()->SetTitle("Counts");
579  fhPDTime->SetTitle(0);
580  fhPDTime->Draw();
581  C3->cd();
582  TCanvas *C4= new TCanvas("C4"," ",500,500);
583  C4->Divide(1,1);
584  C4->cd(1);
585  fhXYPDHitKp->SetMarkerColor(kBlue);
586  fhXYPDHitKn->SetMarkerColor(kBlack);
587  fhXYPDHitmp->SetMarkerColor(kYellow);
588  fhXYPDHitmn->SetMarkerColor(kGreen);
589  fhXYPDHitpip->SetMarkerColor(kMagenta);
590  fhXYPDHitpin->SetMarkerColor(kRed);
591  fhXYPDHitKp->SetMarkerStyle(20);
592  fhXYPDHitKp->SetMarkerSize(0.6);
593  fhXYPDHitKn->SetMarkerStyle(20);
594  fhXYPDHitKn->SetMarkerSize(0.6);
595  fhXYPDHitpip->SetMarkerStyle(20);
596  fhXYPDHitpin->SetMarkerSize(0.6);
597  fhXYPDHitmp->SetMarkerStyle(20);
598  fhXYPDHitmn->SetMarkerSize(0.6);
599  fhXYPDHitKp->GetXaxis()->SetTitle("x_{Hit} (cm)");
600  fhXYPDHitKp->GetXaxis()->SetTitleOffset(1.0);
601  fhXYPDHitKp->GetYaxis()->SetTitle("y_{Hit} (cm)");
602  fhXYPDHitKp->SetTitle(0);
603  fhXYPDHitKp->Draw();
604  fhXYPDHitKn->Draw("same");
605  fhXYPDHitpip->Draw("same");
606  fhXYPDHitpip->Draw("same");
607  fhXYPDHitmp->Draw("same");
608  fhXYPDHitmn->Draw("same");
609  Double_t theta=11.25/deg;
610  Double_t rad_out=104.0; // PD outer radius
611  Double_t rad_in=50.53; // PD outer radius
612  Double_t rp_out=rad_out/cos(theta);
613  Double_t rp_in=rad_in/cos(theta);
614  Double_t xout[17], yout[17], xin[17], yin[17];
615  for(Int_t i=0; i<16; i++){
616  xout[i]=rp_out*cos(2.0*i*theta);
617  yout[i]=rp_out*sin(2.0*i*theta);
618  xin[i]=rp_in*cos(2.0*i*theta);
619  yin[i]=rp_in*sin(2.0*i*theta);
620  TLine *l1 =new TLine(xout[i],yout[i],xin[i],yin[i]);
621  l1->Draw("same");
622  }
623  xout[16]=xout[0];
624  yout[16]=yout[0];
625  xin[16]=xin[0];
626  yin[16]=yin[0];
627  TPolyLine *p1 =new TPolyLine(17,xout,yout);
628  p1->SetFillColor(kYellow);
629  p1->Draw("same");
630  TPolyLine *p2 =new TPolyLine(17,xin,yin);
631  p2->SetFillColor(0);
632  p2->Draw("same");
633  C4->cd();
634  TCanvas *C5= new TCanvas("C5"," ",500,500);
635  C5->Divide(1,1);
636  C5->cd(1);
637  fhXYPDMCPtKp->SetMarkerColor(kBlue);
638  fhXYPDMCPtKn->SetMarkerColor(kBlack);
639  fhXYPDMCPtmp->SetMarkerColor(kYellow);
640  fhXYPDMCPtmn->SetMarkerColor(kGreen);
641  fhXYPDMCPtpip->SetMarkerColor(kMagenta);
642  fhXYPDMCPtpin->SetMarkerColor(kRed);
643  fhXYPDMCPtKp->SetMarkerStyle(20);
644  fhXYPDMCPtKp->SetMarkerSize(0.6);
645  fhXYPDMCPtKn->SetMarkerStyle(20);
646  fhXYPDMCPtKn->SetMarkerSize(0.6);
647  fhXYPDMCPtpip->SetMarkerStyle(20);
648  fhXYPDMCPtpip->SetMarkerSize(0.6);
649  fhXYPDMCPtpin->SetMarkerSize(0.6);
650  fhXYPDMCPtpin->SetMarkerSize(0.6);
651  fhXYPDMCPtmp->SetMarkerStyle(20);
652  fhXYPDMCPtmp->SetMarkerSize(0.6);
653  fhXYPDMCPtmn->SetMarkerSize(0.6);
654  fhXYPDMCPtmn->SetMarkerSize(0.6);
655  fhXYPDMCPtKp->GetXaxis()->SetTitle("x_{MC} (cm)");
656  fhXYPDMCPtKp->GetXaxis()->SetTitleOffset(1.0);
657  fhXYPDMCPtKp->GetYaxis()->SetTitle("y_{MC} (cm)");
658  fhXYPDMCPtKp->SetTitle(0);
659  fhXYPDMCPtKp->Draw();
660  fhXYPDMCPtKn->Draw("same");
661  fhXYPDMCPtpip->Draw("same");
662  fhXYPDMCPtpip->Draw("same");
663  fhXYPDMCPtmp->Draw("same");
664  fhXYPDMCPtmn->Draw("same");
665  for(Int_t i=0; i<16; i++){
666  TLine *l2 =new TLine(xout[i],yout[i],xin[i],yin[i]);
667  l2->Draw("same");
668  }
669  p1->Draw("same");
670  p2->Draw("same");
671 
672  SetPlotStyle();
673  //TCanvas *C7= //[R.K.03/2017] unused variable
674  new TCanvas("C7","Full sim study",500,500);
675  fhPDPlane->SetMarkerStyle(20);
676  fhPDPlane->SetMarkerSize(0.3);
677  fhPDPlane->SetMarkerColor(8);
678  fhPDPlane->Draw();
679  //fhPDPlane->Draw("COL2Z");
680  for(Int_t i=0; i<16; i++){
681  TLine *l2 =new TLine(xout[i],yout[i],xin[i],yin[i]);
682  l2->Draw("same");
683  }
684  p1->Draw("same");
685  p2->Draw("same");
686  TLegend* leg = new TLegend(0.5,0.5,0.75,0.6);
687  leg->AddEntry(fhPDPlane,"other photons","p");
688  leg->SetTextSize(0.03);
689  leg->Draw("same");
690 
691 }
692 // -------------------------------------------------------------------------
TH2D * fhMomAng
Definition: DrawHits.h:171
TH2D * fhXYPDMCPtKp
Definition: DrawHits.h:201
void SetPlotStyle()
Definition: DrawHits.h:107
TH2D * fhCHlam
Definition: DrawHits.h:181
Double_t GetMass() const
TH2D * fhXYPDMCPt
Definition: DrawHits.h:191
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
friend F32vec4 cos(const F32vec4 &a)
Definition: P4_F32vec4.h:112
void WriteToFile()
Definition: DrawHits.cxx:450
TString fTreeName
Definition: DrawHits.h:161
Double_t pxPho
Definition: DrawHits.h:141
TClonesArray * fBarPointArray
Definition: DrawHits.h:89
virtual InitStatus Init()
Definition: DrawHits.cxx:70
TH2D * fhXYPDMCPtmn
Definition: DrawHits.h:206
Int_t fDetectorID
Definition: DrawHits.h:84
TH2D * fhThetaCMomE
Definition: DrawHits.h:175
Double_t zhit
Definition: DrawHits.h:133
Int_t i
Definition: run_full.C:25
TClonesArray * fMCArray
Definition: DrawHits.h:93
TVector3 fPMo
Definition: DrawHits.h:167
TClonesArray * fHitArray
Definition: DrawHits.h:91
TH1D * fhLambdaMC
Definition: DrawHits.h:190
Double_t lambda(Double_t x, Double_t y, Double_t z)
Definition: drawdal.C:48
TH2D * fhThetaCMomM
Definition: DrawHits.h:174
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
Double_t fThetaC
Definition: DrawHits.h:86
#define verbose
friend F32vec4 sin(const F32vec4 &a)
Definition: P4_F32vec4.h:111
TH2D * fhXYPDHitKn
Definition: DrawHits.h:195
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
TH1D * fhCHrealMC
Definition: DrawHits.h:179
Double_t fErrThetaC
Definition: DrawHits.h:86
TH2F * fhPDPlane
Definition: DrawHits.h:178
TH2D * fhXYPDHitmn
Definition: DrawHits.h:199
TH2D * fhXYPDHitmp
Definition: DrawHits.h:198
void DrawHisto()
Definition: DrawHits.cxx:465
TH2D * fhXYPDHitpin
Definition: DrawHits.h:197
TH2D * fhCHlamMC
Definition: DrawHits.h:182
Double_t xEnt
Definition: DrawHits.h:144
void ProcessBarHit()
Definition: DrawHits.cxx:137
Int_t nevents
Definition: DrawHits.h:122
virtual void Finish()
Definition: DrawHits.cxx:457
Double_t pyMo
Definition: DrawHits.h:139
Double_t GetThetaC() const
TClonesArray * fPDHitArray
Definition: DrawHits.h:92
virtual Double_t GetTime()
Definition: PndDrcPDHit.h:55
TString pt(TString pts, TString exts="px py pz")
Definition: invexp.C:133
TH2D * fhXYPDMCPtpip
Definition: DrawHits.h:203
Double_t zbar
Definition: DrawHits.h:137
Double_t fPx
Definition: DrawHits.h:151
virtual Int_t GetRefIndex()
Definition: PndDrcPDHit.h:57
TTree * phoTree
Definition: DrawHits.h:162
TH2D * fhXYPDMCPtmp
Definition: DrawHits.h:205
Double_t pyPho
Definition: DrawHits.h:142
Double_t ybar
Definition: DrawHits.h:136
TH2D * fhXYPDMCPtpin
Definition: DrawHits.h:204
TH2D * fhThetaCMomK
Definition: DrawHits.h:172
virtual ~DrawHits()
Definition: DrawHits.cxx:63
TH2D * fhXYPDHit
Definition: DrawHits.h:189
Double_t
Double_t thit
Definition: DrawHits.h:134
TH2D * fhCHlamE
Definition: DrawHits.h:183
DrawHits()
Definition: DrawHits.cxx:48
TH2D * fhXYPDMCPtKn
Definition: DrawHits.h:202
TH1D * fhCHreal
Definition: DrawHits.h:180
Double_t pzMo
Definition: DrawHits.h:140
Double_t fPy
Definition: DrawHits.h:152
Double_t fYcross
Definition: DrawHits.h:155
TPad * p2
Definition: hist-t7.C:117
TH1F * fhPhoTheta
Definition: DrawHits.h:177
TH1D * fhLambda
Definition: DrawHits.h:188
PndGeoDrc * fGeo
Basic geometry data of barrel DRC.
Definition: DrawHits.h:98
Int_t fVerbose
Definition: DrawHits.h:104
TH2D * fhXYPDHitpip
Definition: DrawHits.h:196
void CreateHisto()
Definition: DrawHits.cxx:358
virtual void Exec(Option_t *option)
Definition: DrawHits.cxx:124
virtual Int_t GetRefIndex()
Definition: PndDrcHit.h:44
ClassImp(PndAnaContFact)
Double_t fXcross
Definition: DrawHits.h:154
TPad * p1
Definition: hist-t7.C:116
TClonesArray * fPDPointArray
Definition: DrawHits.h:90
void ProcessPhotonMC()
Definition: DrawHits.cxx:203
Double_t xbar
Definition: DrawHits.h:135
TH2D * fhXYPDHitKp
Definition: DrawHits.h:194
Float_t xhit
Definition: DrawHits.h:131
TVector3 fStartVertex
Definition: DrawHits.h:150
PndSdsMCPoint * hit
Definition: anasim.C:70
TList * fHistoList
Definition: DrawHits.h:94
TVector3 GetStartVertex() const
Definition: PndMCTrack.h:76
TH1D * fhThetaC
Definition: DrawHits.h:169
TH2D * fhThetaCMass
Definition: DrawHits.h:170
TH2D * fhThetaCMomP
Definition: DrawHits.h:173
Int_t GetMotherID() const
Definition: PndMCTrack.h:74
Float_t yhit
Definition: DrawHits.h:132
static int next[96]
Definition: ranlxd.cxx:374
Double_t Pi
void ProcessPhotonHit()
Definition: DrawHits.cxx:257
Double_t pxMo
Definition: DrawHits.h:138
Double_t zEnt
Definition: DrawHits.h:146
Double_t pzPho
Definition: DrawHits.h:143
Double_t yEnt
Definition: DrawHits.h:145
Double_t fPz
Definition: DrawHits.h:153
TH1D * fhPDTime
Definition: DrawHits.h:192