CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Attributes
PixelFitterByConformalMappingAndLine Class Reference

#include <PixelFitterByConformalMappingAndLine.h>

Inheritance diagram for PixelFitterByConformalMappingAndLine:
PixelFitterBase

Public Member Functions

 PixelFitterByConformalMappingAndLine (const TransientTrackingRecHitBuilder *ttrhBuilder, const TrackerGeometry *tracker, const MagneticField *field, double fixImpactParameter, bool useFixImpactParameter)
 
std::unique_ptr< reco::Trackrun (const std::vector< const TrackingRecHit * > &hits, const TrackingRegion &region, const edm::EventSetup &setup) const override
 
 ~PixelFitterByConformalMappingAndLine () override
 
- Public Member Functions inherited from PixelFitterBase
virtual ~PixelFitterBase ()
 

Private Attributes

const MagneticFieldtheField
 
const double theFixImpactParameter
 
const TrackerGeometrytheTracker
 
const TransientTrackingRecHitBuildertheTTRHBuilder
 
const bool theUseFixImpactParameter
 

Detailed Description

Definition at line 14 of file PixelFitterByConformalMappingAndLine.h.

Constructor & Destructor Documentation

PixelFitterByConformalMappingAndLine::PixelFitterByConformalMappingAndLine ( const TransientTrackingRecHitBuilder ttrhBuilder,
const TrackerGeometry tracker,
const MagneticField field,
double  fixImpactParameter,
bool  useFixImpactParameter 
)
explicit
PixelFitterByConformalMappingAndLine::~PixelFitterByConformalMappingAndLine ( )
inlineoverride

Member Function Documentation

std::unique_ptr< reco::Track > PixelFitterByConformalMappingAndLine::run ( const std::vector< const TrackingRecHit * > &  hits,
const TrackingRegion region,
const edm::EventSetup setup 
) const
overridevirtual

Implements PixelFitterBase.

Definition at line 47 of file PixelFitterByConformalMappingAndLine.cc.

References TransientTrackingRecHitBuilder::build(), PixelTrackBuilder::build(), ConformalMappingFit::charge(), ALCARECOTkAlJpsiMuMu_cff::charge, hltPixelTracks_cff::chi2, ConformalMappingFit::chi2(), RZLine::chi2(), RZLine::cotTheta(), RZLine::covii(), RZLine::covss(), ConformalMappingFit::curvature(), GlobalErrorBase< T, ErrorWeightType >::czz(), ConformalMappingFit::directionPhi(), vertexPlots::e4, Measurement1D::error(), relativeConstraints::error, MessageLogger_cfi::errors, fftjetvertexadder_cfi::errZ, ConformalMappingFit::fixImpactParmaeter(), mps_fire::i, ConformalMappingFit::impactParameter(), RZLine::intercept(), PixelRecoUtilities::inversePt(), PixelPluginsPhase0_cfi::isBarrel, nhits, TrackingRegion::origin(), PV3DBase< T, PVType, FrameType >::perp2(), phi, point, HLT_2018_cff::points, DiDispStaMuonMonitor_cfi::pt, alignCSCRings::r, rpcPointValidation_cfi::recHit, GlobalErrorBase< T, ErrorWeightType >::rerr(), singleTopDQM_cfi::setup, sqr(), mathSSE::sqrt(), theField, theFixImpactParameter, theTTRHBuilder, theUseFixImpactParameter, qcdUeDQM_cfi::tip, Measurement1D::value(), PV3DBase< T, PVType, FrameType >::x(), geometryCSVtoXML::xy, PV3DBase< T, PVType, FrameType >::y(), z, PV3DBase< T, PVType, FrameType >::z(), and ComparisonHelper::zip().

Referenced by ~PixelFitterByConformalMappingAndLine().

