CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes | Friends
HFClusterAlgo Class Reference

#include <HFClusterAlgo.h>

Classes

struct  HFCompleteHit
 

Public Member Functions

void clusterize (const HFRecHitCollection &hf, const CaloGeometry &geom, reco::HFEMClusterShapeCollection &clusters, reco::SuperClusterCollection &SuperClusters)
 
 HFClusterAlgo ()
 
void isMC (bool isMC)
 
void resetForRun ()
 
void setup (double minTowerEnergy, double seedThreshold, double maximumSL, double m_maximumRenergy, bool usePMTflag, bool usePulseflag, bool forcePulseFlagMC, int correctionSet)
 

Private Member Functions

bool isPMTHit (const HFRecHit &hfr)
 
bool makeCluster (const HcalDetId &seedid, const HFRecHitCollection &hf, const CaloGeometry *geom, reco::HFEMClusterShape &clusShp, reco::SuperCluster &SClus)
 

Private Attributes

std::vector< double > m_correctionByEta
 
int m_correctionSet
 
std::vector< double > m_cutByEta
 
bool m_forcePulseFlagMC
 
bool m_isMC
 
double m_maximumRenergy
 
double m_maximumSL
 
double m_minTowerEnergy
 
std::vector< double > m_seedmnEta
 
std::vector< double > m_seedmnPhi
 
std::vector< double > m_seedMXeta
 
std::vector< double > m_seedMXphi
 
double m_seedThreshold
 
bool m_usePMTFlag
 
bool m_usePulseFlag
 

Friends

class CompareHFCompleteHitET
 
class CompareHFCore
 

Detailed Description

Author
Kevin Klapoetke (Minnesota)

$Id:version 1.2

Author
K. Klapoetke – Minnesota

Definition at line 22 of file HFClusterAlgo.h.

Constructor & Destructor Documentation

HFClusterAlgo::HFClusterAlgo ( )

Definition at line 19 of file HFClusterAlgo.cc.

19  {
20  m_isMC = true; // safest
21 }

Member Function Documentation

void HFClusterAlgo::clusterize ( const HFRecHitCollection hf,
const CaloGeometry geomO,
reco::HFEMClusterShapeCollection clusters,
reco::SuperClusterCollection SuperClusters 
)

Analyze the hits

Definition at line 89 of file HFClusterAlgo.cc.

References edm::SortedCollection< T, SORT >::begin(), edm::SortedCollection< T, SORT >::end(), HFClusterAlgo::HFCompleteHit::energy, HFClusterAlgo::HFCompleteHit::et, PVValHelper::eta, edm::SortedCollection< T, SORT >::find(), relativeConstraints::geom, CaloGeometry::getGeometry(), CaloGeometry::getPosition(), HcalForward, photonIsolationHIProducer_cfi::hf, mps_fire::i, HFClusterAlgo::HFCompleteHit::id, indexByEta(), dqmiolumiharvest::j, dqmdumpme::k, SimDataFormats::CaloAnalysis::sc, and EZArrayFL< T >::size().

Referenced by isMC(), and HFEMClusterProducer::produce().

