CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes
SeedForPhotonConversion1Leg Class Reference

#include <SeedForPhotonConversion1Leg.h>

Public Member Functions

 SeedForPhotonConversion1Leg (const edm::ParameterSet &cfg)
 
const TrajectorySeedtrajectorySeed (TrajectorySeedCollection &seedCollection, const SeedingHitSet &hits, const GlobalPoint &vertex, const GlobalVector &vertexBounds, float ptmin, const edm::EventSetup &es, float cotTheta, std::stringstream &ss)
 
 ~SeedForPhotonConversion1Leg ()
 

Static Public Attributes

static const int cotTheta_Max =99999
 

Protected Member Functions

const TrajectorySeedbuildSeed (TrajectorySeedCollection &seedCollection, const SeedingHitSet &hits, const FreeTrajectoryState &fts, const edm::EventSetup &es) const
 
bool checkHit (const TrajectoryStateOnSurface &, const SeedingHitSet::ConstRecHitPointer &hit, const edm::EventSetup &es) const
 
CurvilinearTrajectoryError initialError (const GlobalVector &vertexBounds, float ptMin, float sinTheta) const
 
GlobalTrajectoryParameters initialKinematic (const SeedingHitSet &hits, const GlobalPoint &vertexPos, const edm::EventSetup &es, const float cotTheta) const
 
SeedingHitSet::RecHitPointer refitHit (SeedingHitSet::ConstRecHitPointer hit, const TrajectoryStateOnSurface &state, const TkClonerImpl &cloner) const
 

Protected Attributes

PrintRecoObjects po
 
std::stringstream * pss
 
double theBOFFMomentum
 
std::string thePropagatorLabel
 
std::string TTRHBuilder
 

Detailed Description

Definition at line 22 of file SeedForPhotonConversion1Leg.h.

Constructor & Destructor Documentation

SeedForPhotonConversion1Leg::SeedForPhotonConversion1Leg ( const edm::ParameterSet cfg)
inline

Definition at line 26 of file SeedForPhotonConversion1Leg.h.

26  :
27  thePropagatorLabel (cfg.getParameter<std::string>("propagator"))
28  ,theBOFFMomentum (cfg.getParameter<double>("SeedMomentumForBOFF"))
29  ,TTRHBuilder (cfg.getParameter<std::string>("TTRHBuilder"))
30  {}
T getParameter(std::string const &) const
SeedForPhotonConversion1Leg::~SeedForPhotonConversion1Leg ( )
inline

Definition at line 33 of file SeedForPhotonConversion1Leg.h.

References hfClusterShapes_cfi::hits, and ptmin.

33 {}

Member Function Documentation

const TrajectorySeed * SeedForPhotonConversion1Leg::buildSeed ( TrajectorySeedCollection seedCollection,
const SeedingHitSet hits,
const FreeTrajectoryState fts,
const edm::EventSetup es 
) const
protected

Definition at line 134 of file SeedForPhotonConversion1Leg.cc.

References alongMomentum, checkHit(), TrackingRecHit::geographicalId(), edm::EventSetup::get(), TrajectoryStateOnSurface::globalMomentum(), TrackerGeometry::idToDet(), TrajectoryStateOnSurface::isValid(), TrackingRecHit::localPosition(), PV3DBase< T, PVType, FrameType >::perp(), trajectoryStateTransform::persistentState(), po, PrintRecoObjects::print(), edm::ESHandle< T >::product(), Propagator::propagate(), PhotonConversionTrajectorySeedProducerFromQuadruplets_cfi::propagator, edm::OwnVector< T, P >::push_back(), DetId::rawId(), refitHit(), SeedingHitSet::size(), thePropagatorLabel, trackingTruthProducer_cfi::tracker, TTRHBuilder, KFUpdator::update(), TrackInfoProducer_cfi::updatedState, and gsfElectronCkfTrackCandidateMaker_cff::updator.

Referenced by trajectorySeed().

