6 #include "art/Framework/Services/Registry/ServiceHandle.h"
7 #include "art/Utilities/ToolMacros.h"
14 #include "nuevdb/EventDisplayBase/View3D.h"
16 #include "TPolyLine3D.h"
31 void configure(
const fhicl::ParameterSet& pset);
32 void DrawRectangularBox(evdb::View3D* view,
double* coordsLo,
double* coordsHi,
int color=kGray,
int width = 1,
int style = 1);
33 void DrawGrids(evdb::View3D* view,
double* coordsLo,
double* coordsHi,
bool verticalGrid,
int color=kGray,
int width = 1,
int style = 1);
34 void DrawAxes(evdb::View3D* view,
double* coordsLo,
double* coordsHi,
int color=kGray,
int width = 1,
int style = 1);
53 fDrawGrid = pset.get<
bool >(
"DrawGrid",
true);
54 fDrawAxes = pset.get<
bool >(
"DrawAxes",
true);
63 art::ServiceHandle<geo::Geometry const> geo;
65 bool axesNotDrawn(
true);
67 double xl,xu,yl,yu,zl,zu;
69 geo->WorldBox(&xl,&xu,&yl,&yu,&zl,&zu);
71 std::cout <<
"--- building ICARUS 3D display, low coord: " << xl <<
", " << yl <<
", " << zl <<
", hi coord: " << xu <<
", " << yu <<
", " << zu << std::endl;
78 double cryoCoordsLo[] = {cryoGeo.
MinX(), cryoGeo.
MinY(), cryoGeo.
MinZ()};
79 double cryoCoordsHi[] = {cryoGeo.
MaxX(), cryoGeo.
MaxY(), cryoGeo.
MaxZ()};
81 std::cout <<
" - cryostat: " << cryoGeo.
ID() <<
", low coord: " << cryoCoordsLo[0] <<
", " << cryoCoordsLo[1] <<
", " << cryoCoordsLo[2] <<
", hi coord: " << cryoCoordsHi[0] <<
", " << cryoCoordsHi[1] <<
", " << cryoCoordsHi[2] << std::endl;
87 DrawAxes(view, cryoCoordsLo, cryoCoordsHi, kBlue, 1, 1);
92 for(
size_t tpcIdx = 0; tpcIdx < cryoGeo.
NTPC(); tpcIdx++)
100 double coordsLo[] = {tpcCenter.X() - tpcGeo.
HalfWidth(), tpcCenter.Y() - tpcGeo.
HalfHeight(), tpcCenter.Z() - 0.5 * tpcGeo.
Length()};
101 double coordsHi[] = {tpcCenter.X() + tpcGeo.
HalfWidth(), tpcCenter.Y() + tpcGeo.
HalfHeight(), tpcCenter.Z() + 0.5 * tpcGeo.
Length()};
103 std::cout <<
" - TPC: " << tpcGeo.
ID() <<
", low coord: " << coordsLo[0] <<
", " << coordsLo[1] <<
", " << coordsLo[2] <<
", hi coord: " << coordsHi[0] <<
", " << coordsHi[1] <<
", " << coordsHi[2] << std::endl;
119 TPolyLine3D&
top = view->AddPolyLine3D(5, color, width, style);
120 top.SetPoint(0, coordsLo[0], coordsHi[1], coordsLo[2]);
121 top.SetPoint(1, coordsHi[0], coordsHi[1], coordsLo[2]);
122 top.SetPoint(2, coordsHi[0], coordsHi[1], coordsHi[2]);
123 top.SetPoint(3, coordsLo[0], coordsHi[1], coordsHi[2]);
124 top.SetPoint(4, coordsLo[0], coordsHi[1], coordsLo[2]);
126 TPolyLine3D& side = view->AddPolyLine3D(5, color, width, style);
127 side.SetPoint(0, coordsHi[0], coordsHi[1], coordsLo[2]);
128 side.SetPoint(1, coordsHi[0], coordsLo[1], coordsLo[2]);
129 side.SetPoint(2, coordsHi[0], coordsLo[1], coordsHi[2]);
130 side.SetPoint(3, coordsHi[0], coordsHi[1], coordsHi[2]);
131 side.SetPoint(4, coordsHi[0], coordsHi[1], coordsLo[2]);
133 TPolyLine3D& side2 = view->AddPolyLine3D(5, color, width, style);
134 side2.SetPoint(0, coordsLo[0], coordsHi[1], coordsLo[2]);
135 side2.SetPoint(1, coordsLo[0], coordsLo[1], coordsLo[2]);
136 side2.SetPoint(2, coordsLo[0], coordsLo[1], coordsHi[2]);
137 side2.SetPoint(3, coordsLo[0], coordsHi[1], coordsHi[2]);
138 side2.SetPoint(4, coordsLo[0], coordsHi[1], coordsLo[2]);
140 TPolyLine3D&
bottom = view->AddPolyLine3D(5, color, width, style);
141 bottom.SetPoint(0, coordsLo[0], coordsLo[1], coordsLo[2]);
142 bottom.SetPoint(1, coordsHi[0], coordsLo[1], coordsLo[2]);
143 bottom.SetPoint(2, coordsHi[0], coordsLo[1], coordsHi[2]);
144 bottom.SetPoint(3, coordsLo[0], coordsLo[1], coordsHi[2]);
145 bottom.SetPoint(4, coordsLo[0], coordsLo[1], coordsLo[2]);
152 double z = coordsLo[2];
156 TPolyLine3D& gridt = view->AddPolyLine3D(2, color, style, width);
157 gridt.SetPoint(0, coordsLo[0], coordsLo[1], z);
158 gridt.SetPoint(1, coordsHi[0], coordsLo[1], z);
162 TPolyLine3D& grids = view->AddPolyLine3D(2, color, style, width);
163 grids.SetPoint(0, coordsHi[0], coordsLo[1], z);
164 grids.SetPoint(1, coordsHi[0], coordsHi[1], z);
168 if (z>coordsHi[2])
break;
172 double x = coordsLo[0];
175 TPolyLine3D& gridt = view->AddPolyLine3D(2, color, style, width);
176 gridt.SetPoint(0, x, coordsLo[1], coordsLo[2]);
177 gridt.SetPoint(1, x, coordsLo[1], coordsHi[2]);
179 if (x>coordsHi[0])
break;
185 double y = coordsLo[1];
188 TPolyLine3D& grids = view->AddPolyLine3D(2, color, style, width);
189 grids.SetPoint(0, coordsHi[0], y, coordsLo[2]);
190 grids.SetPoint(1, coordsHi[0], y, coordsHi[2]);
192 if (y>coordsHi[1])
break;
204 double y0 = 1.10*coordsLo[1];
205 double z0 = -0.10*coordsHi[2];
206 double sz = 0.20*coordsHi[2];
208 TPolyLine3D& xaxis = view->AddPolyLine3D(2, color, style, width);
209 TPolyLine3D& yaxis = view->AddPolyLine3D(2, color, style, width);
210 TPolyLine3D& zaxis = view->AddPolyLine3D(2, color, style, width);
211 xaxis.SetPoint(0, x0, y0, z0);
212 xaxis.SetPoint(1, sz+x0, y0, z0);
214 yaxis.SetPoint(0, x0, y0, z0);
215 yaxis.SetPoint(1, x0, y0+sz, z0);
217 zaxis.SetPoint(0, x0, y0, z0);
218 zaxis.SetPoint(1, x0, y0, z0+sz);
220 TPolyLine3D& xpoint = view->AddPolyLine3D(3, color, style, width);
221 TPolyLine3D& ypoint = view->AddPolyLine3D(3, color, style, width);
222 TPolyLine3D& zpoint = view->AddPolyLine3D(3, color, style, width);
224 xpoint.SetPoint(0, 0.95*sz+x0, y0, z0-0.05*sz);
225 xpoint.SetPoint(1, 1.00*sz+x0, y0, z0);
226 xpoint.SetPoint(2, 0.95*sz+x0, y0, z0+0.05*sz);
228 ypoint.SetPoint(0, x0, 0.95*sz+y0, z0-0.05*sz);
229 ypoint.SetPoint(1, x0, 1.00*sz+y0, z0);
230 ypoint.SetPoint(2, x0, 0.95*sz+y0, z0+0.05*sz);
232 zpoint.SetPoint(0, x0-0.05*sz, y0, 0.95*sz+z0);
233 zpoint.SetPoint(1, x0+0.00*sz, y0, 1.00*sz+z0);
234 zpoint.SetPoint(2, x0+0.05*sz, y0, 0.95*sz+z0);
236 TPolyLine3D& zleg = view->AddPolyLine3D(4, color, style, width);
237 zleg.SetPoint(0, x0-0.05*sz, y0+0.05*sz, z0+1.05*sz);
238 zleg.SetPoint(1, x0+0.05*sz, y0+0.05*sz, z0+1.05*sz);
239 zleg.SetPoint(2, x0-0.05*sz, y0-0.05*sz, z0+1.05*sz);
240 zleg.SetPoint(3, x0+0.05*sz, y0-0.05*sz, z0+1.05*sz);
242 TPolyLine3D& yleg = view->AddPolyLine3D(5, color, style, width);
243 yleg.SetPoint(0, x0-0.05*sz, y0+1.15*sz, z0);
244 yleg.SetPoint(1, x0+0.00*sz, y0+1.10*sz, z0);
245 yleg.SetPoint(2, x0+0.00*sz, y0+1.05*sz, z0);
246 yleg.SetPoint(3, x0+0.00*sz, y0+1.10*sz, z0);
247 yleg.SetPoint(4, x0+0.05*sz, y0+1.15*sz, z0);
249 TPolyLine3D& xleg = view->AddPolyLine3D(7, color, style, width);
250 xleg.SetPoint(0, x0+1.05*sz, y0+0.05*sz, z0-0.05*sz);
251 xleg.SetPoint(1, x0+1.05*sz, y0+0.00*sz, z0-0.00*sz);
252 xleg.SetPoint(2, x0+1.05*sz, y0+0.05*sz, z0+0.05*sz);
253 xleg.SetPoint(3, x0+1.05*sz, y0+0.00*sz, z0-0.00*sz);
254 xleg.SetPoint(4, x0+1.05*sz, y0-0.05*sz, z0-0.05*sz);
255 xleg.SetPoint(5, x0+1.05*sz, y0+0.00*sz, z0-0.00*sz);
256 xleg.SetPoint(6, x0+1.05*sz, y0-0.05*sz, z0+0.05*sz);
263 art::ServiceHandle<geo::Geometry const> geo;
264 art::ServiceHandle<evd::RawDrawingOptions const> rawOpt;
267 = art::ServiceHandle<lariov::ChannelStatusService const>()->GetProvider();
270 for(
size_t viewNo = 0; viewNo < geo->Nviews(); viewNo++)
272 for(
size_t wireNo = 0; wireNo < geo->Nwires(viewNo); wireNo++)
278 if (channelStatus.
IsBad(channel))
288 TPolyLine3D& pl = view->AddPolyLine3D(2, color, style, width);
289 pl.SetPoint(0, coords[0]-0.5, wireStart[1], wireStart[2]);
290 pl.SetPoint(1, coords[0]-0.5, wireEnd[1], wireEnd[2]);
geo::TPCID const & ID() const
Returns the identifier of this TPC.
void GetStart(double *xyz) const
Geometry description of a TPC wireThe wire is a single straight segment on a wire plane...
process_name opflash particleana ie ie ie z
process_name opflash particleana ie x
virtual bool IsBad(raw::ChannelID_t channel) const =0
Returns whether the specified channel is bad in the current run.
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.
double Length() const
Length is associated with z coordinate [cm].
process_name opflash particleana ie ie y
IDparameter< geo::WireID > WireID
Member type of validated geo::WireID parameter.
double MinZ() const
Returns the world z coordinate of the start of the box.
unsigned int NTPC() const
Number of TPCs in this cryostat.
Class providing information about the quality of channels.
double MaxY() const
Returns the world y coordinate of the end of the box.
double HalfHeight() const
Height is associated with y coordinate [cm].
const TPCGeo & TPC(unsigned int itpc) const
Return the itpc'th TPC in the cryostat.
void GetEnd(double *xyz) const
double MaxZ() const
Returns the world z coordinate of the end of the box.
Interface for experiment-specific channel quality info provider.
unsigned int ChannelID_t
Type representing the ID of a readout channel.
Interface for experiment-specific service for channel quality info.
Forward iterator browsing all geometry elements in the detector.
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
BEGIN_PROLOG could also be cout
double HalfWidth() const
Width is associated with x coordinate [cm].
geo::CryostatID const & ID() const
Returns the identifier of this cryostat.
Point GetCenter() const
Returns the center of the TPC volume in world coordinates [cm].