CMS 3D CMS Logo

EcalPreshowerGeometry.cc
Go to the documentation of this file.
6 #include <iostream>
7 
11 typedef HepGeom::Plane3D<CCGFloat> Pl3D;
12 
14  : m_xWidWaf(6.3),
15  m_xInterLadGap(0.05), // additional gap between wafers in adj ladders
16  m_xIntraLadGap(0.04), // gap between wafers in same ladder
17  m_yWidAct(6.1),
18  m_yCtrOff(0.05), // gap at center
19  m_cellVec(k_NumberOfCellsForCorners) {
20  m_zplane[0] = 0.;
21  m_zplane[1] = 0.;
22  m_zplane[2] = 0.;
23  m_zplane[3] = 0.;
24 }
25 
27 
29  const CaloGenericDetId gid(id);
30 
31  assert(gid.isES());
32 
33  // plane 2 is split into 2 dees along x=0 for both signs of z
34 
35  // plane 1 at zsign=-1 is split into 2 dees between six=19 and six=20 for siy<=20,
36  // and six=21 and 22 for siy>=21
37 
38  // plane 1 at zsign=+1 is split into 2 dees between six=20 and six=21 for siy<=20,
39  // and six=19 and 20 for siy>=21
40 
41  // Desired numbering
42  // LEFT RIGHT (as one faces the Dee from the IP)
43  // ES- pl=2 0 1
44  // pl=1 2 3 the reversal of pl=2 and pl=1 is intentional here (CM Kuo)
45  // ES+ pl=1 4 5
46  // pl=2 6 7
47 
48  const ESDetId esid(id);
49  const int jx(esid.six() - 1);
50  const int jy(esid.siy() - 1);
51  const int jz(esid.zside() + 1);
52  const int pl(esid.plane() - 1);
53  const bool second(1 == pl);
54  const bool top(19 < jy);
55  const bool negz(0 == jz);
56  const int lrl(19 > jx ? 0 : 1);
57  const int lrr(21 > jx ? 0 : 1);
58 
59  return (second ? jx / 20 + 3 * jz : // 2nd plane split along middle
60  (negz && !top ? lrl + 2 : // 1st plane at neg z and bottom half split at six=19&20
61  (negz && top ? lrr + 2 : // 1st plane at neg z and top half split at six=21&22
62  (!negz && !top ? lrr + 4 : lrl + 4)))); // opposite at positive z
63 }
64 
66  return ESDetId(1, 10 + 20 * (iLoc % 2), 10, 2 > iLoc || 5 < iLoc ? 2 : 1, 2 * (iLoc / 4) - 1);
67 }
68 
70  return (unsigned int)DetId::Ecal - 1;
71 }
72 
74  unsigned int n1minus(0);
75  unsigned int n2minus(0);
76  unsigned int n1plus(0);
77  unsigned int n2plus(0);
78  CCGFloat z1minus(0);
79  CCGFloat z2minus(0);
80  CCGFloat z1plus(0);
81  CCGFloat z2plus(0);
82  const std::vector<DetId>& esDetIds(getValidDetIds());
83 
84  for (unsigned int i(0); i != esDetIds.size(); ++i) {
85  const ESDetId esid(esDetIds[i]);
86  auto cell = getGeometry(esid);
87  if (nullptr != cell) {
88  const CCGFloat zz(cell->getPosition().z());
89  if (1 == esid.plane()) {
90  if (0 > esid.zside()) {
91  z1minus += zz;
92  ++n1minus;
93  } else {
94  z1plus += zz;
95  ++n1plus;
96  }
97  }
98  if (2 == esid.plane()) {
99  if (0 > esid.zside()) {
100  z2minus += zz;
101  ++n2minus;
102  } else {
103  z2plus += zz;
104  ++n2plus;
105  }
106  }
107  }
108  }
109  assert(0 != n1minus && 0 != n2minus && 0 != n1plus && 0 != n2plus);
110  z1minus /= (1. * n1minus);
111  z2minus /= (1. * n2minus);
112  z1plus /= (1. * n1plus);
113  z2plus /= (1. * n2plus);
114  assert(0 != z1minus && 0 != z2minus && 0 != z1plus && 0 != z2plus);
115  setzPlanes(z1minus, z2minus, z1plus, z2plus);
116 }
117 
118 void EcalPreshowerGeometry::setzPlanes(CCGFloat z1minus, CCGFloat z2minus, CCGFloat z1plus, CCGFloat z2plus) {
119  assert(0 > z1minus && 0 > z2minus && 0 < z1plus && 0 < z2plus);
120 
121  m_zplane[0] = z1minus;
122  m_zplane[1] = z2minus;
123  m_zplane[2] = z1plus;
124  m_zplane[3] = z2plus;
125 }
126 
127 // Get closest cell, etc...
129 
131  const CCGFloat x(point.x());
132  const CCGFloat y(point.y());
133  const CCGFloat z(point.z());
134 
135  if (0 == z || 1 > plane || 2 < plane)
136  return DetId(0);
137 
138  const unsigned int iz((0 > z ? 0 : 2) + plane - 1);
139 
140  const CCGFloat ze(m_zplane[iz]);
141  const CCGFloat xe(x * ze / z);
142  const CCGFloat ye(y * ze / z);
143 
144  const CCGFloat x0(1 == plane ? xe : ye);
145  const CCGFloat y0(1 == plane ? ye : xe);
146 
147  static const CCGFloat xWid(m_xWidWaf + m_xIntraLadGap + m_xInterLadGap);
148 
149  const int row(1 + int(y0 + 20. * m_yWidAct - m_yCtrOff) / m_yWidAct);
150  const int col(1 + int((x0 + 20. * xWid) / xWid));
151 
152  CCGFloat closest(1e9);
153 
154  DetId detId(0);
155 
156  const int jz(0 > ze ? -1 : 1);
157 
158  // std::cout<<"** p="<<point<<", ("<<xe<<", "<<ye<<", "<<ze<<"), row="<<row<<", col="<<col<<std::endl;
159 
160  for (int ix(-1); ix != 2; ++ix) // search within +-1 in row and col
161  {
162  for (int iy(-1); iy != 2; ++iy) {
163  for (int jstrip(ESDetId::ISTRIP_MIN); jstrip <= ESDetId::ISTRIP_MAX; ++jstrip) {
164  const int jx(1 == plane ? col + ix : row + iy);
165  const int jy(1 == plane ? row + iy : col + ix);
166  if (ESDetId::validDetId(jstrip, jx, jy, plane, jz)) {
167  const ESDetId esId(jstrip, jx, jy, plane, jz);
168  auto cell = getGeometry(esId);
169  if (nullptr != cell) {
170  const GlobalPoint& p(cell->getPosition());
171  const CCGFloat dist2((p.x() - xe) * (p.x() - xe) + (p.y() - ye) * (p.y() - ye));
172  if (dist2 < closest && present(esId)) {
173  closest = dist2;
174  detId = esId;
175  }
176  }
177  }
178  }
179  }
180  }
181  return detId;
182 }
183 
184 void EcalPreshowerGeometry::localCorners(Pt3DVec& lc, const CCGFloat* pv, unsigned int /*i*/, Pt3D& ref) {
186 }
187 
189  const GlobalPoint& /*f2*/,
190  const GlobalPoint& /*f3*/,
191  const CCGFloat* parm,
192  const DetId& detId) {
193  const unsigned int cellIndex(ESDetId(detId).denseIndex());
194  m_cellVec[cellIndex] = PreshowerStrip(f1, cornersMgr(), parm);
195  addValidID(detId);
196 }
197 
199  // Modify the RawPtr class
200  const CaloCellGeometry* cell(&m_cellVec[index]);
201  return (m_cellVec.size() < index || nullptr == cell->param() ? nullptr : cell);
202 }
CaloCellGeometry::Pt3DVec
std::vector< Pt3D > Pt3DVec
Definition: CaloCellGeometry.h:55
CaloGenericDetId.h
EcalPreshowerGeometry::getGeometryRawPtr
const CaloCellGeometry * getGeometryRawPtr(uint32_t index) const override
Definition: EcalPreshowerGeometry.cc:198
DDAxes::y
mps_fire.i
i
Definition: mps_fire.py:355
EcalPreshowerGeometry::m_xWidWaf
const CCGFloat m_xWidWaf
Definition: EcalPreshowerGeometry.h:94
geometryCSVtoXML.zz
zz
Definition: geometryCSVtoXML.py:19
CaloCellGeometry::CCGFloat
float CCGFloat
Definition: CaloCellGeometry.h:52
ESDetId::ISTRIP_MIN
static const int ISTRIP_MIN
Definition: ESDetId.h:68
CaloGenericDetId
Definition: CaloGenericDetId.h:12
EcalPreshowerGeometry::~EcalPreshowerGeometry
~EcalPreshowerGeometry() override
The EcalPreshowerGeometry will delete all its cell geometries at destruction time.
Definition: EcalPreshowerGeometry.cc:26
EcalPreshowerGeometry::getClosestCell
DetId getClosestCell(const GlobalPoint &r) const override
Definition: EcalPreshowerGeometry.cc:128
EcalPreshowerGeometry::setzPlanes
void setzPlanes(CCGFloat z1minus, CCGFloat z2minus, CCGFloat z1plus, CCGFloat z2plus)
Definition: EcalPreshowerGeometry.cc:118
CaloGenericDetId::isES
bool isES() const
Definition: CaloGenericDetId.h:31
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
EcalPreshowerGeometry::Pt3DVec
CaloCellGeometry::Pt3DVec Pt3DVec
Definition: EcalPreshowerGeometry.h:21
EcalPreshowerGeometry::detIdFromLocalAlignmentIndex
static DetId detIdFromLocalAlignmentIndex(unsigned int iLoc)
Definition: EcalPreshowerGeometry.cc:65
cuy.col
col
Definition: cuy.py:1010
cms::cuda::assert
assert(be >=bs)
edm::second
U second(std::pair< T, U > const &p)
Definition: ParameterSet.cc:215
EcalPreshowerGeometry::m_xIntraLadGap
const CCGFloat m_xIntraLadGap
Definition: EcalPreshowerGeometry.h:96
ESDetId
Definition: ESDetId.h:15
DDAxes::x
ESDetId.h
CCGFloat
CaloCellGeometry::CCGFloat CCGFloat
Definition: EcalPreshowerGeometry.cc:8
Pt3D
CaloCellGeometry::Pt3D Pt3D
Definition: EcalPreshowerGeometry.cc:9
EcalPreshowerGeometry::m_xInterLadGap
const CCGFloat m_xInterLadGap
Definition: EcalPreshowerGeometry.h:95
DetId
Definition: DetId.h:17
CaloSubdetectorGeometry::CCGFloat
CaloCellGeometry::CCGFloat CCGFloat
Definition: CaloSubdetectorGeometry.h:25
EcalPreshowerGeometry::Pt3D
CaloCellGeometry::Pt3D Pt3D
Definition: EcalPreshowerGeometry.h:20
DDAxes::z
EcalPreshowerGeometry.h
EcalPreshowerGeometry::newCell
void newCell(const GlobalPoint &f1, const GlobalPoint &f2, const GlobalPoint &f3, const CCGFloat *parm, const DetId &detId) override
Definition: EcalPreshowerGeometry.cc:188
EcalPreshowerGeometry::localCorners
static void localCorners(Pt3DVec &lc, const CCGFloat *pv, unsigned int i, Pt3D &ref)
Definition: EcalPreshowerGeometry.cc:184
Point3DBase< float, GlobalTag >
EcalPreshowerGeometry::m_yWidAct
const CCGFloat m_yWidAct
Definition: EcalPreshowerGeometry.h:98
EcalPreshowerGeometry::m_cellVec
CellVec m_cellVec
Definition: EcalPreshowerGeometry.h:103
CaloCellGeometry::Pt3D
HepGeom::Point3D< CCGFloat > Pt3D
Definition: CaloCellGeometry.h:54
CaloSubdetectorGeometry::getValidDetIds
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)
Definition: CaloSubdetectorGeometry.cc:32
Pt3DVec
CaloCellGeometry::Pt3DVec Pt3DVec
Definition: EcalPreshowerGeometry.cc:10
Pl3D
HepGeom::Plane3D< CCGFloat > Pl3D
Definition: EcalPreshowerGeometry.cc:11
EcalPreshowerGeometry::getClosestCellInPlane
virtual DetId getClosestCellInPlane(const GlobalPoint &r, int plane) const
Definition: EcalPreshowerGeometry.cc:130
PreshowerStrip.h
ESDetId::ISTRIP_MAX
static const int ISTRIP_MAX
Definition: ESDetId.h:69
CaloCellGeometry
Definition: CaloCellGeometry.h:50
CaloCellGeometry::param
const CCGFloat * param() const
Definition: CaloCellGeometry.h:99
EcalPreshowerGeometry::m_zplane
CCGFloat m_zplane[4]
Definition: EcalPreshowerGeometry.h:101
EcalPreshowerGeometry::alignmentTransformIndexGlobal
static unsigned int alignmentTransformIndexGlobal(const DetId &id)
Definition: EcalPreshowerGeometry.cc:69
MetAnalyzer.pv
def pv(vc)
Definition: MetAnalyzer.py:7
CaloSubdetectorGeometry::addValidID
void addValidID(const DetId &id)
Definition: CaloSubdetectorGeometry.cc:27
CaloSubdetectorGeometry::getGeometry
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.
Definition: CaloSubdetectorGeometry.cc:36
DetId::Ecal
Definition: DetId.h:27
ESDetId::plane
int plane() const
Definition: ESDetId.h:41
CaloSubdetectorGeometry::cornersMgr
CaloCellGeometry::CornersMgr * cornersMgr()
Definition: CaloSubdetectorGeometry.h:82
EcalPreshowerGeometry::EcalPreshowerGeometry
EcalPreshowerGeometry()
Definition: EcalPreshowerGeometry.cc:13
ESDetId::validDetId
static bool validDetId(int istrip, int ixs, int iys, int iplane, int iz)
check if a valid index combination
Definition: ESDetId.cc:15
EcalPreshowerGeometry::initializeParms
void initializeParms() override
Definition: EcalPreshowerGeometry.cc:73
Exception.h
EcalPreshowerGeometry::present
bool present(const DetId &id) const override
is this detid present in the geometry?
Definition: EcalPreshowerGeometry.h:81
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
EcalPreshowerGeometry::alignmentTransformIndexLocal
static unsigned int alignmentTransformIndexLocal(const DetId &id)
Definition: EcalPreshowerGeometry.cc:28
PreshowerStrip
A base class to handle the shape of preshower strips.
Definition: PreshowerStrip.h:21
EcalPreshowerGeometry::m_yCtrOff
const CCGFloat m_yCtrOff
Definition: EcalPreshowerGeometry.h:99
point
*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
Definition: invegas.h:5
DeadROC_duringRun.f1
f1
Definition: DeadROC_duringRun.py:219
PreshowerStrip::localCorners
static void localCorners(Pt3DVec &vec, const CCGFloat *pv, Pt3D &ref)
Definition: PreshowerStrip.cc:66
ESDetId::zside
int zside() const
Definition: ESDetId.h:39