LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
evd_tool::StandardDrawer Class Reference
Inheritance diagram for evd_tool::StandardDrawer:
evd_tool::IExperimentDrawer

Public Member Functions

 StandardDrawer (const fhicl::ParameterSet &pset)
 
virtual void DetOutline3D (evdb::View3D *view) override
 

Protected Member Functions

void DrawBoxBoundedGeoOutline (evdb::View3D *view, geo::BoxBoundedGeo const &bb, Color_t color, Width_t width, Style_t style) const
 Draw the outline of an object bounded by a box. More...
 
void DrawTPCoutline (evdb::View3D *view, geo::TPCGeo const &TPC, Color_t color, Width_t width, Style_t style) const
 Draw the outline of the TPC volume. More...
 
void DrawActiveTPCoutline (evdb::View3D *view, geo::TPCGeo const &TPC, Color_t color, Width_t width, Style_t style) const
 Draw the outline of the TPC active volume. More...
 
void DrawRectangularBox (evdb::View3D *view, double const *coordsLo, double const *coordsHi, int color=kGray, int width=1, int style=1) const
 
void DrawGrids (evdb::View3D *view, double const *coordsLo, double const *coordsHi, int color=kGray, int width=1, int style=1) const
 
void DrawAxes (evdb::View3D *view, double const *coordsLo, double const *coordsHi, int color=kGray, int width=1, int style=1) const
 

Private Member Functions

void configure (const fhicl::ParameterSet &pset)
 

Private Attributes

bool fDrawGrid
 true to draw backing grid More...
 
bool fDrawAxes
 true to draw coordinate axes More...
 
bool fDrawActive
 true to outline TPC sensitive volumes More...
 

Detailed Description

Definition at line 25 of file StandardDrawer_tool.cc.

Constructor & Destructor Documentation

evd_tool::StandardDrawer::StandardDrawer ( const fhicl::ParameterSet pset)
explicit

Definition at line 85 of file StandardDrawer_tool.cc.

References configure().

86  {
87  configure(pset);
88  }
void configure(const fhicl::ParameterSet &pset)

Member Function Documentation

void evd_tool::StandardDrawer::configure ( const fhicl::ParameterSet pset)
private

Definition at line 90 of file StandardDrawer_tool.cc.

References fDrawActive, fDrawAxes, fDrawGrid, and fhicl::ParameterSet::get().

Referenced by DrawTPCoutline(), and StandardDrawer().

91  {
92  // Start by recovering the parameters
93  fDrawGrid = pset.get<bool>("DrawGrid", true);
94  fDrawAxes = pset.get<bool>("DrawAxes", true);
95  fDrawActive = pset.get<bool>("DrawActive", true);
96 
97  return;
98  }
bool fDrawActive
true to outline TPC sensitive volumes
T get(std::string const &key) const
Definition: ParameterSet.h:314
bool fDrawGrid
true to draw backing grid
bool fDrawAxes
true to draw coordinate axes
void evd_tool::StandardDrawer::DetOutline3D ( evdb::View3D view)
overridevirtual

Implements evd_tool::IExperimentDrawer.

Definition at line 101 of file StandardDrawer_tool.cc.

References DrawActiveTPCoutline(), DrawAxes(), DrawBoxBoundedGeoOutline(), DrawGrids(), DrawTPCoutline(), geo::BoxBoundedGeo::ExtendToInclude(), fDrawActive, fDrawAxes, and fDrawGrid.

