CMS 3D CMS Logo

List of all members | Classes | Public Types | Public Member Functions | Private Member Functions | Private Attributes
PFECALSuperClusterAlgo Class Reference

\ Algorithm for box particle flow super clustering in the ECAL More...

#include <PFECALSuperClusterAlgo.h>

Classes

class  CalibratedPFCluster
 

Public Types

typedef std::shared_ptr< CalibratedPFClusterCalibratedClusterPtr
 
typedef std::vector< CalibratedClusterPtrCalibratedClusterPtrVector
 
enum  clustering_type { kBOX =1, kMustache =2 }
 
enum  energy_weight { kRaw, kCalibratedNoPS, kCalibratedTotal }
 

Public Member Functions

std::unique_ptr< reco::SuperClusterCollection > & getEBOutputSCCollection ()
 
std::unique_ptr< reco::SuperClusterCollection > & getEEOutputSCCollection ()
 
void loadAndSortPFClusters (const edm::Event &evt)
 
 PFECALSuperClusterAlgo ()
 constructor More...
 
void run ()
 
void setClusteringType (clustering_type thetype)
 
void setCrackCorrections (bool applyCrackCorrections)
 
void setEnergyWeighting (energy_weight thetype)
 
void setEtawidthSuperClusterBarrel (double etawidth)
 
void setEtawidthSuperClusterEndcap (double etawidth)
 
void setMajorityFraction (const double f)
 
void setPFClusterCalibration (const std::shared_ptr< PFEnergyCalibration > &)
 
void setPhiwidthSuperClusterBarrel (double phiwidth)
 
void setPhiwidthSuperClusterEndcap (double phiwidth)
 
void setSatelliteMerging (const bool doit)
 
void setSatelliteThreshold (const double t)
 
void setThreshPFClusterBarrel (double thresh)
 
void setThreshPFClusterEndcap (double thresh)
 
void setThreshPFClusterES (double thresh)
 
void setThreshPFClusterSeedBarrel (double thresh)
 
void setThreshPFClusterSeedEndcap (double thresh)
 
void setThreshSuperClusterEt (double thresh)
 
void setTokens (const edm::ParameterSet &, edm::ConsumesCollector &&)
 
void setUseDynamicDPhi (bool useit)
 
void setUseETForSeeding (bool useET)
 
void setUsePS (bool useit)
 
void setUseRegression (bool useRegression)
 
void setVerbosityLevel (bool verbose)
 
void update (const edm::EventSetup &)
 

Private Member Functions

void buildAllSuperClusters (CalibratedClusterPtrVector &, double seedthresh)
 
void buildSuperCluster (CalibratedClusterPtr &, CalibratedClusterPtrVector &)
 

Private Attributes

CalibratedClusterPtrVector _clustersEB
 
CalibratedClusterPtrVector _clustersEE
 
clustering_type _clustype
 
energy_weight _eweight
 
std::shared_ptr< PFEnergyCalibration_pfEnergyCalibration
 
bool _useDynamicDPhi
 
bool applyCrackCorrections_
 
const reco::BeamSpotbeamSpot_
 
const ESChannelStatuschannelStatus_
 
bool doSatelliteClusterMerge_
 
const reco::PFCluster::EEtoPSAssociationEEtoPS_
 
double etawidthSuperCluster_
 
double etawidthSuperClusterBarrel_
 
double etawidthSuperClusterEndcap_
 
double fractionForMajority_
 
edm::EDGetTokenT< reco::BeamSpotinputTagBeamSpot_
 
edm::EDGetTokenT< edm::View< reco::PFCluster > > inputTagPFClusters_
 
edm::EDGetTokenT< reco::PFCluster::EEtoPSAssociationinputTagPFClustersES_
 
double phiwidthSuperCluster_
 
double phiwidthSuperClusterBarrel_
 
double phiwidthSuperClusterEndcap_
 
std::unique_ptr< SCEnergyCorrectorSemiParmregr_
 
double satelliteThreshold_
 
std::unique_ptr< reco::SuperClusterCollectionsuperClustersEB_
 
std::unique_ptr< reco::SuperClusterCollectionsuperClustersEE_
 
bool threshIsET_
 
double threshPFCluster_
 
double threshPFClusterBarrel_
 
double threshPFClusterEndcap_
 
double threshPFClusterES_
 
double threshPFClusterSeed_
 
double threshPFClusterSeedBarrel_
 
double threshPFClusterSeedEndcap_
 
double threshSuperClusterEt_
 
bool usePS
 
bool useRegression_
 
bool verbose_
 

Detailed Description

\ Algorithm for box particle flow super clustering in the ECAL

Original Author: Nicolas Chanon Additional Authors (Mustache): Y. Gershtein, R. Patel, L. Gray

Date
July 2012

Definition at line 50 of file PFECALSuperClusterAlgo.h.

Member Typedef Documentation

Definition at line 70 of file PFECALSuperClusterAlgo.h.

Definition at line 71 of file PFECALSuperClusterAlgo.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

