CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Protected Member Functions | Protected Attributes
PFRecHitCaloNavigatorWithTime< D, T, ownsTopo > Class Template Reference

#include <PFRecHitCaloNavigatorWithTime.h>

Inheritance diagram for PFRecHitCaloNavigatorWithTime< D, T, ownsTopo >:
PFRecHitNavigatorBase

Public Member Functions

void associateNeighbours (reco::PFRecHit &hit, std::auto_ptr< reco::PFRecHitCollection > &hits, edm::RefProd< reco::PFRecHitCollection > &refProd)
 
 PFRecHitCaloNavigatorWithTime (const edm::ParameterSet &iConfig)
 
virtual ~PFRecHitCaloNavigatorWithTime ()
 
- Public Member Functions inherited from PFRecHitNavigatorBase
virtual void beginEvent (const edm::EventSetup &)=0
 
 PFRecHitNavigatorBase ()
 
 PFRecHitNavigatorBase (const edm::ParameterSet &iConfig)
 
virtual ~PFRecHitNavigatorBase ()
 

Protected Member Functions

void associateNeighbour (const DetId &id, reco::PFRecHit &hit, std::auto_ptr< reco::PFRecHitCollection > &hits, edm::RefProd< reco::PFRecHitCollection > &refProd, short eta, short phi)
 
- Protected Member Functions inherited from PFRecHitNavigatorBase
void associateNeighbour (const DetId &id, reco::PFRecHit &hit, std::auto_ptr< reco::PFRecHitCollection > &hits, edm::RefProd< reco::PFRecHitCollection > &refProd, short eta, short phi, short depth)
 

Protected Attributes

std::unique_ptr
< ECALRecHitResolutionProvider
_timeResolutionCalc
 
double constantTerm2_
 
double noiseLevel2_
 
double noiseTerm2_
 
double sigmaCut2_
 
std::unique_ptr< const Ttopology_
 

Detailed Description

template<typename D, typename T, bool ownsTopo = true>
class PFRecHitCaloNavigatorWithTime< D, T, ownsTopo >

Definition at line 26 of file PFRecHitCaloNavigatorWithTime.h.

Constructor & Destructor Documentation

template<typename D, typename T, bool ownsTopo = true>
PFRecHitCaloNavigatorWithTime< D, T, ownsTopo >::PFRecHitCaloNavigatorWithTime ( const edm::ParameterSet iConfig)
inline

Definition at line 28 of file PFRecHitCaloNavigatorWithTime.h.

28  {
29  noiseLevel2_ = pow(iConfig.getParameter<double>("noiseLevel"), 2);
30  noiseTerm2_ = pow(iConfig.getParameter<double>("noiseTerm"), 2);
31  constantTerm2_ = pow(iConfig.getParameter<double>("constantTerm"), 2);
32  sigmaCut2_ = pow(iConfig.getParameter<double>("sigmaCut"), 2);
33 
35  if( iConfig.exists("timeResolutionCalc") ) {
36  const edm::ParameterSet& timeResConf =
37  iConfig.getParameterSet("timeResolutionCalc");
38  _timeResolutionCalc.reset(new ECALRecHitResolutionProvider(timeResConf));
39  }
40  }
std::unique_ptr< ECALRecHitResolutionProvider > _timeResolutionCalc
T getParameter(std::string const &) const
bool exists(std::string const &parameterName) const
checks if a parameter exists
#define NULL
Definition: scimark2.h:8
ParameterSet const & getParameterSet(std::string const &) const
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
template<typename D, typename T, bool ownsTopo = true>
virtual PFRecHitCaloNavigatorWithTime< D, T, ownsTopo >::~PFRecHitCaloNavigatorWithTime ( )
inlinevirtual

Definition at line 42 of file PFRecHitCaloNavigatorWithTime.h.

42 { if(!ownsTopo) { topology_.release(); } }

Member Function Documentation

template<typename D, typename T, bool ownsTopo = true>
void PFRecHitCaloNavigatorWithTime< D, T, ownsTopo >::associateNeighbour ( const DetId id,
reco::PFRecHit hit,
std::auto_ptr< reco::PFRecHitCollection > &  hits,
edm::RefProd< reco::PFRecHitCollection > &  refProd,
short  eta,
short  phi 
)
inlineprotected

Definition at line 121 of file PFRecHitCaloNavigatorWithTime.h.

Referenced by PFRecHitCaloNavigatorWithTime< EEDetId, EcalEndcapTopology >::associateNeighbours().