102  {
103  auto const& geom = *(lar::providerFrom<geo::Geometry>());
104 
105  // we compute the total volume of the detector, to be used for the axes;
106  // we do include the origin by choice
107  geo::BoxBoundedGeo detector({0.0, 0.0, 0.0}, {0.0, 0.0, 0.0});
108 
109  // Draw a box for each cryostat, and, within it, for each TPC;
110  // the outlined volumes are the ones from the geometry boxes
111  for (geo::CryostatGeo const& cryo : geom.Iterate<geo::CryostatGeo>()) {
112 
113  // include this cryostat in the detector volume
114  detector.ExtendToInclude(cryo);
115 
116  // draw the cryostat box
117  DrawBoxBoundedGeoOutline(view, cryo.Boundaries(), kRed + 2, 1, kSolid);
118 
119  // draw all TPC boxes
120  for (geo::TPCGeo const& TPC : cryo.IterateTPCs()) {
121 
122  DrawTPCoutline(view, TPC, kRed, 2, kSolid);
123 
124  // BUG the double brace syntax is required to work around clang bug 21629
125  // optionally draw the grid
126  if (fDrawGrid) {
127  std::array<double, 3U> const tpcLow{{TPC.MinX(), TPC.MinY(), TPC.MinZ()}},
128  tpcHigh{{TPC.MaxX(), TPC.MaxY(), TPC.MaxZ()}};
129  DrawGrids(view, tpcLow.data(), tpcHigh.data(), kGray + 2, 1, kSolid);
130  }
131 
132  // optionally draw the active volume
133  if (fDrawActive) DrawActiveTPCoutline(view, TPC, kCyan + 2, 1, kDotted);
134 
135  } // for TPCs in cryostat
136 
137  } // for cryostats
138 
139  // draw axes if requested
140  if (fDrawAxes) {
141  // BUG the double brace syntax is required to work around clang bug 21629
142  std::array<double, 3U> const detLow = {{detector.MinX(), detector.MinY(), detector.MinZ()}},
143  detHigh = {{detector.MaxX(), detector.MaxY(), detector.MaxZ()}};
144  DrawAxes(view, detLow.data(), detHigh.data(), kBlue, 1, kSolid);
145  } // if draw axes
146  }
void DrawAxes(evdb::View3D *view, double const *coordsLo, double const *coordsHi, int color=kGray, int width=1, int style=1) const
bool fDrawActive
true to outline TPC sensitive volumes
Geometry information for a single TPC.
Definition: TPCGeo.h:36
Geometry information for a single cryostat.
Definition: CryostatGeo.h:43
void DrawActiveTPCoutline(evdb::View3D *view, geo::TPCGeo const &TPC, Color_t color, Width_t width, Style_t style) const
Draw the outline of the TPC active volume.
void DrawBoxBoundedGeoOutline(evdb::View3D *view, geo::BoxBoundedGeo const &bb, Color_t color, Width_t width, Style_t style) const
Draw the outline of an object bounded by a box.
bool fDrawGrid
true to draw backing grid
void DrawGrids(evdb::View3D *view, double const *coordsLo, double const *coordsHi, int color=kGray, int width=1, int style=1) const
void DrawTPCoutline(evdb::View3D *view, geo::TPCGeo const &TPC, Color_t color, Width_t width, Style_t style) const
Draw the outline of the TPC volume.
bool fDrawAxes
true to draw coordinate axes
A base class aware of world box coordinatesAn object describing a simple shape can inherit from this ...
Definition: BoxBoundedGeo.h:33
void ExtendToInclude(Coord_t x, Coord_t y, Coord_t z)
Extends the current box to also include the specified point.
void evd_tool::StandardDrawer::DrawActiveTPCoutline ( evdb::View3D view,
geo::TPCGeo const &  TPC,
Color_t  color,
Width_t  width,
Style_t  style 
) const
protected

Draw the outline of the TPC active volume.

Definition at line 161 of file StandardDrawer_tool.cc.

References geo::TPCGeo::ActiveHalfHeight(), geo::TPCGeo::ActiveHalfLength(), geo::TPCGeo::ActiveHalfWidth(), color(), DrawBoxBoundedGeoOutline(), and geo::TPCGeo::GetActiveVolumeCenter().

Referenced by DetOutline3D(), and DrawTPCoutline().

166  {
167  auto const& activeCenter = TPC.GetActiveVolumeCenter();
169  {{activeCenter.X() - TPC.ActiveHalfWidth(),
170  activeCenter.Y() - TPC.ActiveHalfHeight(),
171  activeCenter.Z() - TPC.ActiveHalfLength()},
172  {activeCenter.X() + TPC.ActiveHalfWidth(),
173  activeCenter.Y() + TPC.ActiveHalfHeight(),
174  activeCenter.Z() + TPC.ActiveHalfLength()}},
175  color,
176  width,
177  style);
178  }
void DrawBoxBoundedGeoOutline(evdb::View3D *view, geo::BoxBoundedGeo const &bb, Color_t color, Width_t width, Style_t style) const
Draw the outline of an object bounded by a box.
std::size_t color(std::string const &procname)
void evd_tool::StandardDrawer::DrawAxes ( evdb::View3D view,
double const *  coordsLo,
double const *  coordsHi,
int  color = kGray,
int  width = 1,
int  style = 1 
) const
protected

Definition at line 265 of file StandardDrawer_tool.cc.

References util::abs(), evdb::View3D::AddPolyLine3D(), DEFINE_ART_CLASS_TOOL, and xaxis.

Referenced by DetOutline3D(), and DrawTPCoutline().

