File indexing completed on 2023-10-25 10:02:16
0001 #ifndef PhotonConversionFinderFromTracks_H
0002 #define PhotonConversionFinderFromTracks_H
0003
0004 #include "FWCore/Framework/interface/Frameworkfwd.h"
0005 #include "FWCore/Framework/interface/Event.h"
0006 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0007 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0008 #include "FWCore/Utilities/interface/Visibility.h"
0009
0010 #include "SeedForPhotonConversion1Leg.h"
0011 #include "RecoTracker/TkSeedGenerator/interface/FastHelix.h"
0012
0013 #include "IdealHelixParameters.h"
0014
0015 #include "PrintRecoObjects.h"
0016
0017 #include "DataFormats/VertexReco/interface/Vertex.h"
0018 #include "DataFormats/VertexReco/interface/VertexFwd.h"
0019 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
0020 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0021
0022 #include "CombinedHitPairGeneratorForPhotonConversion.h"
0023
0024 #include "RecoTracker/TkSeedGenerator/interface/ClusterChecker.h"
0025 #include "RecoTracker/TkTrackingRegions/interface/GlobalTrackingRegionProducerFromBeamSpot.h"
0026 #include "FWCore/Framework/interface/ConsumesCollector.h"
0027
0028 #include <sstream>
0029
0030 inline bool lt_(std::pair<double, short> a, std::pair<double, short> b) { return a.first < b.first; }
0031
0032 class dso_hidden PhotonConversionTrajectorySeedProducerFromSingleLegAlgo {
0033 public:
0034 PhotonConversionTrajectorySeedProducerFromSingleLegAlgo(const edm::ParameterSet&, edm::ConsumesCollector&& iC);
0035 ~PhotonConversionTrajectorySeedProducerFromSingleLegAlgo();
0036
0037 void find(const edm::Event& event, const edm::EventSetup& setup, TrajectorySeedCollection& output);
0038
0039 IdealHelixParameters* getIdealHelixParameters() { return &_IdealHelixParameters; }
0040
0041 private:
0042 void loopOnTracks();
0043 bool inspectTrack(const reco::Track* track, const TrackingRegion& region, math::XYZPoint& primaryVertexPoint);
0044
0045 bool rejectTrack(const reco::Track& track);
0046
0047 bool selectPriVtxCompatibleWithTrack(const reco::Track& tk,
0048 std::vector<reco::Vertex>& selectedPriVtxCompatibleWithTrack);
0049 void loopOnPriVtx(const reco::Track& tk, const std::vector<reco::Vertex>& selectedPriVtxCompatibleWithTrack);
0050
0051
0052
0053 TrajectorySeedCollection* seedCollection = nullptr;
0054
0055 std::unique_ptr<CombinedHitPairGeneratorForPhotonConversion> theHitsGenerator;
0056 std::unique_ptr<SeedForPhotonConversion1Leg> theSeedCreator;
0057 std::unique_ptr<GlobalTrackingRegionProducerFromBeamSpot> theRegionProducer;
0058
0059 ClusterChecker theClusterCheck;
0060 bool theSilentOnClusterCheck;
0061
0062 double _vtxMinDoF, _maxDZSigmas;
0063 size_t _maxNumSelVtx;
0064 bool _applyTkVtxConstraint;
0065 size_t _countSeedTracks;
0066 edm::InputTag _primaryVtxInputTag, _beamSpotInputTag;
0067 edm::EDGetTokenT<reco::VertexCollection> token_vertex;
0068 edm::EDGetTokenT<reco::BeamSpot> token_bs;
0069 edm::EDGetTokenT<reco::TrackCollection> token_refitter;
0070 edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> token_magField;
0071
0072 typedef std::vector<std::unique_ptr<TrackingRegion> > Regions;
0073 typedef Regions::const_iterator IR;
0074 Regions regions;
0075
0076 edm::Handle<reco::TrackCollection> trackCollectionH;
0077
0078 const edm::EventSetup* myEsetup;
0079 const edm::Event* myEvent;
0080
0081 const MagneticField* magField;
0082 edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
0083 const reco::BeamSpot* theBeamSpot;
0084
0085 IdealHelixParameters _IdealHelixParameters;
0086
0087 edm::Handle<reco::VertexCollection> vertexHandle;
0088 reco::Vertex primaryVertex;
0089
0090 PrintRecoObjects po;
0091
0092 std::stringstream ss;
0093 };
0094 #endif