CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch9/src/Calibration/Tools/interface/TrackAssociator.h

Go to the documentation of this file.
00001 #ifndef HTrackAssociator_HTrackAssociator_h
00002 #define HTrackAssociator_HTrackAssociator_h 1
00003 
00004 // -*- C++ -*-
00005 //
00006 // Package:    HTrackAssociator
00007 // Class:      HTrackAssociator
00008 // 
00009 /*
00010 
00011  Description: <one line class summary>
00012 
00013  Implementation:
00014      <Notes on implementation>
00015 */
00016 //
00017 // Original Author:  Dmytro Kovalskyi
00018 // Modified for ECAL+HCAL by:  Michal Szleper
00019 //
00020 
00021 #include "FWCore/Framework/interface/Event.h"
00022 #include "FWCore/Framework/interface/EventSetup.h"
00023 #include "DataFormats/Common/interface/Handle.h"
00024 #include "FWCore/Framework/interface/ESHandle.h"
00025 #include "DataFormats/Common/interface/OrphanHandle.h"
00026 
00027 #include "DataFormats/TrackReco/interface/TrackBase.h"
00028 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
00029 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
00030 
00031 #include "Calibration/Tools/interface/CaloDetIdAssociator.h"
00032 #include "Calibration/Tools/interface/EcalDetIdAssociator.h"
00033 #include "Calibration/Tools/interface/HcalDetIdAssociator.h"
00034 #include "Calibration/Tools/interface/TrackDetMatchInfo.h"
00035 
00036 #include "DataFormats/CaloTowers/interface/CaloTower.h"
00037 #include "DataFormats/EcalRecHit/interface/EcalRecHit.h"
00038 #include "DataFormats/HcalRecHit/interface/HBHERecHit.h"
00039 #include "DataFormats/TrackReco/interface/Track.h"
00040 #include "DataFormats/Math/interface/Vector3D.h"
00041 #include "DataFormats/Math/interface/Point3D.h"
00042 
00043 #include "SimDataFormats/Track/interface/SimTrack.h"
00044 #include "SimDataFormats/Vertex/interface/SimVertex.h"
00045 
00046 
00047 class HTrackAssociator {
00048  public:
00049    HTrackAssociator();
00050    ~HTrackAssociator();
00051    
00052    class HAssociatorParameters {
00053     public:
00054       HAssociatorParameters() {
00055          // default parameters
00056          // define match cones, dR=sqrt(dEta^2+dPhi^2)
00057          dREcal = 0.03;
00058          dRHcal = 0.07;
00059          dRCalo = 0.07;
00060          
00061          idREcal = 1;
00062          idRHcal = 4;
00063          idRCalo = 4;
00064          
00065          // match all sub-detectors by default
00066          useEcal = true;
00067          useHcal = true;
00068          useCalo = true;
00069       }
00070       double dREcal;
00071       double dRHcal;
00072       double dRCalo;
00073       int idREcal;
00074       int idRHcal;
00075       int idRCalo;
00076       
00077       bool useEcal;
00078       bool useHcal;
00079       bool useCalo;
00080    };
00081    
00082    
00092    HTrackDetMatchInfo            associate( const edm::Event&,
00093                                            const edm::EventSetup&,
00094                                            const FreeTrajectoryState&,
00095                                            const HAssociatorParameters& );
00096 
00099    std::vector<EcalRecHit>  associateEcal( const edm::Event&,
00100                                            const edm::EventSetup&,
00101                                            const FreeTrajectoryState&,
00102                                            const double dR = -1 );
00103    
00106    double                   getEcalEnergy( const edm::Event&,
00107                                            const edm::EventSetup&,
00108                                            const FreeTrajectoryState&,
00109                                            const double dR = -1 );
00110    
00113    std::vector<CaloTower>   associateHcal( const edm::Event&,
00114                                            const edm::EventSetup&,
00115                                            const FreeTrajectoryState&,
00116                                            const double dR = -1 );
00117 
00120    double                   getHcalEnergy( const edm::Event&,
00121                                            const edm::EventSetup&,
00122                                            const FreeTrajectoryState&,
00123                                            const double dR = -1 );
00125    void setPropagator( Propagator* );
00126    
00128    void useDefaultPropagator();
00129    
00131    void addDataLabels( const std::string className,
00132                        const std::string moduleLabel,
00133                        const std::string productInstanceLabel = "");
00134    
00136    FreeTrajectoryState getFreeTrajectoryState( const edm::EventSetup&, 
00137                                                const reco::Track& );
00138    FreeTrajectoryState getFreeTrajectoryState( const edm::EventSetup&, 
00139                                                const SimTrack&, 
00140                                                const SimVertex& );
00141    
00142  private:
00143    void       fillEcal( const edm::Event&,
00144                         const edm::EventSetup&,
00145                         HTrackDetMatchInfo&, 
00146                         const FreeTrajectoryState&,
00147                         const int,
00148                         const double);
00149 
00150    void       fillHcal( const edm::Event&,
00151                         const edm::EventSetup&,
00152                         HTrackDetMatchInfo&,
00153                         const FreeTrajectoryState&,
00154                         const int,
00155                         const double);
00156 
00157    void fillHcalTowers( const edm::Event&,
00158                         const edm::EventSetup&,
00159                         HTrackDetMatchInfo&, 
00160                         const FreeTrajectoryState&,
00161                         const int,
00162                         const double);
00163    
00164    void fillCaloTowers( const edm::Event&,
00165                         const edm::EventSetup&,
00166                         HTrackDetMatchInfo&, 
00167                         const FreeTrajectoryState&,
00168                         const int,
00169                         const double);
00170    
00171    void           init( const edm::EventSetup&);
00172    
00173    math::XYZPoint getPoint( const GlobalPoint& point)
00174      {
00175         return math::XYZPoint(point.x(),point.y(),point.z());
00176      }
00177    
00178    math::XYZPoint getPoint( const LocalPoint& point)
00179      {
00180         return math::XYZPoint(point.x(),point.y(),point.z());
00181      }
00182    
00183    math::XYZVector getVector( const GlobalVector& vec)
00184      {
00185         return math::XYZVector(vec.x(),vec.y(),vec.z());
00186      }
00187    
00188    math::XYZVector getVector( const LocalVector& vec)
00189      {
00190         return math::XYZVector(vec.x(),vec.y(),vec.z());
00191      }
00192    
00193    Propagator* ivProp_;
00194    Propagator* defProp_;
00195    bool useDefaultPropagator_;
00196    int debug_;
00197    std::vector<std::vector<std::set<uint32_t> > >* caloTowerMap_;
00198    
00199    HEcalDetIdAssociator ecalDetIdAssociator_;
00200    HHcalDetIdAssociator hcalDetIdAssociator_;
00201    HCaloDetIdAssociator caloDetIdAssociator_;
00202    
00203    edm::ESHandle<CaloGeometry> theCaloGeometry_;
00204    
00207    std::vector<std::string> EBRecHitCollectionLabels;
00208    std::vector<std::string> EERecHitCollectionLabels;
00210    std::vector<std::string> HBHERecHitCollectionLabels;
00212    std::vector<std::string> CaloTowerCollectionLabels;
00213 };
00214 #endif