271  {
272  /*
273  * Axes are drawn encompassing the whole detector volume,
274  * the axis length being a fraction of the detector dimensions
275  */
276  double const vertexMargin = 0.06;
277  double const axisLength = 0.40; // 20% of the shortest
278 
279  double const dx = (coordsHi[0] - coordsLo[0]);
280  double const dy = (coordsHi[1] - coordsLo[1]);
281  double const dz = (coordsHi[2] - coordsLo[2]);
282 
283  // axes origin
284  double const x0 = coordsLo[0] - dx * vertexMargin;
285  double const y0 = coordsLo[1] - dy * vertexMargin;
286  double const z0 = coordsLo[2] - dz * vertexMargin;
287  // axis length
288  double const sz = axisLength * std::min({std::abs(dx), std::abs(dy), std::abs(dz)});
289 
290  TPolyLine3D& xaxis = view->AddPolyLine3D(2, color, style, width);
291  TPolyLine3D& yaxis = view->AddPolyLine3D(2, color, style, width);
292  TPolyLine3D& zaxis = view->AddPolyLine3D(2, color, style, width);
293  xaxis.SetPoint(0, x0, y0, z0);
294  xaxis.SetPoint(1, sz + x0, y0, z0);
295 
296  yaxis.SetPoint(0, x0, y0, z0);
297  yaxis.SetPoint(1, x0, y0 + sz, z0);
298 
299  zaxis.SetPoint(0, x0, y0, z0);
300  zaxis.SetPoint(1, x0, y0, z0 + sz);
301 
302  TPolyLine3D& xpoint = view->AddPolyLine3D(3, color, style, width);
303  TPolyLine3D& ypoint = view->AddPolyLine3D(3, color, style, width);
304  TPolyLine3D& zpoint = view->AddPolyLine3D(3, color, style, width);
305 
306  xpoint.SetPoint(0, 0.95 * sz + x0, y0, z0 - 0.05 * sz);
307  xpoint.SetPoint(1, 1.00 * sz + x0, y0, z0);
308  xpoint.SetPoint(2, 0.95 * sz + x0, y0, z0 + 0.05 * sz);
309 
310  ypoint.SetPoint(0, x0, 0.95 * sz + y0, z0 - 0.05 * sz);
311  ypoint.SetPoint(1, x0, 1.00 * sz + y0, z0);
312  ypoint.SetPoint(2, x0, 0.95 * sz + y0, z0 + 0.05 * sz);
313 
314  zpoint.SetPoint(0, x0 - 0.05 * sz, y0, 0.95 * sz + z0);
315  zpoint.SetPoint(1, x0 + 0.00 * sz, y0, 1.00 * sz + z0);
316  zpoint.SetPoint(2, x0 + 0.05 * sz, y0, 0.95 * sz + z0);
317 
318  TPolyLine3D& zleg = view->AddPolyLine3D(4, color, style, width);
319  zleg.SetPoint(0, x0 - 0.05 * sz, y0 + 0.05 * sz, z0 + 1.05 * sz);
320  zleg.SetPoint(1, x0 + 0.05 * sz, y0 + 0.05 * sz, z0 + 1.05 * sz);
321  zleg.SetPoint(2, x0 - 0.05 * sz, y0 - 0.05 * sz, z0 + 1.05 * sz);
322  zleg.SetPoint(3, x0 + 0.05 * sz, y0 - 0.05 * sz, z0 + 1.05 * sz);
323 
324  TPolyLine3D& yleg = view->AddPolyLine3D(5, color, style, width);
325  yleg.SetPoint(0, x0 - 0.05 * sz, y0 + 1.15 * sz, z0);
326  yleg.SetPoint(1, x0 + 0.00 * sz, y0 + 1.10 * sz, z0);
327  yleg.SetPoint(2, x0 + 0.00 * sz, y0 + 1.05 * sz, z0);
328  yleg.SetPoint(3, x0 + 0.00 * sz, y0 + 1.10 * sz, z0);
329  yleg.SetPoint(4, x0 + 0.05 * sz, y0 + 1.15 * sz, z0);
330 
331  TPolyLine3D& xleg = view->AddPolyLine3D(7, color, style, width);
332  xleg.SetPoint(0, x0 + 1.05 * sz, y0 + 0.05 * sz, z0 - 0.05 * sz);
333  xleg.SetPoint(1, x0 + 1.05 * sz, y0 + 0.00 * sz, z0 - 0.00 * sz);
334  xleg.SetPoint(2, x0 + 1.05 * sz, y0 + 0.05 * sz, z0 + 0.05 * sz);
335  xleg.SetPoint(3, x0 + 1.05 * sz, y0 + 0.00 * sz, z0 - 0.00 * sz);
336  xleg.SetPoint(4, x0 + 1.05 * sz, y0 - 0.05 * sz, z0 - 0.05 * sz);
337  xleg.SetPoint(5, x0 + 1.05 * sz, y0 + 0.00 * sz, z0 - 0.00 * sz);
338  xleg.SetPoint(6, x0 + 1.05 * sz, y0 - 0.05 * sz, z0 + 0.05 * sz);
339 
340  return;
341  }
constexpr auto abs(T v)
Returns the absolute value of the argument.
TGaxis * xaxis
Definition: plot_hist.C:61
TPolyLine3D & AddPolyLine3D(int n, int c, int w, int s)
Definition: View3D.cxx:105
std::size_t color(std::string const &procname)
void evd_tool::StandardDrawer::DrawBoxBoundedGeoOutline ( evdb::View3D view,
geo::BoxBoundedGeo const &  bb,
Color_t  color,
Width_t  width,
Style_t  style 
) const
protected

