Back to home page

EIC code displayed by LXR

 
 

    


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