CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
hgcal::EGammaPCAHelper Class Reference

#include <EgammaPCAHelper.h>

Public Types

typedef ROOT::Math::Transform3D::Point Point
 
typedef ROOT::Math::Transform3D Transform3D
 

Public Member Functions

const math::XYZVectoraxis () const
 
const math::XYZPointbarycenter () const
 
void clear ()
 
float clusterDepthCompatibility (const LongDeps &, float &measuredDepth, float &expectedDepth, float &expectedSigma)
 
void computePCA (float radius, bool withHalo=true)
 
void computeShowerWidth (float radius, bool withHalo=true)
 
 EGammaPCAHelper ()
 
const TVectorD & eigenValues () const
 
LongDeps energyPerLayer (float radius, bool withHalo=true)
 
void fillHitMap (const HGCRecHitCollection &HGCEERecHits, const HGCRecHitCollection &HGCFHRecHits, const HGCRecHitCollection &HGCBHRecHits)
 to compute from inside - once per event More...
 
std::map< DetId, const HGCRecHit * > * getHitMap ()
 
void pcaInitialComputation ()
 
const TPrincipal & pcaResult ()
 
void printHits (float radius) const
 
void setdEdXWeights (const std::vector< double > &dEdX)
 
void setHitMap (std::map< DetId, const HGCRecHit * > *hitMap)
 to set from outside - once per event More...
 
void setRecHitTools (const hgcal::RecHitTools *recHitTools)
 
double sigmaEE () const
 
double sigmaPP () const
 
const TVectorD & sigmas () const
 
double sigmaUU () const
 
double sigmaVV () const
 
void storeRecHits (const reco::CaloCluster &theCluster)
 
void storeRecHits (const reco::HGCalMultiCluster &cluster)
 
 ~EGammaPCAHelper ()
 

Private Member Functions

bool checkIteration () const
 
float findZFirstLayer (const LongDeps &) const
 
void storeRecHits (const std::vector< std::pair< DetId, float >> &hf)
 

Private Attributes

math::XYZVector axis_
 
math::XYZPoint barycenter_
 
bool debug_
 
std::vector< double > dEdXWeights_
 
std::map< DetId, const HGCRecHit * > * hitMap_
 
int hitMapOrigin_
 
std::vector< double > invThicknessCorrection_
 
unsigned int maxlayer_
 
std::unique_ptr< TPrincipal > pca_
 
int pcaIteration_
 
bool recHitsStored_
 
const hgcal::RecHitToolsrecHitTools_
 
ShowerDepth showerDepth_
 
double sige_
 
double sigp_
 
double sigu_
 
double sigv_
 
const reco::CaloClustertheCluster_
 
std::vector< SpottheSpots_
 
Transform3D trans_
 

Detailed Description

Definition at line 33 of file EgammaPCAHelper.h.

Member Typedef Documentation

typedef ROOT::Math::Transform3D::Point hgcal::EGammaPCAHelper::Point

Definition at line 36 of file EgammaPCAHelper.h.

typedef ROOT::Math::Transform3D hgcal::EGammaPCAHelper::Transform3D

Definition at line 35 of file EgammaPCAHelper.h.

Constructor & Destructor Documentation

EGammaPCAHelper::EGammaPCAHelper ( )

Definition at line 16 of file EgammaPCAHelper.cc.

17  : // Thickness correction to dEdx weights
18  // (100um, 200um, 300um silicon)
19  // See RecoLocalCalo.HGCalRecProducers.HGCalRecHit_cfi
20  invThicknessCorrection_({1. / 1.132, 1. / 1.092, 1. / 1.084}),
21  pca_(new TPrincipal(3, "D")) {
22  hitMapOrigin_ = 0;
23  hitMap_ = new std::map<DetId, const HGCRecHit*>();
24  debug_ = false;
25 }
std::map< DetId, const HGCRecHit * > * hitMap_
std::unique_ptr< TPrincipal > pca_
std::vector< double > invThicknessCorrection_
EGammaPCAHelper::~EGammaPCAHelper ( )

Definition at line 27 of file EgammaPCAHelper.cc.

References hitMap_, and hitMapOrigin_.

27  {
28  if (hitMapOrigin_ == 2)
29  delete hitMap_;
30 }
std::map< DetId, const HGCRecHit * > * hitMap_