Draw the outline of an object bounded by a box.

Definition at line 148 of file StandardDrawer_tool.cc.

References color(), DrawRectangularBox(), geo::BoxBoundedGeo::MaxX(), geo::BoxBoundedGeo::MaxY(), geo::BoxBoundedGeo::MaxZ(), geo::BoxBoundedGeo::MinX(), geo::BoxBoundedGeo::MinY(), and geo::BoxBoundedGeo::MinZ().

Referenced by DetOutline3D(), DrawActiveTPCoutline(), and DrawTPCoutline().

153  {
154  // BUG the double brace syntax is required to work around clang bug 21629
155  std::array<double, 3U> const low{{bb.MinX(), bb.MinY(), bb.MinZ()}},
156  high{{bb.MaxX(), bb.MaxY(), bb.MaxZ()}};
157  ;
158  DrawRectangularBox(view, low.data(), high.data(), color, width, style);
159  } // StandardDrawer::DrawBoxBoundedGeoOutline()
void DrawRectangularBox(evdb::View3D *view, double const *coordsLo, double const *coordsHi, int color=kGray, int width=1, int style=1) const
std::size_t color(std::string const &procname)
void evd_tool::StandardDrawer::DrawGrids ( evdb::View3D view,
double const *  coordsLo,
double const *  coordsHi,
int  color = kGray,
int  width = 1,
int  style = 1 
) const
protected

Definition at line 218 of file StandardDrawer_tool.cc.

References util::abs(), evdb::View3D::AddPolyLine3D(), x, y, and z.

Referenced by DetOutline3D(), and DrawTPCoutline().

224  {
225  // uniform step size, each 25 cm except that at least 5 per plane
226  double const gridStep = std::min(25.0,
227  std::min({std::abs(coordsHi[0] - coordsLo[0]),
228  std::abs(coordsHi[1] - coordsLo[1]),
229  std::abs(coordsHi[2] - coordsLo[2])}) /
230  5);
231 
232  // Grid running along x and y at constant z
233  for (double z = coordsLo[2]; z <= coordsHi[2]; z += gridStep) {
234 
235  // across x, on bottom plane, fixed z
236  TPolyLine3D& gridt = view->AddPolyLine3D(2, color, style, width);
237  gridt.SetPoint(0, coordsLo[0], coordsLo[1], z);
238  gridt.SetPoint(1, coordsHi[0], coordsLo[1], z);
239 
240  // on right plane, across y, fixed z
241  TPolyLine3D& grids = view->AddPolyLine3D(2, color, style, width);
242  grids.SetPoint(0, coordsHi[0], coordsLo[1], z);
243  grids.SetPoint(1, coordsHi[0], coordsHi[1], z);
244  }
245 
246  // Grid running along z at constant x
247  for (double x = coordsLo[0]; x <= coordsHi[0]; x += gridStep) {
248  // fixed x, on bottom plane, across z
249  TPolyLine3D& gridt = view->AddPolyLine3D(2, color, style, width);
250  gridt.SetPoint(0, x, coordsLo[1], coordsLo[2]);
251  gridt.SetPoint(1, x, coordsLo[1], coordsHi[2]);
252  }
253 
254  // Grid running along z at constant y
255  for (double y = coordsLo[1]; y <= coordsHi[1]; y += gridStep) {
256  // on right plane, fixed y, across z
257  TPolyLine3D& grids = view->AddPolyLine3D(2, color, style, width);
258  grids.SetPoint(0, coordsHi[0], y, coordsLo[2]);
259  grids.SetPoint(1, coordsHi[0], y, coordsHi[2]);
260  }
261 
262  return;
263  }
Float_t x
Definition: compare.C:6
Float_t y
Definition: compare.C:6
Double_t z
Definition: plot.C:276
constexpr auto abs(T v)
Returns the absolute value of the argument.
TPolyLine3D & AddPolyLine3D(int n, int c, int w, int s)
Definition: View3D.cxx:105
std::size_t color(std::string const &procname)
void evd_tool::StandardDrawer::DrawRectangularBox ( evdb::View3D view,
double const *  coordsLo,
double const *  coordsHi,
int  color = kGray,
int  width = 1,
int  style = 1 
) const
protected

