FairRoot/PandaRoot
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
PndMcCloner Class Reference

#include <PndMcCloner.h>

Inheritance diagram for PndMcCloner:

Public Member Functions

 PndMcCloner ()
 
 ~PndMcCloner ()
 
virtual InitStatus Init ()
 
virtual void Exec (Option_t *)
 
void SetCleanMc (Bool_t opt=kTRUE)
 
void SetOutputBranch (TString branch)
 

Protected Member Functions

void FindUsedMCIndices ()
 
void CloneMCTrack ()
 
void CloneAndCleanMCTrack ()
 
void CorrectMotherIndices ()
 
void CorrectPidIndices ()
 
 ClassDef (PndMcCloner, 2)
 

Protected Attributes

TClonesArray * fInputArray
 
TClonesArray * fPidChargedArray
 
TClonesArray * fPidNeutralArray
 
TClonesArray * fOutputArray
 
map< Int_t, Int_t > mapMCIndex
 
Bool_t fCleanMC
 
TString fTrackBranchNamePidHypo
 

Detailed Description

Definition at line 13 of file PndMcCloner.h.

Constructor & Destructor Documentation

PndMcCloner::PndMcCloner ( )

Default constructor

Definition at line 24 of file PndMcCloner.cxx.

24  : FairTask("Cloner of PndMCTrack"),
27 {
28 }
TClonesArray * fPidNeutralArray
Definition: PndMcCloner.h:51
TString fTrackBranchNamePidHypo
Definition: PndMcCloner.h:61
Bool_t fCleanMC
Definition: PndMcCloner.h:59
TClonesArray * fOutputArray
Definition: PndMcCloner.h:55
map< Int_t, Int_t > mapMCIndex
Definition: PndMcCloner.h:57
TClonesArray * fPidChargedArray
Definition: PndMcCloner.h:48
TClonesArray * fInputArray
Definition: PndMcCloner.h:45
PndMcCloner::~PndMcCloner ( )

Destructor

Definition at line 32 of file PndMcCloner.cxx.

32 { }

Member Function Documentation

PndMcCloner::ClassDef ( PndMcCloner  ,
 
)
protected
void PndMcCloner::CloneAndCleanMCTrack ( )
protected

Definition at line 185 of file PndMcCloner.cxx.

References fInputArray, fOutputArray, mapMCIndex, and mctrack.

Referenced by Exec().

186 {
187  // Copy only the MCTracks which were used, and update the mother indices
188 
189  for (std::map<Int_t,Int_t>::iterator it=mapMCIndex.begin(); it!=mapMCIndex.end(); ++it)
190  {
191  PndMCTrack *mctrack = (PndMCTrack*) fInputArray->At(it->first);
192  TClonesArray& clref = *fOutputArray;
193  Int_t size = clref.GetEntriesFast();
194  new(clref[size]) PndMCTrack(*mctrack);
195  mapMCIndex[it->first] = size;
196  }
197 }
PndMCTrack * mctrack
TClonesArray * fOutputArray
Definition: PndMcCloner.h:55
map< Int_t, Int_t > mapMCIndex
Definition: PndMcCloner.h:57
TClonesArray * fInputArray
Definition: PndMcCloner.h:45
void PndMcCloner::CloneMCTrack ( )
protected

Definition at line 112 of file PndMcCloner.cxx.

References fInputArray, fOutputArray, and mctrack.

Referenced by Exec().

113 {
114  // Copy 1:1 of the MCTrack TClonesArray
115 
116  Int_t nMCTracks = fInputArray->GetEntriesFast();
117  for (Int_t iMC=0; iMC<nMCTracks; iMC++)
118  {
119  PndMCTrack *mctrack = (PndMCTrack*) fInputArray->At(iMC);
120  TClonesArray& clref = *fOutputArray;
121  Int_t size = clref.GetEntriesFast();
122  new(clref[size]) PndMCTrack(*mctrack);
123  } // Loop over MCTracks
124 }
PndMCTrack * mctrack
TClonesArray * fOutputArray
Definition: PndMcCloner.h:55
TClonesArray * fInputArray
Definition: PndMcCloner.h:45
void PndMcCloner::CorrectMotherIndices ( )
protected

