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::Transform3DPJ::Point Point
 
typedef ROOT::Math::Transform3DPJ 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_
 
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

Definition at line 37 of file EgammaPCAHelper.h.

Definition at line 36 of file EgammaPCAHelper.h.

Constructor & Destructor Documentation

EGammaPCAHelper::EGammaPCAHelper ( )

Definition at line 17 of file EgammaPCAHelper.cc.

17  :
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  hitMapOrigin_ = 0;
24  hitMap_ = new std::map<DetId, const HGCRecHit *>();
25  debug_ = false;
26 }
std::map< DetId, const HGCRecHit * > * hitMap_
std::unique_ptr< TPrincipal > pca_
std::vector< double > invThicknessCorrection_
EGammaPCAHelper::~EGammaPCAHelper ( )

Definition at line 28 of file EgammaPCAHelper.cc.

References hitMap_, and hitMapOrigin_.

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

Member Function Documentation

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

Definition at line 66 of file EgammaPCAHelper.h.

References axis_, and computeShowerWidth().

Referenced by HGCalEgammaIDHelper::axis().

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

Definition at line 65 of file EgammaPCAHelper.h.

References barycenter_.

Referenced by HGCalEgammaIDHelper::barycenter().

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

Definition at line 230 of file EgammaPCAHelper.cc.

References gather_cfg::cout, debug_, and pcaIteration_.

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

230  {
231  if (pcaIteration_ == 0) {
232  if(debug_)
233  std::cout << " The PCA has not been run yet " << std::endl;
234  return false;
235  } else if (pcaIteration_ == 1) {
236  if (debug_)
237  std::cout << " The PCA has been run only once - careful " << std::endl;
238  return false;
239  } else if (pcaIteration_ == -1){
240  if (debug_)
241  std::cout << " Not enough layers to perform PCA " << std::endl;
242  return false;
243  }
244  return true;
245 }
void EGammaPCAHelper::clear ( void  )

Definition at line 247 of file EgammaPCAHelper.cc.

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

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

247  {
248  theSpots_.clear();
249  pcaIteration_ = 0;
250  sigu_ = 0.;
251  sigv_ = 0.;
252  sigp_ = 0.;
253  sige_ = 0.;
254 }
std::vector< Spot > theSpots_
float EGammaPCAHelper::clusterDepthCompatibility ( const LongDeps ld,
float &  measuredDepth,
float &  expectedDepth,
float &  expectedSigma 
)

Definition at line 312 of file EgammaPCAHelper.cc.

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

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

312  {
313  expectedDepth = -999.;
314  expectedSigma = -999.;
315  measuredDepth = -999.;
316  if (!checkIteration()) return -999.;
317 
318  float z = findZFirstLayer(ld);
319  math::XYZVector dir=axis_.unit();
320  measuredDepth = std::abs((z-std::abs(barycenter_.z()))/dir.z());
321  return showerDepth_.getClusterDepthCompatibility(measuredDepth,ld.energyEE(), expectedDepth,expectedSigma);
322 }
math::XYZPoint barycenter_
float energyEE() const
Definition: LongDeps.h:20
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:30
bool checkIteration() const
dbl *** dir
Definition: mlp_gen.cc:35
void EGammaPCAHelper::computePCA ( float  radius,
bool  withHalo = true 
)

Definition at line 130 of file EgammaPCAHelper.cc.

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

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

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

Definition at line 191 of file EgammaPCAHelper.cc.

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

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

