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

#include <PndPatternDBGenerator.h>

Inheritance diagram for PndPatternDBGenerator:

Public Member Functions

 PndPatternDBGenerator ()
 
virtual ~PndPatternDBGenerator ()
 
void SetOutputFilename (TString filename="patternDB.root")
 

Protected Member Functions

virtual void SetParContainers ()
 
virtual InitStatus Init ()
 
virtual void Exec (Option_t *opt)
 
virtual void FinishTask ()
 

Private Member Functions

void GenerateTrackPatterns ()
 
HitSectorMap FillSectorHitMap (HitArray sttHitArray)
 
PndPatterns FillSectorPatterns (HitArray hitArray, PndMCTrack *mcTrack)
 
PndPatterns FillTrackPatterns (HitArray hitArray, PndMCTrack *mcTrack)
 
void AddPatternsToTree (PndPatterns patterns, TTree *tree)
 

Private Attributes

PndGeoSttParfSttParameters
 
TClonesArray * fEventHeader
 
TClonesArray * fTubeArray
 
TClonesArray * fSttHitArray
 
TClonesArray * fMCTrackArray
 
TClonesArray * trackCands
 
TFile * foutputFile
 
TTree * fsectorPatternTree
 
TTree * ftrackPatternTree
 
PndPatternbPattern
 
int sttBranchID
 
int mcTrackID
 
TString foutputFilename
 
int nTotalTracks
 
int nMultipleMCTrackLinks
 

Detailed Description

Definition at line 21 of file PndPatternDBGenerator.h.

Constructor & Destructor Documentation

PndPatternDBGenerator::PndPatternDBGenerator ( )

Definition at line 19 of file PndPatternDBGenerator.cxx.

19  {
20  fSttParameters = NULL;
21  fEventHeader = NULL;
22  fTubeArray = NULL;
23  fSttHitArray = NULL;
24  fMCTrackArray = NULL;
25  trackCands = NULL;
26  sttBranchID = -1;
27  mcTrackID = -1;
28 
29  foutputFile = NULL;
30  fsectorPatternTree = NULL;
31  ftrackPatternTree = NULL;
32  bPattern = NULL;
33  foutputFilename = "patternDB.root";
34 
35  nTotalTracks = 0;
37 }
PndPatternDBGenerator::~PndPatternDBGenerator ( )
virtual

Definition at line 39 of file PndPatternDBGenerator.cxx.

39  {
40 }

Member Function Documentation

void PndPatternDBGenerator::AddPatternsToTree ( PndPatterns  patterns,
TTree *  tree 
)
private

Definition at line 191 of file PndPatternDBGenerator.cxx.

References bPattern.

Referenced by GenerateTrackPatterns().

191  {
192  for (auto pattern: patterns) {
193  bPattern = &pattern;
194  tree->Fill();
195  }
196 }
TTree * tree
Definition: plot_dirc.C:12
void PndPatternDBGenerator::Exec ( Option_t *  opt)
protectedvirtual

Definition at line 86 of file PndPatternDBGenerator.cxx.

References GenerateTrackPatterns().

86  { //[R.K. 9/2018] unused
88 }
HitSectorMap PndPatternDBGenerator::FillSectorHitMap ( HitArray  sttHitArray)
private

Definition at line 143 of file PndPatternDBGenerator.cxx.

References fTubeArray, and PndSttTube::GetSectorID().

Referenced by FillSectorPatterns().

143  {
144  HitSectorMap hitMap;
145  for (auto const& sttHit : sttHitArray) {
146  short tubeID = sttHit->GetTubeID();
147  PndSttTube *tube = (PndSttTube*) fTubeArray->At(tubeID);
148  short sectorID = tube->GetSectorID();
149  hitMap.insert(std::make_pair(sectorID, tubeID));
150  }
151  return hitMap;
152 }
std::multimap< int, int > HitSectorMap
int GetSectorID()
Definition: PndSttTube.cxx:124
PndPatterns PndPatternDBGenerator::FillSectorPatterns ( HitArray  hitArray,
PndMCTrack mcTrack 
)
private

Definition at line 153 of file PndPatternDBGenerator.cxx.

References PndPattern::AddMomentum(), PndPattern::AddTubeID(), FillSectorHitMap(), PndMCTrack::GetMomentum(), PndPattern::IsEmpty(), PndPattern::RaisePatternCount(), and PndPattern::SetSectorID().

