- /*
- * TbUTClusterCreatorDataMonitorAlgorithm.cpp
- *
- * Created on: Jan 6, 2015
- * Author: ADendek
- */
-
- #include "TbUTClusterCreatorDataMonitorAlgorithm.h"
- #include "TbUTRawData.h"
- #include "GaudiUtils/Aida2ROOT.h"
- #include <boost/format.hpp>
-
- using namespace TbUT;
-
- DECLARE_NAMESPACE_ALGORITHM_FACTORY(TbUT,ClusterCreatorDataMonitorAlgorithm)
-
- ClusterCreatorDataMonitorAlgorithm::ClusterCreatorDataMonitorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator ):
- GaudiHistoAlg ( name , pSvcLocator ),
- m_evtNumber(0),
- m_skipEvent(0),
- m_displayEventNumber(0),
- m_inputDataLoc(TbUT::DataLocations::Clusters_TES),
- m_sensorType()
- {
- declareProperty("skippEventNumber", m_skipEvent=10);
- declareProperty("displayEventNumber", m_displayEventNumber=10);
- declareProperty("sensorType",m_sensorType="PType");
-
- }
-
- StatusCode ClusterCreatorDataMonitorAlgorithm::initialize() {
- if(StatusCode::SUCCESS !=initializeBase()) return StatusCode::FAILURE;
- setHistoTopDir( const_cast<char*>("TbUT/") );
- createHistograms();
- return StatusCode::SUCCESS;
- }
-
-
- StatusCode ClusterCreatorDataMonitorAlgorithm::execute()
- {
- if(m_evtNumber<m_skipEvent)
- return skippEvent();
- else
- return fillHistograms();
- }
-
- StatusCode ClusterCreatorDataMonitorAlgorithm::finalize()
- {
- return GaudiHistoAlg::finalize();
- }
-
- StatusCode ClusterCreatorDataMonitorAlgorithm::initializeBase()
- {
- return GaudiHistoAlg::initialize();
- }
-
- StatusCode ClusterCreatorDataMonitorAlgorithm::getData()
- {
- if(!exist<ClusterContainer>(m_inputDataLoc)){
- error()<< " ==> There is no input data: "<< m_inputDataLoc <<endmsg;
- return StatusCode::FAILURE;
- }
- m_clusters=get<ClusterContainer>(m_inputDataLoc);
- if(!m_clusters){
- error()<< " ==> Input data is Null!"<<endmsg;
- return StatusCode::FAILURE;
- }
- return StatusCode::SUCCESS;
- }
-
- void ClusterCreatorDataMonitorAlgorithm::createHistograms()
- {
- createClusterNumberPerEventHistogram();
- createClusterNumberHistogram();
- createClusterSizeHistogram();
- createClusterChargeHistograms();
- }
-
- void ClusterCreatorDataMonitorAlgorithm::createClusterNumberPerEventHistogram()
- {
- double l_xmin=0;
- double l_xmax=6;
- int l_nbin=6;
- const std::string l_histogramName="ClusterNumberPerEvent";
- const std::string l_histogramTitle="Cluster Number Per Event";
- m_histogramClusterNumberPerEvent=Gaudi::Utils::Aida2ROOT::aida2root(book1D( l_histogramName, l_histogramTitle,l_xmin, l_xmax, l_nbin ));
-
- }
-
- void ClusterCreatorDataMonitorAlgorithm::createClusterNumberHistogram()
- {
- double l_xmin=-0.5+RawData<>::getMinChannel();
- double l_xmax=RawData<>::getMaxChannel()-0.5;
- int l_nbin=RawData<>::getnChannelNumber();
- std::string l_histogramName="ClusterNumber";
- std::string l_histogramTitle="Cluster Number vs channel";
- m_histogramClusterNumber=Gaudi::Utils::Aida2ROOT::aida2root(book1D( l_histogramName, l_histogramTitle,l_xmin, l_xmax, l_nbin ));
- l_histogramName="ClusterSeedPosition";
- l_histogramTitle="Cluster Seed Position";
- m_histogramClusterSeedPosition=Gaudi::Utils::Aida2ROOT::aida2root(book1D( l_histogramName, l_histogramTitle,l_xmin, l_xmax, l_nbin ));
-
- }
-
- void ClusterCreatorDataMonitorAlgorithm::createClusterSizeHistogram()
- {
- double l_xmin=-0.5;
- double l_xmax=5.5;
- int l_nbin=20;
- const std::string l_histogramName="ClusterSize";
- const std::string l_histogramTitle="Cluster Size";
- m_histogramClusterSize=Gaudi::Utils::Aida2ROOT::aida2root(book1D( l_histogramName, l_histogramTitle,l_xmin, l_xmax, l_nbin ));
- }
-
- void ClusterCreatorDataMonitorAlgorithm::createClusterChargeHistograms()
- {
- double l_xmin;
- double l_xmax;
-
- if(m_sensorType=="PType"){
- l_xmin=-1500.;
- l_xmax=-1.;
- }else if(m_sensorType=="NType"){
- l_xmin=1.;
- l_xmax=1500.;
- }else{
- l_xmin=-1500.;
- l_xmax=1500.;
- }
-
- int l_nbin=100;
- std::string l_histogramName="ClusterCharge";
- std::string l_histogramTitle="Cluster Charge";
- m_histogramClusterCharge=Gaudi::Utils::Aida2ROOT::aida2root(book1D( l_histogramName, l_histogramTitle,l_xmin, l_xmax, l_nbin ));
- l_histogramName="ClusterChargeSingleStrip";
- l_histogramTitle="Cluster Charge Single Strip";
- m_histogramClusterChargeSingleStrip=Gaudi::Utils::Aida2ROOT::aida2root(book1D( l_histogramName, l_histogramTitle,l_xmin, l_xmax, l_nbin ));
- l_histogramName="ClusterChargeDoubleStrip";
- l_histogramTitle="Cluster Charge Double Strip";
- m_histogramClusterChargeDoubleStrip=Gaudi::Utils::Aida2ROOT::aida2root(book1D( l_histogramName, l_histogramTitle,l_xmin, l_xmax, l_nbin ));
- l_histogramName="ClusterChargeTripleStrip";
- l_histogramTitle="Cluster Charge Triple Strip";
- m_histogramClusterChargeTripleStrip=Gaudi::Utils::Aida2ROOT::aida2root(book1D( l_histogramName, l_histogramTitle,l_xmin, l_xmax, l_nbin ));
- }
-
- StatusCode ClusterCreatorDataMonitorAlgorithm::skippEvent()
- {
- m_evtNumber++;
- return StatusCode::SUCCESS;
- }
-
- StatusCode ClusterCreatorDataMonitorAlgorithm::fillHistograms()
- {
- if(StatusCode::SUCCESS != getData()) return StatusCode::FAILURE;
- if(m_clusters->isEmpty())
- {
- m_histogramClusterNumberPerEvent->Fill(0.);
- m_evtNumber++;
- return StatusCode::SUCCESS;
- }
- auto l_clusters=m_clusters->getClusters();
- fillClusterNumberHistogram(l_clusters);
- fillClusterSizeHistogram(l_clusters);
- fillClusterChargeHistograms(l_clusters);
- if(m_evtNumber<m_displayEventNumber+m_skipEvent)fillEventsHistograms(l_clusters);
- m_evtNumber++;
- return StatusCode::SUCCESS;
- }
-
- void ClusterCreatorDataMonitorAlgorithm::fillClusterNumberHistogram(ClusterContainer::ClusterVector& p_clusters)
- {
- m_histogramClusterNumberPerEvent->Fill(p_clusters.size());
- for(const auto& l_cluster: p_clusters )
- {
- auto l_position=l_cluster.m_position;
- l_position+=RawData<>::getMinChannel();
- m_histogramClusterNumber->Fill(l_position);
- auto l_seedPosition=l_cluster.m_seedPosition;
- m_histogramClusterSeedPosition->Fill(l_seedPosition);
- }
- }
-
- void ClusterCreatorDataMonitorAlgorithm::fillClusterSizeHistogram(ClusterContainer::ClusterVector& p_clusters)
- {
- for(const auto& l_cluster: p_clusters ){
- auto l_size=l_cluster.m_size;
- m_histogramClusterSize->Fill(l_size);
- }
- }
-
- void ClusterCreatorDataMonitorAlgorithm::fillClusterChargeHistograms(ClusterContainer::ClusterVector& p_clusters)
- {
- using namespace std;
- for(const auto& l_cluster: p_clusters )
- {
- auto l_charge=l_cluster.m_charge;
- m_histogramClusterCharge->Fill(l_charge);
- switch(l_cluster.m_size)
- {
- case 1:
- m_histogramClusterChargeSingleStrip->Fill(l_charge);
- break;
- case 2:
- m_histogramClusterChargeDoubleStrip->Fill(l_charge);
- break;
- case 3:
- m_histogramClusterChargeTripleStrip->Fill(l_charge);
- break;
- }
- }
- }
-
-
- void ClusterCreatorDataMonitorAlgorithm::fillEventsHistograms(ClusterContainer::ClusterVector& p_clusters)
- {
- for(const auto& l_cluster: p_clusters )
- {
- auto l_position=l_cluster.m_position;
- auto l_charge=l_cluster.m_charge;
- auto l_size=l_cluster.m_size;
-
- auto l_name=createSingleEventHistogramName("charge");
- auto l_histogram=bookHistogram(l_name);
- fillSingleEventHistogram(l_histogram,l_position,l_charge);
-
- l_name=createSingleEventHistogramName("size");
- l_histogram=bookHistogram(l_name);
- fillSingleEventHistogram(l_histogram,l_position,l_size);
- }
- }
-
- TH1D* ClusterCreatorDataMonitorAlgorithm::bookHistogram(const std::string& p_histogramName)
- {
- return Gaudi::Utils::Aida2ROOT::aida2root(book1D( p_histogramName, p_histogramName,
- -0.5+RawData<>::getMinChannel(),RawData<>::getMaxChannel()-0.5,RawData<>::getnChannelNumber() ));
- }
-
- void ClusterCreatorDataMonitorAlgorithm::fillSingleEventHistogram(TH1D* p_histogram, int p_channel, double p_value)
- {
- p_histogram->SetBinContent(p_channel,p_value);
- }
-
- std::string ClusterCreatorDataMonitorAlgorithm::createSingleEventHistogramName(std::string p_HistogramType)
- {
- using namespace boost;
- boost::format l_histogramName("cluster_%s_event_%d");
- l_histogramName % p_HistogramType % m_evtNumber;
- return str(l_histogramName);
- }