00001 #ifndef FastSimulation_Tracking_TrajectorySeedProducer_h 00002 #define FastSimulation_Tracking_TrajectorySeedProducer_h 00003 00004 #include "FWCore/Framework/interface/EDProducer.h" 00005 #include "FWCore/ParameterSet/interface/InputTag.h" 00006 #include "DataFormats/GeometryVector/interface/GlobalPoint.h" 00007 #include "DataFormats/VertexReco/interface/VertexFwd.h" 00008 00009 #include <vector> 00010 #include <string> 00011 00012 class TransientInitialStateEstimator; 00013 class MagneticField; 00014 class MagneticFieldMap; 00015 class TrackerGeometry; 00016 class TrajectoryStateOnSurface; 00017 class PTrajectoryStateOnDet; 00018 class ParticlePropagator; 00019 class PropagatorWithMaterial; 00020 00021 namespace edm { 00022 class ParameterSet; 00023 class Event; 00024 class EventSetup; 00025 } 00026 00027 class TrajectorySeedProducer : public edm::EDProducer 00028 { 00029 public: 00030 00031 explicit TrajectorySeedProducer(const edm::ParameterSet& conf); 00032 00033 virtual ~TrajectorySeedProducer(); 00034 00035 virtual void beginRun(edm::Run & run, const edm::EventSetup & es); 00036 00037 virtual void produce(edm::Event& e, const edm::EventSetup& es); 00038 00039 private: 00040 00042 void stateOnDet(const TrajectoryStateOnSurface& ts, 00043 unsigned int detid, 00044 PTrajectoryStateOnDet& pts) const; 00045 00048 bool compatibleWithBeamAxis(GlobalPoint& gpos1, 00049 GlobalPoint& gpos2, 00050 double error, 00051 bool forward, 00052 unsigned algo) const; 00053 00054 private: 00055 00056 const MagneticField* theMagField; 00057 const MagneticFieldMap* theFieldMap; 00058 const TrackerGeometry* theGeometry; 00059 PropagatorWithMaterial* thePropagator; 00060 00061 std::vector<double> pTMin; 00062 std::vector<double> maxD0; 00063 std::vector<double> maxZ0; 00064 std::vector<unsigned> minRecHits; 00065 edm::InputTag hitProducer; 00066 edm::InputTag theBeamSpot; 00067 00068 bool seedCleaning; 00069 bool rejectOverlaps; 00070 unsigned int absMinRecHits; 00071 std::vector<std::string> seedingAlgo; 00072 std::vector<unsigned int> numberOfHits; 00073 std::vector<unsigned int> firstHitSubDetectorNumber; 00074 std::vector<unsigned int> secondHitSubDetectorNumber; 00075 std::vector<unsigned int> thirdHitSubDetectorNumber; 00076 std::vector< std::vector<unsigned int> > firstHitSubDetectors; 00077 std::vector< std::vector<unsigned int> > secondHitSubDetectors; 00078 std::vector< std::vector<unsigned int> > thirdHitSubDetectors; 00079 00080 std::vector<double> originRadius; 00081 std::vector<double> originHalfLength; 00082 std::vector<double> originpTMin; 00083 00084 std::vector<edm::InputTag> primaryVertices; 00085 std::vector<double> zVertexConstraint; 00086 00087 std::vector<const reco::VertexCollection*> vertices; 00088 double x0, y0, z0; 00089 00090 }; 00091 00092 #endif