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)
 
const std::unordered_map< DetId, const HGCRecHit * > * getHitMap ()
 
void pcaInitialComputation ()
 
const TPrincipal & pcaResult ()
 
void printHits (float radius) const
 
void setdEdXWeights (const std::vector< double > &dEdX)
 
void setHitMap (const std::unordered_map< DetId, const HGCRecHit *> *hitMap)
 to set 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)
 

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_
 
const std::unordered_map< DetId, const HGCRecHit * > * hitMap_
 
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

◆ Point

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

Definition at line 36 of file EgammaPCAHelper.h.

◆ Transform3D

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

Definition at line 35 of file EgammaPCAHelper.h.

Constructor & Destructor Documentation

◆ EGammaPCAHelper()

EGammaPCAHelper::EGammaPCAHelper ( )

Definition at line 17 of file EgammaPCAHelper.cc.

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

Member Function Documentation

◆ axis()

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

Definition at line 57 of file EgammaPCAHelper.h.

References axis_.

Referenced by HGCalEgammaIDHelper::axis().

57 { return axis_; }
math::XYZVector axis_

◆ barycenter()

const math::XYZPoint& hgcal::EGammaPCAHelper::barycenter ( ) const
inline

Definition at line 56 of file EgammaPCAHelper.h.

References barycenter_.

Referenced by HGCalEgammaIDHelper::barycenter().

56 { return barycenter_; }
math::XYZPoint barycenter_

◆ checkIteration()

bool EGammaPCAHelper::checkIteration ( ) const
private

Definition at line 215 of file EgammaPCAHelper.cc.

References gather_cfg::cout, debug_, and pcaIteration_.

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

215  {
216  if (pcaIteration_ == 0) {
217  if (debug_)
218  std::cout << " The PCA has not been run yet " << std::endl;
219  return false;
220  } else if (pcaIteration_ == 1) {
221  if (debug_)
222  std::cout << " The PCA has been run only once - careful " << std::endl;
223  return false;
224  } else if (pcaIteration_ == -1) {
225  if (debug_)
226  std::cout << " Not enough layers to perform PCA " << std::endl;
227  return false;
228  }
229  return true;
230 }

◆ clear()

void EGammaPCAHelper::clear ( void  )

Definition at line 232 of file EgammaPCAHelper.cc.

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

Referenced by HGCalEgammaIDHelper::computeHGCAL().

232  {
233  theSpots_.clear();
234  pcaIteration_ = 0;
235  sigu_ = 0.;
236  sigv_ = 0.;
237  sigp_ = 0.;
238  sige_ = 0.;
239 }
std::vector< Spot > theSpots_

◆ clusterDepthCompatibility()

float EGammaPCAHelper::clusterDepthCompatibility ( const LongDeps ld,
float &  measuredDepth,
float &  expectedDepth,
float &  expectedSigma 
)

Definition at line 307 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().

310  {
311  expectedDepth = -999.;
312  expectedSigma = -999.;
313  measuredDepth = -999.;
314  if (!checkIteration())
315  return -999.;
316 
317  float z = findZFirstLayer(ld);
318  math::XYZVector dir = axis_.unit();
319  measuredDepth = std::abs((z - std::abs(barycenter_.z())) / dir.z());
320  return showerDepth_.getClusterDepthCompatibility(measuredDepth, ld.energyEE(), expectedDepth, expectedSigma);
321 }
math::XYZPoint barycenter_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
float getClusterDepthCompatibility(float measuredDepth, float emEnergy, float &expectedDepth, float &expectedSigma) const
Definition: ShowerDepth.cc:6
float findZFirstLayer(const LongDeps &) const
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
math::XYZVector axis_
float energyEE() const
Definition: LongDeps.h:25

◆ computePCA()

void EGammaPCAHelper::computePCA ( float  radius,
bool  withHalo = true 
)

Definition at line 106 of file EgammaPCAHelper.cc.

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

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

