File indexing completed on 2025-12-13 10:28:52
0001 #ifndef Analysis_Triggers_Primitive_Detector_H
0002 #define Analysis_Triggers_Primitive_Detector_H
0003
0004 #include "AddOns/Analysis/Main/Analysis_Object.H"
0005 #include "ATOOLS/Org/Message.H"
0006
0007 namespace ANALYSIS {
0008 class Primitive_Detector_Element {
0009 protected:
0010 int m_nx, m_ny;
0011 std::string m_name;
0012 double ** p_cells;
0013 public:
0014 Primitive_Detector_Element();
0015 Primitive_Detector_Element(std::string name);
0016 Primitive_Detector_Element(int neta,int nphi,std::string name);
0017 virtual ~Primitive_Detector_Element();
0018 virtual void Fill(const ATOOLS::Particle_List *) = 0;
0019 virtual void Extract(ATOOLS::Particle_List *) = 0;
0020 virtual void Reset() = 0;
0021 virtual Primitive_Detector_Element * Copy() const = 0;
0022 double Cell(const int i,const int j);
0023 std::string Name() const;
0024 };
0025
0026 inline double Primitive_Detector_Element::Cell(const int i,const int j) {
0027 if (i>-1&&j>-1&&i<m_nx&&j<m_ny) return p_cells[i][j];
0028 else msg_Error()<<"Error in Primitive_Detector_Element "<<m_name<<std::endl
0029 <<" GetCell("<<i<<","<<j<<") out of bounds, return 0."<<std::endl;
0030 return 0.;
0031 }
0032 inline std::string Primitive_Detector_Element::Name() const { return m_name; }
0033
0034
0035
0036 typedef std::map<std::string,Primitive_Detector_Element *> String_DetectorElement_Map;
0037 typedef String_DetectorElement_Map::iterator String_DetectorElement_Iter;
0038
0039
0040 class Primitive_Detector: public Analysis_Object {
0041 std::string m_inlistname,m_outlistname;
0042 String_DetectorElement_Map m_elements;
0043 public:
0044 Primitive_Detector(const std::string &inlist,const std::string &outlist);
0045 ~Primitive_Detector();
0046
0047 Analysis_Object *GetCopy() const;
0048
0049 void Evaluate(const ATOOLS::Blob_List &,double=1.,double=1.);
0050
0051 void Reset();
0052
0053 void Add(Primitive_Detector_Element *);
0054 void Fill(const ATOOLS::Blob_List *);
0055 void Fill(const ATOOLS::Particle_List *);
0056 void Extract(ATOOLS::Particle_List *);
0057 Primitive_Detector_Element * GetElement(std::string name);
0058
0059 std::string Name() const;
0060 void Print();
0061
0062 void AddSelector(const double etmin,const double etamin,
0063 const double etamax,const double rmin,
0064 const int bjets);
0065
0066 };
0067
0068 inline std::string Primitive_Detector::Name() const { return m_name; }
0069 inline void Primitive_Detector::Reset() {
0070 for (String_DetectorElement_Iter sdeiter=m_elements.begin();
0071 sdeiter!=m_elements.end();sdeiter++) {
0072 sdeiter->second->Reset();
0073 }
0074 }
0075 }
0076
0077 #endif