CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/RecoMuon/MuonIdentification/interface/MuonShowerInformationFiller.h

Go to the documentation of this file.
00001 
00014 #ifndef MuonIdentification_MuonShowerInformationFiller_h
00015 #define MuonIdentification_MuonShowerInformationFiller_h
00016 
00017 #include <vector>
00018 
00019 #include "FWCore/Framework/interface/Frameworkfwd.h"
00020 #include "DataFormats/Common/interface/ValueMap.h"
00021 
00022 #include "FWCore/Framework/interface/ESHandle.h"
00023 #include "FWCore/Utilities/interface/InputTag.h"
00024 #include "DataFormats/Common/interface/Handle.h"
00025 #include "DataFormats/Math/interface/deltaPhi.h"
00026 #include "DataFormats/Math/interface/deltaR.h"
00027 #include "DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h"
00028 #include "DataFormats/DTRecHit/interface/DTRecHitCollection.h"
00029 #include "DataFormats/DTRecHit/interface/DTRecSegment4DCollection.h"
00030 #include "DataFormats/CSCRecHit/interface/CSCSegmentCollection.h"
00031 #include "RecoMuon/TransientTrackingRecHit/interface/MuonTransientTrackingRecHit.h"
00032 #include "DataFormats/MuonReco/interface/MuonFwd.h"
00033 #include "DataFormats/MuonReco/interface/Muon.h"
00034 #include "DataFormats/TrackReco/interface/Track.h"
00035 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00036 
00037 #include "Geometry/DTGeometry/interface/DTGeometry.h"
00038 #include "Geometry/CSCGeometry/interface/CSCGeometry.h"
00039 
00040 #include "DataFormats/MuonReco/interface/MuonShower.h"
00041 
00042 namespace edm {class ParameterSet; class Event; class EventSetup;}
00043 namespace reco {class TransientTrack; class MuonShower;}
00044 
00045 class MuonServiceProxy;
00046 class Trajectory;
00047 class Cylinder;
00048 class Disk;
00049 class BarrelDetLayer;
00050 class ForwardDetLayer;
00051 class TransientTrackingRecHitBuilder;
00052 class GeometricSearchTracker;
00053 class GlobalTrackingGeometry;
00054 class MuonDetLayerGeometry;
00055 
00056 
00057 class MuonShowerInformationFiller {
00058 
00059   public:
00060 
00061     typedef TransientTrackingRecHit::ConstRecHitContainer ConstRecHitContainer;
00062     typedef MuonTransientTrackingRecHit::MuonRecHitContainer MuonRecHitContainer;
00063     typedef MuonTransientTrackingRecHit::ConstMuonRecHitPointer ConstMuonRecHitPointer;
00064         
00065   public:
00066 
00068     MuonShowerInformationFiller() {};
00069     MuonShowerInformationFiller(const edm::ParameterSet&);
00070 
00072     ~MuonShowerInformationFiller();
00073    
00075     reco::MuonShower fillShowerInformation( const reco::Muon& muon, const edm::Event&, const edm::EventSetup&);
00076 
00078     virtual void setEvent(const edm::Event&);
00079 
00081     void setServices(const edm::EventSetup&);
00082 
00083     //set the data members
00084     void fillHitsByStation(const reco::Muon&);
00085 
00086   protected:
00087 
00088     const MuonServiceProxy* getService() const { return theService; }
00089 
00090   private:
00091 
00092     std::vector<float> theStationShowerDeltaR;
00093     std::vector<float> theStationShowerTSize;
00094     std::vector<int>   theAllStationHits;
00095     std::vector<int>   theCorrelatedStationHits;
00096 
00097     MuonServiceProxy* theService;
00098 
00099     GlobalPoint crossingPoint(const GlobalPoint&, const GlobalPoint&, const BarrelDetLayer* ) const;
00100     GlobalPoint crossingPoint(const GlobalPoint&, const GlobalPoint&, const Cylinder& ) const;
00101     GlobalPoint crossingPoint(const GlobalPoint&, const GlobalPoint&, const ForwardDetLayer* ) const;
00102     GlobalPoint crossingPoint(const GlobalPoint&, const GlobalPoint&, const Disk& ) const;
00103     std::vector<const GeomDet*> dtPositionToDets(const GlobalPoint&) const;
00104     std::vector<const GeomDet*> cscPositionToDets(const GlobalPoint&) const;
00105     MuonRecHitContainer findPerpCluster(MuonRecHitContainer& muonRecHits) const;
00106     MuonRecHitContainer findPhiCluster(MuonRecHitContainer&, const GlobalPoint&) const;
00107     TransientTrackingRecHit::ConstRecHitContainer findThetaCluster(TransientTrackingRecHit::ConstRecHitContainer&, const GlobalPoint&) const;
00108     TransientTrackingRecHit::ConstRecHitContainer hitsFromSegments(const GeomDet*,edm::Handle<DTRecSegment4DCollection>, edm::Handle<CSCSegmentCollection>) const;
00109     std::vector<const GeomDet*> getCompatibleDets(const reco::Track&) const;
00110 
00111    struct LessMag {
00112        LessMag(const GlobalPoint& point) : thePoint(point) {}
00113        bool operator()(const GlobalPoint& lhs,
00114                        const GlobalPoint& rhs) const{ 
00115             return (lhs - thePoint).mag() < (rhs -thePoint).mag();
00116         }
00117         bool operator()(const MuonTransientTrackingRecHit::MuonRecHitPointer& lhs,
00118                        const MuonTransientTrackingRecHit::MuonRecHitPointer& rhs) const{
00119            return (lhs->globalPosition() - thePoint).mag() < (rhs->globalPosition() -thePoint).mag();
00120         }
00121       GlobalPoint thePoint;
00122    };
00123 
00124    struct LessDPhi {
00125         LessDPhi(const GlobalPoint& point) : thePoint(point) {}
00126         bool operator()(const MuonTransientTrackingRecHit::MuonRecHitPointer& lhs,
00127                        const MuonTransientTrackingRecHit::MuonRecHitPointer& rhs) const{
00128            return deltaPhi(lhs->globalPosition().phi(), thePoint.phi()) < deltaPhi(rhs->globalPosition().phi(), thePoint.phi());
00129         }
00130       GlobalPoint thePoint;
00131     };
00132 
00133     struct AbsLessDPhi {
00134         AbsLessDPhi(const GlobalPoint& point) : thePoint(point) {}
00135         bool operator()(const MuonTransientTrackingRecHit::MuonRecHitPointer& lhs,
00136                        const MuonTransientTrackingRecHit::MuonRecHitPointer& rhs) const{
00137            return ( fabs(deltaPhi(lhs->globalPosition().phi(), thePoint.phi())) < fabs(deltaPhi(rhs->globalPosition().phi(), thePoint.phi())) );
00138         }
00139       GlobalPoint thePoint;
00140     };
00141 
00142     struct AbsLessDTheta {
00143         AbsLessDTheta(const GlobalPoint& point) : thePoint(point) {}
00144         bool operator()(const TransientTrackingRecHit::ConstRecHitPointer& lhs,
00145                        const TransientTrackingRecHit::ConstRecHitPointer& rhs) const{
00146            return ( fabs(lhs->globalPosition().phi() - thePoint.phi()) < fabs(rhs->globalPosition().phi() - thePoint.phi()) );
00147         }
00148       GlobalPoint thePoint;
00149     };
00150 
00151     struct LessPhi {
00152         LessPhi() : thePoint(0,0,0) {}
00153         bool operator()(const MuonTransientTrackingRecHit::MuonRecHitPointer& lhs,
00154                        const MuonTransientTrackingRecHit::MuonRecHitPointer& rhs) const{
00155            return (lhs->globalPosition().phi() < rhs->globalPosition().phi());
00156         }
00157         GlobalPoint thePoint;
00158     };
00159 
00160     struct LessPerp {
00161         LessPerp() : thePoint(0,0,0) {}
00162         bool operator()(const MuonTransientTrackingRecHit::MuonRecHitPointer& lhs,
00163                        const MuonTransientTrackingRecHit::MuonRecHitPointer& rhs) const{
00164            return (lhs->globalPosition().perp() < rhs->globalPosition().perp());
00165         }
00166       GlobalPoint thePoint;
00167     };
00168 
00169     struct LessAbsMag {
00170         LessAbsMag() : thePoint(0,0,0) {}
00171         bool operator()(const MuonTransientTrackingRecHit::MuonRecHitPointer& lhs,
00172                        const MuonTransientTrackingRecHit::MuonRecHitPointer& rhs) const{
00173            return (lhs->globalPosition().mag() < rhs->globalPosition().mag());
00174         }
00175       GlobalPoint thePoint;
00176     };
00177 
00178     std::string category_;
00179 
00180     unsigned long long theCacheId_TRH;
00181     unsigned long long theCacheId_MT;
00182 
00183     std::string theTrackerRecHitBuilderName;
00184     edm::ESHandle<TransientTrackingRecHitBuilder> theTrackerRecHitBuilder;
00185 
00186     std::string theMuonRecHitBuilderName;
00187     edm::ESHandle<TransientTrackingRecHitBuilder> theMuonRecHitBuilder;
00188 
00189     edm::InputTag theDTRecHitLabel;
00190     edm::InputTag theCSCRecHitLabel;
00191     edm::InputTag theCSCSegmentsLabel;
00192     edm::InputTag theDT4DRecSegmentLabel;
00193     edm::Handle<DTRecHitCollection> theDTRecHits;
00194     edm::Handle<CSCRecHit2DCollection> theCSCRecHits;
00195     edm::Handle<CSCSegmentCollection> theCSCSegments;
00196     edm::Handle<DTRecSegment4DCollection> theDT4DRecSegments;
00197 
00198     // geometry
00199     edm::ESHandle<GeometricSearchTracker> theTracker;
00200     edm::ESHandle<GlobalTrackingGeometry> theTrackingGeometry;
00201     edm::ESHandle<MagneticField> theField;
00202     edm::ESHandle<CSCGeometry> theCSCGeometry;
00203     edm::ESHandle<DTGeometry> theDTGeometry;
00204 
00205 };
00206 #endif