92  {
93  const CaloGeometry* geom(&geomO);
94  std::vector<HFCompleteHit> protoseeds, seeds;
96  std::vector<HFCompleteHit>::iterator i;
97  std::vector<HFCompleteHit>::iterator k;
98  int dP, dE, PWrap;
99  bool isok = true;
100  HFEMClusterShape clusShp;
101 
102  SuperCluster Sclus;
103  bool doCluster = false;
104 
105  for (j = hf.begin(); j != hf.end(); j++) {
106  const int aieta = j->id().ietaAbs();
107  int iz = (aieta - 29);
108  // only long fibers and not 29,40,41 allowed to be considered as seeds
109  if (j->id().depth() != 1)
110  continue;
111  if (aieta == 40 || aieta == 41 || aieta == 29)
112  continue;
113 
114  if (iz < 0 || iz > 12) {
115  edm::LogWarning("HFClusterAlgo") << "Strange invalid HF hit: " << j->id();
116  continue;
117  }
118 
119  if (m_cutByEta[iz] < 0) {
120  double eta = geom->getPosition(j->id()).eta();
121  m_cutByEta[iz] = m_seedThreshold * cosh(eta); // convert ET to E for this ring
122  auto ccg = geom->getGeometry(j->id());
123  const CaloCellGeometry::CornersVec& CellCorners = ccg->getCorners();
124  for (size_t sc = 0; sc < CellCorners.size(); sc++) {
125  if (fabs(CellCorners[sc].z()) < 1200) {
126  if (fabs(CellCorners[sc].eta()) < m_seedmnEta[iz])
127  m_seedmnEta[iz] = fabs(CellCorners[sc].eta());
128  if (fabs(CellCorners[sc].eta()) > m_seedMXeta[iz])
129  m_seedMXeta[iz] = fabs(CellCorners[sc].eta());
130  }
131  }
132  }
133  double elong = j->energy() * m_correctionByEta[indexByEta(j->id())];
134  if (elong > m_cutByEta[iz]) {
135  j2 = hf.find(HcalDetId(HcalForward, j->id().ieta(), j->id().iphi(), 2));
136  double eshort = (j2 == hf.end()) ? (0) : (j2->energy());
137  if (j2 != hf.end())
138  eshort *= m_correctionByEta[indexByEta(j2->id())];
139  if (((elong - eshort) / (elong + eshort)) > m_maximumSL)
140  continue;
141  //if ((m_usePMTFlag)&&(j->flagField(4,1))) continue;
142  //if ((m_usePulseFlag)&&(j->flagField(1,1))) continue;
143  if (isPMTHit(*j))
144  continue;
145 
146  HFCompleteHit ahit;
147  double eta = geom->getPosition(j->id()).eta();
148  ahit.id = j->id();
149  ahit.energy = elong;
150  ahit.et = ahit.energy / cosh(eta);
151  protoseeds.push_back(ahit);
152  }
153  }
154 
155  if (!protoseeds.empty()) {
156  std::sort(protoseeds.begin(), protoseeds.end(), CompareHFCompleteHitET());
157  for (i = protoseeds.begin(); i != protoseeds.end(); i++) {
158  isok = true;
159  doCluster = false;
160 
161  if ((i == protoseeds.begin()) && (isok)) {
162  doCluster = true;
163  } else {
164  // check for overlap with existing clusters
165  for (k = seeds.begin(); isok && k != seeds.end(); k++) { //i->hits, k->seeds
166 
167  for (dE = -2; dE <= 2; dE++)
168  for (dP = -4; dP <= 4; dP += 2) {
169  PWrap = k->id.iphi() + dP;
170  if (PWrap < 0)
171  PWrap += 72;
172  if (PWrap > 72)
173  PWrap -= 72;
174 
175  if ((i->id.iphi() == PWrap) && (i->id.ieta() == k->id.ieta() + dE))
176  isok = false;
177  }
178  }
179  if (isok) {
180  doCluster = true;
181  }
182  }
183  if (doCluster) {
184  seeds.push_back(*i);
185 
186  bool clusterOk = makeCluster(i->id(), hf, geom, clusShp, Sclus);
187  if (clusterOk) { // cluster is _not_ ok if seed is rejected due to other cuts
188  clusterShapes.push_back(clusShp);
189  SuperClusters.push_back(Sclus);
190  }
191  }
192  } //end protoseed loop
193  } //end if seeCount
194 }
std::vector< double > m_cutByEta
Definition: HFClusterAlgo.h:54
double m_maximumSL
Definition: HFClusterAlgo.h:49
std::vector< double > m_correctionByEta
Definition: HFClusterAlgo.h:55
std::vector< T >::const_iterator const_iterator
std::vector< double > m_seedmnEta
Definition: HFClusterAlgo.h:56
friend class CompareHFCompleteHitET
Definition: HFClusterAlgo.h:46
l1t::ClusterShapes clusterShapes
Definition: classes.h:66
std::vector< double > m_seedMXeta
Definition: HFClusterAlgo.h:57
const_iterator end() const
static int indexByEta(HcalDetId id)
size_type size() const
Definition: EZArrayFL.h:67
iterator find(key_type k)
double m_seedThreshold
Definition: HFClusterAlgo.h:49
bool makeCluster(const HcalDetId &seedid, const HFRecHitCollection &hf, const CaloGeometry *geom, reco::HFEMClusterShape &clusShp, reco::SuperCluster &SClus)
bool isPMTHit(const HFRecHit &hfr)
const_iterator begin() const
void HFClusterAlgo::isMC ( bool  isMC)
inline
bool HFClusterAlgo::isPMTHit ( const HFRecHit hfr)
private