PFECALSuperClusterAlgo::PFECALSuperClusterAlgo ( )

constructor

Definition at line 175 of file PFECALSuperClusterAlgo.cc.

References setPFClusterCalibration().

175 : beamSpot_(0) { }
const reco::BeamSpot * beamSpot_

Member Function Documentation

void PFECALSuperClusterAlgo::buildAllSuperClusters ( CalibratedClusterPtrVector ,
double  seedthresh 
)
private

Definition at line 292 of file PFECALSuperClusterAlgo.cc.

References buildSuperCluster(), fastPrimaryVertexProducer_cfi::clusters, and threshIsET_.

Referenced by run().

293  {
294  IsASeed seedable(seedthresh,threshIsET_);
295  // make sure only seeds appear at the front of the list of clusters
296  std::stable_partition(clusters.begin(),clusters.end(),seedable);
297  // in each iteration we are working on a list that is already sorted
298  // in the cluster energy and remains so through each iteration
299  // NB: since clusters is sorted in loadClusters any_of has O(1)
300  // timing until you run out of seeds!
301  while( std::any_of(clusters.cbegin(), clusters.cend(), seedable) ) {
303  }
304 }
void buildSuperCluster(CalibratedClusterPtr &, CalibratedClusterPtrVector &)
void PFECALSuperClusterAlgo::buildSuperCluster ( CalibratedClusterPtr ,
CalibratedClusterPtrVector  
)
private

Definition at line 307 of file PFECALSuperClusterAlgo.cc.

References _clustype, _eweight, _pfEnergyCalibration, _useDynamicDPhi, reco::SuperCluster::addCluster(), reco::CaloCluster::addHitAndFraction(), reco::SuperCluster::addPreshowerCluster(), applyCrackCorrections_, beamSpot_, channelStatus_, TauDecayModes::dec, doSatelliteClusterMerge_, PFLayer::ECAL_BARREL, PFLayer::ECAL_ENDCAP, EEtoPS_, reco::PFCluster::energy(), reco::CaloCluster::energy(), etawidthSuperClusterBarrel_, etawidthSuperClusterEndcap_, Exception, ESCondObjectContainer< T >::find(), spr::find(), fractionForMajority_, edm::Ptr< T >::get(), ESCondObjectContainer< T >::getMap(), PFLayer::HGCAL, kCalibratedNoPS, kCalibratedTotal, kRaw, reco::PFCluster::layer(), PFClusterWidthAlgo::pflowEtaWidth(), PFClusterWidthAlgo::pflowPhiWidth(), phiwidthSuperClusterBarrel_, phiwidthSuperClusterEndcap_, reco::BeamSpot::position(), reco::CaloCluster::position(), RecoTauValidation_cfi::posX, RecoTauValidation_cfi::posY, reco::SuperCluster::preshowerClustersBegin(), reco::SuperCluster::preshowerClustersEnd(), PFLayer::PS1, PFLayer::PS2, ptFast(), reco::SuperCluster::rawEnergy(), reco::PFCluster::recHitFractions(), regr_, satelliteThreshold_, reco::CaloCluster::setCorrectedEnergy(), reco::SuperCluster::setEtaWidth(), reco::SuperCluster::setPhiWidth(), reco::SuperCluster::setPreshowerEnergy(), reco::SuperCluster::setPreshowerEnergyPlane1(), reco::SuperCluster::setPreshowerEnergyPlane2(), reco::SuperCluster::setSeed(), superClustersEB_, superClustersEE_, threshSuperClusterEt_, useRegression_, and verbose_.

Referenced by buildAllSuperClusters().

