CMS 3D CMS Logo

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< TrackingRecHitPRecHitContainer
 
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::BeamSpotbeamSpotTag_
 
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, IdealMagneticFieldRecordmagFieldToken_
 
edm::ESWatcher< IdealMagneticFieldRecordmagneticFieldWatcher_
 
PixelHitMatcher matcher_
 
const float nSigmasDeltaZ1_
 
const float phiMax2B_
 
const float phiMax2F_
 
const float phiMin2B_
 
const float phiMin2F_
 
const float sizeWindowENeg_
 
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecordtrackerGeometryToken_
 
edm::ESWatcher< TrackerDigiGeometryRecordtrackerGeometryWatcher_
 
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

◆ ConstRecHitPointer

Definition at line 54 of file ElectronSeedGenerator.h.

◆ PRecHitContainer

Definition at line 53 of file ElectronSeedGenerator.h.

◆ RecHitContainer

Definition at line 56 of file ElectronSeedGenerator.h.

◆ RecHitPointer

Definition at line 55 of file ElectronSeedGenerator.h.

Constructor & Destructor Documentation

◆ ElectronSeedGenerator()

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_

Member Function Documentation

◆ run()

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 pwdgSkimBPark_cfi::beamSpot, beamSpotTag_, MillePedeFileConverter_cfg::e, mps_fire::i, initialSeedCollectionVector_, LogDebug, MillePedeFileConverter_cfg::out, seedsFromThisCluster(), edm::RefVector< C, T, F >::size(), useRecoVertex_, AlignmentTracksFromVertexSelector_cfi::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";
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_
size_type size() const
Size of the RefVector.
Definition: RefVector.h:102
#define LogDebug(id)

◆ seedsFromThisCluster()

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 pwdgSkimBPark_cfi::beamSpot, deltaPhi1High_, deltaPhi1Low_, deltaPhi2B_, deltaPhi2F_, deltaZ1WithVertex_, dPhi1Coef1_, dPhi1Coef2_, dynamicPhiRoad_, ele_convert(), PVValHelper::eta, highPtThresh_, initialSeedCollectionVector_, lowPtThresh_, matcher_, nSigmasDeltaZ1_, MillePedeFileConverter_cfg::out, PixelHitMatcher::set1stLayer(), PixelHitMatcher::set1stLayerZRange(), PixelHitMatcher::set2ndLayer(), BeamSpotPI::sigmaZ, sizeWindowENeg_, mathSSE::sqrt(), useRecoVertex_, bphysicsOniaDQM_cfi::vertex, and AlignmentTracksFromVertexSelector_cfi::vertices.

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 }
T z() const
Definition: PV3DBase.h:61
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
void set1stLayer(float dummyphi1min, float dummyphi1max)
void ele_convert(const Type1 &obj1, Type2 &obj2)

◆ setupES()

void ElectronSeedGenerator::setupES ( const edm::EventSetup setup)

Definition at line 166 of file ElectronSeedGenerator.cc.

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

166  {
169  }
170 }
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerGeometryToken_
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magFieldToken_
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

◆ beamSpotTag_

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

Definition at line 75 of file ElectronSeedGenerator.h.

Referenced by run().

◆ deltaPhi1High_

const float ElectronSeedGenerator::deltaPhi1High_
private

Definition at line 88 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

◆ deltaPhi1Low_

const float ElectronSeedGenerator::deltaPhi1Low_
private

Definition at line 87 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

◆ deltaPhi2B_

const float ElectronSeedGenerator::deltaPhi2B_
private

Definition at line 98 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

◆ deltaPhi2F_

const float ElectronSeedGenerator::deltaPhi2F_
private

Definition at line 99 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

◆ deltaZ1WithVertex_

const float ElectronSeedGenerator::deltaZ1WithVertex_
private

Definition at line 84 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

◆ dPhi1Coef1_

const double ElectronSeedGenerator::dPhi1Coef1_
private

Definition at line 92 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

◆ dPhi1Coef2_

const double ElectronSeedGenerator::dPhi1Coef2_
private

Definition at line 91 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

◆ dynamicPhiRoad_

const bool ElectronSeedGenerator::dynamicPhiRoad_
private

Definition at line 72 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

◆ highPtThresh_

const float ElectronSeedGenerator::highPtThresh_
private

Definition at line 82 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

◆ initialSeedCollectionVector_

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

Definition at line 94 of file ElectronSeedGenerator.h.

Referenced by run(), and seedsFromThisCluster().

◆ lowPtThresh_

const float ElectronSeedGenerator::lowPtThresh_
private

Definition at line 81 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

◆ magFieldToken_

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

Definition at line 76 of file ElectronSeedGenerator.h.

Referenced by setupES().

◆ magneticFieldWatcher_

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

Definition at line 78 of file ElectronSeedGenerator.h.

Referenced by setupES().

◆ matcher_

PixelHitMatcher ElectronSeedGenerator::matcher_
private

Definition at line 106 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster(), and setupES().

◆ nSigmasDeltaZ1_

const float ElectronSeedGenerator::nSigmasDeltaZ1_
private

Definition at line 83 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

◆ phiMax2B_

const float ElectronSeedGenerator::phiMax2B_
private

Definition at line 103 of file ElectronSeedGenerator.h.

◆ phiMax2F_

const float ElectronSeedGenerator::phiMax2F_
private

Definition at line 104 of file ElectronSeedGenerator.h.

◆ phiMin2B_

const float ElectronSeedGenerator::phiMin2B_
private

Definition at line 101 of file ElectronSeedGenerator.h.

◆ phiMin2F_

const float ElectronSeedGenerator::phiMin2F_
private

Definition at line 102 of file ElectronSeedGenerator.h.

◆ sizeWindowENeg_

const float ElectronSeedGenerator::sizeWindowENeg_
private

Definition at line 85 of file ElectronSeedGenerator.h.

Referenced by seedsFromThisCluster().

◆ trackerGeometryToken_

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

Definition at line 77 of file ElectronSeedGenerator.h.

Referenced by setupES().

◆ trackerGeometryWatcher_

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

Definition at line 79 of file ElectronSeedGenerator.h.

Referenced by setupES().

◆ useRecoVertex_

const bool ElectronSeedGenerator::useRecoVertex_
private

Definition at line 96 of file ElectronSeedGenerator.h.

Referenced by run(), and seedsFromThisCluster().

◆ verticesTag_

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

Definition at line 74 of file ElectronSeedGenerator.h.

Referenced by run().