#ifndef ELECTROWEAKL3FILTER_HH #define ELECTROWEAKL3FILTER_HH //---------------------- // Base Class Headers -- //---------------------- #ifdef CDF #include "BaBar/Cdf.hh" #endif #include "Framework/APPFilterModule.hh" #include "Framework/APPMenu.hh" #include "Framework/AbsParmBool.hh" #include "Framework/AbsParmGeneral.hh" #include "TrackingObjects/Storable/CdfTrackColl.hh" #include //------------------------------------ // Collaborating Class Declarations -- //------------------------------------ class CdfEmObject; class CdfTrack; class HepLorentzVector; // --------------------- // -- Class Interface -- // --------------------- class ElectroweakL3Filter : public AppFilterModule { public: // Constructors ElectroweakL3Filter( const char* const theName = "ElectroweakL3Filter", const char* const theDescription = "Electroweak L3 Filter Module" ); // Destructor virtual ~ElectroweakL3Filter( ); // Operations virtual AppResult beginJob( AbsEvent* aJob ); virtual AppResult beginRun( AbsEvent* aRun ); virtual AppResult event( AbsEvent* anEvent ); virtual AppResult other( AbsEvent* anEvent ); virtual AppResult endRun( AbsEvent* aRun ); virtual AppResult endJob( AbsEvent* aJob ); virtual AppResult abortJob( AbsEvent* aJob ); virtual AppModule* clone(const char* cloneName); private: // Filter routines : void applyTrackCuts(); void applyMissingEtCuts(); void applyElectronCuts(); void applyMuonCuts(); void applyRegionalTrackingCuts(); // Utility routines used by the filters : bool trackPassesCuts(CdfTrack_clnk trackIter, double trackPtCut, double trackEtaCut); bool electronPassesCuts(const CdfEmObject& emObject, double electronPtCut, double electronEtaCut, bool requireMatchingTrack, double matchingTrackPtCut); bool muonPassesCuts(HepLorentzVector& muon, double muonPtCut, double muonEtaCut); // Logicals for the different selections that can be made : bool _passTrackCuts; bool _passMissingEtCuts; bool _passElectronCuts; bool _passMuonCuts; bool _passRegionalTrackingCuts; // ------------------------------------------------------------------- // Track menu : // ------------------------------------------------------------------- APPMenu _trackMenu; AbsParmBool _requireTracks; AbsParmGeneral _nTracks; AbsParmGeneral _tightTrackPtCut; AbsParmGeneral _tightTrackEtaCut; AbsParmGeneral _looseTrackPtCut; AbsParmGeneral _looseTrackEtaCut; // ------------------------------------------------------------------- // Missing-Et menu : // ------------------------------------------------------------------- APPMenu _missingEtMenu; AbsParmBool _requireMissingEt; AbsParmGeneral _missingEtCut; // ------------------------------------------------------------------- // Electron menu : // ------------------------------------------------------------------- APPMenu _electronMenu; AbsParmBool _requireElectrons; AbsParmGeneral _nElectrons; AbsParmGeneral _tightElectronPtCut; AbsParmGeneral _tightElectronEtaCut; AbsParmBool _tightElectronRequireTrackMatch; AbsParmGeneral _tightElectronTrackPtCut; AbsParmGeneral _looseElectronPtCut; AbsParmGeneral _looseElectronEtaCut; AbsParmBool _looseElectronRequireTrackMatch; AbsParmGeneral _looseElectronTrackPtCut; // ------------------------------------------------------------------- // Muon menu : // ------------------------------------------------------------------- APPMenu _muonMenu; AbsParmBool _requireMuons; AbsParmGeneral _nMuons; AbsParmGeneral _tightMuonPtCut; AbsParmGeneral _tightMuonEtaCut; AbsParmGeneral _looseMuonPtCut; AbsParmGeneral _looseMuonEtaCut; // ------------------------------------------------------------------- // Regional Tracking menu : // ------------------------------------------------------------------- APPMenu _regionalTrackingMenu; AbsParmBool _requireRegionalTracking; AbsParmGeneral _pathName; AbsParmGeneral _regionalEmClusterEtCut; AbsParmGeneral _regionalTrackPtCut; AbsParmGeneral _regionalTrackPlugClusterDCA_Cut; }; #endif // ELECTROWEAKL3FILTER