Definition at line 392 of file HFClusterAlgo.cc.

References CaloRecHit::flagField(), HcalCaloFlagLabels::HFDigiTime, and HcalCaloFlagLabels::HFLongShort.

392  {
393  bool pmthit = false;
394 
396  pmthit = true;
397  if (!(m_isMC && !m_forcePulseFlagMC))
399  pmthit = true;
400 
401  return pmthit;
402 }
bool m_forcePulseFlagMC
Definition: HFClusterAlgo.h:51
constexpr uint32_t flagField(int base, int width=1) const
Definition: CaloRecHit.h:46
bool HFClusterAlgo::makeCluster ( const HcalDetId seedid,
const HFRecHitCollection hf,
const CaloGeometry geom,
reco::HFEMClusterShape clusShp,
reco::SuperCluster SClus 
)
private

Definition at line 196 of file HFClusterAlgo.cc.

References funct::abs(), Calorimetry_cff::dp, edm::SortedCollection< T, SORT >::end(), PVValHelper::eta, PV3DBase< T, PVType, FrameType >::eta(), edm::SortedCollection< T, SORT >::find(), CaloGeometry::getPosition(), HcalForward, photons_cff::ids, training_settings::idx, HcalDetId::ieta(), HcalDetId::ietaAbs(), indexByEta(), HcalDetId::iphi(), dqm-mbProfile::log, M_PI, SiStripPI::max, AlCaHLTBitMon_ParallelJobs::p, PV3DBase< T, PVType, FrameType >::phi(), w, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), PV3DBase< T, PVType, FrameType >::z(), and HcalDetId::zside().