Member Function Documentation

const math::XYZVector& hgcal::EGammaPCAHelper::axis ( ) const
inline

Definition at line 63 of file EgammaPCAHelper.h.

References axis_, and computeShowerWidth().

Referenced by HGCalEgammaIDHelper::axis().

63 { return axis_; }
const math::XYZPoint& hgcal::EGammaPCAHelper::barycenter ( ) const
inline

Definition at line 62 of file EgammaPCAHelper.h.

References barycenter_.

Referenced by HGCalEgammaIDHelper::barycenter().

62 { return barycenter_; }
math::XYZPoint barycenter_
bool EGammaPCAHelper::checkIteration ( ) const
private

Definition at line 241 of file EgammaPCAHelper.cc.

References gather_cfg::cout, debug_, and pcaIteration_.

Referenced by clusterDepthCompatibility(), energyPerLayer(), sigmaEE(), sigmaPP(), sigmas(), sigmaUU(), and sigmaVV().

241  {
242  if (pcaIteration_ == 0) {
243  if (debug_)
244  std::cout << " The PCA has not been run yet " << std::endl;
245  return false;
246  } else if (pcaIteration_ == 1) {
247  if (debug_)
248  std::cout << " The PCA has been run only once - careful " << std::endl;
249  return false;
250  } else if (pcaIteration_ == -1) {
251  if (debug_)
252  std::cout << " Not enough layers to perform PCA " << std::endl;
253  return false;
254  }
255  return true;
256 }
void EGammaPCAHelper::clear ( void  )

Definition at line 258 of file EgammaPCAHelper.cc.

References pcaIteration_, sige_, sigp_, sigu_, sigv_, and theSpots_.

Referenced by HGCalEgammaIDHelper::computeHGCAL(), and sigmas().

258  {
259  theSpots_.clear();
260  pcaIteration_ = 0;
261  sigu_ = 0.;
262  sigv_ = 0.;
263  sigp_ = 0.;
264  sige_ = 0.;
265 }
std::vector< Spot > theSpots_
float EGammaPCAHelper::clusterDepthCompatibility ( const LongDeps ld,
float &  measuredDepth,
float &  expectedDepth,
float &  expectedSigma 
)

Definition at line 333 of file EgammaPCAHelper.cc.

References funct::abs(), axis_, barycenter_, checkIteration(), DeadROC_duringRun::dir, hgcal::LongDeps::energyEE(), findZFirstLayer(), hgcal::ShowerDepth::getClusterDepthCompatibility(), and showerDepth_.

Referenced by HGCalEgammaIDHelper::clusterDepthCompatibility(), and sigmas().

336  {
337  expectedDepth = -999.;
338  expectedSigma = -999.;
339  measuredDepth = -999.;
340  if (!checkIteration())
341  return -999.;
342 
343  float z = findZFirstLayer(ld);
344  math::XYZVector dir = axis_.unit();
345  measuredDepth = std::abs((z - std::abs(barycenter_.z())) / dir.z());
346  return showerDepth_.getClusterDepthCompatibility(measuredDepth, ld.energyEE(), expectedDepth, expectedSigma);
347 }
math::XYZPoint barycenter_
float energyEE() const
Definition: LongDeps.h:25
float findZFirstLayer(const LongDeps &) const
float getClusterDepthCompatibility(float measuredDepth, float emEnergy, float &expectedDepth, float &expectedSigma) const
Definition: ShowerDepth.cc:6
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
bool checkIteration() const
void EGammaPCAHelper::computePCA ( float  radius,
bool  withHalo = true 
)

Definition at line 132 of file EgammaPCAHelper.cc.

References axis_, barycenter_, gather_cfg::cout, debug_, mps_fire::i, hgcal::RecHitTools::lastLayerEE(), hgcalTopologyTester_cfi::layers, DTRecHitClients_cfi::local, pca_, pcaIteration_, CosmicsPD_Skims::radius, recHitTools_, theSpots_, and trans_.

Referenced by HGCalEgammaIDHelper::computeHGCAL(), and pcaInitialComputation().

