Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-11-14 04:15:52

0001 #ifndef CtfSpecialSeedGenerator_H
0002 #define CtfSpecialSeedGenerator_H
0003 
0004 /** \class CombinatorialSeedGeneratorForCOsmics
0005  *  A concrete seed generator providing seeds constructed 
0006  *  from combinations of hits in pairs of strip layers 
0007  */
0008 //FWK
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 //DataFormats
0017 #include "DataFormats/Common/interface/Handle.h"
0018 #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
0019 #include "DataFormats/GeometrySurface/interface/BoundPlane.h"
0020 //RecoTracker
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 //#include "RecoTracker/SpecialSeedGenerators/interface/GenericPairOrTripletGenerator.h"
0029 //#include "RecoTracker/SpecialSeedGenerators/interface/SeedCleaner.h"
0030 //MagneticField
0031 #include "MagneticField/Engine/interface/MagneticField.h"
0032 //TrackingTools
0033 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h"
0034 #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
0035 #include "TrackingTools/DetLayers/interface/NavigationDirection.h"
0036 //Geometry
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   //checks that the hits used are at positive y and are on different layers
0066   bool preliminaryCheck(const SeedingHitSet& shs, const edm::EventSetup& es);
0067   //We can check if the seed  points in a region covered by scintillators. To be used only in noB case
0068   //because it uses StraightLinePropagation
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   //edm::ESHandle<SeedCleaner> theCleaner;
0085   //OrderedHitsGenerator*  hitsGeneratorOutIn;
0086   //OrderedHitsGenerator*  hitsGeneratorInOut;
0087   //PropagationDirection inOutPropagationDirection;
0088   //PropagationDirection outInPropagationDirection;
0089   //GenericPairOrTripletGenerator* hitsGeneratorOutIn;
0090   //GenericPairOrTripletGenerator* hitsGeneratorInOut;
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   //TrajectoryStateTransform theTransformer;
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