26 std::stringstream&
ss) {
37 return buildSeed(seedCollection, hits, fts, es);
43 const float cotTheta)
const {
51 float nomField = bfield.nominalValue();
53 FastHelix helix(tth2->globalPosition(), tth1->globalPosition(), vertexPos, nomField, &bfield, vertexPos);
54 kine = helix.stateAtVertex();
60 GlobalVector(kine.momentum().x(), kine.momentum().y(), kine.momentum().perp() * cotTheta),
62 &kine.magneticField());
72 (*pss) <<
"[SeedForPhotonConversion1Leg] initialKinematic tth1 ";
73 detid = tth1->geographicalId().rawId();
75 (*pss) <<
" \t " << detid <<
" " << tth1->localPosition() <<
" " << tth1->globalPosition();
76 detid = tth2->geographicalId().rawId();
77 (*pss) <<
" \n\t tth2 ";
79 (*pss) <<
" \t " << detid <<
" " << tth2->localPosition() <<
" " << tth2->globalPosition() <<
"\nhelix momentum "
83 bool isBOFF = (0 == nomField);
94 float sinTheta)
const {
104 float sin2th =
sqr(sinTheta);
107 float zErr = vertexErr.
czz();
108 float transverseErr = vertexErr.
cxx();
109 C[3][3] = transverseErr;
110 C[4][4] = zErr * sin2th + transverseErr * (1 - sin2th);
128 auto cloner = (*builder).cloner();
139 for (
unsigned int iHit = 0; iHit < hits.
size() && iHit < 1; iHit++) {
149 std::unique_ptr<BaseTrackerRecHit> newtth(
refitHit(tth, state, cloner));
154 updatedState = updator.
update(state, *newtth);
161 (*pss) <<
"\n[SeedForPhotonConversion1Leg] hit " << iHit;
163 (*pss) <<
" " << detid <<
"\t lp " << hit->
localPosition() <<
" tth " << tth->localPosition() <<
" newtth "
175 return &seedCollection.back();
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > theTrackerToken
std::pair< ALIstring, ALIstring > pss
const TrajectorySeed * buildSeed(TrajectorySeedCollection &seedCollection, const SeedingHitSet &hits, const FreeTrajectoryState &fts, const edm::EventSetup &es) const
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > theTTRHBuilderToken
GlobalTrajectoryParameters initialKinematic(const SeedingHitSet &hits, const GlobalPoint &vertexPos, const edm::EventSetup &es, const float cotTheta) const
Sin< T >::type sin(const T &t)
SeedingHitSet::RecHitPointer refitHit(SeedingHitSet::ConstRecHitPointer hit, const TrajectoryStateOnSurface &state, const TkClonerImpl &cloner) const
constexpr uint32_t rawId() const
get the raw id
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)
Geom::Theta< T > theta() const
float transverseCurvature() const
bool getData(T &iHolder) const
static const int cotTheta_Max
BaseTrackerRecHit const * ConstRecHitPointer
TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TrackingRecHit &) const override
std::vector< TrajectorySeed > TrajectorySeedCollection
GlobalVector momentum() const
void print(std::stringstream &ss, const SiStripCluster &clus)
edm::ESGetToken< Propagator, TrackingComponentsRecord > thePropagatorToken
GlobalPoint position() const
Vector3DBase unit() const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
GlobalVector globalMomentum() const
unsigned int size() const
const MagneticField & magneticField() const
DetId geographicalId() const
bool checkHit(const TrajectoryStateOnSurface &, const SeedingHitSet::ConstRecHitPointer &hit, const edm::EventSetup &es) const
TrackCharge charge() const
virtual LocalPoint localPosition() const =0
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > theBfieldToken
Global3DVector GlobalVector
CurvilinearTrajectoryError initialError(const GlobalVector &vertexBounds, float ptMin, float sinTheta) const