132  {
133  // very important - to reset
134  pca_.reset(new TPrincipal(3, "D"));
135  bool initialCalculation = radius < 0;
136  if (debug_)
137  std::cout << " Initial calculation " << initialCalculation << std::endl;
138  if (initialCalculation && withHalo) {
139  edm::LogWarning("EGammaPCAHelper") << "Warning - in the first iteration, the halo hits are excluded " << std::endl;
140  withHalo = false;
141  }
142 
143  float radius2 = radius * radius;
144  if (!initialCalculation) {
145  math::XYZVector mainAxis(axis_);
146  mainAxis.unit();
147  math::XYZVector phiAxis(barycenter_.x(), barycenter_.y(), 0);
148  math::XYZVector udir(mainAxis.Cross(phiAxis));
149  udir = udir.unit();
152  Point(barycenter_ + udir),
153  Point(0, 0, 0),
154  Point(0., 0., 1.),
155  Point(1., 0., 0.));
156  }
157 
158  std::set<int> layers;
159  for (const auto& spot : theSpots_) {
160  if (spot.layer() > recHitTools_->lastLayerEE())
161  continue;
162  if (!withHalo && (!spot.isCore()))
163  continue;
164  if (initialCalculation) {
165  // initial calculation, take only core hits
166  if (!spot.isCore())
167  continue;
168  layers.insert(spot.layer());
169  for (int i = 0; i < spot.multiplicity(); ++i)
170  pca_->AddRow(spot.row());
171  } else {
172  // use a cylinder, include all hits
173  math::XYZPoint local = trans_(Point(spot.row()[0], spot.row()[1], spot.row()[2]));
174  if (local.Perp2() > radius2)
175  continue;
176  layers.insert(spot.layer());
177  for (int i = 0; i < spot.multiplicity(); ++i)
178  pca_->AddRow(spot.row());
179  }
180  }
181  if (debug_)
182  std::cout << " Nlayers " << layers.size() << std::endl;
183  if (layers.size() < 3) {
184  pcaIteration_ = -1;
185  return;
186  }
187  pca_->MakePrincipals();
188  ++pcaIteration_;
189  const TVectorD& means = *(pca_->GetMeanValues());
190  const TMatrixD& eigens = *(pca_->GetEigenVectors());
191 
192  barycenter_ = math::XYZPoint(means[0], means[1], means[2]);
193  axis_ = math::XYZVector(eigens(0, 0), eigens(1, 0), eigens(2, 0));
194  if (axis_.z() * barycenter_.z() < 0.0) {
195  axis_ = -1. * axis_;
196  }
197 }
math::XYZPoint barycenter_
std::unique_ptr< TPrincipal > pca_
std::vector< Spot > theSpots_
unsigned int lastLayerEE() const
Definition: RecHitTools.h:62
ROOT::Math::Transform3D Transform3D
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
ROOT::Math::Transform3D::Point Point
const hgcal::RecHitTools * recHitTools_
void EGammaPCAHelper::computeShowerWidth ( float  radius,
bool  withHalo = true 
)

Definition at line 199 of file EgammaPCAHelper.cc.

References SiPixelRawToDigiRegional_cfi::deltaPhi, reco::CaloCluster::eta(), DTRecHitClients_cfi::local, reco::CaloCluster::phi(), CosmicsPD_Skims::radius, sige_, sigp_, sigu_, sigv_, mathSSE::sqrt(), theCluster_, theSpots_, and trans_.

Referenced by axis(), and HGCalEgammaIDHelper::computeHGCAL().

