Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
evd::TQPad Class Reference

#include <TQPad.h>

Inheritance diagram for evd::TQPad:
evd::DrawingPad

Public Member Functions

 TQPad (const char *nm, const char *ti, double x1, double y1, double x2, double y2, const char *opt, unsigned int plane, unsigned int wire)
 
 ~TQPad ()
 
void Draw ()
 
void SetPlaneWire (unsigned int plane=0, unsigned int wire=0)
 
- Public Member Functions inherited from evd::DrawingPad
 DrawingPad (const char *nm, const char *ti, double x1, double y1, double y2, double x2)
 
 ~DrawingPad ()
 
TPad * Pad ()
 
HeaderDrawerHeaderDraw ()
 
evd_tool::IExperimentDrawerGeometryDraw ()
 
SimulationDrawerSimulationDraw ()
 
RawDataDrawerRawDataDraw ()
 
RecoBaseDrawerRecoBaseDraw ()
 
AnalysisBaseDrawerAnalysisBaseDraw ()
 
HitSelectorHitSelectorGet ()
 

Private Types

using IWFHitDrawerPtr = std::unique_ptr< evdb_tool::IWFHitDrawer >
 
using IWaveformDrawerPtr = std::unique_ptr< evdb_tool::IWaveformDrawer >
 

Private Member Functions

void BookHistogram ()
 

Private Attributes

unsigned int fWire
 
unsigned int fPlane
 Which plane in the detector. More...
 
int fTQ
 0 = plot shows charge only, 1 = plot shows charge vs time for a wire More...
 
TH1F * fFrameHist
 A dummy histogram to define the axes. More...
 
evdb::View2D * fView
 Superimpose scale on 1D histo. More...
 
IWFHitDrawerPtr fHitDrawerTool
 An instance of the tool to draw hits. More...
 
IWaveformDrawerPtr fRawDigitDrawerTool
 An instance of the tool to draw hits. More...
 
IWaveformDrawerPtr fWireDrawerTool
 An instance of the tool to draw hits. More...
 

Additional Inherited Members

- Protected Types inherited from evd::DrawingPad
using IExperimentDrawerPtr = std::unique_ptr< evd_tool::IExperimentDrawer >
 
- Protected Attributes inherited from evd::DrawingPad
TPad * fPad
 The ROOT graphics pad. More...
 
HeaderDrawerfHeaderDraw
 Drawer for event header info. More...
 
IExperimentDrawerPtr fGeometryDraw
 Drawer for detector geometry. More...
 
SimulationDrawerfSimulationDraw
 Drawer for simulation objects. More...
 
RawDataDrawerfRawDataDraw
 Drawer for raw data. More...
 
RecoBaseDrawerfRecoBaseDraw
 Drawer for recobase objects. More...
 
AnalysisBaseDrawerfAnalysisBaseDraw
 Drawer for analysisbase objects. More...
 

Detailed Description

Definition at line 24 of file TQPad.h.

Member Typedef Documentation

Definition at line 47 of file TQPad.h.

using evd::TQPad::IWFHitDrawerPtr = std::unique_ptr<evdb_tool::IWFHitDrawer>
private

Definition at line 46 of file TQPad.h.

Constructor & Destructor Documentation

evd::TQPad::TQPad ( const char *  nm,
const char *  ti,
double  x1,
double  y1,
double  x2,
double  y2,
const char *  opt,
unsigned int  plane,
unsigned int  wire 
)

Definition at line 36 of file TQPad.cxx.

