CMS 3D CMS Logo

CaloSubdetectorGeometry.h
Go to the documentation of this file.
1 #ifndef GEOMETRY_CALOGEOMETRY_CALOSUBDETECTORGEOMETRY_H
2 #define GEOMETRY_CALOGEOMETRY_CALOSUBDETECTORGEOMETRY_H 1
3 
4 #include <algorithm>
5 #include <memory>
6 #include <vector>
7 #include <set>
8 #if !defined(__CINT__) && !defined(__MAKECINT__) && !defined(__REFLEX__)
9 #include <atomic>
10 #endif
15 
24 public:
25  typedef std::vector<std::shared_ptr<const CaloCellGeometry> > CellSet;
27 
28  typedef std::set<DetId> DetIdSet;
29 
33 
34  typedef std::vector<CCGFloat> TrVec;
35  typedef std::vector<unsigned int> IVec;
36  typedef std::vector<CCGFloat> DimVec;
37 
39 
41  virtual ~CaloSubdetectorGeometry();
42 
46 
47  virtual void newCell(const GlobalPoint& f1,
48  const GlobalPoint& f2,
49  const GlobalPoint& f3,
50  const CCGFloat* parm,
51  const DetId& detId) = 0;
52 
54  virtual bool present(const DetId& id) const;
55 
57  virtual std::shared_ptr<const CaloCellGeometry> getGeometry(const DetId& id) const;
58 
63  virtual const std::vector<DetId>& getValidDetIds(DetId::Detector det = DetId::Detector(0), int subdet = 0) const;
64 
65  // Get closest cell, etc...
66  virtual DetId getClosestCell(const GlobalPoint& r) const;
67 
74  virtual DetIdSet getCells(const GlobalPoint& r, double dR) const;
75  virtual CellSet getCellSet(const GlobalPoint& r, double dR) const;
76 
77  CCGFloat deltaPhi(const DetId& detId) const;
78 
79  CCGFloat deltaEta(const DetId& detId) const;
80 
82 
84 
85  void allocatePar(ParVec::size_type n, unsigned int m);
86 
87  ParMgr* parMgr() { return m_parMgr; }
88  const ParMgr* parMgrConst() const { return m_parMgr; }
89 
91  const ParVecVec& parVecVec() const { return m_parVecVec; }
92 
93  virtual unsigned int numberOfShapes() const { return 1; }
94  virtual unsigned int numberOfParametersPerShape() const { return 1; }
95  virtual unsigned int numberOfTransformParms() const { return 6; }
96 
97  virtual void fillDefaultNamedParameters() const { return; }
98 
99  virtual void getSummary(TrVec& trVector, IVec& iVector, DimVec& dimVector, IVec& dinsVector) const;
100 
101  virtual void initializeParms() { return; }
102 
103  virtual bool valid(const DetId& id) const {
104  return (std::find(m_validIds.begin(), m_validIds.end(), id) != m_validIds.end());
105  }
106 
107 protected:
108  virtual unsigned int indexFor(const DetId& id) const;
109  virtual unsigned int sizeForDenseIndex(const DetId& id) const;
110 
111  virtual const CaloCellGeometry* getGeometryRawPtr(uint32_t index) const = 0;
112  virtual std::shared_ptr<const CaloCellGeometry> cellGeomPtr(uint32_t index) const;
113 
115 
116  static CCGFloat deltaR(const GlobalPoint& p1, const GlobalPoint& p2) { return reco::deltaR(p1, p2); }
117 
118  void addValidID(const DetId& id);
119 
120  std::vector<DetId> m_validIds;
121 
122 private:
124 
126 
128 
129 #if !defined(__CINT__) && !defined(__MAKECINT__) && !defined(__REFLEX__)
130  mutable std::atomic<std::vector<CCGFloat>*> m_deltaPhi;
131  mutable std::atomic<std::vector<CCGFloat>*> m_deltaEta;
132 #else
133  mutable std::vector<CCGFloat>* m_deltaPhi;
134  mutable std::vector<CCGFloat>* m_deltaEta;
135 #endif
136 };
137 
138 #endif
CaloCellGeometry::CornersMgr * m_cmgr
std::vector< CCGFloat > DimVec
std::vector< ParVec > ParVecVec
CaloSubdetectorGeometry & operator=(const CaloSubdetectorGeometry &)=delete
virtual void newCell(const GlobalPoint &f1, const GlobalPoint &f2, const GlobalPoint &f3, const CCGFloat *parm, const DetId &detId)=0
virtual unsigned int numberOfTransformParms() const
MgrType::size_type size_type
Definition: EZArrayFL.h:27
std::vector< unsigned int > IVec
std::vector< CCGFloat > TrVec
virtual unsigned int numberOfShapes() const
const ParVecVec & parVecVec() const
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
CaloCellGeometry::CCGFloat CCGFloat
void allocatePar(ParVec::size_type n, unsigned int m)
CCGFloat deltaPhi(const DetId &detId) const
std::vector< std::shared_ptr< const CaloCellGeometry > > CellSet
virtual DetIdSet getCells(const GlobalPoint &r, double dR) const
Get a list of all cells within a dR of the given cell.
std::vector< DetId > m_validIds
std::atomic< std::vector< CCGFloat > * > m_deltaPhi
virtual bool present(const DetId &id) const
is this detid present in the geometry?
virtual bool valid(const DetId &id) const
virtual const std::vector< DetId > & getValidDetIds(DetId::Detector det=DetId::Detector(0), int subdet=0) const
Get a list of valid detector ids (for the given subdetector)
CaloCellGeometry::ParVec ParVec
virtual std::shared_ptr< const CaloCellGeometry > getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
virtual DetId getClosestCell(const GlobalPoint &r) const
constexpr auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:30
Definition: DetId.h:17
void addValidID(const DetId &id)
virtual void getSummary(TrVec &trVector, IVec &iVector, DimVec &dimVector, IVec &dinsVector) const
CaloCellGeometry::CornersMgr * cornersMgr()
Detector
Definition: DetId.h:24
CaloCellGeometry::ParVecVec ParVecVec
Definition: EZMgrFL.h:8
virtual unsigned int indexFor(const DetId &id) const
CaloCellGeometry::ParMgr ParMgr
static CCGFloat deltaR(const GlobalPoint &p1, const GlobalPoint &p2)
virtual ~CaloSubdetectorGeometry()
The base class DOES assume that it owns the CaloCellGeometry objects.
virtual CellSet getCellSet(const GlobalPoint &r, double dR) const
virtual const CaloCellGeometry * getGeometryRawPtr(uint32_t index) const =0
virtual void fillDefaultNamedParameters() const
CCGFloat deltaEta(const DetId &detId) const
void allocateCorners(CaloCellGeometry::CornersVec::size_type n)
virtual std::shared_ptr< const CaloCellGeometry > cellGeomPtr(uint32_t index) const
std::atomic< std::vector< CCGFloat > * > m_deltaEta
const ParMgr * parMgrConst() const
virtual unsigned int numberOfParametersPerShape() const
virtual unsigned int sizeForDenseIndex(const DetId &id) const