308  {
309  IsClustered IsClusteredWithSeed(seed,_clustype,_useDynamicDPhi);
310  IsLinkedByRecHit MatchesSeedByRecHit(seed,satelliteThreshold_,
311  fractionForMajority_,0.1,0.2);
312  bool isEE = false;
313  SumPSEnergy sumps1(PFLayer::PS1), sumps2(PFLayer::PS2);
314  switch( seed->the_ptr()->layer() ) {
316  IsClusteredWithSeed.phiwidthSuperCluster_ = phiwidthSuperClusterBarrel_;
317  IsClusteredWithSeed.etawidthSuperCluster_ = etawidthSuperClusterBarrel_;
318  edm::LogInfo("PFClustering") << "Building SC number "
319  << superClustersEB_->size() + 1
320  << " in the ECAL barrel!";
321  break;
322  case PFLayer::HGCAL:
323  case PFLayer::ECAL_ENDCAP:
324 
325  IsClusteredWithSeed.phiwidthSuperCluster_ = phiwidthSuperClusterEndcap_;
326  IsClusteredWithSeed.etawidthSuperCluster_ = etawidthSuperClusterEndcap_;
327  edm::LogInfo("PFClustering") << "Building SC number "
328  << superClustersEE_->size() + 1
329  << " in the ECAL endcap!" << std::endl;
330  isEE = true;
331  break;
332  default:
333  break;
334  }
335 
336  // this function shuffles the list of clusters into a list
337  // where all clustered sub-clusters are at the front
338  // and returns a pointer to the first unclustered cluster.
339  // The relative ordering of clusters is preserved
340  // (i.e. both resulting sub-lists are sorted by energy).
341  auto not_clustered = std::stable_partition(clusters.begin(),clusters.end(),
342  IsClusteredWithSeed);
343  // satellite cluster merging
344  // it was found that large clusters can split!
345  if( doSatelliteClusterMerge_ ) {
346  not_clustered = std::stable_partition(not_clustered,clusters.end(),
347  MatchesSeedByRecHit);
348  }
349 
350  if(verbose_) {
351  edm::LogInfo("PFClustering") << "Dumping cluster detail";
352  edm::LogVerbatim("PFClustering")
353  << "\tPassed seed: e = " << seed->energy_nocalib()
354  << " eta = " << seed->eta() << " phi = " << seed->phi()
355  << std::endl;
356  for( auto clus = clusters.cbegin(); clus != not_clustered; ++clus ) {
357  edm::LogVerbatim("PFClustering")
358  << "\t\tClustered cluster: e = " << (*clus)->energy_nocalib()
359  << " eta = " << (*clus)->eta() << " phi = " << (*clus)->phi()
360  << std::endl;
361  }
362  for( auto clus = not_clustered; clus != clusters.end(); ++clus ) {
363  edm::LogVerbatim("PFClustering")
364  << "\tNon-Clustered cluster: e = " << (*clus)->energy_nocalib()
365  << " eta = " << (*clus)->eta() << " phi = " << (*clus)->phi()
366  << std::endl;
367  }
368  }
369  // move the clustered clusters out of available cluster list
370  // and into a temporary vector for building the SC
371  CalibratedClusterPtrVector clustered(clusters.begin(),not_clustered);
372  clusters.erase(clusters.begin(),not_clustered);
373  // need the vector of raw pointers for a PF width class
374  std::vector<const reco::PFCluster*> bare_ptrs;
375  // calculate necessary parameters and build the SC
376  double posX(0), posY(0), posZ(0),
377  corrSCEnergy(0), corrPS1Energy(0), corrPS2Energy(0),
378  ePS1(0), ePS2(0), energyweight(0), energyweighttot(0);
379  std::vector<double> ps1_energies, ps2_energies;
380  int condP1(1), condP2(1);
381  for( auto& clus : clustered ) {
382  ePS1 = ePS2 = 0;
383  energyweight = clus->energy_nocalib();
384  bare_ptrs.push_back(clus->the_ptr().get());
385  // update EE calibrated super cluster energies
386  if( isEE ) {
387  ePS1 = ePS2 = 0;
388  condP1 = condP2 = 1;
389  ps1_energies.clear();
390  ps2_energies.clear();
391  auto ee_key_val =
392  std::make_pair(clus->the_ptr().key(),edm::Ptr<reco::PFCluster>());
393  const auto clustops = std::equal_range(EEtoPS_->begin(),
394  EEtoPS_->end(),
395  ee_key_val,
396  sortByKey);
397  for( auto i_ps = clustops.first; i_ps != clustops.second; ++i_ps) {
398  edm::Ptr<reco::PFCluster> psclus(i_ps->second);
399 
400  auto const& recH_Frac = psclus->recHitFractions();
401 
402  switch( psclus->layer() ) {
403  case PFLayer::PS1:
404  ps1_energies.push_back(psclus->energy());
405  for (auto const& recH : recH_Frac){
406  ESDetId strip1 = recH.recHitRef()->detId();
407  if(strip1 != ESDetId(0)){
409  // getStatusCode() == 1 => dead channel
410  //apply correction if all recHits in dead region
411  if(status_p1->getStatusCode() == 0) condP1 = 0; //active
412  }
413  }
414  break;
415  case PFLayer::PS2:
416  ps2_energies.push_back(psclus->energy());
417  for (auto const& recH : recH_Frac){
418  ESDetId strip2 = recH.recHitRef()->detId();
419  if(strip2 != ESDetId(0)) {
421  if(status_p2->getStatusCode() == 0) condP2 = 0;
422  }
423  }
424  break;
425  default:
426  break;
427  }
428  }
429  if(condP1 == 1) ePS1 = -1.;
430  if(condP2 == 1) ePS2 = -1.;
431  _pfEnergyCalibration->energyEm(*(clus->the_ptr()),
432  ps1_energies,ps2_energies,
433  ePS1,ePS2,
435  }
436 
437  if(ePS1 == -1.) ePS1 = 0;
438  if(ePS2 == -1.) ePS2 = 0;
439 
440  switch( _eweight ) {
441  case kRaw: // energyweight is initialized to raw cluster energy
442  break;
443  case kCalibratedNoPS:
444  energyweight = clus->energy() - ePS1 - ePS2;
445  break;
446  case kCalibratedTotal:
447  energyweight = clus->energy();
448  break;
449  default:
450  break;
451  }
452  const math::XYZPoint& cluspos = clus->the_ptr()->position();
453  posX += energyweight * cluspos.X();
454  posY += energyweight * cluspos.Y();
455  posZ += energyweight * cluspos.Z();
456 
457  energyweighttot += energyweight;
458  corrSCEnergy += clus->energy();
459  corrPS1Energy += ePS1;
460  corrPS2Energy += ePS2;
461  }
462  posX /= energyweighttot;
463  posY /= energyweighttot;
464  posZ /= energyweighttot;
465 
466  // now build the supercluster
467  reco::SuperCluster new_sc(corrSCEnergy,math::XYZPoint(posX,posY,posZ));
468  new_sc.setCorrectedEnergy(corrSCEnergy);
469  new_sc.setSeed(clustered.front()->the_ptr());
470  new_sc.setPreshowerEnergy(corrPS1Energy+corrPS2Energy);
471  new_sc.setPreshowerEnergyPlane1(corrPS1Energy);
472  new_sc.setPreshowerEnergyPlane2(corrPS2Energy);
473  for( const auto& clus : clustered ) {
474  new_sc.addCluster(clus->the_ptr());
475 
476  auto& hits_and_fractions = clus->the_ptr()->hitsAndFractions();
477  for( auto& hit_and_fraction : hits_and_fractions ) {
478  new_sc.addHitAndFraction(hit_and_fraction.first,hit_and_fraction.second);
479  }
480  if( isEE ) {
481  auto ee_key_val =
482  std::make_pair(clus->the_ptr().key(),edm::Ptr<reco::PFCluster>());
483  const auto clustops = std::equal_range(EEtoPS_->begin(),
484  EEtoPS_->end(),
485  ee_key_val,
486  sortByKey);
487  // EE rechits should be uniquely matched to sets of pre-shower
488  // clusters at this point, so we throw an exception if otherwise
489  // now wrapped in EDM debug flags
490  for( auto i_ps = clustops.first; i_ps != clustops.second; ++i_ps) {
491  edm::Ptr<reco::PFCluster> psclus(i_ps->second);
492 #ifdef EDM_ML_DEBUG
493  auto found_pscluster = std::find(new_sc.preshowerClustersBegin(),
494  new_sc.preshowerClustersEnd(),
495  i_ps->second);
496  if( found_pscluster == new_sc.preshowerClustersEnd() ) {
497 #endif
498  new_sc.addPreshowerCluster(psclus);
499 #ifdef EDM_ML_DEBUG
500  } else {
501  throw cms::Exception("PFECALSuperClusterAlgo::buildSuperCluster")
502  << "Found a PS cluster matched to more than one EE cluster!"
503  << std::endl << std::hex << psclus.get() << " == "
504  << found_pscluster->get() << std::dec << std::endl;
505  }
506 #endif
507  }
508  }
509  }
510 
511  // calculate linearly weighted cluster widths
512  PFClusterWidthAlgo pfwidth(bare_ptrs);
513  new_sc.setEtaWidth(pfwidth.pflowEtaWidth());
514  new_sc.setPhiWidth(pfwidth.pflowPhiWidth());
515 
516  // cache the value of the raw energy
517  new_sc.rawEnergy();
518 
519  //apply regression energy corrections
520  if( useRegression_ ) {
521  regr_->modifyObject(new_sc);
522  }
523 
524  // save the super cluster to the appropriate list (if it passes the final
525  // Et threshold)
526  //Note that Et is computed here with respect to the beamspot position
527  //in order to be consistent with the cut applied in the
528  //ElectronSeedProducer
529  double scEtBS =
530  ptFast(new_sc.energy(),new_sc.position(),beamSpot_->position());
531 
532  if ( scEtBS > threshSuperClusterEt_ ) {
533  switch( seed->the_ptr()->layer() ) {
535  superClustersEB_->push_back(new_sc);
536  break;
537  case PFLayer::HGCAL:
538  case PFLayer::ECAL_ENDCAP:
539  superClustersEE_->push_back(new_sc);
540  break;
541  default:
542  break;
543  }
544  }
545 }
const ESChannelStatus * channelStatus_
std::unique_ptr< SCEnergyCorrectorSemiParm > regr_
std::unique_ptr< reco::SuperClusterCollection > superClustersEB_
const self & getMap() const
const reco::BeamSpot * beamSpot_
const reco::PFCluster::EEtoPSAssociation * EEtoPS_
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
double ptFast(const double energy, const math::XYZPoint &position, const math::XYZPoint &origin)
std::unique_ptr< reco::SuperClusterCollection > superClustersEE_
std::vector< CalibratedClusterPtr > CalibratedClusterPtrVector
std::shared_ptr< PFEnergyCalibration > _pfEnergyCalibration
const_iterator find(uint32_t rawId) const
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
std::vector< Item >::const_iterator const_iterator
const Point & position() const
position
Definition: BeamSpot.h:62
std::unique_ptr<reco::SuperClusterCollection>& PFECALSuperClusterAlgo::getEBOutputSCCollection ( )
inline

Definition at line 119 of file PFECALSuperClusterAlgo.h.

References superClustersEB_.

119 { return superClustersEB_; }
std::unique_ptr< reco::SuperClusterCollection > superClustersEB_
std::unique_ptr<reco::SuperClusterCollection>& PFECALSuperClusterAlgo::getEEOutputSCCollection ( )
inline

Definition at line 121 of file PFECALSuperClusterAlgo.h.

References loadAndSortPFClusters(), run(), and superClustersEE_.

121 { return superClustersEE_; }
std::unique_ptr< reco::SuperClusterCollection > superClustersEE_
void PFECALSuperClusterAlgo::loadAndSortPFClusters ( const edm::Event evt)

Definition at line 219 of file PFECALSuperClusterAlgo.cc.

References _clustersEB, _clustersEE, beamSpot_, fastPrimaryVertexProducer_cfi::clusters, PFLayer::ECAL_BARREL, PFLayer::ECAL_ENDCAP, EEtoPS_, edm::Event::getByToken(), PFLayer::HGCAL, i, inputTagBeamSpot_, inputTagPFClusters_, inputTagPFClustersES_, LogDebug, edm::Handle< T >::product(), regr_, superClustersEB_, superClustersEE_, threshPFClusterBarrel_, threshPFClusterEndcap_, and useRegression_.

Referenced by getEEOutputSCCollection(), and update().

219  {
220 
221  //load input collections
222  //Load the pfcluster collections
223  edm::Handle<edm::View<reco::PFCluster> > pfclustersHandle;
224  iEvent.getByToken( inputTagPFClusters_, pfclustersHandle );
225 
227  iEvent.getByToken( inputTagPFClustersES_, psAssociationHandle);
228 
229  const PFClusterView& clusters = *pfclustersHandle.product();
230  const reco::PFCluster::EEtoPSAssociation& psclusters = *psAssociationHandle.product();
231 
232  //load BeamSpot
234  iEvent.getByToken( inputTagBeamSpot_, bsHandle);
235  beamSpot_ = bsHandle.product();
236 
237  //initialize regression for this event
238  if (useRegression_) {
239  regr_->setEvent(iEvent);
240  }
241 
242  // reset the system for running
243  superClustersEB_ = std::make_unique<reco::SuperClusterCollection>();
244  _clustersEB.clear();
245  superClustersEE_ = std::make_unique<reco::SuperClusterCollection>();
246  _clustersEE.clear();
247  EEtoPS_ = &psclusters;
248 
249  //Select PF clusters available for the clustering
250  for ( size_t i = 0; i < clusters.size(); ++i ){
251  auto cluster = clusters.ptrAt(i);
252  LogDebug("PFClustering")
253  << "Loading PFCluster i="<<cluster.key()
254  <<" energy="<<cluster->energy()<<std::endl;
255 
256  // protection for sim clusters
257  if( cluster->caloID().detectors() == 0 &&
258  cluster->hitsAndFractions().size() == 0 ) continue;
259 
260  CalibratedClusterPtr calib_cluster(new CalibratedPFCluster(cluster));
261  switch( cluster->layer() ) {
263  if( calib_cluster->energy() > threshPFClusterBarrel_ ) {
264  _clustersEB.push_back(calib_cluster);
265  }
266  break;
267  case PFLayer::HGCAL:
268  case PFLayer::ECAL_ENDCAP:
269  if( calib_cluster->energy() > threshPFClusterEndcap_ ) {
270  _clustersEE.push_back(calib_cluster);
271  }
272  break;
273  default:
274  break;
275  }
276  }
277  // sort full cluster collections by their calibrated energy
278  // this will put all the seeds first by construction
279  GreaterByEt greater;
280  std::sort(_clustersEB.begin(), _clustersEB.end(), greater);
281  std::sort(_clustersEE.begin(), _clustersEE.end(), greater);
282 }
#define LogDebug(id)
int i
Definition: DBlmapReader.cc:9
edm::EDGetTokenT< edm::View< reco::PFCluster > > inputTagPFClusters_
std::unique_ptr< SCEnergyCorrectorSemiParm > regr_
std::unique_ptr< reco::SuperClusterCollection > superClustersEB_
const reco::BeamSpot * beamSpot_
const reco::PFCluster::EEtoPSAssociation * EEtoPS_
std::unique_ptr< reco::SuperClusterCollection > superClustersEE_
std::shared_ptr< CalibratedPFCluster > CalibratedClusterPtr
int iEvent
Definition: GenABIO.cc:230
std::vector< std::pair< CaloClusterPtr::key_type, edm::Ptr< PFCluster > > > EEtoPSAssociation
Definition: PFCluster.h:50
CalibratedClusterPtrVector _clustersEE
edm::EDGetTokenT< reco::PFCluster::EEtoPSAssociation > inputTagPFClustersES_
T const * product() const
Definition: Handle.h:81
edm::EDGetTokenT< reco::BeamSpot > inputTagBeamSpot_
CalibratedClusterPtrVector _clustersEB
void PFECALSuperClusterAlgo::run ( void  )

Definition at line 284 of file PFECALSuperClusterAlgo.cc.

References _clustersEB, _clustersEE, buildAllSuperClusters(), threshPFClusterSeedBarrel_, and threshPFClusterSeedEndcap_.

Referenced by getEEOutputSCCollection().

284  {
285  // clusterize the EB
287  // clusterize the EE
289 }
void buildAllSuperClusters(CalibratedClusterPtrVector &, double seedthresh)
CalibratedClusterPtrVector _clustersEE
CalibratedClusterPtrVector _clustersEB
void PFECALSuperClusterAlgo::setClusteringType ( clustering_type  thetype)
inline

Definition at line 79 of file PFECALSuperClusterAlgo.h.

References _clustype.

79 { _clustype = thetype; }
void PFECALSuperClusterAlgo::setCrackCorrections ( bool  applyCrackCorrections)
inline
void PFECALSuperClusterAlgo::setEnergyWeighting ( energy_weight  thetype)
inline

Definition at line 81 of file PFECALSuperClusterAlgo.h.

References _eweight.

81 { _eweight = thetype; }
void PFECALSuperClusterAlgo::setEtawidthSuperClusterBarrel ( double  etawidth)
inline

Definition at line 97 of file PFECALSuperClusterAlgo.h.

References etawidthSuperClusterBarrel_.

void PFECALSuperClusterAlgo::setEtawidthSuperClusterEndcap ( double  etawidth)
inline

Definition at line 99 of file PFECALSuperClusterAlgo.h.

References etawidthSuperClusterEndcap_.

void PFECALSuperClusterAlgo::setMajorityFraction ( const double  f)
inline

Definition at line 108 of file PFECALSuperClusterAlgo.h.

References f, and fractionForMajority_.

108 { fractionForMajority_ = f; }
double f[11][100]
void PFECALSuperClusterAlgo::setPFClusterCalibration ( const std::shared_ptr< PFEnergyCalibration > &  calib)

Definition at line 178 of file PFECALSuperClusterAlgo.cc.

References _pfEnergyCalibration, and calib.

Referenced by PFECALSuperClusterAlgo(), and setUsePS().

178  {
180 }
MVATrainerComputer * calib
Definition: MVATrainer.cc:64
std::shared_ptr< PFEnergyCalibration > _pfEnergyCalibration
void PFECALSuperClusterAlgo::setPhiwidthSuperClusterBarrel ( double  phiwidth)
inline

Definition at line 96 of file PFECALSuperClusterAlgo.h.

References phiwidthSuperClusterBarrel_.

void PFECALSuperClusterAlgo::setPhiwidthSuperClusterEndcap ( double  phiwidth)
inline

Definition at line 98 of file PFECALSuperClusterAlgo.h.

References phiwidthSuperClusterEndcap_.

void PFECALSuperClusterAlgo::setSatelliteMerging ( const bool  doit)
inline

Definition at line 106 of file PFECALSuperClusterAlgo.h.

References doSatelliteClusterMerge_.

void PFECALSuperClusterAlgo::setSatelliteThreshold ( const double  t)
inline
void PFECALSuperClusterAlgo::setThreshPFClusterBarrel ( double  thresh)
inline
void PFECALSuperClusterAlgo::setThreshPFClusterEndcap ( double  thresh)
inline
void PFECALSuperClusterAlgo::setThreshPFClusterES ( double  thresh)
inline
void PFECALSuperClusterAlgo::setThreshPFClusterSeedBarrel ( double  thresh)
inline
void PFECALSuperClusterAlgo::setThreshPFClusterSeedEndcap ( double  thresh)
inline
void PFECALSuperClusterAlgo::setThreshSuperClusterEt ( double  thresh)
inline
void PFECALSuperClusterAlgo::setTokens ( const edm::ParameterSet iConfig,
edm::ConsumesCollector &&  cc 
)

Definition at line 182 of file PFECALSuperClusterAlgo.cc.

References edm::ParameterSet::getParameter(), inputTagBeamSpot_, inputTagPFClusters_, inputTagPFClustersES_, regr_, and useRegression_.

Referenced by setCrackCorrections().

182  {
183 
185  cc.consumes<edm::View<reco::PFCluster> >(iConfig.getParameter<edm::InputTag>("PFClusters"));
189  cc.consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("BeamSpot"));
190 
191  if (useRegression_) {
192  const edm::ParameterSet &regconf = iConfig.getParameter<edm::ParameterSet>("regressionConfig");
193 
194  regr_.reset(new SCEnergyCorrectorSemiParm());
195  regr_->setTokens(regconf, cc);
196  }
197 
198 }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
edm::EDGetTokenT< edm::View< reco::PFCluster > > inputTagPFClusters_
std::unique_ptr< SCEnergyCorrectorSemiParm > regr_
std::vector< std::pair< CaloClusterPtr::key_type, edm::Ptr< PFCluster > > > EEtoPSAssociation
Definition: PFCluster.h:50
edm::EDGetTokenT< reco::PFCluster::EEtoPSAssociation > inputTagPFClustersES_
edm::EDGetTokenT< reco::BeamSpot > inputTagBeamSpot_
void PFECALSuperClusterAlgo::setUseDynamicDPhi ( bool  useit)
inline

