12 #include "larevt/CalibrationDBI/Interface/ChannelStatusProvider.h" 13 #include "larevt/CalibrationDBI/Interface/ChannelStatusService.h" 16 #include "TPolyLine3D.h" 79 bool axesNotDrawn(
true);
81 double xl, xu, yl, yu, zl, zu;
83 geo->
WorldBox(&xl, &xu, &yl, &yu, &zl, &zu);
85 std::cout <<
"--- building ICARUS 3D display, low coord: " << xl <<
", " << yl <<
", " << zl
86 <<
", hi coord: " << xu <<
", " << yu <<
", " << zu << std::endl;
90 double cryoCoordsLo[] = {cryoGeo.MinX(), cryoGeo.MinY(), cryoGeo.MinZ()};
91 double cryoCoordsHi[] = {cryoGeo.MaxX(), cryoGeo.MaxY(), cryoGeo.MaxZ()};
93 std::cout <<
" - cryostat: " << cryoGeo.ID() <<
", low coord: " << cryoCoordsLo[0] <<
", " 94 << cryoCoordsLo[1] <<
", " << cryoCoordsLo[2] <<
", hi coord: " << cryoCoordsHi[0]
95 <<
", " << cryoCoordsHi[1] <<
", " << cryoCoordsHi[2] << std::endl;
100 DrawAxes(view, cryoCoordsLo, cryoCoordsHi, kBlue, 1, 1);
105 for (
size_t tpcIdx = 0; tpcIdx < cryoGeo.NTPC(); tpcIdx++) {
109 auto const tpcCenter = tpcGeo.
GetCenter();
112 double coordsLo[] = {tpcCenter.X() - tpcGeo.
HalfWidth(),
114 tpcCenter.Z() - 0.5 * tpcGeo.
Length()};
115 double coordsHi[] = {tpcCenter.X() + tpcGeo.
HalfWidth(),
117 tpcCenter.Z() + 0.5 * tpcGeo.
Length()};
119 std::cout <<
" - TPC: " << tpcGeo.
ID() <<
", low coord: " << coordsLo[0] <<
", " 120 << coordsLo[1] <<
", " << coordsLo[2] <<
", hi coord: " << coordsHi[0] <<
", " 121 << coordsHi[1] <<
", " << coordsHi[2] << std::endl;
142 TPolyLine3D& top = view->
AddPolyLine3D(5, color, width, style);
143 top.SetPoint(0, coordsLo[0], coordsHi[1], coordsLo[2]);
144 top.SetPoint(1, coordsHi[0], coordsHi[1], coordsLo[2]);
145 top.SetPoint(2, coordsHi[0], coordsHi[1], coordsHi[2]);
146 top.SetPoint(3, coordsLo[0], coordsHi[1], coordsHi[2]);
147 top.SetPoint(4, coordsLo[0], coordsHi[1], coordsLo[2]);
149 TPolyLine3D& side = view->
AddPolyLine3D(5, color, width, style);
150 side.SetPoint(0, coordsHi[0], coordsHi[1], coordsLo[2]);
151 side.SetPoint(1, coordsHi[0], coordsLo[1], coordsLo[2]);
152 side.SetPoint(2, coordsHi[0], coordsLo[1], coordsHi[2]);
153 side.SetPoint(3, coordsHi[0], coordsHi[1], coordsHi[2]);
154 side.SetPoint(4, coordsHi[0], coordsHi[1], coordsLo[2]);
156 TPolyLine3D& side2 = view->
AddPolyLine3D(5, color, width, style);
157 side2.SetPoint(0, coordsLo[0], coordsHi[1], coordsLo[2]);
158 side2.SetPoint(1, coordsLo[0], coordsLo[1], coordsLo[2]);
159 side2.SetPoint(2, coordsLo[0], coordsLo[1], coordsHi[2]);
160 side2.SetPoint(3, coordsLo[0], coordsHi[1], coordsHi[2]);
161 side2.SetPoint(4, coordsLo[0], coordsHi[1], coordsLo[2]);
163 TPolyLine3D& bottom = view->
AddPolyLine3D(5, color, width, style);
164 bottom.SetPoint(0, coordsLo[0], coordsLo[1], coordsLo[2]);
165 bottom.SetPoint(1, coordsHi[0], coordsLo[1], coordsLo[2]);
166 bottom.SetPoint(2, coordsHi[0], coordsLo[1], coordsHi[2]);
167 bottom.SetPoint(3, coordsLo[0], coordsLo[1], coordsHi[2]);
168 bottom.SetPoint(4, coordsLo[0], coordsLo[1], coordsLo[2]);
181 double z = coordsLo[2];
184 TPolyLine3D& gridt = view->
AddPolyLine3D(2, color, style, width);
185 gridt.SetPoint(0, coordsLo[0], coordsLo[1], z);
186 gridt.SetPoint(1, coordsHi[0], coordsLo[1], z);
189 TPolyLine3D& grids = view->
AddPolyLine3D(2, color, style, width);
190 grids.SetPoint(0, coordsHi[0], coordsLo[1], z);
191 grids.SetPoint(1, coordsHi[0], coordsHi[1], z);
195 if (z > coordsHi[2])
break;
199 double x = coordsLo[0];
201 TPolyLine3D& gridt = view->
AddPolyLine3D(2, color, style, width);
202 gridt.SetPoint(0, x, coordsLo[1], coordsLo[2]);
203 gridt.SetPoint(1, x, coordsLo[1], coordsHi[2]);
205 if (x > coordsHi[0])
break;
210 double y = coordsLo[1];
212 TPolyLine3D& grids = view->
AddPolyLine3D(2, color, style, width);
213 grids.SetPoint(0, coordsHi[0], y, coordsLo[2]);
214 grids.SetPoint(1, coordsHi[0], y, coordsHi[2]);
216 if (y > coordsHi[1])
break;
233 double y0 = 1.10 * coordsLo[1];
234 double z0 = -0.10 * coordsHi[2];
235 double sz = 0.20 * coordsHi[2];
238 TPolyLine3D& yaxis = view->
AddPolyLine3D(2, color, style, width);
239 TPolyLine3D& zaxis = view->
AddPolyLine3D(2, color, style, width);
240 xaxis.SetPoint(0, x0, y0, z0);
241 xaxis.SetPoint(1, sz + x0, y0, z0);
243 yaxis.SetPoint(0, x0, y0, z0);
244 yaxis.SetPoint(1, x0, y0 + sz, z0);
246 zaxis.SetPoint(0, x0, y0, z0);
247 zaxis.SetPoint(1, x0, y0, z0 + sz);
249 TPolyLine3D& xpoint = view->
AddPolyLine3D(3, color, style, width);
250 TPolyLine3D& ypoint = view->
AddPolyLine3D(3, color, style, width);
251 TPolyLine3D& zpoint = view->
AddPolyLine3D(3, color, style, width);
253 xpoint.SetPoint(0, 0.95 * sz + x0, y0, z0 - 0.05 * sz);
254 xpoint.SetPoint(1, 1.00 * sz + x0, y0, z0);
255 xpoint.SetPoint(2, 0.95 * sz + x0, y0, z0 + 0.05 * sz);
257 ypoint.SetPoint(0, x0, 0.95 * sz + y0, z0 - 0.05 * sz);
258 ypoint.SetPoint(1, x0, 1.00 * sz + y0, z0);
259 ypoint.SetPoint(2, x0, 0.95 * sz + y0, z0 + 0.05 * sz);
261 zpoint.SetPoint(0, x0 - 0.05 * sz, y0, 0.95 * sz + z0);
262 zpoint.SetPoint(1, x0 + 0.00 * sz, y0, 1.00 * sz + z0);
263 zpoint.SetPoint(2, x0 + 0.05 * sz, y0, 0.95 * sz + z0);
265 TPolyLine3D& zleg = view->
AddPolyLine3D(4, color, style, width);
266 zleg.SetPoint(0, x0 - 0.05 * sz, y0 + 0.05 * sz, z0 + 1.05 * sz);
267 zleg.SetPoint(1, x0 + 0.05 * sz, y0 + 0.05 * sz, z0 + 1.05 * sz);
268 zleg.SetPoint(2, x0 - 0.05 * sz, y0 - 0.05 * sz, z0 + 1.05 * sz);
269 zleg.SetPoint(3, x0 + 0.05 * sz, y0 - 0.05 * sz, z0 + 1.05 * sz);
271 TPolyLine3D& yleg = view->
AddPolyLine3D(5, color, style, width);
272 yleg.SetPoint(0, x0 - 0.05 * sz, y0 + 1.15 * sz, z0);
273 yleg.SetPoint(1, x0 + 0.00 * sz, y0 + 1.10 * sz, z0);
274 yleg.SetPoint(2, x0 + 0.00 * sz, y0 + 1.05 * sz, z0);
275 yleg.SetPoint(3, x0 + 0.00 * sz, y0 + 1.10 * sz, z0);
276 yleg.SetPoint(4, x0 + 0.05 * sz, y0 + 1.15 * sz, z0);
278 TPolyLine3D& xleg = view->
AddPolyLine3D(7, color, style, width);
279 xleg.SetPoint(0, x0 + 1.05 * sz, y0 + 0.05 * sz, z0 - 0.05 * sz);
280 xleg.SetPoint(1, x0 + 1.05 * sz, y0 + 0.00 * sz, z0 - 0.00 * sz);
281 xleg.SetPoint(2, x0 + 1.05 * sz, y0 + 0.05 * sz, z0 + 0.05 * sz);
282 xleg.SetPoint(3, x0 + 1.05 * sz, y0 + 0.00 * sz, z0 - 0.00 * sz);
283 xleg.SetPoint(4, x0 + 1.05 * sz, y0 - 0.05 * sz, z0 - 0.05 * sz);
284 xleg.SetPoint(5, x0 + 1.05 * sz, y0 + 0.00 * sz, z0 - 0.00 * sz);
285 xleg.SetPoint(6, x0 + 1.05 * sz, y0 - 0.05 * sz, z0 + 0.05 * sz);
299 lariov::ChannelStatusProvider
const& channelStatus =
303 for (
size_t viewNo = 0; viewNo < geo->
Nviews(); viewNo++) {
305 for (
size_t wireNo = 0; wireNo < geo->
Nwires(planeID); wireNo++) {
310 if (channelStatus.IsBad(channel)) {
313 auto const wireStart = wireGeo->
GetStart();
314 auto const wireEnd = wireGeo->
GetEnd();
316 TPolyLine3D& pl = view->
AddPolyLine3D(2, color, style, width);
317 pl.SetPoint(0, coords[0] - 0.5, wireStart.Y(), wireStart.Z());
318 pl.SetPoint(1, coords[0] - 0.5, wireEnd.Y(), wireEnd.Z());
geo::TPCID const & ID() const
Returns the identifier of this TPC.
details::range_type< T > Iterate() const
Initializes the specified ID with the ID of the first cryostat.
Geometry description of a TPC wireThe wire is a single straight segment on a wire plane...
unsigned int fTPC
TPC number to draw, typically set by TWQProjectionView.
void WorldBox(double *xlo, double *xhi, double *ylo, double *yhi, double *zlo, double *zhi) const
Fills the arguments with the boundaries of the world.
The data type to uniquely identify a Plane.
Geometry information for a single TPC.
Geometry information for a single cryostat.
Point_t GetStart() const
Returns the world coordinate of one end of the wire [cm].
Point_t GetEnd() const
Returns the world coordinate of one end of the wire [cm].
double Length() const
Length is associated with z coordinate [cm].
TPolyLine3D & AddPolyLine3D(int n, int c, int w, int s)
Point_t GetCenter() const
Returns the center of the TPC volume in world coordinates [cm].
IDparameter< geo::WireID > WireID
Member type of validated geo::WireID parameter.
unsigned int fCryostat
Cryostat number to draw, typically set by TWQProjectionView.
T get(std::string const &key) const
double HalfHeight() const
Height is associated with y coordinate [cm].
std::size_t color(std::string const &procname)
raw::ChannelID_t PlaneWireToChannel(WireID const &wireid) const
Returns the ID of the TPC channel connected to the specified wire.
unsigned int Nwires(PlaneID const &planeid) const
Returns the total number of wires in the specified plane.
A collection of 3D drawable objects.
unsigned int Nviews() const
Returns the number of views (different wire orientations)
unsigned int ChannelID_t
Type representing the ID of a readout channel.
WireGeo const * WirePtr(WireID const &wireid) const
Returns the specified wire.
This is the interface class for drawing 3D detector geometries.
Namespace collecting geometry-related classes utilities.
art framework interface to geometry description
double HalfWidth() const
Width is associated with x coordinate [cm].