Newer
Older
TB_Chris / TbUT / src / .svn / text-base / TbUTNTupleCreator.cpp.svn-base
  1.  
  2. #include "TbUTNTupleCreator.h"
  3. #include "GaudiKernel/AlgFactory.h"
  4.  
  5. using namespace TbUT;
  6.  
  7. DECLARE_NAMESPACE_ALGORITHM_FACTORY(TbUT,NTupleCreator)
  8.  
  9.  
  10. NTupleCreator::NTupleCreator(const std::string& name, ISvcLocator* pSvcLocator):
  11. GaudiTupleAlg(name, pSvcLocator),
  12. m_eventNumber(0)
  13. {
  14. declareProperty("StoreEventNumber", m_storeEventNumber = 100);
  15.  
  16. declareProperty("WriteRaw", m_isRawWritten = true);
  17. declareProperty("WriteHeader", m_isHeaderWritten = true);
  18. declareProperty("WritePedestal", m_isPedestalWritten = true);
  19. declareProperty("WriteCMS", m_isCMSWritten = true);
  20. declareProperty("WriteClusters", m_isClusterWritten = true);
  21.  
  22. declareProperty("RawLocation", m_rawLocation = TbUT::DataLocations::RawTES );
  23. declareProperty("HeaderLocation", m_headerLocation = TbUT::DataLocations::HeaderTES );
  24. declareProperty("PedestalLocation", m_pedestalLocation = TbUT::DataLocations::PedestalTES );
  25. declareProperty("CMSLocation", m_cmsLocation = TbUT::DataLocations::CMSTES );
  26. declareProperty("ClusterLocation", m_clusterLocation = TbUT::DataLocations::Clusters_TES );
  27.  
  28. }
  29.  
  30. StatusCode NTupleCreator::initialize()
  31. {
  32. StatusCode sc = GaudiTupleAlg::initialize();
  33. if (sc.isFailure()) return sc;
  34. if(m_isRawWritten) bookRawData();
  35. if(m_isHeaderWritten) bookHeaderData();
  36. if(m_isPedestalWritten) bookPedestal();
  37. if(m_isCMSWritten) bookCMS();
  38. if(m_isClusterWritten) bookClusters();
  39.  
  40. return StatusCode::SUCCESS;
  41. }
  42.  
  43. StatusCode NTupleCreator::execute()
  44. try{
  45. if(m_eventNumber<m_storeEventNumber)
  46. {
  47. if(m_isRawWritten) fillRawData();
  48. if(m_isHeaderWritten) fillHeaderData();
  49. if(m_isPedestalWritten) fillPedestal();
  50. if(m_isCMSWritten) fillCMS();
  51. if(m_isClusterWritten) fillClusters();
  52. m_eventNumber++;
  53. }
  54. return StatusCode::SUCCESS;
  55. }catch(DataError & err){
  56. error()<<err.what()<<endmsg;
  57. return StatusCode::FAILURE;
  58. }
  59.  
  60.  
  61. void NTupleCreator::bookRawData()
  62. {
  63. NTupleFilePtr file1(ntupleSvc(), "/NTUPLES/FILE1");
  64. NTuplePtr ntuple(ntupleSvc(), "/NTUPLES/FILE1/TbUT/RawData");
  65. if (ntuple) return;
  66. ntuple = ntupleSvc()->book("/NTUPLES/FILE1/TbUT/RawData",CLID_ColumnWiseTuple, "TbUT nTuple");
  67. ntuple->addItem("rawData",RawData<>::getnChannelNumber(), m_rawSignal);
  68. }
  69.  
  70. void NTupleCreator::bookHeaderData()
  71. {
  72. const unsigned int maxHeaderContainerSize=16;
  73. NTupleFilePtr file1(ntupleSvc(), "/NTUPLES/FILE1");
  74. NTuplePtr ntuple(ntupleSvc(), "/NTUPLES/FILE1/TbUT/HeaderData");
  75. if (ntuple) return;
  76. ntuple = ntupleSvc()->book("/NTUPLES/FILE1/TbUT/HeaderData",CLID_ColumnWiseTuple, "TbUT nTuple");
  77. ntuple->addItem("headerData0",maxHeaderContainerSize, m_header0Signal);
  78. ntuple->addItem("headerData1",maxHeaderContainerSize, m_header1Signal);
  79. ntuple->addItem("headerData2",maxHeaderContainerSize, m_header2Signal);
  80. ntuple->addItem("headerData3",maxHeaderContainerSize, m_header3Signal);
  81. ntuple->addItem("headerData3P1",maxHeaderContainerSize, m_header3P1Signal);
  82. ntuple->addItem("headerData3P2",maxHeaderContainerSize, m_header3P2Signal);
  83. }
  84.  
  85. void NTupleCreator::bookPedestal()
  86. {
  87. NTupleFilePtr file1(ntupleSvc(), "/NTUPLES/FILE1");
  88. NTuplePtr ntuple(ntupleSvc(), "/NTUPLES/FILE1/TbUT/Pedestal");
  89. if (ntuple) return;
  90. ntuple = ntupleSvc()->book("/NTUPLES/FILE1/TbUT/Pedestal",CLID_ColumnWiseTuple, "TbUT nTuple");
  91. ntuple->addItem("pedestalData",RawData<>::getnChannelNumber(), m_pedestalSignal);
  92. }
  93.  
  94. void NTupleCreator::bookCMS()
  95. {
  96. NTupleFilePtr file1(ntupleSvc(), "/NTUPLES/FILE1");
  97. NTuplePtr ntuple(ntupleSvc(), "/NTUPLES/FILE1/TbUT/CMS");
  98. if (ntuple) return;
  99. ntuple = ntupleSvc()->book("/NTUPLES/FILE1/TbUT/CMS",CLID_ColumnWiseTuple, "TbUT nTuple");
  100. ntuple->addItem("cmsData",RawData<>::getnChannelNumber() ,m_cmsSignal);
  101. }
  102.  
  103. void NTupleCreator::bookClusters()
  104. {
  105. NTupleFilePtr file1(ntupleSvc(), "/NTUPLES/FILE1");
  106. NTuplePtr ntuple(ntupleSvc(), "/NTUPLES/FILE1/TbUT/Clusters");
  107. if (ntuple) return;
  108.  
  109. const unsigned int maxClusterContainerSize=10;
  110. ntuple = ntupleSvc()->book("/NTUPLES/FILE1/TbUT/Clusters",CLID_ColumnWiseTuple, "TbUT nTuple");
  111. ntuple->addItem("clusterNumberPerEvent",m_clusterNumberPerEvent);
  112. ntuple->addItem("clustersTDC", m_tdc);
  113. ntuple->addItem("timestamps", m_timestamp);
  114.  
  115. ntuple->addItem("clustersPosition",maxClusterContainerSize ,m_clusterPosition);
  116. ntuple->addItem("clustersSeedPosition",maxClusterContainerSize ,m_clusterSeedPosition);
  117.  
  118. ntuple->addItem("clustersCharge",maxClusterContainerSize, m_clusterCharge);
  119. ntuple->addItem("clustersSize",maxClusterContainerSize ,m_clusterSize);
  120.  
  121. ntuple->addItem("clustersSeedCharge",maxClusterContainerSize ,m_clusterSeedCharge);
  122. ntuple->addItem("clustersCharge2StripLeft",maxClusterContainerSize ,m_clusterCharge2StripLeft);
  123. ntuple->addItem("clustersCharge1StripLeft",maxClusterContainerSize ,m_clusterCharge1StripLeft);
  124. ntuple->addItem("clustersCharge1StripRight",maxClusterContainerSize ,m_clusterCharge1StripRight);
  125. ntuple->addItem("clustersCharge2StripRight",maxClusterContainerSize ,m_clusterCharge2StripRight);
  126.  
  127. }
  128.  
  129. void NTupleCreator::fillRawData()
  130. {
  131. using namespace std;
  132. RawDataContainer<>* dataContainer=getDataFromTES<>(m_rawLocation);
  133. for(const auto& rawData : dataContainer->getData())// iterate over rawDatas
  134. {
  135. for(int channel=0;channel<RawData<>::getnChannelNumber();channel++){
  136. m_rawSignal[channel]=rawData.getSignal(channel);
  137. }
  138. ntupleSvc()->writeRecord("/NTUPLES/FILE1/TbUT/RawData");
  139. }
  140. }
  141. void NTupleCreator::fillHeaderData()
  142. {
  143. const unsigned int maxHeaderContainerSize=16;
  144. RawDataContainer<>* dataContainer=getDataFromTES(m_rawLocation);
  145. for(const auto& rawData : dataContainer->getData())// iterate over rawDatas
  146. {
  147. for(unsigned int channel=0;channel<maxHeaderContainerSize;channel++){
  148. m_header0Signal[channel]=rawData.getHeader0(channel);
  149. m_header1Signal[channel]=rawData.getHeader1(channel);
  150. m_header2Signal[channel]=rawData.getHeader2(channel);
  151. m_header3Signal[channel]=rawData.getHeader3(channel);
  152. m_header3P1Signal[channel]=rawData.getHeader3P1(channel);
  153. m_header3P2Signal[channel]=rawData.getHeader3P2(channel);
  154. }
  155. ntupleSvc()->writeRecord("/NTUPLES/FILE1/TbUT/HeaderData");
  156. }
  157. }
  158.  
  159. void NTupleCreator::fillPedestal()
  160. {
  161. RawDataContainer<>* dataContainer=getDataFromTES<>(m_pedestalLocation);
  162. for(const auto& data: dataContainer->getData()) // iterate over rawDatas
  163. {
  164. for(int channel=0;channel<RawData<>::getnChannelNumber();channel++){
  165. m_pedestalSignal[channel]=data.getSignal(channel);
  166. }
  167. ntupleSvc()->writeRecord("/NTUPLES/FILE1/TbUT/Pedestal");
  168. }
  169. }
  170.  
  171. void NTupleCreator::fillCMS()
  172. {
  173. RawDataContainer<double>* dataContainer=getDataFromTES<double>(m_cmsLocation);
  174. for(const auto& cmsData: dataContainer->getData())// iterate over rawDatas
  175. {
  176. for(int channel=0;channel<RawData<>::getnChannelNumber();channel++){
  177. m_cmsSignal[channel]=cmsData.getSignal(channel);
  178. }
  179. ntupleSvc()->writeRecord("/NTUPLES/FILE1/TbUT/CMS");
  180. }
  181. }
  182. template <typename DATA_TYPE>
  183. RawDataContainer<DATA_TYPE>* NTupleCreator::getDataFromTES(const std::string& p_location)
  184. {
  185. RawDataContainer<DATA_TYPE>* dataContainer=getIfExists<RawDataContainer<DATA_TYPE> >(p_location);
  186. if(!dataContainer){
  187. std::string errorMsg="There is no data in: " +p_location;
  188. throw DataError(errorMsg);
  189. }
  190. return dataContainer;
  191. }
  192.  
  193. ClusterContainer* NTupleCreator::getClustersFromTES()
  194. {
  195. ClusterContainer* clusterContainer=getIfExists<ClusterContainer>(m_clusterLocation);
  196. if(!clusterContainer){
  197. std::string errorMsg="There is no clusters in: " +m_clusterLocation;
  198. throw DataError(errorMsg);
  199. }
  200. return clusterContainer;
  201. }
  202.  
  203. void NTupleCreator::fillClusters()
  204. {
  205. ClusterContainer* clusterContainer=getClustersFromTES();
  206. m_tdc=clusterContainer->getTDC();
  207. m_timestamp=clusterContainer->getTimestamp();
  208. if(clusterContainer->isEmpty()){
  209. m_clusterNumberPerEvent=0;
  210. ntupleSvc()->writeRecord("/NTUPLES/FILE1/TbUT/Clusters");
  211. return;
  212. }
  213. int clusterPerEvent=clusterContainer->size();
  214. m_clusterNumberPerEvent=clusterPerEvent;
  215. const unsigned int maxClusterContainerSize=10;
  216. unsigned int clusterCounter=0;
  217. for(const auto& cluster: clusterContainer->getClusters())
  218. {
  219. m_clusterSize[clusterCounter]=cluster.m_size;
  220. m_clusterCharge[clusterCounter]=cluster.m_charge;
  221. m_clusterPosition[clusterCounter]=cluster.m_position;
  222. m_clusterSeedPosition[clusterCounter]=cluster.m_seedPosition;
  223. m_clusterSeedCharge[clusterCounter]=cluster.m_chargeSeed;
  224. m_clusterCharge2StripLeft[clusterCounter]=cluster.m_charge2StripLeft;
  225. m_clusterCharge1StripLeft[clusterCounter]=cluster.m_charge1StripLeft;
  226. m_clusterCharge2StripRight[clusterCounter]=cluster.m_charge2StripRight;
  227. m_clusterCharge1StripRight[clusterCounter]=cluster.m_charge1StripRight;
  228. clusterCounter++;
  229. if(clusterCounter>=maxClusterContainerSize) break;
  230. }
  231. ntupleSvc()->writeRecord("/NTUPLES/FILE1/TbUT/Clusters");
  232. }