Newer
Older
TB_Chris / TbUT / src / .svn / text-base / TbUTClusterCreatorDataMonitorAlgorithm.cpp.svn-base
  1. /*
  2. * TbUTClusterCreatorDataMonitorAlgorithm.cpp
  3. *
  4. * Created on: Jan 6, 2015
  5. * Author: ADendek
  6. */
  7.  
  8. #include "TbUTClusterCreatorDataMonitorAlgorithm.h"
  9. #include "TbUTRawData.h"
  10. #include "GaudiUtils/Aida2ROOT.h"
  11. #include <boost/format.hpp>
  12.  
  13. using namespace TbUT;
  14.  
  15. DECLARE_NAMESPACE_ALGORITHM_FACTORY(TbUT,ClusterCreatorDataMonitorAlgorithm)
  16.  
  17. ClusterCreatorDataMonitorAlgorithm::ClusterCreatorDataMonitorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator ):
  18. GaudiHistoAlg ( name , pSvcLocator ),
  19. m_evtNumber(0),
  20. m_skipEvent(0),
  21. m_displayEventNumber(0),
  22. m_inputDataLoc(TbUT::DataLocations::Clusters_TES),
  23. m_sensorType()
  24. {
  25. declareProperty("skippEventNumber", m_skipEvent=10);
  26. declareProperty("displayEventNumber", m_displayEventNumber=10);
  27. declareProperty("sensorType",m_sensorType="PType");
  28.  
  29. }
  30.  
  31. StatusCode ClusterCreatorDataMonitorAlgorithm::initialize() {
  32. if(StatusCode::SUCCESS !=initializeBase()) return StatusCode::FAILURE;
  33. setHistoTopDir( const_cast<char*>("TbUT/") );
  34. createHistograms();
  35. return StatusCode::SUCCESS;
  36. }
  37.  
  38.  
  39. StatusCode ClusterCreatorDataMonitorAlgorithm::execute()
  40. {
  41. if(m_evtNumber<m_skipEvent)
  42. return skippEvent();
  43. else
  44. return fillHistograms();
  45. }
  46.  
  47. StatusCode ClusterCreatorDataMonitorAlgorithm::finalize()
  48. {
  49. return GaudiHistoAlg::finalize();
  50. }
  51.  
  52. StatusCode ClusterCreatorDataMonitorAlgorithm::initializeBase()
  53. {
  54. return GaudiHistoAlg::initialize();
  55. }
  56.  
  57. StatusCode ClusterCreatorDataMonitorAlgorithm::getData()
  58. {
  59. if(!exist<ClusterContainer>(m_inputDataLoc)){
  60. error()<< " ==> There is no input data: "<< m_inputDataLoc <<endmsg;
  61. return StatusCode::FAILURE;
  62. }
  63. m_clusters=get<ClusterContainer>(m_inputDataLoc);
  64. if(!m_clusters){
  65. error()<< " ==> Input data is Null!"<<endmsg;
  66. return StatusCode::FAILURE;
  67. }
  68. return StatusCode::SUCCESS;
  69. }
  70.  
  71. void ClusterCreatorDataMonitorAlgorithm::createHistograms()
  72. {
  73. createClusterNumberPerEventHistogram();
  74. createClusterNumberHistogram();
  75. createClusterSizeHistogram();
  76. createClusterChargeHistograms();
  77. }
  78.  
  79. void ClusterCreatorDataMonitorAlgorithm::createClusterNumberPerEventHistogram()
  80. {
  81. double l_xmin=0;
  82. double l_xmax=6;
  83. int l_nbin=6;
  84. const std::string l_histogramName="ClusterNumberPerEvent";
  85. const std::string l_histogramTitle="Cluster Number Per Event";
  86. m_histogramClusterNumberPerEvent=Gaudi::Utils::Aida2ROOT::aida2root(book1D( l_histogramName, l_histogramTitle,l_xmin, l_xmax, l_nbin ));
  87.  
  88. }
  89.  
  90. void ClusterCreatorDataMonitorAlgorithm::createClusterNumberHistogram()
  91. {
  92. double l_xmin=-0.5+RawData<>::getMinChannel();
  93. double l_xmax=RawData<>::getMaxChannel()-0.5;
  94. int l_nbin=RawData<>::getnChannelNumber();
  95. std::string l_histogramName="ClusterNumber";
  96. std::string l_histogramTitle="Cluster Number vs channel";
  97. m_histogramClusterNumber=Gaudi::Utils::Aida2ROOT::aida2root(book1D( l_histogramName, l_histogramTitle,l_xmin, l_xmax, l_nbin ));
  98. l_histogramName="ClusterSeedPosition";
  99. l_histogramTitle="Cluster Seed Position";
  100. m_histogramClusterSeedPosition=Gaudi::Utils::Aida2ROOT::aida2root(book1D( l_histogramName, l_histogramTitle,l_xmin, l_xmax, l_nbin ));
  101.  
  102. }
  103.  
  104. void ClusterCreatorDataMonitorAlgorithm::createClusterSizeHistogram()
  105. {
  106. double l_xmin=-0.5;
  107. double l_xmax=5.5;
  108. int l_nbin=20;
  109. const std::string l_histogramName="ClusterSize";
  110. const std::string l_histogramTitle="Cluster Size";
  111. m_histogramClusterSize=Gaudi::Utils::Aida2ROOT::aida2root(book1D( l_histogramName, l_histogramTitle,l_xmin, l_xmax, l_nbin ));
  112. }
  113.  
  114. void ClusterCreatorDataMonitorAlgorithm::createClusterChargeHistograms()
  115. {
  116. double l_xmin;
  117. double l_xmax;
  118.  
  119. if(m_sensorType=="PType"){
  120. l_xmin=-1500.;
  121. l_xmax=-1.;
  122. }else if(m_sensorType=="NType"){
  123. l_xmin=1.;
  124. l_xmax=1500.;
  125. }else{
  126. l_xmin=-1500.;
  127. l_xmax=1500.;
  128. }
  129.  
  130. int l_nbin=100;
  131. std::string l_histogramName="ClusterCharge";
  132. std::string l_histogramTitle="Cluster Charge";
  133. m_histogramClusterCharge=Gaudi::Utils::Aida2ROOT::aida2root(book1D( l_histogramName, l_histogramTitle,l_xmin, l_xmax, l_nbin ));
  134. l_histogramName="ClusterChargeSingleStrip";
  135. l_histogramTitle="Cluster Charge Single Strip";
  136. m_histogramClusterChargeSingleStrip=Gaudi::Utils::Aida2ROOT::aida2root(book1D( l_histogramName, l_histogramTitle,l_xmin, l_xmax, l_nbin ));
  137. l_histogramName="ClusterChargeDoubleStrip";
  138. l_histogramTitle="Cluster Charge Double Strip";
  139. m_histogramClusterChargeDoubleStrip=Gaudi::Utils::Aida2ROOT::aida2root(book1D( l_histogramName, l_histogramTitle,l_xmin, l_xmax, l_nbin ));
  140. l_histogramName="ClusterChargeTripleStrip";
  141. l_histogramTitle="Cluster Charge Triple Strip";
  142. m_histogramClusterChargeTripleStrip=Gaudi::Utils::Aida2ROOT::aida2root(book1D( l_histogramName, l_histogramTitle,l_xmin, l_xmax, l_nbin ));
  143. }
  144.  
  145. StatusCode ClusterCreatorDataMonitorAlgorithm::skippEvent()
  146. {
  147. m_evtNumber++;
  148. return StatusCode::SUCCESS;
  149. }
  150.  
  151. StatusCode ClusterCreatorDataMonitorAlgorithm::fillHistograms()
  152. {
  153. if(StatusCode::SUCCESS != getData()) return StatusCode::FAILURE;
  154. if(m_clusters->isEmpty())
  155. {
  156. m_histogramClusterNumberPerEvent->Fill(0.);
  157. m_evtNumber++;
  158. return StatusCode::SUCCESS;
  159. }
  160. auto l_clusters=m_clusters->getClusters();
  161. fillClusterNumberHistogram(l_clusters);
  162. fillClusterSizeHistogram(l_clusters);
  163. fillClusterChargeHistograms(l_clusters);
  164. if(m_evtNumber<m_displayEventNumber+m_skipEvent)fillEventsHistograms(l_clusters);
  165. m_evtNumber++;
  166. return StatusCode::SUCCESS;
  167. }
  168.  
  169. void ClusterCreatorDataMonitorAlgorithm::fillClusterNumberHistogram(ClusterContainer::ClusterVector& p_clusters)
  170. {
  171. m_histogramClusterNumberPerEvent->Fill(p_clusters.size());
  172. for(const auto& l_cluster: p_clusters )
  173. {
  174. auto l_position=l_cluster.m_position;
  175. l_position+=RawData<>::getMinChannel();
  176. m_histogramClusterNumber->Fill(l_position);
  177. auto l_seedPosition=l_cluster.m_seedPosition;
  178. m_histogramClusterSeedPosition->Fill(l_seedPosition);
  179. }
  180. }
  181.  
  182. void ClusterCreatorDataMonitorAlgorithm::fillClusterSizeHistogram(ClusterContainer::ClusterVector& p_clusters)
  183. {
  184. for(const auto& l_cluster: p_clusters ){
  185. auto l_size=l_cluster.m_size;
  186. m_histogramClusterSize->Fill(l_size);
  187. }
  188. }
  189.  
  190. void ClusterCreatorDataMonitorAlgorithm::fillClusterChargeHistograms(ClusterContainer::ClusterVector& p_clusters)
  191. {
  192. using namespace std;
  193. for(const auto& l_cluster: p_clusters )
  194. {
  195. auto l_charge=l_cluster.m_charge;
  196. m_histogramClusterCharge->Fill(l_charge);
  197. switch(l_cluster.m_size)
  198. {
  199. case 1:
  200. m_histogramClusterChargeSingleStrip->Fill(l_charge);
  201. break;
  202. case 2:
  203. m_histogramClusterChargeDoubleStrip->Fill(l_charge);
  204. break;
  205. case 3:
  206. m_histogramClusterChargeTripleStrip->Fill(l_charge);
  207. break;
  208. }
  209. }
  210. }
  211.  
  212.  
  213. void ClusterCreatorDataMonitorAlgorithm::fillEventsHistograms(ClusterContainer::ClusterVector& p_clusters)
  214. {
  215. for(const auto& l_cluster: p_clusters )
  216. {
  217. auto l_position=l_cluster.m_position;
  218. auto l_charge=l_cluster.m_charge;
  219. auto l_size=l_cluster.m_size;
  220.  
  221. auto l_name=createSingleEventHistogramName("charge");
  222. auto l_histogram=bookHistogram(l_name);
  223. fillSingleEventHistogram(l_histogram,l_position,l_charge);
  224.  
  225. l_name=createSingleEventHistogramName("size");
  226. l_histogram=bookHistogram(l_name);
  227. fillSingleEventHistogram(l_histogram,l_position,l_size);
  228. }
  229. }
  230.  
  231. TH1D* ClusterCreatorDataMonitorAlgorithm::bookHistogram(const std::string& p_histogramName)
  232. {
  233. return Gaudi::Utils::Aida2ROOT::aida2root(book1D( p_histogramName, p_histogramName,
  234. -0.5+RawData<>::getMinChannel(),RawData<>::getMaxChannel()-0.5,RawData<>::getnChannelNumber() ));
  235. }
  236.  
  237. void ClusterCreatorDataMonitorAlgorithm::fillSingleEventHistogram(TH1D* p_histogram, int p_channel, double p_value)
  238. {
  239. p_histogram->SetBinContent(p_channel,p_value);
  240. }
  241.  
  242. std::string ClusterCreatorDataMonitorAlgorithm::createSingleEventHistogramName(std::string p_HistogramType)
  243. {
  244. using namespace boost;
  245. boost::format l_histogramName("cluster_%s_event_%d");
  246. l_histogramName % p_HistogramType % m_evtNumber;
  247. return str(l_histogramName);
  248. }