106  {
107  // very important - to reset
108  pca_ = std::make_unique<TPrincipal>(3, "D");
109  bool initialCalculation = radius < 0;
110  if (debug_)
111  std::cout << " Initial calculation " << initialCalculation << std::endl;
112  if (initialCalculation && withHalo) {
113  edm::LogWarning("EGammaPCAHelper") << "Warning - in the first iteration, the halo hits are excluded " << std::endl;
114  withHalo = false;
115  }
116 
117  float radius2 = radius * radius;
118  if (!initialCalculation) {
119  math::XYZVector mainAxis(axis_);
120  mainAxis.unit();
121  math::XYZVector phiAxis(barycenter_.x(), barycenter_.y(), 0);
122  math::XYZVector udir(mainAxis.Cross(phiAxis));
123  udir = udir.unit();
126  Point(barycenter_ + udir),
127  Point(0, 0, 0),
128  Point(0., 0., 1.),
129  Point(1., 0., 0.));
130  }
131 
132  std::set<int> layers;
133  for (const auto& spot : theSpots_) {
134  if (spot.layer() > recHitTools_->lastLayerEE())
135  continue;
136  if (!withHalo && (!spot.isCore()))
137  continue;
138  if (initialCalculation) {
139  // initial calculation, take only core hits
140  if (!spot.isCore())
141  continue;
142  layers.insert(spot.layer());
143  for (int i = 0; i < spot.multiplicity(); ++i)
144  pca_->AddRow(spot.row());
145  } else {
146  // use a cylinder, include all hits
147  math::XYZPoint local = trans_(Point(spot.row()[0], spot.row()[1], spot.row()[2]));
148  if (local.Perp2() > radius2)
149  continue;
150  layers.insert(spot.layer());
151  for (int i = 0; i < spot.multiplicity(); ++i)
152  pca_->AddRow(spot.row());
153  }
154  }
155  if (debug_)
156  std::cout << " Nlayers " << layers.size() << std::endl;
157  if (layers.size() < 3) {
158  pcaIteration_ = -1;
159  return;
160  }
161  pca_->MakePrincipals();
162  ++pcaIteration_;
163  const TVectorD& means = *(pca_->GetMeanValues());
164  const TMatrixD& eigens = *(pca_->GetEigenVectors());
165 
167  axis_ = math::XYZVector(eigens(0, 0), eigens(1, 0), eigens(2, 0));
168  if (axis_.z() * barycenter_.z() < 0.0) {
169  axis_ = -1. * axis_;
170  }
171 }
math::XYZPoint barycenter_
std::unique_ptr< TPrincipal > pca_
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
math::XYZVector axis_
Log< level::Warning, false > LogWarning
ROOT::Math::Transform3D::Point Point
const hgcal::RecHitTools * recHitTools_
unsigned int lastLayerEE(bool nose=false) const
Definition: RecHitTools.h:75

◆ computeShowerWidth()

void EGammaPCAHelper::computeShowerWidth ( float  radius,
bool  withHalo = true 
)

Definition at line 173 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 HGCalEgammaIDHelper::computeHGCAL().

173  {
174  sigu_ = 0.;
175  sigv_ = 0.;
176  sigp_ = 0.;
177  sige_ = 0.;
178  double cyl_ene = 0.;
179 
180  float radius2 = radius * radius;
181  for (const auto& spot : theSpots_) {
182  Point globalPoint(spot.row()[0], spot.row()[1], spot.row()[2]);
183  math::XYZPoint local = trans_(globalPoint);
184  if (local.Perp2() > radius2)
185  continue;
186 
187  // Select halo hits or not
188  if (withHalo && spot.fraction() < 0)
189  continue;
190  if (!withHalo && !(spot.isCore()))
191  continue;
192 
193  sige_ += (globalPoint.eta() - theCluster_->eta()) * (globalPoint.eta() - theCluster_->eta()) * spot.energy();
194  sigp_ += deltaPhi(globalPoint.phi(), theCluster_->phi()) * deltaPhi(globalPoint.phi(), theCluster_->phi()) *
195  spot.energy();
196 
197  sigu_ += local.x() * local.x() * spot.energy();
198  sigv_ += local.y() * local.y() * spot.energy();
199  cyl_ene += spot.energy();
200  }
201 
202  if (cyl_ene > 0.) {
203  const double inv_cyl_ene = 1. / cyl_ene;
204  sigu_ = sigu_ * inv_cyl_ene;
205  sigv_ = sigv_ * inv_cyl_ene;
206  sigp_ = sigp_ * inv_cyl_ene;
207  sige_ = sige_ * inv_cyl_ene;
208  }
209  sigu_ = std::sqrt(sigu_);
210  sigv_ = std::sqrt(sigv_);
211  sigp_ = std::sqrt(sigp_);
212  sige_ = std::sqrt(sige_);
213 }
double phi() const
azimuthal angle of cluster centroid
Definition: CaloCluster.h:184
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.
const reco::CaloCluster * theCluster_
double eta() const
pseudorapidity of cluster centroid
Definition: CaloCluster.h:181

