File indexing completed on 2024-11-14 04:15:52
0001 #ifndef CtfSpecialSeedGenerator_H
0002 #define CtfSpecialSeedGenerator_H
0003
0004
0005
0006
0007
0008
0009 #include "FWCore/Framework/interface/ESHandle.h"
0010 #include "FWCore/Framework/interface/Event.h"
0011 #include "FWCore/Framework/interface/EventSetup.h"
0012 #include "FWCore/Framework/interface/stream/EDProducer.h"
0013 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0014 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0015 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0016
0017 #include "DataFormats/Common/interface/Handle.h"
0018 #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
0019 #include "DataFormats/GeometrySurface/interface/BoundPlane.h"
0020
0021 #include "RecoTracker/TransientTrackingRecHit/interface/TkTransientTrackingRecHitBuilder.h"
0022 #include "RecoTracker/Record/interface/CkfComponentsRecord.h"
0023 #include "RecoTracker/TkSeedingLayers/interface/SeedingLayerSetsBuilder.h"
0024 #include "RecoTracker/TkSeedingLayers/interface/SeedingHitSet.h"
0025 #include "RecoTracker/TkTrackingRegions/interface/OrderedHitsGenerator.h"
0026 #include "RecoTracker/TkTrackingRegions/interface/TrackingRegionProducer.h"
0027 #include "RecoTracker/SpecialSeedGenerators/interface/SeedFromGenericPairOrTriplet.h"
0028
0029
0030
0031 #include "MagneticField/Engine/interface/MagneticField.h"
0032
0033 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h"
0034 #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
0035 #include "TrackingTools/DetLayers/interface/NavigationDirection.h"
0036
0037 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0038 #include "RecoTracker/SpecialSeedGenerators/interface/ClusterChecker.h"
0039
0040 #include <map>
0041
0042 class CtfSpecialSeedGenerator : public edm::stream::EDProducer<> {
0043 public:
0044 typedef TrajectoryStateOnSurface TSOS;
0045
0046 CtfSpecialSeedGenerator(const edm::ParameterSet& conf);
0047 ~CtfSpecialSeedGenerator() override = default;
0048
0049 void beginRun(edm::Run const&, edm::EventSetup const&) override;
0050 void endRun(edm::Run const&, edm::EventSetup const&) override;
0051
0052 void produce(edm::Event& e, const edm::EventSetup& c) override;
0053
0054 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0055
0056 private:
0057 bool run(const edm::EventSetup& c, const edm::Event& e, TrajectorySeedCollection& output);
0058
0059 bool buildSeeds(const edm::EventSetup& iSetup,
0060 const edm::Event& e,
0061 const OrderedSeedingHits& osh,
0062 const NavigationDirection& navdir,
0063 const PropagationDirection& dir,
0064 TrajectorySeedCollection& output);
0065
0066 bool preliminaryCheck(const SeedingHitSet& shs, const edm::EventSetup& es);
0067
0068
0069 bool postCheck(const TrajectorySeed& seed);
0070
0071 private:
0072 edm::ParameterSet conf_;
0073
0074 const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> theMFToken;
0075 const edm::ESGetToken<TransientTrackingRecHitBuilder, TransientRecHitRecord> theBuilderToken;
0076 const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> theTrackerToken;
0077 const edm::ESGetToken<Propagator, TrackingComponentsRecord> thePropAlongToken;
0078 const edm::ESGetToken<Propagator, TrackingComponentsRecord> thePropOppositeToken;
0079 const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> theTopoToken;
0080
0081 edm::ESHandle<MagneticField> theMagfield;
0082 edm::ESHandle<TrackerGeometry> theTracker;
0083 edm::ESHandle<TransientTrackingRecHitBuilder> theBuilder;
0084
0085
0086
0087
0088
0089
0090
0091 std::vector<std::unique_ptr<OrderedHitsGenerator> > theGenerators;
0092 std::vector<PropagationDirection> thePropDirs;
0093 std::vector<NavigationDirection> theNavDirs;
0094 std::unique_ptr<TrackingRegionProducer> theRegionProducer;
0095
0096 std::unique_ptr<SeedFromGenericPairOrTriplet> theSeedBuilder;
0097 bool useScintillatorsConstraint;
0098 BoundPlane::BoundPlanePointer upperScintillator;
0099 BoundPlane::BoundPlanePointer lowerScintillator;
0100 bool requireBOFF;
0101 int32_t theMaxSeeds;
0102 ClusterChecker check;
0103 };
0104 #endif