00001 /* 00002 * SmartFilterAlg 00003 * 00004 * Intelligent filtering of output data 00005 * 00006 * Created by: dandwyer@caltech.edu, 08/04/2011 00007 * 00008 */ 00009 00010 #ifndef SMARTFILTERALG_H 00011 #define SMARTFILTERALG_H 1 00012 00013 #include "GaudiAlg/GaudiAlgorithm.h" 00014 00015 #include <string> 00016 #include <vector> 00017 #include <list> 00018 00019 class ObjectReg; 00020 namespace Rndm { 00021 class Numbers; 00022 } 00023 00024 class SmartFilterAlg : public GaudiAlgorithm 00025 { 00026 public: 00027 SmartFilterAlg(const std::string& name,ISvcLocator* pSvcLocator); 00028 virtual ~SmartFilterAlg(); 00029 00030 virtual StatusCode initialize(); 00031 virtual StatusCode execute(); 00032 virtual StatusCode finalize(); 00033 00034 private: 00035 StatusCode processParentHeaders(DataObject* dobj); 00036 ObjectReg* findRegistration(DataObject* dobj); 00037 bool isChild(const DataObject* dobj); 00038 00039 private: 00040 00043 bool m_clearAll; 00044 00047 std::string m_keepLocation; 00048 00051 double m_prescale; 00052 00055 bool m_keepAllParents; 00056 00059 std::vector< std::string > m_keepParents; 00060 00063 double m_parentPrescale; 00064 00067 bool m_keepAllChildren; 00068 00071 std::vector< std::string > m_keepChildren; 00072 00075 double m_childrenPrescale; 00076 00080 unsigned int m_maxKeptHistory; 00081 00082 // Handle for Archive event store 00083 IDataProviderSvc* m_archiveSvc; 00084 // Recent filtered events, used to check for children 00085 std::list<DataObject*> m_keptHeaders; 00086 Rndm::Numbers* m_uniform; 00087 }; 00088 00089 #endif // SMARTFILTERALG_H