56 LogDebug(
"CaloGeometryTools") <<
" No preshower present" << std::endl;
76 if(result.
null())
return result;
79 float deltaeta2 = ip.
eta()-cc.eta();
80 deltaeta2 *= deltaeta2;
81 float deltaphi2 = acos(
cos(ip.
phi()-cc.phi()));
82 deltaphi2 *= deltaphi2;
108 if ( fabs(point.Z()) > 1132. ) {
121 if(myDetId.
depth()==3)
return result;
128 else if(ieta>=18 && ieta<=26)
134 bool layer2=(fabs(point.Z())>azmin);
151 float deltaeta2 = ip.
eta()-cc.eta();
152 deltaeta2 *= deltaeta2;
153 float deltaphi2 = acos(
cos(ip.
phi()-cc.phi()));
154 deltaphi2 *= deltaphi2;
170 sort(vec.begin(),vec.end(),
distance);
201 unsigned size=vec.size();
202 for(
unsigned ic=0; ic<
size; ++ic)
207 unsigned nneighbours=neighbours.size();
210 if(hashedindex>=nbarrel)
212 LogDebug(
"CaloGeometryTools") <<
" Array overflow " << std::endl;
225 for(
unsigned in=0;
in<nneighbours;++
in)
228 if(neighbours[
in]!=vec[ic])
238 DetId central(vec[ic]);
240 for(
unsigned idir=0;idir<8;++idir)
242 DetId testid=central;
243 bool status=
move(testid,orderedDir[idir],
false);
263 for(
unsigned ic=0; ic<
size; ++ic)
267 unsigned nneighbours=neighbours.size();
271 if(hashedindex>=nendcap)
273 LogDebug(
"CaloGeometryTools") <<
" Array overflow " << std::endl;
280 for(
unsigned in=0;
in<nneighbours;++
in)
283 if(neighbours[
in]!=vece[ic])
292 DetId central(vece[ic]);
294 for(
unsigned idir=0;idir<8;++idir)
296 DetId testid=central;
297 bool status=
move(testid,orderedDir[idir],
false);
315 DetId originalcell = cell;
316 if(dir==
NONE || cell==
DetId(0))
return false;
321 static const int calodirections[9]={-1,1,2,0,4,3,7,5,6};
350 std::vector<DetId> neighbours;
356 if ((!neighbours.empty()) && (!neighbours[0].null()))
358 cell = neighbours[0];
442 return (cc1.
im()!=cc2.
im()||cc1.
ism()!=cc2.
ism() );
462 unsigned size=vec.size();
463 for(
unsigned ic=0; ic<
size; ++ic)
483 for(
unsigned ic=0; ic<
size; ++ic)
int hashedIndex() const
get a compact index for arrays
void setCorners(const CaloCellGeometry::CornersVec &vec, const GlobalPoint &pos)
virtual std::vector< DetId > getNeighbours(const DetId &id, const CaloDirection &dir) const
void buildCrystal(const DetId &id, Crystal &) const
DetId getClosestCell(const GlobalPoint &r) const override
const EcalEndcapGeometry * EcalEndcapGeometry_
Geom::Phi< T > phi() const
Global3DPoint GlobalPoint
const EcalPreshowerGeometry * getEcalPreshowerGeometry() const
const CaloSubdetectorTopology * EcalEndcapTopology_
std::vector< NeiVect > endcapNeighbours_
bool borderCrossing(const DetId &, const DetId &) const
int ism() const
get the ECAL/SM id
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)
const CaloSubdetectorGeometry * getEcalGeometry(int subdetn) const
bool neighbourmapcalculated_
U second(std::pair< T, U > const &p)
static const CaloDirection orderedDir[8]
int im() const
get the number of module inside the SM (1-4)
int hashedIndex(int ieta, int iphi)
void fill(const std::string &name, float val1, float val2=1., float val3=1.)
Fill an histogram.
int depth() const
get the tower depth
void buildNeighbourArray()
Cos< T >::type cos(const T &t)
int ieta() const
get the cell ieta
std::vector< BaseCrystal > endcapCrystals_
static Histos * instance()
const EcalBarrelGeometry * EcalBarrelGeometry_
const CaloSubdetectorTopology * getEcalTopology(int subdetn) const
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
std::vector< NeiVect > barrelNeighbours_
int ietaAbs() const
get the absolute value of the cell ieta
virtual DetId getClosestCell(const GlobalPoint &r) const
int iphi() const
get the cell iphi
bool diagonalmove(DetId &cell, const CaloDirection &dir) const
virtual std::vector< DetId > getWindow(const DetId &id, const int &northSouthSize, const int &eastWestSize) const
std::array< DetId, 8 > NeiVect
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.
void getWindow(const DetId &pivot, int s1, int s2, std::vector< DetId > &) const
bool null() const
is this a null id ?
const CaloSubdetectorGeometry * HcalGeometry_
T perp() const
Magnitude of transverse component.
const CaloSubdetectorTopology * EcalBarrelTopology_
std::vector< BaseCrystal > barrelCrystals_
CaloDirection
Codes the local directions in the cell lattice.
DetId getClosestCell(const GlobalPoint &r) const override
DetId getClosestCell(const XYZPoint &point, bool ecal, bool central) const
void initialize(double bField)
bool simplemove(DetId &cell, const CaloDirection &dir) 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
const NeiVect & getNeighbours(const DetId &det) const
bool move(DetId &cell, const CaloDirection &dir, bool fast=true) const