Definition at line 202 of file PndMcCloner.cxx.

References fOutputArray, PndMCTrack::GetMotherID(), PndMCTrack::GetSecondMotherID(), mapMCIndex, mctrack, PndMCTrack::SetMotherID(), and PndMCTrack::SetSecondMotherID().

Referenced by Exec().

203 {
204  // Loop over the new MCTrack TClonesArray and update the mother indices
205  Int_t nmc = 0;
206  nmc = fOutputArray->GetEntriesFast();
207  for (Int_t imc=0; imc<nmc; imc++)
208  {
210  Int_t motherID = mctrack->GetMotherID();
211  Int_t secondMotherID = mctrack->GetSecondMotherID();
212  if (motherID!=-1) mctrack->SetMotherID(mapMCIndex[motherID]);
213  if (secondMotherID!=-1) mctrack->SetSecondMotherID(mapMCIndex[secondMotherID]);
214  }
215 }
PndMCTrack * mctrack
TClonesArray * fOutputArray
Definition: PndMcCloner.h:55
map< Int_t, Int_t > mapMCIndex
Definition: PndMcCloner.h:57
Int_t GetSecondMotherID() const
Definition: PndMCTrack.h:75
void SetSecondMotherID(Int_t id)
Definition: PndMCTrack.h:94
void SetMotherID(Int_t id)
Definition: PndMCTrack.h:93
Int_t GetMotherID() const
Definition: PndMCTrack.h:74
void PndMcCloner::CorrectPidIndices ( )
protected

Definition at line 217 of file PndMcCloner.cxx.

References fPidChargedArray, fPidNeutralArray, PndPidCandidate::GetMcIndex(), mapMCIndex, and PndPidCandidate::SetMcIndex().

Referenced by Exec().

218 {
219  // Loop over Pid Candidates and set the mc indices with the new value
220 
221  Int_t nCands = 0;
222 
223  nCands = fPidChargedArray->GetEntriesFast();
224  for (Int_t iPid=0; iPid<nCands; iPid++)
225  {
226  PndPidCandidate *pidCand = (PndPidCandidate*) fPidChargedArray->At(iPid);
227  Int_t mcIndex = pidCand->GetMcIndex();
228  pidCand->SetMcIndex(mapMCIndex[mcIndex]);
229  }
230 
231  nCands = fPidNeutralArray->GetEntriesFast();
232  for (Int_t iPid=0; iPid<nCands; iPid++)
233  {
234  PndPidCandidate *pidCand = (PndPidCandidate*) fPidNeutralArray->At(iPid);
235  Int_t mcIndex = pidCand->GetMcIndex();
236  pidCand->SetMcIndex(mapMCIndex[mcIndex]);
237  }
238 
239 }
TClonesArray * fPidNeutralArray
Definition: PndMcCloner.h:51
void SetMcIndex(int idx)
Int_t GetMcIndex() const
map< Int_t, Int_t > mapMCIndex
Definition: PndMcCloner.h:57
TClonesArray * fPidChargedArray
Definition: PndMcCloner.h:48
void PndMcCloner::Exec ( Option_t *  )
virtual

Virtual method Exec

Definition at line 89 of file PndMcCloner.cxx.

References CloneAndCleanMCTrack(), CloneMCTrack(), CorrectMotherIndices(), CorrectPidIndices(), fCleanMC, FindUsedMCIndices(), fOutputArray, and mapMCIndex.