200  {
201  double w = 0; //sum over all log E's
202  double wgt = 0;
203  double w_e = 0; //sum over ieat*energy
204  double w_x = 0;
205  double w_y = 0;
206  double w_z = 0;
207  double wp_e = 0; //sum over iphi*energy
208  double e_e = 0; //nonwieghted eta sum
209  double e_ep = 0; //nonweighted phi sum
210 
211  double l_3 = 0; //sum for enenergy in 3x3 long fibers etc.
212  double s_3 = 0;
213  double l_5 = 0;
214  double s_5 = 0;
215  double l_1 = 0;
216  double s_1 = 0;
217  int de, dp, phiWrap;
218  double l_1e = 0;
219  const GlobalPoint& sp = geom->getPosition(seedid);
220  std::vector<double> coreCanid;
221  std::vector<double>::const_iterator ci;
223  std::vector<DetId> usedHits;
224 
226  HcalDetId sid(HcalForward, seedid.ieta(), seedid.iphi(), 1);
227  si = hf.find(sid);
228 
229  bool clusterOk = true; // assume the best to start...
230 
231  // lots happens here
232  // edge type 1 has 40/41 in 3x3 and 5x5
233  bool edge_type1 = seedid.ietaAbs() == 39 && (seedid.iphi() % 4) == 3;
234 
235  double e_seed = si->energy() * m_correctionByEta[indexByEta(si->id())];
236 
237  for (de = -2; de <= 2; de++)
238  for (dp = -4; dp <= 4; dp += 2) {
239  phiWrap = seedid.iphi() + dp;
240  if (phiWrap < 0)
241  phiWrap += 72;
242  if (phiWrap > 72)
243  phiWrap -= 72;
244 
245  /* Handling of phi-width change problems */
246  if (edge_type1 && de == seedid.zside()) {
247  if (dp == -2) { // we want it in the 3x3
248  phiWrap -= 2;
249  if (phiWrap < 0)
250  phiWrap += 72;
251  } else if (dp == -4) {
252  continue; // but not double counted in 5x5
253  }
254  }
255 
256  HcalDetId idl(HcalForward, seedid.ieta() + de, phiWrap, 1);
257  HcalDetId ids(HcalForward, seedid.ieta() + de, phiWrap, 2);
258 
259  il = hf.find(idl);
260  is = hf.find(ids);
261 
262  double e_long = 1.0;
263  double e_short = 0.0;
264  if (il != hf.end())
265  e_long = il->energy() * m_correctionByEta[indexByEta(il->id())];
266  if (e_long <= m_minTowerEnergy)
267  e_long = 0.0;
268  if (is != hf.end())
269  e_short = is->energy() * m_correctionByEta[indexByEta(is->id())];
270  if (e_short <= m_minTowerEnergy)
271  e_short = 0.0;
272  double eRatio = (e_long - e_short) / std::max(1.0, (e_long + e_short));
273 
274  // require S/L > a minimum amount for inclusion
275  if ((abs(eRatio) > m_maximumSL) && (std::max(e_long, e_short) > m_maximumRenergy)) {
276  if (dp == 0 && de == 0)
277  clusterOk = false; // somehow, the seed is hosed
278  continue;
279  }
280 
281  if ((il != hf.end()) && (isPMTHit(*il))) {
282  if (dp == 0 && de == 0)
283  clusterOk = false; // somehow, the seed is hosed
284  continue; //continue to next hit, do not include this one in cluster
285  }
286 
287  if (e_long > m_minTowerEnergy && il != hf.end()) {
288  // record usage
289  usedHits.push_back(idl.rawId());
290  // always in the 5x5
291  l_5 += e_long;
292  // maybe in the 3x3
293  if ((de > -2) && (de < 2) && (dp > -4) && (dp < 4)) {
294  l_3 += e_long;
295 
296  // sometimes in the 1x1
297  if ((dp == 0) && (de == 0)) {
298  l_1 = e_long;
299  }
300 
301  // maybe in the core?
302  if ((de > -2) && (de < 2) && (dp > -4) && (dp < 4) && (e_long > (.5 * e_seed))) {
303  coreCanid.push_back(e_long);
304  }
305 
306  // position calculation
307  const GlobalPoint& p = geom->getPosition(idl);
308 
309  double d_p = p.phi() - sp.phi();
310  while (d_p < -M_PI)
311  d_p += 2 * M_PI;
312  while (d_p > M_PI)
313  d_p -= 2 * M_PI;
314  double d_e = p.eta() - sp.eta();
315 
316  wgt = log((e_long));
317  if (wgt > 0) {
318  w += wgt;
319  w_e += (d_e)*wgt;
320  wp_e += (d_p)*wgt;
321  e_e += d_e;
322  e_ep += d_p;
323 
324  w_x += (p.x()) * wgt; //(p.x()-sp.x())*wgt;
325  w_y += (p.y()) * wgt;
326  w_z += (p.z()) * wgt;
327  }
328  }
329  } else {
330  if (dp == 0 && de == 0)
331  clusterOk = false; // somehow, the seed is hosed
332  }
333 
334  if (e_short > m_minTowerEnergy && is != hf.end()) {
335  // record usage
336  usedHits.push_back(ids.rawId());
337  // always in the 5x5
338  s_5 += e_short;
339  // maybe in the 3x3
340  if ((de > -2) && (de < 2) && (dp > -4) && (dp < 4)) {
341  s_3 += e_short;
342  }
343  // sometimes in the 1x1
344  if ((dp == 0) && (de == 0)) {
345  s_1 = e_short;
346  }
347  }
348  }
349 
350  if (!clusterOk)
351  return false;
352 
353  //Core sorting done here
354  std::sort(coreCanid.begin(), coreCanid.end(), CompareHFCore());
355  for (ci = coreCanid.begin(); ci != coreCanid.end(); ci++) {
356  if (ci == coreCanid.begin()) {
357  l_1e = *ci;
358  } else if (*ci > .5 * l_1e) {
359  l_1e += *ci;
360  }
361  } //core sorting end
362 
363  double z_ = w_z / w;
364  double x_ = w_x / w;
365  double y_ = w_y / w;
366  math::XYZPoint xyzclus(x_, y_, z_);
367  //calcualte position, final
368  double eta = xyzclus.eta(); //w_e/w+sp.eta();
369 
370  double phi = xyzclus.phi(); //(wp_e/w)+sp.phi();
371 
372  while (phi < -M_PI)
373  phi += 2 * M_PI;
374  while (phi > M_PI)
375  phi -= 2 * M_PI;
376 
377  //calculate cell phi and cell eta
378  int idx = fabs(seedid.ieta()) - 29;
379  int ipx = seedid.iphi();
380  double Cphi = (phi - m_seedmnPhi[ipx]) / (m_seedMXphi[ipx] - m_seedmnPhi[ipx]);
381  double Ceta = (fabs(eta) - m_seedmnEta[idx]) / (m_seedMXeta[idx] - m_seedmnEta[idx]);
382 
383  //return HFEMClusterShape, SuperCluster
384  HFEMClusterShape myClusShp(l_1, s_1, l_3, s_3, l_5, s_5, l_1e, Ceta, Cphi, seedid);
385  clusShp = myClusShp;
386 
387  SuperCluster MySclus(l_3, xyzclus);
388  Sclus = MySclus;
389 
390  return clusterOk;
391 }
double m_minTowerEnergy
Definition: HFClusterAlgo.h:49
double m_maximumRenergy
Definition: HFClusterAlgo.h:49
const double w
Definition: UKUtility.cc:23
int zside() const
get the z-side of the cell (1/-1)
Definition: HcalDetId.h:141
double m_maximumSL
Definition: HFClusterAlgo.h:49
std::vector< double > m_correctionByEta
Definition: HFClusterAlgo.h:55
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
std::vector< T >::const_iterator const_iterator
T y() const
Definition: PV3DBase.h:60
std::vector< double > m_seedmnEta
Definition: HFClusterAlgo.h:56
friend class CompareHFCore
Definition: HFClusterAlgo.h:47
std::vector< double > m_seedMXeta
Definition: HFClusterAlgo.h:57
T z() const
Definition: PV3DBase.h:61
int ieta() const
get the cell ieta
Definition: HcalDetId.h:155
GlobalPoint getPosition(const DetId &id) const
Get the position of a given detector id.
Definition: CaloGeometry.cc:50
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< double > m_seedmnPhi
Definition: HFClusterAlgo.h:58
#define M_PI
int ietaAbs() const
get the absolute value of the cell ieta
Definition: HcalDetId.h:148
const_iterator end() const
static int indexByEta(HcalDetId id)
int iphi() const
get the cell iphi
Definition: HcalDetId.h:157
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
std::vector< double > m_seedMXphi
Definition: HFClusterAlgo.h:59
T eta() const
Definition: PV3DBase.h:73
iterator find(key_type k)
T x() const
Definition: PV3DBase.h:59
bool isPMTHit(const HFRecHit &hfr)
void HFClusterAlgo::resetForRun ( )

