#ifndef TB_TUPLEWRITER_H #define TB_TUPLEWRITER_H 1 // Tb/TbKernel #include "TbKernel/TbAlgorithm.h" /** @class TbTupleWriter TbTupleWriter.h * * Algorithm to write out hits/clusters/tracks/triggers in ntuple format. * * @author Heinrich Schindler * @date 2014-06-19 */ class TbTupleWriter : public TbAlgorithm { public: /// Standard constructor TbTupleWriter(const std::string& name, ISvcLocator* pSvcLocator); /// Destructor virtual ~TbTupleWriter(); virtual StatusCode initialize(); ///< Algorithm initialization virtual StatusCode execute(); ///< Algorithm execution private: bool m_writeTriggers; bool m_writeHits; bool m_writeClusters; bool m_writeTracks; bool m_writeClusterHits; /// Flag to produce a stripped nTuple bool m_strippedNTuple; unsigned int m_maxclustersize; unsigned int m_maxTriggers; unsigned long long m_evtNo; std::string m_triggerLocation; std::string m_hitLocation; std::string m_clusterLocation; std::string m_trackLocation; void fillTriggers(); void fillHits(); void fillClusters(); void fillTracks(); void bookTriggers(); void bookHits(); void bookClusters(); void bookTracks(); // Trigger nTuple entries NTuple::Item<unsigned long long> m_TgID; NTuple::Item<unsigned long long> m_TgTime; NTuple::Item<double> m_TgHTime; NTuple::Item<unsigned int> m_TgEvt; NTuple::Item<unsigned int> m_TgPlane; NTuple::Item<unsigned int> m_TgCounter; // Hit nTuple entries NTuple::Item<unsigned long long> m_hID; NTuple::Item<unsigned long long> m_hTime; NTuple::Item<unsigned int> m_hCol; NTuple::Item<unsigned int> m_hRow; NTuple::Item<double> m_hHTime; NTuple::Item<unsigned int> m_hToT; NTuple::Item<unsigned int> m_hPlane; // Track nTuple entries NTuple::Item<unsigned long long> m_TkID; NTuple::Item<unsigned long long> m_TkTime; NTuple::Array<unsigned long long> m_TkClId; NTuple::Array<unsigned long long> m_TkTgId; NTuple::Array<unsigned int> m_TkTgPlane; NTuple::Array<double> m_TkXResidual; NTuple::Array<double> m_TkYResidual; NTuple::Item<double> m_TkX0; NTuple::Item<double> m_TkY0; NTuple::Item<double> m_TkTx; NTuple::Item<double> m_TkTy; NTuple::Item<double> m_TkHTime; NTuple::Item<double> m_TkChi2ndof; NTuple::Item<unsigned int> m_TkNCl; NTuple::Item<unsigned int> m_TkNTg; NTuple::Item<unsigned int> m_TkNTgPlane; NTuple::Item<unsigned int> m_TkEvt; // Cluster nTuple entries NTuple::Item<double> m_clGx, m_clGy, m_clGz; NTuple::Item<double> m_clLx, m_clLy, m_clHTime; NTuple::Item<unsigned int> m_clSize; NTuple::Item<double> m_clCharge; NTuple::Item<unsigned int> m_clPlane, m_clN; NTuple::Item<unsigned long long> m_clEvtNo, m_clID, m_clTime; NTuple::Item<bool> m_clTracked; NTuple::Array<int> m_clhRow, m_clhCol, m_clhToT; NTuple::Array<unsigned int> m_clsCol; NTuple::Array<double> m_clhHTime; }; #endif