30 std::cout <<
"FlexiGeometryLoader initialize with ncells "
31 << fTopology.
ncells() <<
" and shapes "
52 std::vector<HcalFlexiHardcodeGeometryLoader::HBHOCellParameters>
result;
53 std::vector<std::pair<double,double> > gconsHB = hcons.
getConstHBHE(0);
54 std::vector<double> layerDepths;
55 layerDepths.push_back(gconsHB[0].
first-gconsHB[0].
second);
56 for (
int i=0;
i<17; ++
i)
57 layerDepths.push_back(gconsHB[
i].first+gconsHB[
i].second);
58 std::vector<HcalDDDRecConstants::HcalEtaBin> etabins = hcons.
getEtaBins(0);
61 std::cout <<
"FlexiGeometryLoader called for " << etabins.size()
62 <<
" Eta Bins" << std::endl;
63 for (
unsigned int k=0;
k<gconsHB.size(); ++
k) {
64 std::cout <<
"gconsHB[" <<
k <<
"] = " << gconsHB[
k].first <<
":"
65 << gconsHB[
k].second <<
" LayerDepth[" <<
k <<
"] = "
66 << layerDepths[
k] << std::endl;
69 for (
unsigned int i=0; i<etabins.size(); ++
i) {
70 int iring = etabins[
i].ieta;
71 int nphi = etabins[
i].nPhi;
72 int depth = etabins[
i].depthStart;
73 for (
unsigned int k=0;
k<etabins[
i].layer.size(); ++
k) {
74 double rmin = layerDepths[etabins[
i].layer[
k].first-1];
75 double rmax = layerDepths[etabins[
i].layer[
k].second];
77 std::cout <<
"HBRing " << iring <<
" eta " << etabins[
i].etaMin <<
":"
78 << etabins[
i].etaMax <<
" depth " << depth <<
" R " << rmin
79 <<
":" << rmax <<
" Phi 1:" << nphi <<
":" << etabins[
i].phi0
80 <<
":" << etabins[
i].dphi <<
" layer[" <<
k <<
"]: "
81 << etabins[
i].layer[
k].first-1 <<
":"
82 << etabins[
i].layer[
k].second << std::endl;
84 result.push_back (
HcalFlexiHardcodeGeometryLoader::HBHOCellParameters(iring, depth, 1, nphi, 1, etabins[i].phi0, etabins[i].dphi, rmin, rmax, etabins[i].
etaMin, etabins[i].
etaMax));
94 const double HORMIN0 = 390.0;
95 const double HORMIN1 = 412.6;
96 const double HORMAX = 413.6;
97 const int nCells = 15;
98 const double etamin[nCells] = {0.000,0.087,0.174, 0.261, 0.3395,0.435,0.522,
99 0.609,0.696,0.783, 0.873, 0.957, 1.044,1.131,
101 const double etamax[nCells] = {0.087,0.174,0.261, 0.3075,0.435, 0.522,0.609,
102 0.696,0.783,0.8494,0.957, 1.044, 1.131,1.218,
104 std::vector<HcalFlexiHardcodeGeometryLoader::HBHOCellParameters>
result;
105 result.reserve (nCells);
107 for (
int i = 0;
i < nCells; ++
i) {
108 double rmin = ((
i < 4) ? HORMIN0 : HORMIN1);
110 result.push_back (
HcalFlexiHardcodeGeometryLoader::HBHOCellParameters(
i+1, 4, 1, 72, 1, 0, dphi, rmin, HORMAX, etamin[
i], etamax[i]));
121 for (
size_t iCell = 0; iCell < fCells.size(); ++iCell) {
124 for (
int iside = -1; iside <= 1; iside += 2) {
128 float x = param.
rMin*
cos (phiCenter);
129 float y = param.
rMin*
sin (phiCenter);
130 float z = iside * param.
rMin * sinh(etaCenter);
133 std::vector<CCGFloat> cellParams;
134 cellParams.reserve (5);
135 cellParams.push_back (0.5 * (param.
etaMax - param.
etaMin));
136 cellParams.push_back (0.5 * param.
dphi);
137 cellParams.push_back (0.5 * (param.
rMax - param.
rMin) * cosh (etaCenter));
138 cellParams.push_back ( fabs( refPoint.
eta() ) ) ;
139 cellParams.push_back ( fabs( refPoint.
z() ) ) ;
141 std::cout <<
"HcalFlexiHardcodeGeometryLoader::fillHBHO-> " << hid <<
" " << hid.
rawId() <<
" " << std::hex << hid.
rawId() <<
std::dec <<
" " << hid.
ieta() <<
'/' << hid.
iphi() <<
'/' << hid.
depth() << refPoint <<
'/' << cellParams [0] <<
'/' << cellParams [1] <<
'/' << cellParams [2] << std::endl;
143 fGeometry->
newCell(refPoint, refPoint, refPoint,
157 std::vector<HcalFlexiHardcodeGeometryLoader::HECellParameters>
result;
158 std::vector<std::pair<double,double> > gconsHE = hcons.
getConstHBHE(1);
159 std::vector<double> layerDepths;
161 std::cout <<
"HcalFlexiHardcodeGeometryLoader:HE with " << gconsHE.size() <<
" cells" << std::endl;
163 if (gconsHE.size() > 0) {
164 unsigned int istart = 1;
165 layerDepths.push_back(gconsHE[istart].
first-gconsHE[istart].
second);
166 for (
unsigned int i=istart;
i<gconsHE.size(); ++
i)
167 layerDepths.push_back(gconsHE[
i].first+gconsHE[
i].second);
168 std::vector<HcalDDDRecConstants::HcalEtaBin> etabins = hcons.
getEtaBins(1);
171 std::cout <<
"FlexiGeometryLoader called for HE with " << etabins.size()
172 <<
" Eta Bins and " << layerDepths.size() <<
" depths"
174 for (
unsigned int i=0; i<layerDepths.size(); ++
i)
175 std::cout <<
" Depth[" << i <<
"] = " << layerDepths[i];
178 for (
unsigned int i=0; i<etabins.size(); ++
i) {
179 int iring = etabins[
i].ieta;
180 int nphi = etabins[
i].nPhi;
181 int depth = etabins[
i].depthStart;
182 double dphi = etabins[
i].dphi;
183 int units = int(((dphi*72)/(2*
M_PI))+0.5);
184 int fioff = (units == 4) ? 3 : 1;
186 for (
unsigned int k=0;
k<etabins[
i].layer.size(); ++
k) {
187 int layf = etabins[
i].layer[
k].first-1;
188 int layl = etabins[
i].layer[
k].second-1;
189 double zmin = layerDepths[layf];
190 double zmax = layerDepths[layl];
192 for (
int k2=layf;
k2<=layl; ++
k2) {
193 if (layerDepths[
k2] > 10) {
194 zmin = layerDepths[
k2];
199 if (zmin >= zmax) zmax = zmin+10.;
201 std::cout <<
"HERing " << iring <<
" eta " << etabins[
i].etaMin <<
":"
202 << etabins[
i].etaMax <<
" depth " << depth <<
" Z " << zmin
203 <<
":" << zmax <<
" Phi 1:" << nphi <<
":" << etabins[
i].phi0
204 <<
":" << dphi <<
":" << units <<
":" << fioff <<
" layer["
205 <<
k <<
"]: " << etabins[
i].layer[
k].first-1 <<
":"
206 << etabins[
i].layer[
k].second-1 << std::endl;
208 result.push_back(
HcalFlexiHardcodeGeometryLoader::HECellParameters(iring, depth, fioff, nphi, units, etabins[i].phi0, dphi, zmin, zmax, etabins[i].
etaMin, etabins[i].
etaMax));
220 const double HEZMIN_H2 = 400.715;
221 const double HEZMID_H2 = 436.285;
222 const double HEZMAX_H2 = 541.885;
224 const double dphi2 = 2*dphi1;
228 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 16, 3, 1, 8, 1, 0, dphi1, 409.885, 462.685, 1.305, 1.373),
229 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 17, 1, 1, 8, 1, 0, dphi1, HEZMIN_H2, 427.485, 1.373, 1.444),
230 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 17, 2, 1, 8, 1, 0, dphi1, 427.485, 506.685, 1.373, 1.444),
231 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 18, 1, 1, 8, 1, 0, dphi1, HEZMIN_H2, HEZMID_H2, 1.444, 1.521),
232 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 18, 2, 1, 8, 1, 0, dphi1, HEZMID_H2, 524.285, 1.444, 1.521),
233 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 19, 1, 1, 8, 1, 0, dphi1, HEZMIN_H2, HEZMID_H2, 1.521, 1.603),
234 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 19, 2, 1, 8, 1, 0, dphi1, HEZMID_H2, HEZMAX_H2, 1.521, 1.603),
235 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 20, 1, 1, 8, 1, 0, dphi1, HEZMIN_H2, HEZMID_H2, 1.603, 1.693),
236 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 20, 2, 1, 8, 1, 0, dphi1, HEZMID_H2, HEZMAX_H2, 1.603, 1.693),
237 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 21, 1, 1, 8, 2, 0, dphi1, HEZMIN_H2, HEZMID_H2, 1.693, 1.79),
238 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 21, 2, 1, 8, 2, 0, dphi1, HEZMID_H2, HEZMAX_H2, 1.693, 1.79),
239 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 22, 1, 1, 8, 2, 0, dphi2, HEZMIN_H2, HEZMID_H2, 1.79, 1.88),
240 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 22, 2, 1, 8, 2, 0, dphi2, HEZMID_H2, HEZMAX_H2, 1.79, 1.88),
241 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 23, 1, 1, 8, 2, 0, dphi2, HEZMIN_H2, HEZMID_H2, 1.88, 1.98),
242 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 23, 2, 1, 8, 2, 0, dphi2, HEZMID_H2, HEZMAX_H2, 1.88, 1.98),
243 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 24, 1, 1, 8, 2, 0, dphi2, HEZMIN_H2, 418.685, 1.98, 2.09),
244 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 24, 2, 1, 8, 2, 0, dphi2, 418.685, HEZMID_H2, 1.98, 2.09),
245 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 24, 3, 1, 8, 2, 0, dphi2, HEZMID_H2, HEZMAX_H2, 1.98, 2.09),
246 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 25, 1, 1, 8, 2, 0, dphi2, HEZMIN_H2, 418.685, 2.09, 2.21),
247 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 25, 2, 1, 8, 2, 0, dphi2, 418.685, HEZMID_H2, 2.09, 2.21),
248 HcalFlexiHardcodeGeometryLoader::HECellParameters ( 25, 3, 1, 8, 2, 0, dphi2, HEZMID_H2, HEZMAX_H2, 2.09, 2.21)
251 std::vector <HcalFlexiHardcodeGeometryLoader::HECellParameters>
result;
252 result.reserve (nCells);
253 for (
int i = 0;
i < nCells; ++
i) result.push_back (cells[
i]);
260 const float HFZMIN1 = 1115.;
261 const float HFZMIN2 = 1137.;
262 const float HFZMAX = 1280.1;
264 unsigned int nCells = cells.size();
265 std::vector <HcalFlexiHardcodeGeometryLoader::HFCellParameters>
result;
266 result.reserve (nCells);
267 for (
unsigned int i = 0;
i < nCells; ++
i) {
269 result.push_back (cell1);
271 result.push_back (cell2);
278 for (
size_t iCell = 0; iCell < fCells.size(); ++iCell) {
282 for (
int iside = -1; iside <= 1; iside += 2) {
284 float phiCenter = param.
phiStart + (kPhi-0.5)*param.
dphi;
287 float perp = param.
zMin / sinh (etaCenter);
288 float x = perp *
cos (phiCenter);
289 float y = perp *
sin (phiCenter);
290 float z = iside * param.
zMin;
293 std::vector<CCGFloat> cellParams;
294 cellParams.reserve (5);
295 cellParams.push_back (0.5 * (param.
etaMax - param.
etaMin));
296 cellParams.push_back (0.5 * param.
dphi);
297 cellParams.push_back (-0.5 * (param.
zMax - param.
zMin) / tanh (etaCenter));
298 cellParams.push_back ( fabs( refPoint.
eta() ) ) ;
299 cellParams.push_back ( fabs( refPoint.
z() ) ) ;
301 std::cout <<
"HcalFlexiHardcodeGeometryLoader::fillHE-> " << hid <<
" " << hid.
rawId() <<
" " << std::hex << hid.
rawId() <<
std::dec <<
" " << hid.
ieta() <<
'/' << hid.
iphi() <<
'/' << hid.
depth() << refPoint <<
'/' << cellParams [0] <<
'/' << cellParams [1] <<
'/' << cellParams [2] << std::endl;
303 fGeometry->
newCell(refPoint, refPoint, refPoint,
315 for (
size_t iCell = 0; iCell < fCells.size(); ++iCell) {
324 float iEta = inner.
eta();
325 float oEta = outer.
eta();
326 float etaCenter = 0.5 * ( iEta + oEta );
328 float perp = param.
zMin / sinh (etaCenter);
329 float x = perp *
cos (phiCenter);
330 float y = perp *
sin (phiCenter);
334 std::vector<CCGFloat> cellParams;
335 cellParams.reserve (5);
336 cellParams.push_back (0.5 * ( iEta - oEta ));
338 cellParams.push_back (0.5 * (param.
zMax - param.
zMin));
339 cellParams.push_back ( fabs( refPoint.eta()));
340 cellParams.push_back ( fabs( refPoint.z() ) ) ;
342 std::cout <<
"HcalFlexiHardcodeGeometryLoader::fillHF-> " << hid <<
" " << hid.
rawId() <<
" " << std::hex << hid.
rawId() <<
std::dec <<
" " << hid.
ieta() <<
'/' << hid.
iphi() <<
'/' << hid.
depth() << refPoint <<
'/' << cellParams [0] <<
'/' << cellParams [1] <<
'/' << cellParams [2] << std::endl;
344 fGeometry->
newCell(refPoint, refPoint, refPoint,
unsigned int getHFSize() const
virtual void newCell(const GlobalPoint &f1, const GlobalPoint &f2, const GlobalPoint &f3, const CCGFloat *parm, const DetId &detId)=0
std::vector< HFCellParameters > makeHFCells(const HcalDDDRecConstants &hcons)
Sin< T >::type sin(const T &t)
void fillHBHO(CaloSubdetectorGeometry *fGeometry, const std::vector< HBHOCellParameters > &fCells, bool fHB)
std::vector< HECellParameters > makeHECells_H2()
HcalFlexiHardcodeGeometryLoader(const edm::ParameterSet &)
void allocatePar(ParVec::size_type n, unsigned int m)
std::vector< HBHOCellParameters > makeHBCells(const HcalDDDRecConstants &hcons)
HcalTopologyMode::Mode mode() const
uint32_t rawId() const
get the raw id
U second(std::pair< T, U > const &p)
std::vector< std::pair< double, double > > getConstHBHE(const int type) const
int depth() const
get the tower depth
virtual unsigned int numberOfShapes() const
std::vector< HBHOCellParameters > makeHOCells()
Cos< T >::type cos(const T &t)
int ieta() const
get the cell ieta
std::vector< HFCellParameters > getHFCellParameters() const
CaloCellGeometry::CCGFloat CCGFloat
void fillHE(CaloSubdetectorGeometry *fGeometry, const std::vector< HECellParameters > &fCells)
static const CCGFloat * getParmPtr(const std::vector< CCGFloat > &vd, ParMgr *mgr, ParVecVec &pvv)
std::vector< HECellParameters > makeHECells(const HcalDDDRecConstants &hcons)
int iphi() const
get the cell iphi
void fillHF(CaloSubdetectorGeometry *fGeometry, const std::vector< HFCellParameters > &fCells)
CaloCellGeometry::CornersMgr * cornersMgr()
TString units(TString variable, Char_t axis)
T perp() const
Magnitude of transverse component.
CaloSubdetectorGeometry * load(const HcalTopology &fTopology, const HcalDDDRecConstants &hcons)
void allocateCorners(CaloCellGeometry::CornersVec::size_type n)
virtual unsigned int ncells() const
return a count of valid cells (for dense indexing use)
std::vector< HcalEtaBin > getEtaBins(const int itype) const