191  {
192  sigu_ = 0.;
193  sigv_ = 0.;
194  sigp_ = 0.;
195  sige_ = 0.;
196  double cyl_ene = 0.;
197 
198  float radius2 = radius * radius;
199  for (const auto& spot : theSpots_) {
200  Point globalPoint(spot.row()[0],spot.row()[1],spot.row()[2]);
201  math::XYZPoint local = trans_(globalPoint);
202  if (local.Perp2() > radius2) continue;
203 
204  // Select halo hits or not
205  if (withHalo && spot.fraction() < 0) continue;
206  if (!withHalo && !(spot.isCore())) continue;
207 
208  sige_ += (globalPoint.eta() - theCluster_->eta()) * (globalPoint.eta() - theCluster_->eta()) * spot.energy();
209  sigp_ += deltaPhi(globalPoint.phi(), theCluster_->phi()) * deltaPhi(globalPoint.phi(), theCluster_->phi()) *
210  spot.energy();
211 
212  sigu_ += local.x() * local.x() * spot.energy();
213  sigv_ += local.y() * local.y() * spot.energy();
214  cyl_ene += spot.energy();
215  }
216 
217  if (cyl_ene > 0.) {
218  const double inv_cyl_ene = 1. / cyl_ene;
219  sigu_ = sigu_ * inv_cyl_ene;
220  sigv_ = sigv_ * inv_cyl_ene;
221  sigp_ = sigp_ * inv_cyl_ene;
222  sige_ = sige_ * inv_cyl_ene;
223  }
224  sigu_ = std::sqrt(sigu_);
225  sigv_ = std::sqrt(sigv_);
226  sigp_ = std::sqrt(sigp_);
227  sige_ = std::sqrt(sige_);
228 }
double eta() const
pseudorapidity of cluster centroid
Definition: CaloCluster.h:168
T sqrt(T t)
Definition: SSEVec.h:18
math::XYZPoint Point
std::vector< Spot > theSpots_
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
const reco::CaloCluster * theCluster_
double phi() const
azimuthal angle of cluster centroid
Definition: CaloCluster.h:171
const TVectorD& hgcal::EGammaPCAHelper::eigenValues ( ) const
inline

Definition at line 75 of file EgammaPCAHelper.h.

References pca_.

Referenced by HGCalEgammaIDHelper::eigenValues().

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

Definition at line 256 of file EgammaPCAHelper.cc.

References axis_, barycenter_, checkIteration(), debug_, f, DetId::HGCalEE, DetId::HGCalHSc, DetId::HGCalHSi, HGCEE, HGCHEB, HGCHEF, LayerTriplets::layers(), DTRecHitClients_cfi::local, HGCalImagingAlgo::maxlayer, or, TCMET_cfi::radius, theSpots_, and trans_.

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

256  {
257  if (debug_) checkIteration();
258  std::set<int> layers;
259  float radius2 = radius*radius;
260  std::vector<float> energyPerLayer(HGCalImagingAlgo::maxlayer+1, 0.f);
261  math::XYZVector mainAxis(axis_);
262  mainAxis.unit();
263  math::XYZVector phiAxis(barycenter_.x(), barycenter_.y(), 0);
264  math::XYZVector udir(mainAxis.Cross(phiAxis));
265  udir = udir.unit();
267  Point(0., 0., 1.), Point(1., 0., 0.));
268  float energyEE = 0.;
269  float energyFH = 0.;
270  float energyBH = 0.;
271 
272  for (const auto& spot : theSpots_) {
273  if (!withHalo && ! spot.isCore())
274  continue;
275  math::XYZPoint local = trans_(Point( spot.row()[0],spot.row()[1],spot.row()[2]));
276  if (local.Perp2() > radius2) continue;
277  energyPerLayer[spot.layer()] += spot.energy();
278  layers.insert(spot.layer());
279  if (spot.detId().det() == DetId::HGCalEE or spot.subdet() == HGCEE) { energyEE += spot.energy();}
280  else if (spot.detId().det() == DetId::HGCalHSi or spot.subdet() == HGCHEF) { energyFH += spot.energy();}
281  else if (spot.detId().det() == DetId::HGCalHSc or spot.subdet() == HGCHEB) { energyBH += spot.energy();}
282 
283  }
284  return LongDeps(radius,energyPerLayer,energyEE,energyFH,energyBH,layers);
285 }
math::XYZPoint barycenter_
static const unsigned int maxlayer
std::vector< LayerSetAndLayers > layers(const SeedingLayerSetsHits &sets)
Definition: LayerTriplets.cc:4
LongDeps energyPerLayer(float radius, bool withHalo=true)
ROOT::Math::Transform3DPJ Transform3D
ROOT::Math::Transform3DPJ::Point Point
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_
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
bool checkIteration() const
void EGammaPCAHelper::fillHitMap ( const HGCRecHitCollection HGCEERecHits,
const HGCRecHitCollection HGCFHRecHits,
const HGCRecHitCollection HGCBHRecHits 
)

