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

#include <PndPatternDBMerger.h>

Public Member Functions

 PndPatternDBMerger ()
 
virtual ~PndPatternDBMerger ()
 
void SetInputFilename (TString filename)
 
void SetInputTreename (TString treename)
 
void SetOutputFilename (TString filename)
 
void SetOutputTreename (TString treename)
 
void Execute ()
 

Private Member Functions

bool InitInputChain ()
 
void InitOutputTree ()
 
IdenticalEntries FindIdenticalEntries ()
 
std::vector< PndPatternGetPatternsForMerging (std::pair< int, std::set< int >> entryPair)
 
PndPattern MergePatterns (std::vector< PndPattern > &entries)
 
void FillOutputTree (PndPattern &mergedPattern)
 

Private Attributes

TChain * fpatternTree
 
TFile * foutputDBFile
 
TTree * foutputTree
 
TString finputFilename
 
TString finputTreename
 
TString foutputFilename
 
TString foutputTreename
 
PndPatternbPattern
 
PndPatternbMergedPattern
 

Detailed Description

Definition at line 19 of file PndPatternDBMerger.h.

Constructor & Destructor Documentation

PndPatternDBMerger::PndPatternDBMerger ( )

Definition at line 16 of file PndPatternDBMerger.cxx.

16  {
17  fpatternTree = NULL;
18  foutputDBFile = NULL;
19  foutputTree = NULL;
20 
21  bPattern = NULL;
22  bMergedPattern = NULL;
23 
24  finputFilename = "patternDB.root";
25  finputTreename = "trackPatterns";
26  foutputFilename = "patternDBclean.root";
28 }
PndPattern * bMergedPattern
PndPatternDBMerger::~PndPatternDBMerger ( )
virtual

Definition at line 30 of file PndPatternDBMerger.cxx.

30  {
31 }

Member Function Documentation

void PndPatternDBMerger::Execute ( )

Definition at line 33 of file PndPatternDBMerger.cxx.

References FillOutputTree(), FindIdenticalEntries(), foutputDBFile, foutputTree, GetPatternsForMerging(), InitInputChain(), InitOutputTree(), and MergePatterns().

Referenced by mergePatterns().

33  {
34  std::cout << "Executing PndPatternDBMerger" << std::endl;
35 
36  bool bInput = InitInputChain();
37  if (bInput) {
38  std::cout << "Input chain successfully initialised" << std::endl;
39  }
40 
42 
43  IdenticalEntries entriesToBeMerged;
44  entriesToBeMerged = FindIdenticalEntries();
45 
46  std::cout << "Merged entries to be created: " << entriesToBeMerged.size() << std::endl;
47  for (auto iter: boost::adaptors::reverse(entriesToBeMerged)) {
48  std::vector<PndPattern> patternsToBeMerged = GetPatternsForMerging(iter);
49  PndPattern mergedPattern = MergePatterns(patternsToBeMerged);
50  FillOutputTree(mergedPattern);
51  }
52 
53  std::cout << "Saving output tree" << std::endl;
54  foutputTree->AutoSave();
55  foutputDBFile->Close();
56 }
std::vector< PndPattern > GetPatternsForMerging(std::pair< int, std::set< int >> entryPair)
void FillOutputTree(PndPattern &mergedPattern)
std::multimap< int, std::set< int > > IdenticalEntries
PndPattern MergePatterns(std::vector< PndPattern > &entries)
IdenticalEntries FindIdenticalEntries()
void PndPatternDBMerger::FillOutputTree ( PndPattern mergedPattern)
private

Definition at line 131 of file PndPatternDBMerger.cxx.

References bMergedPattern, and foutputTree.

Referenced by Execute().

131  {
132  bMergedPattern = &mergedPattern;
133  foutputTree->Fill();
134 }
PndPattern * bMergedPattern
IdenticalEntries PndPatternDBMerger::FindIdenticalEntries ( )
private

Definition at line 75 of file PndPatternDBMerger.cxx.

References bPattern, fpatternTree, and PndPattern::GetTubeIDs().

Referenced by Execute().

75  {
76  std::cout << "Finding identical patterns in input chain" << std::endl;
77 
78 // pattern, entries in file for corresponding pattern
79  typedef std::map<std::set<int>, std::set<int>> PatternEntries;
80  PatternEntries patternEntries;
81  Long64_t nEntries = fpatternTree->GetEntries();
82  std::cout << "Entries to process: " << nEntries << std::endl;
83 
84  for (Long64_t iEntry = 0; iEntry < nEntries; ++iEntry) {
85  if (iEntry % 10000 == 0) {
86  std::cout << "processing entry " << iEntry << " of " << nEntries << std::endl;
87  }
88  fpatternTree->GetEntry(iEntry);
89  std::set<int> tubeIDs = bPattern->GetTubeIDs();
90  patternEntries[tubeIDs].insert(iEntry);
91  }
92 
93  std::cout << "Unique patterns found in input chain: " << patternEntries.size() << std::endl;
94 
95  std::cout << "Creating map with entries to be merged" << std::endl;
96 // number of entries, actual entries in file
97  IdenticalEntries mapEntries;
98  for (auto iter: patternEntries) {
99  std::set<int> &vEntries = iter.second;
100 // set this to 1 to only consider recurring patterns
101  if (vEntries.size() > 0) {
102  mapEntries.insert(std::make_pair(vEntries.size(), vEntries));
103  }
104  }
105 
106  return mapEntries;
107 }
std::set< int > GetTubeIDs() const
Definition: PndPattern.h:32
std::multimap< int, std::set< int > > IdenticalEntries
std::vector< PndPattern > PndPatternDBMerger::GetPatternsForMerging ( std::pair< int, std::set< int >>  entryPair)
private

