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)
virtual unsigned int nChannels() const override
static DataFuncSet func(const TString &var)
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
int run(int argc, char *argv[])