Referenced by GenerateTrackPatterns().

153  {
154  PndPatterns patterns;
155  HitSectorMap hitMap = FillSectorHitMap(sttHitArray);
156  TVector3 momentum = mcTrack->GetMomentum();
157  for (int iSector = 0; iSector < 6; ++iSector) {
158  auto hitMapSectorRange = hitMap.equal_range(iSector);
159  PndPattern pattern;
160  pattern.SetSectorID(iSector);
161  pattern.AddMomentum(momentum);
162  for (auto iter = hitMapSectorRange.first; iter != hitMapSectorRange.second; ++iter) {
163  int tubeID = iter->second;
164  pattern.AddTubeID(tubeID);
165  }
166  pattern.RaisePatternCount();
167  if (!pattern.IsEmpty()) {
168  patterns.push_back(pattern);
169  }
170  }
171 
172  return patterns;
173 }
std::vector< PndPattern > PndPatterns
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
HitSectorMap FillSectorHitMap(HitArray sttHitArray)
std::multimap< int, int > HitSectorMap
void RaisePatternCount()
Definition: PndPattern.h:28
void SetSectorID(int sectorID)
Definition: PndPattern.h:23
void AddMomentum(TVector3 momentum)
Definition: PndPattern.h:24
void AddTubeID(int tubeID)
Definition: PndPattern.h:26
bool IsEmpty()
Definition: PndPattern.cxx:28
PndPatterns PndPatternDBGenerator::FillTrackPatterns ( HitArray  hitArray,
PndMCTrack mcTrack 
)
private

Definition at line 174 of file PndPatternDBGenerator.cxx.

References PndPattern::AddMomentum(), PndPattern::AddTubeID(), PndMCTrack::GetMomentum(), PndPattern::IsEmpty(), PndPattern::RaisePatternCount(), and PndPattern::SetSectorID().

Referenced by GenerateTrackPatterns().

174  {
175  PndPatterns patterns;
176  TVector3 momentum = mcTrack->GetMomentum();
177  PndPattern pattern;
178  pattern.SetSectorID(-1); // sectorID undefined for whole track patterns
179  pattern.AddMomentum(momentum);
180  for (auto const& sttHit: sttHitArray) {
181  int tubeID = sttHit->GetTubeID();
182  pattern.AddTubeID(tubeID);
183  }
184  pattern.RaisePatternCount();
185  if (!pattern.IsEmpty()) {
186  patterns.push_back(pattern);
187  }
188 
189  return patterns;
190 }
std::vector< PndPattern > PndPatterns
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
void RaisePatternCount()
Definition: PndPattern.h:28
void SetSectorID(int sectorID)
Definition: PndPattern.h:23
void AddMomentum(TVector3 momentum)
Definition: PndPattern.h:24
void AddTubeID(int tubeID)
Definition: PndPattern.h:26
bool IsEmpty()
Definition: PndPattern.cxx:28
void PndPatternDBGenerator::FinishTask ( )
protectedvirtual

Definition at line 89 of file PndPatternDBGenerator.cxx.

References foutputFile, fsectorPatternTree, ftrackPatternTree, nMultipleMCTrackLinks, and nTotalTracks.

89  {
90  fsectorPatternTree->AutoSave();
91  ftrackPatternTree->AutoSave();
92  foutputFile->Close();
93 
94  std::cout << "Total number of tracks found: " << nTotalTracks << std::endl;
95  std::cout << "Number of track with multiple MCTrack links: " << nMultipleMCTrackLinks << std::endl;
96  float ratio = 100. * (float)nMultipleMCTrackLinks / (float)nTotalTracks;
97  std::cout << "Ratio: " << ratio << "%" << std::endl;
98 }
void PndPatternDBGenerator::GenerateTrackPatterns ( )
private

Definition at line 100 of file PndPatternDBGenerator.cxx.

References AddPatternsToTree(), FillSectorPatterns(), FillTrackPatterns(), fsectorPatternTree, ftrackPatternTree, mcTrackID, nMultipleMCTrackLinks, nTotalTracks, sttBranchID, and trackCands.

Referenced by Exec().

