DrawRawHist_tool.cc
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////
2 /// \file DrawRawHist_tool.cc
3 /// \author T. Usher
4 ////////////////////////////////////////////////////////////////////////
5 
14 #include "nuevdb/EventDisplayBase/EventHolder.h"
15 
18 
19 #include "TH1F.h"
20 
21 namespace evdb_tool {
22 
23  class DrawRawHist : public IWaveformDrawer {
24  public:
25  explicit DrawRawHist(const fhicl::ParameterSet& pset);
26 
27  ~DrawRawHist();
28 
29  void configure(const fhicl::ParameterSet& pset) override;
30  void Fill(evdb::View2D&, raw::ChannelID_t&, float, float) override;
31  void Draw(const std::string&, float, float) override;
32 
33  float
34  getMaximum() const override
35  {
36  return fMaximum;
37  };
38  float
39  getMinimum() const override
40  {
41  return fMinimum;
42  };
43 
44  private:
45  void BookHistogram(raw::ChannelID_t&, float, float);
46 
47  float fMaximum;
48  float fMinimum;
49 
50  std::unique_ptr<TH1F> fRawDigitHist;
51  };
52 
53  //----------------------------------------------------------------------
54  // Constructor.
56 
58 
59  void
61  {
62  return;
63  }
64 
65  void
66  DrawRawHist::Fill(evdb::View2D& view2D, raw::ChannelID_t& channel, float lowBin, float numTicks)
67  {
69 
70  //grab the singleton with the event
71  const art::Event* event = evdb::EventHolder::Instance()->GetEvent();
72  if (!event) return;
73 
74  // Handle histograms
75  BookHistogram(channel, lowBin, numTicks);
76 
78  fMaximum = std::numeric_limits<float>::lowest();
79 
80  // Loop over the possible producers of RawDigits
81  for (const auto& rawDataLabel : rawOpt->fRawDataLabels) {
82  art::Handle<std::vector<raw::RawDigit>> rawDigitVecHandle;
83  event->getByLabel(rawDataLabel, rawDigitVecHandle);
84 
85  if (!rawDigitVecHandle.isValid()) continue;
86 
87  for (size_t rawDigitIdx = 0; rawDigitIdx < rawDigitVecHandle->size(); rawDigitIdx++) {
88  art::Ptr<raw::RawDigit> rawDigit(rawDigitVecHandle, rawDigitIdx);
89 
90  if (rawDigit->Channel() != channel) continue;
91 
92  // We will need the pedestal service...
93  const lariov::DetPedestalProvider& pedestalRetrievalAlg =
95 
96  // recover the pedestal
97  float pedestal = 0;
98 
99  if (rawOpt->fPedestalOption == 0) { pedestal = pedestalRetrievalAlg.PedMean(channel); }
100  else if (rawOpt->fPedestalOption == 1) {
101  pedestal = rawDigit->GetPedestal();
102  }
103  else if (rawOpt->fPedestalOption == 2) {
104  pedestal = 0;
105  }
106  else {
107  mf::LogWarning("DrawRawHist")
108  << " PedestalOption is not understood: " << rawOpt->fPedestalOption
109  << ". Pedestals not subtracted.";
110  }
111 
112  std::vector<short> uncompressed(rawDigit->Samples());
113  raw::Uncompress(rawDigit->ADCs(), uncompressed, rawDigit->Compression());
114 
115  TH1F* histPtr = fRawDigitHist.get();
116 
117  for (size_t idx = 0; idx < uncompressed.size(); idx++) {
118  float signalVal = float(uncompressed[idx]) - pedestal;
119 
120  histPtr->Fill(float(idx) + 0.5, signalVal);
121  }
122 
123  short minimumVal = *std::min_element(uncompressed.begin(), uncompressed.end());
124  short maximumVal = *std::max_element(uncompressed.begin(), uncompressed.end());
125 
126  fMinimum = float(minimumVal) - pedestal;
127  fMaximum = float(maximumVal) - pedestal;
128 
129  histPtr->SetLineColor(kBlack);
130 
131  // There is only one channel displayed so if here we are done
132  break;
133  }
134  }
135 
136  return;
137  }
138 
139  void
140  DrawRawHist::Draw(const std::string& options, float maxLowVal, float maxHiVal)
141  {
142  TH1F* histPtr = fRawDigitHist.get();
143 
144  // Do we have valid limits to set?
145  histPtr->SetMaximum(maxHiVal);
146  histPtr->SetMinimum(maxLowVal);
147 
148  histPtr->Draw(options.c_str());
149 
150  return;
151  }
152 
153  //......................................................................
154  void
155  DrawRawHist::BookHistogram(raw::ChannelID_t& channel, float startTick, float numTicks)
156  {
159 
160  // Get rid of the previous histograms
161  if (fRawDigitHist.get()) fRawDigitHist.reset();
162 
163  // figure out the signal type for this plane, assume that
164  // plane n in each TPC/cryostat has the same type
165  geo::SigType_t sigType = geo->SignalType(channel);
166  int numBins = numTicks;
167 
168  fRawDigitHist = std::make_unique<TH1F>(
169  "fRAWQHisto", ";t [ticks];q [ADC]", numBins, startTick, startTick + numTicks);
170 
171  TH1F* histPtr = fRawDigitHist.get();
172 
173  histPtr->SetMaximum(cst->fRawQHigh[(size_t)sigType]);
174  histPtr->SetMinimum(cst->fRawQLow[(size_t)sigType]);
175 
176  histPtr->SetLineColor(kBlack);
177  histPtr->SetLineWidth(1);
178 
179  histPtr->GetXaxis()->SetLabelSize(0.10); // was 0.15
180  histPtr->GetXaxis()->SetLabelOffset(0.01); // was 0.00
181  histPtr->GetXaxis()->SetTitleSize(0.10); // was 0.15
182  histPtr->GetXaxis()->SetTitleOffset(0.60); // was 0.80
183 
184  histPtr->GetYaxis()->SetLabelSize(0.10); // was 0.15
185  histPtr->GetYaxis()->SetLabelOffset(0.002); // was 0.00
186  histPtr->GetYaxis()->SetTitleSize(0.10); // was 0.15
187  histPtr->GetYaxis()->SetTitleOffset(0.16); // was 0.80
188  }
189 
191 }
float GetPedestal() const
Definition: RawDigit.h:214
const ADCvector_t & ADCs() const
Reference to the compressed ADC count vector.
Definition: RawDigit.h:210
std::vector< double > fRawQLow
low edge of ADC values for drawing raw digits
#define DEFINE_ART_CLASS_TOOL(tool)
Definition: ToolMacros.h:42
ULong64_t Samples() const
Number of samples in the uncompressed ADC data.
Definition: RawDigit.h:213
void Draw(const std::string &, float, float) override
std::string string
Definition: nybbler.cc:12
void Fill(evdb::View2D &, raw::ChannelID_t &, float, float) override
ChannelID_t Channel() const
DAQ channel this raw data was read from.
Definition: RawDigit.h:212
uint8_t channel
Definition: CRTFragment.hh:201
SigType_t SignalType(geo::PlaneID const &pid) const
Returns the type of signal on the channels of specified TPC plane.
art framework interface to geometry description
bool isValid() const noexcept
Definition: Handle.h:191
float getMinimum() const override
enum geo::_plane_sigtype SigType_t
This provides an interface for tools which are tasked with drawing the "wire" data (deconvolved wavef...
static int max(int a, int b)
float getMaximum() const override
DrawRawHist(const fhicl::ParameterSet &pset)
std::vector< double > fRawQHigh
high edge of ADC values for drawing raw digits
raw::Compress_t Compression() const
Compression algorithm used to store the ADC counts.
Definition: RawDigit.h:216
MaybeLogger_< ELseverityLevel::ELsev_warning, false > LogWarning
std::vector< art::InputTag > fRawDataLabels
module label that made the raw digits, default is daq
virtual float PedMean(raw::ChannelID_t ch) const =0
Retrieve pedestal information.
void configure(const fhicl::ParameterSet &pset) override
unsigned int ChannelID_t
Type representing the ID of a readout channel.
Definition: RawTypes.h:28
void Uncompress(const std::vector< short > &adc, std::vector< short > &uncompressed, raw::Compress_t compress)
Uncompresses a raw data buffer.
Definition: raw.cxx:776
int fPedestalOption
0: use DetPedestalService; 1: Use pedestal in raw::RawDigt; 2: no ped subtraction ...
LArSoft geometry interface.
Definition: ChannelGeo.h:16
std::unique_ptr< TH1F > fRawDigitHist
void BookHistogram(raw::ChannelID_t &, float, float)
Event finding and building.