Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 08:16:35

0001 #ifndef PHHEPMC_PHHEPMCGENEVENTMAP_H
0002 #define PHHEPMC_PHHEPMCGENEVENTMAP_H
0003 
0004 #include "PHHepMCGenEvent.h"
0005 
0006 #include <phool/PHObject.h>
0007 
0008 #include <cstddef>           // for size_t
0009 #include <iostream>           // for cout, ostream
0010 #include <map>
0011 
0012 //! \brief PHHepMCGenEventMap is collection of HEPMC events input into this simulation
0013 //! map of embedding ID -> PHHepMCGenEvent
0014 //! positive ID is the embedded event of interest, e.g. jetty event from pythia
0015 //! negative IDs are backgrounds, .e.g out of time pile up collisions
0016 //! Usually, ID = 0 means the primary Au+Au collision background
0017 class PHHepMCGenEventMap : public PHObject
0018 {
0019  public:
0020   //! map of embedding ID -> PHHepMCGenEvent
0021   //! positive ID is the embedded event of interest, e.g. jetty event from pythia
0022   //! negative IDs are backgrounds, .e.g out of time pile up collisions
0023   //! Usually, ID = 0 means the primary Au+Au collision background
0024   typedef std::map<int, PHHepMCGenEvent*> HepMCGenEventMap;
0025   typedef std::map<int, PHHepMCGenEvent*>::const_iterator ConstIter;
0026   typedef std::map<int, PHHepMCGenEvent*>::iterator Iter;
0027   typedef std::map<int, PHHepMCGenEvent*>::const_reverse_iterator ConstReverseIter;
0028   typedef std::map<int, PHHepMCGenEvent*>::reverse_iterator ReverseIter;
0029 
0030   PHHepMCGenEventMap() = default;
0031   PHHepMCGenEventMap(const PHHepMCGenEventMap& eventmap);
0032   PHHepMCGenEventMap& operator=(const PHHepMCGenEventMap& eventmap);
0033 
0034   ~PHHepMCGenEventMap() override;
0035 
0036   void identify(std::ostream& os = std::cout) const override;
0037 // cppcheck-suppress virtualCallInConstructor
0038   void Reset() override;
0039   int isValid() const override { return 1; }
0040   PHHepMCGenEventMap* CloneMe() const override { return new PHHepMCGenEventMap(*this); }
0041   //! container service
0042   bool empty() const { return _map.empty(); }
0043   size_t size() const { return _map.size(); }
0044   size_t count(int idkey) const { return _map.count(idkey); }
0045   void clear() { Reset(); }
0046   //! fetch event
0047   const PHHepMCGenEvent* get(int idkey) const;
0048   PHHepMCGenEvent* get(int idkey);
0049 
0050   //! insert a event of interest, e.g. jetty event from pythia
0051   PHHepMCGenEvent* insert(const PHHepMCGenEvent* event) { return insert_active_event(event); }
0052   //! insert a event of interest, e.g. jetty event from pythia
0053   PHHepMCGenEvent* insert_active_event(const PHHepMCGenEvent* event = nullptr);
0054   //! insert a event of background, e.g. Au+Au collision background. First event has embedding ID = 0, which is usually the primary Au+Au collision in the case of HI embedding
0055   PHHepMCGenEvent* insert_background_event(const PHHepMCGenEvent* event = nullptr);
0056   //! insert a event with specific embedding ID
0057   PHHepMCGenEvent* insert_event(const int embedding_id, const PHHepMCGenEvent* event = nullptr);
0058 
0059   size_t erase(int idkey)
0060   {
0061     delete _map[idkey];
0062     return _map.erase(idkey);
0063   }
0064 
0065   //! find
0066   ConstIter find(unsigned int idkey) const { return _map.find(idkey); }
0067   Iter find(int idkey) { return _map.find(idkey); }
0068   //! iterator from lowest ID to highest, i.e. background to signal
0069   ConstIter begin() const { return _map.begin(); }
0070   ConstIter end() const { return _map.end(); }
0071   Iter begin() { return _map.begin(); }
0072   Iter end() { return _map.end(); }
0073   //! iterator from lowest ID to highest, i.e. signal to background
0074   ConstReverseIter rbegin() const { return _map.rbegin(); }
0075   ConstReverseIter rend() const { return _map.rend(); }
0076   ReverseIter rbegin() { return _map.rbegin(); }
0077   ReverseIter rend() { return _map.rend(); }
0078   //
0079   //! for c++11 range-based for loop
0080   const HepMCGenEventMap& get_map() const { return _map; }
0081   HepMCGenEventMap& get_map() { return _map; }
0082 
0083  private:
0084   HepMCGenEventMap _map;
0085 
0086   ClassDefOverride(PHHepMCGenEventMap, 4);
0087 };
0088 
0089 #endif