100  {
101 // This method generates hit patterns for each track
102 
103 // Get FairRootManager instance to access objects through FairLinks
104  FairRootManager *ioman = FairRootManager::Instance();
105 
106 // Loop over all track candidates
107  short nTrackCands = trackCands->GetEntriesFast();
108  for (int iTrackCand = 0; iTrackCand < nTrackCands; ++iTrackCand) {
109 // Get the next track candidate
110  PndTrackCand *cand = (PndTrackCand*) trackCands->At(iTrackCand);
111 // Get the FairLinks from the candidate pointing at STTHit branch
112  FairMultiLinkedData sttLinks = cand->GetLinksWithType(sttBranchID);
113 // Construct sttHitArray for each track candidate,
114 // taking into account all STTHits of the corresponding track
115  HitArray sttHitArray;
116  for (int iLink = 0; iLink < sttLinks.GetNLinks(); ++iLink) {
117  FairLink sttLink = sttLinks.GetLink(iLink);
118  PndSttHit *sttHit = (PndSttHit*) ioman->GetCloneOfLinkData(sttLink);
119  sttHitArray.push_back(sttHit);
120  }
121 // Get link to corresponding MC track
122  FairMultiLinkedData mcTrackLinks = cand->GetLinksWithType(mcTrackID);
123 // Check if only one MC track was found
124  nTotalTracks++;
125  if (mcTrackLinks.GetNLinks() == 0) {
126  std::cout << "WARNING: PndPatternDBGenerator::GenerateTrackPatterns: No MCTrackfound, skipping event!" << std::endl;
127  continue;
128  }
129  if (mcTrackLinks.GetNLinks() > 1) {
131  std::cout << "WARNING: PndPatternDBGenerator::GenerateTrackPatterns: Found more than one MCTrack link!!!" << std::endl;
132  }
133 // Get only first link since only one should be associated with track candidate
134  FairLink mcTrackLink = mcTrackLinks.GetLink(0);
135  PndMCTrack *mcTrack = (PndMCTrack*) ioman->GetCloneOfLinkData(mcTrackLink);
136 
137  PndPatterns sectorPatterns = FillSectorPatterns(sttHitArray, mcTrack);
138  AddPatternsToTree(sectorPatterns,fsectorPatternTree);
139  PndPatterns trackPatterns = FillTrackPatterns(sttHitArray, mcTrack);
140  AddPatternsToTree(trackPatterns,ftrackPatternTree);
141  }
142 }
std::vector< PndPattern > PndPatterns
PndPatterns FillTrackPatterns(HitArray hitArray, PndMCTrack *mcTrack)
void AddPatternsToTree(PndPatterns patterns, TTree *tree)
PndPatterns FillSectorPatterns(HitArray hitArray, PndMCTrack *mcTrack)
std::vector< PndSttHit * > HitArray
InitStatus PndPatternDBGenerator::Init ( )
protectedvirtual

Definition at line 46 of file PndPatternDBGenerator.cxx.

References bPattern, fEventHeader, PndSttMapCreator::FillTubeArray(), fMCTrackArray, foutputFile, foutputFilename, fsectorPatternTree, fSttHitArray, fSttParameters, ftrackPatternTree, fTubeArray, mcTrackID, sttBranchID, and trackCands.

46  {
47  std::cout << "Filename for pattern DB: " << foutputFilename << std::endl;
48  foutputFile = new TFile(foutputFilename,"RECREATE");
49  fsectorPatternTree = new TTree("sectorPatterns","Tree containing sector patterns");
50  fsectorPatternTree->Branch("pattern",&bPattern);
51  ftrackPatternTree = new TTree("trackPatterns","Tree containing track patterns");
52  ftrackPatternTree->Branch("pattern",&bPattern);
53 
54 // Get instance of the FairRootManager to access tree branches
55  FairRootManager *ioman = FairRootManager::Instance();
56  if(!ioman) {
57  std::cout << "-E- PndPatternDBGenerator::Init: FairRootManager not instantiated!" << std::endl;
58  return kFATAL;
59  }
60 
61 // Get the EventHeader
62  fEventHeader = (TClonesArray*) ioman->GetObject("EventHeader.");
63  if(!fEventHeader) {
64  std::cout << "-E- PndPatternDBGenerator::Init: EventHeader not loaded!" << std::endl;
65  return kFATAL;
66  }
67 
68 // Access STTHit branch and determine its branch ID
69  fSttHitArray = (TClonesArray*) ioman->GetObject("STTHit");
70  sttBranchID = ioman->GetBranchId("STTHit");
71 
72 // Initialise STT map and get array of all tubes
74  fTubeArray = mapper->FillTubeArray();
75 
76 // Access MCTrack branch and determine its branch ID
77  fMCTrackArray = (TClonesArray*) ioman->GetObject("MCTrack");
78  mcTrackID = ioman->GetBranchId("MCTrack");
79 
80 // Get track candidates from ideal track finder
81  trackCands = (TClonesArray*) ioman->GetObject("SttMvdGemIdealTrackCand");
82 
83  std::cout << "-I- PndPatternDBGenerator: Initialisation successful" << std::endl;
84  return kSUCCESS;
85 }
TClonesArray * FillTubeArray()
void PndPatternDBGenerator::SetOutputFilename ( TString  filename = "patternDB.root")
inline

