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)
ClassImp(PndPatternDBMerger) PndPatternDBMerger
void AddMomenta(std::vector< TVector3 > momenta)
IdenticalEntries FindIdenticalEntries()