Back to home page

sPhenix code displayed by LXR

 
 

    


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

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