to compute from inside - once per event

Definition at line 42 of file EgammaPCAHelper.cc.

References hitMap_, hitMapOrigin_, and pcaIteration_.

Referenced by HGCalEgammaIDHelper::eventInit().

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

Definition at line 300 of file EgammaPCAHelper.cc.

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

Referenced by clusterDepthCompatibility(), and sigmas().

300  {
301  unsigned int firstLayer = 0;
302  for(unsigned il=1;il<=HGCalImagingAlgo::maxlayer;++il) {
303  if (ld.energyPerLayer()[il] > 0.) {
304  firstLayer = il;
305  break;
306  }
307  }
308  // Make dummy DetId to get abs(z) for layer
309  return recHitTools_->getPositionLayer(firstLayer).z();
310 }
static const unsigned int maxlayer
GlobalPoint getPositionLayer(unsigned layer) const
Definition: RecHitTools.cc:128
T z() const
Definition: PV3DBase.h:64
const std::vector< float > & energyPerLayer() const
Definition: LongDeps.h:23
const hgcal::RecHitTools * recHitTools_
std::map<DetId,const HGCRecHit *>* hgcal::EGammaPCAHelper::getHitMap ( )
inline

Definition at line 54 of file EgammaPCAHelper.h.

References hitMap_, and setRecHitTools().

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

Definition at line 60 of file EgammaPCAHelper.h.

References computePCA(), and TCMET_cfi::radius.

Referenced by HGCalEgammaIDHelper::computeHGCAL().

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

Definition at line 287 of file EgammaPCAHelper.cc.

References gather_cfg::cout, mps_fire::i, DTRecHitClients_cfi::local, TCMET_cfi::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().

287  {
288  unsigned nSpots = theSpots_.size();
289  float radius2=radius*radius;
290  for ( unsigned i =0; i< nSpots ; ++i) {
291  Spot spot(theSpots_[i]);
292  math::XYZPoint local = trans_(Point( spot.row()[0],spot.row()[1],spot.row()[2]));
293  if (local.Perp2() < radius2 ) {
294  std::cout << i << " " << theSpots_[i].detId().rawId() << " " << theSpots_[i].layer() << " " << theSpots_[i].energy() << " " <<theSpots_[i].isCore() ;
295  std::cout << " " << std::sqrt(local.Perp2()) << std::endl;
296  }
297  }
298 }
ROOT::Math::Transform3DPJ::Point Point
T sqrt(T t)
Definition: SSEVec.h:18
std::vector< Spot > theSpots_
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
void hgcal::EGammaPCAHelper::setdEdXWeights ( const std::vector< double > &  dEdX)
inline

Definition at line 58 of file EgammaPCAHelper.h.

References dEdXWeights_.

Referenced by HGCalEgammaIDHelper::HGCalEgammaIDHelper().

