Skip to content

Commit 5a1bd61

Browse files
Merge pull request #642 from SBNSoftware/feature/gputnam-TPCChannelInfo
Save pedestal and RMS calculation in ChannelInfo object per TPC channel.
2 parents a964f10 + e495d85 commit 5a1bd61

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

sbndcode/Decoders/TPC/SBNDTPCDecoder.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ class daq::SBNDTPCDecoder : public art::EDProducer {
9494
Config _config;
9595

9696
void getMedianSigma(const std::vector<int16_t> &v_adc, float &median, float &sigma);
97+
float getEvenFraction(const std::vector<int16_t> &v_adc) const;
98+
float getxBADFraction(const std::vector<int16_t> &v_adc) const;
99+
97100

98101
};
99102

sbndcode/Decoders/TPC/SBNDTPCDecoder_module.cc

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "sbndaq-artdaq-core/Overlays/SBND/NevisTPCFragment.hh"
3535
#include "sbndaq-artdaq-core/Overlays/SBND/NevisTPC/NevisTPCTypes.hh"
3636
#include "sbndaq-artdaq-core/Overlays/SBND/NevisTPC/NevisTPCUtilities.hh"
37+
#include "sbnobj/Common/Analysis/TPCChannelInfo.hh"
3738

3839

3940
DEFINE_ART_MODULE(daq::SBNDTPCDecoder)
@@ -77,6 +78,7 @@ daq::SBNDTPCDecoder::SBNDTPCDecoder(fhicl::ParameterSet const & param):
7778
produces<RawDigits>();
7879
produces<RDTimeStamps>();
7980
produces<RDTsAssocs>();
81+
produces<std::vector<anab::TPCChannelInfo>>();
8082
if (_config.produce_header) {
8183
produces<std::vector<tpcAnalysis::TPCDecodeAna>>();
8284
}
@@ -113,6 +115,7 @@ void daq::SBNDTPCDecoder::produce(art::Event & event)
113115
std::unique_ptr<RawDigits> rawdigit_collection(new RawDigits);
114116
std::unique_ptr<RDTimeStamps> rdts_collection(new RDTimeStamps);
115117
std::unique_ptr<RDTsAssocs> rdtsassoc_collection(new RDTsAssocs);
118+
std::unique_ptr<std::vector<anab::TPCChannelInfo>> channeldata_collection(new std::vector<anab::TPCChannelInfo>);
116119
std::unique_ptr<std::vector<tpcAnalysis::TPCDecodeAna>> header_collection(new std::vector<tpcAnalysis::TPCDecodeAna>);
117120

118121
if ( daq_handle.isValid() ) {
@@ -125,10 +128,16 @@ void daq::SBNDTPCDecoder::produce(art::Event & event)
125128
mf::LogWarning("SBNDTPCDecoder_module") << " Invalid fragment handle: Skipping TPC digit decoding";
126129
}
127130

131+
for (const raw::RawDigit &r: *rawdigit_collection) {
132+
anab::TPCChannelInfo i {r.Channel(), r.GetPedestal(), r.GetSigma(), getEvenFraction(r.ADCs()), getxBADFraction(r.ADCs())};
133+
channeldata_collection->push_back(i);
134+
}
135+
128136

129137
event.put(std::move(rawdigit_collection));
130138
event.put(std::move(rdts_collection));
131139
event.put(std::move(rdtsassoc_collection));
140+
event.put(std::move(channeldata_collection));
132141

133142
if (_config.produce_header) {
134143
event.put(std::move(header_collection));
@@ -219,6 +228,23 @@ uint32_t daq::SBNDTPCDecoder::compute_checksum(sbndaq::NevisTPCFragment &fragmen
219228

220229
}
221230

231+
float daq::SBNDTPCDecoder::getxBADFraction(const std::vector<int16_t> &v_adc) const {
232+
int n_bad = 0;
233+
for (int16_t s: v_adc) {
234+
if (s == 0xBAD) n_bad += 1;
235+
}
236+
return ((float)n_bad) / v_adc.size();
237+
238+
}
239+
240+
float daq::SBNDTPCDecoder::getEvenFraction(const std::vector<int16_t> &v_adc) const {
241+
int n_even = 0;
242+
for (int16_t s: v_adc) {
243+
if (s % 2 == 0) n_even += 1;
244+
}
245+
return ((float)n_even) / v_adc.size();
246+
247+
}
222248

223249

224250
void daq::SBNDTPCDecoder::getMedianSigma(const std::vector<int16_t> &v_adc, float &median,

0 commit comments

Comments
 (0)