CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Classes | Public Types | Public Member Functions | Private Member Functions | Private Attributes
ElectronSeedGenerator Class Reference

#include <ElectronSeedGenerator.h>

Classes

struct  Tokens
 

Public Types

typedef
TransientTrackingRecHit::ConstRecHitPointer 
ConstRecHitPointer
 
typedef edm::OwnVector
< TrackingRecHit
PRecHitContainer
 
typedef
TransientTrackingRecHit::RecHitContainer 
RecHitContainer
 
typedef
TransientTrackingRecHit::RecHitPointer 
RecHitPointer
 

Public Member Functions

 ElectronSeedGenerator (const edm::ParameterSet &, const Tokens &, edm::ConsumesCollector &&)
 
void run (edm::Event &, const reco::SuperClusterRefVector &, const std::vector< const TrajectorySeedCollection * > &seedsV, reco::ElectronSeedCollection &)
 
void setupES (const edm::EventSetup &setup)
 

Private Member Functions

void seedsFromThisCluster (edm::Ref< reco::SuperClusterCollection > seedCluster, reco::BeamSpot const &beamSpot, std::vector< reco::Vertex > const *vertices, reco::ElectronSeedCollection &out)
 

Private Attributes

const edm::EDGetTokenT
< reco::BeamSpot
beamSpotTag_
 
const float deltaPhi1High_
 
const float deltaPhi1Low_
 
const float deltaPhi2B_
 
const float deltaPhi2F_
 
const float deltaZ1WithVertex_
 
const double dPhi1Coef1_
 
const double dPhi1Coef2_
 
const bool dynamicPhiRoad_
 
const float highPtThresh_
 
const std::vector< const
TrajectorySeedCollection * > * 
initialSeedCollectionVector_ = nullptr
 
const float lowPtThresh_
 
const edm::ESGetToken
< MagneticField,
IdealMagneticFieldRecord
magFieldToken_
 
edm::ESWatcher
< IdealMagneticFieldRecord
magneticFieldWatcher_
 
PixelHitMatcher matcher_
 
const float nSigmasDeltaZ1_
 
const float phiMax2B_
 
const float phiMax2F_
 
const float phiMin2B_
 
const float phiMin2F_
 
const float sizeWindowENeg_
 
const edm::ESGetToken
< TrackerGeometry,
TrackerDigiGeometryRecord
trackerGeometryToken_
 
edm::ESWatcher
< TrackerDigiGeometryRecord
trackerGeometryWatcher_
 
const bool useRecoVertex_
 
const edm::EDGetTokenT
< std::vector< reco::Vertex > > 
verticesTag_
 

Detailed Description

Class to generate the trajectory seed from two hits in the pixel detector which have been found compatible with an ECAL cluster.

Author
U.Berthon, C.Charlot, LLR Palaiseau
Version
1st Version May 30, 2006

Description: Top algorithm producing ElectronSeeds, ported from ORCA

Implementation: future redesign...

Definition at line 46 of file ElectronSeedGenerator.h.

Member Typedef Documentation

Definition at line 54 of file ElectronSeedGenerator.h.

Definition at line 53 of file ElectronSeedGenerator.h.

Definition at line 56 of file ElectronSeedGenerator.h.

Definition at line 55 of file ElectronSeedGenerator.h.

Constructor & Destructor Documentation

ElectronSeedGenerator::ElectronSeedGenerator ( const edm::ParameterSet pset,
const Tokens ts,
edm::ConsumesCollector &&  cc 
)

Definition at line 128 of file ElectronSeedGenerator.cc.

