2828#include < ITSBase/GeometryTGeo.h>
2929#include < Framework/TimingInfo.h>
3030
31- class TH1D ;
32- class TH2D ;
31+ class TH1F ;
32+ class TH2F ;
3333
3434using namespace o2 ::quality_control::core;
3535
@@ -51,75 +51,101 @@ class ITSClusterTask : public TaskInterface
5151 void endOfActivity (Activity& activity) override ;
5252 void reset () override ;
5353
54+ // Fine checks
55+ void setRphiBinningIB (std::vector<float > bins = { -0.75 , -0.60 , -0.45 , -0.30 , -0.15 , 0 , 0.15 , 0.30 , 0.45 , 0.60 , 0.76 });
56+ void setZBinningIB (std::vector<float > bins = { -1.5 , -1.20 , -0.9 , -0.6 , -0.3 , 0 , 0.3 , 0.6 , 0.9 , 1.2 , 1.51 });
57+ void setRphiBinningOB (std::vector<float > bins = { -0.75 , -0.35 , 0 , 0.35 , 0.76 });
58+ void setZBinningOB (std::vector<float > bins = { -1.5 , -0.75 , 0 ., 0.75 , 1.51 });
59+
5460 private:
5561 void publishHistos ();
5662 void formatAxes (TH1 * h, const char * xTitle, const char * yTitle, float xOffset = 1 ., float yOffset = 1 .);
5763 void addObject (TObject* aObject);
5864 void getJsonParameters ();
5965 void createAllHistos ();
60- void updateOccMonitorPlots ();
66+ void addLines ();
67+
68+ float getHorizontalBin (float z, int chip, int layer, int lane = 0 );
69+ float getVerticalBin (float rphi, int stave, int layer);
6170
6271 static constexpr int NLayer = 7 ;
6372 static constexpr int NLayerIB = 3 ;
64- TH2D * hClusterVsBunchCrossing;
73+
6574 std::vector<TObject*> mPublishedObjects ;
66- TH1D * hClusterSizeSummaryIB[7 ][48 ][9 ];
67- TH1D * hClusterTopologySummaryIB[7 ][48 ][9 ];
68- TH1D * hGroupedClusterSizeSummaryIB[7 ][48 ][9 ];
6975
70- TH1D * hClusterSizeLayerSummary[7 ];
71- TH1D * hClusterTopologyLayerSummary[7 ];
72- TH1D * hGroupedClusterSizeLayerSummary[7 ];
76+ // Inner barrel
77+ TH1F * hClusterTopologySummaryIB[NLayer][48 ][9 ] = { { { nullptr } } };
78+ TH1F * hGroupedClusterSizeSummaryIB[NLayer][48 ][9 ] = { { { nullptr } } };
79+
80+ TH2F * hAverageClusterOccupancySummaryIB[NLayer] = { nullptr };
81+ TH2F * hAverageClusterSizeSummaryIB[NLayer] = { nullptr };
82+
83+ int mClusterOccupancyIB [NLayer][48 ][9 ] = { { { 0 } } };
84+
85+ // Outer barrel
86+ TH1F * hGroupedClusterSizeSummaryOB[NLayer][48 ] = { { nullptr } };
87+ TH1F * hClusterSizeSummaryOB[NLayer][48 ] = { { nullptr } };
88+ TH1F * hClusterTopologySummaryOB[NLayer][48 ] = { { nullptr } };
89+
90+ TH2F * hAverageClusterOccupancySummaryOB[NLayer] = { nullptr };
91+ TH2F * hAverageClusterSizeSummaryOB[NLayer] = { nullptr };
92+
93+ int mClusterOccupancyOB [NLayer][48 ][28 ] = { { { 0 } } };
94+
95+ // Layer synnary
96+ TH1F * hClusterSizeLayerSummary[NLayer] = { nullptr };
97+ TH1F * hClusterTopologyLayerSummary[NLayer] = { nullptr };
98+ TH1F * hGroupedClusterSizeLayerSummary[NLayer] = { nullptr };
99+
100+ // General
101+ TH2F * hClusterVsBunchCrossing = nullptr ;
102+ TH2F * mGeneralOccupancy = nullptr ;
73103
74- TH2D * hAverageClusterOccupancySummaryIB[7 ];
75- TH2D * hAverageClusterOccupancyMonitorIB[7 ]; // will be used in online data monitoring, showing occupation for the last N ROFs
76- TH2D * hAverageClusterSizeSummaryIB[7 ];
77- TH2D * hAverageClusterSizeMonitorIB[7 ];
104+ // Fine checks
105+ TH2F * hAverageClusterOccupancySummaryFine[NLayer] = { nullptr };
106+ TH2F * hAverageClusterSizeSummaryFine[NLayer] = { nullptr };
78107
79- Int_t mClusterOccupancyIB [ 7 ][ 48 ][ 9 ] ;
80- Int_t mClusterOccupancyIBmonitor [ 7 ][ 48 ][ 9 ] ;
108+ TH2F * hAverageClusterOccupancySummaryZPhi[NLayer] = { nullptr } ;
109+ TH2F * hAverageClusterSizeSummaryZPhi[NLayer] = { nullptr } ;
81110
82- TH1D * hGroupedClusterSizeSummaryOB[7 ][48 ];
83- TH1D * hClusterSizeSummaryOB[7 ][48 ];
84- TH1D * hClusterTopologySummaryOB[7 ][48 ];
111+ int mClusterSize [NLayer][48 ][28 ] = { { { 0 } } }; // [#layers][max staves][max lanes / chips]
112+ int nClusters[NLayer][48 ][28 ] = { { { 0 } } };
85113
86- TH2D * hAverageClusterOccupancySummaryOB[7 ];
87- TH2D * hAverageClusterOccupancyMonitorOB[7 ]; // will be used in online data monitoring, showing occupation for the last N ROFs
88- TH2D * hAverageClusterSizeSummaryOB[7 ];
89- TH2D * hAverageClusterSizeMonitorOB[7 ];
114+ // Edges of space binning within chips (local frame coordinates)
115+ std::vector<float > vRphiBinsIB;
116+ std::vector<float > vZBinsIB;
117+ std::vector<float > vRphiBinsOB;
118+ std::vector<float > vZBinsOB;
90119
91- // THnSparseD *sClustersSize[7];
92- TH2D * mGeneralOccupancy ;
120+ int nZBinsIB = 1 ;
121+ int nRphiBinsIB = 1 ;
122+ int nRphiBinsOB = 1 ;
123+ int nZBinsOB = 1 ;
93124
94125 const int mOccUpdateFrequency = 100000 ;
95126 int mDoPublish1DSummary = 0 ;
96127 int mNThreads = 1 ;
97128 int mNRofs = 0 ;
98- int mNRofsMonitor = 0 ;
99129 int nBCbins = 103 ;
100130 long int mTimestamp = -1 ;
101131 std::string mGeomPath = " ./" ;
102132 TString xLabel;
103133 std::string mGeoTimestamp = " 1640991600000" ;
104134 int mLocalGeometryFile = 1 ;
135+ int mDoPublishDetailedSummary = 0 ;
105136
106- const int mNStaves [7 ] = { 12 , 16 , 20 , 24 , 30 , 42 , 48 };
137+ const int mNStaves [NLayer ] = { 12 , 16 , 20 , 24 , 30 , 42 , 48 };
107138 const int mNHicPerStave [NLayer] = { 1 , 1 , 1 , 8 , 8 , 14 , 14 };
108139 const int mNChipsPerHic [NLayer] = { 9 , 9 , 9 , 14 , 14 , 14 , 14 };
109140 const int mNLanePerHic [NLayer] = { 3 , 3 , 3 , 2 , 2 , 2 , 2 };
110141 const int ChipBoundary[NLayer + 1 ] = { 0 , 108 , 252 , 432 , 3120 , 6480 , 14712 , 24120 };
111142 const int StaveBoundary[NLayer + 1 ] = { 0 , 12 , 28 , 48 , 72 , 102 , 144 , 192 };
112143 const std::string mYlabels [NLayer * 2 ] = { " L6B(S24#rightarrow47)" , " L5B(S21#rightarrow41)" , " L4B(S15#rightarrow29)" , " L3B(S12#rightarrow23)" , " L2B(S10#rightarrow19)" , " L1B(S08#rightarrow15)" , " L0B(S06#rightarrow11)" , " L0T(S00#rightarrow05)" , " L1T(S00#rightarrow07)" , " L2T(S00#rightarrow09)" , " L3T(S00#rightarrow11)" , " L4T(S00#rightarrow14)" , " L5T(S00#rightarrow20)" , " L6T(S00#rightarrow23)" };
113144
114- int mEnableLayers [7 ];
115- int mClusterSize [7 ][48 ][28 ] = { { { 0 } } }; // [#layers][max staves][max lanes / chips]
116- double mClusterSizeMonitor [7 ][48 ][28 ] = { { { 0 } } };
117- int nClusters[7 ][48 ][28 ] = { { { 0 } } };
118- Int_t mClusterOccupancyOB [7 ][48 ][28 ] = { { { 0 } } };
119- Int_t mClusterOccupancyOBmonitor [7 ][48 ][28 ] = { { { 0 } } };
145+ int mEnableLayers [NLayer] = { 0 };
120146
121- o2::itsmft::TopologyDictionary* mDict ;
122- o2::its::GeometryTGeo* mGeom ;
147+ o2::itsmft::TopologyDictionary* mDict = nullptr ;
148+ o2::its::GeometryTGeo* mGeom = nullptr ;
123149
124150 const char * OBLabel34[16 ] = { " HIC1L_B0_ln7" , " HIC1L_A8_ln6" , " HIC2L_B0_ln8" , " HIC2L_A8_ln5" , " HIC3L_B0_ln9" , " HIC3L_A8_ln4" , " HIC4L_B0_ln10" , " HIC4L_A8_ln3" , " HIC1U_B0_ln21" , " HIC1U_A8_ln20" , " HIC2U_B0_ln22" , " HIC2U_A8_ln19" , " HIC3U_B0_ln23" , " HIC3U_A8_ln18" , " HIC4U_B0_ln24" , " HIC4U_A8_ln17" };
125151 const char * OBLabel56[28 ] = { " HIC1L_B0_ln7" , " HIC1L_A8_ln6" , " HIC2L_B0_ln8" , " HIC2L_A8_ln5" , " HIC3L_B0_ln9" , " HIC3L_A8_ln4" , " HIC4L_B0_ln10" , " HIC4L_A8_ln3" , " HIC5L_B0_ln11" , " HIC5L_A8_ln2" , " HIC6L_B0_ln12" , " HIC6L_A8_ln1" , " HIC7L_B0_ln13" , " HIC7L_A8_ln0" , " HIC1U_B0_ln21" , " HIC1U_A8_ln20" , " HIC2U_B0_ln22" , " HIC2U_A8_ln19" , " HIC3U_B0_ln23" , " HIC3U_A8_ln18" , " HIC4U_B0_ln24" , " HIC4U_A8_ln17" , " HIC5U_B0_ln25" , " HIC5U_A8_ln16" , " HIC6U_B0_ln26" , " HIC6U_A8_ln15" , " HIC7U_B0_ln27" , " HIC7U_A8_ln14" };
0 commit comments