Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-12-17 09:19:29

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