58 { 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 recHitTools_.

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

38  {
39  recHitTools_ = recHitTools;
40 }
const hgcal::RecHitTools * recHitTools_
double hgcal::EGammaPCAHelper::sigmaEE ( ) const
inline

Definition at line 72 of file EgammaPCAHelper.h.

References checkIteration(), and sige_.

Referenced by HGCalEgammaIDHelper::sigmaEE().

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

Definition at line 73 of file EgammaPCAHelper.h.

References checkIteration(), and sigp_.

Referenced by HGCalEgammaIDHelper::sigmaPP().

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

Definition at line 70 of file EgammaPCAHelper.h.

References checkIteration(), and sigu_.

Referenced by HGCalEgammaIDHelper::sigmaUU().

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

Definition at line 71 of file EgammaPCAHelper.h.

References checkIteration(), and sigv_.

Referenced by HGCalEgammaIDHelper::sigmaVV().

71 { 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 62 of file EgammaPCAHelper.cc.

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

62  {
63  theCluster_ = &cluster;
64  std::vector<std::pair<DetId, float>> result;
65  for (reco::HGCalMultiCluster::component_iterator it = cluster.begin(); it != cluster.end();
66  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(), plotBeamSpotDB::first, dedxEstimators_cff::fraction, hgcal::RecHitTools::getLayerWithOffset(), hgcal::RecHitTools::getPosition(), hgcal::RecHitTools::getSiThickIndex(), photonIsolationHIProducer_cfi::hf, hitMap_, invThicknessCorrection_, 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) return;
94 
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() << " " << rh_detid.det() << " " << HGCalDetId(rh_detid) << std::endl;
103  continue;
104  }
105  if (debug_) {
106  std::cout << "DetId " << rh_detid.rawId() << " " << layer << " " << itcheck->second->energy() <<std::endl;
107  std::cout << " Hit " << itcheck->second << " " << itcheck->second->energy() << std::endl;
108  }
109  float fraction = hf[j].second;
110 
111  int thickIndex = recHitTools_->getSiThickIndex(rh_detid);
112  double mip = dEdXWeights_[layer] * 0.001; // convert in GeV
113  if(thickIndex>-1 and thickIndex<3) mip *= invThicknessCorrection_[thickIndex];
114 
115  pcavars[0] = recHitTools_->getPosition(rh_detid).x();
116  pcavars[1] = recHitTools_->getPosition(rh_detid).y();
117  pcavars[2] = recHitTools_->getPosition(rh_detid).z();
118  if (pcavars[2] == 0.)
119  edm::LogWarning("EgammaPCAHelper") << " Problem, hit with z =0 ";
120  else {
121  Spot mySpot(rh_detid,itcheck->second->energy(),pcavars,layer,fraction,mip);
122  theSpots_.push_back(mySpot);
123  }
124  }
125  if (debug_) {
126  std::cout << " Stored " << theSpots_.size() << " hits " << std::endl;
127  }
128 }
std::map< DetId, const HGCRecHit * > * hitMap_
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:47
T y() const
Definition: PV3DBase.h:63
T z() const
Definition: PV3DBase.h:64
std::vector< Spot > theSpots_
Definition: DetId.h:18
unsigned int getLayerWithOffset(const DetId &) const
Definition: RecHitTools.cc:294
int getSiThickIndex(const DetId &) const
Definition: RecHitTools.cc:179
GlobalPoint getPosition(const DetId &id) const
Definition: RecHitTools.cc:116
std::vector< double > invThicknessCorrection_
std::vector< double > dEdXWeights_
T x() const
Definition: PV3DBase.h:62
const hgcal::RecHitTools * recHitTools_
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:39

Member Data Documentation

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

Definition at line 104 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 90 of file EgammaPCAHelper.h.

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

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

Definition at line 93 of file EgammaPCAHelper.h.

Referenced by setdEdXWeights(), and storeRecHits().

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

Definition at line 98 of file EgammaPCAHelper.h.

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

int hgcal::EGammaPCAHelper::hitMapOrigin_
private

Definition at line 96 of file EgammaPCAHelper.h.

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

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

Definition at line 94 of file EgammaPCAHelper.h.

Referenced by storeRecHits().

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

Definition at line 110 of file EgammaPCAHelper.h.

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

int hgcal::EGammaPCAHelper::pcaIteration_
private
bool hgcal::EGammaPCAHelper::recHitsStored_
private

Definition at line 89 of file EgammaPCAHelper.h.

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

Definition at line 111 of file EgammaPCAHelper.h.

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

ShowerDepth hgcal::EGammaPCAHelper::showerDepth_
private

Definition at line 112 of file EgammaPCAHelper.h.

Referenced by clusterDepthCompatibility().

double hgcal::EGammaPCAHelper::sige_
private

Definition at line 107 of file EgammaPCAHelper.h.

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

double hgcal::EGammaPCAHelper::sigp_
private

Definition at line 107 of file EgammaPCAHelper.h.

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

double hgcal::EGammaPCAHelper::sigu_
private

Definition at line 107 of file EgammaPCAHelper.h.

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

double hgcal::EGammaPCAHelper::sigv_
private

Definition at line 107 of file EgammaPCAHelper.h.

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

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

Definition at line 97 of file EgammaPCAHelper.h.

Referenced by computeShowerWidth(), and storeRecHits().

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

Definition at line 106 of file EgammaPCAHelper.h.

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