6 #include "CLHEP/Units/GlobalPhysicalConstants.h" 7 #include "CLHEP/Units/GlobalSystemOfUnits.h" 14 edm::LogInfo(
"HCalGeom") <<
"HcalDDDSimConstants::HcalDDDSimConstants (const HcalParameter* hp) constructor\n";
20 std::cout <<
"HcalDDDSimConstants: " << cellTypes.size()
21 <<
" cells of type HCal (All)\n";
27 edm::LogInfo (
"HCalGeom") <<
"HcalDDDSimConstants::destructed!!!\n";
32 const int depth,
const int etaR,
33 const int iphi)
const {
42 double eta = 0, deta = 0,
phi = 0, dphi = 0, rz = 0, drz = 0;
43 bool ok =
false, flagrz =
true;
46 && etaR >=etaMn && etaR <= etaMx && depth > 0) ok =
true;
47 if (idet == static_cast<int>(
HcalEndcap) && depth>(
int)(
hpar->
zHE.size()))ok=
false;
49 else if (idet == static_cast<int>(
HcalOuter) && depth != 4) ok=
false;
52 eta =
getEta(idet, etaR, zside, depth);
59 }
else if (idet == static_cast<int>(
HcalEndcap)) {
67 phi =-fioff + (iphi - 0.5)*fibin;
71 if (ir > 0 && ir <
nR) {
77 edm::LogInfo(
"HCalGeom") <<
"HcalDDDSimConstants: wrong eta " << etaR
78 <<
" (" << ir <<
"/" <<
nR <<
") Detector " 82 }
else if (etaR <=
nEta) {
83 int laymin(depth), laymax(depth);
84 if (idet == static_cast<int>(
HcalOuter)) {
102 << depth <<
" or etaR " << etaR
103 <<
" for detector " << idet;
107 edm::LogWarning(
"HCalGeom") <<
"HcalDDDSimConstants: wrong depth " << depth
113 std::cout <<
"HcalDDDSimConstants: det/side/depth/etaR/phi " 114 << idet <<
"/" << zside <<
"/" << depth <<
"/" 115 << etaR <<
"/" << iphi <<
" Cell Flag " << tmp.
ok 116 <<
" " << tmp.
eta <<
" " << tmp.
deta <<
" phi " 117 << tmp.
phi <<
" " << tmp.
dphi <<
" r(z) " << tmp.
rz 118 <<
" " << tmp.
drz <<
" " << tmp.
flagrz << std::endl;
125 const int lay)
const {
133 unsigned int id = layerGroup.size();
134 for (
unsigned int i = 0;
i < layerGroup.size();
i++) {
135 if (layer == (
int)(layerGroup[
i].layer)) {
145 std::vector<std::pair<double,double> > gcons;
147 for (
unsigned int i=0;
i<
hpar->
rHB.size(); ++
i) {
151 for (
unsigned int i=0;
i<
hpar->
zHE.size(); ++
i) {
159 const int zside)
const {
164 std::cout <<
"getDepthEta16: " << det <<
":" << depth << std::endl;
171 std::vector<int> phis;
174 int zside = (phis[0] > 0) ? 1 : -1;
175 int iphi = (phis[0] > 0) ? phis[0] : -phis[0];
177 if (det == 1 && depthsp > depth) depth = depthsp;
178 if (det == 2 && depthsp < depth) depth = depthsp;
192 const bool planOne)
const {
194 if (i == 0 && planOne) {
195 std::vector<int> phis;
198 int zside = (phis[0] > 0) ? 1 : -1;
199 int iphi = (phis[0] > 0) ? phis[0] : -phis[0];
201 if (depthsp > depth) depth = depthsp;
210 int hsubdet(0), ieta(0);
212 double heta = fabs(eta);
227 etaR = (eta >= 0. ? hR : -hR);
229 return std::pair<int,double>(hsubdet,etaR);
233 const double hetaR) {
238 for (
int i =
nR-1;
i > 0;
i--)
239 if (hetaR < hpar->rTable[
i]) ieta =
hpar->
etaMin[2] +
nR - i - 1;
242 for (
int i = 0;
i <
nEta-1;
i++)
249 }
else if (det == static_cast<int>(
HcalEndcap)) {
258 int depth,
int lay) {
261 std::cout <<
"HcalDDDEsimConstants:getEtaDepth: I/P " << det <<
":" << etaR
262 <<
":" << phi <<
":" << zside <<
":" << depth <<
":" << lay <<
"\n";
265 if ((det == static_cast<int>(
HcalEndcap)) && (etaR == 17) && (lay == 1))
268 }
else if (det == static_cast<int>(
HcalOuter)) {
272 depth =
layerGroup(det, etaR, phi, zside, lay-1);
273 if (etaR ==
hpar->
noff[0] && lay > 1) {
275 kphi = (kphi-1)%4 + 1;
276 if (kphi == 2 || kphi == 3)
277 depth =
layerGroup(det, etaR, phi, zside, lay-2);
279 }
else if (det == static_cast<int>(
HcalBarrel)) {
296 std::cout <<
"HcalDDDEsimConstants:getEtaDepth: O/P " << etaR <<
":" << depth
299 return std::pair<int,int>(etaR,
depth);
306 double eta = fabs(etaR);
311 if (eta <= hpar->etaTable[10]) eta =
hpar->
etaTable[10]+0.001;
312 }
else if (zz >
hpar->
zHO[1]) {
313 if (eta <= hpar->etaTable[4]) eta =
hpar->
etaTable[4]+0.001;
316 eta = (z >= 0. ? eta : -
eta);
318 std::cout <<
"R " << r <<
" Z " << z <<
" eta " << etaR
319 <<
":" << eta << std::endl;
320 if (eta != etaR)
edm::LogInfo (
"HCalGeom") <<
"**** Check *****";
332 if (eta == 16 || eta == -16) lay =
layFHB[1];
335 if (eta == 16 || eta == -16) lay =
layFHE[1];
336 else if (eta == 18 || eta == -18) lay =
layFHE[2];
343 const int zside)
const {
352 const int depth)
const {
356 if (det == 1 || det == 2) {
372 const int depth)
const {
376 if (det == 1 || det ==2) {
377 layer =
depths[depth-1][eta-1];
393 const bool partialDetOnly)
const {
396 if (partialDetOnly) {
400 }
else if (det == 1 || det == 2) {
409 }
else if (det == 3) {
411 }
else if (det == 4) {
421 const bool partialDetOnly)
const {
424 if (partialDetOnly) {
428 }
else if (det == 3) {
430 }
else if (det == 4) {
437 unsigned int type = (det == 1) ? 0 : 1;
457 const int ieta)
const {
459 double fioff(0), fibin(0);
474 return std::pair<double,double>(fioff,fibin);
477 std::vector<std::pair<int,double> >
480 std::vector<std::pair<int,double> > phis;
481 int ietaAbs = (ieta > 0) ? ieta : -ieta;
482 std::pair<double,double> ficons =
getPhiCons(subdet, ietaAbs);
483 int nphi =
int((CLHEP::twopi+0.1*ficons.second)/ficons.second);
485 for (
int ifi = 0; ifi < nphi; ++ifi) {
486 double phi =-ficons.first + (ifi+0.5)*ficons.second;
488 phis.push_back(std::pair<int,double>(iphi,phi));
491 std::cout <<
"getPhis: subdet|ieta|iphi " << subdet <<
"|" << ieta
492 <<
" with " << phis.size() <<
" phi bins" << std::endl;
493 for (
unsigned int k=0;
k<phis.size(); ++
k)
495 << phis[
k].
second/CLHEP::deg << std::endl;
504 edm::LogInfo (
"HCalGeom") <<
"HcalDDDSimConstants: " << cellTypes.size()
505 <<
" cells of type HCal Barrel\n";
506 for (
unsigned int i=0;
i<cellTypes.size();
i++)
507 edm::LogInfo (
"HCalGeom") <<
"Cell " <<
i <<
" " << cellTypes[
i] <<
"\n";
512 edm::LogInfo (
"HCalGeom") <<
"HcalDDDSimConstants: " << hoCells.size()
513 <<
" cells of type HCal Outer\n";
514 for (
unsigned int i=0;
i<hoCells.size();
i++)
515 edm::LogInfo (
"HCalGeom") <<
"Cell " <<
i <<
" " << hoCells[
i] <<
"\n";
517 cellTypes.insert(cellTypes.end(), hoCells.begin(), hoCells.end());
521 edm::LogInfo (
"HCalGeom") <<
"HcalDDDSimConstants: " << heCells.size()
522 <<
" cells of type HCal Endcap\n";
523 for (
unsigned int i=0;
i<heCells.size();
i++)
524 edm::LogInfo (
"HCalGeom") <<
"Cell " <<
i <<
" " << heCells[
i] <<
"\n";
526 cellTypes.insert(cellTypes.end(), heCells.begin(), heCells.end());
530 edm::LogInfo (
"HCalGeom") <<
"HcalDDDSimConstants: " << hfCells.size()
531 <<
" cells of type HCal Forward\n";
532 for (
unsigned int i=0;
i<hfCells.size();
i++)
533 edm::LogInfo (
"HCalGeom") <<
"Cell " <<
i <<
" " << hfCells[
i] <<
"\n";
535 cellTypes.insert(cellTypes.end(), hfCells.begin(), hfCells.end());
542 std::vector<HcalCellType> cellTypes;
544 if (
dzVcal < 0)
return cellTypes;
547 int dmin, dmax, indx, nz;
557 dmin = 4; dmax = 4; indx = 0; nz =
nzHB;
563 if (depthl > 0) dmin = dmax = depthl;
564 int ietamin = (ieta>0) ? ieta :
hpar->
etaMin[indx];
565 int ietamax = (ieta>0) ? ieta :
hpar->
etaMax[indx];
566 int phi = (indx == 2) ? 3 : 1;
569 int subdet0 =
static_cast<int>(subdet);
577 for (
int eta=ietamin;
eta<=ietamax;
eta++) {
578 for (
int iz=0; iz<nz; ++iz) {
579 int zside = -2*iz + 1;
582 std::vector<std::pair<int,double> > phis =
getPhis(subdet0,
eta);
586 std::vector<int> phiMiss2;
593 for (
int miss=0; miss<
hpar->
noff[5+iz]; miss++) {
608 temp2.
setPhi(phis,phiMiss2,fioff,dphi,unit);
609 cellTypes.push_back(temp2);
614 std::vector<int> phiMiss3;
615 for (
unsigned int k=0;
k<phis.size(); ++
k) {
624 if (!ok) phiMiss3.push_back(phis[
k].
first);
629 temp3.
setPhi(phis,phiMiss2,fioff,dphi,unit);
630 cellTypes.push_back(temp3);
648 if (!ok) mxdepth = 2;
655 unsigned int num = 0;
657 for (
unsigned int i=0;
i<cellTypes.size();
i++) {
661 std::cout <<
"HcalDDDSimConstants:numberOfCells " 662 << cellTypes.size() <<
" " << num
663 <<
" for subdetector " << subdet << std::endl;
671 if (units==2) iphi_skip = (phi-1)*2+1;
672 else if (units==4) iphi_skip = (phi-1)*4-1;
673 if (iphi_skip < 0) iphi_skip += 72;
679 std::vector<int> phis;
681 int kphi = (detsp > 0) ? phis[0] : 1;
682 int zside = (kphi > 0) ? 1 : -1;
683 int iphi = (kphi > 0) ? kphi : -kphi;
718 const double fiveDegInRad = 2*
M_PI/72;
719 int units =
int(dphi/fiveDegInRad+0.5);
720 if (units < 1) units = 1;
733 std::cout <<
"HcalDDDSimConstants:Read LayerGroup" <<
i <<
":";
746 <<
" and dzVcal " <<
dzVcal << std::endl;
752 for (
int i=0;
i<nEta-1; ++
i) {
754 int laymax = (imx > 0) ?
layerGroup(
i, imx-1 ) : 0;
755 if (i < hpar->
etaMax[0]) {
756 int laymax0 = (imx > 16) ?
layerGroup(
i, 16) : laymax;
757 if (
i+1 ==
hpar->
etaMax[0] && laymax0 > 2) laymax0 = 2;
760 if (
i >=
hpar->
etaMin[1]-1 && i < hpar->etaMax[1]) {
765 for (
int i=0;
i<4; ++
i)
771 for (
int i=0;
i<maxdepth; ++
i) {
772 for (
int k=0;
k<nEta-1; ++
k) {
775 for (
int l=layermx-1;
l >= 0; --
l) {
797 <<
" endcap half-sectors" << std::endl;
812 <<
" " <<
etaHO[2] <<
" " <<
etaHO[3] << std::endl;
815 for (
unsigned int i=0;
i<
hpar->
zHO.size(); ++
i)
821 int noffl(noffsize+5);
822 if ((
int)(
hpar->
noff.size()) > (noffsize+3)) {
827 if ((
int)(
hpar->
noff.size()) > (noffsize+4)) {
828 noffl += (2*
hpar->
noff[noffsize+4]);
839 << noffl <<
":" <<
isBH_ << std::endl;
841 <<
" HE (min) " <<
depthEta16[1] <<
"; max depth for itea = 29 : (" 845 if ((
int)(
hpar->
noff.size()) > (noffsize+4)) {
848 for (
int k=0;
k<npair; ++
k) {
863 int noffk(noffsize+5);
864 if ((
int)(
hpar->
noff.size()) > (noffsize+5)) {
865 noffk += (2*
hpar->
noff[noffsize+4]);
866 if ((
int)(
hpar->
noff.size()) > noffk+5) {
872 double wt = 0.1*(
hpar->
noff[noffk+6]);
873 if ((
int)(
hpar->
noff.size()) >= (noffk+7+nphi+3*ndeps)) {
874 if (dtype == 1 || dtype == 2) {
875 std::vector<int> ifi, iet, ily, idp;
876 for (
int i=0;
i<nphi; ++
i) ifi.push_back(
hpar->
noff[noffk+7+
i]);
877 for (
int i=0;
i<ndeps;++
i) {
878 iet.push_back(
hpar->
noff[noffk+7+nphi+3*
i]);
879 ily.push_back(
hpar->
noff[noffk+7+nphi+3*
i+1]);
880 idp.push_back(
hpar->
noff[noffk+7+nphi+3*
i+2]);
883 std::cout <<
"Initialize HcalLayerDepthMap for Detector " << dtype
887 std::cout <<
" and " << ndeps <<
" depth sections" << std::endl;
888 for (
int i=0;
i<ndeps;++
i)
889 std::cout <<
" [" <<
i <<
"] " << iet[
i] <<
" " << ily[
i] <<
" " 890 << idp[
i] << std::endl;
892 <<
":" << ndp16 <<
":" << ndp29 <<
" L0 Wt " 897 int zside = (ifi[0]>0) ? 1 : -1;
898 int iphi = (ifi[0]>0) ? ifi[0] : -ifi[0];
902 int noffm = (noffk+7+nphi+3*ndeps);
903 if ((
int)(
hpar->
noff.size()) > noffm) {
905 if (ndnext > 4 && (
int)(
hpar->
noff.size()) >= noffm+ndnext) {
915 <<
":" <<
layFHE[2] << std::endl;
927 std::cout <<
"Detector type and maximum depth for all RBX " 929 <<
" and for special RBX " <<
depthMaxSp_.first <<
":" 935 const int depth)
const {
940 if (ir > 0 && ir <
nR) {
942 if (depth%2 != 1) z +=
dlShort;
946 if (etaR > 0 && etaR <
nEta) {
949 }
else if (det == static_cast<int>(
HcalOuter)) {
952 }
else if (etaR ==
hpar->
noff[2]+1) {
956 }
else if (etaR ==
hpar->
noff[3]+1) {
967 std::cout <<
"HcalDDDSimConstants::deltaEta " << etaR <<
" " 968 << depth <<
" ==> " << tmp << std::endl;
979 if (ir > 0 && ir <
nR) {
981 if (depth%2 != 1) z +=
dlShort;
985 if (etaR > 0 && etaR <
nEta) {
988 }
else if (det == static_cast<int>(
HcalOuter)) {
991 }
else if (etaR ==
hpar->
noff[2]+1) {
995 }
else if (etaR ==
hpar->
noff[3]+1) {
1005 if (zside == 0) tmp = -
tmp;
1007 std::cout <<
"HcalDDDSimConstants::getEta " << etaR <<
" " 1008 << zside <<
" " << depth <<
" ==> " << tmp <<
"\n";
1016 if (z != 0) tmp = -
log(
tan(0.5*atan(r/z)));
1018 std::cout <<
"HcalDDDSimConstants::getEta " << r <<
" " << z
1019 <<
" ==> " << tmp << std::endl;
1025 const int depth)
const {
1046 const int depth)
const {
1068 std::cout <<
"HcalDDDSimConstants::printTileHB for eta " << eta <<
" and depth " << depth <<
"\n";
1071 double thetaL = 2.*atan(
exp(-etaL));
1073 double thetaH = 2.*atan(
exp(-etaH));
1076 std::cout <<
"\ntileHB:: eta|depth " << zside*eta <<
"|" << depth <<
" theta " << thetaH/CLHEP::deg <<
":" << thetaL/CLHEP::deg <<
" Layer " << layL <<
":" << layH-1 <<
"\n";
1077 for (
int lay=layL; lay<layH; ++lay) {
1078 std::vector<double> area(2,0);
1091 if (area[0] > 0)
std::cout << std::setw(2) << lay <<
" Area " << std::setw(8) << area[0] <<
" " << std::setw(8) << area[1] <<
"\n";
1099 double thetaL = 2.*atan(
exp(-etaL));
1101 double thetaH = 2.*atan(
exp(-etaH));
1106 if (phib > 6*CLHEP::deg) nphi = 1;
1107 std::cout <<
"\ntileHE:: Eta/depth " << zside*eta <<
"|" << depth <<
" theta " << thetaH/CLHEP::deg <<
":" << thetaL/CLHEP::deg <<
" Layer " << layL <<
":" << layH-1 <<
" phi " << nphi <<
"\n";
1108 for (
int lay=layL; lay<layH; ++lay) {
1109 std::vector<double> area(4,0);
1115 if ((lay != 0 || eta == 18) &&
1124 double ar1=0, ar2=0;
1126 ar1 = 0.5*(rmax-rmin)*(dx1+dx2-4.*
hpar->
dx1HE[
k]);
1128 ar1 = 0.5*(rmax-rmin)*(dx1+dx2-2.*
hpar->
dx1HE[
k]);
1129 ar2 = 0.5*(rmax-rmin)*((rmax+rmin)*
tan(10.*CLHEP::deg)-4*
hpar->
dx1HE[
k])-ar1;
1137 if (area[0] > 0 && area[1] > 0) {
1139 if (eta == 18) lay0++;
1141 std::cout << std::setw(2) << lay0 <<
" Area " << std::setw(8) << area[0] <<
" " << std::setw(8) << area[1] <<
"\n";
1143 std::cout << std::setw(2) << lay0 <<
" Area " << std::setw(8) << area[0] <<
" " << std::setw(8) << area[1] <<
":" << std::setw(8) << area[2] <<
" " << std::setw(8) << area[3] <<
"\n";
1152 if (it.layer == (
unsigned int)(eta + 1)) {
1153 return it.layerGroup.size();
1155 if (it.layer > (
unsigned int)(eta + 1))
break;
1156 k = it.layerGroup.size();
1162 const int i)
const {
1165 if (it.layer == (
unsigned int)(eta + 1)) {
1166 return it.layerGroup.at(i);
1168 if (it.layer > (
unsigned int)(eta + 1))
break;
1169 k = it.layerGroup.at(i);
1176 const int lay)
const {
1178 int depth0 =
findDepth(det,eta,phi,zside,lay);
1179 unsigned int depth = (depth0 > 0) ? (
unsigned int)(depth0) :
layerGroup(eta-1,lay);
std::vector< double > zHO
int findDepth(const int det, const int eta, const int phi, const int zside, const int lay) const
std::vector< double > etaTable
int maxHFDepth(const int ieta, const int iphi) const
std::pair< int, int > getEtaDepth(const int det, int etaR, int phi, int zside, int depth, int lay)
int getLayerBack(const int det, const int eta, const int phi, const int zside, const int depth) const
void initialize(const int subdet, const int ietaMax, const int dep16C, const int dep29C, const double wtl0C, std::vector< int > const &iphi, std::vector< int > const &ieta, std::vector< int > const &layer, std::vector< int > const &depth)
std::vector< int > maxDepth
std::vector< double > rHB
std::pair< double, double > getPhiCons(const int det, const int ieta) const
double getGain(const HcalSubdetector subdet, const int depth) const
std::vector< double > rhoxHB
Sin< T >::type sin(const T &t)
static const int maxLayer_
std::vector< double > HBGains
bool isValid(const int det, const int phi, const int zside) const
Geom::Theta< T > theta() const
std::vector< int > HEShift
int getMaxDepth(const int type) const
std::vector< std::pair< double, double > > getConstHBHE(const int type) const
HcalDDDSimConstants(const HcalParameters *hp)
int getShift(const HcalSubdetector subdet, const int depth) const
void printTileHE(const int eta, const int phi, const int zside, const int depth) const
unsigned int numberOfCells(HcalSubdetector) const
int getLayerBack(const int subdet, const int ieta, const int iphi, const int zside, const int depth) const
std::vector< int > etaMax
std::vector< int > depths[nDepthMax]
int getDepthEta29M(const int i, const bool planOne) const
int getLayerFront(const int subdet, const int ieta, const int iphi, const int zside, const int depth) const
std::vector< double > rhoxHE
U second(std::pair< T, U > const &p)
std::pair< int, int > getDepths(const int eta) const
double deltaEta(const int det, const int eta, const int depth) const
std::vector< double > zxHE
std::vector< std::pair< int, double > > getPhis(const int subdet, const int ieta) const
int validDet(std::vector< int > &phis) const
int getFrontLayer(const int det, const int eta) const
std::vector< double > zHE
double getEtaHO(double &etaR, double &x, double &y, double &z) const
std::vector< LayerItem > layerGroupEtaSim
std::pair< int, double > getDetEta(const double eta, const int depth)
std::vector< double > dyHE
void setPhi(const std::vector< std::pair< int, double >> &phis, const std::vector< int > &iphiMiss, double foff, double dphi, int unit)
std::vector< double > dx1HE
std::vector< double > rHO
int getDepthEta29(const int phi, int zside, int i) const
void printTileHB(const int eta, const int phi, const int zside, const int depth) const
std::pair< int, int > depthMaxDf_
std::vector< double > dzHE
Cos< T >::type cos(const T &t)
Tan< T >::type tan(const T &t)
std::vector< HcalCellType > HcalCellTypes() const
std::vector< HcalDetId > idHF2QIE
std::pair< int, int > getModHalfHBHE(const int type) const
std::vector< int > HFShift
int getMinDepth(const int det, const int eta, const int phi, const int zside, bool partialOnly) const
int getDepthEta16(const int det, const int phi, const int zside) const
int getMaxDepthLastHE(const int subdet, const int iphi, const int zside) const
int getDepth(const int subdet, const int ieta, const int iphi, const int zside, const int layer) const
unsigned int findLayer(int layer, const std::vector< HcalParameters::LayerItem > &layerGroup) const
unsigned int layerGroup(const int eta, const int i) const
double getLayer0Wt(const int det, const int phi, const int zside) const
std::vector< double > HEGains
double getLayer0Wt(const int subdet, const int iphi, const int zside) const
std::vector< double > dyHB
std::vector< double > phioff
int getDepth16(const int subdet, const int iphi, const int zside) const
std::vector< double > gparHF
unsigned int layerGroupSize(const int eta) const
int getEta(const int det, const int lay, const double hetaR)
std::vector< double > Layer0Wt
std::vector< double > dxHB
std::vector< std::vector< double > > tmp
int getLayerFront(const int det, const int eta, const int phi, const int zside, const int depth) const
std::vector< double > rTable
std::vector< double > phitable
int phiNumber(const int phi, const int unit) const
int getDepthEta16M(const int det) const
TString units(TString variable, Char_t axis)
std::vector< double > phibin
int unitPhi(const int det, const int etaR) const
std::vector< double > drHB
HcalCellType::HcalCell cell(const int det, const int zside, const int depth, const int etaR, const int iphi) const
std::vector< double > HFGains
static unsigned int const shift
std::pair< int, int > depthMaxSp_
std::vector< int > HBShift
const HcalParameters * hpar
std::vector< int > maxDepth
static const int maxLayerHB_
int getDepthMax(const int subdet, const int iphi, const int zside) const
int getLayerMax(const int eta, const int depth) const
std::vector< int > etaMin