#ifndef TB_CLUSTERPLOTS_H #define TB_CLUSTERPLOTS_H 1 // AIDA #include "AIDA/IHistogram1D.h" #include "AIDA/IHistogram2D.h" // Tb/TbEvent #include "Event/TbCluster.h" // Tb/TbKernel #include "TbKernel/ITbClusterFinder.h" #include "TbKernel/TbAlgorithm.h" /** @class TbClusterPlots TbClusterPlots.h * * Algorithm to produce monitoring histograms for Timepix3 clusters. * * @author Dan Saunders */ class TbClusterPlots : public TbAlgorithm { public: /// Standard constructor TbClusterPlots(const std::string& name, ISvcLocator* pSvcLocator); /// Destructor virtual ~TbClusterPlots(); virtual StatusCode initialize(); ///< Algorithm initialization virtual StatusCode execute(); ///< Algorithm execution virtual StatusCode finalize(); private: /// TES location of clusters std::string m_clusterLocation; /// Index of reference plane unsigned int m_referencePlane; /// Time window (in ns) for correlation/difference plots double m_twindow; /// Parameters for ToT distribution histograms Gaudi::Histo1DDef m_parToT; /// Parameters for charge distribution histograms Gaudi::Histo1DDef m_parCharge; /// Parameters for x/y histograms (hitmaps and correlations) Gaudi::Histo1DDef m_parXY; /// Parameters for time histograms Gaudi::Histo1DDef m_parTime; /// Parameters for x/y difference histograms Gaudi::Histo1DDef m_parDifferenceXY; /// Parameters for phi difference histograms Gaudi::Histo1DDef m_parDifferenceRot; /// Parameters for time difference histograms Gaudi::Histo1DDef m_parDifferenceT; Gaudi::Histo1DDef m_parSamples; AIDA::IHistogram1D* m_telHitOccupancy; AIDA::IHistogram1D* m_telHitOccupancy_tracked; AIDA::IHistogram1D* m_nClusters_vs_telHitOccupancy; AIDA::IHistogram1D* m_nTrackedClusters_vs_telHitOccupancy; AIDA::IHistogram1D* m_fractionTrackedClusters_vs_telHitOccupancy; AIDA::IHistogram1D* m_telCharge; AIDA::IHistogram1D* m_nClusters_vs_telCharge; AIDA::IHistogram1D* m_nTrackedClusters_vs_telCharge; AIDA::IHistogram1D* m_fractionTrackedClusters_vs_telCharge; AIDA::IHistogram1D* m_telClusterOccupancy; AIDA::IHistogram1D* m_telClusterOccupancy_tracked; AIDA::IHistogram1D* m_nClusters_vs_telClusterOccupancy; AIDA::IHistogram1D* m_nTrackedClusters_vs_telClusterOccupancy; AIDA::IHistogram1D* m_fractionTrackedClusters_vs_telClusterOccupancy; bool m_fillSamples; bool m_fillComparisonPlots; // Much faster to turn off. bool m_fillTrackingEfficiency; /// slow and pattern recognition-y /// Cluster finder helper class ITbClusterFinder* m_clusterFinder; unsigned int m_event; double m_chargeCutLow; // Histograms // ToT distribution std::vector<AIDA::IHistogram1D*> m_hToT; std::vector<AIDA::IHistogram1D*> m_hToTOnePixel; std::vector<AIDA::IHistogram1D*> m_hToTTwoPixel; std::vector<AIDA::IHistogram1D*> m_hToTThreePixel; std::vector<AIDA::IHistogram1D*> m_hToTFourPixel; std::vector<AIDA::IHistogram1D*> m_hToTAssociated; std::vector<AIDA::IHistogram1D*> m_hToTNonAssociated; // Charge distribution std::vector<AIDA::IHistogram1D*> m_hCharge; std::vector<AIDA::IHistogram1D*> m_hChargeOnePixel; std::vector<AIDA::IHistogram1D*> m_hChargeTwoPixel; std::vector<AIDA::IHistogram1D*> m_hChargeThreePixel; std::vector<AIDA::IHistogram1D*> m_hChargeFourPixel; std::vector<AIDA::IHistogram1D*> m_hChargeAssociated; std::vector<AIDA::IHistogram1D*> m_hChargeNonAssociated; // Cluster size std::vector<AIDA::IHistogram1D*> m_hSize; std::vector<AIDA::IHistogram1D*> m_hSizeAssociated; std::vector<AIDA::IHistogram1D*> m_hSizeNonAssociated; std::vector<AIDA::IHistogram1D*> m_hWidthCol; std::vector<AIDA::IHistogram1D*> m_hWidthRow; // Cluster time std::vector<AIDA::IHistogram1D*> m_hTime; std::vector<AIDA::IHistogram1D*> m_hTimeAssociated; std::vector<AIDA::IHistogram1D*> m_hTimeNonAssociated; std::vector<AIDA::IHistogram1D*> m_hTimeBetweenClusters; // Time spread of pixel hits in a cluster std::vector<AIDA::IHistogram1D*> m_hTimeSeedMinusHit; // Hitmaps std::vector<AIDA::IHistogram2D*> m_hHitMap; std::vector<AIDA::IHistogram2D*> m_hHitMapAssociated; std::vector<AIDA::IHistogram2D*> m_hHitMapNonAssociated; AIDA::IHistogram2D* m_hGlobalXvsZ; AIDA::IHistogram2D* m_hGlobalYvsZ; // Global correlations. std::vector<AIDA::IHistogram2D*> m_gx_correls; std::vector<AIDA::IHistogram2D*> m_gy_correls; std::vector<AIDA::IHistogram2D*> m_gt_correls; // Global differences. std::vector<AIDA::IHistogram1D*> m_gx_diffs; std::vector<AIDA::IHistogram1D*> m_gy_diffs; std::vector<AIDA::IHistogram1D*> m_gt_diffs; std::vector<AIDA::IHistogram2D*> m_clusterVisuals; void setupPlots(); void fillPerChipPlots(const LHCb::TbClusters* clusters); void fillComparisonPlots(); void fillSamples(const LHCb::TbClusters* clusters); void fillClusterVisuals(const LHCb::TbClusters* clusters); void fillTrackingEfficiency(); }; #endif