139 {
140  // FIXME all this stuff shoould go in an initialized...
141 
142  // get tracker
144  es.get<TrackerDigiGeometryRecord>().get(tracker);
145 
146  // get propagator
147  edm::ESHandle<Propagator> propagatorHandle;
148  es.get<TrackingComponentsRecord>().get(thePropagatorLabel, propagatorHandle);
149  const Propagator* propagator = &(*propagatorHandle);
150 
152  es.get<TransientRecHitRecord>().get(TTRHBuilder, builderH);
153  auto builder = (TkTransientTrackingRecHitBuilder const *)(builderH.product());
154  auto cloner = (*builder).cloner();
155 
156  // get updator
158 
159 
160 
161  // Now update initial state track using information from seed hits.
162 
165 
166  const TrackingRecHit* hit = nullptr;
167  for ( unsigned int iHit = 0; iHit < hits.size() && iHit<1; iHit++) {
168  hit = hits[iHit];
169  TrajectoryStateOnSurface state = (iHit==0) ?
170  propagator->propagate(fts,tracker->idToDet(hit->geographicalId())->surface())
171  : propagator->propagate(updatedState, tracker->idToDet(hit->geographicalId())->surface());
172  if (!state.isValid()) return nullptr;
173 
174  SeedingHitSet::ConstRecHitPointer tth = hits[iHit];
175 
176  std::unique_ptr<BaseTrackerRecHit> newtth(refitHit( tth, state, cloner));
177 
178 
179  if (!checkHit(state,&*newtth,es)) return nullptr;
180 
181  updatedState = updator.update(state, *newtth);
182  if (!updatedState.isValid()) return nullptr;
183 
184  seedHits.push_back(newtth.release());
185 #ifdef mydebug_seed
186  uint32_t detid = hit->geographicalId().rawId();
187  (*pss) << "\n[SeedForPhotonConversion1Leg] hit " << iHit;
188  po.print(*pss, detid);
189  (*pss) << " " << detid << "\t lp " << hit->localPosition()
190  << " tth " << tth->localPosition() << " newtth " << newtth->localPosition() << " state " << state.globalMomentum().perp();
191 #endif
192  }
193 
194  if(!hit) return nullptr;
195 
196  PTrajectoryStateOnDet const & PTraj =
198 
199  seedCollection.push_back( TrajectorySeed(PTraj,seedHits,alongMomentum));
200  return &seedCollection.back();
201 }
std::pair< ALIstring, ALIstring > pss
Definition: Fit.h:27
T perp() const
Definition: PV3DBase.h:72
SeedingHitSet::RecHitPointer refitHit(SeedingHitSet::ConstRecHitPointer hit, const TrajectoryStateOnSurface &state, const TkClonerImpl &cloner) const
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:47
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
void push_back(D *&d)
Definition: OwnVector.h:290
TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TrackingRecHit &) const override
Definition: KFUpdator.cc:169
BaseTrackerRecHit const * ConstRecHitPointer
Definition: SeedingHitSet.h:11
void print(std::stringstream &ss, const SiStripCluster &clus)
virtual LocalPoint localPosition() const =0
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:53
GlobalVector globalMomentum() const
T get() const
Definition: EventSetup.h:63
unsigned int size() const
Definition: SeedingHitSet.h:46
const TrackerGeomDet * idToDet(DetId) const override
DetId geographicalId() const
bool checkHit(const TrajectoryStateOnSurface &, const SeedingHitSet::ConstRecHitPointer &hit, const edm::EventSetup &es) const
T const * product() const
Definition: ESHandle.h:86
bool SeedForPhotonConversion1Leg::checkHit ( const TrajectoryStateOnSurface ,
const SeedingHitSet::ConstRecHitPointer hit,
const edm::EventSetup es 
) const
inlineprotected

Definition at line 47 of file SeedForPhotonConversion1Leg.h.

References ALCARECOTkAlBeamHalo_cff::ptMin.

Referenced by buildSeed().

50  { return true; }
CurvilinearTrajectoryError SeedForPhotonConversion1Leg::initialError ( const GlobalVector vertexBounds,
float  ptMin,
float  sinTheta 
) const
protected

Definition at line 105 of file SeedForPhotonConversion1Leg.cc.

