00001 #ifndef _HICDIMUONSEEDGENERATOR_H_
00002 #define _HICDIMUONSEEDGENERATOR_H_
00003
00004
00005
00006
00007
00008
00009
00010 #include "FWCore/Framework/interface/EventSetup.h"
00011 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00012 #include "FWCore/Framework/interface/ESHandle.h"
00013 #include "FWCore/ParameterSet/interface/InputTag.h"
00014 #include "DataFormats/Common/interface/EDProduct.h"
00015 #include "FWCore/Framework/interface/EDProducer.h"
00016 #include "FWCore/Framework/interface/Event.h"
00017
00018
00019 #include "MagneticField/Engine/interface/MagneticField.h"
00020 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
00021
00022
00023 #include "TrackingTools/MaterialEffects/interface/PropagatorWithMaterial.h"
00024 #include "TrackingTools/DetLayers/interface/BarrelDetLayer.h"
00025 #include "TrackingTools/DetLayers/interface/ForwardDetLayer.h"
00026 #include "TrackingTools/DetLayers/interface/DetLayer.h"
00027 #include "TrackingTools/PatternTools/interface/TrajectoryMeasurement.h"
00028 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
00029 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00030 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHitBuilder.h"
00031 #include "TrackingTools/MeasurementDet/interface/LayerMeasurements.h"
00032
00033
00034 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
00035 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
00036 #include "Geometry/TrackerGeometryBuilder/interface/TrackerLayerIdAccessor.h"
00037 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
00038
00039
00040 #include "RecoTracker/TkDetLayers/interface/GeometricSearchTracker.h"
00041 #include "RecoTracker/TkHitPairs/interface/LayerWithHits.h"
00042 #include "RecoTracker/MeasurementDet/interface/MeasurementTracker.h"
00043 #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
00044
00045
00046 #include "RecoHIMuon/HiMuSeed/interface/HICSeedMeasurementEstimator.h"
00047 #include "RecoHIMuon/HiMuSeed/interface/HICConst.h"
00048 #include "RecoHIMuon/HiMuSeed/interface/DiMuonTrajectorySeed.h"
00049
00050
00051 #include "RecoHIMuon/HiMuSeed/interface/HICConst.h"
00052
00053
00054 #include "CLHEP/Units/PhysicalConstants.h"
00055
00056
00057
00058
00059 #include <cmath>
00060 #include <stdlib.h>
00061 #include <string>
00062 #include <iostream>
00063 #include <vector>
00064
00065 #include <map>
00066 #include <vector>
00067
00068 namespace cms
00069 {
00070 class DiMuonSeedGeneratorHIC {
00071
00072 public:
00073 typedef std::vector<DiMuonTrajectorySeed> SeedContainer;
00074 typedef SeedContainer::iterator SeedIterator;
00075
00076 DiMuonSeedGeneratorHIC(edm::InputTag,
00077 const MagneticField*,
00078 const GeometricSearchTracker*,
00079 const HICConst*,
00080 const std::string,
00081 int aMult);
00082
00083 virtual std::map<DetLayer*,SeedContainer> produce(const edm::Event& e, const edm::EventSetup& c,
00084 FreeTrajectoryState&,
00085 TrajectoryStateOnSurface&,
00086 FreeTrajectoryState&,
00087 const TransientTrackingRecHitBuilder* RecHitBuilder,
00088 const MeasurementTracker* measurementTracker,
00089 std::vector<DetLayer*>*
00090 );
00091
00092 virtual ~DiMuonSeedGeneratorHIC(){}
00093
00094
00095
00096 private:
00097 FreeTrajectoryState theFtsTracker;
00098 FreeTrajectoryState theFtsMuon;
00099 const HICConst* theHICConst;
00100 Propagator* thePropagator;
00101 std::string builderName;
00102 int theLowMult;
00103
00104 std::vector<BarrelDetLayer*> bl;
00105 std::vector<ForwardDetLayer*> fpos;
00106 std::vector<ForwardDetLayer*> fneg;
00107 std::vector<const DetLayer*> theDetLayer;
00108
00109 std::vector<LayerWithHits*> allLayersWithHits;
00110 bool isFirstCall;
00111 TrackerLayerIdAccessor acc;
00112
00113 std::pair<TrajectoryMeasurement,bool> barrelUpdateSeed(
00114 const FreeTrajectoryState&,
00115 const TrajectoryMeasurement&
00116 ) const;
00117 std::pair<TrajectoryMeasurement,bool> forwardUpdateSeed(
00118 const FreeTrajectoryState&,
00119 const TrajectoryMeasurement&
00120 ) const;
00121
00122 edm::InputTag rphirecHitsTag;
00123 const TransientTrackingRecHitBuilder * TTRHbuilder;
00124 const MagneticField* magfield;
00125 const GeometricSearchTracker* theTracker;
00126 const MeasurementTracker* theMeasurementTracker;
00127 const LayerMeasurements* theLayerMeasurements;
00128
00129 };
00130 }
00131 #endif
00132