FairRoot/PandaRoot
PndTrackSmearTask.cxx
Go to the documentation of this file.
1 /*
2  * PndTrackSmearTask.cpp
3  *
4  * Created on: Jun 26, 2013
5  * Author: schumann
6  */
7 
8 // Root includes
9 #include "TROOT.h"
10 #include "TClonesArray.h"
11 #include "FairRootManager.h"
12 #include "PndTrack.h"
13 #include "PndTrackSmearTask.h"
14 #include "TRandom.h"
15 
17 
18 
20 }
21 
23 
24  FairRootManager* ioman = FairRootManager::Instance();
25 
26  if (!ioman) {
27  std::cout << "-E- PndTrackSmearTask::Init: "
28  << "RootManager not instantiated!" << std::endl;
29  return kFATAL;
30  }
31 
32  // get track branches
33  for(TString branchname : fInputTrackBranches)
34  {
35  std::cout<<"PndTrackSmearTask::Init(): Adding track branch "<<branchname.Data()<<std::endl;
36  fTracks.push_back( (TClonesArray*) ioman->GetObject(branchname));
37  }
38 
39  // create output branches
40  for(TString branchname : fOutputTrackBranches)
41  {
42  fOutputTracks.push_back( ioman->Register(branchname, "PndTrack", "Tracks", GetPersistency()) );
43  }
44 
45  return kSUCCESS;
46 
47 }
48 
49 void PndTrackSmearTask::Exec(Option_t *) {
50 
51  if (fVerbose > 1) {
52  std::cout << "============= Begin PndTrackSmearTask::Exec" << std::endl;
53  std::cout << std::endl;
54  std::cout << "Array size check: fTracks ("<<fTracks.size()<<") fOutputTracks ("<<fOutputTracks.size()<<") fInputTrackBranches ("<<fInputTrackBranches.size()<<")"<<std::endl;
55  }
56  for(TClonesArray* arr : fOutputTracks) {arr->Delete();}
57 
58 
59  for (unsigned int i=0;i<fTracks.size();i++)
60  {
61  TClonesArray* trkArray=fTracks[i];
62  if(trkArray==NULL) continue;
63  TClonesArray* trkOutArray=fOutputTracks[i];
64  if(trkOutArray==NULL) continue;
65  TString trkbranchname = fInputTrackBranches[i];
66  for (int j = 0; j < trkArray->GetEntriesFast(); j++)
67  {
68  PndTrack* myTrack = (PndTrack*)trkArray->At(j);
69  //PndTrackCand* myTrackCand=myTrack->GetPndTrackCandViaRef();
70  new((*trkOutArray)[j]) PndTrack(
71  SmearTrackPar(myTrack->GetParamFirst()), SmearTrackPar(myTrack->GetParamLast()),
72  myTrack->GetTrackCand(), myTrack->GetFlag(),
73  myTrack->GetChi2(), myTrack->GetNDF(), myTrack->GetPidHypo(), j,
74  FairRootManager::Instance()->GetBranchId(trkbranchname));
75  }
76  }
77 
78 }
79 
80 
81 FairTrackParP PndTrackSmearTask::SmearTrackPar(FairTrackParP par)
82 {
83  TVector3 mom=par.GetMomentum();
84  Double_t Cov66[6][6];
85  par.GetMARSCov(Cov66);
86  SmearMom(mom,Cov66);
87 
88  FairTrackParP result(par.GetPosition(), mom, Cov66,par.GetQ(), par.GetOrigin(), par.GetJVer(), par.GetKVer());
89 
90  return result;
91 }
92 
93 
94 void PndTrackSmearTask::SmearMom(TVector3 &vec, Double_t Cov66[6][6])
95 {
96  // gaussian smearing
97  Double_t rannn=0.;
98  rannn = gRandom->Gaus(vec.X(),vec.X()*fMomSigma.X());
99  vec.SetX(rannn);
100 
101  rannn = gRandom->Gaus(vec.Y(),vec.Y()*fMomSigma.Y());
102  vec.SetY(rannn);
103 
104  rannn = gRandom->Gaus(vec.Z(),vec.Z()*fMomSigma.Z());
105  vec.SetZ(rannn);
106 
107  Cov66[3][3]+=vec.X()*vec.X()*fMomSigma.X()*fMomSigma.X();
108  Cov66[4][4]+=vec.Y()*vec.Y()*fMomSigma.Y()*fMomSigma.Y();
109  Cov66[5][5]+=vec.Z()*vec.Z()*fMomSigma.Z()*fMomSigma.Z();
110 
111  return;
112 }
113 
114 
116  //if(fTracks != 0) fTracks->Delete();
117 }
118 
120 }
121 
virtual void FinishEvent()
int fVerbose
Definition: poormantracks.C:24
virtual void Exec(Option_t *opt)
Int_t i
Definition: run_full.C:25
Int_t GetFlag() const
Definition: PndTrack.h:33
Double_t par[3]
Double_t mom
Definition: plot_dirc.C:14
std::vector< TString > fInputTrackBranches
void SmearMom(TVector3 &vec, Double_t Cov66[6][6])
virtual InitStatus Init()
PndTrackCand GetTrackCand()
Definition: PndTrack.h:47
Double_t
Int_t GetNDF() const
Definition: PndTrack.h:35
FairTrackParP GetParamLast()
Definition: PndTrack.h:50
std::vector< TClonesArray * > fTracks
virtual void SetParContainers()
std::vector< TClonesArray * > fOutputTracks
FairTrackParP SmearTrackPar(FairTrackParP par)
Double_t GetChi2() const
Definition: PndTrack.h:34
Int_t GetPidHypo() const
Definition: PndTrack.h:32
ClassImp(PndAnaContFact)
std::vector< TString > fOutputTrackBranches
TVector3 fMomSigma
Momentum smearing sigma (dp/p)
dble_vec_t vec[12]
Definition: ranlxd.cxx:380
FairTrackParP GetParamFirst()
Definition: PndTrack.h:49