17 #include "TPolyLine3D.h" 57 double const* coordsLo,
58 double const* coordsHi,
63 double const* coordsLo,
64 double const* coordsHi,
69 double const* coordsLo,
70 double const* coordsHi,
103 auto const& geom = *(lar::providerFrom<geo::Geometry>());
120 for (
geo::TPCGeo const& TPC : cryo.IterateTPCs()) {
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);
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);
155 std::array<double, 3U>
const low{{bb.
MinX(), bb.
MinY(), bb.
MinZ()}},
181 double const* coordsLo,
182 double const* coordsHi,
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]);
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]);
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]);
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]);
219 double const* coordsLo,
220 double const* coordsHi,
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])}) /
233 for (
double z = coordsLo[2];
z <= coordsHi[2];
z += gridStep) {
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);
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);
247 for (
double x = coordsLo[0];
x <= coordsHi[0];
x += gridStep) {
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]);
255 for (
double y = coordsLo[1];
y <= coordsHi[1];
y += gridStep) {
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]);
266 double const* coordsLo,
267 double const* coordsHi,
276 double const vertexMargin = 0.06;
277 double const axisLength = 0.40;
279 double const dx = (coordsHi[0] - coordsLo[0]);
280 double const dy = (coordsHi[1] - coordsLo[1]);
281 double const dz = (coordsHi[2] - coordsLo[2]);
284 double const x0 = coordsLo[0] - dx * vertexMargin;
285 double const y0 = coordsLo[1] - dy * vertexMargin;
286 double const z0 = coordsLo[2] - dz * vertexMargin;
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);
296 yaxis.SetPoint(0, x0, y0, z0);
297 yaxis.SetPoint(1, x0, y0 + sz, z0);
299 zaxis.SetPoint(0, x0, y0, z0);
300 zaxis.SetPoint(1, x0, y0, z0 + sz);
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);
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);
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);
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);
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);
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);
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);
Utilities related to art service access.
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.
constexpr auto abs(T v)
Returns the absolute value of the argument.
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.
Point_t GetActiveVolumeCenter() const
Returns the center of the TPC active volume in world coordinates [cm].
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.