89  {
90 
91  // Reset output array
92  if ( ! fOutputArray ) Fatal("Exec", "No Output Array");
93 
94  fOutputArray->Clear();
95  mapMCIndex.clear();
96 
97  if (!fCleanMC)
98  {
99  CloneMCTrack();
100  }
101  else
102  {
107  }
108 }
void CorrectPidIndices()
Bool_t fCleanMC
Definition: PndMcCloner.h:59
TClonesArray * fOutputArray
Definition: PndMcCloner.h:55
void CloneAndCleanMCTrack()
map< Int_t, Int_t > mapMCIndex
Definition: PndMcCloner.h:57
void FindUsedMCIndices()
void CorrectMotherIndices()
void CloneMCTrack()
void PndMcCloner::FindUsedMCIndices ( )
protected

Definition at line 127 of file PndMcCloner.cxx.

References fInputArray, fPidChargedArray, fPidNeutralArray, PndPidCandidate::GetMcIndex(), PndMCTrack::GetMotherID(), mapMCIndex, and mctrack.

Referenced by Exec().

127  {
128  // Loop over PidChargedCand and PidNeutralCand, find the used MC indices, and fill the map
129  // with this index and all the mother indices
130 
131  Int_t nCands = 0;
132 
133  // First store primary MC tracks
134  nCands = fInputArray->GetEntriesFast();
135  for (Int_t imc=0; imc<nCands; imc++)
136  {
138  if (mctrack->GetMotherID()==-1)
139  {
140  mapMCIndex[imc] = imc;
141  }
142  else break;
143  }
144 
145  nCands = fPidChargedArray->GetEntriesFast();
146  for (Int_t iPid=0; iPid<nCands; iPid++)
147  {
148  PndPidCandidate *pidCand = (PndPidCandidate*) fPidChargedArray->At(iPid);
149  Int_t mcIndex = pidCand->GetMcIndex();
150 
151  while (mcIndex!=-1)
152  {
153  PndMCTrack *mctrack = (PndMCTrack*)fInputArray->At(mcIndex);
154  if (mctrack==NULL)
155  {
156  Error("FindUsedMCIndices","PndMCTrack is not existing!");
157  }
158  mapMCIndex[mcIndex] = mcIndex;
159  mcIndex = mctrack->GetMotherID();
160  }
161  } // Loop over PidChargedCand
162 
163  nCands = fPidNeutralArray->GetEntriesFast();
164  for (Int_t iPid=0; iPid<nCands; iPid++)
165  {
166  PndPidCandidate *pidCand = (PndPidCandidate*) fPidNeutralArray->At(iPid);
167  Int_t mcIndex = pidCand->GetMcIndex();
168 
169  while (mcIndex!=-1)
170  {
171  PndMCTrack *mctrack = (PndMCTrack*)fInputArray->At(mcIndex);
172  if (mctrack==NULL)
173  {
174  Error("FindUsedMCIndices","PndMCTrack is not existing!");
175  }
176  mapMCIndex[mcIndex] = mcIndex;
177  mcIndex = mctrack->GetMotherID();
178  }
179  } // Loop over PidNeutralCand
180 
181 }
PndMCTrack * mctrack
TClonesArray * fPidNeutralArray
Definition: PndMcCloner.h:51
Int_t GetMcIndex() const
map< Int_t, Int_t > mapMCIndex
Definition: PndMcCloner.h:57
Int_t GetMotherID() const
Definition: PndMCTrack.h:74
TClonesArray * fPidChargedArray
Definition: PndMcCloner.h:48
TClonesArray * fInputArray
Definition: PndMcCloner.h:45
InitStatus PndMcCloner::Init ( )
virtual

Virtual method Init

Definition at line 36 of file PndMcCloner.cxx.

References fInputArray, fOutputArray, fPidChargedArray, fPidNeutralArray, and fTrackBranchNamePidHypo.

