CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes | Static Private Attributes
HcalNumberingFromPS Class Reference

#include <HcalNumberingFromPS.h>

Public Member Functions

std::pair< int, int > getEta (const int &det, const math::XYZVectorD &pos) const
 
std::pair< int, int > getPhi (const int &det, const int &ieta, const double &phi) const
 
 HcalNumberingFromPS (const edm::ParameterSet &)
 
HcalNumberingFromDDD::HcalID unitID (int det, int layer, int depth, const math::XYZVectorD &pos) const
 
 ~HcalNumberingFromPS ()
 

Private Attributes

int depth29Mx_
 
std::vector< int > depthHBHE_
 
int etaHBHE_
 
std::vector< int > etaMax_
 
std::vector< int > etaMin_
 
std::vector< double > etaTable_
 
std::vector< double > phibin_
 
std::vector< double > phioff_
 
double rMinHO_
 
std::vector< std::vector< int > > segmentation_
 
std::vector< double > zHO_
 

Static Private Attributes

static const int nEtas_ = 29
 

Detailed Description

Definition at line 11 of file HcalNumberingFromPS.h.

Constructor & Destructor Documentation

HcalNumberingFromPS::HcalNumberingFromPS ( const edm::ParameterSet conf)

Definition at line 13 of file HcalNumberingFromPS.cc.

References edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), gen::k, M_PI, dataset::name, and relativeConstraints::ring.

