CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | Friends
HcalDDDGeometry Class Reference

#include <HcalDDDGeometry.h>

Inheritance diagram for HcalDDDGeometry:
CaloSubdetectorGeometry

Public Types

typedef std::vector< IdealObliquePrismHBCellVec
 
typedef std::vector< IdealObliquePrismHECellVec
 
typedef std::vector< IdealZPrismHFCellVec
 
typedef std::vector< IdealObliquePrismHOCellVec
 
- Public Types inherited from CaloSubdetectorGeometry
typedef CaloCellGeometry::CCGFloat CCGFloat
 
typedef std::vector< std::shared_ptr< const CaloCellGeometry > > CellSet
 
typedef std::set< DetIdDetIdSet
 
typedef std::vector< CCGFloatDimVec
 
typedef std::vector< unsigned int > IVec
 
typedef CaloCellGeometry::ParMgr ParMgr
 
typedef CaloCellGeometry::ParVec ParVec
 
typedef CaloCellGeometry::ParVecVec ParVecVec
 
typedef std::vector< CCGFloatTrVec
 

Public Member Functions

DetId getClosestCell (const GlobalPoint &r) const override
 
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) More...
 
 HcalDDDGeometry (const HcalTopology &theTopo)
 
int insertCell (std::vector< HcalCellType > const &)
 
void newCell (const GlobalPoint &f1, const GlobalPoint &f2, const GlobalPoint &f3, const CCGFloat *parm, const DetId &detId) override
 
 ~HcalDDDGeometry () override
 The HcalDDDGeometry will delete all its cell geometries at destruction time. More...
 
- Public Member Functions inherited from CaloSubdetectorGeometry
void allocateCorners (CaloCellGeometry::CornersVec::size_type n)
 
void allocatePar (ParVec::size_type n, unsigned int m)
 
 CaloSubdetectorGeometry ()
 
 CaloSubdetectorGeometry (const CaloSubdetectorGeometry &)=delete
 avoid copies More...
 
CaloCellGeometry::CornersMgrcornersMgr ()
 
CCGFloat deltaEta (const DetId &detId) const
 
CCGFloat deltaPhi (const DetId &detId) const
 
virtual void fillDefaultNamedParameters () const
 
virtual DetIdSet getCells (const GlobalPoint &r, double dR) const
 Get a list of all cells within a dR of the given cell. More...
 
virtual CellSet getCellSet (const GlobalPoint &r, double dR) const
 
virtual std::shared_ptr< const CaloCellGeometrygetGeometry (const DetId &id) const
 Get the cell geometry of a given detector id. Should return false if not found. More...
 
virtual void getSummary (TrVec &trVector, IVec &iVector, DimVec &dimVector, IVec &dinsVector) const
 
virtual void initializeParms ()
 
virtual unsigned int numberOfParametersPerShape () const
 
virtual unsigned int numberOfShapes () const
 
virtual unsigned int numberOfTransformParms () const
 
CaloSubdetectorGeometryoperator= (const CaloSubdetectorGeometry &)=delete
 
ParMgrparMgr ()
 
const ParMgrparMgrConst () const
 
ParVecVecparVecVec ()
 
const ParVecVecparVecVec () const
 
virtual bool present (const DetId &id) const
 is this detid present in the geometry? More...
 
virtual ~CaloSubdetectorGeometry ()
 The base class DOES assume that it owns the CaloCellGeometry objects. More...
 

Protected Member Functions

const CaloCellGeometrygetGeometryRawPtr (uint32_t index) const override
 
- Protected Member Functions inherited from CaloSubdetectorGeometry
void addValidID (const DetId &id)
 
virtual std::shared_ptr< const CaloCellGeometrycellGeomPtr (uint32_t index) const
 
virtual unsigned int indexFor (const DetId &id) const
 
virtual unsigned int sizeForDenseIndex (const DetId &id) const
 

Private Member Functions

void fillDetIds () const
 
void increaseReserve (unsigned int extra)
 
