Go to the documentation of this file.00001
00002 #ifndef GsfElectronAlgo_H
00003 #define GsfElectronAlgo_H
00004
00005 class MultiTrajectoryStateTransform ;
00006 class MultiTrajectoryStateMode ;
00007 class EcalClusterFunctionBaseClass ;
00008
00009 #include "RecoEgamma/EgammaElectronAlgos/interface/ElectronHcalHelper.h"
00010
00011 #include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h"
00012 #include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaRecHitIsolation.h"
00013 #include "RecoEgamma/EgammaIsolationAlgos/interface/ElectronTkIsolation.h"
00014
00015 #include "MagneticField/Engine/interface/MagneticField.h"
00016 #include "TrackingTools/MaterialEffects/interface/PropagatorWithMaterial.h"
00017 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00018 #include "TrackingTools/GsfTracking/interface/GsfConstraintAtVertex.h"
00019
00020 #include "RecoTracker/MeasurementDet/interface/MeasurementTracker.h"
00021 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
00022 #include "Geometry/CaloTopology/interface/CaloTopology.h"
00023
00024 #include "FWCore/Framework/interface/ESHandle.h"
00025 #include "FWCore/Framework/interface/EventSetup.h"
00026 #include "FWCore/Framework/interface/Event.h"
00027
00028 #include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h"
00029 #include "DataFormats/EgammaCandidates/interface/GsfElectronCoreFwd.h"
00030 #include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h"
00031 #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
00032 #include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h"
00033 #include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h"
00034 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00035 #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
00036 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
00037 #include "DataFormats/TrackReco/interface/HitPattern.h"
00038 #include "DataFormats/Common/interface/ValueMap.h"
00039 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
00040 #include "DataFormats/Provenance/interface/ParameterSetID.h"
00041
00042 #include "CondFormats/EcalObjects/interface/EcalChannelStatus.h"
00043 #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h"
00044 #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h"
00045
00046 #include <list>
00047 #include <string>
00048
00049 class GsfElectronAlgo {
00050
00051 public:
00052
00053 struct InputTagsConfiguration
00054 {
00055 edm::InputTag previousGsfElectrons ;
00056 edm::InputTag pflowGsfElectronsTag ;
00057 edm::InputTag gsfElectronCores ;
00058 edm::InputTag hcalTowersTag ;
00059 edm::InputTag barrelSuperClusters ;
00060 edm::InputTag endcapSuperClusters ;
00061
00062 edm::InputTag barrelRecHitCollection ;
00063 edm::InputTag endcapRecHitCollection ;
00064 edm::InputTag pfMVA ;
00065 edm::InputTag seedsTag ;
00066 edm::InputTag ctfTracks ;
00067 edm::InputTag beamSpotTag ;
00068 edm::InputTag gsfPfRecTracksTag ;
00069 } ;
00070
00071 struct StrategyConfiguration
00072 {
00073 bool useGsfPfRecTracks ;
00074
00075 bool applyPreselection ;
00076
00077
00078 bool ecalDrivenEcalEnergyFromClassBasedParameterization ;
00079 bool ecalDrivenEcalErrorFromClassBasedParameterization ;
00080 bool pureTrackerDrivenEcalErrorFromSimpleParameterization ;
00081
00082 bool applyAmbResolution ;
00083 unsigned ambSortingStrategy ;
00084 unsigned ambClustersOverlapStrategy ;
00085
00086 bool addPflowElectrons ;
00087
00088 bool ctfTracksCheck ;
00089 } ;
00090
00091 struct CutsConfiguration
00092 {
00093
00094 double minSCEtBarrel ;
00095 double minSCEtEndcaps ;
00096
00097 double maxEOverPBarrel ;
00098 double maxEOverPEndcaps ;
00099
00100 double minEOverPBarrel ;
00101 double minEOverPEndcaps ;
00102
00103
00104 double maxHOverEBarrel ;
00105 double maxHOverEEndcaps ;
00106 double maxHBarrel ;
00107 double maxHEndcaps ;
00108
00109
00110 double maxDeltaEtaBarrel ;
00111 double maxDeltaEtaEndcaps ;
00112
00113
00114
00115 double maxDeltaPhiBarrel ;
00116 double maxDeltaPhiEndcaps ;
00117
00118
00119 double maxSigmaIetaIetaBarrel ;
00120 double maxSigmaIetaIetaEndcaps ;
00121
00122
00123 double maxFbremBarrel ;
00124 double maxFbremEndcaps ;
00125
00126
00127 bool isBarrel ;
00128 bool isEndcaps ;
00129 bool isFiducial ;
00130
00131
00132 double minMVA ;
00133 double minMvaByPassForIsolated ;
00134
00135
00136 double maxTIP ;
00137
00138
00139 bool seedFromTEC ;
00140 } ;
00141
00142
00143 struct EcalRecHitsConfiguration
00144 {
00145 std::vector<int> recHitFlagsToBeExcludedBarrel ;
00146 std::vector<int> recHitFlagsToBeExcludedEndcaps ;
00147 std::vector<int> recHitSeverityToBeExcludedBarrel ;
00148 std::vector<int> recHitSeverityToBeExcludedEndcaps ;
00149
00150 } ;
00151
00152
00153 struct IsolationConfiguration
00154 {
00155 double intRadiusBarrelTk ;
00156 double intRadiusEndcapTk ;
00157 double stripBarrelTk ;
00158 double stripEndcapTk ;
00159 double ptMinTk ;
00160 double maxVtxDistTk ;
00161 double maxDrbTk ;
00162 double intRadiusHcal ;
00163 double etMinHcal ;
00164 double intRadiusEcalBarrel ;
00165 double intRadiusEcalEndcaps ;
00166 double jurassicWidth ;
00167 double etMinBarrel ;
00168 double eMinBarrel ;
00169 double etMinEndcaps ;
00170 double eMinEndcaps ;
00171 bool vetoClustered ;
00172 bool useNumCrystals ;
00173 } ;
00174
00175 GsfElectronAlgo
00176 (
00177 const InputTagsConfiguration &,
00178 const StrategyConfiguration &,
00179 const CutsConfiguration & cutsCfg,
00180 const CutsConfiguration & cutsCfgPflow,
00181 const ElectronHcalHelper::Configuration & hcalCfg,
00182 const ElectronHcalHelper::Configuration & hcalCfgPflow,
00183 const IsolationConfiguration &,
00184 const EcalRecHitsConfiguration &,
00185 EcalClusterFunctionBaseClass * superClusterErrorFunction,
00186 EcalClusterFunctionBaseClass * crackCorrectionFunction
00187 ) ;
00188
00189 ~GsfElectronAlgo() ;
00190
00191
00192 typedef std::list<reco::GsfElectron *> GsfElectronPtrCollection ;
00193
00194
00195 void checkSetup( const edm::EventSetup & ) ;
00196 void beginEvent( edm::Event & ) ;
00197 void displayInternalElectrons( const std::string & title ) const ;
00198 void clonePreviousElectrons() ;
00199 void completeElectrons() ;
00200 void addPflowInfo() ;
00201 void setAmbiguityData( bool ignoreNotPreselected = true ) ;
00202 void removeNotPreselectedElectrons() ;
00203 void removeAmbiguousElectrons() ;
00204 void copyElectrons( reco::GsfElectronCollection & ) ;
00205 void endEvent() ;
00206
00207
00208 private :
00209
00210
00211 struct GeneralData ;
00212 struct EventSetupData ;
00213 struct EventData ;
00214 struct ElectronData ;
00215 GeneralData * generalData_ ;
00216 EventSetupData * eventSetupData_ ;
00217 EventData * eventData_ ;
00218 ElectronData * electronData_ ;
00219
00220 void createElectron() ;
00221
00222 void setCutBasedPreselectionFlag( reco::GsfElectron * ele, const reco::BeamSpot & ) ;
00223 void setPflowPreselectionFlag( reco::GsfElectron * ele ) ;
00224 bool isPreselected( reco::GsfElectron * ele ) ;
00225 void calculateShowerShape( const reco::SuperClusterRef &, bool pflow, reco::GsfElectron::ShowerShape & ) ;
00226
00227
00228 const reco::SuperClusterRef getTrSuperCluster( const reco::GsfTrackRef & trackRef ) ;
00229 } ;
00230
00231 #endif // GsfElectronAlgo_H
00232
00233