CMS 3D CMS Logo

ConversionProducer.h
Go to the documentation of this file.
1 #ifndef RecoEgamma_EgammaPhotonProducers_ConversionProducer_h
2 #define RecoEgamma_EgammaPhotonProducers_ConversionProducer_h
3 
10 // user include files
13 
16 
19 
21 
22 //ECAL clusters
35 
44 
45 //Tracker tracks
49 
50 //photon data format
57 
60 
63 
65 public:
66  explicit ConversionProducer(const edm::ParameterSet&);
67  ~ConversionProducer() override;
68 
69 private:
70  void produce(edm::Event&, const edm::EventSetup&) override;
71 
73  std::multimap<double, reco::CaloClusterPtr>& basicClusterPtrs,
74  std::multimap<double, reco::CaloClusterPtr>& superClusterPtrs);
75 
76  // ----------member data ---------------------------
78 
80  typedef std::vector<Point> PointCollection;
81 
83 
89 
91 
93 
94  bool usePvtx_; //if use primary vertices
97 
99 
100  double deltaEta_;
101 
102  double halfWayEta_, halfWayPhi_; //halfway open angle to search in basic clusters
103  unsigned int maxNumOfTrackInPU_;
104  double maxTrackZ_;
105  double maxTrackRho_;
106  double minSCEt_;
109  double energyBC_; //1.5GeV for track BC selection
110  double energyTotalBC_; //5GeV for track pair BC selection
111  double d0Cut_; //0 for d0*charge cut
112  double dzCut_; //innerposition of z diff cut
113  double dEtaTkBC_, dPhiTkBC_; //0.06 0.6 for track and BC matching
114 
115  double maxChi2Left_, maxChi2Right_; //5. 5. for track chi2 quality
116  double minHitsLeft_, minHitsRight_; //5 2 for track hits quality
117 
119  minApproachHigh_; //0.02 0.2 for track pair open angle and > -0.1 cm
120 
121  double r_cut; //cross_r cut
122  double vtxChi2_; //vertex chi2 probablity cut
123 
124  bool allowSingleLeg_; //if single track conversion ?
125  bool rightBC_; //if right leg requires matching BC?
126 
128  const edm::EventSetup& iSetup,
129  const std::multimap<float, edm::Ptr<reco::ConversionTrack> >& allTracks,
130  const std::multimap<double, reco::CaloClusterPtr>& superClusterPtrs,
131  const std::multimap<double, reco::CaloClusterPtr>& basicClusterPtrs,
132  const reco::Vertex& the_pvtx,
133  reco::ConversionCollection& outputConvPhotonCollection);
134 
135  //track quality cut, returns pass or no
136  inline bool trackQualityFilter(const edm::RefToBase<reco::Track>& ref, bool isLeft);
137  inline bool trackD0Cut(const edm::RefToBase<reco::Track>& ref);
138  inline bool trackD0Cut(const edm::RefToBase<reco::Track>& ref, const reco::Vertex& the_pvtx);
139 
140  //track impact point at ECAL wall, returns validity to access position ew
141  bool getTrackImpactPosition(const reco::Track* tk_ref,
142  const TrackerGeometry* trackerGeom,
143  const MagneticField* magField,
144  math::XYZPointF& ew);
145 
146  //distance at min approaching point, returns distance
147  // double getMinApproach(const edm::RefToBase<reco::Track>& ll, const edm::RefToBase<reco::Track>& rr,
148  // const MagneticField* magField);
149 
150  bool preselectTrackPair(const reco::TransientTrack& ttk_l, const reco::TransientTrack& ttk_r, double& appDist);
151 
152  //cut-based selection, TODO remove global cut variables
155 
156  //kinematic vertex fitting, return true for valid vertex
157  bool checkVertex(const reco::TransientTrack& ttk_l,
158  const reco::TransientTrack& ttk_r,
159  const MagneticField* magField,
160  reco::Vertex& the_vertex);
161  bool checkPhi(const edm::RefToBase<reco::Track>& tk_l,
162  const edm::RefToBase<reco::Track>& tk_r,
163  const TrackerGeometry* trackerGeom,
164  const MagneticField* magField,
165  const reco::Vertex& the_vertex);
166 
167  //check the closest BC, returns true for found a BC
168  bool getMatchedBC(const std::multimap<double, reco::CaloClusterPtr>& bcMap,
169  const math::XYZPointF& trackImpactPosition,
170  reco::CaloClusterPtr& closestBC);
171 
172  // finds the super cluster matching with at least one track in the pair
173  bool matchingSC(const std::multimap<double, reco::CaloClusterPtr>& scMap,
176 
177  double etaTransformation(float EtaParticle, float Zvertex);
178 
179  math::XYZPointF toFConverterP(const math::XYZPoint& val) { return math::XYZPointF(val.x(), val.y(), val.z()); }
180 
181  math::XYZVectorF toFConverterV(const math::XYZVector& val) { return math::XYZVectorF(val.x(), val.y(), val.z()); }
182 };
183 
184 inline const GeomDet* recHitDet(const TrackingRecHit& hit, const TrackingGeometry* geom) {
185  return geom->idToDet(hit.geographicalId());
186 }
187 
189  return recHitDet(hit, geom)->surface();
190 }
191 
193  return s.toLocal(GlobalVector(v.x(), v.y(), v.z()));
194 }
195 
196 #endif
unsigned int maxNumOfTrackInPU_
ConversionVertexFinder * theVertexFinder_
edm::EDGetTokenT< reco::VertexCollection > vertexProducer_
bool getTrackImpactPosition(const reco::Track *tk_ref, const TrackerGeometry *trackerGeom, const MagneticField *magField, math::XYZPointF &ew)
static HepMC::IO_HEPEVT conv
const TransientTrackBuilder * thettbuilder_
void buildCollection(edm::Event &iEvent, const edm::EventSetup &iSetup, const std::multimap< float, edm::Ptr< reco::ConversionTrack > > &allTracks, const std::multimap< double, reco::CaloClusterPtr > &superClusterPtrs, const std::multimap< double, reco::CaloClusterPtr > &basicClusterPtrs, const reco::Vertex &the_pvtx, reco::ConversionCollection &outputConvPhotonCollection)
void buildSuperAndBasicClusterGeoMap(const edm::Event &, std::multimap< double, reco::CaloClusterPtr > &basicClusterPtrs, std::multimap< double, reco::CaloClusterPtr > &superClusterPtrs)
virtual const GeomDet * idToDet(DetId) const =0
math::XYZPointF Point
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< float > > XYZPointF
point in space with cartesian internal representation
Definition: Point3D.h:10
LocalVector toLocal(const reco::Track::Vector &v, const Surface &s)
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
std::vector< Conversion > ConversionCollection
collectin of Conversion objects
Definition: ConversionFwd.h:9
bool matchingSC(const std::multimap< double, reco::CaloClusterPtr > &scMap, reco::Conversion &conv, reco::CaloClusterPtrVector &mSC)
int iEvent
Definition: GenABIO.cc:224
math::XYZVectorF toFConverterV(const math::XYZVector &val)
LocalPoint toLocal(const GlobalPoint &gp) const
edm::EDGetTokenT< edm::View< reco::CaloCluster > > scEndcapProducer_
edm::EDGetTokenT< edm::View< reco::CaloCluster > > bcBarrelCollection_
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< float > > XYZVectorF
spatial vector with cartesian internal representation
Definition: Vector3D.h:16
edm::EDGetTokenT< edm::View< reco::CaloCluster > > bcEndcapCollection_
bool getMatchedBC(const std::multimap< double, reco::CaloClusterPtr > &bcMap, const math::XYZPointF &trackImpactPosition, reco::CaloClusterPtr &closestBC)
bool checkTrackPair(const std::pair< edm::RefToBase< reco::Track >, reco::CaloClusterPtr > &ll, const std::pair< edm::RefToBase< reco::Track >, reco::CaloClusterPtr > &rr)
bool trackQualityFilter(const edm::RefToBase< reco::Track > &ref, bool isLeft)
const GeomDet * recHitDet(const TrackingRecHit &hit, const TrackingGeometry *geom)
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
bool trackD0Cut(const edm::RefToBase< reco::Track > &ref)
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
std::string ConvertedPhotonCollection_
const BoundPlane & recHitSurface(const TrackingRecHit &hit, const TrackingGeometry *geom)
edm::EDGetTokenT< edm::View< reco::ConversionTrack > > src_
edm::EDGetTokenT< edm::View< reco::CaloCluster > > scBarrelProducer_
std::vector< Point > PointCollection
void produce(edm::Event &, const edm::EventSetup &) override
double etaTransformation(float EtaParticle, float Zvertex)
math::XYZPointF toFConverterP(const math::XYZPoint &val)
DetId geographicalId() const
bool preselectTrackPair(const reco::TransientTrack &ttk_l, const reco::TransientTrack &ttk_r, double &appDist)
math::XYZVector Vector
spatial vector
Definition: TrackBase.h:77
bool checkPhi(const edm::RefToBase< reco::Track > &tk_l, const edm::RefToBase< reco::Track > &tk_r, const TrackerGeometry *trackerGeom, const MagneticField *magField, const reco::Vertex &the_vertex)
Global3DVector GlobalVector
Definition: GlobalVector.h:10
ConversionProducer(const edm::ParameterSet &)
bool checkVertex(const reco::TransientTrack &ttk_l, const reco::TransientTrack &ttk_r, const MagneticField *magField, reco::Vertex &the_vertex)