void newCellFast (const GlobalPoint &f1, const GlobalPoint &f2, const GlobalPoint &f3, const CCGFloat *parm, const DetId &detId)
 
void newCellImpl (const GlobalPoint &f1, const GlobalPoint &f2, const GlobalPoint &f3, const CCGFloat *parm, const DetId &detId)
 
void sortValidIds ()
 

Private Attributes

double etaMax_
 
std::vector< HcalCellTypehcalCells_
 
std::vector< DetIdm_emptyIds
 
std::atomic< bool > m_filledDetIds
 
HBCellVec m_hbCellVec
 
std::vector< DetIdm_hbIds
 
HECellVec m_heCellVec
 
std::vector< DetIdm_heIds
 
HFCellVec m_hfCellVec
 
std::vector< DetIdm_hfIds
 
HOCellVec m_hoCellVec
 
std::vector< DetIdm_hoIds
 
const HcalTopologytopo_
 

Friends

class HcalDDDGeometryLoader
 

Additional Inherited Members

- Static Protected Member Functions inherited from CaloSubdetectorGeometry
static CCGFloat deltaR (const GlobalPoint &p1, const GlobalPoint &p2)
 
- Protected Attributes inherited from CaloSubdetectorGeometry
ParVecVec m_parVecVec
 
std::vector< DetIdm_validIds
 

Detailed Description

Definition at line 17 of file HcalDDDGeometry.h.

Member Typedef Documentation

Definition at line 23 of file HcalDDDGeometry.h.

Definition at line 24 of file HcalDDDGeometry.h.

Definition at line 26 of file HcalDDDGeometry.h.

Definition at line 25 of file HcalDDDGeometry.h.

Constructor & Destructor Documentation

HcalDDDGeometry::HcalDDDGeometry ( const HcalTopology theTopo)
explicit

Definition at line 10 of file HcalDDDGeometry.cc.

11  : topo_(topo),
12  etaMax_(0),
13  m_hbCellVec ( topo.getHBSize() ) ,
14  m_heCellVec ( topo.getHESize() ) ,
15  m_hoCellVec ( topo.getHOSize() ) ,
16  m_hfCellVec ( topo.getHFSize() ) ,
17  m_filledDetIds(false)
18 {
19 }
std::atomic< bool > m_filledDetIds
const HcalTopology & topo_
HBCellVec m_hbCellVec
HECellVec m_heCellVec
HFCellVec m_hfCellVec
HOCellVec m_hoCellVec
HcalDDDGeometry::~HcalDDDGeometry ( )
override

The HcalDDDGeometry will delete all its cell geometries at destruction time.

Definition at line 21 of file HcalDDDGeometry.cc.

22 {
23 }

Member Function Documentation

void HcalDDDGeometry::fillDetIds ( ) const
private

Definition at line 26 of file HcalDDDGeometry.cc.

References CaloSubdetectorGeometry::getValidDetIds(), HcalBarrel, HcalEndcap, HcalForward, HcalOuter, mps_fire::i, triggerObjects_cff::id, m_emptyIds, m_filledDetIds, m_hbIds, m_heIds, m_hfIds, m_hoIds, and s_fillLock.

Referenced by getValidDetIds().