13  {
14  etaTable_ = conf.getParameter<std::vector<double> >("EtaTable");
15  phibin_ = conf.getParameter<std::vector<double> >("PhiBin");
16  phioff_ = conf.getParameter<std::vector<double> >("PhiOffset");
17  etaMin_ = conf.getParameter<std::vector<int> >("EtaMin");
18  etaMax_ = conf.getParameter<std::vector<int> >("EtaMax");
19  etaHBHE_ = conf.getParameter<int>("EtaHBHE");
20  depthHBHE_ = conf.getParameter<std::vector<int> >("DepthHBHE");
21  depth29Mx_ = conf.getParameter<int>("Depth29Max");
22  rMinHO_ = conf.getParameter<double>("RMinHO");
23  zHO_ = conf.getParameter<std::vector<double> >("ZHO");
24  const double deg = M_PI / 180.0;
25  for (auto& phi : phibin_)
26  phi *= deg;
27  for (auto& phi : phioff_)
28  phi *= deg;
29 #ifdef EDM_ML_DEBUG
30  edm::LogVerbatim("HcalSim") << "HcalNumberingFromPS:: EtaTable with " << etaTable_.size() << " elements";
31  for (unsigned k = 0; k < etaTable_.size(); ++k)
32  edm::LogVerbatim("HcalSim") << "EtaTable[" << k << "] = " << etaTable_[k];
33  edm::LogVerbatim("HcalSim") << "HcalNumberingFromPS:: PhiBin with " << phibin_.size() << " elements";
34  for (unsigned k = 0; k < phibin_.size(); ++k)
35  edm::LogVerbatim("HcalSim") << "PhiBin[" << k << "] = " << phibin_[k];
36  edm::LogVerbatim("HcalSim") << "HcalNumberingFromPS:: PhiOff with " << phioff_.size() << " elements";
37  for (unsigned k = 0; k < phioff_.size(); ++k)
38  edm::LogVerbatim("HcalSim") << "PhiOff[" << k << "] = " << phioff_[k];
39  edm::LogVerbatim("HcalSim") << "HcalNumberingFromPS:: EtaMin/EtaMax with " << etaMin_.size() << ":" << etaMax_.size()
40  << " elements";
41  for (unsigned k = 0; k < etaMin_.size(); ++k)
42  edm::LogVerbatim("HcalSim") << "EtaMin[" << k << "] = " << etaMin_[k] << " EtaMax[" << k << "] = " << etaMax_[k];
43  edm::LogVerbatim("HcalSim") << "HcalNumberingFromPS:: EtaHBHE " << etaHBHE_ << " DepthHBHE " << depthHBHE_[0] << ":"
44  << depthHBHE_[1] << " RMinHO " << rMinHO_ << " zHO with " << zHO_.size() << " elements";
45  for (unsigned k = 0; k < zHO_.size(); ++k)
46  edm::LogVerbatim("HcalSim") << "ZHO[" << k << "] = " << zHO_[k];
47 #endif
48 
49  segmentation_.resize(nEtas_);
50  for (int ring = 0; ring < nEtas_; ++ring) {
51  char name[10];
52  snprintf(name, 10, "Eta%d", ring + 1);
53  if (ring > 0) {
54  segmentation_[ring] = conf.getUntrackedParameter<std::vector<int> >(name, segmentation_[ring - 1]);
55  } else {
56  segmentation_[ring] = conf.getUntrackedParameter<std::vector<int> >(name);
57  }
58 #ifdef EDM_ML_DEBUG
59  edm::LogVerbatim("HcalSim") << "HcalNumberingFromPS:: Ring " << ring + 1 << " with " << segmentation_[ring].size()
60  << " layers";
61  for (unsigned int k = 0; k < segmentation_[ring].size(); ++k)
62  edm::LogVerbatim("HcalSim") << "Layer[" << k << "] = " << segmentation_[ring][k];
63 #endif
64  }
65 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
std::vector< int > etaMax_
std::vector< double > zHO_
std::vector< int > etaMin_
#define M_PI
int k[5][pyjets_maxn]
std::vector< double > etaTable_
std::vector< double > phioff_
std::vector< int > depthHBHE_
static const int nEtas_
std::vector< double > phibin_
std::vector< std::vector< int > > segmentation_
HcalNumberingFromPS::~HcalNumberingFromPS ( )
inline

Definition at line 14 of file HcalNumberingFromPS.h.

References egammaForCoreTracking_cff::depth, getEta(), getPhi(), phi, and unitID().

14 {}

Member Function Documentation

std::pair< int, int > HcalNumberingFromPS::getEta ( const int &  det,
const math::XYZVectorD pos 
) const

Definition at line 98 of file HcalNumberingFromPS.cc.

References funct::abs(), PVValHelper::eta, HcalBarrel, HcalEndcap, HcalOuter, and mps_fire::i.

Referenced by ~HcalNumberingFromPS().

98  {
99  int ieta(1);
100  int subdet(det);
101  double eta = std::abs(pos.Eta());
102  if (pos.Rho() > rMinHO_) {
103  subdet = static_cast<int>(HcalOuter);
104  double z = std::abs(pos.z());
105  if (z > zHO_[3]) {
106  if (eta <= etaTable_[10])
107  eta = etaTable_[10] + 0.001;
108  } else if (z > zHO_[1]) {
109  if (eta <= etaTable_[4])
110  eta = etaTable_[4] + 0.001;
111  }
112  }
113  for (unsigned int i = 1; i < etaTable_.size(); i++) {
114  if (eta < etaTable_[i]) {
115  ieta = i;
116  break;
117  }
118  }
119 
120  if ((subdet == static_cast<int>(HcalBarrel)) || (subdet == static_cast<int>(HcalOuter))) {
121  if (ieta > etaMax_[0])
122  ieta = etaMax_[0];
123  } else if (det == static_cast<int>(HcalEndcap)) {
124  if (ieta <= etaMin_[1])
125  ieta = etaMin_[1];
126  }
127  return std::make_pair(subdet, ieta);
128 }
std::vector< int > etaMax_
std::vector< double > zHO_
std::vector< int > etaMin_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< double > etaTable_
std::pair< int, int > HcalNumberingFromPS::getPhi ( const int &  det,
const int &  ieta,
const double &  phi 
) const

Definition at line 130 of file HcalNumberingFromPS.cc.

References HcalEndcap, createfilelist::int, and units().

Referenced by ~HcalNumberingFromPS().

130  {
131  double fioff = ((det == static_cast<int>(HcalEndcap)) ? phioff_[1] : phioff_[0]);
132  double fibin = phibin_[ieta - 1];
133  int nphi = int((2._pi + 0.1 * fibin) / fibin);
134  double hphi = phi + fioff;
135  if (hphi < 0)
136  hphi += (2._pi);
137  int iphi = int(hphi / fibin) + 1;
138  if (iphi > nphi)
139  iphi = 1;
140  const double fiveDegInRad = 5._deg;
141  int units = int(fibin / fiveDegInRad + 0.5);
142  if (units < 1)
143  units = 1;
144  int iphi_skip = iphi;
145  if (units == 2)
146  iphi_skip = (iphi - 1) * 2 + 1;
147  else if (units == 4)
148  iphi_skip = (iphi - 1) * 4 - 1;
149  if (iphi_skip < 0)
150  iphi_skip += 72;
151  return std::make_pair(iphi, iphi_skip);
152 }
std::vector< double > phioff_
TString units(TString variable, Char_t axis)
std::vector< double > phibin_
HcalNumberingFromDDD::HcalID HcalNumberingFromPS::unitID ( int  det,
int  layer,
int  depth,
const math::XYZVectorD pos 
) const

Definition at line 67 of file HcalNumberingFromPS.cc.

References hitfit::deteta(), HcalBarrel, HcalEndcap, HcalOuter, and ecaldqm::zside().

Referenced by ~HcalNumberingFromPS().

70  {
71  int subdet = ((det == 3) ? static_cast<int>(HcalBarrel) : static_cast<int>(HcalEndcap));
72  std::pair<int, int> deteta = getEta(subdet, pos);
73  std::pair<int, int> iphi = getPhi(deteta.first, deteta.second, pos.Phi());
74  int newDepth(depth);
75  int zside = ((pos.z() > 0) ? 1 : 0);
76  if (deteta.first == static_cast<int>(HcalBarrel)) {
77  newDepth = segmentation_[deteta.second - 1][layer - 1];
78  if ((deteta.second == etaHBHE_) && (newDepth > depthHBHE_[0]))
79  newDepth = depthHBHE_[0];
80  } else if (deteta.first == static_cast<int>(HcalEndcap)) {
81  newDepth = segmentation_[deteta.second - 1][layer - 1];
82  if ((deteta.second == etaHBHE_) && (newDepth < depthHBHE_[1]))
83  newDepth = depthHBHE_[1];
84  if ((deteta.second == etaMax_[1]) && (newDepth > depth29Mx_))
85  --(deteta.second);
86  } else if (deteta.first == static_cast<int>(HcalOuter)) {
87  newDepth = 4;
88  }
89 #ifdef EDM_ML_DEBUG
90  edm::LogVerbatim("HcalSim") << "HcalNumberingFromPS:: det " << det << ":" << subdet << ":" << deteta.first
91  << "\t Eta " << pos.Eta() << ":" << deteta.second << "\t Phi " << pos.Phi() << ":"
92  << iphi.first << ":" << iphi.second << "\t Layer|Depth " << layer << ":" << depth << ":"
93  << newDepth;
94 #endif
95  return HcalNumberingFromDDD::HcalID(deteta.first, zside, newDepth, deteta.second, iphi.first, iphi.second, layer);
96 }
std::vector< int > etaMax_
int zside(DetId const &)
std::pair< int, int > getPhi(const int &det, const int &ieta, const double &phi) const
double deteta(const Fourvec &v, double zvert)
NOT USED ANYMORE: Get the detector (D0-specific), requires z-vertex.
Definition: fourvec.cc:214
std::pair< int, int > getEta(const int &det, const math::XYZVectorD &pos) const
std::vector< int > depthHBHE_
std::vector< std::vector< int > > segmentation_

Member Data Documentation

int HcalNumberingFromPS::depth29Mx_
private

Definition at line 24 of file HcalNumberingFromPS.h.

std::vector<int> HcalNumberingFromPS::depthHBHE_
private

Definition at line 23 of file HcalNumberingFromPS.h.

int HcalNumberingFromPS::etaHBHE_
private

Definition at line 24 of file HcalNumberingFromPS.h.

std::vector<int> HcalNumberingFromPS::etaMax_
private

Definition at line 23 of file HcalNumberingFromPS.h.

std::vector<int> HcalNumberingFromPS::etaMin_
private

Definition at line 23 of file HcalNumberingFromPS.h.

std::vector<double> HcalNumberingFromPS::etaTable_
private

Definition at line 22 of file HcalNumberingFromPS.h.

const int HcalNumberingFromPS::nEtas_ = 29
staticprivate

Definition at line 21 of file HcalNumberingFromPS.h.

std::vector<double> HcalNumberingFromPS::phibin_
private

Definition at line 22 of file HcalNumberingFromPS.h.

std::vector<double> HcalNumberingFromPS::phioff_
private

Definition at line 22 of file HcalNumberingFromPS.h.

double HcalNumberingFromPS::rMinHO_
private

Definition at line 25 of file HcalNumberingFromPS.h.

std::vector<std::vector<int> > HcalNumberingFromPS::segmentation_
private

Definition at line 27 of file HcalNumberingFromPS.h.

std::vector<double> HcalNumberingFromPS::zHO_
private

Definition at line 26 of file HcalNumberingFromPS.h.