45  : DrawingPad(nm, ti, x1, y1, x2, y2), fWire(wire), fPlane(plane), fFrameHist(0)
46  {
48  unsigned int planes = geo->Nplanes();
49 
50  this->Pad()->cd();
51 
52  this->Pad()->SetLeftMargin(0.050);
53  this->Pad()->SetRightMargin(0.050);
54 
55  this->Pad()->SetTopMargin(0.005);
56  this->Pad()->SetBottomMargin(0.110);
57 
58  // there has to be a better way of doing this that does
59  // not have a case for each number of planes in a detector
60  if (planes == 2 && fPlane > 0) {
61  this->Pad()->SetTopMargin(0.110);
62  this->Pad()->SetBottomMargin(0.010);
63  }
64  else if (planes > 2) {
65  if (fPlane == 1) {
66  this->Pad()->SetTopMargin(0.005);
67  this->Pad()->SetBottomMargin(0.010);
68  }
69  else if (fPlane == 2) {
70  this->Pad()->SetTopMargin(0.110);
71  this->Pad()->SetBottomMargin(0.010);
72  }
73  }
74 
76  if (opts == "TQ") {
77  fTQ = kTQ;
78  // BB adjust the vertical spacing
79  this->Pad()->SetTopMargin(0);
80  this->Pad()->SetBottomMargin(0.2);
81  }
82  if (opts == "Q") { fTQ = kQ; }
83 
84  this->BookHistogram();
85  fView = new evdb::View2D();
86 
89 
90  fHitDrawerTool = art::make_tool<evdb_tool::IWFHitDrawer>(recoOptions->fHitDrawerParams);
92  art::make_tool<evdb_tool::IWaveformDrawer>(rawOptions->fRawDigitDrawerParams);
93  fWireDrawerTool = art::make_tool<evdb_tool::IWaveformDrawer>(recoOptions->fWireDrawerParams);
94  }
IWFHitDrawerPtr fHitDrawerTool
An instance of the tool to draw hits.
Definition: TQPad.h:54
unsigned int fPlane
Which plane in the detector.
Definition: TQPad.h:50
TH1F * fFrameHist
A dummy histogram to define the axes.
Definition: TQPad.h:52
std::string string
Definition: nybbler.cc:12
void BookHistogram()
Definition: TQPad.cxx:244
IWaveformDrawerPtr fWireDrawerTool
An instance of the tool to draw hits.
Definition: TQPad.h:56
opt
Definition: train.py:196
fhicl::ParameterSet fRawDigitDrawerParams
FHICL parameters for the RawDigit waveform display.
unsigned int fWire
Definition: TQPad.h:49
evdb::View2D * fView
Superimpose scale on 1D histo.
Definition: TQPad.h:53
unsigned int Nplanes(unsigned int tpc=0, unsigned int cstat=0) const
Returns the total number of wire planes in the specified TPC.
fhicl::ParameterSet fWireDrawerParams
FHICL parameters for the wire drawing.
TPad * Pad()
Definition: DrawingPad.h:37
static const int kQ
Definition: TQPad.cxx:31
static const int kTQ
Definition: TQPad.cxx:32
IWaveformDrawerPtr fRawDigitDrawerTool
An instance of the tool to draw hits.
Definition: TQPad.h:55
int fTQ
0 = plot shows charge only, 1 = plot shows charge vs time for a wire
Definition: TQPad.h:51
opts
Definition: ECLAPI.py:241
fhicl::ParameterSet fHitDrawerParams
FHICL parameters for the hit drawing.
LArSoft geometry interface.
Definition: ChannelGeo.h:16
DrawingPad(const char *nm, const char *ti, double x1, double y1, double y2, double x2)
Definition: DrawingPad.cxx:36
evd::TQPad::~TQPad ( )

Definition at line 98 of file TQPad.cxx.

99  {
100  if (fView) {
101  delete fView;
102  fView = 0;
103  }
104  if (fFrameHist) {
105  delete fFrameHist;
106  fFrameHist = 0;
107  }
108  }
TH1F * fFrameHist
A dummy histogram to define the axes.
Definition: TQPad.h:52
evdb::View2D * fView
Superimpose scale on 1D histo.
Definition: TQPad.h:53

Member Function Documentation

void evd::TQPad::BookHistogram ( )
private
Todo:
decide if ndivraw and ndivreco are useful

Definition at line 244 of file TQPad.cxx.

