File indexing completed on 2026-04-04 08:16:09
0001
0002
0003
0004
0005
0006 #include "HcalMon.h"
0007
0008 #include <onlmon/OnlMon.h> // for OnlMon
0009 #include <onlmon/OnlMonDB.h>
0010 #include <onlmon/OnlMonServer.h>
0011 #include <onlmon/pseudoRunningMean.h>
0012 #include <onlmon/triggerEnum.h>
0013
0014 #include <calobase/TowerInfoDefs.h>
0015 #include <caloreco/CaloWaveformFitting.h>
0016
0017 #include <Event/Event.h>
0018 #include <Event/eventReceiverClient.h>
0019 #include <Event/msg_profile.h>
0020
0021 #include <TH1.h>
0022 #include <TH2.h>
0023 #include <TProfile.h>
0024 #include <TProfile2D.h>
0025
0026 #include <cmath>
0027 #include <cstdio> // for printf
0028 #include <fstream>
0029 #include <iostream>
0030 #include <sstream>
0031 #include <string> // for allocator, string, char_traits
0032
0033 enum
0034 {
0035 TRGMESSAGE = 1,
0036 FILLMESSAGE = 2
0037 };
0038
0039 HcalMon::HcalMon(const std::string& name)
0040 : OnlMon(name)
0041 {
0042
0043
0044
0045
0046 if (name[0] == 'O')
0047 {
0048 packetlow = 8001;
0049 packethigh = 8008;
0050 }
0051 else if (name[0] == 'I')
0052 {
0053 packetlow = 7001;
0054 packethigh = 7008;
0055 }
0056 else
0057 {
0058 std::cout << "HcalMon::HcalMon - unknown name(need to be OHCALMON or IHCALMON to know what packet to run) " << name << std::endl;
0059 exit(1);
0060 }
0061 return;
0062 }
0063
0064 HcalMon::~HcalMon()
0065 {
0066
0067 delete WaveformProcessing;
0068 for (auto iter : rm_vector_sectAvg)
0069 {
0070 delete iter;
0071 }
0072 for (auto iter : rm_vector_twr)
0073 {
0074 delete iter;
0075 }
0076 for (auto iter : rm_packet_number)
0077 {
0078 delete iter;
0079 }
0080 for (auto iter : rm_packet_length)
0081 {
0082 delete iter;
0083 }
0084 for (auto iter : rm_packet_chans)
0085 {
0086 delete iter;
0087 }
0088 for (auto iter : rm_vector_twrTime)
0089 {
0090 delete iter;
0091 }
0092 for (auto iter : rm_vector_twrhit)
0093 {
0094 delete iter;
0095 }
0096 for (auto iter : rm_vector_twrhit_alltrig)
0097 {
0098 delete iter;
0099 }
0100
0101 if (erc)
0102 {
0103 delete erc;
0104 }
0105
0106 return;
0107 }
0108
0109 const int depth = 200000;
0110 const int packet_depth = 1000;
0111 const int historyLength = 100;
0112 const int historyScaleDown = 100;
0113
0114 float hit_threshold = 30;
0115 float waveform_hit_threshold = 100;
0116 const int n_samples_show = 31;
0117
0118 int HcalMon::Init()
0119 {
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135 printf("doing the Init\n");
0136
0137 for (int itrig = 0; itrig < 64; itrig++)
0138 {
0139 h2_hcal_hits_trig[itrig] = new TH2F(Form("h2_hcal_hits_trig_%d", itrig), "", 24, 0, 24, 64, 0, 64);
0140 }
0141
0142 pr_zsFrac_etaphi = new TProfile2D("pr_zsFrac_etaphi", "", 24, 0, 24, 64, 0, 64);
0143 pr_zsFrac_etaphi_all = new TProfile2D("pr_zsFrac_etaphi_all", "", 24, 0, 24, 64, 0, 64);
0144 h_hcal_trig = new TH1F("h_hcal_trig", "", 64, 0, 64);
0145 h2_hcal_rm = new TH2F("h2_hcal_rm", "", 24, 0, 24, 64, 0, 64);
0146 h2_hcal_rm_alltrig = new TH2F("h2_hcal_rm_alltrig", "", 24, 0, 24, 64, 0, 64);
0147 h2_hcal_mean = new TH2F("h2_hcal_mean", "", 24, 0, 24, 64, 0, 64);
0148 h2_hcal_time = new TH2F("h2_hcal_time", "", 24, 0, 24, 64, 0, 64);
0149 h2_hcal_hits = new TH2F("h2_hcal_hits", "", 24, 0, 24, 64, 0, 64);
0150 h2_hcal_waveform = new TH2F("h2_hcal_waveform", "", n_samples_show, 0.5, n_samples_show + 0.5, 1000, 0, 15000);
0151 h2_hcal_correlation = new TH2F("h2_hcal_correlation", "", 200, 0, 100000, 200, 0, 150000);
0152 h_event = new TH1F("h_event", "", 1, 0, 1);
0153 h_waveform_twrAvg = new TH1F("h_waveform_twrAvg", "", n_samples_show, 0.5, n_samples_show + 0.5);
0154 h_waveform_time = new TH1F("h_waveform_time", "", n_samples_show, 0.5, n_samples_show + 0.5);
0155 h_waveform_pedestal = new TH1F("h_waveform_pedestal", "", 5e3, 0, 5e3);
0156 h_sectorAvg_total = new TH1F("h_sectorAvg_total", "", 32, 0.5, 32.5);
0157
0158 h_ntower = new TH1F("h_ntower", "", 100, 0, 800);
0159
0160 h1_packet_number = new TH1F("h1_packet_number", "", 8, packetlow - 0.5, packethigh + 0.5);
0161 h1_packet_length = new TH1F("h1_packet_length", "", 8, packetlow - 0.5, packethigh + 0.5);
0162 h1_packet_chans = new TH1F("h1_packet_chans", "", 8, packetlow - 0.5, packethigh + 0.5);
0163 h1_packet_event = new TH1F("h1_packet_event", "", 8, packetlow - 0.5, packethigh + 0.5);
0164 h_caloPack_gl1_clock_diff = new TH2F("h_caloPack_gl1_clock_diff", "", 8, packetlow - 0.5, packethigh + 0.5, 65536, 0, 65536);
0165 h_evtRec = new TProfile("h_evtRec", "", 1, 0, 1);
0166
0167 p2_pre_post = new TProfile2D("p2_pre_post", "", 24, 0, 24, 64, 0, 64, "S");
0168
0169 for(int i = 0; i < nPacketStatus; i++) h1_packet_status[i] = new TH1F(Form("h1_packet_status_%d",i),"",7,packetlow-0.5, packethigh+0.5);
0170
0171
0172 for (int ih = 0; ih < Nsector; ih++)
0173 {
0174 h_rm_sectorAvg[ih] = new TH1F(Form("h_rm_sectorAvg_s%d", ih), "", historyLength, 0, historyLength * historyScaleDown);
0175 }
0176 for (int ieta = 0; ieta < 24; ieta++)
0177 {
0178 for (int iphi = 0; iphi < 64; iphi++)
0179 {
0180 h_rm_tower[ieta][iphi] = new TH1F(Form("h_rm_tower_%d_%d", ieta, iphi), Form("multiplicity running mean of tower ieta=%d, iphi=%d", ieta, iphi), historyLength, 0, historyLength * historyScaleDown);
0181 }
0182 }
0183
0184
0185 for (int i = 0; i < Nsector; i++)
0186 {
0187 rm_vector_sectAvg.push_back(new pseudoRunningMean(1, depth));
0188 }
0189 for (int i = 0; i < Ntower; i++)
0190 {
0191 rm_vector_twr.push_back(new pseudoRunningMean(1, depth));
0192 rm_vector_twrTime.push_back(new pseudoRunningMean(1, depth));
0193 rm_vector_twrhit.push_back(new pseudoRunningMean(1, depth));
0194 rm_vector_twrhit_alltrig.push_back(new pseudoRunningMean(1, depth));
0195 }
0196 for (int i = 0; i < 8; i++)
0197 {
0198 rm_packet_number.push_back(new pseudoRunningMean(1, packet_depth));
0199 rm_packet_length.push_back(new pseudoRunningMean(1, packet_depth));
0200 rm_packet_chans.push_back(new pseudoRunningMean(1, packet_depth));
0201 }
0202
0203 OnlMonServer* se = OnlMonServer::instance();
0204
0205 se->registerHisto(this, h2_hcal_hits);
0206 for (int itrig = 0; itrig < 64; itrig++)
0207 {
0208 se->registerHisto(this, h2_hcal_hits_trig[itrig]);
0209 }
0210
0211 se->registerHisto(this, pr_zsFrac_etaphi);
0212 se->registerHisto(this, pr_zsFrac_etaphi_all);
0213 se->registerHisto(this, h_hcal_trig);
0214 se->registerHisto(this, h_evtRec);
0215 se->registerHisto(this, h_caloPack_gl1_clock_diff);
0216 se->registerHisto(this, h2_hcal_rm);
0217 se->registerHisto(this, h2_hcal_rm_alltrig);
0218 se->registerHisto(this, h2_hcal_mean);
0219 se->registerHisto(this, h2_hcal_time);
0220 se->registerHisto(this, h2_hcal_waveform);
0221 se->registerHisto(this, h_event);
0222 se->registerHisto(this, h_sectorAvg_total);
0223 se->registerHisto(this, h_waveform_twrAvg);
0224 se->registerHisto(this, h_waveform_time);
0225 se->registerHisto(this, h_waveform_pedestal);
0226 se->registerHisto(this, h_ntower);
0227 se->registerHisto(this, h1_packet_number);
0228 se->registerHisto(this, h1_packet_length);
0229 se->registerHisto(this, h1_packet_chans);
0230 se->registerHisto(this, h1_packet_event);
0231 se->registerHisto(this, h2_hcal_correlation);
0232 se->registerHisto(this, p2_pre_post);
0233 for(int i = 0; i < nPacketStatus; i++) se->registerHisto(this, h1_packet_status[i]);
0234
0235
0236 for (auto& ih : h_rm_sectorAvg)
0237 {
0238 se->registerHisto(this, ih);
0239 }
0240
0241 for (auto& ieta : h_rm_tower)
0242 {
0243 for (auto& iphi : ieta)
0244 {
0245 se->registerHisto(this, iphi);
0246 }
0247 }
0248
0249 Reset();
0250
0251
0252 WaveformProcessing = new CaloWaveformFitting();
0253
0254 std::string hcaltemplate;
0255 if (getenv("HCALCALIB"))
0256 {
0257 hcaltemplate = getenv("HCALCALIB");
0258 }
0259 else
0260 {
0261 hcaltemplate = ".";
0262 }
0263 hcaltemplate += std::string("/testbeam_ohcal_template.root");
0264
0265
0266 if (anaGL1)
0267 {
0268 erc = new eventReceiverClient(eventReceiverClientHost);
0269 }
0270
0271 return 0;
0272 }
0273
0274 std::vector<float> HcalMon::getSignal(Packet* p, const int channel)
0275 {
0276 double baseline = 0;
0277 for (int s = 0; s < 3; s++)
0278 {
0279 baseline += p->iValue(s, channel);
0280 }
0281 baseline /= 3.;
0282
0283 double signal = 0;
0284 int sample = 0;
0285 for (int s = 3; s < p->iValue(0, "SAMPLES"); s++)
0286 {
0287 if (signal > p->iValue(s, channel))
0288 {
0289 signal = p->iValue(s, channel);
0290 sample = s;
0291 }
0292 }
0293 signal -= baseline;
0294
0295 std::vector<float> result;
0296 result.push_back(signal);
0297 result.push_back(sample);
0298 result.push_back(baseline);
0299
0300 return result;
0301 }
0302
0303 std::vector<float> HcalMon::anaWaveform(Packet* p, const int channel)
0304 {
0305 std::vector<float> waveform;
0306
0307 float supppressed = 1;
0308 if (p->iValue(channel, "SUPPRESSED"))
0309 {
0310 waveform.push_back(p->iValue(channel, "PRE"));
0311 waveform.push_back(p->iValue(channel, "POST"));
0312 }
0313 else
0314 {
0315 supppressed = 0;
0316 for (int s = 0; s < p->iValue(0, "SAMPLES"); s++)
0317 {
0318 waveform.push_back(p->iValue(s, channel));
0319 }
0320 }
0321 std::vector<std::vector<float>> multiple_wfs;
0322 multiple_wfs.push_back(waveform);
0323
0324 std::vector<std::vector<float>> fitresults_ohcal;
0325
0326 fitresults_ohcal = WaveformProcessing->calo_processing_fast(multiple_wfs);
0327
0328 std::vector<float> result;
0329 result = fitresults_ohcal.at(0);
0330 result.push_back(supppressed);
0331
0332 return result;
0333 }
0334
0335 int HcalMon::BeginRun(const int )
0336 {
0337
0338 hit_threshold = 30;
0339 waveform_hit_threshold = 100;
0340
0341
0342
0343
0344 std::vector<runningMean*>::iterator rm_it;
0345 for (rm_it = rm_vector_sectAvg.begin(); rm_it != rm_vector_sectAvg.end(); ++rm_it)
0346 {
0347 (*rm_it)->Reset();
0348 }
0349 for (rm_it = rm_vector_twr.begin(); rm_it != rm_vector_twr.end(); ++rm_it)
0350 {
0351 (*rm_it)->Reset();
0352 }
0353 for (rm_it = rm_packet_number.begin(); rm_it != rm_packet_number.end(); ++rm_it)
0354 {
0355 (*rm_it)->Reset();
0356 }
0357 for (rm_it = rm_packet_length.begin(); rm_it != rm_packet_length.end(); ++rm_it)
0358 {
0359 (*rm_it)->Reset();
0360 }
0361 for (rm_it = rm_packet_chans.begin(); rm_it != rm_packet_chans.end(); ++rm_it)
0362 {
0363 (*rm_it)->Reset();
0364 }
0365 for (rm_it = rm_vector_twrTime.begin(); rm_it != rm_vector_twrTime.end(); ++rm_it)
0366 {
0367 (*rm_it)->Reset();
0368 }
0369 for (rm_it = rm_vector_twrhit.begin(); rm_it != rm_vector_twrhit.end(); ++rm_it)
0370 {
0371 (*rm_it)->Reset();
0372 }
0373 for (rm_it = rm_vector_twrhit_alltrig.begin(); rm_it != rm_vector_twrhit_alltrig.end(); ++rm_it)
0374 {
0375 (*rm_it)->Reset();
0376 }
0377 if (anaGL1)
0378 {
0379 OnlMonServer* se = OnlMonServer::instance();
0380 se->UseGl1();
0381 }
0382 return 0;
0383 }
0384
0385 int HcalMon::process_event(Event* e )
0386 {
0387 if (e->getEvtType() >= 8)
0388 {
0389 return 0;
0390 }
0391 evtcnt++;
0392 h_waveform_twrAvg->Reset();
0393 h1_packet_event->Reset();
0394 unsigned int towerNumber = 0;
0395 float sectorAvg[Nsector] = {0};
0396 int npacket1 = 0;
0397 int npacket2 = 0;
0398 float energy1 = 0;
0399 float energy2 = 0;
0400
0401 bool fillhist = true;
0402 std::vector<bool> trig_bools;
0403 trig_bools.resize(64);
0404 long long int gl1_clock = 0;
0405 bool have_gl1 = false;
0406 if (anaGL1)
0407 {
0408 int evtnr = e->getEvtSequence();
0409 Event* gl1Event = erc->getEvent(evtnr);
0410 if (gl1Event)
0411 {
0412 OnlMonServer* se = OnlMonServer::instance();
0413 se->IncrementGl1FoundCounter();
0414 have_gl1 = true;
0415 Packet* p = gl1Event->getPacket(14001);
0416 h_evtRec->Fill(0.0, 1.0);
0417 if (p)
0418 {
0419 gl1_clock = p->lValue(0, "BCO");
0420 uint64_t triggervec = p->lValue(0, "ScaledVector");
0421 for (int i = 0; i < 64; i++)
0422 {
0423 bool trig_decision = ((triggervec & 0x1U) == 0x1U);
0424 trig_bools[i] = trig_decision;
0425
0426 if (trig_decision)
0427 {
0428 h_hcal_trig->Fill(i);
0429 }
0430 triggervec = (triggervec >> 1U);
0431 }
0432
0433 delete p;
0434 }
0435 delete gl1Event;
0436 }
0437 else
0438 {
0439 std::cout << "GL1 event is null" << std::endl;
0440 h_evtRec->Fill(0.0, 0.0);
0441 }
0442
0443 if (usetrig4_10)
0444 {
0445
0446 if (
0447 trig_bools.at(TriggerEnum::BitCodes::MBD_NS1_ZVRTX10) == 0
0448 && trig_bools.at(TriggerEnum::BitCodes::MBD_NS1_ZVRTX13) == 0
0449 && trig_bools.at(TriggerEnum::BitCodes::MBD_NS1_ZVRTX150) == 0
0450 && trig_bools.at(TriggerEnum::BitCodes::HCAL_SINGLES) == 0
0451 )
0452 {
0453 fillhist = false;
0454 }
0455
0456 if (trig_bools.at(TriggerEnum::BitCodes::RANDOM)
0457 || trig_bools.at(TriggerEnum::BitCodes::HCAL_SINGLES)
0458 || trig_bools.at(TriggerEnum::BitCodes::HCAL_NARROW_VERT)
0459 || trig_bools.at(TriggerEnum::BitCodes::HCAL_WIDE_VERT)
0460 || trig_bools.at(TriggerEnum::BitCodes::HCAL_NARROW_HORZ)
0461 || trig_bools.at(TriggerEnum::BitCodes::HCAL_WIDE_HORZ))
0462 {
0463 hit_threshold = 1000;
0464 waveform_hit_threshold = 1500;
0465 }
0466 }
0467 }
0468
0469 for (int packet = packetlow; packet <= packethigh; packet++)
0470 {
0471 Packet* p = e->getPacket(packet);
0472 int zero[1] = {0};
0473 int one[1] = {1};
0474 int packet_bin = packet - packetlow + 1;
0475 if (p)
0476 {
0477 rm_packet_number[packet - packetlow]->Add(one);
0478 int packet_length[1] = {p->getLength()};
0479 rm_packet_length[packet - packetlow]->Add(packet_length);
0480 h1_packet_status[(int)p->getStatus()]->Fill(packet);
0481
0482 h1_packet_length->SetBinContent(packet_bin, rm_packet_length[packet - packetlow]->getMean(0));
0483
0484 h1_packet_event->SetBinContent(packet - packetlow + 1, p->lValue(0, "CLOCK"));
0485 if (have_gl1)
0486 {
0487 long long int p_clock = p->lValue(0, "CLOCK");
0488 long long int diff = (p_clock - gl1_clock) % 65536;
0489 h_caloPack_gl1_clock_diff->Fill(packet, diff);
0490 }
0491 int nChannels = p->iValue(0, "CHANNELS");
0492 if (nChannels > m_nChannels)
0493 {
0494 return -1;
0495 }
0496 else
0497 {
0498 npacket1++;
0499 rm_packet_chans[packet - packetlow]->Add(&nChannels);
0500 h1_packet_chans->SetBinContent(packet_bin, rm_packet_chans[packet - packetlow]->getMean(0));
0501 }
0502 for (int c = 0; c < nChannels; c++)
0503 {
0504 towerNumber++;
0505
0506
0507 std::vector<float> result = anaWaveform(p, c);
0508 float signal = result.at(0);
0509 float time = result.at(1);
0510 float pedestal = result.at(2);
0511 float suppressed = result.at(result.size() - 1);
0512 float prepost = p->iValue(c, "PRE") - p->iValue(c, "POST");
0513 if (signal > 15 && signal < 15000)
0514 {
0515 energy1 += signal;
0516 }
0517
0518
0519 unsigned int key = TowerInfoDefs::encode_hcal(towerNumber - 1);
0520 unsigned int phi_bin = TowerInfoDefs::getCaloTowerPhiBin(key);
0521 unsigned int eta_bin = TowerInfoDefs::getCaloTowerEtaBin(key);
0522 int sectorNumber = phi_bin / 2 + 1;
0523 int bin = h2_hcal_mean->FindBin(eta_bin + 0.5, phi_bin + 0.5);
0524
0525 if (fillhist)
0526 {
0527 if (signal > hit_threshold)
0528 {
0529 rm_vector_twrTime[towerNumber - 1]->Add(&time);
0530 rm_vector_twrhit[towerNumber - 1]->Add(one);
0531 }
0532 else
0533 {
0534 rm_vector_twrhit[towerNumber - 1]->Add(zero);
0535 }
0536 h_waveform_pedestal->Fill(pedestal);
0537
0538 if (suppressed == 1)
0539 {
0540 pr_zsFrac_etaphi->Fill(eta_bin, phi_bin, 0);
0541 }
0542 else
0543 {
0544 pr_zsFrac_etaphi->Fill(eta_bin, phi_bin, 1);
0545 }
0546
0547 sectorAvg[sectorNumber - 1] += signal;
0548
0549 rm_vector_twr[towerNumber - 1]->Add(&signal);
0550
0551 h2_hcal_mean->SetBinContent(bin, h2_hcal_mean->GetBinContent(bin) + signal);
0552 h2_hcal_rm->SetBinContent(bin, rm_vector_twrhit[towerNumber - 1]->getMean(0));
0553 h2_hcal_time->SetBinContent(bin, rm_vector_twrTime[towerNumber - 1]->getMean(0));
0554
0555
0556 if (evtcnt <= historyLength * historyScaleDown)
0557 {
0558
0559 if (evtcnt % historyScaleDown == 0)
0560 {
0561 h_rm_tower[eta_bin][phi_bin]->SetBinContent(evtcnt / historyScaleDown, rm_vector_twrhit[towerNumber - 1]->getMean(0));
0562 }
0563 }
0564 else
0565 {
0566
0567 if (evtcnt % historyScaleDown == 0)
0568 {
0569 for (int ib = 1; ib < historyLength; ib++)
0570 {
0571 h_rm_tower[eta_bin][phi_bin]->SetBinContent(ib, h_rm_tower[eta_bin][phi_bin]->GetBinContent(ib + 1));
0572 }
0573 h_rm_tower[eta_bin][phi_bin]->SetBinContent(historyLength, rm_vector_twrhit[towerNumber - 1]->getMean(0));
0574 }
0575 }
0576 }
0577
0578 if (suppressed == 1)
0579 {
0580 pr_zsFrac_etaphi_all->Fill(eta_bin, phi_bin, 0);
0581 }
0582 else
0583 {
0584 pr_zsFrac_etaphi_all->Fill(eta_bin, phi_bin, 1);
0585 }
0586
0587 for (int s = 0; s < p->iValue(0, "SAMPLES"); s++)
0588 {
0589 h_waveform_twrAvg->Fill(s, p->iValue(s, c));
0590 if (signal > waveform_hit_threshold)
0591 {
0592 h2_hcal_waveform->Fill(s, (p->iValue(s, c) - pedestal));
0593 }
0594 }
0595 if (signal > waveform_hit_threshold)
0596 {
0597 h_waveform_time->Fill(time);
0598 }
0599
0600 if (signal > hit_threshold)
0601 {
0602 h2_hcal_hits->Fill(eta_bin + 0.5, phi_bin + 0.5);
0603 for (int itrig = 0; itrig < 64; itrig++)
0604 {
0605 if (trig_bools[itrig])
0606 {
0607 h2_hcal_hits_trig[itrig]->Fill(eta_bin + 0.5, phi_bin + 0.5);
0608 }
0609 }
0610 rm_vector_twrhit_alltrig[towerNumber - 1]->Add(one);
0611 }
0612 else
0613 {
0614 rm_vector_twrhit_alltrig[towerNumber - 1]->Add(zero);
0615 }
0616 if (prepost > 0)
0617 {
0618 p2_pre_post->Fill(eta_bin, phi_bin, prepost);
0619 p2_pre_post->Fill(eta_bin, phi_bin, -prepost);
0620 }
0621 h2_hcal_rm_alltrig->SetBinContent(bin, rm_vector_twrhit_alltrig[towerNumber - 1]->getMean(0));
0622
0623 }
0624
0625 }
0626 else
0627 {
0628 towerNumber += 192;
0629 rm_packet_number[packet - packetlow]->Add(zero);
0630 }
0631 h1_packet_number->SetBinContent(packet_bin, rm_packet_number[packet - packetlow]->getMean(0));
0632 delete p;
0633 }
0634
0635 int packetlowdiff = 15002 - packetlow;
0636 int packethighdiff = 15016 - packethigh;
0637
0638 if (npacket1 == 4)
0639 {
0640 for (int i = packetlowdiff; i <= packethighdiff; i++)
0641 {
0642 Packet* p = e->getPacket(i);
0643 if (p)
0644 {
0645 int nChannels = p->iValue(0, "CHANNELS");
0646 if (nChannels > m_nChannels)
0647 {
0648 return -1;
0649 }
0650 else
0651 {
0652 npacket2++;
0653 }
0654 for (int c = 0; c < nChannels; c++)
0655 {
0656
0657 std::vector<float> result = anaWaveform(p, c);
0658 float signal = result.at(0);
0659 if (signal > 15 && signal < 15000)
0660 {
0661 energy2 += signal;
0662 }
0663 }
0664 }
0665 delete p;
0666 }
0667 }
0668 if (npacket1 == 4 && npacket2 == 4)
0669 {
0670 if (packetlow == 8001)
0671 {
0672 h2_hcal_correlation->Fill(energy1, energy2);
0673 }
0674 else
0675 {
0676 h2_hcal_correlation->Fill(energy2, energy1);
0677 }
0678 }
0679
0680 for (int isec = 0; isec < Nsector; isec++)
0681 {
0682 sectorAvg[isec] /= 48;
0683 h_sectorAvg_total->Fill(isec + 1, sectorAvg[isec]);
0684 rm_vector_sectAvg[isec]->Add(§orAvg[isec]);
0685 if (evtcnt <= historyLength * historyScaleDown)
0686 {
0687
0688 if (evtcnt % historyScaleDown == 0)
0689 {
0690 h_rm_sectorAvg[isec]->SetBinContent(evtcnt / historyScaleDown, rm_vector_sectAvg[isec]->getMean(0));
0691 }
0692 }
0693 else
0694 {
0695
0696 if (evtcnt % historyScaleDown == 0)
0697 {
0698 for (int ib = 1; ib < historyLength; ib++)
0699 {
0700 h_rm_sectorAvg[isec]->SetBinContent(ib, h_rm_sectorAvg[isec]->GetBinContent(ib + 1));
0701 }
0702 h_rm_sectorAvg[isec]->SetBinContent(historyLength, rm_vector_sectAvg[isec]->getMean(0));
0703 }
0704 }
0705
0706 }
0707
0708
0709 h_event->Fill(0);
0710 h_waveform_twrAvg->Scale(1. / 32. / 48.);
0711
0712 return 0;
0713 }
0714
0715 int HcalMon::Reset()
0716 {
0717
0718 evtcnt = 0;
0719 idummy = 0;
0720 return 0;
0721 }