FairRoot/PandaRoot
PndMvdPidIdealTask.cxx
Go to the documentation of this file.
1 // -------------------------------------------------------------------------
2 // ----- PndMvdPidIdealTask source file -----
3 // ----- Created 11/07/07 by T.Baldauf -----
4 // -------------------------------------------------------------------------
5 // libc includes
6 #include <iostream>
7 #include <vector>
8 
9 // Root includes
10 #include "TROOT.h"
11 #include "TString.h"
12 #include "TClonesArray.h"
13 #include "TParticlePDG.h"
14 #include "TObject.h"
15 #include "TH1.h"
16 #include "TH2.h"
17 #include "TCanvas.h"
18 
19 // framework includes
20 #include "FairRootManager.h"
21 #include "PndMvdPidIdealTask.h"
22 #include "FairRun.h"
23 #include "FairRuntimeDb.h"
24 #include "../pnddata/PndMCTrack.h"
25 
26 
27 // PndMvd includes
28 #include "PndSdsMCPoint.h"
29 #include "PndMvdPidCand.h"
30 // #include "PndSdsHit.h"
31 
35 
36 // ----- Default constructor -------------------------------------------
37 PndMvdPidIdealTask::PndMvdPidIdealTask(TString algoName) : FairTask("Digitization task for PANDA PndMvd"),
38  fBranchName("MVDPoint"),
39  fAlgoName(algoName),
40  fPointArray(NULL),
41  fMcArray(NULL),
42  fTrackOutputArray(NULL)
43 {
44 }
45 
46 // ----- Public method Init --------------------------------------------
48 {
49  // Get RootManager
50  FairRootManager* ioman = FairRootManager::Instance();
51  if ( ! ioman ) {
52  std::cout << "-E- PndMvdPidIdealTask::Init: "<< "RootManager not instantiated!" << std::endl;
53  return kFATAL; }
54 
55  // Get input array
56  fPointArray = (TClonesArray*) ioman->GetObject(fBranchName);
57  if ( ! fPointArray ) {
58  std::cout << "-W- PndMvdPidIdealTask::Init: "<< "No "<<fBranchName<<" array!" << std::endl;
59  return kERROR; }
60 
61  // Get MCTruth collection
62  fMcArray=(TClonesArray*) ioman->GetObject("MCTrack");
63  if(fMcArray==0) {
64  std::cout << "-W- PndMvdPidIdealTask::Init: "<< "No McTruth array!" << std::endl;
65  return kERROR; }
66 
67  // Create and register output array
68  fTrackOutputArray = new TClonesArray("PndMvdPidCand");
69  ioman->Register("PndMvdPidCand", "PndMvd ideal tracklets", fTrackOutputArray, kTRUE);
70 
71  if (fAlgoName!="ideal"&&fAlgoName!="simple"&&fAlgoName!="advanced") {
72  std::cout << "-W- PndMvdPidIdealTask::Init: "<< "No pid algorithm named '"<< fAlgoName <<"'! Names are 'ideal', 'simple', 'advanced'" << std::endl;
73  return kERROR;
74  }
75  return kSUCCESS;
76 }
77 // -------------------------------------------------------------------------
79 {
80  // Get Base Container
81 // FairRun* ana = FairRun::Instance();
82 // FairRuntimeDb* rtdb=ana->GetRuntimeDb();
83 
84 }
85 
86 
87 
88 //----------------Exec----------------
89 void PndMvdPidIdealTask::Exec(Option_t*)
90 {
91  if ( ! fTrackOutputArray ) Fatal("Exec", "No fTrackOutputArray");
92  fTrackOutputArray->Delete();
93 
94  // the dE/dx information of PndmvdPidCand is obtained by PndMvdMCPoints
95  std::map<int, PndMvdPidCand*> pidcand;
96 
97  for(int i=0;i<fPointArray->GetEntriesFast();i++) {
98  PndSdsMCPoint* mvdpoint=(PndSdsMCPoint*) fPointArray->At(i);
99  int track = mvdpoint->GetTrackID();
100  if(!pidcand[track])
101  pidcand[track]=new PndMvdPidCand();
102  double dx = ( mvdpoint->GetPositionOut() - mvdpoint->GetPosition() ).Mag();
103  double dE = mvdpoint->GetEnergyLoss();
104  TVector3 momentum;
105  mvdpoint->Momentum(momentum);
106  if(dx>0)
107  pidcand[track]->AddMvdHit(dE, dx, momentum.Mag());
108  }
109 
110  // invoke likelohood calculation, TClonesArray output
111  for(std::map<int, PndMvdPidCand*>::iterator it=pidcand.begin();it!=pidcand.end();it++) {
112  int track = it->first;
113  if (fAlgoName=="ideal")
114  PndMvdIdealPidAlgo::CalcLikelihood(pidcand[track]);
115  else if (fAlgoName=="simple")
116  PndMvdSimplePidAlgo::CalcLikelihood(pidcand[track]);
117  else if (fAlgoName=="advanced")
119 
120  int size = fTrackOutputArray->GetEntriesFast();
121  new ((*fTrackOutputArray)[size]) PndMvdPidCand(*(pidcand[track]));
122  }
123 }
124 
125 
126 // -------------------------------------------------------------------------
127 
static void CalcLikelihood(PndMvdPidCand *cand)
Int_t i
Definition: run_full.C:25
PndRiemannTrack track
Definition: RiemannTest.C:33
PndMvdPidIdealTask(const TString algoName="ideal")
TVector3 GetPositionOut() const
Definition: PndSdsMCPoint.h:91
TClonesArray * fMcArray
Double_t dE
Definition: anasim.C:58
static void CalcLikelihood(PndMvdPidCand *cand)
static void CalcLikelihood(PndMvdPidCand *cand)
TClonesArray * fTrackOutputArray
TClonesArray * fPointArray
double dx
TVector3 GetPosition() const
Definition: PndSdsMCPoint.h:90
virtual void SetParContainers()
virtual void Exec(Option_t *opt)
ClassImp(PndAnaContFact)
virtual InitStatus Init()