245  {
246  if (fFrameHist) {
247  delete fFrameHist;
248  fFrameHist = 0;
249  }
250 
253 
254  // figure out the signal type for this plane, assume that
255  // plane n in each TPC/cryostat has the same type
256  geo::PlaneID planeid(drawopt->CurrentTPC(), fPlane);
258  geo::SigType_t sigType = geo->SignalType(planeid);
259 
260  /// \todo decide if ndivraw and ndivreco are useful
261  double qxloraw = cst->fRawQLow[(size_t)sigType];
262  double qxhiraw = cst->fRawQHigh[(size_t)sigType];
263  double tqxlo = 1. * this->RawDataDraw()->StartTick();
264  double tqxhi = 1. * this->RawDataDraw()->TotalClockTicks();
265 
266  switch (fTQ) {
267  case kQ:
268  fFrameHist = new TH1F("fFrameHist", ";t [ticks];[ADC]", 2, 0., 1.);
269  fFrameHist->SetMaximum(qxhiraw);
270  fFrameHist->SetMinimum(qxloraw);
271  break; // kQ
272  case kTQ:
273  fFrameHist = new TH1F("fFrameHist", ";t [ticks];q [ADC]", (int)tqxhi, tqxlo, tqxhi + tqxlo);
274  break;
275  default: throw cet::exception("TQPad") << __func__ << ": unexpected quantity #" << fTQ << "\n";
276  } //end if fTQ == kTQ
277 
278  // Set the label, title size and offsets
279  // Note this is the base histogram so this control these for both the raw and wire histograms
280  fFrameHist->GetXaxis()->SetLabelSize(0.10);
281  fFrameHist->GetXaxis()->SetLabelOffset(0.00);
282  fFrameHist->GetXaxis()->SetTitleSize(0.10);
283  fFrameHist->GetXaxis()->SetTitleOffset(0.80);
284 
285  fFrameHist->GetYaxis()->SetLabelSize(0.10);
286  fFrameHist->GetYaxis()->SetLabelOffset(0.01);
287  fFrameHist->GetYaxis()->SetTitleSize(0.10);
288  fFrameHist->GetYaxis()->SetTitleOffset(0.80);
289  }
std::vector< double > fRawQLow
low edge of ADC values for drawing raw digits
unsigned int fPlane
Which plane in the detector.
Definition: TQPad.h:50
TH1F * fFrameHist
A dummy histogram to define the axes.
Definition: TQPad.h:52
The data type to uniquely identify a Plane.
Definition: geo_types.h:472
RawDataDrawer * RawDataDraw()
Definition: DrawingPad.cxx:106
enum geo::_plane_sigtype SigType_t
geo::TPCID CurrentTPC() const
Returns the current TPC as a TPCID.
double TotalClockTicks() const
Definition: RawDataDrawer.h:82
static const int kQ
Definition: TQPad.cxx:31
static const int kTQ
Definition: TQPad.cxx:32
std::vector< double > fRawQHigh
high edge of ADC values for drawing raw digits
int fTQ
0 = plot shows charge only, 1 = plot shows charge vs time for a wire
Definition: TQPad.h:51
double StartTick() const
Definition: RawDataDrawer.h:77
LArSoft geometry interface.
Definition: ChannelGeo.h:16
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
void evd::TQPad::Draw ( void  )

Definition at line 112 of file TQPad.cxx.

