FairRoot/PandaRoot
Functions
examples/pid/track_check.C File Reference

Go to the source code of this file.

Functions

int track_check (Int_t nEntries=0)
 

Function Documentation

int track_check ( Int_t  nEntries = 0)

Definition at line 1 of file examples/pid/track_check.C.

References fabs(), PndPidCandidate::GetMcIndex(), PndPidCandidate::GetMomentum(), PndMCTrack::GetMomentum(), PndMCTrack::GetMotherID(), PndMCTrack::GetPdgCode(), inDigiFile, inFile, inRecoFile, inSimFile, mc_array, mctrack, out, rootlogon(), tree, and TString.

2 {
3  gROOT->LoadMacro("$VMCWORKDIR/gconfig/rootlogon.C");
4  rootlogon();
5  TString inDigiFile = "digi_sttcombi.root";
6  TString inPidFile = "pid_sttcombi.root";
7  TString inRecoFile = "reco_sttcombi.root";
8  TString inAlgoFile = "algo_sttcombi.root";
9  TString inSimFile = "points_sttcombi.root";
10 
11  TFile *inFile = TFile::Open(inPidFile,"READ");
12 
13  TTree *tree=(TTree *) inFile->Get("pndsim") ;
14  tree->AddFriend("pndsim",inSimFile);
15  tree->AddFriend("pndsim",inDigiFile);
16 
17  TClonesArray* cand_array=new TClonesArray("PndPidCandidate");
18  tree->SetBranchAddress("PidChargedCand", &cand_array);
19 
20  TClonesArray* mc_array=new TClonesArray("PndMCTrack");
21  tree->SetBranchAddress("MCTrack", &mc_array);
22  TClonesArray* mdtp_array=new TClonesArray("PndMdtPoint");
23  tree->SetBranchAddress("MdtPoint", &mdtp_array);
24  TClonesArray* mdth_array=new TClonesArray("PndMdtHit");
25  tree->SetBranchAddress("MdtHit", &mdth_array);
26  TClonesArray* mdtt_array=new TClonesArray("PndMdtTrk");
27  tree->SetBranchAddress("MdtTrk", &mdtt_array);
28 
29  TFile *out = TFile::Open("out_test.root","RECREATE");
30  TNtuple *nt = new TNtuple("nt","nt","evt:mc_p:mc_theta:mc_phi:mc_pid:p:theta:phi:mult");
31 
32  if (nEntries==0) nEntries = tree->GetEntriesFast();
33  for (Int_t j=0; j< nEntries; j++){
34  tree->GetEntry(j);
35  //if (cand_array->GetEntriesFast()==0) continue;
36  cout << "processing event " << j << "\n";
37 
38  Float_t mc_mom = 0, mc_theta = 0, mc_phi = 0;
39  Float_t rec_mom = 0, rec_theta = 0, rec_phi = 0;
40  for (Int_t mc = 0; mc < mc_array->GetEntriesFast(); mc++)
41  {
42  PndMCTrack *mctrack = (PndMCTrack*)mc_array->At(mc);
43  if (mctrack->GetMotherID()!=-1) continue;
44  mc_mom = mctrack->GetMomentum().Mag();
45  mc_theta = mctrack->GetMomentum().Theta()*TMath::RadToDeg();
46  mc_phi = mctrack->GetMomentum().Phi()*TMath::RadToDeg();
47  Int_t mc_pid = mctrack->GetPdgCode();
48  Int_t cand_mult = 0;
49  for (Int_t pp=0; pp<cand_array->GetEntriesFast(); pp++)
50  {
51  PndPidCandidate *pidCand = (PndPidCandidate*)cand_array->At(pp);
52  if (pidCand->GetMcIndex()!=mc) continue;
53  if ( (cand_mult==0) || ((cand_mult>0) && (fabs(rec_mom-mc_mom)> fabs(pidCand->GetMomentum().Mag()-mc_mom))) )
54  {
55  rec_mom = pidCand->GetMomentum().Mag();
56  rec_theta = pidCand->GetMomentum().Theta();
57  rec_phi = pidCand->GetMomentum().Phi();
58  }
59  cand_mult++;
60 
61  } // end of candidate loop
62 
63  Float_t ntuple[] = {j,mc_mom,mc_theta,mc_phi, mc_pid,
64  rec_mom, rec_theta*TMath::RadToDeg(), rec_phi*TMath::RadToDeg(), cand_mult};
65  nt->Fill(ntuple);
66 
67  } // end of MC loop
68 
69  } // end of event loop
70 
71 
72  out->cd();
73 
74  nt->Write();
75  out->Save();
76 
77  return 0;
78 }
PndMCTrack * mctrack
TTree * tree
Definition: plot_dirc.C:12
TString inRecoFile
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
TClonesArray * mc_array
Definition: anaLmdCluster.C:25
Int_t GetMcIndex() const
TString inFile
Definition: hit_dirc.C:8
TString inSimFile
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
TFile * out
Definition: reco_muo.C:20
TString inDigiFile
Int_t GetMotherID() const
Definition: PndMCTrack.h:74
TVector3 GetMomentum() const