131  : dynamicPhiRoad_(pset.getParameter<bool>("dynamicPhiRoad")),
132  verticesTag_(ts.token_vtx),
133  beamSpotTag_(ts.token_bs),
136  lowPtThresh_(pset.getParameter<double>("LowPtThreshold")),
137  highPtThresh_(pset.getParameter<double>("HighPtThreshold")),
138  nSigmasDeltaZ1_(pset.getParameter<double>("nSigmasDeltaZ1")),
139  deltaZ1WithVertex_(pset.getParameter<double>("deltaZ1WithVertex")),
140  sizeWindowENeg_(pset.getParameter<double>("SizeWindowENeg")),
141  deltaPhi1Low_(pset.getParameter<double>("DeltaPhi1Low")),
142  deltaPhi1High_(pset.getParameter<double>("DeltaPhi1High")),
143  // so that deltaPhi1 = dPhi1Coef1_ + dPhi1Coef2_/clusterEnergyT
146  // use of reco vertex
147  useRecoVertex_(pset.getParameter<bool>("useRecoVertex")),
148  // new B/F configurables
149  deltaPhi2B_(pset.getParameter<double>("DeltaPhi2B")),
150  deltaPhi2F_(pset.getParameter<double>("DeltaPhi2F")),
151  phiMin2B_(-pset.getParameter<double>("PhiMax2B")),
152  phiMin2F_(-pset.getParameter<double>("PhiMax2F")),
153  phiMax2B_(pset.getParameter<double>("PhiMax2B")),
154  phiMax2F_(pset.getParameter<double>("PhiMax2F")),
155  matcher_(pset.getParameter<double>("ePhiMin1"),
156  pset.getParameter<double>("ePhiMax1"),
157  phiMin2B_,
158  phiMax2B_,
159  phiMin2F_,
160  phiMax2F_,
161  pset.getParameter<double>("z2MaxB"),
162  pset.getParameter<double>("r2MaxF"),
163  pset.getParameter<double>("rMaxI"),
164  useRecoVertex_) {}
const edm::EDGetTokenT< std::vector< reco::Vertex > > verticesTag_
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerGeometryToken_
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magFieldToken_
const edm::EDGetTokenT< reco::BeamSpot > beamSpotTag_
T getParameter(std::string const &) const
Definition: ParameterSet.h:303

Member Function Documentation

void ElectronSeedGenerator::run ( edm::Event e,
const reco::SuperClusterRefVector sclRefs,
const std::vector< const TrajectorySeedCollection * > &  seedsV,
reco::ElectronSeedCollection out 
)

Definition at line 172 of file ElectronSeedGenerator.cc.

References beam_dqm_sourceclient-live_cfg::beamSpot, beamSpotTag_, edm::Event::get(), mps_fire::i, edm::EventBase::id(), initialSeedCollectionVector_, LogDebug, seedsFromThisCluster(), edm::RefVector< C, T, F >::size(), useRecoVertex_, beam_dqm_sourceclient-live_cfg::vertices, and verticesTag_.

175  {
177 
178  // get the beamspot from the Event:
179  auto const &beamSpot = e.get(beamSpotTag_);
180 
181  // if required get the vertices
182  std::vector<reco::Vertex> const *vertices = nullptr;
183  if (useRecoVertex_)
184  vertices = &e.get(verticesTag_);
185 
186  for (unsigned int i = 0; i < sclRefs.size(); ++i) {
187  // Find the seeds
188  LogDebug("ElectronSeedGenerator") << "new cluster, calling seedsFromThisCluster";
189  seedsFromThisCluster(sclRefs[i], beamSpot, vertices, out);
190  }
191 
192  LogDebug("ElectronSeedGenerator") << ": For event " << e.id();
193  LogDebug("ElectronSeedGenerator") << "Nr of superclusters after filter: " << sclRefs.size()
194  << ", no. of ElectronSeeds found = " << out.size();
195 }
void seedsFromThisCluster(edm::Ref< reco::SuperClusterCollection > seedCluster, reco::BeamSpot const &beamSpot, std::vector< reco::Vertex > const *vertices, reco::ElectronSeedCollection &out)
const edm::EDGetTokenT< std::vector< reco::Vertex > > verticesTag_
const std::vector< const TrajectorySeedCollection * > * initialSeedCollectionVector_
const edm::EDGetTokenT< reco::BeamSpot > beamSpotTag_
bool get(ProductID const &oid, Handle< PROD > &result) const
Definition: Event.h:346
edm::EventID id() const
Definition: EventBase.h:59
size_type size() const
Size of the RefVector.
Definition: RefVector.h:102
#define LogDebug(id)
void ElectronSeedGenerator::seedsFromThisCluster ( edm::Ref< reco::SuperClusterCollection seedCluster,
reco::BeamSpot const &  beamSpot,
std::vector< reco::Vertex > const *  vertices,
reco::ElectronSeedCollection out 
)
private

Definition at line 197 of file ElectronSeedGenerator.cc.

References deltaPhi1High_, deltaPhi1Low_, deltaPhi2B_, deltaPhi2F_, deltaZ1WithVertex_, dPhi1Coef1_, dPhi1Coef2_, dynamicPhiRoad_, ele_convert(), PVValHelper::eta, highPtThresh_, initialSeedCollectionVector_, lowPtThresh_, matcher_, nSigmasDeltaZ1_, reco::BeamSpot::position(), PixelHitMatcher::set1stLayer(), PixelHitMatcher::set1stLayerZRange(), PixelHitMatcher::set2ndLayer(), BeamSpotPI::sigmaZ, reco::BeamSpot::sigmaZ(), reco::BeamSpot::sigmaZ0Error(), sizeWindowENeg_, mathSSE::sqrt(), and useRecoVertex_.

