16 #include "TPolyLine3D.h" 44 void DrawGrids(
evdb::View3D* view,
double const* coordsLo,
double const* coordsHi,
int color=kGray,
int width = 1,
int style = 1)
const;
45 void DrawAxes(
evdb::View3D* view,
double const* coordsLo,
double const* coordsHi,
int color=kGray,
int width = 1,
int style = 1)
const;
76 auto const& geom = *(lar::providerFrom<geo::Geometry>());
100 std::array<double, 3U>
const 101 tpcLow {{ TPC.MinX(), TPC.MinY(), TPC.MinZ() }},
102 tpcHigh {{ TPC.MaxX(), TPC.MaxY(), TPC.MaxZ() }}
104 DrawGrids(view, tpcLow.data(), tpcHigh.data(), kGray+2, 1, kSolid);
117 std::array<double, 3U>
const 118 detLow = {{ detector.MinX(), detector.MinY(), detector.MinZ() }},
119 detHigh = {{ detector.MaxX(), detector.MaxY(), detector.MaxZ() }}
121 DrawAxes(view, detLow.data(), detHigh.data(), kBlue, 1, kSolid);
130 std::array<double, 3U>
const 160 TPolyLine3D& top = view->
AddPolyLine3D(5, color, width, style);
161 top.SetPoint(0, coordsLo[0], coordsHi[1], coordsLo[2]);
162 top.SetPoint(1, coordsHi[0], coordsHi[1], coordsLo[2]);
163 top.SetPoint(2, coordsHi[0], coordsHi[1], coordsHi[2]);
164 top.SetPoint(3, coordsLo[0], coordsHi[1], coordsHi[2]);
165 top.SetPoint(4, coordsLo[0], coordsHi[1], coordsLo[2]);
167 TPolyLine3D& side = view->
AddPolyLine3D(5, color, width, style);
168 side.SetPoint(0, coordsHi[0], coordsHi[1], coordsLo[2]);
169 side.SetPoint(1, coordsHi[0], coordsLo[1], coordsLo[2]);
170 side.SetPoint(2, coordsHi[0], coordsLo[1], coordsHi[2]);
171 side.SetPoint(3, coordsHi[0], coordsHi[1], coordsHi[2]);
172 side.SetPoint(4, coordsHi[0], coordsHi[1], coordsLo[2]);
174 TPolyLine3D& side2 = view->
AddPolyLine3D(5, color, width, style);
175 side2.SetPoint(0, coordsLo[0], coordsHi[1], coordsLo[2]);
176 side2.SetPoint(1, coordsLo[0], coordsLo[1], coordsLo[2]);
177 side2.SetPoint(2, coordsLo[0], coordsLo[1], coordsHi[2]);
178 side2.SetPoint(3, coordsLo[0], coordsHi[1], coordsHi[2]);
179 side2.SetPoint(4, coordsLo[0], coordsHi[1], coordsLo[2]);
181 TPolyLine3D& bottom = view->
AddPolyLine3D(5, color, width, style);
182 bottom.SetPoint(0, coordsLo[0], coordsLo[1], coordsLo[2]);
183 bottom.SetPoint(1, coordsHi[0], coordsLo[1], coordsLo[2]);
184 bottom.SetPoint(2, coordsHi[0], coordsLo[1], coordsHi[2]);
185 bottom.SetPoint(3, coordsLo[0], coordsLo[1], coordsHi[2]);
186 bottom.SetPoint(4, coordsLo[0], coordsLo[1], coordsLo[2]);
194 double const gridStep =
std::min(25.0,
196 std::abs(coordsHi[0] - coordsLo[0]),
197 std::abs(coordsHi[1] - coordsLo[1]),
198 std::abs(coordsHi[2] - coordsLo[2])
203 for (
double z = coordsLo[2];
z <= coordsHi[2];
z += gridStep) {
206 TPolyLine3D& gridt = view->
AddPolyLine3D(2, color, style, width);
207 gridt.SetPoint(0, coordsLo[0], coordsLo[1],
z);
208 gridt.SetPoint(1, coordsHi[0], coordsLo[1],
z);
211 TPolyLine3D& grids = view->
AddPolyLine3D(2, color, style, width);
212 grids.SetPoint(0, coordsHi[0], coordsLo[1],
z);
213 grids.SetPoint(1, coordsHi[0], coordsHi[1],
z);
218 for (
double x = coordsLo[0];
x <= coordsHi[0];
x += gridStep) {
220 TPolyLine3D& gridt = view->
AddPolyLine3D(2, color, style, width);
221 gridt.SetPoint(0,
x, coordsLo[1], coordsLo[2]);
222 gridt.SetPoint(1,
x, coordsLo[1], coordsHi[2]);
226 for (
double y = coordsLo[1];
y <= coordsHi[1];
y += gridStep) {
228 TPolyLine3D& grids = view->
AddPolyLine3D(2, color, style, width);
229 grids.SetPoint(0, coordsHi[0],
y, coordsLo[2]);
230 grids.SetPoint(1, coordsHi[0],
y, coordsHi[2]);
242 double const vertexMargin = 0.06;
243 double const axisLength = 0.40;
245 double const dx = (coordsHi[0] - coordsLo[0]);
246 double const dy = (coordsHi[1] - coordsLo[1]);
247 double const dz = (coordsHi[2] - coordsLo[2]);
250 double const x0 = coordsLo[0] - dx * vertexMargin;
251 double const y0 = coordsLo[1] - dy * vertexMargin;
252 double const z0 = coordsLo[2] - dz * vertexMargin;
255 = axisLength *
std::min({ std::abs(dx), std::abs(dy), std::abs(dz) });
258 TPolyLine3D& yaxis = view->
AddPolyLine3D(2, color, style, width);
259 TPolyLine3D& zaxis = view->
AddPolyLine3D(2, color, style, width);
260 xaxis.SetPoint(0, x0, y0, z0);
261 xaxis.SetPoint(1, sz+x0, y0, z0);
263 yaxis.SetPoint(0, x0, y0, z0);
264 yaxis.SetPoint(1, x0, y0+sz, z0);
266 zaxis.SetPoint(0, x0, y0, z0);
267 zaxis.SetPoint(1, x0, y0, z0+sz);
269 TPolyLine3D& xpoint = view->
AddPolyLine3D(3, color, style, width);
270 TPolyLine3D& ypoint = view->
AddPolyLine3D(3, color, style, width);
271 TPolyLine3D& zpoint = view->
AddPolyLine3D(3, color, style, width);
273 xpoint.SetPoint(0, 0.95*sz+x0, y0, z0-0.05*sz);
274 xpoint.SetPoint(1, 1.00*sz+x0, y0, z0);
275 xpoint.SetPoint(2, 0.95*sz+x0, y0, z0+0.05*sz);
277 ypoint.SetPoint(0, x0, 0.95*sz+y0, z0-0.05*sz);
278 ypoint.SetPoint(1, x0, 1.00*sz+y0, z0);
279 ypoint.SetPoint(2, x0, 0.95*sz+y0, z0+0.05*sz);
281 zpoint.SetPoint(0, x0-0.05*sz, y0, 0.95*sz+z0);
282 zpoint.SetPoint(1, x0+0.00*sz, y0, 1.00*sz+z0);
283 zpoint.SetPoint(2, x0+0.05*sz, y0, 0.95*sz+z0);
285 TPolyLine3D& zleg = view->
AddPolyLine3D(4, color, style, width);
286 zleg.SetPoint(0, x0-0.05*sz, y0+0.05*sz, z0+1.05*sz);
287 zleg.SetPoint(1, x0+0.05*sz, y0+0.05*sz, z0+1.05*sz);
288 zleg.SetPoint(2, x0-0.05*sz, y0-0.05*sz, z0+1.05*sz);
289 zleg.SetPoint(3, x0+0.05*sz, y0-0.05*sz, z0+1.05*sz);
291 TPolyLine3D& yleg = view->
AddPolyLine3D(5, color, style, width);
292 yleg.SetPoint(0, x0-0.05*sz, y0+1.15*sz, z0);
293 yleg.SetPoint(1, x0+0.00*sz, y0+1.10*sz, z0);
294 yleg.SetPoint(2, x0+0.00*sz, y0+1.05*sz, z0);
295 yleg.SetPoint(3, x0+0.00*sz, y0+1.10*sz, z0);
296 yleg.SetPoint(4, x0+0.05*sz, y0+1.15*sz, z0);
298 TPolyLine3D& xleg = view->
AddPolyLine3D(7, color, style, width);
299 xleg.SetPoint(0, x0+1.05*sz, y0+0.05*sz, z0-0.05*sz);
300 xleg.SetPoint(1, x0+1.05*sz, y0+0.00*sz, z0-0.00*sz);
301 xleg.SetPoint(2, x0+1.05*sz, y0+0.05*sz, z0+0.05*sz);
302 xleg.SetPoint(3, x0+1.05*sz, y0+0.00*sz, z0-0.00*sz);
303 xleg.SetPoint(4, x0+1.05*sz, y0-0.05*sz, z0-0.05*sz);
304 xleg.SetPoint(5, x0+1.05*sz, y0+0.00*sz, z0-0.00*sz);
305 xleg.SetPoint(6, x0+1.05*sz, y0-0.05*sz, z0+0.05*sz);
Point GetActiveVolumeCenter() const
Returns the center of the TPC active volume in world coordinates [cm].
Encapsulate the construction of a single cyostat.
double ActiveHalfHeight() const
Half height (associated with y coordinate) of active TPC volume [cm].
double MinX() const
Returns the world x coordinate of the start of the box.
Geometry information for a single TPC.
double MaxX() const
Returns the world x coordinate of the end of the box.
Geometry information for a single cryostat.
TPolyLine3D & AddPolyLine3D(int n, int c, int w, int s)
double ActiveHalfLength() const
Length (associated with z coordinate) of active TPC volume [cm].
double ActiveHalfWidth() const
Half width (associated with x coordinate) of active TPC volume [cm].
T get(std::string const &key) const
double MinZ() const
Returns the world z coordinate of the start of the box.
double MaxY() const
Returns the world y coordinate of the end of the box.
std::size_t color(std::string const &procname)
A base class aware of world box coordinatesAn object describing a simple shape can inherit from this ...
double MaxZ() const
Returns the world z coordinate of the end of the box.
void ExtendToInclude(Coord_t x, Coord_t y, Coord_t z)
Extends the current box to also include the specified point.
A collection of 3D drawable objects.
This is the interface class for drawing 3D detector geometries.
double MinY() const
Returns the world y coordinate of the start of the box.
art framework interface to geometry description
Encapsulate the construction of a single detector plane.