Newer
Older
TB_Chris / TbUT / src / .svn / text-base / TbUTCommonModeSubtractorAlgorithm.cpp.svn-base
  1. /*
  2. * TbUTCommonModeSubtractorAlgorithm.cpp
  3. *
  4. * Created on: Nov 24, 2014
  5. * Author: ADendek
  6. */
  7.  
  8. #include "TbUTCommonModeSubtractorAlgorithm.h"
  9.  
  10. using namespace TbUT;
  11.  
  12. DECLARE_NAMESPACE_ALGORITHM_FACTORY(TbUT,CommonModeSubtractorAlgorithm)
  13.  
  14.  
  15. CommonModeSubtractorAlgorithm::CommonModeSubtractorAlgorithm(const std::string& name, ISvcLocator* pSvcLocator):
  16. GaudiAlgorithm(name, pSvcLocator),
  17. m_dataContainer(),
  18. m_data(),
  19. m_outputContainer(),
  20. m_inputDataLocation(),
  21. m_outputDataLocation(),
  22. m_channelMaskInputLocation(),
  23. m_CMSOption(),
  24. m_noiseCalculatorType(),
  25. m_noiseOutputLocation(),
  26. m_event(0),
  27. m_skipEvent(0),
  28. m_channelMaskFileValidator(m_channelMaskInputLocation),
  29. m_channelMaskProvider(m_channelMaskFileValidator),
  30. m_SubtractorFactory(m_channelMaskProvider),
  31. m_noiseCalculatorFactory(),
  32. m_noiseCalculatorPtr()
  33. {
  34. declareProperty("InputDataLocation", m_inputDataLocation=TbUT::DataLocations::PedestalTES);
  35. declareProperty("OutputDataLocation", m_outputDataLocation=TbUT::DataLocations::CMSTES);
  36. declareProperty("CMSType",m_CMSOption=TbUT::CMSType::Iteratively);
  37. declareProperty("skippEventNumber",m_skipEvent=0);
  38. declareProperty("ChannelMaskInputLocation", m_channelMaskInputLocation=TbUT::DataLocations::MaskLocation);
  39. declareProperty("NoiseCalculatorType", m_noiseCalculatorType=TbUT::NoiseCalculatorType::calculator);
  40. declareProperty("NoiseOutputFile", m_noiseOutputLocation=TbUT::DataLocations::NoiseTreshold);
  41. }
  42.  
  43.  
  44. StatusCode CommonModeSubtractorAlgorithm::initialize()
  45. {
  46. if(StatusCode::SUCCESS !=initializeBase()) return StatusCode::FAILURE;
  47. if(StatusCode::SUCCESS !=buildSubtractorEngine()) return StatusCode::FAILURE;
  48. if(StatusCode::SUCCESS !=buildNoiseCalculator()) return StatusCode::FAILURE;
  49. if(StatusCode::SUCCESS !=retriveMasksFromFile()) return StatusCode::FAILURE;
  50.  
  51. info()<<"Initialized successfully my friend!"<<endmsg;
  52. return StatusCode::SUCCESS;
  53. }
  54.  
  55. StatusCode CommonModeSubtractorAlgorithm::execute()
  56. {
  57. if(m_event<m_skipEvent)
  58. {
  59. return skippTreaningEvent();
  60. }
  61. if(StatusCode::SUCCESS != getData()) return StatusCode::FAILURE;
  62. m_outputContainer =new RawDataContainer<double>();
  63.  
  64. if(m_dataContainer->isEmpty()){
  65. put(m_outputContainer,m_outputDataLocation);
  66. return StatusCode::SUCCESS;
  67. }
  68.  
  69. for(const auto& rawDataIt: m_dataContainer->getData()){
  70. m_data=new RawData<>(rawDataIt);
  71. processEvent();
  72. delete m_data;
  73. }
  74. put(m_outputContainer,m_outputDataLocation);
  75.  
  76. return StatusCode::SUCCESS;
  77. }
  78.  
  79. StatusCode CommonModeSubtractorAlgorithm::finalize()
  80. {
  81. if(StatusCode::SUCCESS !=saveNoiseToFile()) return StatusCode::FAILURE;
  82. return GaudiAlgorithm::finalize();
  83. }
  84.  
  85.  
  86. StatusCode CommonModeSubtractorAlgorithm::initializeBase()
  87. {
  88. return GaudiAlgorithm::initialize();
  89. }
  90.  
  91. StatusCode CommonModeSubtractorAlgorithm::buildSubtractorEngine()
  92. try{
  93. m_CMSEnginePtr.reset(m_SubtractorFactory.createCMSubtractor(m_CMSOption));
  94. return StatusCode::SUCCESS;
  95. }catch(CommonModeSubtractorFactory::NoSuchState &exception)
  96. {
  97. error()<<"Invalid CommonMode Engine Type : "<<exception.what()<<endmsg;
  98. return StatusCode::FAILURE;
  99. }
  100.  
  101.  
  102. StatusCode CommonModeSubtractorAlgorithm::buildNoiseCalculator()
  103. try{
  104. m_noiseCalculatorPtr=m_noiseCalculatorFactory.createNoiseCalculator(m_noiseCalculatorType);
  105. return StatusCode::SUCCESS;
  106. }catch(NoiseCalculatorFactory::NoSuchState &exception)
  107. {
  108. error()<<"Invalid NoiseCalculator Type : "<<exception.what()<<endmsg;
  109. return StatusCode::FAILURE;
  110. }
  111.  
  112.  
  113. StatusCode CommonModeSubtractorAlgorithm::retriveMasksFromFile()
  114. try{
  115. m_channelMaskProvider.getMaskFromFile(m_channelMaskInputLocation);
  116. return StatusCode::SUCCESS;
  117. }catch(ChannelMaskProvider::InputFileError &exception)
  118. {
  119. error()<<"Channel Mask File Input Error: "<<m_channelMaskInputLocation<<endmsg;
  120. return StatusCode::FAILURE;
  121. }
  122.  
  123. StatusCode CommonModeSubtractorAlgorithm::getData()
  124. {
  125. m_dataContainer=getIfExists<RawDataContainer<>>(m_inputDataLocation);
  126. if(!m_dataContainer){
  127. error()<< " ==> There is no input data: "<< m_inputDataLocation <<endmsg;
  128. return StatusCode::FAILURE;
  129. }
  130. return StatusCode::SUCCESS;
  131. }
  132.  
  133. void CommonModeSubtractorAlgorithm::processEvent()
  134. {
  135. RawData<double> *l_afterCMS= new RawData<double>();
  136. m_CMSEnginePtr->processEvent(m_data,&l_afterCMS);
  137. m_noiseCalculatorPtr->updateNoise(l_afterCMS);
  138. m_outputContainer->addData(*l_afterCMS);
  139. m_event++;
  140. }
  141.  
  142. StatusCode CommonModeSubtractorAlgorithm::skippTreaningEvent()
  143. {
  144. m_event++;
  145. return StatusCode::SUCCESS;
  146. }
  147.  
  148. StatusCode CommonModeSubtractorAlgorithm::saveNoiseToFile()
  149. try{
  150. m_noiseCalculatorPtr->saveNoiseToFile(m_noiseOutputLocation);
  151. return StatusCode::SUCCESS;
  152. }catch (Noise::NoiseCalculatorError & ex)
  153. {
  154. error()<< ex.what()<<endmsg;
  155. return StatusCode::FAILURE;
  156. }
  157.  
  158.  
  159.