11 #include "boost/range/adaptor/reversed.hpp"
22 bMergedPattern = NULL;
24 finputFilename =
"patternDB.root";
25 finputTreename =
"trackPatterns";
26 foutputFilename =
"patternDBclean.root";
27 foutputTreename = finputTreename;
34 std::cout <<
"Executing PndPatternDBMerger" << std::endl;
38 std::cout <<
"Input chain successfully initialised" << std::endl;
46 std::cout <<
"Merged entries to be created: " << entriesToBeMerged.size() << std::endl;
47 for (
auto iter: boost::adaptors::reverse(entriesToBeMerged)) {
53 std::cout <<
"Saving output tree" << std::endl;
59 std::cout <<
"Initialising input chain with TTree" <<
finputTreename << std::endl;
61 std::cout <<
"Adding input file(s) with name" <<
finputFilename << std::endl;
70 std::cout <<
"Initialising output file and tree" << std::endl;
76 std::cout <<
"Finding identical patterns in input chain" << std::endl;
79 typedef std::map<std::set<int>, std::set<int>> PatternEntries;
80 PatternEntries patternEntries;
82 std::cout <<
"Entries to process: " << nEntries << std::endl;
84 for (Long64_t iEntry = 0; iEntry < nEntries; ++iEntry) {
85 if (iEntry % 10000 == 0) {
86 std::cout <<
"processing entry " << iEntry <<
" of " << nEntries << std::endl;
90 patternEntries[tubeIDs].insert(iEntry);
93 std::cout <<
"Unique patterns found in input chain: " << patternEntries.size() << std::endl;
95 std::cout <<
"Creating map with entries to be merged" << std::endl;
98 for (
auto iter: patternEntries) {
99 std::set<int> &vEntries = iter.second;
101 if (vEntries.size() > 0) {
102 mapEntries.insert(std::make_pair(vEntries.size(), vEntries));
109 std::vector<PndPattern> patternsToBeMerged;
110 for (
auto const& entry: entryPair.second) {
112 patternsToBeMerged.push_back(*
bPattern);
114 return patternsToBeMerged;
118 if (entries.size() == 0)
return merged;
119 merged.
SetTubeIDs(entries.at(0).GetTubeIDs());
122 for (
auto const& pattern: entries) {
123 int currentCount = merged.
GetCount();
124 int newCount = currentCount + pattern.GetCount();
126 std::vector<TVector3> momenta = pattern.GetMomenta();
virtual ~PndPatternDBMerger()
PndPattern * bMergedPattern
void SetPatternCount(int count)
void SetTubeIDs(std::set< int > tubeIDs)
std::vector< PndPattern > GetPatternsForMerging(std::pair< int, std::set< int >> entryPair)
void FillOutputTree(PndPattern &mergedPattern)
void SetSectorID(int sectorID)
std::set< int > GetTubeIDs() const
std::multimap< int, std::set< int > > IdenticalEntries
PndPattern MergePatterns(std::vector< PndPattern > &entries)
void AddMomenta(std::vector< TVector3 > momenta)
IdenticalEntries FindIdenticalEntries()