Definition at line 180 of file StandardDrawer_tool.cc.

References evdb::View3D::AddPolyLine3D().

Referenced by DrawBoxBoundedGeoOutline(), and DrawTPCoutline().

186  {
187  TPolyLine3D& top = view->AddPolyLine3D(5, color, width, style);
188  top.SetPoint(0, coordsLo[0], coordsHi[1], coordsLo[2]);
189  top.SetPoint(1, coordsHi[0], coordsHi[1], coordsLo[2]);
190  top.SetPoint(2, coordsHi[0], coordsHi[1], coordsHi[2]);
191  top.SetPoint(3, coordsLo[0], coordsHi[1], coordsHi[2]);
192  top.SetPoint(4, coordsLo[0], coordsHi[1], coordsLo[2]);
193 
194  TPolyLine3D& side = view->AddPolyLine3D(5, color, width, style);
195  side.SetPoint(0, coordsHi[0], coordsHi[1], coordsLo[2]);
196  side.SetPoint(1, coordsHi[0], coordsLo[1], coordsLo[2]);
197  side.SetPoint(2, coordsHi[0], coordsLo[1], coordsHi[2]);
198  side.SetPoint(3, coordsHi[0], coordsHi[1], coordsHi[2]);
199  side.SetPoint(4, coordsHi[0], coordsHi[1], coordsLo[2]);
200 
201  TPolyLine3D& side2 = view->AddPolyLine3D(5, color, width, style);
202  side2.SetPoint(0, coordsLo[0], coordsHi[1], coordsLo[2]);
203  side2.SetPoint(1, coordsLo[0], coordsLo[1], coordsLo[2]);
204  side2.SetPoint(2, coordsLo[0], coordsLo[1], coordsHi[2]);
205  side2.SetPoint(3, coordsLo[0], coordsHi[1], coordsHi[2]);
206  side2.SetPoint(4, coordsLo[0], coordsHi[1], coordsLo[2]);
207 
208  TPolyLine3D& bottom = view->AddPolyLine3D(5, color, width, style);
209  bottom.SetPoint(0, coordsLo[0], coordsLo[1], coordsLo[2]);
210  bottom.SetPoint(1, coordsHi[0], coordsLo[1], coordsLo[2]);
211  bottom.SetPoint(2, coordsHi[0], coordsLo[1], coordsHi[2]);
212  bottom.SetPoint(3, coordsLo[0], coordsLo[1], coordsHi[2]);
213  bottom.SetPoint(4, coordsLo[0], coordsLo[1], coordsLo[2]);
214 
215  return;
216  }
TPolyLine3D & AddPolyLine3D(int n, int c, int w, int s)
Definition: View3D.cxx:105
std::size_t color(std::string const &procname)
void evd_tool::StandardDrawer::DrawTPCoutline ( evdb::View3D view,
geo::TPCGeo const &  TPC,
Color_t  color,
Width_t  width,
Style_t  style 
) const
inlineprotected

Draw the outline of the TPC volume.

Definition at line 40 of file StandardDrawer_tool.cc.

References configure(), DrawActiveTPCoutline(), DrawAxes(), DrawBoxBoundedGeoOutline(), DrawGrids(), and DrawRectangularBox().

Referenced by DetOutline3D().

45  {
46  DrawBoxBoundedGeoOutline(view, TPC, color, width, style);
47  }
void DrawBoxBoundedGeoOutline(evdb::View3D *view, geo::BoxBoundedGeo const &bb, Color_t color, Width_t width, Style_t style) const
Draw the outline of an object bounded by a box.
std::size_t color(std::string const &procname)

Member Data Documentation

bool evd_tool::StandardDrawer::fDrawActive
private

true to outline TPC sensitive volumes

Definition at line 80 of file StandardDrawer_tool.cc.

Referenced by configure(), and DetOutline3D().

bool evd_tool::StandardDrawer::fDrawAxes
private

true to draw coordinate axes

Definition at line 79 of file StandardDrawer_tool.cc.

Referenced by configure(), and DetOutline3D().

bool evd_tool::StandardDrawer::fDrawGrid
private

true to draw backing grid

Definition at line 78 of file StandardDrawer_tool.cc.

Referenced by configure(), and DetOutline3D().


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