◆ eigenValues()

const TVectorD& hgcal::EGammaPCAHelper::eigenValues ( ) const
inline

Definition at line 66 of file EgammaPCAHelper.h.

References pca_.

Referenced by HGCalEgammaIDHelper::eigenValues().

66 { return *pca_->GetEigenValues(); }
std::unique_ptr< TPrincipal > pca_

◆ energyPerLayer()

LongDeps EGammaPCAHelper::energyPerLayer ( float  radius,
bool  withHalo = true 
)

Definition at line 241 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().

241  {
242  if (debug_)
243  checkIteration();
244  std::set<int> layers;
245  float radius2 = radius * radius;
246  std::vector<float> energyPerLayer(maxlayer_ + 1, 0.f);
247  math::XYZVector mainAxis(axis_);
248  mainAxis.unit();
249  math::XYZVector phiAxis(barycenter_.x(), barycenter_.y(), 0);
250  math::XYZVector udir(mainAxis.Cross(phiAxis));
251  udir = udir.unit();
254  Point(barycenter_ + udir),
255  Point(0, 0, 0),
256  Point(0., 0., 1.),
257  Point(1., 0., 0.));
258  float energyEE = 0.;
259  float energyFH = 0.;
260  float energyBH = 0.;
261 
262  for (const auto& spot : theSpots_) {
263  if (!withHalo && !spot.isCore())
264  continue;
265  math::XYZPoint local = trans_(Point(spot.row()[0], spot.row()[1], spot.row()[2]));
266  if (local.Perp2() > radius2)
267  continue;
268  energyPerLayer[spot.layer()] += spot.energy();
269  layers.insert(spot.layer());
270  if (spot.detId().det() == DetId::HGCalEE or spot.subdet() == HGCEE) {
271  energyEE += spot.energy();
272  } else if (spot.detId().det() == DetId::HGCalHSi or spot.subdet() == HGCHEF) {
273  energyFH += spot.energy();
274  } else if (spot.detId().det() == DetId::HGCalHSc or spot.subdet() == HGCHEB) {
275  energyBH += spot.energy();
276  }
277  }
278  return LongDeps(radius, energyPerLayer, energyEE, energyFH, energyBH, layers);
279 }
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
math::XYZVector axis_
ROOT::Math::Transform3D::Point Point

◆ findZFirstLayer()

float EGammaPCAHelper::findZFirstLayer ( const LongDeps ld) const
private

Definition at line 295 of file EgammaPCAHelper.cc.

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

Referenced by clusterDepthCompatibility().

295  {
296  unsigned int firstLayer = 0;
297  for (unsigned il = 1; il <= maxlayer_; ++il) {
298  if (ld.energyPerLayer()[il] > 0.) {
299  firstLayer = il;
300  break;
301  }
302  }
303  // Make dummy DetId to get abs(z) for layer
304  return recHitTools_->getPositionLayer(firstLayer).z();
305 }
T z() const
Definition: PV3DBase.h:61
const std::vector< float > & energyPerLayer() const
Definition: LongDeps.h:28
GlobalPoint getPositionLayer(int layer, bool nose=false) const
Definition: RecHitTools.cc:141
const hgcal::RecHitTools * recHitTools_