27 {
28  std::lock_guard<std::mutex> guard(s_fillLock);
29  if (m_filledDetIds) {
30  //another thread already did the work
31  return;
32  }
33  const std::vector<DetId>& baseIds ( CaloSubdetectorGeometry::getValidDetIds() ) ;
34  for( unsigned int i ( 0 ) ; i != baseIds.size() ; ++i )
35  {
36  const DetId id ( baseIds[i] );
37  if( id.subdetId() == HcalBarrel )
38  {
39  m_hbIds.emplace_back( id ) ;
40  }
41  else
42  {
43  if( id.subdetId() == HcalEndcap )
44  {
45  m_heIds.emplace_back( id ) ;
46  }
47  else
48  {
49  if( id.subdetId() == HcalOuter )
50  {
51  m_hoIds.emplace_back( id ) ;
52  }
53  else
54  {
55  if( id.subdetId() == HcalForward )
56  {
57  m_hfIds.emplace_back( id ) ;
58  }
59  }
60  }
61  }
62  }
63  std::sort( m_hbIds.begin(), m_hbIds.end() ) ;
64  std::sort( m_heIds.begin(), m_heIds.end() ) ;
65  std::sort( m_hoIds.begin(), m_hoIds.end() ) ;
66  std::sort( m_hfIds.begin(), m_hfIds.end() ) ;
67 
68  m_emptyIds.resize( 0 ) ;
69  m_filledDetIds = true;
70 }
std::vector< DetId > m_hfIds
std::vector< DetId > m_heIds
std::atomic< bool > m_filledDetIds
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)
static std::mutex s_fillLock
std::vector< DetId > m_hbIds
Definition: DetId.h:18
std::vector< DetId > m_emptyIds
std::vector< DetId > m_hoIds
DetId HcalDDDGeometry::getClosestCell ( const GlobalPoint r) const
overridevirtual

Reimplemented from CaloSubdetectorGeometry.

Definition at line 86 of file HcalDDDGeometry.cc.

References constexpr, PV3DBase< T, PVType, FrameType >::eta(), etaMax_, hcalCells_, HcalForward, LogDebug, M_PI, PV3DBase< T, PVType, FrameType >::mag(), phi, PV3DBase< T, PVType, FrameType >::phi(), TCMET_cfi::radius, z, and PV3DBase< T, PVType, FrameType >::z().

86  {
87  constexpr double twopi = M_PI+M_PI;
88  constexpr double deg = M_PI/180.;
89 
90  // Now find the closest eta_bin, eta value of a bin i is average
91  // of eta[i] and eta[i-1]
92  double abseta = fabs(r.eta());
93  double phi = r.phi();
94  if (phi < 0) phi += twopi;
95  double radius = r.mag();
96  double z = fabs(r.z());
97 
98  LogDebug("HCalGeom") << "HcalDDDGeometry::getClosestCell for eta "
99  << r.eta() << " phi " << phi/deg << " z " << r.z()
100  << " radius " << radius;
101  HcalDetId bestId;
102  if (abseta <= etaMax_) {
103  for (const auto & hcalCell : hcalCells_) {
104  if (abseta >=hcalCell.etaMin() && abseta <=hcalCell.etaMax()) {
105  HcalSubdetector bc = hcalCell.detType();
106  int etaring = hcalCell.etaBin();
107  int phibin = 0;
108  if (hcalCell.unitPhi() == 4) {
109  // rings 40 and 41 are offset wrt the other phi numbering
110  // 1 1 1 2
111  // ------------------------------
112  // 72 36 36 1
113  phibin = static_cast<int>((phi+hcalCell.phiOffset()+
114  0.5*hcalCell.phiBinWidth())/
115  hcalCell.phiBinWidth());
116  if (phibin == 0) phibin = hcalCell.nPhiBins();
117  phibin = phibin*4 - 1;
118  } else {
119  phibin = static_cast<int>((phi+hcalCell.phiOffset())/
120  hcalCell.phiBinWidth()) + 1;
121  // convert to the convention of numbering 1,3,5, in 36 phi bins
122  phibin = (phibin-1)*(hcalCell.unitPhi()) + 1;
123  }
124 
125  int dbin = 1;
126  int etabin = (r.z() > 0) ? etaring : -etaring;
127  if (bc == HcalForward) {
128  bestId = HcalDetId(bc, etabin, phibin, dbin);
129  break;
130  } else {
131  double rz = z;
132  if (hcalCell.depthType()) rz = radius;
133  if (rz < hcalCell.depthMax()) {
134  dbin = hcalCell.depthSegment();
135  bestId = HcalDetId(bc, etabin, phibin, dbin);
136  break;
137  }
138  }
139  }
140  }
141  }
142 
143  LogDebug("HCalGeom") << "HcalDDDGeometry::getClosestCell " << bestId;
144 
145  return bestId;
146 }
#define LogDebug(id)
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
#define constexpr
T mag() const
Definition: PV3DBase.h:67
T z() const
Definition: PV3DBase.h:64
HcalSubdetector
Definition: HcalAssistant.h:31
std::vector< HcalCellType > hcalCells_
#define M_PI
T eta() const
Definition: PV3DBase.h:76
const CaloCellGeometry * HcalDDDGeometry::getGeometryRawPtr ( uint32_t  index) const
overrideprotectedvirtual