References patCaloMETCorrections_cff::C, GlobalErrorBase< T, ErrorWeightType >::cxx(), GlobalErrorBase< T, ErrorWeightType >::czz(), SiStripPI::max, funct::sqr(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by initialKinematic(), and trajectorySeed().

109 {
110  // Set initial uncertainty on track parameters, using only P.V. constraint and no hit
111  // information.
112  GlobalError vertexErr( sqr(vertexBounds.x()), 0,
113  sqr(vertexBounds.y()), 0, 0,
114  sqr(vertexBounds.z())
115  );
116 
117 
118  AlgebraicSymMatrix55 C = ROOT::Math::SMatrixIdentity();
119 
120 // FIXME: minC00. Prevent apriori uncertainty in 1/P from being too small,
121 // to avoid instabilities.
122 // N.B. This parameter needs optimising ...
123  float sin2th = sqr(sinTheta);
124  float minC00 = 1.0;
125  C[0][0] = std::max(sin2th/sqr(ptMin), minC00);
126  float zErr = vertexErr.czz();
127  float transverseErr = vertexErr.cxx(); // assume equal cxx cyy
128  C[3][3] = transverseErr;
129  C[4][4] = zErr*sin2th + transverseErr*(1-sin2th);
130 
131  return CurvilinearTrajectoryError(C);
132 }
T y() const
Definition: PV3DBase.h:63
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
T z() const
Definition: PV3DBase.h:64
Square< F >::type sqr(const F &f)
Definition: Square.h:13
T x() const
Definition: PV3DBase.h:62
GlobalTrajectoryParameters SeedForPhotonConversion1Leg::initialKinematic ( const SeedingHitSet hits,
const GlobalPoint vertexPos,
const edm::EventSetup es,
const float  cotTheta 
) const
protected

Definition at line 46 of file SeedForPhotonConversion1Leg.cc.

References GlobalTrajectoryParameters::charge(), cotTheta_Max, edm::EventSetup::get(), initialError(), GlobalTrajectoryParameters::magneticField(), GlobalTrajectoryParameters::momentum(), MagneticField::nominalValue(), PV3DBase< T, PVType, FrameType >::perp(), po, GlobalTrajectoryParameters::position(), PrintRecoObjects::print(), theBOFFMomentum, GlobalTrajectoryParameters::transverseCurvature(), Vector3DBase< T, FrameTag >::unit(), PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by trajectorySeed().

51 {
53 
54  SeedingHitSet::ConstRecHitPointer tth1 = hits[0];
55  SeedingHitSet::ConstRecHitPointer tth2 = hits[1];
56 
57  // FIXME optimize: move outside loop
59  es.get<IdealMagneticFieldRecord>().get(bfield);
60  float nomField = bfield->nominalValue();
61 
62  FastHelix helix(tth2->globalPosition(), tth1->globalPosition(), vertexPos, nomField, &*bfield, vertexPos);
63  kine = helix.stateAtVertex();
64 
65  //force the pz/pt equal to the measured one
66  if(fabs(cotTheta)<cotTheta_Max)
67  kine = GlobalTrajectoryParameters(kine.position(),
68  GlobalVector(kine.momentum().x(),kine.momentum().y(),kine.momentum().perp()*cotTheta),
69  kine.charge(),
70  & kine.magneticField()
71  );
72  else
74  GlobalVector(kine.momentum().x(),kine.momentum().y(),kine.momentum().perp()*cotTheta_Max),
75  kine.charge(),
76  & kine.magneticField()
77  );
78 
79 #ifdef mydebug_seed
80  uint32_t detid;
81  (*pss) << "[SeedForPhotonConversion1Leg] initialKinematic tth1 " ;
82  detid=tth1->geographicalId().rawId();
83  po.print(*pss, detid );
84  (*pss) << " \t " << detid << " " << tth1->localPosition() << " " << tth1->globalPosition() ;
85  detid= tth2->geographicalId().rawId();
86  (*pss) << " \n\t tth2 ";
87  po.print(*pss, detid );
88  (*pss) << " \t " << detid << " " << tth2->localPosition() << " " << tth2->globalPosition()
89  << "\nhelix momentum " << kine.momentum() << " pt " << kine.momentum().perp() << " radius " << 1/kine.transverseCurvature();
90 #endif
91 
92  bool isBOFF =(0==nomField);;
93  if (isBOFF && (theBOFFMomentum > 0)) {
95  kine.momentum().unit() * theBOFFMomentum,
96  kine.charge(),
97  &*bfield);
98  }
99  return kine;
100 }
std::pair< ALIstring, ALIstring > pss
Definition: Fit.h:27
T perp() const
Definition: PV3DBase.h:72
int nominalValue() const
The nominal field value for this map in kGauss.
Definition: MagneticField.h:58
T y() const
Definition: PV3DBase.h:63
BaseTrackerRecHit const * ConstRecHitPointer
Definition: SeedingHitSet.h:11
void print(std::stringstream &ss, const SiStripCluster &clus)
Vector3DBase unit() const
Definition: Vector3DBase.h:57
T get() const
Definition: EventSetup.h:63
const MagneticField & magneticField() const
T x() const
Definition: PV3DBase.h:62
Global3DVector GlobalVector
Definition: GlobalVector.h:10
SeedingHitSet::RecHitPointer SeedForPhotonConversion1Leg::refitHit ( SeedingHitSet::ConstRecHitPointer  hit,
const TrajectoryStateOnSurface state,
const TkClonerImpl cloner 
) const
protected