◆ getHitMap()

const std::unordered_map<DetId, const HGCRecHit *>* hgcal::EGammaPCAHelper::getHitMap ( )
inline

Definition at line 47 of file EgammaPCAHelper.h.

References hitMap_.

47 { return hitMap_; }
const std::unordered_map< DetId, const HGCRecHit * > * hitMap_

◆ pcaInitialComputation()

void hgcal::EGammaPCAHelper::pcaInitialComputation ( )
inline

Definition at line 53 of file EgammaPCAHelper.h.

References computePCA().

Referenced by HGCalEgammaIDHelper::computeHGCAL().

53 { computePCA(-1., false); }
void computePCA(float radius, bool withHalo=true)

◆ pcaResult()

const TPrincipal& hgcal::EGammaPCAHelper::pcaResult ( )

◆ printHits()

void EGammaPCAHelper::printHits ( float  radius) const

Definition at line 281 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(), and ntuplePrintersDiff.TrackPrinter::printTrack().

281  {
282  unsigned nSpots = theSpots_.size();
283  float radius2 = radius * radius;
284  for (unsigned i = 0; i < nSpots; ++i) {
285  Spot spot(theSpots_[i]);
286  math::XYZPoint local = trans_(Point(spot.row()[0], spot.row()[1], spot.row()[2]));
287  if (local.Perp2() < radius2) {
288  std::cout << i << " " << theSpots_[i].detId().rawId() << " " << theSpots_[i].layer() << " "
289  << theSpots_[i].energy() << " " << theSpots_[i].isCore();
290  std::cout << " " << std::sqrt(local.Perp2()) << std::endl;
291  }
292  }
293 }
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

◆ setdEdXWeights()

void hgcal::EGammaPCAHelper::setdEdXWeights ( const std::vector< double > &  dEdX)
inline

Definition at line 51 of file EgammaPCAHelper.h.

References HGCalRecHit_cfi::dEdX, and dEdXWeights_.

Referenced by HGCalEgammaIDHelper::HGCalEgammaIDHelper().

51 { dEdXWeights_ = dEdX; }
std::vector< double > dEdXWeights_

◆ setHitMap()

void EGammaPCAHelper::setHitMap ( const std::unordered_map< DetId, const HGCRecHit *> *  hitMap)

to set once per event

Definition at line 27 of file EgammaPCAHelper.cc.

References hitMap_, and pcaIteration_.

Referenced by HGCalEgammaIDHelper::eventInit().

27  {
28  hitMap_ = hitMap;
29  pcaIteration_ = 0;
30 }
const std::unordered_map< DetId, const HGCRecHit * > * hitMap_

◆ setRecHitTools()

void EGammaPCAHelper::setRecHitTools ( const hgcal::RecHitTools recHitTools)

Definition at line 32 of file EgammaPCAHelper.cc.

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

Referenced by HGCalEgammaIDHelper::eventInit().

32  {
33  recHitTools_ = recHitTools;
35 }
unsigned int lastLayerBH() const
Definition: RecHitTools.h:78
const hgcal::RecHitTools * recHitTools_

◆ sigmaEE()

double hgcal::EGammaPCAHelper::sigmaEE ( ) const
inline

Definition at line 63 of file EgammaPCAHelper.h.

References checkIteration(), and sige_.

Referenced by HGCalEgammaIDHelper::sigmaEE().

63 { return checkIteration() ? sige_ : -1.; }

◆ sigmaPP()

double hgcal::EGammaPCAHelper::sigmaPP ( ) const
inline

Definition at line 64 of file EgammaPCAHelper.h.

References checkIteration(), and sigp_.

Referenced by HGCalEgammaIDHelper::sigmaPP().

64 { return checkIteration() ? sigp_ : -1.; }

◆ sigmas()

const TVectorD& hgcal::EGammaPCAHelper::sigmas ( ) const
inline

Definition at line 67 of file EgammaPCAHelper.h.

References pca_.

