6 #include <CLHEP/Geometry/Point3D.h> 7 #include <CLHEP/Geometry/Plane3D.h> 12 typedef HepGeom::Plane3D<CCGFloat>
Pl3D ;
26 m_cellVec( k_NumberOfCellsForCorners )
47 for(
auto&
v: (*ptr)) {
61 assert( gid.
isEE() ) ;
70 return EEDetId( 20 + 50*( iLoc%2 ), 50, 2*( iLoc/2 ) - 1 ) ;
93 const CCGFloat z ( cell->getPosition().z() ) ;
105 const unsigned int ix ( myId.
ix() ) ;
106 const unsigned int iy ( myId.
iy() ) ;
125 if(
nullptr != cell )
184 const int i ( 1 +
int( ( x - xlo )/
m_wref ) ) ;
187 (
m_nref < (
unsigned int) i ?
m_nref : (
unsigned int) i ) ) ;
196 const int i ( 1 +
int( ( y - ylo )/
m_wref ) ) ;
199 (
m_nref < (
unsigned int) i ?
m_nref : (
unsigned int) i ) ) ;
208 const unsigned int ix (
xindex( x*fac, z ) ) ;
209 const unsigned int iy (
yindex( y*fac, z ) ) ;
210 const unsigned int iz ( z>0 ? 1 : -1 ) ;
218 for(
unsigned int i ( 1 ) ;
i != 6 ; ++
i )
220 for(
unsigned int k ( 0 ) ;
k != 8 ; ++
k )
222 const int jx ( 0 ==
k || 4 ==
k || 5 ==
k ? +
i :
223 ( 1 ==
k || 5 <
k ? -
i : 0 ) ) ;
224 const int jy ( 2 ==
k || 4 ==
k || 6 ==
k ? +
i :
225 ( 3 ==
k || 5 ==
k || 7 ==
k ? -
i : 0 ) ) ;
228 return EEDetId( ix + jx, iy + jy, iz ) ;
303 for(
unsigned ic=0;ic<4;++ic)
305 corners[ic]=
getGeometry(mycellID)->getCorners()[(unsigned)((zsign*ic+offset)%4)];
306 corners[4+ic]=
getGeometry(mycellID)->getCorners()[(unsigned)(4+(zsign*ic+offset)%4)];
310 for (
short i=0;
i < 4 ; ++
i)
312 A =
Pt3D(corners[
i%4].
x(),corners[
i%4].
y(),corners[
i%4].
z());
313 B =
Pt3D(corners[(
i+1)%4].
x(),corners[(
i+1)%4].
y(),corners[(
i+1)%4].
z());
314 C =
Pt3D(corners[4+(
i+1)%4].
x(),corners[4+(
i+1)%4].
y(),corners[4+(
i+1)%4].
z());
318 if (corners[0].
z()<0.) distance=-
distance;
324 const bool yout ( 0 > SS[0]*SS[2] ) ;
325 const bool xout ( 0 > SS[1]*SS[3] ) ;
329 const int ydel ( !yout ? 0 : ( 0 < SS[0] ? -1 : 1 ) ) ;
330 const int xdel ( !xout ? 0 : ( 0 < SS[1] ? -1 : 1 ) ) ;
331 const unsigned int ix ( mycellID.
ix() + xdel ) ;
332 const unsigned int iy ( mycellID.
iy() + ydel ) ;
333 const unsigned int iz ( mycellID.
zside() ) ;
335 mycellID =
EEDetId( ix, iy, iz ) ;
363 const float dR2 ( dR*dR ) ;
364 const float reta ( r.
eta() ) ;
365 const float rphi ( r.
phi() ) ;
366 const float rx ( r.
x() ) ;
367 const float ry ( r.
y() ) ;
368 const float rz ( r.
z() ) ;
370 const float xx (
rx*fac ) ;
371 const float yy (
ry*fac ) ;
372 const float zz ( rz*fac ) ;
374 const float xang ( std::atan( xx/zz ) ) ;
375 const float lowX ( zz>0 ? zz*
std::tan( xang - dR ) : zz*
std::tan( xang + dR ) ) ;
376 const float highX ( zz>0 ? zz*
std::tan( xang + dR ) : zz*
std::tan( xang - dR ) ) ;
377 const float yang ( std::atan( yy/zz ) ) ;
378 const float lowY ( zz>0 ? zz*
std::tan( yang - dR ) : zz*
std::tan( yang + dR ) ) ;
379 const float highY ( zz>0 ? zz*
std::tan( yang + dR ) : zz*
std::tan( yang - dR ) ) ;
381 const float refxlo ( 0 > rz ?
m_xlo[0] :
m_xlo[1] ) ;
382 const float refxhi ( 0 > rz ?
m_xhi[0] :
m_xhi[1] ) ;
383 const float refylo ( 0 > rz ?
m_ylo[0] :
m_ylo[1] ) ;
384 const float refyhi ( 0 > rz ?
m_yhi[0] :
m_yhi[1] ) ;
391 const int ix_ctr (
xindex( xx, rz ) ) ;
392 const int iy_ctr (
yindex( yy, rz ) ) ;
393 const int iz ( rz>0 ? 1 : -1 ) ;
395 const int ix_hi ( ix_ctr +
int( ( highX - xx )/
m_wref ) + 2 ) ;
396 const int ix_lo ( ix_ctr -
int( ( xx - lowX )/
m_wref ) - 2 ) ;
398 const int iy_hi ( iy_ctr +
int( ( highY - yy )/
m_wref ) + 2 ) ;
399 const int iy_lo ( iy_ctr -
int( ( yy - lowY )/
m_wref ) - 2 ) ;
401 for(
int kx ( ix_lo ) ; kx <= ix_hi ; ++kx )
406 for(
int ky ( iy_lo ) ; ky <= iy_hi ; ++ky )
435 if(0 !=
id.rawId() &&
nullptr !=
getGeometry(
id)) {
437 const int iPhi(1+
int(phi)%360) ;
438 const int iz(
id.
zside()) ;
439 if (!
m_borderMgr.load(std::memory_order_acquire)) {
442 bool exchanged =
m_borderMgr.compare_exchange_strong(expect, ptrMgr, std::memory_order_acq_rel);
443 if(!exchanged)
delete ptrMgr;
447 ptrVec->reserve(720);
448 for(
unsigned int i ( 0 ) ;
i != 720 ; ++
i )
450 const int kz ( 360>
i ? -1 : 1 ) ;
451 const int iEta ( kz*85 ) ;
452 const int iEtam1 ( kz*84 ) ;
453 const int iEtam2 ( kz*83 ) ;
454 const int jPhi (
i%360 + 1 ) ;
456 olist[0]=
EBDetId( iEta , jPhi ) ;
459 olist[3]=
EBDetId( iEtam1, jPhi ) ;
464 olist[8]=
EBDetId( iEtam2, jPhi ) ;
465 ptrVec->emplace_back( &olist ) ;
467 bool exchanged =
m_borderPtrVec.compare_exchange_strong(expect, ptrVec, std::memory_order_acq_rel);
468 if(!exchanged)
delete ptrVec;
470 ptr = (*ptrVec)[ ( iPhi - 1 ) + ( 0>iz ? 0 : 360 ) ] ;
492 const unsigned int cellIndex (
EEDetId( detId ).denseIndex() ) ;
502 if(!
m_check.load(std::memory_order_acquire))
505 for(
unsigned int i ( 0 ) ;
i !=
m_cellVec.size() ; ++
i )
508 if(
nullptr != cell )
510 sum += fabs( cell->getPosition().z() ) ;
514 m_check.store(
true, std::memory_order_release);
523 nullptr == cell->
param() ?
nullptr : cell);
static EEDetId detIdFromDenseIndex(uint32_t din)
static void localCorners(Pt3DVec &vec, const CCGFloat *pv, Pt3D &ref)
double degrees(double radiants)
def degrees
CaloCellGeometry::Pt3DVec Pt3DVec
std::set< DetId > DetIdSet
bool present(const DetId &id) const override
is this detid present in the geometry?
~EcalEndcapGeometry() override
static void localCorners(Pt3DVec &lc, const CCGFloat *pv, unsigned int i, Pt3D &ref)
CaloCellGeometry::Pt3D Pt3D
Geom::Phi< T > phi() const
CaloSubdetectorGeometry::DetIdSet getCells(const GlobalPoint &r, double dR) const override
Get a list of all cells within a dR of the given cell.
std::vector< Pt3D > Pt3DVec
static unsigned int alignmentTransformIndexGlobal(const DetId &id)
CaloCellGeometry::CCGFloat CCGFloat
CCGFloat avgAbsZFrontFaceCenter() const
std::atomic< EZMgrFL< EBDetId > * > m_borderMgr
static unsigned int alignmentTransformIndexLocal(const DetId &id)
CaloCellGeometry::Pt3D Pt3D
const CaloCellGeometry * getGeometryRawPtr(uint32_t index) const override
HepGeom::Plane3D< CCGFloat > Pl3D
unsigned int yindex(CCGFloat y, CCGFloat z) const
CaloCellGeometry::CCGFloat CCGFloat
virtual std::shared_ptr< const CaloCellGeometry > cellGeomPtr(uint32_t index) const
virtual DetIdSet getCells(const GlobalPoint &r, double dR) const
Get a list of all cells within a dR of the given cell.
const CCGFloat * param() const
std::atomic< VecOrdListEBDetIdPtr * > m_borderPtrVec
CaloCellGeometry::Pt3DVec Pt3DVec
Tan< T >::type tan(const T &t)
Abs< T >::type abs(const T &t)
std::vector< OrderedListOfEBDetId * > VecOrdListEBDetIdPtr
const OrderedListOfEBDetId * getClosestBarrelCells(EEDetId id) const
static const std::string B
HepGeom::Plane3D< CCGFloat > Pl3D
unsigned int xindex(CCGFloat x, CCGFloat z) const
void addValidID(const DetId &id)
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.
static bool validDetId(int crystal_ix, int crystal_iy, int iz)
CaloCellGeometry::CornersMgr * cornersMgr()
CaloCellGeometry::CCGFloat CCGFloat
HepGeom::Point3D< CCGFloat > Pt3D
void newCell(const GlobalPoint &f1, const GlobalPoint &f2, const GlobalPoint &f3, const CCGFloat *parm, const DetId &detId) override
T1 deltaR2(T1 eta1, T2 phi1, T3 eta2, T4 phi2)
std::atomic< bool > m_check
A base class to handle the particular shape of Ecal Xtals. Taken from ORCA Calorimetry Code...
EZArrayFL< EBDetId > OrderedListOfEBDetId
static DetId detIdFromLocalAlignmentIndex(unsigned int iLoc)
DetId getClosestCell(const GlobalPoint &r) const override
EEDetId gId(float x, float y, float z) const
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
void initializeParms() override