Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 09:20:04

0001 #ifndef JETBASE_JetContainerv1__h
0002 #define JETBASE_JetContainerv1__h
0003 #include "JetContainer.h"
0004 
0005 #include "Jet.h"
0006 
0007 #include <TClonesArray.h>
0008 
0009 #include <limits>
0010 
0011 class JetContainerv1 : public JetContainer
0012 {
0013  public:
0014   // Manage class creation, copy, reset, destruction
0015   JetContainerv1();
0016   ~JetContainerv1() override;
0017   void identify(std::ostream& os = std::cout) const override;
0018   explicit JetContainerv1(const JetContainer& rhs);
0019   JetContainerv1& operator=(const JetContainer& jets);
0020   void Reset() override;
0021   TClonesArray* clone_data() const override
0022   {
0023     return (TClonesArray*) m_clones->Clone();
0024   };
0025 
0026   // status of jet contents
0027   bool empty() const override { return m_njets == 0; };
0028   size_t size() const override { return m_njets; };
0029 
0030   // adding/access jets
0031   Jet* add_jet() override;                            // Add a new jet to the TClonesArray and return the pointer
0032   Jet* get_jet(unsigned int ijet) override;          // Get get at location.
0033   Jet* get_UncheckedAt(unsigned int index) override;  // Get get at location.
0034 
0035   // convenience shortcuts of get_{jet,UncheckedAt}
0036   inline Jet* operator()(int index) override { return get_jet(index); };          // synonym for get_jet()
0037   inline Jet* operator[](int index) override { return get_UncheckedAt(index); };  // get jet, don't check for length
0038                                                                                   //
0039   // ----------------------------------------------------------------------------------------
0040   //  Interface for adding properties to jets, and getting the index to those properties
0041   // ----------------------------------------------------------------------------------------
0042   // The optional properties in each Jet are stored in a vector of floats,
0043   // e.g. { Rg_value, mg_value, area, .... }
0044   // The JetContainer generates the jet and keeps a map of which properties in which location.
0045   // Default values in the Jet Properties are set to NAN
0046   // ----------------------------------------------------------------------------------------
0047   std::map<Jet::PROPERTY, Jet::PROPERTY> property_indices() const override { return m_pindex; };
0048   bool has_property(Jet::PROPERTY prop) const override { return m_pindex.find(prop) != m_pindex.end(); };
0049   size_t size_properties() const override { return m_pindex.size(); };
0050   size_t add_property(Jet::PROPERTY) override;                             // add property, if not already there, to jet prop vectors
0051   size_t add_property(std::set<Jet::PROPERTY>) override;                   // same as above, convenience for other code using ::set
0052   virtual Jet::PROPERTY property_index(Jet::PROPERTY) override;            // get the propery index
0053   void print_property_types(std::ostream& os = std::cout) const override;  // print the order of properties in jet
0054 
0055   // ---------------------------------------------------------------------------------------
0056   //  Add ability to loop over jets
0057   // ---------------------------------------------------------------------------------------
0058   // Use:
0059   // ```
0060   //     for (jet : *jet_containter) {
0061   //     // jet will increment as Jet* through all jets
0062   //     ... }
0063   // ```
0064   Jet::IterJetTCA begin() override;
0065   Jet::IterJetTCA end() override;
0066   // ---------------------------------------------------------------------------------------
0067 
0068   // -legacy-set-parameters-----------------------------------------------------------------
0069   void set_algo(Jet::ALGO algo) override { m_algo = algo; };
0070   Jet::ALGO get_algo() const override { return m_algo; };
0071 
0072   void set_par(float par) override { set_jetpar_R(par); }
0073   float get_par() const override { return get_jetpar_R(); }
0074 
0075   void set_jetpar_R(float par) override { m_jetpar_R = par; }
0076   float get_jetpar_R() const override { return m_jetpar_R; }
0077 
0078   // set access to source identifiers ------------------------------------------
0079 
0080   bool empty_src() const override { return m_src.empty(); }
0081   void insert_src(Jet::SRC src) override { m_src.insert(src); }
0082 
0083   ConstSrcIter begin_src() const override { return m_src.begin(); }
0084   ConstSrcIter find_src(Jet::SRC src) const override { return m_src.find(src); }
0085   ConstSrcIter end_src() const override { return m_src.end(); }
0086 
0087   SrcIter begin_src() override { return m_src.begin(); }
0088   SrcIter find_src(Jet::SRC src) override { return m_src.find(src); }
0089   SrcIter end_src() override { return m_src.end(); }
0090 
0091   void print_jets(std::ostream&) override;  // print the order of properties in jet
0092 
0093   void set_rho_median(float _) override { m_RhoMedian = _; };
0094   float get_rho_median() const override { return m_RhoMedian; };
0095 
0096  private:
0097   static std::string str_Jet_PROPERTY(Jet::PROPERTY) ;
0098 
0099   TClonesArray* m_clones{nullptr};  // TClonesArray of Jet objects
0100   size_t m_njets{0};                // size of jet_array
0101 
0102   // properties contained in vectors of all jets
0103   std::map<Jet::PROPERTY, Jet::PROPERTY /*really index for vectors in jets*/> m_pindex{};  // indices of properties in each jet property vector
0104   size_t m_psize{0};                                                                       // size of p_index and p_vec
0105 
0106   void resize_jet_pvecs();
0107 
0108   // status
0109   Jet::ALGO m_algo{Jet::NONE};
0110   float m_jetpar_R{0.4};
0111 
0112   std::set<Jet::SRC> m_src;  //< set of sources (clusters, towers, etc)
0113 
0114   float m_RhoMedian{std::numeric_limits<float>::signaling_NaN()};
0115 
0116   ClassDefOverride(JetContainerv1, 1);
0117 };
0118 
0119 #endif