Referenced by run().

200  {
201  float clusterEnergy = seedCluster->energy();
202  GlobalPoint clusterPos(seedCluster->position().x(), seedCluster->position().y(), seedCluster->position().z());
203  reco::ElectronSeed::CaloClusterRef caloCluster(seedCluster);
204 
205  if (dynamicPhiRoad_) {
206  float clusterEnergyT = clusterEnergy / cosh(EleRelPoint(clusterPos, beamSpot.position()).eta());
207 
208  float deltaPhi1;
209  if (clusterEnergyT < lowPtThresh_) {
210  deltaPhi1 = deltaPhi1Low_;
211  } else if (clusterEnergyT > highPtThresh_) {
212  deltaPhi1 = deltaPhi1High_;
213  } else {
214  deltaPhi1 = dPhi1Coef1_ + dPhi1Coef2_ / clusterEnergyT;
215  }
216 
217  matcher_.set1stLayer(-deltaPhi1 * sizeWindowENeg_, deltaPhi1 * (1. - sizeWindowENeg_));
219  }
220 
221  if (!useRecoVertex_) // here use the beam spot position
222  {
223  double sigmaZ = beamSpot.sigmaZ();
224  double sigmaZ0Error = beamSpot.sigmaZ0Error();
225  double sq = sqrt(sigmaZ * sigmaZ + sigmaZ0Error * sigmaZ0Error);
226  double myZmin1 = beamSpot.position().z() - nSigmasDeltaZ1_ * sq;
227  double myZmax1 = beamSpot.position().z() + nSigmasDeltaZ1_ * sq;
228 
229  GlobalPoint vertexPos;
230  ele_convert(beamSpot.position(), vertexPos);
231 
232  matcher_.set1stLayerZRange(myZmin1, myZmax1);
233 
234  // try electron
235  auto elePixelSeeds = matcher_(*initialSeedCollectionVector_, clusterPos, vertexPos, clusterEnergy, -1.);
236  seedsFromTrajectorySeeds(elePixelSeeds, caloCluster, out, false);
237  // try positron
238  auto posPixelSeeds = matcher_(*initialSeedCollectionVector_, clusterPos, vertexPos, clusterEnergy, 1.);
239  seedsFromTrajectorySeeds(posPixelSeeds, caloCluster, out, true);
240 
241  } else if (vertices) // here we use the reco vertices
242  {
243  for (auto const &vertex : *vertices) {
244  GlobalPoint vertexPos(vertex.position().x(), vertex.position().y(), vertex.position().z());
245  double myZmin1, myZmax1;
246  if (vertexPos.z() == beamSpot.position().z()) { // in case vetex not found
247  double sigmaZ = beamSpot.sigmaZ();
248  double sigmaZ0Error = beamSpot.sigmaZ0Error();
249  double sq = sqrt(sigmaZ * sigmaZ + sigmaZ0Error * sigmaZ0Error);
250  myZmin1 = beamSpot.position().z() - nSigmasDeltaZ1_ * sq;
251  myZmax1 = beamSpot.position().z() + nSigmasDeltaZ1_ * sq;
252  } else { // a vertex has been recoed
253  myZmin1 = vertex.position().z() - deltaZ1WithVertex_;
254  myZmax1 = vertex.position().z() + deltaZ1WithVertex_;
255  }
256 
257  matcher_.set1stLayerZRange(myZmin1, myZmax1);
258 
259  // try electron
260  auto elePixelSeeds = matcher_(*initialSeedCollectionVector_, clusterPos, vertexPos, clusterEnergy, -1.);
261  seedsFromTrajectorySeeds(elePixelSeeds, caloCluster, out, false);
262  // try positron
263  auto posPixelSeeds = matcher_(*initialSeedCollectionVector_, clusterPos, vertexPos, clusterEnergy, 1.);
264  seedsFromTrajectorySeeds(posPixelSeeds, caloCluster, out, true);
265  }
266  }
267 }
void set2ndLayer(float dummyphi2minB, float dummyphi2maxB, float dummyphi2minF, float dummyphi2maxF)
const std::vector< const TrajectorySeedCollection * > * initialSeedCollectionVector_
void set1stLayerZRange(float zmin1, float zmax1)
T sqrt(T t)
Definition: SSEVec.h:19
T z() const
Definition: PV3DBase.h:61
void set1stLayer(float dummyphi1min, float dummyphi1max)
void ele_convert(const Type1 &obj1, Type2 &obj2)
void ElectronSeedGenerator::setupES ( const edm::EventSetup setup)