199  {
200  sigu_ = 0.;
201  sigv_ = 0.;
202  sigp_ = 0.;
203  sige_ = 0.;
204  double cyl_ene = 0.;
205 
206  float radius2 = radius * radius;
207  for (const auto& spot : theSpots_) {
208  Point globalPoint(spot.row()[0], spot.row()[1], spot.row()[2]);
209  math::XYZPoint local = trans_(globalPoint);
210  if (local.Perp2() > radius2)
211  continue;
212 
213  // Select halo hits or not
214  if (withHalo && spot.fraction() < 0)
215  continue;
216  if (!withHalo && !(spot.isCore()))
217  continue;
218 
219  sige_ += (globalPoint.eta() - theCluster_->eta()) * (globalPoint.eta() - theCluster_->eta()) * spot.energy();
220  sigp_ += deltaPhi(globalPoint.phi(), theCluster_->phi()) * deltaPhi(globalPoint.phi(), theCluster_->phi()) *
221  spot.energy();
222 
223  sigu_ += local.x() * local.x() * spot.energy();
224  sigv_ += local.y() * local.y() * spot.energy();
225  cyl_ene += spot.energy();
226  }
227 
228  if (cyl_ene > 0.) {
229  const double inv_cyl_ene = 1. / cyl_ene;
230  sigu_ = sigu_ * inv_cyl_ene;
231  sigv_ = sigv_ * inv_cyl_ene;
232  sigp_ = sigp_ * inv_cyl_ene;
233  sige_ = sige_ * inv_cyl_ene;
234  }
235  sigu_ = std::sqrt(sigu_);
236  sigv_ = std::sqrt(sigv_);
237  sigp_ = std::sqrt(sigp_);
238  sige_ = std::sqrt(sige_);
239 }
double eta() const
pseudorapidity of cluster centroid
Definition: CaloCluster.h:180
T sqrt(T t)
Definition: SSEVec.h:19
std::vector< Spot > theSpots_
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
Structure Point Contains parameters of Gaussian fits to DMRs.
Definition: DMRtrends.cc:57
const reco::CaloCluster * theCluster_
double phi() const
azimuthal angle of cluster centroid
Definition: CaloCluster.h:183
const TVectorD& hgcal::EGammaPCAHelper::eigenValues ( ) const
inline

Definition at line 72 of file EgammaPCAHelper.h.

References pca_.

Referenced by HGCalEgammaIDHelper::eigenValues().

72 { return *pca_->GetEigenValues(); }
std::unique_ptr< TPrincipal > pca_
LongDeps EGammaPCAHelper::energyPerLayer ( float  radius,
bool  withHalo = true 
)

Definition at line 267 of file EgammaPCAHelper.cc.

References axis_, barycenter_, checkIteration(), debug_, f, DetId::HGCalEE, DetId::HGCalHSc, DetId::HGCalHSi, HGCEE, HGCHEB, HGCHEF, hgcalTopologyTester_cfi::layers, DTRecHitClients_cfi::local, maxlayer_, or, CosmicsPD_Skims::radius, theSpots_, and trans_.

Referenced by HGCalEgammaIDHelper::energyPerLayer(), and sigmas().

267  {
268  if (debug_)
269  checkIteration();
270  std::set<int> layers;
271  float radius2 = radius * radius;
272  std::vector<float> energyPerLayer(maxlayer_ + 1, 0.f);
273  math::XYZVector mainAxis(axis_);
274  mainAxis.unit();
275  math::XYZVector phiAxis(barycenter_.x(), barycenter_.y(), 0);
276  math::XYZVector udir(mainAxis.Cross(phiAxis));
277  udir = udir.unit();
280  Point(barycenter_ + udir),
281  Point(0, 0, 0),
282  Point(0., 0., 1.),
283  Point(1., 0., 0.));
284  float energyEE = 0.;
285  float energyFH = 0.;
286  float energyBH = 0.;
287 
288  for (const auto& spot : theSpots_) {
289  if (!withHalo && !spot.isCore())
290  continue;
291  math::XYZPoint local = trans_(Point(spot.row()[0], spot.row()[1], spot.row()[2]));
292  if (local.Perp2() > radius2)
293  continue;
294  energyPerLayer[spot.layer()] += spot.energy();
295  layers.insert(spot.layer());
296  if (spot.detId().det() == DetId::HGCalEE or spot.subdet() == HGCEE) {
297  energyEE += spot.energy();
298  } else if (spot.detId().det() == DetId::HGCalHSi or spot.subdet() == HGCHEF) {
299  energyFH += spot.energy();
300  } else if (spot.detId().det() == DetId::HGCalHSc or spot.subdet() == HGCHEB) {
301  energyBH += spot.energy();
302  }
303  }
304  return LongDeps(radius, energyPerLayer, energyEE, energyFH, energyBH, layers);
305 }
math::XYZPoint barycenter_
LongDeps energyPerLayer(float radius, bool withHalo=true)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
double f[11][100]
std::vector< Spot > theSpots_
ROOT::Math::Transform3D Transform3D
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
bool checkIteration() const
ROOT::Math::Transform3D::Point Point
void EGammaPCAHelper::fillHitMap ( const HGCRecHitCollection HGCEERecHits,
const HGCRecHitCollection HGCFHRecHits,
const HGCRecHitCollection HGCBHRecHits 
)