Definition at line 203 of file SeedForPhotonConversion1Leg.cc.

Referenced by buildSeed().

206 {
207  //const TransientTrackingRecHit* a= hit.get();
208  //return const_cast<TransientTrackingRecHit*> (a);
209  //This was modified otherwise the rechit will have just the local x component and local y=0
210  // To understand how to modify for pixels
211 
212  //const TSiStripRecHit2DLocalPos* b = dynamic_cast<const TSiStripRecHit2DLocalPos*>(a);
213  //return const_cast<TSiStripRecHit2DLocalPos*>(b);
214  return (SeedingHitSet::RecHitPointer)(cloner(*hit,state));
215 }
const TrajectorySeed * SeedForPhotonConversion1Leg::trajectorySeed ( TrajectorySeedCollection seedCollection,
const SeedingHitSet hits,
const GlobalPoint vertex,
const GlobalVector vertexBounds,
float  ptmin,
const edm::EventSetup es,
float  cotTheta,
std::stringstream &  ss 
)

Definition at line 24 of file SeedForPhotonConversion1Leg.cc.

References buildSeed(), relativeConstraints::error, initialError(), initialKinematic(), GlobalTrajectoryParameters::momentum(), funct::sin(), SeedingHitSet::size(), and PV3DBase< T, PVType, FrameType >::theta().

32 {
33  pss = &ss;
34  if ( hits.size() < 2) return nullptr;
35 
36  GlobalTrajectoryParameters kine = initialKinematic(hits, vertex, es, cotTheta);
37  float sinTheta = sin(kine.momentum().theta());
38 
39  CurvilinearTrajectoryError error = initialError(vertexBounds, ptmin, sinTheta);
40  FreeTrajectoryState fts(kine, error);
41 
42  return buildSeed(seedCollection,hits,fts,es);
43 }
std::pair< ALIstring, ALIstring > pss
Definition: Fit.h:27
const TrajectorySeed * buildSeed(TrajectorySeedCollection &seedCollection, const SeedingHitSet &hits, const FreeTrajectoryState &fts, const edm::EventSetup &es) const
GlobalTrajectoryParameters initialKinematic(const SeedingHitSet &hits, const GlobalPoint &vertexPos, const edm::EventSetup &es, const float cotTheta) const
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Geom::Theta< T > theta() const
Definition: PV3DBase.h:75
double ptmin
Definition: HydjetWrapper.h:90
unsigned int size() const
Definition: SeedingHitSet.h:46
CurvilinearTrajectoryError initialError(const GlobalVector &vertexBounds, float ptMin, float sinTheta) const

Member Data Documentation

const int SeedForPhotonConversion1Leg::cotTheta_Max =99999
static

Definition at line 24 of file SeedForPhotonConversion1Leg.h.

Referenced by initialKinematic().

PrintRecoObjects SeedForPhotonConversion1Leg::po
protected

Definition at line 78 of file SeedForPhotonConversion1Leg.h.

Referenced by buildSeed(), and initialKinematic().

std::stringstream* SeedForPhotonConversion1Leg::pss
protected

Definition at line 77 of file SeedForPhotonConversion1Leg.h.

double SeedForPhotonConversion1Leg::theBOFFMomentum
protected

Definition at line 74 of file SeedForPhotonConversion1Leg.h.

Referenced by initialKinematic().

std::string SeedForPhotonConversion1Leg::thePropagatorLabel
protected

Definition at line 73 of file SeedForPhotonConversion1Leg.h.

Referenced by buildSeed().

std::string SeedForPhotonConversion1Leg::TTRHBuilder
protected

Definition at line 75 of file SeedForPhotonConversion1Leg.h.

Referenced by buildSeed().