Definition at line 403 of file HFClusterAlgo.cc.

References cuy::ii.

Referenced by HFEMClusterProducer::beginRun(), and isMC().

403  {
404  edm::LogInfo("HFClusterAlgo") << "Resetting for Run!";
405  for (int ii = 0; ii < 13; ii++) {
406  m_cutByEta.push_back(-1);
407  m_seedmnEta.push_back(99);
408  m_seedMXeta.push_back(-1);
409  }
410 }
std::vector< double > m_cutByEta
Definition: HFClusterAlgo.h:54
std::vector< double > m_seedmnEta
Definition: HFClusterAlgo.h:56
std::vector< double > m_seedMXeta
Definition: HFClusterAlgo.h:57
ii
Definition: cuy.py:590
void HFClusterAlgo::setup ( double  minTowerEnergy,
double  seedThreshold,
double  maximumSL,
double  m_maximumRenergy,
bool  usePMTflag,
bool  usePulseflag,
bool  forcePulseFlagMC,
int  correctionSet 
)

Definition at line 40 of file HFClusterAlgo.cc.

References hfClusterShapes_cfi::forcePulseFlagMC, cuy::ii, M_PI, hfClusterShapes_cfi::maximumRenergy, hfClusterShapes_cfi::maximumSL, MCMaterialCorrections_3XX, hfClusterShapes_cfi::minTowerEnergy, and doubleEMEnrichingFilter_cfi::seedThreshold.

Referenced by HFEMClusterProducer::HFEMClusterProducer().