Definition at line 108 of file PndPatternDBMerger.cxx.

References bPattern, and fpatternTree.

Referenced by Execute().

108  {
109  std::vector<PndPattern> patternsToBeMerged;
110  for (auto const& entry: entryPair.second) {
111  fpatternTree->GetEntry(entry);
112  patternsToBeMerged.push_back(*bPattern);
113  }
114  return patternsToBeMerged;
115 }
bool PndPatternDBMerger::InitInputChain ( )
private

Definition at line 58 of file PndPatternDBMerger.cxx.

References bPattern, finputFilename, finputTreename, and fpatternTree.

Referenced by Execute().

58  {
59  std::cout << "Initialising input chain with TTree" << finputTreename << std::endl;
60  fpatternTree = new TChain(finputTreename);
61  std::cout << "Adding input file(s) with name" << finputFilename << std::endl;
63 
64  fpatternTree->SetBranchAddress("pattern",&bPattern);
65 
66  if (!fpatternTree) return false;
67  return true;
68 }
void PndPatternDBMerger::InitOutputTree ( )
private

Definition at line 69 of file PndPatternDBMerger.cxx.

References bMergedPattern, foutputDBFile, foutputFilename, foutputTree, and foutputTreename.

Referenced by Execute().

69  {
70  std::cout << "Initialising output file and tree" << std::endl;
71  foutputDBFile = new TFile(foutputFilename,"RECREATE");
72  foutputTree = new TTree(foutputTreename,"Tree containing merged patterns");
73  foutputTree->Branch("pattern",&bMergedPattern);
74 }
PndPattern * bMergedPattern
PndPattern PndPatternDBMerger::MergePatterns ( std::vector< PndPattern > &  entries)
private

Definition at line 116 of file PndPatternDBMerger.cxx.

References PndPattern::AddMomenta(), PndPattern::GetCount(), PndPattern::SetPatternCount(), PndPattern::SetSectorID(), and PndPattern::SetTubeIDs().

Referenced by Execute().

116  {
117  PndPattern merged;
118  if (entries.size() == 0) return merged;
119  merged.SetTubeIDs(entries.at(0).GetTubeIDs());
120  merged.SetSectorID(entries.at(0).GetSectorID());
121 
122  for (auto const& pattern: entries) {
123  int currentCount = merged.GetCount();
124  int newCount = currentCount + pattern.GetCount();
125  merged.SetPatternCount(newCount);
126  std::vector<TVector3> momenta = pattern.GetMomenta();
127  merged.AddMomenta(momenta);
128  }
129  return merged;
130 }
void SetPatternCount(int count)
Definition: PndPattern.h:29
void SetTubeIDs(std::set< int > tubeIDs)
Definition: PndPattern.h:27
void SetSectorID(int sectorID)
Definition: PndPattern.h:23
int GetCount() const
Definition: PndPattern.h:34
void AddMomenta(std::vector< TVector3 > momenta)
Definition: PndPattern.cxx:36
void PndPatternDBMerger::SetInputFilename ( TString  filename)
inline

Definition at line 24 of file PndPatternDBMerger.h.

References filename, and finputFilename.

Referenced by mergePatterns().

const string filename
void PndPatternDBMerger::SetInputTreename ( TString  treename)
inline

Definition at line 25 of file PndPatternDBMerger.h.

References finputTreename.

Referenced by mergePatterns().

25 {finputTreename = treename;}
void PndPatternDBMerger::SetOutputFilename ( TString  filename)
inline

Definition at line 26 of file PndPatternDBMerger.h.

References filename, and foutputFilename.

Referenced by mergePatterns().

const string filename
void PndPatternDBMerger::SetOutputTreename ( TString  treename)
inline

Definition at line 27 of file PndPatternDBMerger.h.

References foutputTreename.

27 {foutputTreename = treename;}

Member Data Documentation

PndPattern* PndPatternDBMerger::bMergedPattern
private

Definition at line 50 of file PndPatternDBMerger.h.

Referenced by FillOutputTree(), and InitOutputTree().

PndPattern* PndPatternDBMerger::bPattern
private
TString PndPatternDBMerger::finputFilename
private

Definition at line 44 of file PndPatternDBMerger.h.

Referenced by InitInputChain(), and SetInputFilename().

TString PndPatternDBMerger::finputTreename
private

Definition at line 45 of file PndPatternDBMerger.h.

Referenced by InitInputChain(), and SetInputTreename().

TFile* PndPatternDBMerger::foutputDBFile
private

Definition at line 41 of file PndPatternDBMerger.h.

Referenced by Execute(), and InitOutputTree().

TString PndPatternDBMerger::foutputFilename
private

Definition at line 46 of file PndPatternDBMerger.h.

Referenced by InitOutputTree(), and SetOutputFilename().

TTree* PndPatternDBMerger::foutputTree
private

Definition at line 42 of file PndPatternDBMerger.h.

Referenced by Execute(), FillOutputTree(), and InitOutputTree().

TString PndPatternDBMerger::foutputTreename
private

Definition at line 47 of file PndPatternDBMerger.h.

Referenced by InitOutputTree(), and SetOutputTreename().

TChain* PndPatternDBMerger::fpatternTree
private

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