Implements CaloSubdetectorGeometry.

Definition at line 222 of file HcalDDDGeometry.cc.

References cropTnPTrees::din, m_hbCellVec, m_heCellVec, m_hfCellVec, m_hoCellVec, and CaloCellGeometry::param().

222  {
223  // Modify the RawPtr class
224  const CaloCellGeometry* cell(nullptr);
225  if (m_hbCellVec.size() > din) {
226  cell = (&m_hbCellVec[din]);
227  } else if (m_hbCellVec.size()+m_heCellVec.size() > din) {
228  const unsigned int ind (din - m_hbCellVec.size() ) ;
229  cell = (&m_heCellVec[ind]);
230  } else if (m_hbCellVec.size()+m_heCellVec.size()+m_hoCellVec.size() > din) {
231  const unsigned int ind (din - m_hbCellVec.size() - m_heCellVec.size());
232  cell = (&m_hoCellVec[ind]);
233  } else if (m_hbCellVec.size()+m_heCellVec.size()+m_hoCellVec.size()+
234  m_hfCellVec.size() > din) {
235  const unsigned int ind (din - m_hbCellVec.size() - m_heCellVec.size() -
236  m_hoCellVec.size() ) ;
237  cell = (&m_hfCellVec[ind]);
238  }
239 
240  return (( nullptr == cell || nullptr == cell->param()) ? nullptr : cell ) ;
241 }
HBCellVec m_hbCellVec
HECellVec m_heCellVec
HFCellVec m_hfCellVec
HOCellVec m_hoCellVec
std::vector< DetId > const & HcalDDDGeometry::getValidDetIds ( DetId::Detector  det = DetId::Detector ( 0 ),
int  subdet = 0 
) const
overridevirtual

Get a list of valid detector ids (for the given subdetector)

Note
The implementation in this class is relevant for SubdetectorGeometries which handle only a single subdetector at a time. It does not look at the det and subdet arguments.

Reimplemented from CaloSubdetectorGeometry.

Definition at line 73 of file HcalDDDGeometry.cc.

References fillDetIds(), CaloSubdetectorGeometry::getValidDetIds(), HcalBarrel, HcalEndcap, HcalForward, HcalOuter, m_emptyIds, m_filledDetIds, m_hbIds, m_heIds, m_hfIds, and m_hoIds.

75 {
76  if( 0 != subdet &&
77  not m_filledDetIds ) fillDetIds() ;
78  return ( 0 == subdet ? CaloSubdetectorGeometry::getValidDetIds() :
79  ( HcalBarrel == subdet ? m_hbIds :
80  ( HcalEndcap == subdet ? m_heIds :
81  ( HcalOuter == subdet ? m_hoIds :
82  ( HcalForward == subdet ? m_hfIds : m_emptyIds ) ) ) ) ) ;
83 }
std::vector< DetId > m_hfIds
std::vector< DetId > m_heIds
std::atomic< bool > m_filledDetIds
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)
std::vector< DetId > m_hbIds
void fillDetIds() const
std::vector< DetId > m_emptyIds
std::vector< DetId > m_hoIds
void HcalDDDGeometry::increaseReserve ( unsigned int  extra)
private

Definition at line 243 of file HcalDDDGeometry.cc.

References CaloSubdetectorGeometry::m_validIds.

Referenced by HcalDDDGeometryLoader::fill().

