CMS 3D CMS Logo

HcalGeometry.h
Go to the documentation of this file.
1 #ifndef HcalGeometry_h
2 #define HcalGeometry_h
3 
5 
13 
16 
18 
20 
21 public:
22 
25 
26  typedef std::vector<IdealObliquePrism> HBCellVec ;
27  typedef std::vector<IdealObliquePrism> HECellVec ;
28  typedef std::vector<IdealObliquePrism> HOCellVec ;
29  typedef std::vector<IdealZPrism> HFCellVec ;
30 
34 
38  typedef HcalDetId DetIdType ;
39 
40 
42 
43  static std::string dbString() { return "PHcalRcd" ; }
44 
45  unsigned int numberOfShapes() const override { return m_topology.getNumberOfShapes() ; }
46  unsigned int numberOfParametersPerShape() const override { return k_NumberOfParametersPerShape ; }
47 
48  explicit HcalGeometry(const HcalTopology& topology);
49 
51  ~HcalGeometry() override;
52 
53  const std::vector<DetId>& getValidDetIds(DetId::Detector det = DetId::Detector ( 0 ),
54  int subdet = 0 ) const override;
55 
56  std::shared_ptr<const CaloCellGeometry> getGeometry( const DetId& id ) const override ;
57 
58  DetId getClosestCell(const GlobalPoint& r) const override ;
59  DetId getClosestCell(const GlobalPoint& r, bool ignoreCorrect) const;
60 
61  CaloSubdetectorGeometry::DetIdSet getCells(const GlobalPoint& r, double dR) const override ;
62 
63  GlobalPoint getPosition(const DetId& id) const;
64  GlobalPoint getBackPosition(const DetId& id) const;
66 
67  static std::string producerTag() { return "HCAL" ; }
68 
69  static unsigned int numberOfBarrelAlignments() { return 36 ; }
70 
71  static unsigned int numberOfEndcapAlignments() { return 36 ; }
72 
73  static unsigned int numberOfForwardAlignments() { return 36 ; }
74 
75  static unsigned int numberOfOuterAlignments() { return 60 ; }
76 
77  unsigned int getHxSize(const int type) const;
78 
79  static unsigned int numberOfAlignments() {
80  return ( numberOfBarrelAlignments() +
84 
85  static unsigned int alignmentBarrelIndexLocal( const DetId& id ) ;
86  static unsigned int alignmentEndcapIndexLocal( const DetId& id ) ;
87  static unsigned int alignmentForwardIndexLocal( const DetId& id ) ;
88  static unsigned int alignmentOuterIndexLocal( const DetId& id ) ;
89  static unsigned int alignmentTransformIndexLocal( const DetId& id ) ;
90 
91  static unsigned int alignmentBarEndForIndexLocal( const DetId& id,unsigned int nD ) ;
92 
93  static unsigned int alignmentTransformIndexGlobal( const DetId& id ) ;
94 
95  static DetId detIdFromLocalAlignmentIndex( unsigned int i ) ;
96  static DetId detIdFromBarrelAlignmentIndex( unsigned int i ) ;
97  static DetId detIdFromEndcapAlignmentIndex( unsigned int i ) ;
98  static DetId detIdFromForwardAlignmentIndex( unsigned int i ) ;
99  static DetId detIdFromOuterAlignmentIndex( unsigned int i ) ;
100 
101  void localCorners( Pt3DVec& lc ,
102  const CCGFloat* pv ,
103  unsigned int i ,
104  Pt3D& ref ) ;
105 
106  void newCell( const GlobalPoint& f1 ,
107  const GlobalPoint& f2 ,
108  const GlobalPoint& f3 ,
109  const CCGFloat* parm,
110  const DetId& detId ) override ;
111 
115  CaloSubdetectorGeometry::IVec& dinsVector ) const override ;
116 
117  const HcalTopology& topology() const { return m_topology; }
118 
119 protected:
120 
121  unsigned int indexFor(const DetId& id) const override { return m_topology.detId2denseId(id); }
122  unsigned int sizeForDenseIndex(const DetId& id) const override { return m_topology.ncells(); }
123 
124  // Modify the RawPtr class
125  const CaloCellGeometry* getGeometryRawPtr (uint32_t index) const override;
126 
127 private:
128 
129  // Base clas for getting geometry
130  std::shared_ptr<const CaloCellGeometry> getGeometryBase( const DetId& id ) const {
131  return cellGeomPtr( m_topology.detId2denseId( id ) ) ;
132  }
133 
134  //returns din
135  unsigned int newCellImpl( const GlobalPoint& f1 ,
136  const GlobalPoint& f2 ,
137  const GlobalPoint& f3 ,
138  const CCGFloat* parm,
139  const DetId& detId ) ;
140 
141  //can only be used by friend classes, to ensure sorting is done at the end
142  void newCellFast( const GlobalPoint& f1 ,
143  const GlobalPoint& f2 ,
144  const GlobalPoint& f3 ,
145  const CCGFloat* parm,
146  const DetId& detId ) ;
147 
148  void increaseReserve(unsigned int extra);
149  void sortValidIds();
150 
151  void fillDetIds() const ;
152 
153  void init() ;
154 
156  int etaRing(HcalSubdetector bc, double abseta) const;
157  int phiBin(HcalSubdetector bc, int etaring, double phi) const;
158  DetId correctId(const DetId& id) const ;
159 
162 
169 
170  HBCellVec m_hbCellVec ;
171  HECellVec m_heCellVec ;
172  HOCellVec m_hoCellVec ;
173  HFCellVec m_hfCellVec ;
174 };
175 
176 
177 #endif
178 
static unsigned int numberOfBarrelAlignments()
Definition: HcalGeometry.h:69
type
Definition: HCALResponse.h:21
static unsigned int alignmentTransformIndexLocal(const DetId &id)
std::shared_ptr< const CaloCellGeometry > getGeometry(const DetId &id) const override
Get the cell geometry of a given detector id. Should return false if not found.
Definition: HcalGeometry.cc:86
std::vector< CCGFloat > DimVec
CaloSubdetectorGeometry::DetIdSet getCells(const GlobalPoint &r, double dR) const override
Get a list of all cells within a dR of the given cell.
edm::AtomicPtrCache< std::vector< DetId > > m_heIds
Definition: HcalGeometry.h:164
const CaloCellGeometry * getGeometryRawPtr(uint32_t index) const override
static unsigned int alignmentEndcapIndexLocal(const DetId &id)
unsigned int getHxSize(const int type) const
static DetId detIdFromOuterAlignmentIndex(unsigned int i)
unsigned int detId2denseId(const DetId &id) const override
return a linear packed id
const std::vector< DetId > & getValidDetIds(DetId::Detector det=DetId::Detector(0), int subdet=0) const override
Get a list of valid detector ids (for the given subdetector)
Definition: HcalGeometry.cc:76
static std::string producerTag()
Definition: HcalGeometry.h:67
unsigned int numberOfShapes() const override
Definition: HcalGeometry.h:45
const HcalTopology & m_topology
Definition: HcalGeometry.h:160
std::vector< unsigned int > IVec
edm::AtomicPtrCache< std::vector< DetId > > m_emptyIds
Definition: HcalGeometry.h:167
std::vector< CCGFloat > TrVec
HcalAlignmentRcd AlignmentRecord
Definition: HcalGeometry.h:35
std::vector< IdealObliquePrism > HECellVec
Definition: HcalGeometry.h:27
std::vector< Pt3D > Pt3DVec
bool m_mergePosition
Definition: HcalGeometry.h:161
const HcalTopology & topology() const
Definition: HcalGeometry.h:117
std::shared_ptr< const CaloCellGeometry > getGeometryBase(const DetId &id) const
Definition: HcalGeometry.h:130
void newCellFast(const GlobalPoint &f1, const GlobalPoint &f2, const GlobalPoint &f3, const CCGFloat *parm, const DetId &detId)
CaloCellGeometry::Pt3DVec Pt3DVec
Definition: HcalGeometry.h:33
virtual std::shared_ptr< const CaloCellGeometry > cellGeomPtr(uint32_t index) const
HBCellVec m_hbCellVec
Definition: HcalGeometry.h:170
PHcalRcd PGeometryRecord
Definition: HcalGeometry.h:37
HOCellVec m_hoCellVec
Definition: HcalGeometry.h:172
unsigned int getNumberOfShapes() const
Definition: HcalTopology.h:164
HFCellVec m_hfCellVec
Definition: HcalGeometry.h:173
unsigned int numberOfParametersPerShape() const override
Definition: HcalGeometry.h:46
std::vector< IdealObliquePrism > HOCellVec
Definition: HcalGeometry.h:28
static unsigned int numberOfOuterAlignments()
Definition: HcalGeometry.h:75
void sortValidIds()
DetId correctId(const DetId &id) const
unsigned int sizeForDenseIndex(const DetId &id) const override
Definition: HcalGeometry.h:122
static DetId detIdFromForwardAlignmentIndex(unsigned int i)
static unsigned int alignmentTransformIndexGlobal(const DetId &id)
static unsigned int alignmentBarrelIndexLocal(const DetId &id)
HcalSubdetector
Definition: HcalAssistant.h:31
def pv(vc)
Definition: MetAnalyzer.py:7
static DetId detIdFromBarrelAlignmentIndex(unsigned int i)
int phiBin(HcalSubdetector bc, int etaring, double phi) const
static DetId detIdFromLocalAlignmentIndex(unsigned int i)
int etaRing(HcalSubdetector bc, double abseta) const
helper methods for getClosestCell
CaloSubdetectorGeometry::IVec m_dins
Definition: HcalGeometry.h:168
HcalGeometry(const HcalTopology &topology)
Definition: HcalGeometry.cc:16
HcalGeometryRecord AlignedRecord
Definition: HcalGeometry.h:36
GlobalPoint getPosition(const DetId &id) const
void localCorners(Pt3DVec &lc, const CCGFloat *pv, unsigned int i, Pt3D &ref)
static unsigned int alignmentOuterIndexLocal(const DetId &id)
std::vector< IdealZPrism > HFCellVec
Definition: HcalGeometry.h:29
~HcalGeometry() override
The HcalGeometry will delete all its cell geometries at destruction time.
Definition: HcalGeometry.cc:21
Definition: DetId.h:18
static unsigned int numberOfEndcapAlignments()
Definition: HcalGeometry.h:71
static std::string dbString()
Definition: HcalGeometry.h:43
Detector
Definition: DetId.h:26
CaloCellGeometry::CCGFloat CCGFloat
Definition: HcalGeometry.h:31
CaloCellGeometry::CornersVec getCorners(const DetId &id) const
HepGeom::Point3D< CCGFloat > Pt3D
std::vector< IdealObliquePrism > HBCellVec
Definition: HcalGeometry.h:26
HECellVec m_heCellVec
Definition: HcalGeometry.h:171
void increaseReserve(unsigned int extra)
void getSummary(CaloSubdetectorGeometry::TrVec &trVector, CaloSubdetectorGeometry::IVec &iVector, CaloSubdetectorGeometry::DimVec &dimVector, CaloSubdetectorGeometry::IVec &dinsVector) const override
edm::AtomicPtrCache< std::vector< DetId > > m_hfIds
Definition: HcalGeometry.h:166
void fillDetIds() const
Definition: HcalGeometry.cc:39
unsigned int indexFor(const DetId &id) const override
Definition: HcalGeometry.h:121
void newCell(const GlobalPoint &f1, const GlobalPoint &f2, const GlobalPoint &f3, const CCGFloat *parm, const DetId &detId) override
static unsigned int numberOfForwardAlignments()
Definition: HcalGeometry.h:73
unsigned int ncells() const override
return a count of valid cells (for dense indexing use)
static unsigned int alignmentForwardIndexLocal(const DetId &id)
GlobalPoint getBackPosition(const DetId &id) const
HcalDetId DetIdType
Definition: HcalGeometry.h:38
static DetId detIdFromEndcapAlignmentIndex(unsigned int i)
static unsigned int alignmentBarEndForIndexLocal(const DetId &id, unsigned int nD)
friend class HcalGeometryPlan1Tester
Definition: HcalGeometry.h:19
edm::AtomicPtrCache< std::vector< DetId > > m_hoIds
Definition: HcalGeometry.h:165
CaloCellGeometry::Pt3D Pt3D
Definition: HcalGeometry.h:32
unsigned int newCellImpl(const GlobalPoint &f1, const GlobalPoint &f2, const GlobalPoint &f3, const CCGFloat *parm, const DetId &detId)
edm::AtomicPtrCache< std::vector< DetId > > m_hbIds
Definition: HcalGeometry.h:163
static unsigned int numberOfAlignments()
Definition: HcalGeometry.h:79
DetId getClosestCell(const GlobalPoint &r) const override