6 #include <CLHEP/Units/PhysicalConstants.h> 7 #include <CLHEP/Units/SystemOfUnits.h> 18 : hpar(
hp), hcons(hc) {
20 edm::LogVerbatim(
"HCalGeom") <<
"HcalDDDRecConstants::HcalDDDRecConstants (const HcalParameters* hp) constructor";
32 const int& det,
const int&
eta,
const int&
phi,
const int&
zside,
const int& lay)
const {
36 if ((lay > 0) && (lay <= static_cast<int>(
depths.size())))
39 std::ostringstream st1;
40 st1 <<
depths.size() <<
" depths ";
55 if (
it->layer ==
eta + 1)
56 return it->layerGroup;
57 if (
it->layer >
eta + 1)
58 return last->layerGroup;
61 return last->layerGroup;
66 for (
unsigned int lay = 0; lay <
layers.size(); ++lay)
75 const unsigned int&
eta)
const {
82 for (
unsigned int lay = 0; lay <
layers.size(); ++lay)
89 std::vector<HcalDDDRecConstants::HcalEtaBin>
bins;
90 unsigned int type = (itype == 0) ? 0 : 1;
92 std::vector<int> phiSp;
95 for (
int iz = 0; iz < 2; ++iz) {
96 int zside = 2 * iz - 1;
98 std::vector<std::pair<int, double>> phis =
getPhis(subdet,
ieta);
99 std::vector<std::pair<int, double>> phiUse;
101 if (subdet == subdetSp) {
102 for (
auto&
phi : phis) {
104 phiUse.emplace_back(
phi);
108 phiUse.insert(phiUse.end(), phis.begin(), phis.end());
114 if (subdetSp == subdet) {
116 std::vector<std::pair<int, double>> phis =
getPhis(subdet,
ieta);
117 for (
int iz = 0; iz < 2; ++iz) {
118 int zside = 2 * iz - 1;
119 std::vector<std::pair<int, double>> phiUse;
120 for (
int i : phiSp) {
121 for (
auto&
phi : phis) {
123 phiUse.emplace_back(
phi);
128 if (!phiUse.empty()) {
137 for (
unsigned int i = 0;
i <
bins.size(); ++
i) {
139 <<
bins[
i].etaMax <<
"), Zside = " <<
bins[
i].zside <<
", phis = (" 140 <<
bins[
i].phis.size() <<
":" <<
bins[
i].dphi <<
") and " <<
bins[
i].layer.size()
141 <<
" depths (start) " <<
bins[
i].depthStart;
142 for (
unsigned int k = 0;
k <
bins[
i].layer.size(); ++
k)
145 for (
unsigned int k = 0;
k <
bins[
i].phis.size(); ++
k)
156 (subdet == static_cast<int>(
HcalOuter))) {
165 int kphi = (
unit == 4) ? ((
iphi - 3) / 4 + 1) : ((
iphi - 1) / 2 + 1);
175 edm::LogVerbatim(
"HCalGeom") <<
"getEtaPhi: subdet|ieta|iphi " << subdet <<
"|" <<
ieta <<
"|" <<
iphi <<
" eta|phi " 178 return std::pair<double, double>(
eta,
phi);
182 uint32_t
ieta = (keta > 0) ? keta : -keta;
183 int zside = (keta > 0) ? 1 : -1;
188 <<
"getHCID: receives an eta value " <<
ieta <<
" outside the limit (1:" <<
hpar->
etaMaxHBHE() <<
")";
190 if ((subdet == static_cast<int>(
HcalOuter)) ||
199 phi0 = (
iphi + 1) / 2;
201 }
else if (
unit == 4) {
202 phi0 = (
iphi + 1) / 4;
221 kphi = (kphi - 1) % 4 + 1;
222 if (kphi == 2 || kphi == 3)
230 << lay <<
" output " <<
eta <<
":" <<
phi <<
":" <<
depth;
236 std::vector<HcalDDDRecConstants::HFCellParameters>
cells;
239 for (
unsigned int k = 0;
k <
nEta; ++
k) {
242 int iphi = (dphi == 4) ? 3 : 1;
243 int nphi = 72 / dphi;
265 for (
unsigned int k = 0;
k <
nEta; ++
k) {
268 int iphi = (dphi == 4) ? 3 : 1;
269 int nphi = 72 / dphi;
280 edm::LogVerbatim(
"HCalGeom") <<
"HcalDDDRecConstants returns " <<
cells.size() <<
" HF cell parameters";
281 for (
unsigned int k = 0;
k <
cells.size(); ++
k)
297 for (std::map<int, int>::iterator itr =
layers.begin(); itr !=
layers.end(); ++itr)
303 int subdet = (idet == 1) ? 1 : 2;
308 if (layBack < 0 && eta <= hpar->
etaMax[1]) {
316 if (layBack < 0 || layBack > laymax)
320 <<
" Output " << layBack;
326 int subdet = (idet == 1) ? 1 : 2;
331 if ((layFront < 0) || ((subdet == static_cast<int>(
HcalEndcap)) && (
eta == 16))) {
332 if ((subdet == static_cast<int>(
HcalEndcap)) && (
eta == 16)) {
334 }
else if (eta <= hpar->
etaMax[1]) {
337 if (static_cast<int>(
k) >= laymin) {
345 if (layFront < laymin)
350 <<
" Output " << layFront;
356 unsigned int type = (itype == 0) ? 0 : 1;
373 <<
" Output " << lmax;
383 }
else if (itype == 3) {
386 unsigned int type = (itype == 0) ? 0 : 1;
399 std::vector<std::pair<int, double>> phis;
403 double fioff = ficons.first;
405 int nphi =
int((2._pi + 0.1 * dphi) / dphi);
407 for (
int ifi = 0; ifi <
nphi; ++ifi) {
408 double phi = -fioff + (ifi + 0.5) * dphi;
410 phis.emplace_back(std::pair<int, double>(
iphi,
phi));
413 edm::LogVerbatim(
"HCalGeom") <<
"getEtaPhi: subdet|ieta|iphi " << subdet <<
"|" <<
ieta <<
" with " << phis.size()
415 for (
unsigned int k = 0;
k < phis.size(); ++
k)
428 int zside = (
k > 0) ? 1 : -1;
429 int phi = (
k > 0) ?
k : -
k;
430 phiz.emplace_back(std::pair<int, int>(
phi,
zside));
434 edm::LogVerbatim(
"HCalGeom") <<
"Special RBX for detector " << subdet <<
" with " << phiz.size() <<
" phi/z bins";
435 for (
unsigned int k = 0;
k < phiz.size(); ++
k)
436 edm::LogVerbatim(
"HCalGeom") <<
" [" <<
k <<
"] " << phiz[
k].first <<
":" << phiz[
k].second;
451 <<
depth <<
" lay|rz " << layf <<
"|" << rz;
467 int subdet =
id.subdetId();
468 int ieta =
id.ieta();
469 int iphi =
id.iphi();
470 int depth =
id.depth();
473 double rzf = (layf < 0)
478 double rzb = (layb < 0)
484 <<
depth <<
" lay|rz (front) " << layf <<
"|" << rzf <<
" lay|rz (back) " << layb <<
"|" 487 return std::pair<double, double>(rzf, rzb);
491 std::vector<HcalDDDRecConstants::HcalActiveLength> actives;
494 unsigned int kount(0);
499 int stype = (
bin.phis.size() > 4) ? 0 : 1;
502 double eta = 0.5 * (
bin.etaMin +
bin.etaMax);
508 <<
":" << layl <<
":" <<
bin.layer.size();
509 for (
auto ll :
bin.layer)
514 for (
unsigned int i = 0;
i <
bin.layer.size(); ++
i) {
518 for (
int j = lmin;
j <= lmax; ++
j) {
526 edm::LogVerbatim(
"HCalGeom") <<
"Type " <<
type <<
" L " << lmin <<
":" << lmax <<
" T " << thick;
528 thick *= (2. *
scale);
531 active.
iphis.emplace_back(
phi.first);
532 actives.emplace_back(active);
537 <<
" zside " << active.
zside <<
" depth " << active.
depth <<
" type " << active.
stype 538 <<
" thick " << active.
thick;
547 std::vector<HcalCellType>
cells;
550 std::vector<int> missPhi;
551 for (
const auto& etabin :
etabins) {
552 std::vector<HcalCellType>
temp;
553 std::vector<int>
count;
554 std::vector<double> dmin, dmax;
555 for (
unsigned int il = 0; il < etabin.layer.size(); ++il) {
557 temp.emplace_back(cell);
558 count.emplace_back(0);
559 dmin.emplace_back(0);
560 dmax.emplace_back(0);
562 int ieta = etabin.ieta;
565 for (
unsigned int il = 0; il < etabin.layer.size(); ++il) {
566 for (
auto& ic : cellsm) {
567 if (ic.depthSegment() >= etabin.layer[il].first && ic.depthSegment() <= etabin.layer[il].second &&
568 ic.etaBin() ==
temp[il].etaBin() && ic.zside() ==
temp[il].zside()) {
569 if (
count[il] == 0) {
571 dmin[il] = ic.depthMin();
572 dmax[il] = ic.depthMax();
575 if (ic.depthMin() < dmin[il])
576 dmin[il] = ic.depthMin();
577 if (ic.depthMax() > dmax[il])
578 dmax[il] = ic.depthMax();
583 for (
unsigned int il = 0; il < etabin.layer.size(); ++il) {
584 int depth = etabin.depthStart +
static_cast<int>(il);
585 temp[il].setEta(
ieta, etabin.etaMin, etabin.etaMax);
586 temp[il].setDepth(
depth, dmin[il], dmax[il]);
589 temp[il].setPhi(etabin.phis, missPhi, foff, etabin.dphi,
unit);
594 edm::LogVerbatim(
"HCalGeom") <<
"HcalDDDRecConstants: found " <<
cells.size() <<
" cells for sub-detector type " 596 for (
unsigned int ic = 0; ic <
cells.size(); ++ic)
626 depths.reserve(depthMax - depthMin + 1);
635 unsigned int num = 0;
637 for (
auto& cellType : cellTypes) {
638 num += (
unsigned int)(cellType.nPhiBins());
641 edm::LogInfo(
"HCalGeom") <<
"HcalDDDRecConstants:numberOfCells " << cellTypes.size() <<
" " <<
num 642 <<
" for subdetector " << subdet;
654 unsigned int ncell(0);
656 ncell += ((etabin.phis.size()) * (etabin.layer.size()));
673 std::map<HcalDetId, HcalDetId>::const_iterator itr =
detIdSp_.find(
id);
682 std::map<HcalDetId, std::vector<HcalDetId>>::const_iterator itr =
detIdSpR_.find(
id);
684 hid =
HcalDetId(
id.subdet(),
id.ieta(),
id.iphi(), (itr->second)[0].
depth());
690 std::map<HcalDetId, std::vector<HcalDetId>>::const_iterator itr =
detIdSpR_.find(
id);
692 hid =
HcalDetId(
id.subdet(),
id.ieta(),
id.iphi(), (itr->second).back().depth());
698 std::map<HcalDetId, std::vector<HcalDetId>>::const_iterator itr =
detIdSpR_.find(
id);
700 ids.emplace_back(
id);
702 for (
auto k : itr->second) {
704 ids.emplace_back(hid);
710 for (
auto k : idsOld) {
711 std::map<HcalDetId, HcalDetId>::const_iterator itr =
detIdSp_.find(
k);
713 idsNew.emplace_back(
k);
715 idsNew.emplace_back(itr->second);
721 std::map<HcalDetId, HcalDetId>::const_iterator itr;
723 ids.emplace_back(itr->first);
725 std::map<HcalDetId, std::vector<HcalDetId>>::const_iterator itr;
727 ids.emplace_back(itr->first);
729 return (!ids.empty());
736 std::map<int, int>&
layers,
738 std::vector<HcalDDDRecConstants::HcalEtaBin>&
bins)
const {
744 etabin.
phis.insert(etabin.
phis.end(), phis.begin(), phis.end());
750 int lmin(0), lmax(0);
752 std::map<int, int>::iterator itr =
layers.begin();
754 int dep = itr->second;
757 unsigned lymx0 = (
layers.size() > lymax) ? lymax :
layers.size();
760 <<
":" << lymax <<
" Depth " << dep <<
":" << itr->second;
763 edm::LogVerbatim(
"HCalGeom") <<
"Layer [" <<
l <<
"] " << itr->first <<
":" << itr->second;
765 for (
unsigned int l = 0;
l < phis.size(); ++
l)
768 for (itr =
layers.begin(); itr !=
layers.end(); ++itr) {
769 if (itr->first <= static_cast<int>(lymx0)) {
770 if (itr->second == dep) {
774 }
else if (itr->second > dep) {
777 int lmax0 = (lmax >= lmin) ? lmax : lmin;
779 etabin0.
layer.emplace_back(std::pair<int, int>(lmin, lmax0));
781 etabin.
layer.emplace_back(std::pair<int, int>(lmin, lmax0));
793 if (itr->first == static_cast<int>(lymx0))
799 etabin0.
layer.emplace_back(std::pair<int, int>(lmin, lmax));
800 etabin0.
phis.insert(etabin0.
phis.end(), phis.begin(), phis.end());
801 bins.emplace_back(etabin0);
804 <<
":" << lmin <<
":" << lmax <<
" phis " << phis.size();
805 for (
unsigned int k = 0;
k < etabin0.
layer.size(); ++
k)
810 etabin.
layer.emplace_back(std::pair<int, int>(lmin, lmax));
817 bins.emplace_back(etabin);
820 << lmin <<
":" << lmax <<
" phis " << etabin.
phis.size();
821 for (
unsigned int k = 0;
k < etabin.
layer.size(); ++
k)
830 edm::LogError(
"HCalGeom") <<
"HcalDDDRecConstants: sizes of the vectors " 833 throw cms::Exception(
"DDException") <<
"HcalDDDRecConstants: inconsistent array sizes" <<
nEta <<
":" 843 int ieta(0), ietaHB(0), ietaHE(0), ietaHEM(0);
845 for (
int i = 0;
i <
nEta; ++
i) {
850 <<
" at index " <<
i <<
" of etaTable from SimConstant";
852 <<
"HcalDDDRecConstants: Going beyond the array boundary " <<
hpar->
etaTable.size() <<
" at index " <<
i 853 <<
" of etaTable from SimConstant";
860 if (ieta <= hpar->
etaMax[0])
862 if (ieta <= hpar->
etaMin[1])
864 if (ieta <= hpar->
etaMax[1])
873 for (
unsigned int k = 0;
k < 4; ++
k)
878 for (
int i = 0;
i <
nEta; ++
i) {
880 phibin.emplace_back(dphi);
881 int nphi =
static_cast<int>((2._pi + 0.001) / dphi);
897 int nphi =
static_cast<int>((2._pi + 0.001) /
i);
902 edm::LogVerbatim(
"HCalGeom") <<
"HcalDDDRecConstants: Modified eta/deltaphi table for " <<
nEta <<
" bins";
920 for (
int i = 0;
i <
nEta; ++
i) {
922 int laymax = (imx > 0) ?
layerGroup(
i, imx - 1) : 0;
924 int laymax0 = (imx > 16) ?
layerGroup(
i, 16) : laymax;
928 edm::LogVerbatim(
"HCalGeom") <<
"HcalDDDRecConstants:HB " <<
i <<
" " << imx <<
" " << laymax <<
" " << laymax0;
935 edm::LogVerbatim(
"HCalGeom") <<
"HcalDDDRecConstants:HE " <<
i <<
" " << imx <<
" " << laymax;
942 for (
int i = 0;
i < 4; ++
i)
950 for (
unsigned int i = 0;
i <
hpar->
rHB.size(); ++
i) {
955 <<
" halves and " <<
gconsHB.size() <<
" layers";
956 for (
unsigned int i = 0;
i <
gconsHB.size(); ++
i)
961 for (
unsigned int i = 0;
i <
hpar->
zHE.size(); ++
i) {
966 <<
" halves and " <<
gconsHE.size() <<
" layers";
967 for (
unsigned int i = 0;
i <
gconsHE.size(); ++
i)
985 edm::LogVerbatim(
"HCalGeom") <<
"HcalDDDRecConstants:Detector type and maximum depth for all RBX " 991 std::vector<int> phis;
996 int phi = (phis[0] > 0) ? phis[0] : -phis[0];
997 int zside = (phis[0] > 0) ? 1 : -1;
1001 std::map<int, std::pair<int, int>> oldDep;
1004 for (
int lay = 0; lay < lymax; ++lay) {
1006 if (
depth != depc) {
1008 oldDep[
depth] = std::pair<int, int>(lmin, lay - 1);
1014 oldDep[
depth] = std::pair<int, int>(lmin, lymax - 1);
1017 <<
" with " << oldDep.size() <<
" old Depths";
1019 for (
std::map<
int, std::pair<int, int>>::const_iterator itr = oldDep.begin(); itr != oldDep.end(); ++itr, ++
kk)
1020 edm::LogVerbatim(
"HCalGeom") <<
"[" <<
kk <<
"] " << itr->first <<
" --> " << itr->second.first <<
":" 1021 << itr->second.second;
1028 std::vector<int>
count(oldDep.size(), 0);
1031 for (
int lay = layFront; lay <= layBack; ++lay) {
1033 for (
std::map<
int, std::pair<int, int>>::iterator itr = oldDep.begin(); itr != oldDep.end(); ++itr, ++
l) {
1034 if (lay >= (itr->second).first && lay <= (itr->second).
second) {
1040 int odepth(0), maxlay(0);
1042 for (
std::map<
int, std::pair<int, int>>::iterator itr = oldDep.begin(); itr != oldDep.end(); ++itr, ++
l) {
1044 odepth = itr->first;
1050 <<
" max " << maxlay;
1052 for (
int k : phis) {
1053 zside = (
k > 0) ? 1 : -1;
1060 std::vector<HcalDetId> ids;
1061 std::map<HcalDetId, std::vector<HcalDetId>>::iterator itr =
detIdSpR_.find(oldId);
1064 ids.emplace_back(newId);
1071 edm::LogVerbatim(
"HCalGeom") <<
"HcalDDDRecConstants:Map for merging new channels to old channel" 1072 <<
" IDs with " <<
detIdSp_.size() <<
" entries";
1075 edm::LogVerbatim(
"HCalGeom") <<
"[" <<
l <<
"] Special " << itr.first <<
" Standard " << itr.second;
1078 edm::LogVerbatim(
"HCalGeom") <<
"HcalDDDRecConstants:Reverse Map for mapping old to new IDs with " 1082 edm::LogVerbatim(
"HCalGeom") <<
"[" <<
l <<
"] Standard " << itr.first <<
" Special";
1083 for (
auto itr1 : itr.second)
1094 if (
it.layer == (
unsigned int)(
eta + 1)) {
1095 return it.layerGroup.size();
1097 if (
it.layer > (
unsigned int)(
eta + 1))
1099 k =
it.layerGroup.size();
1107 if (
it.layer == (
unsigned int)(
eta + 1)) {
1108 return it.layerGroup.at(
i);
1110 if (
it.layer > (
unsigned int)(
eta + 1))
1112 k =
it.layerGroup.at(
i);
int getMinDepth(const int &itype, const int &ieta, const int &iphi, const int &zside) const
Log< level::Info, true > LogVerbatim
std::map< HcalDetId, HcalDetId > detIdSp_
double getRZ(const int &subdet, const int &ieta, const int &depth) const
std::vector< double > etaTable
std::vector< int > iEtaMin
std::vector< int > etagroup
int getFrontLayer(const int &det, const int &eta) const
std::pair< int, int > depthMaxSp_
HcalDetId mergedDepthDetId(const HcalDetId &id) const
std::vector< double > rHB
void getOneEtaBin(HcalSubdetector subdet, int ieta, int zside, std::vector< std::pair< int, double >> &phis, std::map< int, int > &layers, bool planOne, std::vector< HcalDDDRecConstants::HcalEtaBin > &bins) const
int getDepthEta29M(const int &i, const bool &planOne) const
std::vector< std::pair< int, double > > getPhis(const int &subdet, const int &ieta) const
constexpr NumType convertRadToDeg(NumType radians)
bool mergedDepthList29(int ieta, int iphi, int depth) const
Sin< T >::type sin(const T &t)
int getLayerFront(const int subdet, const int ieta, const int iphi, const int zside, const int depth) const
int getDepthEta29(const int &phi, const int &zside, const int &i) const
static const int maxLayer_
HcalID getHCID(int subdet, int ieta, int iphi, int lay, int idepth) const
HcalDetId idBack(const HcalDetId &id) const
uint32_t etaMaxHBHE() const
std::vector< int > maxDepth
std::pair< double, double > getPhiCons(const int &det, const int &ieta) const
Log< level::Error, false > LogError
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
unsigned int nCells() const
std::vector< HcalEtaBin > getEtaBins(const int &itype) const
std::vector< double > etaTableHF
int getDepthEta16M(const int &det) const
unsigned int numberOfCells(const HcalSubdetector &) const
std::vector< int > etaMax
std::vector< int > phiUnitS
int phiNumber(const int &phi, const int &unit) const
std::vector< HFCellParameters > getHFCellParameters() const
U second(std::pair< T, U > const &p)
std::vector< std::pair< double, double > > gconsHE
const HcalParameters * hpar
std::pair< double, double > getEtaPhi(const int &subdet, const int &ieta, const int &iphi) const
void specialRBXHBHE(const std::vector< HcalDetId > &, std::vector< HcalDetId > &) const
ALPAKA_FN_ACC ALPAKA_FN_INLINE uint32_t ietaAbs(uint32_t id)
const std::vector< double > & getRTableHF() const
std::pair< int, int > getMaxDepthDet(const int &i) const
std::pair< int, int > depthMaxDf_
std::vector< double > zHE
int findDepth(const int &det, const int &eta, const int &phi, const int &zside, const int &lay) const
std::vector< double > phibin
std::pair< int, int > getDepths(const int eta) const
std::vector< double > dzHE
Cos< T >::type cos(const T &t)
std::vector< int > iEtaMax
Abs< T >::type abs(const T &t)
std::vector< HcalCellType > HcalCellTypes() const
std::vector< int > ietaMap
std::vector< int > nPhiBins
const std::vector< double > & getPhiTableHF() const
const std::vector< int > & getPhis() const
const HcalLayerDepthMap * ldMap() const
std::vector< std::pair< int, int > > layer
std::vector< std::pair< int, int > > etaSimValu
int getMaxDepth(const int &type) const
int findDepth(const int &det, const int &eta, const int &phi, const int &zside, const int &lay) const
unsigned int layerGroupSize(int eta) const
Basic3DVector unit() const
int unitPhi(const int &det, const int &etaR) const
std::vector< HcalCellType > HcalCellTypes(HcalSubdetector) const
std::vector< std::pair< double, double > > gconsHB
int getLayerBack(const int subdet, const int ieta, const int iphi, const int zside, const int depth) const
Log< level::Info, false > LogInfo
std::vector< double > phioff
int getPhiZOne(std::vector< std::pair< int, int >> &phiz) const
std::vector< double > etaTable
const std::vector< HcalDetId > & getIdHF2QIE() const
HcalDDDRecConstants(const HcalParameters *hp, const HcalDDDSimConstants &hc)
unsigned int numberOfCells(HcalSubdetector) const
void getLayerDepth(const int &ieta, std::map< int, int > &layers) const
int getMinDepth(const int &det, const int &eta, const int &phi, const int &zside, const bool &partialOnly) const
std::vector< double > phitable
HcalDetId idFront(const HcalDetId &id) const
TString units(TString variable, Char_t axis)
std::vector< double > phibin
std::vector< LayerItem > layerGroupEtaRec
int getLayerFront(const int &det, const int &eta, const int &phi, const int &depth) const
std::vector< double > drHB
const HcalDDDSimConstants & hcons
std::vector< HcalActiveLength > getThickActive(const int &type) const
unsigned int layerGroup(int eta, int i) const
std::vector< std::pair< int, double > > phis
void unmergeDepthDetId(const HcalDetId &id, std::vector< HcalDetId > &ids) const
void getLayerDepth(const int subdet, const int ieta, const int iphi, const int zside, std::map< int, int > &layers) const
std::vector< int > maxDepth
std::vector< int > phigroup
std::pair< int, int > validEta() const
std::vector< int > getDepth(const int &det, const int &phi, const int &zside, const unsigned int &eta) const
int getMaxDepth(const int &type) const
int getLastLayer(const int &det, const int &eta) const
static const int maxLayerHB_
int validDet(std::vector< int > &phis) const
int getDepthEta16(const int &det, const int &phi, const int &zside) const
int getLayerBack(const int &det, const int &eta, const int &phi, const int &depth) const
std::map< HcalDetId, std::vector< HcalDetId > > detIdSpR_
std::vector< int > etaMin