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;
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
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 &)
uint32_t rawId() const
get the raw id
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
double deltaPhi(double phi1, double phi2)
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)