113  {
115 
116  //grab the singleton with the event
117  const art::Event* evt = evdb::EventHolder::Instance()->GetEvent();
118  if (!evt) return;
119 
121 
122  fPad->Clear();
123  fPad->cd();
124 
125  // Note this handles drawing waveforms for both SP and DP where the difference is handled by the tools
126  if (fTQ == kTQ) {
127  // Recover a channel number from current information
129  geoSvc->PlaneWireToChannel(fPlane, fWire, drawopt->fTPC, drawopt->fCryostat);
130 
131  // Call the tools to fill the histograms for RawDigits and Wire data
132  fRawDigitDrawerTool->Fill(
133  *fView, channel, this->RawDataDraw()->StartTick(), this->RawDataDraw()->TotalClockTicks());
134  fWireDrawerTool->Fill(
135  *fView, channel, this->RawDataDraw()->StartTick(), this->RawDataDraw()->TotalClockTicks());
136 
137  // Vertical limits set for the enclosing histogram, then draw it with axes only
138  float maxLowVal = std::min(fRawDigitDrawerTool->getMinimum(), fWireDrawerTool->getMinimum());
139  float maxHiVal = std::max(fRawDigitDrawerTool->getMaximum(), fWireDrawerTool->getMaximum());
140 
141  if (drawopt->fDrawRawDataOrCalibWires == kCALIB) {
142  maxLowVal = fWireDrawerTool->getMinimum();
143  maxHiVal = fWireDrawerTool->getMaximum();
144  }
145 
146  if (maxLowVal < std::numeric_limits<float>::max())
147  maxLowVal -= 5.;
148  else
149  maxLowVal = -10.;
150  if (maxHiVal > std::numeric_limits<float>::lowest())
151  maxHiVal += 5.;
152  else
153  maxHiVal = 10.;
154 
155  fFrameHist->SetMaximum(maxHiVal);
156  fFrameHist->SetMinimum(maxLowVal);
157  fFrameHist->Draw("AXIS");
158 
159  // draw with histogram style, only (square) lines, no errors
160  static const std::string defaultDrawOptions = "HIST same";
161 
162  // Draw the desired histograms
163  // If its not just the raw hists then we output the wire histograms
164  if (drawopt->fDrawRawDataOrCalibWires != kRAW) {
165  fWireDrawerTool->Draw(defaultDrawOptions.c_str(), maxLowVal, maxHiVal);
166 
167  fHitDrawerTool->Draw(*fView, channel);
168  }
169 
170  // Likewise, if it is not just the calib hists then we output the raw histogram
171  if (drawopt->fDrawRawDataOrCalibWires != kCALIB)
172  fRawDigitDrawerTool->Draw(defaultDrawOptions.c_str(), maxLowVal, maxHiVal);
173 
174  // This is a remnant from a time long past...
175  fFrameHist->SetTitleOffset(0.2, "Y");
176  } // end if fTQ == kTQ
177 
178  // I am not sure what the block below is trying to do... I don't see where the hists are actually filled.
179  // ** remove this for now until someone can explain what it is **
180  // else if(fTQ == kQ && fTQ == -1)
181  // {
182  // // figure out the signal type for this plane, assume that
183  // // plane n in each TPC/cryostat has the same type
184  // geo::PlaneID planeid(drawopt->CurrentTPC(), fPlane);
185  // geo::SigType_t sigType = geoSvc->SignalType(planeid);
186  //
187  // art::ServiceHandle<evd::ColorDrawingOptions const> cst;
188  //
189  // TH1F *hist;
190  //
191  // int ndiv = 0;
192  // if(drawopt->fDrawRawDataOrCalibWires != kCALIB){
193  // hist = fRawHisto;
194  // hist->SetMinimum(cst->fRawQLow [(size_t)sigType]);
195  // hist->SetMaximum(cst->fRawQHigh[(size_t)sigType]);
196  // ndiv = cst->fRawDiv[(size_t)sigType];
197  // }
198  // if(drawopt->fDrawRawDataOrCalibWires == kCALIB){
199  // hist = fRecoHisto;
200  // hist->SetMinimum(cst->fRecoQLow [(size_t)sigType]);
201  // hist->SetMaximum(cst->fRecoQHigh[(size_t)sigType]);
202  // ndiv = cst->fRecoDiv[(size_t)sigType];
203  // }
204  //
205  // hist->SetLabelSize(0, "X");
206  // hist->SetLabelSize(0, "Y");
207  // hist->SetTickLength(0, "X");
208  // hist->SetTickLength(0, "Y");
209  // hist->Draw("pY+");
210  //
211  // //
212  // // Use this to fill the histogram with colors from the color scale
213  // //
214  // double x1, x2, y1, y2;
215  // x1 = 0.;
216  // x2 = 1.;
217  //
218  // for(int i = 0; i < ndiv; ++i){
219  // y1 = hist->GetMinimum() + i*(hist->GetMaximum()-hist->GetMinimum())/(1.*ndiv);
220  // y2 = hist->GetMinimum() + (i + 1)*(hist->GetMaximum()-hist->GetMinimum())/(1.*ndiv);
221  //
222  // int c = 1;
223  // if (drawopt->fDrawRawDataOrCalibWires==kRAW) {
224  // c = cst->RawQ(sigType).GetColor(0.5*(y1+y2));
225  // }
226  // if (drawopt->fDrawRawDataOrCalibWires!=kRAW) {
227  // c= cst->CalQ(sigType).GetColor(0.5*(y1+y2));
228  // }
229  //
230  // TBox& b = fView->AddBox(x1,y1,x2,y2);
231  // b.SetFillStyle(1001);
232  // b.SetFillColor(c);
233  // b.Draw();
234  // } // end loop over Q histogram bins
235  //
236  // hist->Draw("same");
237  // } // end if fTQ == kQ
238 
239  return;
240  }
IWFHitDrawerPtr fHitDrawerTool
An instance of the tool to draw hits.
Definition: TQPad.h:54
unsigned int fTPC
TPC number to draw, typically set by TWQProjectionView.
unsigned int fPlane
Which plane in the detector.
Definition: TQPad.h:50
TH1F * fFrameHist
A dummy histogram to define the axes.
Definition: TQPad.h:52
std::string string
Definition: nybbler.cc:12
int fDrawRawDataOrCalibWires
0 for raw
IWaveformDrawerPtr fWireDrawerTool
An instance of the tool to draw hits.
Definition: TQPad.h:56
static const int kRAW
Definition: TQPad.cxx:28
static const int kCALIB
Definition: TQPad.cxx:29
uint8_t channel
Definition: CRTFragment.hh:201
unsigned int fWire
Definition: TQPad.h:49
evdb::View2D * fView
Superimpose scale on 1D histo.
Definition: TQPad.h:53
RawDataDrawer * RawDataDraw()
Definition: DrawingPad.cxx:106
unsigned int fCryostat
Cryostat number to draw, typically set by TWQProjectionView.
static int max(int a, int b)
static const int kTQ
Definition: TQPad.cxx:32
IWaveformDrawerPtr fRawDigitDrawerTool
An instance of the tool to draw hits.
Definition: TQPad.h:55
int fTQ
0 = plot shows charge only, 1 = plot shows charge vs time for a wire
Definition: TQPad.h:51
raw::ChannelID_t PlaneWireToChannel(WireID const &wireid) const
Returns the ID of the TPC channel connected to the specified wire.
T min(sqlite3 *const db, std::string const &table_name, std::string const &column_name)
Definition: statistics.h:55
TPad * fPad
The ROOT graphics pad.
Definition: DrawingPad.h:52
TCEvent evt
Definition: DataStructs.cxx:7
unsigned int ChannelID_t
Type representing the ID of a readout channel.
Definition: RawTypes.h:28
void evd::TQPad::SetPlaneWire ( unsigned int  plane = 0,
unsigned int  wire = 0 
)
inline

