#include "TbUTRawDataReaderAlgorithm.h" #include "GaudiKernel/ToolFactory.h" #include "GaudiKernel/IEventProcessor.h" using namespace TbUT; DECLARE_NAMESPACE_ALGORITHM_FACTORY(TbUT,RawDataReaderAlgorithm) RawDataReaderAlgorithm::RawDataReaderAlgorithm(const std::string& name, ISvcLocator* pSvcLocator): GaudiAlgorithm(name, pSvcLocator), m_isStandalone(true), m_isAType(true), m_eventNumber(0), m_skipEventNumber(0), m_alibavaInputData(), m_outputLocation(), m_sensorNumber(1), m_mean(0), m_sigma(1), m_alibava(), m_fileValidator(m_alibavaInputData), m_rawDataReader(), m_inputDataFactory(m_alibavaInputData, m_alibava,m_fileValidator, m_isAType,m_mean,m_sigma ) { declareProperty("InputDataType", m_inputDataOption=TbUT::InputDataOption::Mamba); declareProperty("SkipEventNumber", m_skipEventNumber=0); declareProperty("inputData", m_alibavaInputData="run_000007_2607_1639.ali"); declareProperty("outputLoc", m_outputLocation=TbUT::DataLocations::RawTES ); declareProperty("sensorNumber", m_sensorNumber=1 ); declareProperty("standalone", m_isStandalone=true ); declareProperty("isAType", m_isAType=true ); declareProperty("sigma", m_sigma=0. ); declareProperty("mean", m_mean=1. ); } StatusCode RawDataReaderAlgorithm::initialize() { StatusCode sc = GaudiAlgorithm::initialize(); if (!sc.isSuccess()) return StatusCode::FAILURE; try { m_rawDataReader=m_inputDataFactory.createDataEngine(m_inputDataOption); info()<<"Create data engine done"<<endmsg; } catch(RawDataFactory::NoSuchState &ex) { error()<<"Error input in factory: "<< ex.what()<<endmsg; return StatusCode::FAILURE; } try { m_rawDataReader->checkInput(); return StatusCode::SUCCESS; } catch(IDataReader::InputFileError &ex) { error()<<"input file error: "<< ex.what() <<endmsg; return StatusCode::FAILURE; } try { Sensor l_sensor(m_sensorNumber); RawData<>::setSensor(l_sensor); } catch(Sensor::SensorNumberError &ex) { error()<<"Error create sensor: "<< ex.what()<<endmsg; return StatusCode::FAILURE; } info()<<"initialization success!"<<endmsg; return StatusCode::SUCCESS; } StatusCode RawDataReaderAlgorithm::execute() { uint64_t mambaOffset=0; // need to be tuned uint64_t keplerEventBegin = 0; uint64_t keplerEventEnd = 0; if(!m_isStandalone) timingSvc()->eventDefinition(keplerEventBegin, keplerEventEnd); else keplerEventEnd=1;// more than 0 uint64_t mambaTimestamp=0; RawDataContainer<> * outputDataContainer=new RawDataContainer<>(); while(mambaTimestamp+mambaOffset<keplerEventEnd){ try{ if(0==(m_eventNumber%1000) ) info()<<"Read event"<<m_eventNumber<<endmsg; RawData<> * outputData=m_rawDataReader->getEventData(); outputDataContainer->addData(*outputData); m_eventNumber++; if(m_isStandalone) break; // do this loop only once }catch(IDataReader::ReadEventError& ex ){ error()<<"event read error: "<< ex.what()<<endmsg; return StatusCode::RECOVERABLE; }catch(IDataReader::NoMoreEvents& ex){ SmartIF<IEventProcessor> app(serviceLocator()->service("ApplicationMgr")); if (app){ info()<<"No more event. Terminate!"<<endmsg; return app->stopRun(); } } } put(outputDataContainer, m_outputLocation ); return StatusCode::SUCCESS; }