#ifndef StntupleFilterModule_hh #define StntupleFilterModule_hh //----------------------------------------------------------------------------- // Data filter module based on STNTUPLE classes //----------------------------------------------------------------------------- #ifndef __CINT__ # include "Framework/AbsParmBool.hh" # include "Framework/AbsParmDouble.hh" # include "Framework/AbsParmGeneral.hh" # include "Framework/AbsParmEnum.hh" # include #else class AbsEvent; class AppResult; class AppModule; class AppFilterModule; class AbsParmBool; class AbsParmDouble; class AbsParmGeneral; class AbsParmGeneral; class AbsParmList; #endif #include "TClonesArray.h" #include class TStnEvent; class TCalDataBlock; class TClcDataBlock; class TCmuDataBlock; class TCmpDataBlock; class TCmxDataBlock; class TFwdDetDataBlock; class TStnElectronBlock; class TStnJetBlock; class TStnMetBlock; class TStnMuonBlock; class TStnTauBlock; class TStnTrackBlock; class TStnTriggerBlock; class TGenpBlock; class TObspBlock; class StntupleFilter; class StntupleFilterModule : public StntupleModule { public: struct ParticleCuts_t { int fPdgCode; int fN; float fPtMin; float fEtaMin; float fEtaMax; }; protected: // filtering mode: AND or OR AbsParmGeneral _filteringMode; AbsParmGeneral fProcessName; AbsParmGeneral fDebug; AbsParmGeneral fBeamHistoryCode; TStnEvent* fEvent; // list of vertices, for which Met // should be calculated and tested // for a given event, owned by fEvent TClonesArray* fListOfMetVertices; // data blocks TCalDataBlock* _calDataBlock; TClcDataBlock* _clcDataBlock; TCmuDataBlock* _cmuDataBlock; TCmpDataBlock* _cmpDataBlock; TCmxDataBlock* _cmxDataBlock; TFwdDetDataBlock* _fwddetDataBlock; TStnElectronBlock* _eleBlock; TStnJetBlock* _jetBlock; TStnMuonBlock* _muoBlock; TStnMetBlock* _metBlock; TStnTauBlock* _tauBlock; TStnTrackBlock* _trkBlock; TStnTriggerBlock* _trgBlock; TGenpBlock* _genpBlock; TObspBlock* _obspBlock; // jet collection to be processed // (default: JetCluModule-cone0.7) AbsParmGeneral fJetCollName; // muon collection to to be processed // (default: none) AbsParmGeneral fMuonCollName; // track collection to be processed // (default: COT_Global_Tracking) AbsParmGeneral fTrackCollName; // vertex collection to be processed AbsParmGeneral fVertexCollName; // electron collection to be processed AbsParmGeneral fElectronCollName; // description of the MET object to // cut on AbsParmGeneral fMetName; // CLC cuts AbsParmDouble _clcZ0Cut; AbsParmDouble _clcTMin; AbsParmDouble _clcTMax; AbsParmDouble _clcAdcThreshold; // CMU cuts : select events with // N(hits) - either D- or E- - // greater than certain threshold AbsParmGeneral _cmuNDHitsMin; AbsParmGeneral _cmuNEHitsMin; AbsParmBool _cmuRequireTrack; AbsParmDouble _cmuTrackPtMin; AbsParmDouble _cmuDeltaPhiMax; // CMP cuts AbsParmGeneral _cmpNCspHitsMin; // Jet cuts : select nJets with // Et > _etMin such that their // _etaMin <= eta < _etaMax AbsParmDouble _jetEtaMin; AbsParmDouble _jetEtaMax; AbsParmDouble _jetEtMin; AbsParmGeneral _jetNMin; // monojet cuts : select events with // 1 jet with Et > Et1 and // etaMin <= eta < etaMax // and with no other jet et > Et2 AbsParmDouble _monojetEtaMin; AbsParmDouble _monojetEtaMax; AbsParmDouble _monojetEt1; AbsParmDouble _monojetEt2; AbsParmGeneral _monojetNTracks; AbsParmDouble _monojetTrackPt; AbsParmDouble _monojetCone; AbsParmDouble _monojetDPhi; //----------------------------------------------------------------------------- // MET cuts : MET > _metMin // _metMode = 0: use MET calculated by L3/Production (should be the same, BTW) // at Z=0 // = 1: use fListOfMetVertices, recalculate MET for each vertex // and apply cut to all of them. If for at least one of the // tested vertices the cut is passed, accept the event //----------------------------------------------------------------------------- AbsParmDouble _metMin; AbsParmGeneral _metMode; //----------------------------------------------------------------------------- // Tau cuts: select events with N(tau candidates) with Pt>tauPtMin, // finally require N(tau candidates) > tauNMin //----------------------------------------------------------------------------- AbsParmDouble _tauPtMin; AbsParmDouble _tauPtMax; AbsParmDouble _tauEmfrMin; AbsParmDouble _tauEmfrMax; AbsParmGeneral _tauNMin; // trigger cuts: first goes L1: can set // L1 bits, events which have them // fired will be passed on AbsParmList _L1Bits; AbsParmGeneral _MyronBucket; AbsParmList _L3Paths; // min number of GENP particles passing // the cuts (effective OR!) AbsParmGeneral _genpNMin; // min number of OBSP particles passing // the cuts (effective OR!) AbsParmGeneral _obspNMin; TObjArray* fListOfFilters; // list of filters #ifndef __CINT__ std::vector _genpCuts; std::vector _obspCuts; #endif class Command : public APPCommand { public: Command(); virtual ~Command(); Command( const char* const name, AppModule* module); virtual int handle(int argc, char* argv[]); virtual void show() const; virtual bool isShowable() const; virtual std::string description () const; }; friend class Command; //----------------------------------------------------------------------------- // methods //----------------------------------------------------------------------------- public: // ****** constructors and destructor StntupleFilterModule(const char* name = "StntupleFilter", const char* desc = "STNTUPLE event filter"); virtual AppModule* clone(const char* cloneName); virtual ~StntupleFilterModule( ); // ****** filter routines bool CalFilter (AbsEvent* event); bool ClcFilter (AbsEvent* event); bool CmuFilter (AbsEvent* event); bool CmpFilter (AbsEvent* event); bool CmxFilter (AbsEvent* event); bool FwdDetFilter (AbsEvent* event); bool JetFilter (AbsEvent* event); bool MonojetFilter(AbsEvent* event); bool MetFilter (AbsEvent* event); bool TauFilter (AbsEvent* event); bool L1Filter (AbsEvent* event); bool L3Filter (AbsEvent* event); bool GenpFilter (AbsEvent* event); bool ObspFilter (AbsEvent* event); TObjArray* GetListOfFilters() { return fListOfFilters; } int NFilters() { return fListOfFilters->GetEntriesFast(); } StntupleFilter* Filter(Int_t I) { return (StntupleFilter*) fListOfFilters->UncheckedAt(I); } StntupleFilter* Filter(const char* Name) { return (StntupleFilter*) fListOfFilters->FindObject(Name); } // ****** overloaded methods of // AppModule virtual AppResult beginJob( AbsEvent* aJob ); virtual AppResult beginRun( AbsEvent* aRun ); virtual AppResult event( AbsEvent* anEvent ); virtual AppResult endRun( AbsEvent* aRun ); virtual AppResult endJob( AbsEvent* aJob ); virtual AppResult abortJob( AbsEvent* aJob ); virtual APPCommand* NewCommand(const char* Name); ClassDef(StntupleFilterModule,0) }; // ****** wrappers around filters inline bool StntupleCalFilter (TModule* Module, AbsEvent* event) { return ((StntupleFilterModule*) Module)->CalFilter(event); } inline bool StntupleClcFilter (TModule* Module, AbsEvent* event) { return ((StntupleFilterModule*) Module)->ClcFilter(event); } inline bool StntupleCmuFilter (TModule* Module, AbsEvent* event) { return ((StntupleFilterModule*) Module)->CmuFilter(event); } inline bool StntupleCmpFilter (TModule* Module, AbsEvent* event) { return ((StntupleFilterModule*) Module)->CmpFilter(event); } inline bool StntupleCmxFilter (TModule* Module, AbsEvent* event) { return ((StntupleFilterModule*) Module)->CmxFilter(event); } inline bool StntupleFwdDetFilter (TModule* Module, AbsEvent* event) { return ((StntupleFilterModule*) Module)->FwdDetFilter(event); } inline bool StntupleJetFilter (TModule* Module, AbsEvent* event) { return ((StntupleFilterModule*) Module)->JetFilter(event); } inline bool StntupleMonojetFilter (TModule* Module, AbsEvent* event) { return ((StntupleFilterModule*) Module)->MonojetFilter(event); } inline bool StntupleMetFilter (TModule* Module, AbsEvent* event) { return ((StntupleFilterModule*) Module)->MetFilter(event); } inline bool StntupleTauFilter (TModule* Module, AbsEvent* event) { return ((StntupleFilterModule*) Module)->TauFilter(event); } inline bool StntupleL1Filter (TModule* Module, AbsEvent* event) { return ((StntupleFilterModule*) Module)->L1Filter(event); } inline bool StntupleL3Filter (TModule* Module, AbsEvent* event) { return ((StntupleFilterModule*) Module)->L3Filter(event); } inline bool StntupleGenpFilter (TModule* Module, AbsEvent* event) { return ((StntupleFilterModule*) Module)->GenpFilter(event); } inline bool StntupleObspFilter (TModule* Module, AbsEvent* event) { return ((StntupleFilterModule*) Module)->ObspFilter(event); } #endif