FairRoot/PandaRoot
anaMvdRadLength.C
Go to the documentation of this file.
1 // root macro to analyze the simulation output
2 //void convertMCPoints()
3 {
4 #include <map>
5 #include <vector>
6  // ----- Load libraries ------------------------------------------------
7 //``gSystem->Load("fstream.h");
8  gROOT->LoadMacro("$VMCWORKDIR/gconfig/basiclibs.C");
9  basiclibs();
10  gSystem->Load("libGeoBase");
11  gSystem->Load("libParBase");
12  gSystem->Load("libBase");
13  gSystem->Load("libPndData");
14  gSystem->Load("libField");
15  gSystem->Load("libGen");
16  gSystem->Load("libPassive");
17  gSystem->Load("libMvd");
18 
19  gStyle->SetPalette(1);
20  // ----- Timer --------------------------------------------------------
21  TStopwatch timer;
22  timer.Start();
23  // ------------------------------------------------------------------------
24 
25 /*
26 Convert PndMvdWaferMCPoints to the STAR Format (text, "x y z layer")
27 for the conformal mapping stuff
28 */
29 
30 // PndFileNameCreator namecreator("data/mvdsim.root");
31  PndFileNameCreator namecreator("Mvd_DPM_Test.root");
32  std::string inFile = namecreator.GetSimFileName(false);
33 
34  TFile* f = new TFile(inFile.c_str()); // the sim file you want to analyse
35  TTree *t=(TTree *) f->Get("pndsim") ;
36 
37  TClonesArray* hit_array=new TClonesArray("PndSdsMCPoint");
38  t->SetBranchAddress("MVDPoint",&hit_array);//Branch names
39 
40  TClonesArray* radlen_array = new TClonesArray("FairRadLenPoint");
41  t->SetBranchAddress("RadLen", &radlen_array);
42 
43  TClonesArray* mc_array=new TClonesArray("PndMCTrack");
44  t->SetBranchAddress("MCTrack",&mc_array);//Branch names
45 
46  TH1D* hisRadLen = new TH1D("hisRadLen","Radiation Length", 1000,0,100);
47  TH2D* hisRadLen2D = new TH2D("hisRadLen2D","Radiation Length 2D", 100,-1,1,100, -TMath::Pi(), TMath::Pi());
48  TH2D* hisRadLenCount = new TH2D("hisRadLenCount","hisRadLenCount",100,-1,1,100, -TMath::Pi(), TMath::Pi());
49 
50  TH1D* hisTrackP = new TH1D("hisTrackP","Hits per Track", 51,-0.5,50.5);
51  TH2D* hisTrackP2D = new TH2D("hisTrackP2D","Hits per Track 2D", 100,-1,1,100, -TMath::Pi(), TMath::Pi());
52  TH2D* hisTrackPCount = new TH2D("hisTrackPCount","hisTrackPCount", 100,-1,1,100, -TMath::Pi(), TMath::Pi());
53 
54  int nEvents = 1000;
55  int startEvent = 0;
56  bool verbose = false;
57 
58  TVector3 vecs,veco;
59  std::map<int,int> trackHitMap;
60 
61  for (Int_t j=startEvent; j<(nEvents+startEvent) && j<t->GetEntriesFast(); j++)
62  {
63  t->GetEntry(j);
64  //if (verbose)
65  cout<<">>>> Event No "<<j<<endl;
66  std::vector<double> RadLengthOnTrack (10000,0.0); //trackID, vector with points on track
67 
68  for (Int_t i=0; i<radlen_array->GetEntriesFast(); i++)
69  {
70  if(verbose) cout<<"Point No "<<i<<endl;
71  FairRadLenPoint *point=(FairRadLenPoint*)radlen_array->At(i);
72  if (verbose) cout << "Track ID: " << point->GetTrackID() << std::endl;
73  TVector3 pos, posOut, res;
74  pos = point->GetPosition();
75  posOut = point->GetPositionOut();
76  res = posOut - pos;
77  PndMCTrack* myTrack = (PndMCTrack*)(mc_array->At(point->GetTrackID()));
78  if (myTrack->GetMotherID() < 0){
79  if (verbose){
80  std::cout << "Time: " << point->GetTime() << " Length: " << point->GetLength() << std::endl;
81  std::cout << "Pos: " << pos.x() << "/" << pos.y() << "/" << pos.z();
82  std::cout << " OutPos: " << posOut.x() << "/" << posOut.y() << "/" << posOut.z() << std::endl;
83  std::cout << "TrackLength: " << res.Mag() << " RadLength: " << point->GetRadLength() << " Res: " << res.Mag() / point->GetRadLength() << std::endl;
84  }
85  if (point->GetTrackID() > 0 && point->GetTrackID() < 10000 && fabs(posOut.x()) < 15 && fabs(posOut.y()) < 15 && fabs(posOut.z()) < 20)
86  RadLengthOnTrack[point->GetTrackID()] += res.Mag()/point->GetRadLength()*100;
87  }
88  }
89  for (int k = 0; k < RadLengthOnTrack.size(); k++){
90  if (RadLengthOnTrack[k] > 0){
91  if (verbose) std::cout << "Full TrackLength: " << RadLengthOnTrack[k] << std::endl;
92  PndMCTrack* mcTrack = (PndMCTrack*)(mc_array->At(k));
93  hisRadLen->Fill(RadLengthOnTrack[k]);
94  hisRadLen2D->Fill(mcTrack->GetMomentum().CosTheta(), mcTrack->GetMomentum().Phi(), RadLengthOnTrack[k]);
95  hisRadLenCount->Fill(mcTrack->GetMomentum().CosTheta(), mcTrack->GetMomentum().Phi());
96  }
97  }
98 
99  trackHitMap.clear();
100  for (int k = 0; k < hit_array->GetEntriesFast(); k++){
101  PndSdsMCPoint* myHit = (PndSdsMCPoint*)(hit_array->At(k));
102  trackHitMap[myHit->GetTrackID()]++;
103  }
104 
105  for (map<int,int>::const_iterator ci = trackHitMap.begin(); ci != trackHitMap.end(); ci++){
106  PndMCTrack* track = (PndMCTrack*)(mc_array->At(ci->first));
107  hisTrackP->Fill(ci->second);
108  hisTrackP2D->Fill(track->GetMomentum().CosTheta(), track->GetMomentum().Phi(), ci->second);
109  hisTrackPCount->Fill(track->GetMomentum().CosTheta(), track->GetMomentum().Phi());
110  }
111  }// end for j (events)
112 
113  hisRadLen2D->Divide(hisRadLenCount);
114  hisTrackP2D->Divide(hisTrackPCount);
115 
116  TCanvas* can1 = new TCanvas();
117  can1->Divide(2,2);
118  gStyle->SetPalette(1);
119  can1->cd(1);
120  hisRadLen->DrawCopy();
121  can1->cd(2);
122  hisRadLen2D->DrawCopy("colz");
123  can1->cd(3);
124  hisTrackP->DrawCopy();
125  can1->cd(4);
126  hisTrackP2D->DrawCopy("colz");
127 
128  // ----- Finish -------------------------------------------------------
129  timer.Stop();
130  Double_t rtime = timer.RealTime();
131  Double_t ctime = timer.CpuTime();
132  cout << endl << endl;
133  cout << "Macro finished succesfully." << endl;
134  //cout << "Output file is " << outFile << endl;
135  //cout << "Parameter file is " << parFile << endl;
136  cout << "Real time " << rtime << " s, CPU time " << ctime << " s" << endl;
137  cout << endl;
138  // ------------------------------------------------------------------------
139 
140 }
TVector3 pos
std::map< int, int > trackHitMap
TH2D * hisTrackP2D
basiclibs()
Int_t res
Definition: anadigi.C:166
Int_t i
Definition: run_full.C:25
#define verbose
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
Int_t startEvent
TH2D * hisRadLen2D
TClonesArray * mc_array
Definition: anaLmdCluster.C:25
cout<< "POINTs for new FwEndCap == "<< tsim-> GetEntriesFast()
std::string GetSimFileName(std::string addon="", bool cut=false)
TClonesArray * hit_array
TVector3 vecs
TString inFile
Definition: hit_dirc.C:8
A simple class which adds the corresponding file extensions to a given base class.
Double_t
Int_t nEvents
Definition: hit_dirc.C:11
TStopwatch timer
Definition: hit_dirc.C:51
PndMCTrack * track
Definition: anaLmdCluster.C:89
TFile * f
Definition: bump_analys.C:12
TH1D * hisRadLen
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
TVector3 veco
Definition: anaMvdSim.C:33
PndFileNameCreator namecreator("../data/Lars/MvdDtsSim.root")
Double_t ctime
Definition: hit_dirc.C:114
TH2D * hisRadLenCount
TTree * t
Definition: bump_analys.C:13
TH1D * hisTrackP
TCanvas * can1
Int_t GetMotherID() const
Definition: PndMCTrack.h:74
Double_t rtime
Definition: hit_dirc.C:113
Double_t Pi
TClonesArray * radlen_array
PndSdsMCPoint * point
Definition: anaLmdCluster.C:72
TH2D * hisTrackPCount