Newer
Older
TB_Chris / TbUT / src / .svn / text-base / TbUTRawDataReaderAlgorithm.cpp.svn-base
  1. #include "TbUTRawDataReaderAlgorithm.h"
  2. #include "GaudiKernel/ToolFactory.h"
  3. #include "GaudiKernel/IEventProcessor.h"
  4.  
  5.  
  6. using namespace TbUT;
  7.  
  8. DECLARE_NAMESPACE_ALGORITHM_FACTORY(TbUT,RawDataReaderAlgorithm)
  9.  
  10. RawDataReaderAlgorithm::RawDataReaderAlgorithm(const std::string& name, ISvcLocator* pSvcLocator):
  11. GaudiAlgorithm(name, pSvcLocator),
  12. m_isStandalone(true),
  13. m_isAType(true),
  14. m_eventNumber(0),
  15. m_skipEventNumber(0),
  16. m_alibavaInputData(),
  17. m_outputLocation(),
  18. m_sensorNumber(1),
  19. m_mean(0),
  20. m_sigma(1),
  21. m_alibava(),
  22. m_fileValidator(m_alibavaInputData),
  23. m_rawDataReader(),
  24. m_inputDataFactory(m_alibavaInputData, m_alibava,m_fileValidator, m_isAType,m_mean,m_sigma )
  25. {
  26. declareProperty("InputDataType", m_inputDataOption=TbUT::InputDataOption::Mamba);
  27. declareProperty("SkipEventNumber", m_skipEventNumber=0);
  28. declareProperty("inputData", m_alibavaInputData="run_000007_2607_1639.ali");
  29. declareProperty("outputLoc", m_outputLocation=TbUT::DataLocations::RawTES );
  30. declareProperty("sensorNumber", m_sensorNumber=1 );
  31. declareProperty("standalone", m_isStandalone=true );
  32. declareProperty("isAType", m_isAType=true );
  33.  
  34.  
  35. declareProperty("sigma", m_sigma=0. );
  36. declareProperty("mean", m_mean=1. );
  37. }
  38.  
  39.  
  40. StatusCode RawDataReaderAlgorithm::initialize()
  41. {
  42. StatusCode sc = GaudiAlgorithm::initialize();
  43. if (!sc.isSuccess()) return StatusCode::FAILURE;
  44. try {
  45. m_rawDataReader=m_inputDataFactory.createDataEngine(m_inputDataOption);
  46. info()<<"Create data engine done"<<endmsg;
  47. } catch(RawDataFactory::NoSuchState &ex) {
  48. error()<<"Error input in factory: "<< ex.what()<<endmsg;
  49. return StatusCode::FAILURE;
  50. }
  51. try {
  52. m_rawDataReader->checkInput();
  53. return StatusCode::SUCCESS;
  54. } catch(IDataReader::InputFileError &ex) {
  55. error()<<"input file error: "<< ex.what() <<endmsg;
  56. return StatusCode::FAILURE;
  57. }
  58. try {
  59. Sensor l_sensor(m_sensorNumber);
  60. RawData<>::setSensor(l_sensor);
  61. } catch(Sensor::SensorNumberError &ex) {
  62. error()<<"Error create sensor: "<< ex.what()<<endmsg;
  63. return StatusCode::FAILURE;
  64. }
  65. info()<<"initialization success!"<<endmsg;
  66. return StatusCode::SUCCESS;
  67.  
  68. }
  69.  
  70. StatusCode RawDataReaderAlgorithm::execute()
  71. {
  72. uint64_t mambaOffset=0; // need to be tuned
  73. uint64_t keplerEventBegin = 0;
  74. uint64_t keplerEventEnd = 0;
  75. if(!m_isStandalone)
  76. timingSvc()->eventDefinition(keplerEventBegin, keplerEventEnd);
  77. else
  78. keplerEventEnd=1;// more than 0
  79.  
  80. uint64_t mambaTimestamp=0;
  81. RawDataContainer<> * outputDataContainer=new RawDataContainer<>();
  82. while(mambaTimestamp+mambaOffset<keplerEventEnd){
  83. try{
  84. if(0==(m_eventNumber%1000) ) info()<<"Read event"<<m_eventNumber<<endmsg;
  85. RawData<> * outputData=m_rawDataReader->getEventData();
  86. outputDataContainer->addData(*outputData);
  87. m_eventNumber++;
  88. if(m_isStandalone) break; // do this loop only once
  89. }catch(IDataReader::ReadEventError& ex ){
  90. error()<<"event read error: "<< ex.what()<<endmsg;
  91. return StatusCode::RECOVERABLE;
  92. }catch(IDataReader::NoMoreEvents& ex){
  93. SmartIF<IEventProcessor> app(serviceLocator()->service("ApplicationMgr"));
  94. if (app){
  95. info()<<"No more event. Terminate!"<<endmsg;
  96. return app->stopRun();
  97. }
  98. }
  99.  
  100. }
  101. put(outputDataContainer, m_outputLocation );
  102. return StatusCode::SUCCESS;
  103. }
  104.  
  105.