Referenced by HGCalEgammaIDHelper::sigmas().

67 { return *pca_->GetSigmas(); }
std::unique_ptr< TPrincipal > pca_

◆ sigmaUU()

double hgcal::EGammaPCAHelper::sigmaUU ( ) const
inline

Definition at line 61 of file EgammaPCAHelper.h.

References checkIteration(), and sigu_.

Referenced by HGCalEgammaIDHelper::sigmaUU().

61 { return checkIteration() ? sigu_ : -1.; }

◆ sigmaVV()

double hgcal::EGammaPCAHelper::sigmaVV ( ) const
inline

Definition at line 62 of file EgammaPCAHelper.h.

References checkIteration(), and sigv_.

Referenced by HGCalEgammaIDHelper::sigmaVV().

62 { return checkIteration() ? sigv_ : -1.; }

◆ storeRecHits() [1/3]

void EGammaPCAHelper::storeRecHits ( const reco::CaloCluster theCluster)

Definition at line 47 of file EgammaPCAHelper.cc.

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

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

47  {
48  theCluster_ = &cluster;
49  storeRecHits(cluster.hitsAndFractions());
50 }
void storeRecHits(const reco::CaloCluster &theCluster)
const reco::CaloCluster * theCluster_

◆ storeRecHits() [2/3]

void EGammaPCAHelper::storeRecHits ( const reco::HGCalMultiCluster cluster)

Definition at line 37 of file EgammaPCAHelper.cc.

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

37  {
38  theCluster_ = &cluster;
39  std::vector<std::pair<DetId, float>> result;
40  for (reco::HGCalMultiCluster::component_iterator it = cluster.begin(); it != cluster.end(); it++) {
41  const std::vector<std::pair<DetId, float>>& hf = (*it)->hitsAndFractions();
42  result.insert(result.end(), hf.begin(), hf.end());
43  }
45 }
void storeRecHits(const reco::CaloCluster &theCluster)
component_iterator end() const
component_iterator begin() const
const reco::CaloCluster * theCluster_

◆ storeRecHits() [3/3]

void EGammaPCAHelper::storeRecHits ( const std::vector< std::pair< DetId, float >> &  hf)
private

Definition at line 52 of file EgammaPCAHelper.cc.

References gather_cfg::cout, debug_, dEdXWeights_, DetId::det(), first, HLT_2022v15_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().

52  {
53  std::vector<double> pcavars;
54  pcavars.resize(3, 0.);
55  theSpots_.clear();
56  pcaIteration_ = 0;
57 
58  sigu_ = 0.;
59  sigv_ = 0.;
60  sigp_ = 0.;
61  sige_ = 0.;
62 
63  unsigned hfsize = hf.size();
64  if (debug_)
65  std::cout << "The seed cluster constains " << hfsize << " hits " << std::endl;
66 
67  if (hfsize == 0)
68  return;
69 
70  for (unsigned int j = 0; j < hfsize; j++) {
71  unsigned int layer = recHitTools_->getLayerWithOffset(hf[j].first);
72 
73  const DetId rh_detid = hf[j].first;
74  std::unordered_map<DetId, const HGCRecHit*>::const_iterator itcheck = hitMap_->find(rh_detid);
75  if (itcheck == hitMap_->end()) {
76  edm::LogWarning("EgammaPCAHelper") << " Big problem, unable to find a hit " << rh_detid.rawId() << " "
77  << rh_detid.det() << " " << HGCalDetId(rh_detid) << std::endl;
78  continue;
79  }
80  if (debug_) {
81  std::cout << "DetId " << rh_detid.rawId() << " " << layer << " " << itcheck->second->energy() << std::endl;
82  std::cout << " Hit " << itcheck->second << " " << itcheck->second->energy() << std::endl;
83  }
84  float fraction = hf[j].second;
85 
86  int thickIndex = recHitTools_->getSiThickIndex(rh_detid);
87  double mip = dEdXWeights_[layer] * 0.001; // convert in GeV
88  if (thickIndex > -1 and thickIndex < 3)
89  mip *= invThicknessCorrection_[thickIndex];
90 
91  pcavars[0] = recHitTools_->getPosition(rh_detid).x();
92  pcavars[1] = recHitTools_->getPosition(rh_detid).y();
93  pcavars[2] = recHitTools_->getPosition(rh_detid).z();
94  if (pcavars[2] == 0.)
95  edm::LogWarning("EgammaPCAHelper") << " Problem, hit with z =0 ";
96  else {
97  Spot mySpot(rh_detid, itcheck->second->energy(), pcavars, layer, fraction, mip);
98  theSpots_.push_back(mySpot);
99  }
100  }
101  if (debug_) {
102  std::cout << " Stored " << theSpots_.size() << " hits " << std::endl;
103  }
104 }
T z() const
Definition: PV3DBase.h:61
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:46
constexpr std::array< uint8_t, layerIndexSize > layer
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
GlobalPoint getPosition(const DetId &id) const
Definition: RecHitTools.cc:129
std::vector< Spot > theSpots_
Definition: DetId.h:17
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
std::vector< double > invThicknessCorrection_
std::vector< double > dEdXWeights_
const std::unordered_map< DetId, const HGCRecHit * > * hitMap_
Log< level::Warning, false > LogWarning
int getSiThickIndex(const DetId &) const
Definition: RecHitTools.cc:205
const hgcal::RecHitTools * recHitTools_
unsigned int getLayerWithOffset(const DetId &) const
Definition: RecHitTools.cc:365