49  {
50  int nhits = hits.size();
51 
52  vector<GlobalPoint> points;
53  vector<GlobalError> errors;
54  vector<bool> isBarrel;
55 
56  for (vector<const TrackingRecHit *>::const_iterator ih = hits.begin(); ih != hits.end(); ih++) {
58  points.push_back(recHit->globalPosition());
59  errors.push_back(recHit->globalPositionError());
60  isBarrel.push_back(recHit->detUnit()->type().isBarrel());
61  }
62 
63  // if (useMultScatt) {
64  // MultipleScatteringParametrisation ms(hits[i].layer());
65  // float cotTheta = (p.z()-zVtx)/p.perp();
66  // err += sqr( ms( pt, cotTheta, PixelRecoPointRZ(0.,zVtx) ) );
67  // }
68 
69  //
70  // simple fit to get pt, phi0 used for precise calcul.
71  //
72  typedef ConformalMappingFit::PointXY PointXY;
73  vector<PointXY> xy;
74  vector<float> errRPhi2;
75  for (int i = 0; i < nhits; ++i) {
76  const GlobalPoint &point = points[i];
77  xy.push_back(PointXY(point.x() - region.origin().x(), point.y() - region.origin().y()));
78  float phiErr2 = errors[i].phierr(point);
79  errRPhi2.push_back(point.perp2() * phiErr2);
80  }
81  ConformalMappingFit parabola(xy, errRPhi2);
83  parabola.fixImpactParmaeter(theFixImpactParameter);
84  else if (nhits < 3)
85  parabola.fixImpactParmaeter(0.);
86 
87  Measurement1D curv = parabola.curvature();
88  float invPt = PixelRecoUtilities::inversePt(curv.value(), setup);
89  float valPt = (invPt > 1.e-4) ? 1. / invPt : 1.e4;
90  float errPt = PixelRecoUtilities::inversePt(curv.error(), setup) * sqr(valPt);
91  Measurement1D pt(valPt, errPt);
92  Measurement1D phi = parabola.directionPhi();
93  Measurement1D tip = parabola.impactParameter();
94 
95  //
96  // precalculate theta to correct errors:
97  //
98  vector<float> r(nhits), z(nhits), errZ(nhits);
99  float simpleCot = (points.back().z() - points.front().z()) / (points.back().perp() - points.front().perp());
100  for (int i = 0; i < nhits; ++i) {
101  const GlobalPoint &point = points[i];
102  const GlobalError &error = errors[i];
103  r[i] = sqrt(sqr(point.x() - region.origin().x()) + sqr(point.y() - region.origin().y()));
105  z[i] = point.z() - region.origin().z();
106  errZ[i] = (isBarrel[i]) ? sqrt(error.czz()) : sqrt(error.rerr(point)) * simpleCot;
107  }
108 
109  //
110  // line fit (R-Z plane)
111  //
112  RZLine rzLine(r, z, errZ);
113 
114  //
115  // parameters for track builder
116  //
117  Measurement1D zip(rzLine.intercept(), sqrt(rzLine.covii()));
118  Measurement1D cotTheta(rzLine.cotTheta(), sqrt(rzLine.covss()));
119  float chi2 = parabola.chi2() + rzLine.chi2();
120  int charge = parabola.charge();
121 
122  PixelTrackBuilder builder;
123  return std::unique_ptr<reco::Track>(
124  builder.build(pt, phi, cotTheta, tip, zip, chi2, charge, hits, theField, region.origin()));
125 }
GlobalPoint const & origin() const
T y() const
Definition: PV3DBase.h:60
double error() const
Definition: Measurement1D.h:27
T perp2() const
Definition: PV3DBase.h:68
T inversePt(T curvature, const edm::EventSetup &iSetup)
OutputIterator zip(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp)
T sqrt(T t)
Definition: SSEVec.h:19
T z() const
Definition: PV3DBase.h:61
reco::Track * build(const Measurement1D &pt, const Measurement1D &phi, const Measurement1D &cotTheta, const Measurement1D &tip, const Measurement1D &zip, float chi2, int charge, const std::vector< const TrackingRecHit * > &hits, const MagneticField *mf, const GlobalPoint &reference=GlobalPoint(0, 0, 0)) const
std::shared_ptr< TrackingRecHit const > RecHitPointer
virtual RecHitPointer build(const TrackingRecHit *p) const =0
build a tracking rechit from an existing rechit
Definition: RZLine.h:12
T rerr(const GlobalPoint &aPoint) const
double value() const
Definition: Measurement1D.h:25
T x() const
Definition: PV3DBase.h:59
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
Definition: invegas.h:5
const TransientTrackingRecHitBuilder * theTTRHBuilder

Member Data Documentation

const MagneticField* PixelFitterByConformalMappingAndLine::theField
private

Definition at line 29 of file PixelFitterByConformalMappingAndLine.h.

Referenced by run().

const double PixelFitterByConformalMappingAndLine::theFixImpactParameter
private

Definition at line 30 of file PixelFitterByConformalMappingAndLine.h.

Referenced by run().

const TrackerGeometry* PixelFitterByConformalMappingAndLine::theTracker
private

Definition at line 28 of file PixelFitterByConformalMappingAndLine.h.

const TransientTrackingRecHitBuilder* PixelFitterByConformalMappingAndLine::theTTRHBuilder
private

Definition at line 27 of file PixelFitterByConformalMappingAndLine.h.

Referenced by run().

const bool PixelFitterByConformalMappingAndLine::theUseFixImpactParameter
private

Definition at line 31 of file PixelFitterByConformalMappingAndLine.h.

Referenced by run().