FairRoot/PandaRoot
reco_muo.C
Go to the documentation of this file.
1 {
2  TFile* f = new TFile("tracks_combi.root"); //file you want to analyse
3  TFile* f2 = new TFile("points_combi.root");
4  TTree *t=(TTree *) f->Get("pndsim") ;
5  t->AddFriend("pndsim","points_combi.root");
6 
7  TClonesArray* trk_array=new TClonesArray("PndMdtTrk");
8  t->SetBranchAddress("MdtTrk",&trk_array);
9 
10  TClonesArray* hit_array=new TClonesArray("PndMdtHit");
11  t->SetBranchAddress("MdtHit",&hit_array);
12 
13  TClonesArray* point_array=new TClonesArray("PndMdtPoint");
14  t->SetBranchAddress("MdtPoint",&point_array);
15 
16  TClonesArray* mc_array=new TClonesArray("PndMCTrack");
17  t->SetBranchAddress("MCTrack",&mc_array);
19 
20  TFile* out = TFile::Open("reco_combi.root","RECREATE");
21 
22  TNtuple *nHit = new TNtuple("nHit","nHit","evt:x:y:z:phi:theta:lay:mod:sec:xt:yt");
23  TNtuple *nHit0 = new TNtuple("nHit0","nHit0","evt:trk:x:y:z:phi:theta:lay:mod:sec:pdg:mot:xt:yt:phit:px:py:pz:y0:y1:y2:y3:y4:y5:y6:y7:y8:y9");
24  TNtuple *ext = new TNtuple("ext","ext","evt:trk:xt:yt:zt:lay:mod:sec:x:y:z:dist:angle");
26 
27  for (Int_t j=0; j< t->GetEntriesFast(); j++)
28  {
29  t->GetEntry(j);
30 
31  for (Int_t hh=0; hh<hit_array->GetEntriesFast(); hh++)
32  {
33  PndMdtHit *mdtHit=(PndMdtHit*)hit_array->At(hh);
34  TVector3 pos(0.,0.,0.);
35  mdtHit->Position(pos);
36  Int_t layer = int((pos.Phi()*TMath::RadToDeg()+180+22.5)/45);
37  if (layer==8) layer = 0;
38 
39  Float_t xt, yt;
40 
41  xt = cos(-layer*45*TMath::DegToRad())*pos.X() - sin(-layer*45*TMath::DegToRad())*pos.Y();
42  yt = sin(-layer*45*TMath::DegToRad())*pos.X() + cos(-layer*45*TMath::DegToRad())*pos.Y();
43 
44 
45  nHit->Fill(j,pos.X(), pos.Y(), pos.Z(), pos.Phi(), pos.Theta(), mdtHit->GetLayerID(), mdtHit.GetModule(), mdtHit.GetSector(), xt, yt);
46  } // end of hit loop
47 
48  for (Int_t tt=0; tt<trk_array->GetEntriesFast(); tt++)
49  {
50  PndMdtTrk *trkHit=(PndMdtTrk*)trk_array->At(tt);
51  /*
52  if ( ( (trkHit->GetModule()==1) && (trkHit->GetHitBit()!=1023) ) ||
53  ( (trkHit->GetModule()==2) && (trkHit->GetHitBit()!=127) ) ||
54  (trkHit->GetModule()==10) ) continue;*/
55  if ( (trkHit->GetModule()!=1) || (trkHit->GetHitBit()!=1023) ) continue;
56 
57  //for (Int_t pp=0;pp<10;pp++) cout << trkHit->GetModule() << " " << pp << " " << trkHit->GetHitNumber(pp)<< endl;
58  PndMdtHit *hit0 = (PndMdtHit*)hit_array->At(trkHit->GetHitNumber(0));
59  PndMdtPoint *point0 = (PndMdtPoint*)point_array->At(hit0->GetRefIndex());
60  PndMCTrack *mc0 = (PndMCTrack*)mc_array->At(((PndMdtPoint*)point_array->At(hit0->GetRefIndex()))->GetTrackID());
61 
62  TVector3 pos0(0.,0.,0.);
63  hit0->Position(pos0);
64  TVector3 mom(point0->GetPx(),point0->GetPy(),point0->GetPz());
65  // mom = point0->GetMomentum();
66 
67  Float_t xt0, yt0;
68  xt0 = (cos(-hit0->GetSector()*45*TMath::DegToRad())*pos0.X() - sin(-hit0->GetSector()*45*TMath::DegToRad())*pos0.Y());
69  yt0 = sin(-hit0->GetSector()*45*TMath::DegToRad())*pos0.X() + cos(-hit0->GetSector()*45*TMath::DegToRad())*pos0.Y();
70  mom->SetPhi(mom.Phi()-hit0->GetSector()*45.*TMath::DegToRad());
71  if (mom.X()==0)
72  {
73  cout << "px == 0 errore"<< endl;
74  continue;
75  }
76  Float_t xlayer0 = -par->GetLayerPos(hit0->GetModule()-1,0);
77  Float_t yproj[10], zproj[10];
78  for (Int_t yy=0; yy<10; yy++)
79  {
80  Float_t xlayer = -par->GetLayerPos(hit0->GetModule()-1,yy);
81  yproj[yy] = yt0 + (xlayer - xt0) * mom.Y() / mom.X();
82  zproj[yy] = pos0.Z() + (xlayer - xt0) * mom.Z() / mom.X();
83 
84  PndMdtHit *testhit = (PndMdtHit*)hit_array->At(trkHit->GetHitNumber(yy));
85  TVector3 hpos(0.,0.,0.);
86  testhit->Position(hpos);
87  Float_t xt, yt;
88  xt = (cos(-hit0->GetSector()*45*TMath::DegToRad())*hpos.X() - sin(-hit0->GetSector()*45*TMath::DegToRad())*hpos.Y());
89  yt = sin(-hit0->GetSector()*45*TMath::DegToRad())*hpos.X() + cos(-hit0->GetSector()*45*TMath::DegToRad())*hpos.Y();
90  Float_t dist = sqrt(((yproj[yy]-yt0)*(yproj[yy]-yt0))+((zproj[yy]-hpos.Z())*(zproj[yy]-hpos.Z())));
91  TVector3 vext(xlayer-xlayer0,yproj[yy]-yt0,zproj[yy]-pos0.Z());
92  TVector3 vhit(xlayer-xlayer0,yt-yt0,hpos.Z()-pos0.Z());
93 
94  ext->Fill(j, tt,xlayer, yproj[yy], zproj[yy], testhit->GetLayerID(), hit0.GetModule(), hit0.GetSector(), xt, yt, hpos.Z(),dist,vext.Angle(vhit) );
95  }
96 
97  Float_t nhit0_nt[] = {
98  j,tt,pos0.X(), pos0.Y(), pos0.Z(), pos0.Phi(), pos0.Theta(),
99  hit0->GetLayerID(), hit0.GetModule(), hit0.GetSector(),
100  mc0->GetPdgCode(), mc0->GetMotherID(), xt0, yt0,mom.Phi()*TMath::RadToDeg(),
101  mom.X(), mom.Y(), mom.Z(),
102  yproj[0],yproj[1],yproj[2],yproj[3],yproj[4],yproj[5],yproj[6],yproj[7],yproj[8],yproj[9],
103 
104 
105  };
106 
107  nHit0->Fill(nhit0_nt);
108  } // end of MdtTrk loop
109 
110  } // end of event loop
111 
112 
113  nHit->Write();
114  nHit0->Write();
115  ext->Write();
116  nHit->Write();
117  out->Save();
118  //out->Close();
119 
120 
121 }
122 
PndMdtRecoPar * par
Definition: reco_muo.C:25
TVector3 pos
friend F32vec4 cos(const F32vec4 &a)
Definition: P4_F32vec4.h:112
Short_t GetLayerID() const
Definition: PndMdtHit.h:34
TClonesArray * point_array
Definition: reco_muo.C:13
TFile * f2
Definition: reco_muo.C:3
PndEmcMapper * emcMap
Definition: reco_muo.C:18
TTree * t
Definition: reco_muo.C:4
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
Int_t GetHitBit() const
Definition: PndMdtTrk.h:46
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
Float_t GetLayerPos(Int_t mod, Int_t lay) const
Definition: PndMdtRecoPar.h:12
friend F32vec4 sin(const F32vec4 &a)
Definition: P4_F32vec4.h:111
Double_t mom
Definition: plot_dirc.C:14
Emc geometry mapper.
Definition: PndEmcMapper.h:22
TNtuple * nHit
Definition: reco_muo.C:22
Int_t GetModule() const
Definition: PndMdtTrk.h:48
TClonesArray * mc_array
Definition: reco_muo.C:16
Short_t GetSector() const
Definition: PndMdtHit.h:33
TNtuple * nHit0
Definition: reco_muo.C:23
TFile * f
Definition: bump_analys.C:12
TFile * out
Definition: reco_muo.C:20
TNtuple * ext
Definition: reco_muo.C:24
Short_t GetModule() const
Definition: PndMdtHit.h:32
TClonesArray * hh
Int_t GetMotherID() const
Definition: PndMCTrack.h:74
TClonesArray * hit_array
Definition: reco_muo.C:10
static PndEmcMapper * Instance()
TClonesArray * trk_array
Definition: reco_muo.C:7