to compute from inside - once per event

Definition at line 43 of file EgammaPCAHelper.cc.

References hitMap_, hitMapOrigin_, and pcaIteration_.

Referenced by HGCalEgammaIDHelper::eventInit().

45  {
46  hitMap_->clear();
47  for (const auto& hit : rechitsEE) {
48  hitMap_->emplace_hint(hitMap_->end(), hit.detid(), &hit);
49  }
50 
51  for (const auto& hit : rechitsFH) {
52  hitMap_->emplace_hint(hitMap_->end(), hit.detid(), &hit);
53  }
54 
55  for (const auto& hit : rechitsBH) {
56  hitMap_->emplace_hint(hitMap_->end(), hit.detid(), &hit);
57  }
58 
59  pcaIteration_ = 0;
60  hitMapOrigin_ = 2;
61 }
std::map< DetId, const HGCRecHit * > * hitMap_
float EGammaPCAHelper::findZFirstLayer ( const LongDeps ld) const
private

Definition at line 321 of file EgammaPCAHelper.cc.

References hgcal::LongDeps::energyPerLayer(), hgcal::RecHitTools::getPositionLayer(), maxlayer_, recHitTools_, and PV3DBase< T, PVType, FrameType >::z().

Referenced by clusterDepthCompatibility(), and sigmas().

321  {
322  unsigned int firstLayer = 0;
323  for (unsigned il = 1; il <= maxlayer_; ++il) {
324  if (ld.energyPerLayer()[il] > 0.) {
325  firstLayer = il;
326  break;
327  }
328  }
329  // Make dummy DetId to get abs(z) for layer
330  return recHitTools_->getPositionLayer(firstLayer).z();
331 }
T z() const
Definition: PV3DBase.h:61
GlobalPoint getPositionLayer(int layer, bool nose=false) const
Definition: RecHitTools.cc:141
const std::vector< float > & energyPerLayer() const
Definition: LongDeps.h:28
const hgcal::RecHitTools * recHitTools_
std::map<DetId, const HGCRecHit *>* hgcal::EGammaPCAHelper::getHitMap ( )
inline

Definition at line 53 of file EgammaPCAHelper.h.

References hitMap_, and setRecHitTools().

53 { return hitMap_; }
std::map< DetId, const HGCRecHit * > * hitMap_
void hgcal::EGammaPCAHelper::pcaInitialComputation ( )
inline

Definition at line 59 of file EgammaPCAHelper.h.

References computePCA(), and CosmicsPD_Skims::radius.

Referenced by HGCalEgammaIDHelper::computeHGCAL().

59 { computePCA(-1., false); }
void computePCA(float radius, bool withHalo=true)
const TPrincipal& hgcal::EGammaPCAHelper::pcaResult ( )
void EGammaPCAHelper::printHits ( float  radius) const

Definition at line 307 of file EgammaPCAHelper.cc.

References gather_cfg::cout, mps_fire::i, DTRecHitClients_cfi::local, CosmicsPD_Skims::radius, hgcal::Spot::row(), mathSSE::sqrt(), theSpots_, and trans_.

Referenced by ntuplePrintersDiff.TrackingParticlePrinter::__call__(), ntuplePrintersDiff.SeedPrinter::diff(), ntuplePrintersDiff.TrackPrinter::diff(), ntuplePrintersDiff.TrackingParticlePrinter::diff(), HGCalEgammaIDHelper::printHits(), ntuplePrintersDiff.SeedPrinter::printSeed(), ntuplePrintersDiff.TrackPrinter::printTrack(), and sigmas().