36  {
37 
38  cout << "-I- PndMcCloner::Init: "
39  << "INITIALIZATION *********************" << endl;
40 
41  //FairRun* sim = FairRun::Instance(); //[R.K. 01/2017] unused variable?
42  //FairRuntimeDb* rtdb=sim->GetRuntimeDb(); //[R.K. 01/2017] unused variable?
43 
44  // Get RootManager
45  FairRootManager* ioman = FairRootManager::Instance();
46  if ( ! ioman ) {
47  cout << "-E- PndMcCloner::Init: "
48  << "RootManager not instantiated!" << endl;
49  return kFATAL;
50  }
51 
52  // Get input array
53  fInputArray = (TClonesArray*) ioman->GetObject("MCTrack");
54  if ( ! fInputArray ) {
55  cout << "-E- PndMcCloner::Init: "
56  << "No MCTrack array!" << endl;
57  return kERROR;
58  }
59 
60  fPidChargedArray = (TClonesArray*) ioman->GetObject("PidChargedCand"+fTrackBranchNamePidHypo);
61  if ( ! fPidChargedArray ) {
62  cout << "-E- PndMcCloner::Init: "
63  << "No PidChargedCand array!" << endl;
64  return kERROR;
65  }
66 
67  fPidNeutralArray = (TClonesArray*) ioman->GetObject("PidNeutralCand"+fTrackBranchNamePidHypo);
68  if ( ! fPidNeutralArray ) {
69  cout << "-E- PndMcCloner::Init: "
70  << "No PidNeutralCand array!" << endl;
71  return kERROR;
72  }
73 
74  // Create and register output array
75  fOutputArray = new TClonesArray("PndMCTrack");
76 
77  ioman->Register("MCTrack","MC",fOutputArray,kTRUE);
78 
79  cout << "-I- PndMcCloner: Intialization successfull" << endl;
80 
81  return kSUCCESS;
82 
83 }
TClonesArray * fPidNeutralArray
Definition: PndMcCloner.h:51
TString fTrackBranchNamePidHypo
Definition: PndMcCloner.h:61
TClonesArray * fOutputArray
Definition: PndMcCloner.h:55
TClonesArray * fPidChargedArray
Definition: PndMcCloner.h:48
TClonesArray * fInputArray
Definition: PndMcCloner.h:45
void PndMcCloner::SetCleanMc ( Bool_t  opt = kTRUE)
inline

Definition at line 33 of file PndMcCloner.h.

Referenced by clonemc(), and PndMasterPidTask::PndMasterPidTask().

33 { fCleanMC = opt; };
Bool_t fCleanMC
Definition: PndMcCloner.h:59
void PndMcCloner::SetOutputBranch ( TString  branch)
inline

Definition at line 34 of file PndMcCloner.h.

34 { fTrackBranchNamePidHypo = branch; };
TString fTrackBranchNamePidHypo
Definition: PndMcCloner.h:61

Member Data Documentation

Bool_t PndMcCloner::fCleanMC
protected

Definition at line 59 of file PndMcCloner.h.

Referenced by Exec().

TClonesArray* PndMcCloner::fInputArray
protected

Input array of PndMCTrack

Definition at line 45 of file PndMcCloner.h.

Referenced by CloneAndCleanMCTrack(), CloneMCTrack(), FindUsedMCIndices(), and Init().

TClonesArray* PndMcCloner::fOutputArray
protected

Output array of PndMCTrack

Definition at line 55 of file PndMcCloner.h.

Referenced by CloneAndCleanMCTrack(), CloneMCTrack(), CorrectMotherIndices(), Exec(), and Init().

TClonesArray* PndMcCloner::fPidChargedArray
protected

Input array of PidChargedCand

Definition at line 48 of file PndMcCloner.h.

Referenced by CorrectPidIndices(), FindUsedMCIndices(), and Init().

TClonesArray* PndMcCloner::fPidNeutralArray
protected

Input array of PidNeutralCand

Definition at line 51 of file PndMcCloner.h.

Referenced by CorrectPidIndices(), FindUsedMCIndices(), and Init().

TString PndMcCloner::fTrackBranchNamePidHypo
protected

Definition at line 61 of file PndMcCloner.h.

Referenced by Init().

map<Int_t, Int_t> PndMcCloner::mapMCIndex
protected

The documentation for this class was generated from the following files: