Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 08:16:56

0001 #ifndef CALOBASE_RAWTOWERGEOMCONTAINER_H
0002 #define CALOBASE_RAWTOWERGEOMCONTAINER_H
0003 
0004 #include "RawTowerDefs.h"
0005 
0006 #include <phool/PHObject.h>
0007 #include <phool/phool.h>
0008 
0009 #include <iostream>
0010 #include <limits>
0011 #include <map>
0012 #include <utility>
0013 
0014 class RawTowerGeom;
0015 
0016 /*! \class RawTowerGeomContainer
0017     \brief base class to describe calorimeter geometries
0018 */
0019 class RawTowerGeomContainer : public PHObject
0020 {
0021  public:
0022   typedef std::map<RawTowerDefs::keytype, RawTowerGeom *> Map;
0023   typedef Map::iterator Iterator;
0024   typedef Map::const_iterator ConstIterator;
0025   typedef std::pair<Iterator, Iterator> Range;
0026   typedef std::pair<ConstIterator, ConstIterator> ConstRange;
0027 
0028   //! default constructor for ROOT IO
0029   ~RawTowerGeomContainer() override {}
0030 
0031   void identify(std::ostream &os = std::cout) const override;
0032 
0033   //! 8-bit calorimeter ID
0034   virtual void set_calorimeter_id(RawTowerDefs::CalorimeterId) { PHOOL_VIRTUAL_WARN("set_calorimeter_id()"); }
0035   virtual RawTowerDefs::CalorimeterId get_calorimeter_id() const
0036   {
0037     PHOOL_VIRTUAL_WARN("get_calorimeter_id()");
0038     return RawTowerDefs::NONE;
0039   }
0040 
0041   //! go through all towers
0042   virtual ConstIterator add_tower_geometry(RawTowerGeom *geo);
0043   virtual RawTowerGeom *get_tower_geometry(RawTowerDefs::keytype)
0044   {
0045     PHOOL_VIRTUAL_WARN("get_tower_geometry()");
0046     return nullptr;
0047   }
0048 
0049   //! return all tower geometries
0050   virtual ConstRange get_tower_geometries(void) const;
0051   virtual Range get_tower_geometries(void);
0052 
0053   virtual unsigned int size() const
0054   {
0055     PHOOL_VIRTUAL_WARN("size()");
0056     return 0;
0057   }
0058 
0059   /**
0060    * \defgroup cylindrical_calorimeter for cylindrical calorimeter only as implemented in RawTowerGeomContainer_Cylinderv1
0061    *
0062    *  Note these: concept do not apply to generic calorimeters, like forward calorimeters
0063    * @{
0064    */
0065 
0066   virtual double get_radius() const
0067   {
0068     PHOOL_VIRTUAL_WARN("get_radius()");
0069     return std::numeric_limits<double>::signaling_NaN();
0070   }
0071   virtual double get_thickness() const
0072   {
0073     PHOOL_VIRTUAL_WARN("get_thickness()");
0074     return std::numeric_limits<double>::signaling_NaN();
0075   }
0076   virtual int get_phibins() const
0077   {
0078     PHOOL_VIRTUAL_WARN("get_phibins()");
0079     return -1;
0080   }
0081   //  virtual double get_phistep() const {PHOOL_VIRTUAL_WARN("get_phistep()"); return std::numeric_limits<double>::signaling_NaN();}
0082   //  virtual double get_phimin() const {PHOOL_VIRTUAL_WARN("get_phimin()"); return std::numeric_limits<double>::signaling_NaN();}
0083   virtual int get_etabins() const
0084   {
0085     PHOOL_VIRTUAL_WARN("get_etabins()");
0086     return -1;
0087   }
0088   //  virtual double get_etastep() const {PHOOL_VIRTUAL_WARN("get_etastep()"); return std::numeric_limits<double>::signaling_NaN();}
0089   //  virtual double get_etamin() const {PHOOL_VIRTUAL_WARN("get_etamin()"); return std::numeric_limits<double>::signaling_NaN();}
0090 
0091   virtual std::pair<double, double> get_phibounds(const int /*ibin*/) const
0092   {
0093     PHOOL_VIRTUAL_WARN("get_phibounds(const int)");
0094     return std::make_pair(std::numeric_limits<double>::signaling_NaN(), std::numeric_limits<double>::signaling_NaN());
0095   }
0096   virtual std::pair<double, double> get_etabounds(const int /*ibin*/) const
0097   {
0098     PHOOL_VIRTUAL_WARN("get_etabounds(const int)");
0099     return std::make_pair(std::numeric_limits<double>::signaling_NaN(), std::numeric_limits<double>::signaling_NaN());
0100   }
0101   virtual double get_etacenter(const int /*ibin*/) const
0102   {
0103     PHOOL_VIRTUAL_WARN("get_etacenter(const int)");
0104     return std::numeric_limits<double>::signaling_NaN();
0105   }
0106   virtual double get_phicenter(const int /*ibin*/) const
0107   {
0108     PHOOL_VIRTUAL_WARN("get_phicenter(const int)");
0109     return std::numeric_limits<double>::signaling_NaN();
0110   }
0111 
0112   virtual int get_etabin(const double /*eta*/) const
0113   {
0114     PHOOL_VIRTUAL_WARN("get_etabin(const double)");
0115     return -1;
0116   }
0117   virtual int get_phibin(const double /*phi*/) const
0118   {
0119     PHOOL_VIRTUAL_WARN("get_phibin(const double)");
0120     return -1;
0121   }
0122 
0123   virtual void set_radius(const double) { PHOOL_VIRTUAL_WARN("set_radius(const double)"); }
0124   virtual void set_thickness(const double) { PHOOL_VIRTUAL_WARN("set_thickness(const double)"); }
0125   virtual void set_phibins(const int) { PHOOL_VIRTUAL_WARN("set_phibins(const int)"); }
0126   //  virtual void set_phistep(const double phi) {PHOOL_VIRTUAL_WARN("set_phistep(const double)");}
0127   //  virtual void set_phimin(const double phi) {PHOOL_VIRTUAL_WARN("set_phimin(const double)");}
0128   virtual void set_etabins(const int) { PHOOL_VIRTUAL_WARN("set_etabins(const int)"); }
0129   //  virtual void set_etamin(const double z) {PHOOL_VIRTUAL_WARN("set_etamin(const double)");}
0130   //  virtual void set_etastep(const double z) {PHOOL_VIRTUAL_WARN("set_etastep(const double)");}
0131   virtual void set_etabounds(const int /*ibin*/, const std::pair<double, double> & /*bounds*/) { PHOOL_VIRTUAL_WARN("set_etabounds(const int ibin, const std::pair<double, double> & bounds)"); }
0132   virtual void set_phibounds(const int /*ibin*/, const std::pair<double, double> & /*bounds*/) { PHOOL_VIRTUAL_WARN("set_etabounds(const int ibin, const std::pair<double, double> & bounds)"); }
0133 
0134   /**@}*/
0135 
0136  protected:
0137   //! this class is not for use. Base class only
0138   RawTowerGeomContainer() {}
0139 
0140   ClassDefOverride(RawTowerGeomContainer, 2)
0141 };
0142 
0143 #endif