Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:16:00

0001 #include "PHHepMCGenEventMap.h"
0002 
0003 #include "PHHepMCGenEvent.h"
0004 
0005 #include <TSystem.h>
0006 
0007 #include <cassert>
0008 #include <cstdlib>           // for exit
0009 #include <iterator>           // for reverse_iterator
0010 #include <utility>            // for pair, make_pair
0011 
0012 PHHepMCGenEventMap::PHHepMCGenEventMap(const PHHepMCGenEventMap& eventmap)
0013 {
0014   for( const auto& pair:eventmap.get_map() )
0015   { _map.insert(std::make_pair(pair.first, static_cast<PHHepMCGenEvent*>(pair.second->CloneMe()))); }
0016 }
0017 
0018 PHHepMCGenEventMap& PHHepMCGenEventMap::operator=(const PHHepMCGenEventMap& eventmap)
0019 {
0020   Reset();
0021   for( const auto& pair:eventmap.get_map() )
0022   { _map.insert(std::make_pair(pair.first, static_cast<PHHepMCGenEvent*>(pair.second->CloneMe()))); }
0023   return *this;
0024 }
0025 
0026 PHHepMCGenEventMap::~PHHepMCGenEventMap()
0027 {
0028   Reset();
0029 }
0030 
0031 void PHHepMCGenEventMap::Reset()
0032 {
0033   // delete all events
0034   for( const auto& pair:_map )
0035   {
0036     delete pair.second;
0037   }
0038   
0039   // clear map
0040   _map.clear();
0041 }
0042 
0043 void PHHepMCGenEventMap::identify(std::ostream& os) const
0044 {
0045   os << "PHHepMCGenEventMap: size = " << _map.size() << std::endl;
0046 
0047   for (const auto& evt : _map)
0048   {
0049     std::cout << "Event[" << evt.first << "] : ";
0050     assert(evt.second);
0051     evt.second->identify();
0052   }
0053 
0054   return;
0055 }
0056 
0057 const PHHepMCGenEvent* PHHepMCGenEventMap::get(int id) const
0058 {
0059   ConstIter iter = _map.find(id);
0060   if (iter == _map.end()) return nullptr;
0061   return iter->second;
0062 }
0063 
0064 PHHepMCGenEvent* PHHepMCGenEventMap::get(int id)
0065 {
0066   Iter iter = _map.find(id);
0067   if (iter == _map.end()) return nullptr;
0068   return iter->second;
0069 }
0070 
0071 PHHepMCGenEvent* PHHepMCGenEventMap::insert_active_event(const PHHepMCGenEvent* event)
0072 {
0073   const int index = _map.empty() ? 1 : (_map.rbegin()->first+1);
0074   auto newEvent = event ? static_cast<PHHepMCGenEvent*>(event->CloneMe()): new PHHepMCGenEvent();
0075   newEvent->set_embedding_id(index);
0076   _map.insert(std::make_pair(index,newEvent));
0077   return newEvent;
0078 }
0079 
0080 PHHepMCGenEvent* PHHepMCGenEventMap::insert_background_event(const PHHepMCGenEvent* event)
0081 {
0082   const int index = _map.empty() ? -1 : (_map.begin()->first-1);
0083   auto newEvent = event ? static_cast<PHHepMCGenEvent*>(event->CloneMe()): new PHHepMCGenEvent();
0084   newEvent->set_embedding_id(index);
0085   _map.insert(std::make_pair(index,newEvent));
0086   return newEvent;
0087 }
0088 
0089 PHHepMCGenEvent* PHHepMCGenEventMap::insert_event(const int index, const PHHepMCGenEvent* event)
0090 {
0091   auto newEvent = event ? static_cast<PHHepMCGenEvent*>(event->CloneMe()): new PHHepMCGenEvent();
0092   newEvent->set_embedding_id(index);
0093   auto ret =  _map.insert(std::make_pair(index, newEvent ));
0094   if (ret.second == false)
0095   {
0096     std::cout 
0097       << "PHHepMCGenEventMap::insert_event - Fatal Error -"
0098       << "embedding ID " << index << " is already used in the PHHepMCGenEventMap. Print map:";
0099     identify();
0100     gSystem->Exit(10);
0101   }
0102   return newEvent;
0103 }