307  {
308  unsigned nSpots = theSpots_.size();
309  float radius2 = radius * radius;
310  for (unsigned i = 0; i < nSpots; ++i) {
311  Spot spot(theSpots_[i]);
312  math::XYZPoint local = trans_(Point(spot.row()[0], spot.row()[1], spot.row()[2]));
313  if (local.Perp2() < radius2) {
314  std::cout << i << " " << theSpots_[i].detId().rawId() << " " << theSpots_[i].layer() << " "
315  << theSpots_[i].energy() << " " << theSpots_[i].isCore();
316  std::cout << " " << std::sqrt(local.Perp2()) << std::endl;
317  }
318  }
319 }
T sqrt(T t)
Definition: SSEVec.h:19
std::vector< Spot > theSpots_
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
ROOT::Math::Transform3D::Point Point
void hgcal::EGammaPCAHelper::setdEdXWeights ( const std::vector< double > &  dEdX)
inline

Definition at line 57 of file EgammaPCAHelper.h.

References HGCalRecHit_cfi::dEdX, and dEdXWeights_.

Referenced by HGCalEgammaIDHelper::HGCalEgammaIDHelper().

57 { dEdXWeights_ = dEdX; }
std::vector< double > dEdXWeights_
void EGammaPCAHelper::setHitMap ( std::map< DetId, const HGCRecHit * > *  hitMap)

to set from outside - once per event

Definition at line 32 of file EgammaPCAHelper.cc.

References hitMap_, hitMapOrigin_, and pcaIteration_.

32  {
33  hitMapOrigin_ = 1;
34  hitMap_ = hitMap;
35  pcaIteration_ = 0;
36 }
std::map< DetId, const HGCRecHit * > * hitMap_
void EGammaPCAHelper::setRecHitTools ( const hgcal::RecHitTools recHitTools)

Definition at line 38 of file EgammaPCAHelper.cc.

References hgcal::RecHitTools::lastLayerBH(), maxlayer_, and recHitTools_.

Referenced by HGCalEgammaIDHelper::eventInit(), and getHitMap().

38  {
39  recHitTools_ = recHitTools;
41 }
unsigned int lastLayerBH() const
Definition: RecHitTools.h:65
const hgcal::RecHitTools * recHitTools_
double hgcal::EGammaPCAHelper::sigmaEE ( ) const
inline

Definition at line 69 of file EgammaPCAHelper.h.

References checkIteration(), and sige_.

Referenced by HGCalEgammaIDHelper::sigmaEE().

69 { return checkIteration() ? sige_ : -1.; }
bool checkIteration() const
double hgcal::EGammaPCAHelper::sigmaPP ( ) const
inline

Definition at line 70 of file EgammaPCAHelper.h.

References checkIteration(), and sigp_.

Referenced by HGCalEgammaIDHelper::sigmaPP().

70 { return checkIteration() ? sigp_ : -1.; }
bool checkIteration() const
const TVectorD& hgcal::EGammaPCAHelper::sigmas ( ) const
inline
double hgcal::EGammaPCAHelper::sigmaUU ( ) const
inline

Definition at line 67 of file EgammaPCAHelper.h.

References checkIteration(), and sigu_.

Referenced by HGCalEgammaIDHelper::sigmaUU().

67 { return checkIteration() ? sigu_ : -1.; }
bool checkIteration() const
double hgcal::EGammaPCAHelper::sigmaVV ( ) const
inline

Definition at line 68 of file EgammaPCAHelper.h.

References checkIteration(), and sigv_.

Referenced by HGCalEgammaIDHelper::sigmaVV().

68 { return checkIteration() ? sigv_ : -1.; }
bool checkIteration() const
void EGammaPCAHelper::storeRecHits ( const reco::CaloCluster theCluster)

Definition at line 73 of file EgammaPCAHelper.cc.

References reco::CaloCluster::hitsAndFractions(), and theCluster_.

Referenced by HGCalEgammaIDHelper::computeHGCAL(), sigmas(), and storeRecHits().

73  {
74  theCluster_ = &cluster;
75  storeRecHits(cluster.hitsAndFractions());
76 }
void storeRecHits(const reco::CaloCluster &theCluster)
const reco::CaloCluster * theCluster_
void EGammaPCAHelper::storeRecHits ( const reco::HGCalMultiCluster cluster)

Definition at line 63 of file EgammaPCAHelper.cc.

References reco::HGCalMultiCluster::begin(), reco::HGCalMultiCluster::end(), photonIsolationHIProducer_cfi::hf, mps_fire::result, storeRecHits(), and theCluster_.