Definition at line 41 of file TQPad.h.

41 { fPlane = plane; fWire = wire; }
unsigned int fPlane
Which plane in the detector.
Definition: TQPad.h:50
unsigned int fWire
Definition: TQPad.h:49

Member Data Documentation

TH1F* evd::TQPad::fFrameHist
private

A dummy histogram to define the axes.

Definition at line 52 of file TQPad.h.

IWFHitDrawerPtr evd::TQPad::fHitDrawerTool
private

An instance of the tool to draw hits.

Definition at line 54 of file TQPad.h.

unsigned int evd::TQPad::fPlane
private

Which plane in the detector.

Definition at line 50 of file TQPad.h.

IWaveformDrawerPtr evd::TQPad::fRawDigitDrawerTool
private

An instance of the tool to draw hits.

Definition at line 55 of file TQPad.h.

int evd::TQPad::fTQ
private

0 = plot shows charge only, 1 = plot shows charge vs time for a wire

Definition at line 51 of file TQPad.h.

evdb::View2D* evd::TQPad::fView
private

Superimpose scale on 1D histo.

Definition at line 53 of file TQPad.h.

unsigned int evd::TQPad::fWire
private

Definition at line 49 of file TQPad.h.

IWaveformDrawerPtr evd::TQPad::fWireDrawerTool
private

An instance of the tool to draw hits.

Definition at line 56 of file TQPad.h.


The documentation for this class was generated from the following files: