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 *****";
329 const int zside)
const {
338 const int depth)
const {
342 if (det == 1 || det == 2) {
358 const int depth)
const {
362 if (det == 1 || det ==2) {
363 layer =
depths[depth-1][eta-1];
379 const bool partialDetOnly)
const {
382 if (partialDetOnly) {
386 }
else if (det == 1 || det == 2) {
395 }
else if (det == 3) {
397 }
else if (det == 4) {
407 const bool partialDetOnly)
const {
410 if (partialDetOnly) {
414 }
else if (det == 3) {
416 }
else if (det == 4) {
423 unsigned int type = (det == 1) ? 0 : 1;
443 const int ieta)
const {
445 double fioff(0), fibin(0);
460 return std::pair<double,double>(fioff,fibin);
463 std::vector<std::pair<int,double> >
466 std::vector<std::pair<int,double> > phis;
467 int ietaAbs = (ieta > 0) ? ieta : -ieta;
468 std::pair<double,double> ficons =
getPhiCons(subdet, ietaAbs);
469 int nphi =
int((CLHEP::twopi+0.1*ficons.second)/ficons.second);
471 for (
int ifi = 0; ifi < nphi; ++ifi) {
472 double phi =-ficons.first + (ifi+0.5)*ficons.second;
474 phis.push_back(std::pair<int,double>(iphi,phi));
477 std::cout <<
"getPhis: subdet|ieta|iphi " << subdet <<
"|" << ieta
478 <<
" with " << phis.size() <<
" phi bins" << std::endl;
479 for (
unsigned int k=0;
k<phis.size(); ++
k)
481 << phis[
k].
second/CLHEP::deg << std::endl;
490 edm::LogInfo (
"HCalGeom") <<
"HcalDDDSimConstants: " << cellTypes.size()
491 <<
" cells of type HCal Barrel\n";
492 for (
unsigned int i=0;
i<cellTypes.size();
i++)
493 edm::LogInfo (
"HCalGeom") <<
"Cell " <<
i <<
" " << cellTypes[
i] <<
"\n";
498 edm::LogInfo (
"HCalGeom") <<
"HcalDDDSimConstants: " << hoCells.size()
499 <<
" cells of type HCal Outer\n";
500 for (
unsigned int i=0;
i<hoCells.size();
i++)
501 edm::LogInfo (
"HCalGeom") <<
"Cell " <<
i <<
" " << hoCells[
i] <<
"\n";
503 cellTypes.insert(cellTypes.end(), hoCells.begin(), hoCells.end());
507 edm::LogInfo (
"HCalGeom") <<
"HcalDDDSimConstants: " << heCells.size()
508 <<
" cells of type HCal Endcap\n";
509 for (
unsigned int i=0;
i<heCells.size();
i++)
510 edm::LogInfo (
"HCalGeom") <<
"Cell " <<
i <<
" " << heCells[
i] <<
"\n";
512 cellTypes.insert(cellTypes.end(), heCells.begin(), heCells.end());
516 edm::LogInfo (
"HCalGeom") <<
"HcalDDDSimConstants: " << hfCells.size()
517 <<
" cells of type HCal Forward\n";
518 for (
unsigned int i=0;
i<hfCells.size();
i++)
519 edm::LogInfo (
"HCalGeom") <<
"Cell " <<
i <<
" " << hfCells[
i] <<
"\n";
521 cellTypes.insert(cellTypes.end(), hfCells.begin(), hfCells.end());
528 std::vector<HcalCellType> cellTypes;
530 if (
dzVcal < 0)
return cellTypes;
533 int dmin, dmax, indx, nz;
543 dmin = 4; dmax = 4; indx = 0; nz =
nzHB;
549 if (depthl > 0) dmin = dmax = depthl;
550 int ietamin = (ieta>0) ? ieta :
hpar->
etaMin[indx];
551 int ietamax = (ieta>0) ? ieta :
hpar->
etaMax[indx];
552 int phi = (indx == 2) ? 3 : 1;
555 int subdet0 =
static_cast<int>(subdet);
563 for (
int eta=ietamin;
eta<=ietamax;
eta++) {
564 for (
int iz=0; iz<nz; ++iz) {
565 int zside = -2*iz + 1;
568 std::vector<std::pair<int,double> > phis =
getPhis(subdet0,
eta);
572 std::vector<int> phiMiss2;
579 for (
int miss=0; miss<
hpar->
noff[5+iz]; miss++) {
594 temp2.
setPhi(phis,phiMiss2,fioff,dphi,unit);
595 cellTypes.push_back(temp2);
600 std::vector<int> phiMiss3;
601 for (
unsigned int k=0;
k<phis.size(); ++
k) {
610 if (!ok) phiMiss3.push_back(phis[
k].
first);
615 temp3.
setPhi(phis,phiMiss2,fioff,dphi,unit);
616 cellTypes.push_back(temp3);
634 if (!ok) mxdepth = 2;
641 unsigned int num = 0;
643 for (
unsigned int i=0;
i<cellTypes.size();
i++) {
647 std::cout <<
"HcalDDDSimConstants:numberOfCells " 648 << cellTypes.size() <<
" " << num
649 <<
" for subdetector " << subdet << std::endl;
657 if (units==2) iphi_skip = (phi-1)*2+1;
658 else if (units==4) iphi_skip = (phi-1)*4-1;
659 if (iphi_skip < 0) iphi_skip += 72;
665 std::vector<int> phis;
667 int kphi = (detsp > 0) ? phis[0] : 1;
668 int zside = (kphi > 0) ? 1 : -1;
669 int iphi = (kphi > 0) ? kphi : -kphi;
704 const double fiveDegInRad = 2*
M_PI/72;
705 int units =
int(dphi/fiveDegInRad+0.5);
706 if (units < 1) units = 1;
719 std::cout <<
"HcalDDDSimConstants:Read LayerGroup" <<
i <<
":";
732 <<
" and dzVcal " <<
dzVcal << std::endl;
738 for (
int i=0;
i<nEta-1; ++
i) {
740 int laymax = (imx > 0) ?
layerGroup(
i, imx-1 ) : 0;
741 if (i < hpar->
etaMax[0]) {
742 int laymax0 = (imx > 16) ?
layerGroup(
i, 16) : laymax;
743 if (
i+1 ==
hpar->
etaMax[0] && laymax0 > 2) laymax0 = 2;
746 if (
i >=
hpar->
etaMin[1]-1 && i < hpar->etaMax[1]) {
751 for (
int i=0;
i<4; ++
i)
757 for (
int i=0;
i<maxdepth; ++
i) {
758 for (
int k=0;
k<nEta-1; ++
k) {
761 for (
int l=layermx-1;
l >= 0; --
l) {
783 <<
" endcap half-sectors" << std::endl;
798 <<
" " <<
etaHO[2] <<
" " <<
etaHO[3] << std::endl;
801 for (
unsigned int i=0;
i<
hpar->
zHO.size(); ++
i)
807 int noffl(noffsize+5);
808 if ((
int)(
hpar->
noff.size()) > (noffsize+3)) {
813 if ((
int)(
hpar->
noff.size()) > (noffsize+4)) {
814 noffl += (2*
hpar->
noff[noffsize+4]);
825 << noffl <<
":" <<
isBH_ << std::endl;
827 <<
" HE (min) " <<
depthEta16[1] <<
"; max depth for itea = 29 : (" 831 if ((
int)(
hpar->
noff.size()) > (noffsize+4)) {
834 for (
int k=0;
k<npair; ++
k) {
847 int noffk(noffsize+5);
848 if ((
int)(
hpar->
noff.size()) > (noffsize+5)) {
849 noffk += (2*
hpar->
noff[noffsize+4]);
850 if ((
int)(
hpar->
noff.size()) > noffk+5) {
856 double wt = 0.1*(
hpar->
noff[noffk+6]);
857 if (dtype == 1 || dtype == 2) {
858 if ((
int)(
hpar->
noff.size()) >= (noffk+7+nphi+3*ndeps)) {
859 std::vector<int> ifi, iet, ily, idp;
860 for (
int i=0;
i<nphi; ++
i) ifi.push_back(
hpar->
noff[noffk+7+
i]);
861 for (
int i=0;
i<ndeps;++
i) {
862 iet.push_back(
hpar->
noff[noffk+7+nphi+3*
i]);
863 ily.push_back(
hpar->
noff[noffk+7+nphi+3*
i+1]);
864 idp.push_back(
hpar->
noff[noffk+7+nphi+3*
i+2]);
867 std::cout <<
"Initialize HcalLayerDepthMap for Detector " << dtype
871 std::cout <<
" and " << ndeps <<
" depth sections" << std::endl;
872 for (
int i=0;
i<ndeps;++
i)
873 std::cout <<
" [" <<
i <<
"] " << iet[
i] <<
" " << ily[
i] <<
" " 874 << idp[
i] << std::endl;
876 <<
":" << ndp16 <<
":" << ndp29 <<
" L0 Wt " 881 int zside = (ifi[0]>0) ? 1 : -1;
882 int iphi = (ifi[0]>0) ? ifi[0] : -ifi[0];
898 std::cout <<
"Detector type and maximum depth for all RBX " 900 <<
" and for special RBX " <<
depthMaxSp_.first <<
":" 906 const int depth)
const {
911 if (ir > 0 && ir <
nR) {
913 if (depth%2 != 1) z +=
dlShort;
917 if (etaR > 0 && etaR <
nEta) {
920 }
else if (det == static_cast<int>(
HcalOuter)) {
923 }
else if (etaR ==
hpar->
noff[2]+1) {
927 }
else if (etaR ==
hpar->
noff[3]+1) {
938 std::cout <<
"HcalDDDSimConstants::deltaEta " << etaR <<
" " 939 << depth <<
" ==> " << tmp << std::endl;
950 if (ir > 0 && ir <
nR) {
952 if (depth%2 != 1) z +=
dlShort;
956 if (etaR > 0 && etaR <
nEta) {
959 }
else if (det == static_cast<int>(
HcalOuter)) {
962 }
else if (etaR ==
hpar->
noff[2]+1) {
966 }
else if (etaR ==
hpar->
noff[3]+1) {
976 if (zside == 0) tmp = -
tmp;
978 std::cout <<
"HcalDDDSimConstants::getEta " << etaR <<
" " 979 << zside <<
" " << depth <<
" ==> " << tmp <<
"\n";
987 if (z != 0) tmp = -
log(
tan(0.5*atan(r/z)));
989 std::cout <<
"HcalDDDSimConstants::getEta " << r <<
" " << z
990 <<
" ==> " << tmp << std::endl;
996 const int depth)
const {
1017 const int depth)
const {
1039 std::cout <<
"HcalDDDSimConstants::printTileHB for eta " << eta <<
" and depth " << depth <<
"\n";
1042 double thetaL = 2.*atan(
exp(-etaL));
1044 double thetaH = 2.*atan(
exp(-etaH));
1047 std::cout <<
"\ntileHB:: eta|depth " << zside*eta <<
"|" << depth <<
" theta " << thetaH/CLHEP::deg <<
":" << thetaL/CLHEP::deg <<
" Layer " << layL <<
":" << layH-1 <<
"\n";
1048 for (
int lay=layL; lay<layH; ++lay) {
1049 std::vector<double> area(2,0);
1062 if (area[0] > 0)
std::cout << std::setw(2) << lay <<
" Area " << std::setw(8) << area[0] <<
" " << std::setw(8) << area[1] <<
"\n";
1070 double thetaL = 2.*atan(
exp(-etaL));
1072 double thetaH = 2.*atan(
exp(-etaH));
1077 if (phib > 6*CLHEP::deg) nphi = 1;
1078 std::cout <<
"\ntileHE:: Eta/depth " << zside*eta <<
"|" << depth <<
" theta " << thetaH/CLHEP::deg <<
":" << thetaL/CLHEP::deg <<
" Layer " << layL <<
":" << layH-1 <<
" phi " << nphi <<
"\n";
1079 for (
int lay=layL; lay<layH; ++lay) {
1080 std::vector<double> area(4,0);
1086 if ((lay != 0 || eta == 18) &&
1095 double ar1=0, ar2=0;
1097 ar1 = 0.5*(rmax-rmin)*(dx1+dx2-4.*
hpar->
dx1HE[
k]);
1099 ar1 = 0.5*(rmax-rmin)*(dx1+dx2-2.*
hpar->
dx1HE[
k]);
1100 ar2 = 0.5*(rmax-rmin)*((rmax+rmin)*
tan(10.*CLHEP::deg)-4*
hpar->
dx1HE[
k])-ar1;
1108 if (area[0] > 0 && area[1] > 0) {
1110 if (eta == 18) lay0++;
1112 std::cout << std::setw(2) << lay0 <<
" Area " << std::setw(8) << area[0] <<
" " << std::setw(8) << area[1] <<
"\n";
1114 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";
1123 if (it.layer == (
unsigned int)(eta + 1)) {
1124 return it.layerGroup.size();
1126 if (it.layer > (
unsigned int)(eta + 1))
break;
1127 k = it.layerGroup.size();
1133 const int i)
const {
1136 if (it.layer == (
unsigned int)(eta + 1)) {
1137 return it.layerGroup.at(i);
1139 if (it.layer > (
unsigned int)(eta + 1))
break;
1140 k = it.layerGroup.at(i);
1147 const int lay)
const {
1149 int depth0 =
findDepth(det,eta,phi,zside,lay);
1150 unsigned int depth = (depth0 > 0) ? (
unsigned int)(depth0) :
layerGroup(eta-1,lay);
std::vector< double > zHO
void setPhi(std::vector< std::pair< int, double >> &phis, std::vector< int > &iphiMiss, double foff, double dphi, int unit)
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
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
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