63  {
64  theCluster_ = &cluster;
65  std::vector<std::pair<DetId, float>> result;
66  for (reco::HGCalMultiCluster::component_iterator it = cluster.begin(); it != cluster.end(); it++) {
67  const std::vector<std::pair<DetId, float>>& hf = (*it)->hitsAndFractions();
68  result.insert(result.end(), hf.begin(), hf.end());
69  }
70  storeRecHits(result);
71 }
component_iterator begin() const
void storeRecHits(const reco::CaloCluster &theCluster)
component_iterator end() const
const reco::CaloCluster * theCluster_
void EGammaPCAHelper::storeRecHits ( const std::vector< std::pair< DetId, float >> &  hf)
private

Definition at line 78 of file EgammaPCAHelper.cc.

References gather_cfg::cout, debug_, dEdXWeights_, DetId::det(), dqmdumpme::first, HLT_2018_cff::fraction, hgcal::RecHitTools::getLayerWithOffset(), hgcal::RecHitTools::getPosition(), hgcal::RecHitTools::getSiThickIndex(), photonIsolationHIProducer_cfi::hf, hitMap_, invThicknessCorrection_, dqmiolumiharvest::j, pcaIteration_, DetId::rawId(), recHitTools_, sige_, sigp_, sigu_, sigv_, theSpots_, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

78  {
79  std::vector<double> pcavars;
80  pcavars.resize(3, 0.);
81  theSpots_.clear();
82  pcaIteration_ = 0;
83 
84  sigu_ = 0.;
85  sigv_ = 0.;
86  sigp_ = 0.;
87  sige_ = 0.;
88 
89  unsigned hfsize = hf.size();
90  if (debug_)
91  std::cout << "The seed cluster constains " << hfsize << " hits " << std::endl;
92 
93  if (hfsize == 0)
94  return;
95 
96  for (unsigned int j = 0; j < hfsize; j++) {
97  unsigned int layer = recHitTools_->getLayerWithOffset(hf[j].first);
98 
99  const DetId rh_detid = hf[j].first;
100  std::map<DetId, const HGCRecHit*>::const_iterator itcheck = hitMap_->find(rh_detid);
101  if (itcheck == hitMap_->end()) {
102  edm::LogWarning("EgammaPCAHelper") << " Big problem, unable to find a hit " << rh_detid.rawId() << " "
103  << rh_detid.det() << " " << HGCalDetId(rh_detid) << std::endl;
104  continue;
105  }
106  if (debug_) {
107  std::cout << "DetId " << rh_detid.rawId() << " " << layer << " " << itcheck->second->energy() << std::endl;
108  std::cout << " Hit " << itcheck->second << " " << itcheck->second->energy() << std::endl;
109  }
110  float fraction = hf[j].second;
111 
112  int thickIndex = recHitTools_->getSiThickIndex(rh_detid);
113  double mip = dEdXWeights_[layer] * 0.001; // convert in GeV
114  if (thickIndex > -1 and thickIndex < 3)
115  mip *= invThicknessCorrection_[thickIndex];
116 
117  pcavars[0] = recHitTools_->getPosition(rh_detid).x();
118  pcavars[1] = recHitTools_->getPosition(rh_detid).y();
119  pcavars[2] = recHitTools_->getPosition(rh_detid).z();
120  if (pcavars[2] == 0.)
121  edm::LogWarning("EgammaPCAHelper") << " Problem, hit with z =0 ";
122  else {
123  Spot mySpot(rh_detid, itcheck->second->energy(), pcavars, layer, fraction, mip);
124  theSpots_.push_back(mySpot);
125  }
126  }
127  if (debug_) {
128  std::cout << " Stored " << theSpots_.size() << " hits " << std::endl;
129  }
130 }
std::map< DetId, const HGCRecHit * > * hitMap_
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
T y() const
Definition: PV3DBase.h:60
T z() const
Definition: PV3DBase.h:61
std::vector< Spot > theSpots_
Definition: DetId.h:17
unsigned int getLayerWithOffset(const DetId &) const
Definition: RecHitTools.cc:355
int getSiThickIndex(const DetId &) const
Definition: RecHitTools.cc:205
GlobalPoint getPosition(const DetId &id) const
Definition: RecHitTools.cc:129
std::vector< double > invThicknessCorrection_
std::vector< double > dEdXWeights_
T x() const
Definition: PV3DBase.h:59
const hgcal::RecHitTools * recHitTools_
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:46