47  {
51  m_usePMTFlag = usePMTflag;
52  m_usePulseFlag = usePulseflag;
55  m_correctionSet = correctionSet;
56 
57  for (int ii = 0; ii < 13; ii++) {
58  m_cutByEta.push_back(-1);
59  m_seedmnEta.push_back(99);
60  m_seedMXeta.push_back(-1);
61  }
62  for (int ii = 0; ii < 73; ii++) {
63  double minphi = 0.0872664 * (ii - 1);
64  double maxphi = 0.0872664 * (ii + 1);
65  while (minphi < -M_PI)
66  minphi += 2 * M_PI;
67  while (minphi > M_PI)
68  minphi -= 2 * M_PI;
69  while (maxphi < -M_PI)
70  maxphi += 2 * M_PI;
71  while (maxphi > M_PI)
72  maxphi -= 2 * M_PI;
73  if (ii == 37)
74  minphi = -3.1415904;
75  m_seedmnPhi.push_back(minphi);
76  m_seedMXphi.push_back(maxphi);
77  }
78 
79  // always set all the corrections to one...
80  for (int ii = 0; ii < 13 * 2; ii++)
81  m_correctionByEta.push_back(1.0);
82  if (m_correctionSet == 1) { // corrections for material from MC
83  for (int ii = 0; ii < 13 * 2; ii++)
85  }
86 }
double m_minTowerEnergy
Definition: HFClusterAlgo.h:49
double m_maximumRenergy
Definition: HFClusterAlgo.h:49
bool m_forcePulseFlagMC
Definition: HFClusterAlgo.h:51
std::vector< double > m_cutByEta
Definition: HFClusterAlgo.h:54
double m_maximumSL
Definition: HFClusterAlgo.h:49
std::vector< double > m_correctionByEta
Definition: HFClusterAlgo.h:55
std::vector< double > m_seedmnEta
Definition: HFClusterAlgo.h:56
static const double MCMaterialCorrections_3XX[]
std::vector< double > m_seedMXeta
Definition: HFClusterAlgo.h:57
std::vector< double > m_seedmnPhi
Definition: HFClusterAlgo.h:58
ii
Definition: cuy.py:590
#define M_PI
std::vector< double > m_seedMXphi
Definition: HFClusterAlgo.h:59
double m_seedThreshold
Definition: HFClusterAlgo.h:49

Friends And Related Function Documentation

friend class CompareHFCompleteHitET
friend

Definition at line 46 of file HFClusterAlgo.h.

friend class CompareHFCore
friend

Definition at line 47 of file HFClusterAlgo.h.

Member Data Documentation

std::vector<double> HFClusterAlgo::m_correctionByEta
private

Definition at line 55 of file HFClusterAlgo.h.

int HFClusterAlgo::m_correctionSet
private

Definition at line 53 of file HFClusterAlgo.h.

std::vector<double> HFClusterAlgo::m_cutByEta
private

Definition at line 54 of file HFClusterAlgo.h.

bool HFClusterAlgo::m_forcePulseFlagMC
private

Definition at line 51 of file HFClusterAlgo.h.

bool HFClusterAlgo::m_isMC
private

Definition at line 52 of file HFClusterAlgo.h.

Referenced by isMC().

double HFClusterAlgo::m_maximumRenergy
private

Definition at line 49 of file HFClusterAlgo.h.

double HFClusterAlgo::m_maximumSL
private

Definition at line 49 of file HFClusterAlgo.h.

double HFClusterAlgo::m_minTowerEnergy
private

Definition at line 49 of file HFClusterAlgo.h.

std::vector<double> HFClusterAlgo::m_seedmnEta
private

Definition at line 56 of file HFClusterAlgo.h.

std::vector<double> HFClusterAlgo::m_seedmnPhi
private

Definition at line 58 of file HFClusterAlgo.h.

std::vector<double> HFClusterAlgo::m_seedMXeta
private

Definition at line 57 of file HFClusterAlgo.h.

std::vector<double> HFClusterAlgo::m_seedMXphi
private

Definition at line 59 of file HFClusterAlgo.h.

double HFClusterAlgo::m_seedThreshold
private

Definition at line 49 of file HFClusterAlgo.h.

bool HFClusterAlgo::m_usePMTFlag
private

Definition at line 50 of file HFClusterAlgo.h.

bool HFClusterAlgo::m_usePulseFlag
private

Definition at line 51 of file HFClusterAlgo.h.