Definition at line 166 of file ElectronSeedGenerator.cc.

References edm::ESWatcher< T >::check(), edm::EventSetup::getData(), magFieldToken_, magneticFieldWatcher_, matcher_, PixelHitMatcher::setES(), trackerGeometryToken_, and trackerGeometryWatcher_.

166  {
169  }
170 }
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerGeometryToken_
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magFieldToken_
bool getData(T &iHolder) const
Definition: EventSetup.h:128
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:57
edm::ESWatcher< TrackerDigiGeometryRecord > trackerGeometryWatcher_
edm::ESWatcher< IdealMagneticFieldRecord > magneticFieldWatcher_
void setES(MagneticField const &, TrackerGeometry const &trackerGeometry)

Member Data Documentation

const edm::EDGetTokenT<reco::BeamSpot> ElectronSeedGenerator::beamSpotTag_
private

Definition at line 75 of file ElectronSeedGenerator.h.

Referenced by run().

const float ElectronSeedGenerator::deltaPhi1High_
private

Definition at line 88 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

const float ElectronSeedGenerator::deltaPhi1Low_
private

Definition at line 87 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

const float ElectronSeedGenerator::deltaPhi2B_
private

Definition at line 98 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

const float ElectronSeedGenerator::deltaPhi2F_
private

Definition at line 99 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

const float ElectronSeedGenerator::deltaZ1WithVertex_
private

Definition at line 84 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

const double ElectronSeedGenerator::dPhi1Coef1_
private

Definition at line 92 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

const double ElectronSeedGenerator::dPhi1Coef2_
private

Definition at line 91 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

const bool ElectronSeedGenerator::dynamicPhiRoad_
private

Definition at line 72 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

const float ElectronSeedGenerator::highPtThresh_
private

Definition at line 82 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

const std::vector<const TrajectorySeedCollection*>* ElectronSeedGenerator::initialSeedCollectionVector_ = nullptr
private

Definition at line 94 of file ElectronSeedGenerator.h.

Referenced by run(), and seedsFromThisCluster().

const float ElectronSeedGenerator::lowPtThresh_
private

Definition at line 81 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> ElectronSeedGenerator::magFieldToken_
private

Definition at line 76 of file ElectronSeedGenerator.h.

Referenced by setupES().

edm::ESWatcher<IdealMagneticFieldRecord> ElectronSeedGenerator::magneticFieldWatcher_
private

Definition at line 78 of file ElectronSeedGenerator.h.

Referenced by setupES().

PixelHitMatcher ElectronSeedGenerator::matcher_
private

Definition at line 106 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster(), and setupES().

const float ElectronSeedGenerator::nSigmasDeltaZ1_
private

Definition at line 83 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

const float ElectronSeedGenerator::phiMax2B_
private

Definition at line 103 of file ElectronSeedGenerator.h.

const float ElectronSeedGenerator::phiMax2F_
private

Definition at line 104 of file ElectronSeedGenerator.h.

const float ElectronSeedGenerator::phiMin2B_
private

Definition at line 101 of file ElectronSeedGenerator.h.

const float ElectronSeedGenerator::phiMin2F_
private

Definition at line 102 of file ElectronSeedGenerator.h.

const float ElectronSeedGenerator::sizeWindowENeg_
private

Definition at line 85 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> ElectronSeedGenerator::trackerGeometryToken_
private

Definition at line 77 of file ElectronSeedGenerator.h.

Referenced by setupES().

edm::ESWatcher<TrackerDigiGeometryRecord> ElectronSeedGenerator::trackerGeometryWatcher_
private

Definition at line 79 of file ElectronSeedGenerator.h.

Referenced by setupES().

const bool ElectronSeedGenerator::useRecoVertex_
private

Definition at line 96 of file ElectronSeedGenerator.h.

Referenced by run(), and seedsFromThisCluster().

const edm::EDGetTokenT<std::vector<reco::Vertex> > ElectronSeedGenerator::verticesTag_
private

Definition at line 74 of file ElectronSeedGenerator.h.

Referenced by run().