35 template <
class T>
T sqr(
T t) {
return t*
t;}
40 cfg.getParameter<
std::
string>(
"propagator"),
41 cfg.existsAs<double>(
"SeedMomentumForBOFF") ? cfg.getParameter<double>(
"SeedMomentumForBOFF") : 5.0)
48 if(comparitorName !=
"none") {
63 std::stringstream& ss,
64 std::vector<Quad>& quadV,
73 if(rejectAllQuads)
return nullptr;
75 bool applyDeltaPhiCuts=QuadCutPSet.
getParameter<
bool>(
"apply_DeltaPhiCuts");
76 bool ClusterShapeFiltering=QuadCutPSet.
getParameter<
bool>(
"apply_ClusterShapeFilter");
77 bool applyArbitration=QuadCutPSet.
getParameter<
bool>(
"apply_Arbitration");
78 bool applydzCAcut=QuadCutPSet.
getParameter<
bool>(
"apply_zCACut");
79 double CleaningmaxRadialDistance=QuadCutPSet.
getParameter<
double>(
"Cut_DeltaRho");
80 double BeamPipeRadiusCut=QuadCutPSet.
getParameter<
double>(
"Cut_BeamPipeRadius");
81 double CleaningMinLegPt = QuadCutPSet.
getParameter<
double>(
"Cut_minLegPt");
82 double maxLegPt = QuadCutPSet.
getParameter<
double>(
"Cut_maxLegPt");
83 double dzcut=QuadCutPSet.
getParameter<
double>(
"Cut_zCA");
85 double toleranceFactorOnDeltaPhiCuts=0.1;
91 if ( phits.
size() < 2)
return nullptr;
92 if ( mhits.
size() < 2)
return nullptr;
100 #ifdef mydebug_sguazz 101 std::cout <<
" --------------------------------------------------------------------------" <<
"\n";
102 std::cout <<
" Starting a hit quad fast reco " <<
"\n";
103 std::cout <<
" --------------------------------------------------------------------------" <<
"\n";
114 vHit[0]=ptth2->globalPosition();
115 vHit[1]=ptth1->globalPosition();
116 vHit[2]=mtth1->globalPosition();
117 vHit[3]=mtth2->globalPosition();
152 if(h1.x()*h1.x()+h1.y()*h1.y() < h2.x()*h2.x()+h2.y()*h2.y()){
161 if(h3.x()*h3.x()+h3.y()*h3.y() < h4.x()*h4.x()+h4.y()*h4.y()){
184 double kP=(P1.y()-P2.y())/(P1.x()-P2.x());
185 double dP=P1.y()-kP*P1.x();
187 double kM=(M1.y()-M2.y())/(M1.x()-M2.x());
188 double dM=M1.y()-kM*M1.x();
190 double IPx=(dM-dP)/(kP-kM);
191 double IPy=kP*IPx+dP;
193 IP.SetXYZ(IPx,IPy,0);
195 double IPrho=
std::sqrt(IP.x()*IP.x()+IP.y()*IP.y());
196 double P1rho2=P1.x()*P1.x()+P1.y()*P1.y();
197 double M1rho2=M1.x()*M1.x()+M1.y()*M1.y();
198 double maxIPrho2=IPrho+CleaningmaxRadialDistance; maxIPrho2*=maxIPrho2;
200 if( IPrho<BeamPipeRadiusCut || P1rho2>maxIPrho2 || M1rho2>maxIPrho2){
204 if(applyDeltaPhiCuts) {
206 kPI_ = std::atan(1.0)*4;
211 QuadMean.SetXYZ((M1.x()+M2.x()+P1.x()+P2.x())/4.,(M1.y()+M2.y()+P1.y()+P2.y())/4.,(M1.z()+M2.z()+P1.z()+P2.z())/4.);
215 double rMax=CleaningMinLegPt/(0.01*0.3*fBField);
216 double rMax_squared=rMax*
rMax;
223 if(rMax_squared*4. > Mx*Mx+My*My){
234 double d=My/2.-k*Mx/2.;
236 #ifdef mydebug_knuenz 242 double CsolutionPart1=-2*k*
d;
243 double CsolutionPart2=
std::sqrt(4*k*k*d*d-4*(1+k*k)*(d*d-rMax_squared));
244 double CsolutionPart3=2*(1+k*
k);
245 double Cx1=(CsolutionPart1+CsolutionPart2)/CsolutionPart3;
246 double Cx2=(CsolutionPart1-CsolutionPart2)/CsolutionPart3;
254 if(C1.x()*M1.y()-C1.y()*M1.x()<0){
264 #ifdef mydebug_knuenz 276 double Bx1=
std::sqrt(Mx*Mx+My*My/(1+k*k));
281 #ifdef mydebug_knuenz 289 if(M1.x()*B1.y()-M1.y()*B1.x()<0){
299 #ifdef mydebug_knuenz 310 #ifdef mydebug_knuenz 311 std::cout <<
"DeltaPhiMaxM1P1 " << DeltaPhiMaxM1P1 << std::endl;
313 std::cout <<
"rho P1: " <<
std::sqrt(P1.x()*P1.x()+P1.y()*P1.y()) <<
"phi P1: " << P1.Phi() << std::endl;
314 std::cout <<
"rho M1: " <<
std::sqrt(M1.x()*M1.x()+M1.y()*M1.y()) <<
"phi M1: " << M1.Phi() << std::endl;
319 double tol_DeltaPhiMaxM1P1=DeltaPhiMaxM1P1*toleranceFactorOnDeltaPhiCuts;
322 if(DeltaPhiManualM1P1>DeltaPhiMaxM1P1+tol_DeltaPhiMaxM1P1 || DeltaPhiManualM1P1<0-tol_DeltaPhiMaxM1P1){
335 double rM2_squared=M2.x()*M2.x()+M2.y()*M2.y();
336 if(rMax_squared*4. > rM2_squared){
339 double k=-C.x()/C.y();
340 double d=(rM2_squared-rMax_squared+C.x()*C.x()+C.y()*C.y())/(2*C.y());
342 double M2solutionPart1=-2*k*
d;
343 double M2solutionPart2=
std::sqrt(4*k*k*d*d-4*(1+k*k)*(d*d-rM2_squared));
344 double M2solutionPart3=2+2*k*
k;
345 double M2xMax1=(M2solutionPart1+M2solutionPart2)/M2solutionPart3;
346 double M2xMax2=(M2solutionPart1-M2solutionPart2)/M2solutionPart3;
347 double M2yMax1=k*M2xMax1+
d;
348 double M2yMax2=k*M2xMax2+
d;
354 if(M2MaxVec1.x()*M2MaxVec2.y()-M2MaxVec1.y()*M2MaxVec2.x()<0){
355 M2MaxVec.SetXYZ(M2xMax2,M2yMax2,0);
358 M2MaxVec.SetXYZ(M2xMax1,M2yMax1,0);
363 #ifdef mydebug_knuenz 364 std::cout <<
"C.x() " << C.x() << std::endl;
365 std::cout <<
"C.y() " << C.y() << std::endl;
366 std::cout <<
"M1.x() " << M1.x() << std::endl;
367 std::cout <<
"M1.y() " << M1.y() << std::endl;
368 std::cout <<
"M2.x() " << M2.x() << std::endl;
369 std::cout <<
"M2.y() " << M2.y() << std::endl;
372 std::cout <<
"M2xMax1 " << M2xMax1 << std::endl;
373 std::cout <<
"M2xMax2 " << M2xMax2 << std::endl;
374 std::cout <<
"M2yMax1 " << M2yMax1 << std::endl;
375 std::cout <<
"M2yMax2 " << M2yMax2 << std::endl;
376 std::cout <<
"M2xMax " << M2MaxVec.x() << std::endl;
377 std::cout <<
"M2yMax " << M2MaxVec.y() << std::endl;
378 std::cout <<
"rM2_squared " << rM2_squared << std::endl;
379 std::cout <<
"rMax " << rMax << std::endl;
380 std::cout <<
"DeltaPhiMaxM2 " << DeltaPhiMaxM2 << std::endl;
384 double tol_DeltaPhiMaxM2=DeltaPhiMaxM2*toleranceFactorOnDeltaPhiCuts;
387 if(DeltaPhiManualM2M1>DeltaPhiMaxM2+tol_DeltaPhiMaxM2 || DeltaPhiManualM2M1<0-tol_DeltaPhiMaxM2){
393 if(DeltaPhiManualP1P2>DeltaPhiMaxM2+tol_DeltaPhiMaxM2 || DeltaPhiManualP1P2<0-tol_DeltaPhiMaxM2){
413 #ifdef mydebug_sguazz 417 double candPtPlus, candPtMinus;
421 if ( ! (nite &&
abs(nite) < 25 && nite != -1000 && nite != -2000) )
return nullptr;
426 #ifdef mydebug_sguazz 427 std::cout <<
" >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" <<
"\n";
428 std::cout <<
" >>>>>>>>>>> Conv Cand: " <<
" Vertex X: " << candVtx.X() <<
" [cm] Y: " << candVtx.Y() <<
" [cm] pt+: " << candPtPlus<<
" [GeV] pt-: " << candPtMinus <<
" [GeV]; #its: " << nite <<
"\n";
432 double minLegPt = CleaningMinLegPt;
433 double maxRadialDistance = CleaningmaxRadialDistance;
437 if ( candPtPlus < minLegPt )
return nullptr;
438 if ( candPtMinus < minLegPt )
return nullptr;
440 if ( candPtPlus > maxLegPt )
return nullptr;
441 if ( candPtMinus > maxLegPt )
return nullptr;
445 double maxr2 = (maxRadialDistance + cr); maxr2*=maxr2;
446 if (h2.Perp2() > maxr2)
return nullptr;
447 if (h3.Perp2() > maxr2)
return nullptr;
458 if(ClusterShapeFiltering){
469 GlobalPoint vertexPos(candVtx.x(),candVtx.y(),candVtx.z());
474 FastHelix phelix(ptth2->globalPosition(), mtth1->globalPosition(), vertexPos, nomField,&*bfield, vertexPos);
475 pkine = phelix.stateAtVertex();
476 FastHelix mhelix(mtth2->globalPosition(), mtth1->globalPosition(), vertexPos, nomField,&*bfield, vertexPos);
477 mkine = mhelix.stateAtVertex();
485 double quadPhotCotTheta = 0.;
487 simpleGetSlope(ptth2, ptth1, mtth1, mtth2, region, quadPhotCotTheta, quadZ0);
489 double quadPhotPhi = (candVtx-vPhotVertex).
Phi();
493 candVtx.SetZ(
std::sqrt(candVtx.Perp2())*quadPhotCotTheta+quadZ0);
494 GlobalPoint convVtxGlobalPoint(candVtx.X(),candVtx.Y(),candVtx.Z());
502 thisQuad.
x = candVtx.X();
503 thisQuad.y = candVtx.Y();
504 thisQuad.z = candVtx.Z();
505 thisQuad.ptPlus = candPtPlus;
506 thisQuad.ptMinus = candPtMinus;
507 thisQuad.cot = quadPhotCotTheta;
508 if (
similarQuadExist(thisQuad, quadV) && applyArbitration )
return nullptr;
513 FastHelix helixPlus(ptth2->globalPosition(), ptth1->globalPosition(), convVtxGlobalPoint, nomField,&*bfield, convVtxGlobalPoint);
516 GlobalVector(candPtPlus*
cos(quadPhotPhi),candPtPlus*
sin(quadPhotPhi),candPtPlus*quadPhotCotTheta),
518 & kinePlus.magneticField()
523 FastHelix helixMinus(mtth2->globalPosition(), mtth1->globalPosition(), convVtxGlobalPoint, nomField,&*bfield, convVtxGlobalPoint);
526 GlobalVector(candPtMinus*
cos(quadPhotPhi),candPtMinus*
sin(quadPhotPhi),candPtMinus*quadPhotCotTheta),
528 & kineMinus.magneticField()
531 float sinThetaPlus =
sin(kinePlus.momentum().theta());
532 float sinThetaMinus =
sin(kineMinus.momentum().theta());
548 if ( vError > 15. ) vError = 1.;
550 << vgPhotVertex.
x() <<
" " << vgPhotVertex.
y() <<
" " << vgPhotVertex.
z() <<
" " << vError <<
" " 555 << candVtx.X() <<
" " << candVtx.Y() <<
" " << candVtx.Z() <<
" " 556 << fittedPrimaryVertex.X() <<
" " << fittedPrimaryVertex.Y() <<
" " << fittedPrimaryVertex.Z() <<
" " 559 << nite <<
" " <<
chi2 <<
"\n";
561 #ifdef mydebug_sguazz 562 std::cout <<
" >>>>> Hit quad fast reco done >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" <<
"\n";
564 std::cout <<
"[SeedForPhotonConversionFromQuadruplets]\n ptth1 " ;
565 detid=ptth1->geographicalId().rawId();
567 std::cout <<
" \t " << detid <<
" " << ptth1->localPosition() <<
" " << ptth1->globalPosition() ;
568 detid=ptth2->geographicalId().rawId();
571 std::cout <<
" \t " << detid <<
" " << ptth2->localPosition() <<
" " << ptth2->globalPosition()
572 <<
"\nhelix momentum " << kinePlus.momentum() <<
" pt " << kinePlus.momentum().perp() <<
" radius " << 1/kinePlus.transverseCurvature() <<
" q " << kinePlus.charge();
574 detid=mtth1->geographicalId().rawId();
575 std::cout <<
" \t " << detid <<
" " << mtth1->localPosition() <<
" " << mtth1->globalPosition() ;
577 detid=mtth2->geographicalId().rawId();
579 std::cout <<
" \t " << detid <<
" " << mtth2->localPosition() <<
" " << mtth2->globalPosition()
580 <<
"\nhelix momentum " << kineMinus.momentum() <<
" pt " << kineMinus.momentum().perp() <<
" radius " << 1/kineMinus.transverseCurvature() <<
" q " << kineMinus.charge();
581 std::cout <<
"\n <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" <<
"\n";
590 cloner = (*builder).cloner();
592 bool buildSeedBoolPos =
buildSeedBool(seedCollection,phits,ftsPlus,es,applydzCAcut,region, dzcut);
593 bool buildSeedBoolNeg =
buildSeedBool(seedCollection,mhits,ftsMinus,es,applydzCAcut,region, dzcut);
597 if( buildSeedBoolPos && buildSeedBoolNeg ){
598 buildSeed(seedCollection,phits,ftsPlus,es,
false,region);
599 buildSeed(seedCollection,mhits,ftsMinus,es,
false,region);
611 const float cotTheta)
const 621 bool isBOFF = (0==nomField);
624 FastHelix helix(tth2->globalPosition(), tth1->globalPosition(), vertexPos, nomField,&*bfield, vertexPos);
625 kine = helix.stateAtVertex();
630 GlobalVector(kine.momentum().x(),kine.momentum().y(),kine.momentum().perp()*cotTheta),
632 & kine.magneticField()
643 (*pss) <<
"[SeedForPhotonConversionFromQuadruplets] initialKinematic tth1 " ;
644 detid=tth1->geographicalId().rawId();
646 (*pss) <<
" \t " << detid <<
" " << tth1->localPosition() <<
" " << tth1->globalPosition() ;
647 detid= tth2->geographicalId().rawId();
648 (*pss) <<
" \n\t tth2 ";
650 (*pss) <<
" \t " << detid <<
" " << tth2->localPosition() <<
" " << tth2->globalPosition()
669 float sinTheta)
const 674 sqr(vertexBounds.
y()), 0, 0,
675 sqr(vertexBounds.
z())
684 float sin2th =
sqr(sinTheta);
687 float zErr = vertexErr.
czz();
688 float transverseErr = vertexErr.
cxx();
689 C[3][3] = transverseErr;
690 C[4][4] = zErr*sin2th + transverseErr*(1-sin2th);
721 for (
unsigned int iHit = 0; iHit < hits.
size() && iHit<2; iHit++) {
731 updatedState = updator.
update(state, *newtth);
736 (*pss) <<
"\n[SeedForPhotonConversionFromQuadruplets] hit " << iHit;
743 if(!hit)
return nullptr;
750 return &seedCollection.back();
784 for (
unsigned int iHit = 0; iHit < hits.
size() && iHit<2; iHit++) {
785 hit = hits[iHit]->hit();
801 updatedState = updator.
update(state, *newtth);
817 double EstMomGamLength=
std::sqrt(EstMomGam.x()*EstMomGam.x()+EstMomGam.y()*EstMomGam.y()+EstMomGam.z()*EstMomGam.z());
818 math::XYZVector EstMomGamNorm(EstMomGam.x()/EstMomGamLength,EstMomGam.y()/EstMomGamLength,EstMomGam.z()/EstMomGamLength);
836 for (
int i =0;
i<6;++
i)
837 for (
int j =0;j<6;++j)
838 aCovarianceMatrix(
i, j) = 1
e-4;
842 const FreeTrajectoryState stateForProjectionToBeamLine(myGlobalTrajectoryParameter,myCartesianError);
850 double CovMatEntry=0.;
852 for (
int i=0;
i<3;++
i) {
853 cov(
i,
i) = CovMatEntry;
857 reco::BeamSpot myBeamSpot(BeamSpotPoint, 0.,0.,0.,0., cov,BeamType_);
900 #ifdef mydebug_knuenz 904 if(std::fabs(zCA)>dzcut)
return false;
935 (*pss) <<
"\n" << s <<
"\t";
936 for(
size_t i=0;
i<2;++
i)
937 (*
pss) << std::setw (60) << d[
i] << std::setw(1) <<
" | ";
942 (*pss) <<
"\n" << s <<
"\t";
943 for(
size_t i=0;
i<2;++
i)
944 (*
pss) << std::setw (60) << d[
i] << std::setw(1) <<
" | ";
949 (*pss) <<
"\n" << s <<
"\t";
950 for(
size_t i=0;
i<2;++
i)
951 (*
pss) << std::setw(20) << d[
i] <<
" r " << d[
i].
perp() <<
" phi " << d[
i].
phi() <<
" | ";
956 (*pss) <<
"\n" << s <<
"\n";
958 (*
pss) << std::setw(20) << d[
i] <<
" r " << d[
i].
perp() <<
" phi " << d[
i].
phi() <<
"\n";
971 for (
int i = 0;
i < n - j;
i++) {
990 for (
int i = 0;
i < n - j;
i++) {
1005 double x[5],
y[5], e2y[5];
1010 x[0] = ohit->globalPosition().perp();
1011 y[0] = ohit->globalPosition().z();
1014 x[1] = nohit->globalPosition().perp();
1015 y[1] = nohit->globalPosition().z();
1018 x[2] = nihit->globalPosition().perp();
1019 y[2] = nihit->globalPosition().z();
1022 x[3] = ihit->globalPosition().perp();
1023 y[3] = ihit->globalPosition().z();
1030 if ( vError > 15. ) vError = 1.;
1031 e2y[4] =
sqr(vError);
1052 double sqrProjFactor =
sqr((hit->globalPosition().z()-region.
origin().
z())/(hit->globalPosition().perp()-region.
origin().
perp()));
1053 return (hit->globalPositionError().czz()+sqrProjFactor*hit->globalPositionError().rerr(hit->globalPosition()));
1059 BOOST_FOREACH(
Quad quad, quadV )
1061 double dx = thisQuad.
x-quad.
x;
1062 double dy = thisQuad.
y-quad.
y;
1080 if (
sqrt(dx*dx+dy*dy)<1. &&
1089 quadV.push_back(thisQuad);
1096 double kTWOPI = 2.*
kPI_;
1097 double DeltaPhiMan=v1.Phi()-v2.Phi();
1098 while (DeltaPhiMan >=
kPI_) DeltaPhiMan -= kTWOPI;
1099 while (DeltaPhiMan < -
kPI_) DeltaPhiMan += kTWOPI;
constexpr double deltaPhi(double phi1, double phi2)
float originRBound() const
bounds the particle vertex in the transverse plane
math::Error< dimension >::type CovarianceMatrix
T getParameter(std::string const &) const
static const int cotTheta_Max
CurvilinearTrajectoryError initialError(const GlobalVector &vertexBounds, float ptMin, float sinTheta) const
const TrajectorySeed * trajectorySeed(TrajectorySeedCollection &seedCollection, const SeedingHitSet &phits, const SeedingHitSet &mhits, const TrackingRegion ®ion, const edm::Event &ev, const edm::EventSetup &es, std::stringstream &ss, std::vector< Quad > &quadV, edm::ParameterSet &QuadCutPSet)
bool buildSeedBool(TrajectorySeedCollection &seedCollection, const SeedingHitSet &hits, const FreeTrajectoryState &fts, const edm::EventSetup &es, bool apply_dzCut, const TrackingRegion ®ion, double dzcut) const
std::pair< ALIstring, ALIstring > pss
GlobalPoint const & origin() const
def create(alignables, pedeDump, additionalData, outputFile, config)
double DeltaPhiManual(const math::XYZVector &v1, const math::XYZVector &v2)
void stupidPrint(std::string s, float *d)
int nominalValue() const
The nominal field value for this map in kGauss.
void bubbleReverseSortVsPhi(GlobalPoint arr[], int n, GlobalPoint vtx)
~SeedForPhotonConversionFromQuadruplets()
Sin< T >::type sin(const T &t)
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepSym< double, 6 > > AlgebraicSymMatrix66
Geom::Phi< T > phi() const
Global3DPoint GlobalPoint
constexpr uint32_t rawId() const
get the raw id
GlobalPoint globalPosition() const
math::XYZPoint Point
point in the space
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
void bubbleSortVsPhi(GlobalPoint arr[], int n, GlobalPoint vtx)
int ConversionCandidate(math::XYZVector &, double &, double &)
float transverseCurvature() const
TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TrackingRecHit &) const override
double simpleGetSlope(const SeedingHitSet::ConstRecHitPointer &ohit, const SeedingHitSet::ConstRecHitPointer &nohit, const SeedingHitSet::ConstRecHitPointer &ihit, const SeedingHitSet::ConstRecHitPointer &nihit, const TrackingRegion ®ion, double &cotTheta, double &z0)
BaseTrackerRecHit const * ConstRecHitPointer
GlobalTrajectoryParameters initialKinematic(const SeedingHitSet &hits, const GlobalPoint &vertexPos, const edm::EventSetup &es, const float cotTheta) const
double verySimpleFit(int size, double *ax, double *ay, double *e2y, double &p0, double &e2p0, double &p1)
std::vector< TrajectorySeed > TrajectorySeedCollection
void SetMaxNumberOfIterations(int val)
std::unique_ptr< SeedComparitor > theComparitor
BaseTrackerRecHit const * hit() const final
GlobalVector momentum() const
virtual TrackingRecHit * clone() const =0
Cos< T >::type cos(const T &t)
Abs< T >::type abs(const T &t)
void print(std::stringstream &ss, const SiStripCluster &clus)
bool checkHit(const TrajectoryStateOnSurface &, const SeedingHitSet::ConstRecHitPointer &hit, const edm::EventSetup &es) const
static const std::string B
virtual LocalPoint localPosition() const =0
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
const TrajectorySeed * buildSeed(TrajectorySeedCollection &seedCollection, const SeedingHitSet &hits, const FreeTrajectoryState &fts, const edm::EventSetup &es, bool apply_dzCut, const TrackingRegion ®ion) const
float originZBound() const
bounds the particle vertex in the longitudinal plane
FTS const & trackStateAtPCA() const
GlobalPoint position() const
Vector3DBase unit() const
GlobalPoint position() const
XYZVectorD XYZVector
spatial vector with cartesian internal representation
float ptMin() const
minimal pt of interest
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
std::vector< std::vector< double > > tmp
GlobalVector globalMomentum() const
double getSqrEffectiveErrorOnZ(const SeedingHitSet::ConstRecHitPointer &hit, const TrackingRegion ®ion)
bool similarQuadExist(Quad &thisQuad, std::vector< Quad > &quadV)
std::string thePropagatorLabel
unsigned int size() const
const TrackerGeomDet * idToDet(DetId) const override
LocalPoint localPosition() const final
const MagneticField & magneticField() const
DetId geographicalId() const
TrackCharge charge() const
SeedingHitSet::RecHitPointer refitHit(SeedingHitSet::ConstRecHitPointer hit, const TrajectoryStateOnSurface &state) const
T const * product() const
T get(const Candidate &c)
Global3DVector GlobalVector
SeedForPhotonConversionFromQuadruplets(const edm::ParameterSet &cfg, edm::ConsumesCollector &iC, const edm::ParameterSet &SeedComparitorPSet)