Member Data Documentation

◆ axis_

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

Definition at line 95 of file EgammaPCAHelper.h.

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

◆ barycenter_

math::XYZPoint hgcal::EGammaPCAHelper::barycenter_
private

◆ debug_

bool hgcal::EGammaPCAHelper::debug_
private

Definition at line 81 of file EgammaPCAHelper.h.

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

◆ dEdXWeights_

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

Definition at line 84 of file EgammaPCAHelper.h.

Referenced by setdEdXWeights(), and storeRecHits().

◆ hitMap_

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

Definition at line 88 of file EgammaPCAHelper.h.

Referenced by getHitMap(), setHitMap(), and storeRecHits().

◆ invThicknessCorrection_

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

Definition at line 85 of file EgammaPCAHelper.h.

Referenced by storeRecHits().

◆ maxlayer_

unsigned int hgcal::EGammaPCAHelper::maxlayer_
private

Definition at line 91 of file EgammaPCAHelper.h.

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

◆ pca_

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

Definition at line 101 of file EgammaPCAHelper.h.

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

◆ pcaIteration_

int hgcal::EGammaPCAHelper::pcaIteration_
private

Definition at line 90 of file EgammaPCAHelper.h.

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

◆ recHitsStored_

bool hgcal::EGammaPCAHelper::recHitsStored_
private

Definition at line 80 of file EgammaPCAHelper.h.

◆ recHitTools_

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

Definition at line 102 of file EgammaPCAHelper.h.

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

◆ showerDepth_

ShowerDepth hgcal::EGammaPCAHelper::showerDepth_
private

Definition at line 103 of file EgammaPCAHelper.h.

Referenced by clusterDepthCompatibility().

◆ sige_

double hgcal::EGammaPCAHelper::sige_
private

Definition at line 98 of file EgammaPCAHelper.h.

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

◆ sigp_

double hgcal::EGammaPCAHelper::sigp_
private

Definition at line 98 of file EgammaPCAHelper.h.

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

◆ sigu_

double hgcal::EGammaPCAHelper::sigu_
private

Definition at line 98 of file EgammaPCAHelper.h.

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

◆ sigv_

double hgcal::EGammaPCAHelper::sigv_
private

Definition at line 98 of file EgammaPCAHelper.h.

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

◆ theCluster_

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

Definition at line 87 of file EgammaPCAHelper.h.

Referenced by computeShowerWidth(), and storeRecHits().

◆ theSpots_

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

◆ trans_

Transform3D hgcal::EGammaPCAHelper::trans_
private

Definition at line 97 of file EgammaPCAHelper.h.

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