#include <SeedForPhotonConversion1Leg.h>
Public Member Functions | |
SeedForPhotonConversion1Leg (const edm::ParameterSet &cfg) | |
SeedForPhotonConversion1Leg (const std::string &propagator="PropagatorWithMaterial", double seedMomentumForBOFF=-5.0) | |
virtual const TrajectorySeed * | trajectorySeed (TrajectorySeedCollection &seedCollection, const SeedingHitSet &hits, const GlobalPoint &vertex, const GlobalVector &vertexBounds, float ptmin, const edm::EventSetup &es, float cotTheta, std::stringstream &ss) |
virtual const TrajectorySeed * | trajectorySeed (TrajectorySeedCollection &seedCollection, const SeedingHitSet &hits, const TrackingRegion ®ion, const edm::EventSetup &es) |
virtual | ~SeedForPhotonConversion1Leg () |
Static Public Attributes | |
static const int | cotTheta_Max = 99999 |
Protected Member Functions | |
virtual const TrajectorySeed * | buildSeed (TrajectorySeedCollection &seedCollection, const SeedingHitSet &hits, const FreeTrajectoryState &fts, const edm::EventSetup &es) const |
virtual bool | checkHit (const TrajectoryStateOnSurface &, const TransientTrackingRecHit::ConstRecHitPointer &hit, const edm::EventSetup &es) const |
virtual CurvilinearTrajectoryError | initialError (const GlobalVector &vertexBounds, float ptMin, float sinTheta) const |
virtual GlobalTrajectoryParameters | initialKinematic (const SeedingHitSet &hits, const GlobalPoint &vertexPos, const edm::EventSetup &es, const float cotTheta) const |
virtual TransientTrackingRecHit::RecHitPointer | refitHit (const TransientTrackingRecHit::ConstRecHitPointer &hit, const TrajectoryStateOnSurface &state) const |
Protected Attributes | |
PrintRecoObjects | po |
std::stringstream * | pss |
double | theBOFFMomentum |
std::string | thePropagatorLabel |
Definition at line 9 of file SeedForPhotonConversion1Leg.h.
SeedForPhotonConversion1Leg::SeedForPhotonConversion1Leg | ( | const edm::ParameterSet & | cfg | ) | [inline] |
Definition at line 13 of file SeedForPhotonConversion1Leg.h.
: thePropagatorLabel(cfg.getParameter<std::string>("propagator")), theBOFFMomentum(cfg.existsAs<double>("SeedMomentumForBOFF") ? cfg.getParameter<double>("SeedMomentumForBOFF") : 5.0) {}
SeedForPhotonConversion1Leg::SeedForPhotonConversion1Leg | ( | const std::string & | propagator = "PropagatorWithMaterial" , |
double | seedMomentumForBOFF = -5.0 |
||
) | [inline] |
Definition at line 18 of file SeedForPhotonConversion1Leg.h.
: thePropagatorLabel(propagator), theBOFFMomentum(seedMomentumForBOFF) { }
virtual SeedForPhotonConversion1Leg::~SeedForPhotonConversion1Leg | ( | ) | [inline, virtual] |
Definition at line 23 of file SeedForPhotonConversion1Leg.h.
{}
const TrajectorySeed * SeedForPhotonConversion1Leg::buildSeed | ( | TrajectorySeedCollection & | seedCollection, |
const SeedingHitSet & | hits, | ||
const FreeTrajectoryState & | fts, | ||
const edm::EventSetup & | es | ||
) | const [protected, virtual] |
Definition at line 130 of file SeedForPhotonConversion1Leg.cc.
References alongMomentum, checkHit(), cond::rpcobgas::detid, TrackingRecHit::geographicalId(), edm::EventSetup::get(), TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::isValid(), TrackingRecHit::localPosition(), PV3DBase< T, PVType, FrameType >::perp(), TrajectoryStateTransform::persistentState(), po, PrintRecoObjects::print(), Propagator::propagate(), LargeD0_PixelPairStep_cff::propagator, edm::OwnVector< T, P >::push_back(), DetId::rawId(), refitHit(), SeedingHitSet::size(), thePropagatorLabel, patCandidatesForDimuonsSequences_cff::tracker, and KFUpdator::update().
Referenced by trajectorySeed().
{ // get tracker edm::ESHandle<TrackerGeometry> tracker; es.get<TrackerDigiGeometryRecord>().get(tracker); // get propagator edm::ESHandle<Propagator> propagatorHandle; es.get<TrackingComponentsRecord>().get(thePropagatorLabel, propagatorHandle); const Propagator* propagator = &(*propagatorHandle); // get updator KFUpdator updator; // Now update initial state track using information from seed hits. TrajectoryStateOnSurface updatedState; edm::OwnVector<TrackingRecHit> seedHits; const TrackingRecHit* hit = 0; for ( unsigned int iHit = 0; iHit < hits.size() && iHit<1; iHit++) { hit = hits[iHit]->hit(); TrajectoryStateOnSurface state = (iHit==0) ? propagator->propagate(fts,tracker->idToDet(hit->geographicalId())->surface()) : propagator->propagate(updatedState, tracker->idToDet(hit->geographicalId())->surface()); if (!state.isValid()) return 0; TransientTrackingRecHit::ConstRecHitPointer tth = hits[iHit]; TransientTrackingRecHit::RecHitPointer newtth = refitHit( tth, state); if (!checkHit(state,newtth,es)) return 0; updatedState = updator.update(state, *newtth); if (!updatedState.isValid()) return 0; seedHits.push_back(newtth->hit()->clone()); #ifdef mydebug_seed uint32_t detid = hit->geographicalId().rawId(); (*pss) << "\n[SeedForPhotonConversion1Leg] hit " << iHit; po.print(*pss, detid); (*pss) << " " << detid << "\t lp " << hit->localPosition() << " tth " << tth->localPosition() << " newtth " << newtth->localPosition() << " state " << state.globalMomentum().perp(); #endif } TrajectoryStateTransform transformer; boost::shared_ptr<PTrajectoryStateOnDet> PTraj( transformer.persistentState(updatedState, hit->geographicalId().rawId())); seedCollection.push_back( TrajectorySeed(*PTraj,seedHits,alongMomentum)); return &seedCollection.back(); }
virtual bool SeedForPhotonConversion1Leg::checkHit | ( | const TrajectoryStateOnSurface & | , |
const TransientTrackingRecHit::ConstRecHitPointer & | hit, | ||
const edm::EventSetup & | es | ||
) | const [inline, protected, virtual] |
Definition at line 42 of file SeedForPhotonConversion1Leg.h.
Referenced by buildSeed().
{ return true; }
CurvilinearTrajectoryError SeedForPhotonConversion1Leg::initialError | ( | const GlobalVector & | vertexBounds, |
float | ptMin, | ||
float | sinTheta | ||
) | const [protected, virtual] |
Definition at line 101 of file SeedForPhotonConversion1Leg.cc.
References funct::C, GlobalErrorBase< T, ErrorWeightType >::cxx(), GlobalErrorBase< T, ErrorWeightType >::czz(), max(), funct::sqr(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().
Referenced by trajectorySeed().
{ // Set initial uncertainty on track parameters, using only P.V. constraint and no hit // information. GlobalError vertexErr( sqr(vertexBounds.x()), 0, sqr(vertexBounds.y()), 0, 0, sqr(vertexBounds.z()) ); AlgebraicSymMatrix55 C = ROOT::Math::SMatrixIdentity(); // FIXME: minC00. Prevent apriori uncertainty in 1/P from being too small, // to avoid instabilities. // N.B. This parameter needs optimising ... float sin2th = sqr(sinTheta); float minC00 = 1.0; C[0][0] = std::max(sin2th/sqr(ptMin), minC00); float zErr = vertexErr.czz(); float transverseErr = vertexErr.cxx(); // assume equal cxx cyy C[3][3] = transverseErr; C[4][4] = zErr*sin2th + transverseErr*(1-sin2th); return CurvilinearTrajectoryError(C); }
GlobalTrajectoryParameters SeedForPhotonConversion1Leg::initialKinematic | ( | const SeedingHitSet & | hits, |
const GlobalPoint & | vertexPos, | ||
const edm::EventSetup & | es, | ||
const float | cotTheta | ||
) | const [protected, virtual] |
Definition at line 44 of file SeedForPhotonConversion1Leg.cc.
References abs, GlobalTrajectoryParameters::charge(), cotTheta_Max, cond::rpcobgas::detid, GlobalTrajectoryParameters::magneticField(), GlobalTrajectoryParameters::momentum(), 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().
{ GlobalTrajectoryParameters kine; TransientTrackingRecHit::ConstRecHitPointer tth1 = hits[0]; TransientTrackingRecHit::ConstRecHitPointer tth2 = hits[1]; FastHelix helix(tth2->globalPosition(), tth1->globalPosition(), vertexPos, es, vertexPos); kine = helix.stateAtVertex().parameters(); //force the pz/pt equal to the measured one if(fabs(cotTheta)<cotTheta_Max) kine = GlobalTrajectoryParameters(kine.position(), GlobalVector(kine.momentum().x(),kine.momentum().y(),kine.momentum().perp()*cotTheta), kine.charge(), & kine.magneticField() ); else kine = GlobalTrajectoryParameters(kine.position(), GlobalVector(kine.momentum().x(),kine.momentum().y(),kine.momentum().perp()*cotTheta_Max), kine.charge(), & kine.magneticField() ); #ifdef mydebug_seed uint32_t detid; (*pss) << "[SeedForPhotonConversion1Leg] initialKinematic tth1 " ; detid=tth1->geographicalId().rawId(); po.print(*pss, detid ); (*pss) << " \t " << detid << " " << tth1->localPosition() << " " << tth1->globalPosition() ; detid= tth2->geographicalId().rawId(); (*pss) << " \n\t tth2 "; po.print(*pss, detid ); (*pss) << " \t " << detid << " " << tth2->localPosition() << " " << tth2->globalPosition() << "\nhelix momentum " << kine.momentum() << " pt " << kine.momentum().perp() << " radius " << 1/kine.transverseCurvature(); #endif edm::ESHandle<MagneticField> bfield; es.get<IdealMagneticFieldRecord>().get(bfield); bool isBOFF = ( std::abs(bfield->inTesla(GlobalPoint(0,0,0)).z()) < 1e-3 ); if (isBOFF && (theBOFFMomentum > 0)) { kine = GlobalTrajectoryParameters(kine.position(), kine.momentum().unit() * theBOFFMomentum, kine.charge(), &*bfield); } return kine; }
TransientTrackingRecHit::RecHitPointer SeedForPhotonConversion1Leg::refitHit | ( | const TransientTrackingRecHit::ConstRecHitPointer & | hit, |
const TrajectoryStateOnSurface & | state | ||
) | const [protected, virtual] |
Definition at line 189 of file SeedForPhotonConversion1Leg.cc.
Referenced by buildSeed().
{ //const TransientTrackingRecHit* a= hit.get(); //return const_cast<TransientTrackingRecHit*> (a); //This was modified otherwise the rechit will have just the local x component and local y=0 // To understand how to modify for pixels //const TSiStripRecHit2DLocalPos* b = dynamic_cast<const TSiStripRecHit2DLocalPos*>(a); //return const_cast<TSiStripRecHit2DLocalPos*>(b); return hit->clone(state); }
virtual const TrajectorySeed* SeedForPhotonConversion1Leg::trajectorySeed | ( | TrajectorySeedCollection & | seedCollection, |
const SeedingHitSet & | hits, | ||
const TrackingRegion & | region, | ||
const edm::EventSetup & | es | ||
) | [inline, virtual] |
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 | ||
) | [virtual] |
Definition at line 22 of file SeedForPhotonConversion1Leg.cc.
References buildSeed(), error, initialError(), initialKinematic(), GlobalTrajectoryParameters::momentum(), funct::sin(), SeedingHitSet::size(), and PV3DBase< T, PVType, FrameType >::theta().
Referenced by PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::inspectTrack().
{ pss = &ss; if ( hits.size() < 2) return 0; GlobalTrajectoryParameters kine = initialKinematic(hits, vertex, es, cotTheta); float sinTheta = sin(kine.momentum().theta()); CurvilinearTrajectoryError error = initialError(vertexBounds, ptmin, sinTheta); FreeTrajectoryState fts(kine, error); return buildSeed(seedCollection,hits,fts,es); }
const int SeedForPhotonConversion1Leg::cotTheta_Max = 99999 [static] |
Definition at line 11 of file SeedForPhotonConversion1Leg.h.
Referenced by initialKinematic().
PrintRecoObjects SeedForPhotonConversion1Leg::po [protected] |
Definition at line 73 of file SeedForPhotonConversion1Leg.h.
Referenced by buildSeed(), and initialKinematic().
std::stringstream* SeedForPhotonConversion1Leg::pss [protected] |
Definition at line 72 of file SeedForPhotonConversion1Leg.h.
double SeedForPhotonConversion1Leg::theBOFFMomentum [protected] |
Definition at line 70 of file SeedForPhotonConversion1Leg.h.
Referenced by initialKinematic().
std::string SeedForPhotonConversion1Leg::thePropagatorLabel [protected] |
Definition at line 69 of file SeedForPhotonConversion1Leg.h.
Referenced by buildSeed().