25 constexpr float infinity=std::numeric_limits<float>::infinity();
30 std::map<unsigned int, unsigned int> occ;
31 for (
unsigned int i = 0; i <
nChannels(); i++) {
33 if (!history)
continue;
34 for (
unsigned int k = 0; k < history->
nData(); k++)
38 unsigned int runMin = 0;
39 unsigned int runMax = 1;
41 runMin = occ.begin()->first;
42 runMax = occ.rbegin()->first;
45 TH1I*
h =
new TH1I(
"occ",
"Run occupancies", runMax - runMin + 1, runMin - 0.5, runMax + 0.5);
46 h->GetXaxis()->SetTitle(
"Run number");
47 h->GetYaxis()->SetTitle(
"Occupancy");
48 for (std::map<unsigned int, unsigned int>::const_iterator
run = occ.begin();
52 int bin =
run->first - runMin + 1;
53 h->SetBinContent(
bin,
run->second);
54 h->GetXaxis()->SetBinLabel(
bin, Form(
"%d",
run->first));
62 std::map<std::pair<unsigned int, unsigned int>,
unsigned int> occ;
63 for (
unsigned int i = 0; i <
nChannels(); i++) {
65 if (!history)
continue;
66 for (
unsigned int k = 0; k < history->
nData(); k++)
70 TH1I*
h =
new TH1I(
"occ",
"Event occupancies", occ.size(), 0, occ.size());
71 h->GetXaxis()->SetTitle(
"Recorded Event");
72 h->GetYaxis()->SetTitle(
"Occupancy");
75 for (std::map<std::pair<unsigned int, unsigned int>,
unsigned int>
::const_iterator event = occ.begin();
76 event != occ.end(); ++event, ++
bin)
78 if (occForDump > 0 && occForDump <= event->second)
79 cout <<
"run = " <<
event->first.first <<
" event = " <<
event->first.second <<
" occ = " <<
event->second << endl;
80 h->SetBinContent(
bin, event->second);
88 std::map<unsigned int, unsigned int> occ;
89 for (
unsigned int i = 0; i <
nChannels(); i++) {
91 if (!history)
continue;
92 for (
unsigned int k = 0; k < history->
nData(); k++)
96 unsigned int oMin = 999999999, oMax = 0;
98 for (std::map<unsigned int, unsigned int>::const_iterator event = occ.begin();
99 event != occ.end(); ++event)
101 if (event->second < oMin) oMin =
event->second;
102 if (event->second > oMax) oMax =
event->second;
109 TH1I*
h =
new TH1I(
"occ",
"Event occupancies", oMax - oMin + 1, oMin - 0.5, oMax + 0.5);
110 h->GetXaxis()->SetTitle(
"Occupancy");
111 h->GetYaxis()->SetTitle(
"Number of events");
112 for (std::map<unsigned int, unsigned int>::const_iterator event = occ.begin();
113 event != occ.end(); ++event)
114 h->Fill(event->second);
122 std::vector<unsigned int> occ(
nChannels());
123 for (
unsigned int i = 0; i <
nChannels(); i++) {
126 occ[i] = occ[i] + history->
nData();
130 unsigned int oMin = 999999999, oMax = 0;
132 for (std::vector<unsigned int>::const_iterator cell = occ.begin();
133 cell != occ.end(); ++cell)
135 if (*cell < oMin) oMin = *cell;
136 if (*cell > oMax) oMax = *cell;
144 std::map<std::pair<unsigned int, unsigned int>, std::string> names;
145 TH1I*
h =
new TH1I(
"occ",
"Cell occupancies", oMax - oMin + 1, oMin - 0.5, oMax + 0.5);
146 h->GetXaxis()->SetTitle(
"Occupancy");
147 h->GetYaxis()->SetTitle(
"Number of cells");
150 for (std::vector<unsigned int>::const_iterator cellOcc = occ.begin();
151 cellOcc != occ.end(); ++cellOcc, ++i) {
154 if (!history)
continue;
155 if (minForPrintout >= 0) {
158 names[ std::pair<unsigned int, unsigned int>(*cellOcc, i) ] = heading.Data();
162 if (minForPrintout >= 0) {
169 for (std::map<std::pair<unsigned int, unsigned int>, std::string>::reverse_iterator cell = names.rbegin();
170 cell != names.rend(); ++cell)
172 if (cell->first.first < (
unsigned int)minForPrintout)
break;
173 cout << cell->first.first <<
" : " << cell->first.second <<
", " << cell->second << endl;
183 std::map<unsigned int, unsigned int> occ;
186 for (
unsigned int i = 0; i <
nChannels(); i++) {
188 if (!history)
continue;
189 for (
unsigned int k = 0; k < history->
nData(); k++)
193 unsigned int oMin = 999999999, oMax = 0;
195 for (std::map<unsigned int, unsigned int>::const_iterator feb = occ.begin();
196 feb != occ.end(); ++feb)
198 if (feb->second < oMin) oMin = feb->second;
199 if (feb->second > oMax) oMax = feb->second;
206 TH1I*
h =
new TH1I(
"occ",
"FEB occupancies", oMax - oMin + 1, oMin - 0.5, oMax + 0.5);
207 h->GetXaxis()->SetTitle(
"Occupancy");
208 h->GetYaxis()->SetTitle(
"Number of FEBs");
209 for (std::map<unsigned int, unsigned int>::const_iterator feb = occ.begin();
210 feb != occ.end(); ++feb)
211 h->Fill(feb->second);
220 for (
unsigned int i = 0; i <
nChannels(); i++) {
222 if (!history)
continue;
236 Form(
"Occupancies for partition %s, layer %d",
Id::str(calo).
Data(), layer),
243 for (
unsigned int i = 0; i <
nChannels(); i++) {
245 if (!history)
continue;
248 cout <<
" : " << history->
nData() <<
" pulse" << endl;
251 for (
unsigned int i = 0; i < history->
nData(); i++)
252 cout <<
"E = " << history->
data(i)->
energy() <<
" MeV, " << endl;
260 const unsigned int nPhiRings = 5516;
261 using block_t =
unsigned int[4][3];
262 block_t nCells, nRings;
263 std::vector<block_t> ringOccupancy (nPhiRings);
265 for (
unsigned int i = 0; i < 4; i++)
266 for (
unsigned int j = 0; j < 3; j++) {
267 for (
unsigned int k = 0; k < nPhiRings; k++) ringOccupancy[k][i][j] = 0;
272 for (
unsigned int i = 0; i <
nChannels(); i++) {
273 if (i%10000 == 0) cout <<
"Processing hash = " << i << endl;
275 if (!history)
continue;
277 unsigned int n[3] = {0,0,0};
279 for (
unsigned int k = 0; k < history->
nData(); k++) {
281 if (globalPhiRing<0)
continue;
282 ringOccupancy[globalPhiRing][layer][(int)history->
data(k)->
gain()]++;
285 for (
unsigned int g = 0; g < 3; g++)
if (n[g] >= nMin) nCells[layer][g]++;
288 for (
unsigned int i = 0; i < 4; i++)
289 for (
unsigned int j = 0; j < 3; j++) {
290 for (
unsigned int k = 0; k < nPhiRings; k++)
291 if (ringOccupancy[k][i][j] >= nMin) nRings[i][j]++;
294 for (
unsigned int i = 0; i < 4; i++) {
295 cout <<
"layer " << i << endl;
298 for (
unsigned int j = 0; j < 3; j++) {
299 float nCellFract= infinity;
300 if (nChann>0) nCellFract = nCells[i][j]*100.0/nChann;
301 float nRingFract = infinity;
302 if (nEta > 0) nRingFract = nRings[i][j]*100.0/nEta;
303 cout <<
" gain " << j <<
" : "
304 << nCells[i][j] <<
" cells of " << nChann <<
" (" << nCellFract <<
" %), "
305 << nRings[i][j] <<
" rings of " << nEta <<
" (" << nRingFract <<
" %)." << endl;
308 for (
unsigned int i = 0; i < 4; i++) {
311 cout << i <<
" & " << nChann <<
" & " << nEta <<
" & ";
312 for (
unsigned int j = 0; j < 3; j++){
313 float val = infinity;
314 if (nChann>0) val = nCells[i][j]*100.0/nChann;
315 cout << Form(
"%4.1f\\%% & ", val);
317 for (
unsigned int j = 0; j < 3; j++){
318 float val = infinity;
319 if (nEta > 0) val = nRings[i][j]*100.0/nEta;
320 cout << Form(
"%4.1f\\%% & ", val);
const History * pass(unsigned int i, const FilterParams &f) const
virtual const History * cellHistory(unsigned int i) const
TString location(int verbose=1) const
short globalPhiRing() const
CaloGain::CaloGain gain() const
TString problems(bool sayNone=false) const
static short nEta(CaloId calo, short layer, short region, short iPhi=1)
static int nChannels(CaloId calo, short layer, short region)
static TH2D * partitionHist(PartitionId part, const TString &name, const TString &title)
const CellInfo * cellInfo() const
const Data * data(unsigned int i) const
unsigned int nData() const
static PartitionId partition(CaloId id)
static TString str(CaloId id)
static bool matchCalo(CaloId id, CaloId idSpec)
static DataFuncSet func(const TString &var)
unsigned int nChannels() const
TH2D * etaPhiMap(const DataFuncSet &func, const DataFuncArgs &args, const TString &name, CaloId calo, short layer, TString title="", CombinationType comb=AverageValue, const FilterParams &f=FilterParams()) const
TH1I * runOccupancyHistory() const
TH2D * etaPhiOccupancy(CaloId calo, short layer, bool useEnergy=false) const
TH1I * eventOccupancyHistory(unsigned int occForDump=0) const
TH2D * partitionOccupancy(PartitionId part) const
void dump(short verbosity=2) const
TH1I * eventOccupancy() const
void cellAndRingOccupancy(CaloId calo, unsigned int nMin=20) const
TH1I * cellOccupancy(int minForPrintout=-1) const
TH1I * febOccupancy(CaloId calo) const