- /*
- * TbUTPedestalSubtractorAlgorithm.cpp
- *
- * Created on: Oct 14, 2014
- * Author: ADendek
- */
-
- #include "TbUTPedestalSubtractorAlgorithm.h"
- #include "TbUTDataLocations.h"
-
-
- using namespace TbUT;
-
- DECLARE_NAMESPACE_ALGORITHM_FACTORY(TbUT,PedestalSubtractorAlgorithm)
-
-
- PedestalSubtractorAlgorithm::PedestalSubtractorAlgorithm(const std::string& name, ISvcLocator* pSvcLocator):
- GaudiAlgorithm(name, pSvcLocator),
- m_isStandalone(true),
- m_data(),
- m_inputDataLocation(),
- m_outputDataLocation(),
- m_pedestalInputLocation(),
- m_pedestalOutputLocation(),
- m_channelMaskInputLocation(),
- m_followingOption(),
- m_event(0),
- m_treningEventNumber(0),
- m_skippEvent(0),
- m_channelMaskFileValidator(m_channelMaskInputLocation),
- m_channelMaskProvider(m_channelMaskFileValidator),
- m_pedestal(),
- m_pedestalFileValidator(m_pedestalInputLocation),
- m_followingFactory(m_channelMaskProvider, m_pedestal,m_pedestalFileValidator ,m_pedestalInputLocation),
- m_pedestalFollowingPtr(),
- m_pedestalSubtractor(m_pedestal, m_channelMaskProvider)
- {
- declareProperty("SkippEventNumber", m_skippEvent=0);
- declareProperty("InputDataLocation", m_inputDataLocation=TbUT::DataLocations::RawTES);
- declareProperty("OutputDataLocation", m_outputDataLocation=TbUT::DataLocations::PedestalTES);
- declareProperty("FollowingOption",m_followingOption=TbUT::FollowingOptions::Calculator);
- declareProperty("treningEntry",m_treningEventNumber=1024);
- declareProperty("ChannelMaskInputLocation", m_channelMaskInputLocation=TbUT::DataLocations::MaskLocation);
- declareProperty("PedestalInputFile", m_pedestalInputLocation=TbUT::DataLocations::PedestalLocation);
- declareProperty("PedestalOutputFile", m_pedestalOutputLocation=TbUT::DataLocations::PedestalLocation);
- declareProperty("standalone",m_isStandalone=true );
- }
-
- StatusCode PedestalSubtractorAlgorithm::initialize()
- {
- if(StatusCode::SUCCESS !=initializeBase()) return StatusCode::FAILURE;
- if(StatusCode::SUCCESS !=buildFollowing()) return StatusCode::FAILURE;
- if(StatusCode::SUCCESS !=retriveMasksFromFile()) return StatusCode::FAILURE;
-
- info()<<"Initialized successfully!"<<endmsg;
- return StatusCode::SUCCESS;
- }
-
- StatusCode PedestalSubtractorAlgorithm::execute()
- {
- if(StatusCode::SUCCESS != getData()) return StatusCode::FAILURE;
- m_outputDataContainer=new RawDataContainer<>();
-
- if(m_dataContainer->isEmpty()){
- info()<<"ped suba put empty"<<endmsg;
- put(m_outputDataContainer,m_outputDataLocation);
- return StatusCode::SUCCESS;
- }
-
- for(const auto& rawDataIt: m_dataContainer->getData()){
- m_data=new RawData<>(rawDataIt);
- RunPhase l_runPhase=getRunPhase();
- switch (l_runPhase)
- {
- case SKIPP:
- skippEvent();
- case TREANING:
- processTreaning();
- default:
- subtractPedestals();
- }
- delete m_data;
- }
- put(m_outputDataContainer,m_outputDataLocation);
- return StatusCode::SUCCESS;
- }
-
- StatusCode PedestalSubtractorAlgorithm::finalize()
- {
- savePedestalsToFile();
- return GaudiAlgorithm::finalize();
- }
-
- StatusCode PedestalSubtractorAlgorithm::initializeBase()
- {
- return GaudiAlgorithm::initialize();
- }
-
- StatusCode PedestalSubtractorAlgorithm::buildFollowing()
- try{
- m_pedestalFollowingPtr.reset(m_followingFactory.createPedestalFollowing(m_followingOption));
- return StatusCode::SUCCESS;
- }catch(PedestalFollowingFactory::NoSuchState &exception)
- {
- error()<<"Invalid Following Option: "<<exception.what()<<endmsg;
- return StatusCode::FAILURE;
- }
-
-
- StatusCode PedestalSubtractorAlgorithm::retriveMasksFromFile()
- try{
- m_channelMaskProvider.getMaskFromFile(m_channelMaskInputLocation);
- return StatusCode::SUCCESS;
- }catch(ChannelMaskProvider::InputFileError &exception)
- {
- error()<<"Channel Mask File Input Error: "<<m_channelMaskInputLocation<<endmsg;
- return StatusCode::FAILURE;
- }
-
-
- StatusCode PedestalSubtractorAlgorithm::getData()
- {
- m_dataContainer=getIfExists<RawDataContainer<> >(m_inputDataLocation);
- if(!m_dataContainer){
- error()<< " ==> There is no input data: "<< m_inputDataLocation <<endmsg;
- return StatusCode::FAILURE;
- }
- return StatusCode::SUCCESS;
- }
-
- PedestalSubtractorAlgorithm::RunPhase PedestalSubtractorAlgorithm::getRunPhase()
- {
- if(m_event<m_skippEvent)
- return SKIPP;
- else if (m_event<m_skippEvent+m_treningEventNumber)
- return TREANING;
- else
- return SUBTRACTION;
- }
-
-
- void PedestalSubtractorAlgorithm::skippEvent()
- {
- m_event++;
- }
-
- void PedestalSubtractorAlgorithm::processTreaning()
- {
- m_pedestalFollowingPtr->processEvent(m_data);
- m_event++;
- //if( m_followingOption != TbUT::FollowingOptions::Calculator) subtractPedestals();
- }
-
- void PedestalSubtractorAlgorithm::subtractPedestals()
- {
- processAndSaveDataToTES();
- m_event++;
- }
-
- void PedestalSubtractorAlgorithm::processAndSaveDataToTES()
- {
- RawData<> *afterPedestal=new RawData<>();
- m_pedestalSubtractor.processEvent(m_data,&afterPedestal);
- m_outputDataContainer->addData(*afterPedestal);
- }
-
-
- StatusCode PedestalSubtractorAlgorithm::savePedestalsToFile()
- try{
- info()<<"Save Pedestal to File"<<endmsg;
- m_pedestalFollowingPtr->savePedestalToFile(m_pedestalOutputLocation);
- return StatusCode::SUCCESS;
- }
- catch(IPedestalFollowing::PedestalCalculatorError &er)
- {
- error()<<er.what() <<endmsg;
- return StatusCode::FAILURE;
- }