File indexing completed on 2025-04-19 09:09:42
0001 #ifndef Analysis_Triggers_Final_Selector_H
0002 #define Analysis_Triggers_Final_Selector_H
0003
0004
0005 #include "AddOns/Analysis/Main/Analysis_Object.H"
0006 #include "AddOns/Analysis/Triggers/Calorimeter_Cone.H"
0007 #include "AddOns/Analysis/Triggers/Kt_Algorithm.H"
0008 #include "AddOns/Analysis/Triggers/Durham_Algorithm.H"
0009 #include <vector>
0010 #include <memory>
0011
0012 namespace ANALYSIS {
0013 struct Final_Selector_Data {
0014 bool keep, ko;
0015 int bf, min_n, max_n;
0016 double eta_min, eta_max, et_min, pt_min;
0017 double r_min, mass_min, mass_max, f;
0018 Final_Selector_Data():
0019 keep(true), ko(false), bf(true), min_n(-1), max_n(-1),
0020 eta_min(0.), eta_max(0.), et_min(0.), pt_min(0.),
0021 r_min(0.), mass_min(-1.), mass_max(-1.), f(0.5) {}
0022 Final_Selector_Data(double _eta_min, double _eta_max, double _et_min, double _pt_min,
0023 double _r_min, double _mass_min, double _mass_max):
0024 keep(true), ko(false), bf(true), min_n(-1), max_n(-1),
0025 eta_min(_eta_min), eta_max(_eta_max), et_min(_et_min), pt_min(_pt_min),
0026 r_min(_r_min), mass_min(_mass_min), mass_max(_mass_max), f(0.5) {}
0027 };
0028
0029
0030 typedef std::map<ATOOLS::Flavour,Final_Selector_Data> Final_Data_Map;
0031 typedef std::map<std::pair<ATOOLS::Flavour,ATOOLS::Flavour>,Final_Selector_Data> Final_Correlator_Map;
0032 using Particle_Qualifier_Base_SP
0033 = std::shared_ptr<ATOOLS::Particle_Qualifier_Base>;
0034
0035
0036 class Final_Selector : public Analysis_Object {
0037 protected:
0038 Particle_Qualifier_Base_SP p_qualifier;
0039 std::string m_inlistname, m_outlistname;
0040 bool m_ownlist, m_extract;
0041 int m_mode;
0042 Jet_Algorithm_Base * p_jetalg;
0043 Final_Data_Map m_fmap;
0044 Final_Correlator_Map m_cmap;
0045
0046 bool PtSelect(const ATOOLS::Vec4D &, double);
0047 bool EtSelect(const ATOOLS::Vec4D &, double);
0048 bool EtaSelect(const ATOOLS::Vec4D &, double,double);
0049 bool DeltaRSelect(const ATOOLS::Vec4D &,const ATOOLS::Vec4D &,double);
0050 bool MassSelect(const ATOOLS::Vec4D &,const ATOOLS::Vec4D &,double,double);
0051 double DeltaR(const ATOOLS::Vec4D &,const ATOOLS::Vec4D &);
0052 void JetSelect(Particle_List * pl,const Flavour& jf);
0053
0054 void Select(ATOOLS::Particle_List *,Final_Data_Map::iterator);
0055 void Select2(ATOOLS::Particle_List *,Final_Correlator_Map::iterator);
0056 void SelectN(ATOOLS::Particle_List *,Final_Data_Map::iterator);
0057 void Extract(ATOOLS::Particle_List *);
0058 public:
0059 Final_Selector(const std::string &,const std::string &);
0060 Final_Selector(const std::string &,const std::string &, int mode,
0061 Particle_Qualifier_Base_SP qualifier=nullptr);
0062
0063 void AddSelector(const ATOOLS::Flavour &, const Final_Selector_Data &);
0064 void AddSelector(const ATOOLS::Flavour & ,const ATOOLS::Flavour &, const Final_Selector_Data &);
0065 void AddSelector(const ATOOLS::Flavour &, int, int);
0066 void AddSelector(const ATOOLS::Flavour &, const Final_Selector_Data &,
0067 Calorimeter_Cone * const);
0068
0069 void AddKeepFlavour(const ATOOLS::Flavour &);
0070
0071 void Evaluate(const ATOOLS::Blob_List &,double, double);
0072 void Output();
0073 Jet_Algorithm_Base * GetJetAlgorithm() { return p_jetalg; }
0074
0075 Analysis_Object * GetCopy() const;
0076 ~Final_Selector();
0077 void SetAnalysis(Primitive_Analysis * ana);
0078 };
0079
0080 class Leading_Particle : public Analysis_Object {
0081 private:
0082 ATOOLS::Particle_Qualifier_Base * p_qualifier;
0083 std::string m_inlistname, m_outlistname;
0084 int m_mode;
0085 public:
0086 Leading_Particle(const std::string &,const std::string &);
0087 Leading_Particle(const std::string &,const std::string &, int mode,
0088 ATOOLS::Particle_Qualifier_Base * const qualifier=NULL);
0089 ~Leading_Particle();
0090 Analysis_Object * GetCopy() const;
0091 void Evaluate(const ATOOLS::Blob_List &,double, double);
0092 void Output();
0093 };
0094 }
0095
0096 #endif