10 : fMinChannelId(frag->GetChannelId()), fMaxChannelId(frag->GetChannelId()), fNumberOfHits(1),
11 fDeadTime(frag->GetDeadTime()), fMinTimeStamp(frag->GetTimeStampNs()), fMaxTimeStamp(frag->GetTimeStampNs())
17 UInt_t channelId = frag->GetChannelId();
18 auto timeStamp = frag->GetTimeStampNs();
42 std::cout <<
"channel " <<
hex(address, 4) <<
": " <<
fDeadTime / 100000 <<
" ms deadtime out of ";
44 std::cout <<
"empty channel" << std::endl;
95 <<
"PPG cycle is " <<
fPPGCycleLength / 100000 <<
" ms long." << std::endl
99 <<
" % packet survival." << std::endl;
102 std::cout <<
"detector type " << std::setw(2) << fNumberOfGoodFragment.first <<
": " << std::setw(12)
103 << fNumberOfGoodFragment.second <<
" good, ";
109 << 100. *
static_cast<double>(
fNumberOfBadFragments.at(fNumberOfGoodFragment.first)) /
static_cast<double>(fNumberOfGoodFragment.second)
112 std::cout <<
" bad fragments." << std::endl;
115 iter.second.Print(iter.first);
124 UInt_t channelAddress = frag->GetAddress();
132 if(frag->GetNetworkPacketNumber() > 0) {
165 if(iter.first < minChannel) { minChannel = iter.first; }
166 if(iter.first > maxChannel) { maxChannel = iter.first; }
170 if(
fIdHist !=
nullptr &&
fIdHist->GetNbinsX() !=
static_cast<Int_t
>(maxChannel - minChannel + 1)) {
175 fIdHist =
new TH1F(
"IdHist",
"Event survival;channel number;survival rate [%]", maxChannel - minChannel + 1,
176 minChannel, maxChannel + 1);
179 fIdHist->SetAxisRange(minChannel, maxChannel + 1);
183 if(iter.second.MinChannelId() != 0 || iter.second.MinChannelId() != iter.second.MaxChannelId()) {
185 100. *
static_cast<double>(iter.second.NumberOfHits()) /
static_cast<double>(iter.second.MaxChannelId() - iter.second.MinChannelId() + 1));
194 std::ofstream statsOut(fileName);
195 statsOut << std::endl
199 statsOut <<
"Good fragments:";
201 statsOut <<
" " << iter.second <<
" of type " << iter.first;
203 statsOut << std::endl;
205 statsOut <<
"Bad fragments:";
207 statsOut <<
" " << iter.second <<
" of type " << iter.first;
209 statsOut << std::endl;
213 if(chan ==
nullptr) {
216 statsOut <<
hex(iter.first, 4) <<
":\t" << chan->GetName()
217 <<
"\tdead time: " <<
static_cast<float>(iter.second.DeadTime()) / 1e9 <<
" seconds." << std::endl;
219 statsOut << std::endl;
std::string hex(T val, int width=-1)
static TChannel * GetChannel(unsigned int temp_address, bool warn=false)
ULong64_t GetCycleLength()
TParsingDiagnosticsData()
int64_t fMinTimeStamp
minimum timestamp per channel address
UInt_t fMaxChannelId
maximum channel id per channel address
void Update(const std::shared_ptr< const TFragment > &frag)
int64_t fDeadTime
deadtime per channel address
UInt_t fMinChannelId
minimum channel id per channel address
void Print(UInt_t address) const
Long_t fNumberOfHits
number of hits per channel address
int64_t fMaxTimeStamp
maximum timestamp per channel address
void Copy(TObject &) const override
time_t fMaxDaqTimeStamp
maximum daq timestamp
Int_t fMinNetworkPacketNumber
minimum network packet id
time_t fMinDaqTimeStamp
minimum daq timestamp
void Print(Option_t *opt="") const override
void Clear(Option_t *opt="all") override
void Draw(Option_t *opt="") override
ULong64_t fPPGCycleLength
TH1F * fIdHist
histogram of event survival
void WriteToFile(const char *) const
std::unordered_map< UInt_t, TParsingDiagnosticsData > fChannelAddressData
unordered_map of data per channel address
Int_t fMaxNetworkPacketNumber
maximum network packet id
std::unordered_map< Short_t, Long_t > fNumberOfBadFragments
unordered_map of number of bad fragments per detector type
Long_t fNumberOfNetworkPackets
void GoodFragment(const std::shared_ptr< const TFragment > &)
std::unordered_map< Short_t, Long_t > fNumberOfGoodFragments
unordered_map of number of good fragments per detector type