Definition at line 85 of file PFECALSuperClusterAlgo.h.

References _useDynamicDPhi.

void PFECALSuperClusterAlgo::setUseETForSeeding ( bool  useET)
inline

Definition at line 83 of file PFECALSuperClusterAlgo.h.

References threshIsET_.

void PFECALSuperClusterAlgo::setUsePS ( bool  useit)
inline

Definition at line 100 of file PFECALSuperClusterAlgo.h.

References setPFClusterCalibration(), and usePS.

100 { usePS = useit; }
void PFECALSuperClusterAlgo::setUseRegression ( bool  useRegression)
inline
void PFECALSuperClusterAlgo::setVerbosityLevel ( bool  verbose)
inline

Definition at line 77 of file PFECALSuperClusterAlgo.h.

References verbose, and verbose_.

void PFECALSuperClusterAlgo::update ( const edm::EventSetup setup)

Definition at line 200 of file PFECALSuperClusterAlgo.cc.

References _pfEnergyCalibration, channelStatus_, edm::EventSetup::get(), loadAndSortPFClusters(), edm::ESHandle< T >::product(), regr_, and useRegression_.

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), MatrixUtil.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), setCrackCorrections(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

200  {
201 
202  if (useRegression_) {
203  regr_->setEventSetup(setup);
204  }
205 
206  edm::ESHandle<ESEEIntercalibConstants> esEEInterCalibHandle_;
207  setup.get<ESEEIntercalibConstantsRcd>().get(esEEInterCalibHandle_);
208  _pfEnergyCalibration->initAlphaGamma_ESplanes_fromDB(esEEInterCalibHandle_.product());
209 
210  edm::ESHandle<ESChannelStatus> esChannelStatusHandle_;
211  setup.get<ESChannelStatusRcd>().get(esChannelStatusHandle_);
212  channelStatus_ = esChannelStatusHandle_.product();
213 
214 }
const ESChannelStatus * channelStatus_
std::unique_ptr< SCEnergyCorrectorSemiParm > regr_
std::shared_ptr< PFEnergyCalibration > _pfEnergyCalibration
const T & get() const
Definition: EventSetup.h:56
T const * product() const
Definition: ESHandle.h:86

Member Data Documentation

CalibratedClusterPtrVector PFECALSuperClusterAlgo::_clustersEB
private

Definition at line 136 of file PFECALSuperClusterAlgo.h.

Referenced by loadAndSortPFClusters(), and run().

CalibratedClusterPtrVector PFECALSuperClusterAlgo::_clustersEE
private

Definition at line 137 of file PFECALSuperClusterAlgo.h.

Referenced by loadAndSortPFClusters(), and run().

clustering_type PFECALSuperClusterAlgo::_clustype
private

Definition at line 142 of file PFECALSuperClusterAlgo.h.

Referenced by buildSuperCluster(), and setClusteringType().

energy_weight PFECALSuperClusterAlgo::_eweight
private

Definition at line 143 of file PFECALSuperClusterAlgo.h.

Referenced by buildSuperCluster(), and setEnergyWeighting().

std::shared_ptr<PFEnergyCalibration> PFECALSuperClusterAlgo::_pfEnergyCalibration
private

Definition at line 141 of file PFECALSuperClusterAlgo.h.

Referenced by buildSuperCluster(), setPFClusterCalibration(), and update().

bool PFECALSuperClusterAlgo::_useDynamicDPhi
private

Definition at line 176 of file PFECALSuperClusterAlgo.h.

Referenced by buildSuperCluster(), and setUseDynamicDPhi().

bool PFECALSuperClusterAlgo::applyCrackCorrections_
private

Definition at line 178 of file PFECALSuperClusterAlgo.h.

Referenced by buildSuperCluster(), and setCrackCorrections().

const reco::BeamSpot* PFECALSuperClusterAlgo::beamSpot_
private

Definition at line 133 of file PFECALSuperClusterAlgo.h.

Referenced by buildSuperCluster(), and loadAndSortPFClusters().

const ESChannelStatus* PFECALSuperClusterAlgo::channelStatus_
private

Definition at line 134 of file PFECALSuperClusterAlgo.h.

Referenced by buildSuperCluster(), and update().

bool PFECALSuperClusterAlgo::doSatelliteClusterMerge_
private

Definition at line 173 of file PFECALSuperClusterAlgo.h.

Referenced by buildSuperCluster(), and setSatelliteMerging().

const reco::PFCluster::EEtoPSAssociation* PFECALSuperClusterAlgo::EEtoPS_
private

Definition at line 140 of file PFECALSuperClusterAlgo.h.

Referenced by buildSuperCluster(), and loadAndSortPFClusters().

double PFECALSuperClusterAlgo::etawidthSuperCluster_
private

Definition at line 159 of file PFECALSuperClusterAlgo.h.

double PFECALSuperClusterAlgo::etawidthSuperClusterBarrel_
private

Definition at line 169 of file PFECALSuperClusterAlgo.h.

Referenced by buildSuperCluster(), and setEtawidthSuperClusterBarrel().

double PFECALSuperClusterAlgo::etawidthSuperClusterEndcap_
private

Definition at line 171 of file PFECALSuperClusterAlgo.h.

Referenced by buildSuperCluster(), and setEtawidthSuperClusterEndcap().

double PFECALSuperClusterAlgo::fractionForMajority_
private

Definition at line 174 of file PFECALSuperClusterAlgo.h.

Referenced by buildSuperCluster(), and setMajorityFraction().

edm::EDGetTokenT<reco::BeamSpot> PFECALSuperClusterAlgo::inputTagBeamSpot_
private

Definition at line 131 of file PFECALSuperClusterAlgo.h.

Referenced by loadAndSortPFClusters(), and setTokens().

edm::EDGetTokenT<edm::View<reco::PFCluster> > PFECALSuperClusterAlgo::inputTagPFClusters_
private

Definition at line 129 of file PFECALSuperClusterAlgo.h.

Referenced by loadAndSortPFClusters(), and setTokens().

edm::EDGetTokenT<reco::PFCluster::EEtoPSAssociation> PFECALSuperClusterAlgo::inputTagPFClustersES_
private

Definition at line 130 of file PFECALSuperClusterAlgo.h.

Referenced by loadAndSortPFClusters(), and setTokens().

double PFECALSuperClusterAlgo::phiwidthSuperCluster_
private

Definition at line 160 of file PFECALSuperClusterAlgo.h.

double PFECALSuperClusterAlgo::phiwidthSuperClusterBarrel_
private

Definition at line 168 of file PFECALSuperClusterAlgo.h.

Referenced by buildSuperCluster(), and setPhiwidthSuperClusterBarrel().

double PFECALSuperClusterAlgo::phiwidthSuperClusterEndcap_
private

Definition at line 170 of file PFECALSuperClusterAlgo.h.

Referenced by buildSuperCluster(), and setPhiwidthSuperClusterEndcap().

std::unique_ptr<SCEnergyCorrectorSemiParm> PFECALSuperClusterAlgo::regr_
private
double PFECALSuperClusterAlgo::satelliteThreshold_
private

Definition at line 174 of file PFECALSuperClusterAlgo.h.

Referenced by buildSuperCluster(), and setSatelliteThreshold().

std::unique_ptr<reco::SuperClusterCollection> PFECALSuperClusterAlgo::superClustersEB_
private
std::unique_ptr<reco::SuperClusterCollection> PFECALSuperClusterAlgo::superClustersEE_
private
bool PFECALSuperClusterAlgo::threshIsET_
private

Definition at line 179 of file PFECALSuperClusterAlgo.h.

Referenced by buildAllSuperClusters(), and setUseETForSeeding().

double PFECALSuperClusterAlgo::threshPFCluster_
private

Definition at line 158 of file PFECALSuperClusterAlgo.h.

double PFECALSuperClusterAlgo::threshPFClusterBarrel_
private

Definition at line 163 of file PFECALSuperClusterAlgo.h.

Referenced by loadAndSortPFClusters(), and setThreshPFClusterBarrel().

double PFECALSuperClusterAlgo::threshPFClusterEndcap_
private

Definition at line 165 of file PFECALSuperClusterAlgo.h.

Referenced by loadAndSortPFClusters(), and setThreshPFClusterEndcap().

double PFECALSuperClusterAlgo::threshPFClusterES_
private

Definition at line 166 of file PFECALSuperClusterAlgo.h.

Referenced by setThreshPFClusterES().

double PFECALSuperClusterAlgo::threshPFClusterSeed_
private

Definition at line 157 of file PFECALSuperClusterAlgo.h.

double PFECALSuperClusterAlgo::threshPFClusterSeedBarrel_
private

Definition at line 162 of file PFECALSuperClusterAlgo.h.

Referenced by run(), and setThreshPFClusterSeedBarrel().

double PFECALSuperClusterAlgo::threshPFClusterSeedEndcap_
private

Definition at line 164 of file PFECALSuperClusterAlgo.h.

Referenced by run(), and setThreshPFClusterSeedEndcap().

double PFECALSuperClusterAlgo::threshSuperClusterEt_
private

Definition at line 155 of file PFECALSuperClusterAlgo.h.

Referenced by buildSuperCluster(), and setThreshSuperClusterEt().

bool PFECALSuperClusterAlgo::usePS
private

Definition at line 181 of file PFECALSuperClusterAlgo.h.

Referenced by setUsePS().

bool PFECALSuperClusterAlgo::useRegression_
private
bool PFECALSuperClusterAlgo::verbose_
private

Definition at line 149 of file PFECALSuperClusterAlgo.h.

Referenced by buildSuperCluster(), and setVerbosityLevel().