Definition at line 26 of file PndPatternDBGenerator.h.

References filename, and foutputFilename.

const string filename
void PndPatternDBGenerator::SetParContainers ( )
protectedvirtual

Definition at line 42 of file PndPatternDBGenerator.cxx.

References fSttParameters, and rtdb.

42  {
43  FairRuntimeDb *rtdb = FairRunAna::Instance()->GetRuntimeDb();
44  fSttParameters = (PndGeoSttPar*) rtdb->getContainer("PndGeoSttPar");
45 }
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66

Member Data Documentation

PndPattern* PndPatternDBGenerator::bPattern
private

Definition at line 52 of file PndPatternDBGenerator.h.

Referenced by AddPatternsToTree(), and Init().

TClonesArray* PndPatternDBGenerator::fEventHeader
private

Definition at line 42 of file PndPatternDBGenerator.h.

Referenced by Init().

TClonesArray* PndPatternDBGenerator::fMCTrackArray
private

Definition at line 45 of file PndPatternDBGenerator.h.

Referenced by Init().

TFile* PndPatternDBGenerator::foutputFile
private

Definition at line 48 of file PndPatternDBGenerator.h.

Referenced by FinishTask(), and Init().

TString PndPatternDBGenerator::foutputFilename
private

Definition at line 56 of file PndPatternDBGenerator.h.

Referenced by Init(), and SetOutputFilename().

TTree* PndPatternDBGenerator::fsectorPatternTree
private

Definition at line 49 of file PndPatternDBGenerator.h.

Referenced by FinishTask(), GenerateTrackPatterns(), and Init().

TClonesArray* PndPatternDBGenerator::fSttHitArray
private

Definition at line 44 of file PndPatternDBGenerator.h.

Referenced by Init().

PndGeoSttPar* PndPatternDBGenerator::fSttParameters
private

Definition at line 41 of file PndPatternDBGenerator.h.

Referenced by Init(), and SetParContainers().

TTree* PndPatternDBGenerator::ftrackPatternTree
private

Definition at line 50 of file PndPatternDBGenerator.h.

Referenced by FinishTask(), GenerateTrackPatterns(), and Init().

TClonesArray* PndPatternDBGenerator::fTubeArray
private

Definition at line 43 of file PndPatternDBGenerator.h.

Referenced by FillSectorHitMap(), and Init().

int PndPatternDBGenerator::mcTrackID
private

Definition at line 55 of file PndPatternDBGenerator.h.

Referenced by GenerateTrackPatterns(), and Init().

int PndPatternDBGenerator::nMultipleMCTrackLinks
private

Definition at line 59 of file PndPatternDBGenerator.h.

Referenced by FinishTask(), and GenerateTrackPatterns().

int PndPatternDBGenerator::nTotalTracks
private

Definition at line 58 of file PndPatternDBGenerator.h.

Referenced by FinishTask(), and GenerateTrackPatterns().

int PndPatternDBGenerator::sttBranchID
private

Definition at line 54 of file PndPatternDBGenerator.h.

Referenced by GenerateTrackPatterns(), and Init().

TClonesArray* PndPatternDBGenerator::trackCands
private

Definition at line 46 of file PndPatternDBGenerator.h.

Referenced by GenerateTrackPatterns(), and Init().


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