243  {
244  m_validIds.reserve(m_validIds.size()+extra);
245 }
std::vector< DetId > m_validIds
int HcalDDDGeometry::insertCell ( std::vector< HcalCellType > const &  cells)

Definition at line 149 of file HcalDDDGeometry.cc.

References etaMax_, hcalCells_, LogDebug, and pileupDistInMC::num.

Referenced by HcalDDDGeometryLoader::fill().

149  {
150 
151  hcalCells_.insert(hcalCells_.end(), cells.begin(), cells.end());
152  int num = static_cast<int>(hcalCells_.size());
153  for (const auto & cell : cells) {
154  if (cell.etaMax() > etaMax_ ) etaMax_ = cell.etaMax();
155  }
156 
157  LogDebug("HCalGeom") << "HcalDDDGeometry::insertCell " << cells.size()
158  << " cells inserted == Total " << num
159  << " EtaMax = " << etaMax_;
160  return num;
161 }
#define LogDebug(id)
std::vector< HcalCellType > hcalCells_
void HcalDDDGeometry::newCell ( const GlobalPoint f1,
const GlobalPoint f2,
const GlobalPoint f3,
const CCGFloat parm,
const DetId detId 
)
overridevirtual

Implements CaloSubdetectorGeometry.

Definition at line 201 of file HcalDDDGeometry.cc.

References CaloSubdetectorGeometry::addValidID(), and newCellImpl().

206 {
207  newCellImpl(f1,f2,f3,parm,detId);
208  addValidID( detId );
209 }
void newCellImpl(const GlobalPoint &f1, const GlobalPoint &f2, const GlobalPoint &f3, const CCGFloat *parm, const DetId &detId)
void addValidID(const DetId &id)
void HcalDDDGeometry::newCellFast ( const GlobalPoint f1,
const GlobalPoint f2,
const GlobalPoint f3,
const CCGFloat parm,
const DetId detId 
)
private

Definition at line 212 of file HcalDDDGeometry.cc.

References CaloSubdetectorGeometry::m_validIds, and newCellImpl().

Referenced by HcalDDDGeometryLoader::makeCell().

217 {
218  newCellImpl(f1,f2,f3,parm,detId);
219  m_validIds.emplace_back(detId);
220 }
std::vector< DetId > m_validIds
void newCellImpl(const GlobalPoint &f1, const GlobalPoint &f2, const GlobalPoint &f3, const CCGFloat *parm, const DetId &detId)
void HcalDDDGeometry::newCellImpl ( const GlobalPoint f1,
const GlobalPoint f2,
const GlobalPoint f3,
const CCGFloat parm,
const DetId detId 
)
private

Definition at line 164 of file HcalDDDGeometry.cc.

References CaloSubdetectorGeometry::cornersMgr(), DetId::det(), HcalTopology::detId2denseId(), cropTnPTrees::din, IdealZPrism::EM, IdealZPrism::HADR, DetId::Hcal, HcalBarrel, HcalEndcap, HcalOuter, m_hbCellVec, m_heCellVec, m_hfCellVec, m_hoCellVec, and topo_.

Referenced by newCell(), and newCellFast().

