32 std::cout <<
"FlexiGeometryLoader initialize with ncells " 33 << fTopology.
ncells() <<
" and shapes " 36 <<
" with BH Flag " <<
isBH_ << std::endl;
57 std::vector<HcalFlexiHardcodeGeometryLoader::HBHOCellParameters>
result;
58 std::vector<std::pair<double,double> > gconsHB = hcons.
getConstHBHE(0);
59 std::vector<HcalDDDRecConstants::HcalEtaBin> etabins = hcons.
getEtaBins(0);
62 std::cout <<
"FlexiGeometryLoader called for " << etabins.size()
63 <<
" Eta Bins" << std::endl;
64 for (
unsigned int k=0;
k<gconsHB.size(); ++
k) {
65 std::cout <<
"gconsHB[" <<
k <<
"] = " << gconsHB[
k].first <<
" +- " 66 << gconsHB[
k].second << std::endl;
69 for (
auto & etabin : etabins) {
70 int iring = (etabin.zside >= 0) ? etabin.ieta : -etabin.ieta;
71 int depth = etabin.depthStart;
72 double dphi = (etabin.phis.size() > 1) ?
73 (etabin.phis[1].second-etabin.phis[0].second) :
75 for (
unsigned int k=0;
k<etabin.layer.size(); ++
k) {
76 int layf = etabin.layer[
k].first-1;
77 int layl = etabin.layer[
k].second-1;
78 double rmin = gconsHB[layf].first-gconsHB[layf].second;
79 double rmax = gconsHB[layl].first+gconsHB[layl].second;
80 for (
unsigned int j=0; j<etabin.phis.size(); ++j) {
82 std::cout <<
"HBRing " << iring <<
" eta " << etabin.etaMin <<
":" 83 << etabin.etaMax <<
" depth " <<
depth <<
" R " << rmin
84 <<
":" << rmax <<
" Phi " << etabin.phis[j].first <<
":" 85 << etabin.phis[j].second <<
":" << dphi <<
" layer[" <<
k 86 <<
"]: " << etabin.layer[
k].first-1 <<
":" 87 << etabin.layer[
k].second << std::endl;
100 const double HORMIN0 = 390.0;
101 const double HORMIN1 = 412.6;
102 const double HORMAX = 413.6;
103 const int nCells = 15;
105 const double etamin[nCells] = {0.000,0.087,0.174, 0.261, 0.3395,0.435,0.522,
106 0.609,0.696,0.783, 0.873, 0.957, 1.044,1.131,
108 const double etamax[nCells] = {0.087,0.174,0.261, 0.3075,0.435, 0.522,0.609,
109 0.696,0.783,0.8494,0.957, 1.044, 1.131,1.218,
111 std::vector<HcalFlexiHardcodeGeometryLoader::HBHOCellParameters>
result;
112 result.reserve (nCells*nPhi);
113 double dphi = ((2.0*
M_PI)/nPhi);
114 for (
int i = 0;
i < nCells; ++
i) {
115 double rmin = ((
i < 4) ? HORMIN0 : HORMIN1);
116 for (
int iside = -1; iside <= 1; iside += 2) {
117 for (
int j=0; j <
nPhi; ++j) {
118 double phi = (j+0.5)*dphi;
134 for (
const auto & param : fCells) {
136 float phiCenter = param.phi;
137 float etaCenter = 0.5*(param.etaMin + param.etaMax);
138 float x = param.rMin*
cos (phiCenter);
139 float y = param.rMin*
sin (phiCenter);
140 float z = (param.ieta < 0) ? -(param.rMin*sinh(etaCenter)) : (param.rMin*sinh(etaCenter));
143 std::vector<CCGFloat> cellParams;
144 cellParams.reserve (5);
145 cellParams.emplace_back (0.5 * (param.etaMax - param.etaMin));
146 cellParams.emplace_back (0.5 * param.dphi);
147 cellParams.emplace_back (0.5 * (param.rMax - param.rMin) * cosh (etaCenter));
148 cellParams.emplace_back ( fabs( refPoint.
eta() ) ) ;
149 cellParams.emplace_back ( fabs( refPoint.
z() ) ) ;
151 std::cout <<
"HcalFlexiHardcodeGeometryLoader::fillHBHO-> " << hid
152 <<
" " << hid.
rawId() <<
" " << std::hex << hid.
rawId()
153 <<
std::dec <<
" " << hid <<
" " << refPoint <<
'/' 154 << cellParams [0] <<
'/' << cellParams [1] <<
'/' 155 << cellParams [2] << std::endl;
157 fGeometry->
newCellFast(refPoint, refPoint, refPoint,
169 std::vector<HcalFlexiHardcodeGeometryLoader::HECellParameters>
result;
170 std::vector<std::pair<double,double> > gconsHE = hcons.
getConstHBHE(1);
172 std::cout <<
"HcalFlexiHardcodeGeometryLoader:HE with " << gconsHE.size()
173 <<
" cells" << std::endl;
175 if (!gconsHE.empty()) {
176 std::vector<HcalDDDRecConstants::HcalEtaBin> etabins = hcons.
getEtaBins(1);
179 std::cout <<
"FlexiGeometryLoader called for HE with " << etabins.size()
180 <<
" Eta Bins and " << gconsHE.size() <<
" depths" 182 for (
unsigned int i=0;
i<gconsHE.size(); ++
i)
187 for (
auto & etabin : etabins) {
188 int iring = (etabin.zside >= 0) ? etabin.ieta : -etabin.ieta;
189 int depth = etabin.depthStart;
190 double dphi = (etabin.phis.size() > 1) ?
191 (etabin.phis[1].second-etabin.phis[0].second) :
194 std::cout <<
"FlexiGeometryLoader::Ring " << iring <<
" nphi " 195 << etabin.phis.size() <<
" dstart " <<
depth <<
" dphi " 196 << dphi <<
" layers "<< etabin.layer.size() << std::endl;
197 for (
unsigned int j=0; j<etabin.phis.size(); ++j)
198 std::cout <<
" [" << j <<
"] " << etabin.phis[j].first <<
":" 199 << etabin.phis[j].second;
202 for (
unsigned int k=0;
k<etabin.layer.size(); ++
k) {
203 int layf = etabin.layer[
k].first-1;
204 int layl = etabin.layer[
k].second-1;
205 double zmin = gconsHE[layf].first-gconsHE[layf].second;
206 double zmax = gconsHE[layl].first+gconsHE[layl].second;
208 for (
int k2=layf; k2<=layl; ++k2) {
209 if (gconsHE[k2].
first > 10) {
210 zmin = gconsHE[k2].first-gconsHE[k2].second;
215 if (zmin >= zmax) zmax = zmin+10.;
216 for (
unsigned int j=0; j<etabin.phis.size(); ++j) {
218 std::cout <<
"HERing " << iring <<
" eta " << etabin.etaMin <<
":" 219 << etabin.etaMax <<
" depth " <<
depth <<
" Z " << zmin
220 <<
":" << zmax <<
" Phi :" << etabin.phis[j].first
221 <<
":" << etabin.phis[j].second <<
":" << dphi
222 <<
" layer[" <<
k <<
"]: " << etabin.layer[
k].first-1
223 <<
":" << etabin.layer[
k].second-1 << std::endl;
238 const double HEZMIN_H2 = 400.715;
239 const double HEZMID_H2 = 436.285;
240 const double HEZMAX_H2 = 541.885;
241 const int nEtas = 10;
242 const int nDepth[nEtas] = {1,2,2,2,2,2,2,2,3,3};
243 const int dStart[nEtas] = {3,1,1,1,1,1,1,1,1,1};
244 const int nPhis[nEtas] = {8,8,8,8,8,8,4,4,4,4};
245 const double etas[nEtas+1] = {1.305,1.373,1.444,1.521,1.603,1.693,1.790,
246 1.880,1.980,2.090,2.210};
247 const double zval[4*nEtas] = {409.885,462.685,0.,0.,
248 HEZMIN_H2,427.485,506.685,0.0,
249 HEZMIN_H2,HEZMID_H2,524.285,0.,
250 HEZMIN_H2,HEZMID_H2,HEZMAX_H2,0.,
251 HEZMIN_H2,HEZMID_H2,HEZMAX_H2,0.,
252 HEZMIN_H2,HEZMID_H2,HEZMAX_H2,0.,
253 HEZMIN_H2,HEZMID_H2,HEZMAX_H2,0.,
254 HEZMIN_H2,HEZMID_H2,HEZMAX_H2,0.,
255 HEZMIN_H2,418.685,HEZMID_H2,HEZMAX_H2,
256 HEZMIN_H2,418.685,HEZMID_H2,HEZMAX_H2};
257 std::vector<HcalFlexiHardcodeGeometryLoader::HECellParameters>
result;
259 for (
int i = 0;
i < nEtas; ++
i) {
261 for (
int k=0;
k<nDepth[
i]; ++
k) {
263 for (
int j=0; j < nPhis[
i]; ++j) {
264 int iphi = (nPhis[
i] == 8) ? (j+1) : (2*j+1);
266 double phi0 = (j+0.5)*dphi;
278 const float HFZMIN1 = 1115.;
279 const float HFZMIN2 = 1137.;
280 const float HFZMAX = 1280.1;
282 unsigned int nCells = cells.size();
283 std::vector <HcalFlexiHardcodeGeometryLoader::HFCellParameters>
result;
284 result.reserve (nCells);
285 for (
unsigned int i = 0;
i < nCells; ++
i) {
287 result.emplace_back (cell1);
289 result.emplace_back (cell2);
297 for (
const auto & param : fCells) {
299 float phiCenter = param.phi;
300 float etaCenter = 0.5 * (param.etaMin + param.etaMax);
301 int iside = (param.ieta >= 0) ? 1 : -1;
302 float z = (
isBH_) ? (iside*0.5*(param.zMin+param.zMax)) : (iside*param.zMin);
304 float x = perp *
cos (phiCenter);
305 float y = perp *
sin (phiCenter);
308 std::vector<CCGFloat> cellParams;
309 cellParams.reserve (5);
310 cellParams.emplace_back (0.5 * (param.etaMax - param.etaMin));
311 cellParams.emplace_back (0.5 * param.dphi);
312 cellParams.emplace_back (-0.5 * (param.zMax - param.zMin) / tanh (etaCenter));
313 cellParams.emplace_back ( fabs( refPoint.
eta() ) ) ;
314 cellParams.emplace_back ( fabs( refPoint.
z() ) ) ;
316 std::cout <<
"HcalFlexiHardcodeGeometryLoader::fillHE-> " << hid <<
" " 318 <<
" " << hid << refPoint <<
'/' << cellParams [0] <<
'/' 319 << cellParams [1] <<
'/' << cellParams [2] << std::endl;
321 fGeometry->
newCellFast(refPoint, refPoint, refPoint,
332 for (
const auto & param : fCells) {
334 int iPhi = param.phiFirst +
kPhi*param.phiStep;
340 float iEta = inner.
eta();
341 float oEta = outer.
eta();
342 float etaCenter = 0.5 * ( iEta + oEta );
344 float perp = param.zMin / sinh (etaCenter);
345 float x = perp *
cos (phiCenter);
346 float y = perp *
sin (phiCenter);
347 float z = (param.eta > 0) ? param.zMin : -param.zMin;
350 std::vector<CCGFloat> cellParams;
351 cellParams.reserve (5);
352 cellParams.emplace_back (0.5 * ( iEta - oEta ));
353 cellParams.emplace_back (0.5 * param.dphi *
DEGREE2RAD);
354 cellParams.emplace_back (0.5 * (param.zMax - param.zMin));
355 cellParams.emplace_back ( fabs( refPoint.eta()));
356 cellParams.emplace_back ( fabs( refPoint.z() ) ) ;
358 std::cout <<
"HcalFlexiHardcodeGeometryLoader::fillHF-> " << hid <<
" " 360 <<
" " << hid <<
" " << refPoint <<
'/' << cellParams [0]
361 <<
'/' << cellParams [1] <<
'/' << cellParams [2] << std::endl;
363 fGeometry->
newCellFast(refPoint, refPoint, refPoint,
CaloCellGeometry::CCGFloat CCGFloat
unsigned int getHFSize() const
std::vector< std::pair< double, double > > getConstHBHE(const int &type) const
std::vector< HFCellParameters > makeHFCells(const HcalDDDRecConstants &hcons)
Sin< T >::type sin(const T &t)
unsigned int numberOfShapes() const override
constexpr uint32_t rawId() const
get the raw id
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
U second(std::pair< T, U > const &p)
void newCellFast(const GlobalPoint &f1, const GlobalPoint &f2, const GlobalPoint &f3, const CCGFloat *parm, const DetId &detId)
std::vector< HcalEtaBin > getEtaBins(const int &itype) const
std::vector< HBHOCellParameters > makeHOCells()
Cos< T >::type cos(const T &t)
std::vector< HFCellParameters > getHFCellParameters() const
Abs< T >::type abs(const T &t)
void fillHE(HcalGeometry *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)
CaloCellGeometry::CornersMgr * cornersMgr()
void increaseReserve(unsigned int extra)
T perp() const
Magnitude of transverse component.
void fillHBHO(HcalGeometry *fGeometry, const std::vector< HBHOCellParameters > &fCells, bool fHB)
CaloSubdetectorGeometry * load(const HcalTopology &fTopology, const HcalDDDRecConstants &hcons)
unsigned int ncells() const override
return a count of valid cells (for dense indexing use)
void allocateCorners(CaloCellGeometry::CornersVec::size_type n)
void fillHF(HcalGeometry *fGeometry, const std::vector< HFCellParameters > &fCells)