- /*
- * TbUTClusterCreatorAlgorithm.cpp
- *
- * Created on: Jan 6, 2015
- * Author: ADendek
- */
-
- #include "TbUTClusterCreatorAlgorithm.h"
-
- using namespace TbUT;
-
- DECLARE_NAMESPACE_ALGORITHM_FACTORY(TbUT,ClusterCreatorAlgorithm)
-
- ClusterCreatorAlgorithm::ClusterCreatorAlgorithm(const std::string& name, ISvcLocator* pSvcLocator):
- GaudiAlgorithm(name, pSvcLocator),
- m_dataContainer(),
- m_data(),
- m_inputDataLocation(),
- m_outputDataLocation(),
- m_clusterCreatorOption(),
- m_noiseFile(),
- m_sensorType(),
- m_event(),
- m_skipEvent(),
- m_lowThreshold(),
- m_highThreshold(),
- m_zsThresholdProvider(m_noiseFile,m_lowThreshold,m_highThreshold),
- m_clusterCreatorFactory(m_sensorType,m_zsThresholdProvider),
- m_clusterCreator()
- {
- declareProperty("InputDataLocation", m_inputDataLocation=TbUT::DataLocations::CMSTES);
- declareProperty("OutputDataLocation", m_outputDataLocation=TbUT::DataLocations::Clusters_TES);
- declareProperty("ClusterCreatorOption",m_clusterCreatorOption=TbUT::ClusterCreatorType::defaultCreator);
- declareProperty("NoiseInputFile",m_noiseFile=TbUT::DataLocations::NoiseTreshold);
- declareProperty("skippEventNumber",m_skipEvent=0);
- declareProperty("sensorType",m_sensorType="PType");
- declareProperty("LowThreshold",m_lowThreshold=3);
- declareProperty("HighThreshold",m_highThreshold=4);
- }
-
-
- StatusCode ClusterCreatorAlgorithm::initialize()
- {
- if(StatusCode::SUCCESS !=initializeBase()) return StatusCode::FAILURE;
- if(StatusCode::SUCCESS !=buildClusterCreator()) return StatusCode::FAILURE;
- if(StatusCode::SUCCESS !=retreiveNoise()) return StatusCode::FAILURE;
-
- info()<<"Cluster thresholds (unit of noise multiplicity):"<<endmsg;
- info()<<"Low:" <<m_lowThreshold <<endmsg;
- info()<<"high:" <<m_highThreshold <<endmsg;
-
- info()<<"Initialized successfully!"<<endmsg;
- return StatusCode::SUCCESS;
- }
-
- StatusCode ClusterCreatorAlgorithm::execute()
- {
- if(m_event<m_skipEvent)
- {
- m_event++;
- return StatusCode::SUCCESS;
- }
- if(StatusCode::SUCCESS != getData()) return StatusCode::FAILURE;
- if(m_dataContainer->isEmpty()){
- ClusterContainer *l_clontainer=new ClusterContainer();
- put(l_clontainer,m_outputDataLocation);
- return StatusCode::SUCCESS;
- }
- processAndSaveDataToTES();
- m_event++;
- return StatusCode::SUCCESS;
- }
-
- StatusCode ClusterCreatorAlgorithm::finalize()
- {
- return GaudiAlgorithm::finalize();
- }
-
- StatusCode ClusterCreatorAlgorithm::initializeBase()
- {
- return GaudiAlgorithm::initialize();
- }
-
- StatusCode ClusterCreatorAlgorithm::buildClusterCreator()
- try{
- m_clusterCreator=m_clusterCreatorFactory.createClusterCreator(m_clusterCreatorOption);
- return StatusCode::SUCCESS;
- }catch(ClusterCreatorFactory::NoSuchState &exception)
- {
- error()<<"Invalid ZS Engine Type : "<<exception.what()<<endmsg;
- return StatusCode::FAILURE;
- }
-
- StatusCode ClusterCreatorAlgorithm::retreiveNoise()
- try{
- m_zsThresholdProvider.retreiveTresholds();
- return StatusCode::SUCCESS;
- }catch(ITresholdProvider::ThresholdProviderError &err){
- error()<<"Cannot open Noise file: "<<err.what()<<endmsg;
- return StatusCode::FAILURE;
- }
-
-
- StatusCode ClusterCreatorAlgorithm::getData()
- {
- m_dataContainer=getIfExists<RawDataContainer <double> >(m_inputDataLocation);
- if(!m_dataContainer){
- error()<< " ==> There is no input data: "<< m_inputDataLocation <<endmsg;
- return StatusCode::FAILURE;
- }
- return StatusCode::SUCCESS;
- }
-
- void ClusterCreatorAlgorithm::processAndSaveDataToTES()
- {
- ClusterContainer *l_container=new ClusterContainer();
- for(const auto& rawDataIt: m_dataContainer->getData()){
- m_data=new RawData<double>(rawDataIt);
- ClusterContainer::ClusterVector clusterVector=m_clusterCreator->createClusters(m_data);
- l_container->addClusters(clusterVector);
- l_container->setTDC(m_data->getTDC());
- l_container->setTiemestamp(m_data->getTime());
- delete m_data;
- }
- put(l_container,m_outputDataLocation);
- }