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
0034 for( const auto& pair:_map )
0035 {
0036 delete pair.second;
0037 }
0038
0039
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 }