121  {
122  double sigma2=10000.0;
123 
124  const reco::PFRecHit temp(id,PFLayer::NONE,0.0,math::XYZPoint(0,0,0),math::XYZVector(0,0,0),std::vector<math::XYZPoint>());
125  auto found_hit = std::lower_bound(hits->begin(),hits->end(),
126  temp,
127  [](const reco::PFRecHit& a,
128  const reco::PFRecHit& b){
129  return a.detId() < b.detId();
130  });
131  if( found_hit != hits->end() && found_hit->detId() == id.rawId() ) {
132  if (_timeResolutionCalc) {
133  sigma2 = _timeResolutionCalc->timeResolution2(hit.energy()) + _timeResolutionCalc->timeResolution2(found_hit->energy());
134  }
135  else {
136  const double hitEnergy = hit.energy();
137  const double hitEnergy2 = hitEnergy*hitEnergy;
138  const double fhEnergy = found_hit->energy();
139  const double fhEnergy2 = fhEnergy*fhEnergy;
140  sigma2 = noiseTerm2_*noiseLevel2_*(hitEnergy2+fhEnergy2)/(hitEnergy2*fhEnergy2) + 2*constantTerm2_;
141  }
142  const double deltaTime = hit.time()-found_hit->time();
143  if(deltaTime*deltaTime/sigma2<sigmaCut2_) {
144  hit.addNeighbour(eta,phi,0,reco::PFRecHitRef(refProd,std::distance(hits->begin(),found_hit)));
145  }
146  }
147  }
std::unique_ptr< ECALRecHitResolutionProvider > _timeResolutionCalc
void addNeighbour(short x, short y, short z, const PFRecHitRef &)
Definition: PFRecHit.cc:129
T eta() const
Particle flow rechit (rechit + geometry and topology information). See clustering algorithm in PFClus...
Definition: PFRecHit.h:35
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
double b
Definition: hdecay.h:120
double energy() const
rechit energy
Definition: PFRecHit.h:107
double a
Definition: hdecay.h:121
double time() const
timing for cleaned hits
Definition: PFRecHit.h:111
Definition: DDAxes.h:10
template<typename D, typename T, bool ownsTopo = true>
void PFRecHitCaloNavigatorWithTime< D, T, ownsTopo >::associateNeighbours ( reco::PFRecHit hit,
std::auto_ptr< reco::PFRecHitCollection > &  hits,
edm::RefProd< reco::PFRecHitCollection > &  refProd 
)
inlinevirtual

Implements PFRecHitNavigatorBase.

Definition at line 45 of file PFRecHitCaloNavigatorWithTime.h.

45  {
46  DetId detid( hit.detId() );
47 
48  CaloNavigator<D> navigator(detid, topology_.get());
49 
50  DetId N(0);
51  DetId E(0);
52  DetId S(0);
53  DetId W(0);
54  DetId NW(0);
55  DetId NE(0);
56  DetId SW(0);
57  DetId SE(0);
58 
59 
60  N=navigator.north();
61  associateNeighbour(N,hit,hits,refProd,0,1);
62 
63 
64  if (N !=DetId(0)) {
65  NE=navigator.east();
66  }
67  else
68  {
69  navigator.home();
70  E=navigator.east();
71  NE=navigator.north();
72  }
73  associateNeighbour(NE,hit,hits,refProd,1,1);
74  navigator.home();
75 
76  S = navigator.south();
77  associateNeighbour(S,hit,hits,refProd,0,-1);
78 
79  if (S !=DetId(0)) {
80  SW = navigator.west();
81  } else {
82  navigator.home();
83  W=navigator.west();
84  SW=navigator.south();
85  }
86  associateNeighbour(SW,hit,hits,refProd,-1,-1);
87  navigator.home();
88 
89  E = navigator.east();
90  associateNeighbour(E,hit,hits,refProd,1,0);
91 
92  if (E !=DetId(0)) {
93  SE = navigator.south();
94  } else {
95  navigator.home();
96  S=navigator.south();
97  SE=navigator.east();
98  }
99  associateNeighbour(SE,hit,hits,refProd,1,-1);
100  navigator.home();
101 
102 
103  W = navigator.west();
104  associateNeighbour(W,hit,hits,refProd,-1,0);
105 
106  if (W !=DetId(0)) {
107  NW = navigator.north();
108  } else {
109  navigator.home();
110  N=navigator.north();
111  NW=navigator.west();
112  }
113  associateNeighbour(NW,hit,hits,refProd,-1,1);
114  }
unsigned detId() const
rechit detId
Definition: PFRecHit.h:101
Definition: DetId.h:18
#define N
Definition: blowfish.cc:9
double S(const TLorentzVector &, const TLorentzVector &)
Definition: Particle.cc:99
void associateNeighbour(const DetId &id, reco::PFRecHit &hit, std::auto_ptr< reco::PFRecHitCollection > &hits, edm::RefProd< reco::PFRecHitCollection > &refProd, short eta, short phi)

Member Data Documentation

template<typename D, typename T, bool ownsTopo = true>
std::unique_ptr<ECALRecHitResolutionProvider> PFRecHitCaloNavigatorWithTime< D, T, ownsTopo >::_timeResolutionCalc
protected
template<typename D, typename T, bool ownsTopo = true>
double PFRecHitCaloNavigatorWithTime< D, T, ownsTopo >::constantTerm2_
protected
template<typename D, typename T, bool ownsTopo = true>
double PFRecHitCaloNavigatorWithTime< D, T, ownsTopo >::noiseLevel2_
protected
template<typename D, typename T, bool ownsTopo = true>
double PFRecHitCaloNavigatorWithTime< D, T, ownsTopo >::noiseTerm2_
protected
template<typename D, typename T, bool ownsTopo = true>
double PFRecHitCaloNavigatorWithTime< D, T, ownsTopo >::sigmaCut2_
protected
template<typename D, typename T, bool ownsTopo = true>
std::unique_ptr<const T> PFRecHitCaloNavigatorWithTime< D, T, ownsTopo >::topology_
protected