169 {
170 
171  assert( detId.det()==DetId::Hcal );
172 
173  const unsigned int din(topo_.detId2denseId(detId));
174 
175  HcalDetId hId(detId);
176 
177  if( hId.subdet()==HcalBarrel ) {
178  m_hbCellVec[ din ] = IdealObliquePrism( f1, cornersMgr(), parm ) ;
179  } else {
180  if( hId.subdet()==HcalEndcap ) {
181  const unsigned int index ( din - m_hbCellVec.size() ) ;
182  m_heCellVec[ index ] = IdealObliquePrism( f1, cornersMgr(), parm ) ;
183  } else {
184  if( hId.subdet()==HcalOuter ) {
185  const unsigned int index ( din
186  - m_hbCellVec.size()
187  - m_heCellVec.size() ) ;
188  m_hoCellVec[ index ] = IdealObliquePrism( f1, cornersMgr(), parm ) ;
189  } else { // assuming HcalForward here!
190  const unsigned int index ( din
191  - m_hbCellVec.size()
192  - m_heCellVec.size()
193  - m_hoCellVec.size() ) ;
194  m_hfCellVec[ index ] = IdealZPrism( f1, cornersMgr(), parm, hId.depth()==1 ? IdealZPrism::EM : IdealZPrism::HADR ) ;
195  }
196  }
197  }
198 }
unsigned int detId2denseId(const DetId &id) const override
return a linear packed id
const HcalTopology & topo_
HBCellVec m_hbCellVec
HECellVec m_heCellVec
CaloCellGeometry::CornersMgr * cornersMgr()
HFCellVec m_hfCellVec
HOCellVec m_hoCellVec
Detector det() const
get the detector field from this detid
Definition: DetId.h:36
void HcalDDDGeometry::sortValidIds ( )
private

Definition at line 247 of file HcalDDDGeometry.cc.

References CaloSubdetectorGeometry::m_validIds.

Referenced by HcalDDDGeometryLoader::load().

247  {
248  std::sort(m_validIds.begin(),m_validIds.end());
249 }
std::vector< DetId > m_validIds

Friends And Related Function Documentation

friend class HcalDDDGeometryLoader
friend

Definition at line 21 of file HcalDDDGeometry.h.

Member Data Documentation

double HcalDDDGeometry::etaMax_
private

Definition at line 78 of file HcalDDDGeometry.h.

Referenced by getClosestCell(), and insertCell().

std::vector<HcalCellType> HcalDDDGeometry::hcalCells_
private

Definition at line 70 of file HcalDDDGeometry.h.

Referenced by getClosestCell(), and insertCell().

std::vector<DetId> HcalDDDGeometry::m_emptyIds
mutableprivate

Definition at line 75 of file HcalDDDGeometry.h.

Referenced by fillDetIds(), and getValidDetIds().

std::atomic<bool> HcalDDDGeometry::m_filledDetIds
mutableprivate

Definition at line 84 of file HcalDDDGeometry.h.

Referenced by fillDetIds(), and getValidDetIds().

HBCellVec HcalDDDGeometry::m_hbCellVec
private

Definition at line 80 of file HcalDDDGeometry.h.

Referenced by getGeometryRawPtr(), and newCellImpl().

std::vector<DetId> HcalDDDGeometry::m_hbIds
mutableprivate

Definition at line 71 of file HcalDDDGeometry.h.

Referenced by fillDetIds(), and getValidDetIds().

HECellVec HcalDDDGeometry::m_heCellVec
private

Definition at line 81 of file HcalDDDGeometry.h.

Referenced by getGeometryRawPtr(), and newCellImpl().

std::vector<DetId> HcalDDDGeometry::m_heIds
mutableprivate

Definition at line 72 of file HcalDDDGeometry.h.

Referenced by fillDetIds(), and getValidDetIds().

HFCellVec HcalDDDGeometry::m_hfCellVec
private

Definition at line 83 of file HcalDDDGeometry.h.

Referenced by getGeometryRawPtr(), and newCellImpl().

std::vector<DetId> HcalDDDGeometry::m_hfIds
mutableprivate

Definition at line 74 of file HcalDDDGeometry.h.

Referenced by fillDetIds(), and getValidDetIds().

HOCellVec HcalDDDGeometry::m_hoCellVec
private

Definition at line 82 of file HcalDDDGeometry.h.

Referenced by getGeometryRawPtr(), and newCellImpl().

std::vector<DetId> HcalDDDGeometry::m_hoIds
mutableprivate

Definition at line 73 of file HcalDDDGeometry.h.

Referenced by fillDetIds(), and getValidDetIds().

const HcalTopology& HcalDDDGeometry::topo_
private

Definition at line 77 of file HcalDDDGeometry.h.

Referenced by newCellImpl().