Member Data Documentation

math::XYZVector hgcal::EGammaPCAHelper::axis_
private

Definition at line 102 of file EgammaPCAHelper.h.

Referenced by axis(), clusterDepthCompatibility(), computePCA(), and energyPerLayer().

math::XYZPoint hgcal::EGammaPCAHelper::barycenter_
private
bool hgcal::EGammaPCAHelper::debug_
private

Definition at line 87 of file EgammaPCAHelper.h.

Referenced by checkIteration(), computePCA(), energyPerLayer(), and storeRecHits().

std::vector<double> hgcal::EGammaPCAHelper::dEdXWeights_
private

Definition at line 90 of file EgammaPCAHelper.h.

Referenced by setdEdXWeights(), and storeRecHits().

std::map<DetId, const HGCRecHit *>* hgcal::EGammaPCAHelper::hitMap_
private

Definition at line 95 of file EgammaPCAHelper.h.

Referenced by fillHitMap(), getHitMap(), setHitMap(), storeRecHits(), and ~EGammaPCAHelper().

int hgcal::EGammaPCAHelper::hitMapOrigin_
private

Definition at line 93 of file EgammaPCAHelper.h.

Referenced by fillHitMap(), setHitMap(), and ~EGammaPCAHelper().

std::vector<double> hgcal::EGammaPCAHelper::invThicknessCorrection_
private

Definition at line 91 of file EgammaPCAHelper.h.

Referenced by storeRecHits().

unsigned int hgcal::EGammaPCAHelper::maxlayer_
private

Definition at line 98 of file EgammaPCAHelper.h.

Referenced by energyPerLayer(), findZFirstLayer(), and setRecHitTools().

std::unique_ptr<TPrincipal> hgcal::EGammaPCAHelper::pca_
private

Definition at line 108 of file EgammaPCAHelper.h.

Referenced by computePCA(), eigenValues(), and sigmas().

int hgcal::EGammaPCAHelper::pcaIteration_
private

Definition at line 97 of file EgammaPCAHelper.h.

Referenced by checkIteration(), clear(), computePCA(), fillHitMap(), setHitMap(), and storeRecHits().

bool hgcal::EGammaPCAHelper::recHitsStored_
private

Definition at line 86 of file EgammaPCAHelper.h.

const hgcal::RecHitTools* hgcal::EGammaPCAHelper::recHitTools_
private

Definition at line 109 of file EgammaPCAHelper.h.

Referenced by computePCA(), findZFirstLayer(), setRecHitTools(), and storeRecHits().

ShowerDepth hgcal::EGammaPCAHelper::showerDepth_
private

Definition at line 110 of file EgammaPCAHelper.h.

Referenced by clusterDepthCompatibility().

double hgcal::EGammaPCAHelper::sige_
private

Definition at line 105 of file EgammaPCAHelper.h.

Referenced by clear(), computeShowerWidth(), sigmaEE(), and storeRecHits().

double hgcal::EGammaPCAHelper::sigp_
private

Definition at line 105 of file EgammaPCAHelper.h.

Referenced by clear(), computeShowerWidth(), sigmaPP(), and storeRecHits().

double hgcal::EGammaPCAHelper::sigu_
private

Definition at line 105 of file EgammaPCAHelper.h.

Referenced by clear(), computeShowerWidth(), sigmaUU(), and storeRecHits().

double hgcal::EGammaPCAHelper::sigv_
private

Definition at line 105 of file EgammaPCAHelper.h.

Referenced by clear(), computeShowerWidth(), sigmaVV(), and storeRecHits().

const reco::CaloCluster* hgcal::EGammaPCAHelper::theCluster_
private

Definition at line 94 of file EgammaPCAHelper.h.

Referenced by computeShowerWidth(), and storeRecHits().

std::vector<Spot> hgcal::EGammaPCAHelper::theSpots_
private
Transform3D hgcal::EGammaPCAHelper::trans_
private

Definition at line 104 of file EgammaPCAHelper.h.

Referenced by computePCA(), computeShowerWidth(), energyPerLayer(), and printHits().