00001 #include "Prescaler.h"
00002
00003 #include "GaudiKernel/MsgStream.h"
00004 #include "GaudiKernel/AlgFactory.h"
00005
00006 static const AlgFactory<Prescaler> Factory;
00007 const IAlgFactory& PrescalerFactory = Factory;
00008
00009 Prescaler::Prescaler(const std::string& name, ISvcLocator* pSvcLocator) :
00010 Algorithm(name, pSvcLocator) ,
00011 m_pass( 0 ),
00012 m_seen( 0 )
00013 {
00014 declareProperty( "PercentPass", m_percentPass=100.0 );
00015 m_percentPass.verifier().setBounds( 0.0, 100.0 );
00016 }
00017
00018 Prescaler::~Prescaler( )
00019 {
00020 }
00021
00022 StatusCode
00023 Prescaler::initialize()
00024 {
00025 MsgStream log(msgSvc(), name());
00026 log << MSG::INFO << name( ) << ":Prescaler::Initialize - pass: " << m_percentPass << endreq;
00027 return StatusCode::SUCCESS;
00028 }
00029
00030 StatusCode
00031 Prescaler::execute()
00032 {
00033 MsgStream log(msgSvc(), name());
00034 m_seen++;
00035 float fraction = (100.0 * (float)(m_pass+1)) / (float)m_seen;
00036 if ( fraction > m_percentPass ) {
00037 setFilterPassed( false );
00038 log << MSG::INFO << name( ) << ":Prescaler::execute - filter failed" << endreq;
00039 } else {
00040 log << MSG::INFO << name( ) << ":Prescaler::execute - filter passed" << endreq;
00041 m_pass++;
00042 }
00043 return StatusCode::SUCCESS;
00044 }
00045
00046 StatusCode
00047 Prescaler::finalize()
00048 {
00049 MsgStream log(msgSvc(), name());
00050 log << MSG::INFO << name( ) << ":Prescaler::finalize - total events: "
00051 << m_seen << ", passed events: " << m_pass << endreq;
00052 return StatusCode::SUCCESS;
00053 }