13 #include "TGNumberEntry.h" 14 #include "TGTextView.h" 17 #include "TRootEmbeddedCanvas.h" 19 #include "TVirtualX.h" 67 fMC =
new MCBriefPad(
"fMCPadMultiTPC",
"MC Info.", 0.15, 0.13, 1.0, 0.17,
"");
71 fWireQ =
new TQPad(
"fWireQPadMultiTPC",
"ADCvsTime", 0.15, 0.0, 1.0, 0.13,
"TQ", 0, 0);
72 fWireQ->
Pad()->SetBit(TPad::kCannotMove,
true);
76 fMetaFrame =
new TGCompositeFrame(mf, 60, 60, kHorizontalFrame);
83 new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 5, 5, 5, 5);
90 fMetaFrame->AddFrame(
fVFrame,
new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandY));
101 TGNumberFormat::kNESInteger,
102 TGNumberFormat::kNEAAnyNumber,
103 TGNumberFormat::kNELLimitMinMax,
109 kWire = TMath::Nint(0.5 * geo->
Nwires(planeid));
119 fPlaneEntry->Connect(
"ValueSet(Long_t)",
"evd::TWQMultiTPCProjectionView",
this,
"SetPlane()");
121 "ReturnPressed()",
"evd::TWQMultiTPCProjectionView",
this,
"SetPlane()");
130 TGNumberFormat::kNESInteger,
131 TGNumberFormat::kNEAAnyNumber,
132 TGNumberFormat::kNELLimitMinMax,
134 geo->
Nwires(planeid) - 1);
141 fWireEntry->Connect(
"ValueSet(Long_t)",
"evd::TWQMultiTPCProjectionView",
this,
"SetWire()");
143 "ReturnPressed()",
"evd::TWQMultiTPCProjectionView",
this,
"SetWire()");
153 TGNumberFormat::kNESInteger,
154 TGNumberFormat::kNEAAnyNumber,
155 TGNumberFormat::kNELLimitMinMax,
157 geo->
Nwires(planeid) - 1);
170 "ValueSet(Long_t)",
"evd::TWQMultiTPCProjectionView",
this,
"SetThreshold()");
172 "ReturnPressed()",
"evd::TWQMultiTPCProjectionView",
this,
"SetThreshold()");
179 fGreyScale->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"SetGreyscale()");
180 if (cst->fColorOrGray == 1)
fGreyScale->SetState(kButtonDown);
185 fMCOn->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"SetMCInfo()");
193 fRawDraw->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"SetRawCalib()");
194 fCalibDraw->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"SetRawCalib()");
195 fRawCalibDraw->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"SetRawCalib()");
207 fFrame->AddFrame(
fMCOn,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 5, 1));
209 fFrame->AddFrame(
fGreyScale,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 5, 1));
210 fFrame->AddFrame(
fRawCalibDraw,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 5, 1));
211 fFrame->AddFrame(
fCalibDraw,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 5, 1));
212 fFrame->AddFrame(
fRawDraw,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 5, 1));
213 fFrame->AddFrame(
fPlaneEntry,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 2, 1));
214 fFrame->AddFrame(
fPlaneLabel,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 5, 1));
215 fFrame->AddFrame(
fWireEntry,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 2, 1));
216 fFrame->AddFrame(
fWireLabel,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 5, 1));
217 fFrame->AddFrame(
fThresEntry,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 2, 1));
218 fFrame->AddFrame(
fThresLabel,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 5, 1));
231 unsigned int ntpc = geo->
NTPC();
234 unsigned int nplanes = geo->
Nplanes();
238 for (
unsigned int t = 0; t < ntpc; ++t) {
239 for (
unsigned int i = 0; i < nplanes; ++i) {
240 double twx1 = 0. + t * 0.97 / (1. * ntpc);
241 double twx2 = t * 0.97 / (1. * ntpc);
243 double twy1 = 0.17 + (i) * (1.0 - 0.171) / (1. * nplanes);
244 double twy2 = 0.17 + (i + 1) * (1.0 - 0.171) / (1. * nplanes);
246 TString padname =
"fWireProjTPC";
251 TString padtitle =
"TPC";
260 new TWireProjPad(padname, padtitle, twx1, twy1, twx2, twy2, i + t * nplanes));
266 fPlanes.back()->Pad()->AddExec(
268 Form(
"evd::TWQMultiTPCProjectionView::MouseDispatch(%d, (void*)%lu)",
270 (
unsigned long)
this));
275 padname =
"fQPadTPC";
286 fPlaneQ.push_back(
new TQPad(padname, padtitle, twx2, twy1, twx3, twy2,
"Q", i, 0));
326 for (
unsigned int i = 0; i <
fPlanes.size(); ++i) {
343 for (
unsigned int i = 0; i <
fPlanes.size(); ++i) {
346 fPlanes[i]->Pad()->GetFrame()->SetBit(TPad::kCannotMove,
true);
348 for (
unsigned int j = 0; j <
fPlaneQ.size(); ++j) {
351 fPlaneQ[j]->Pad()->GetFrame()->SetBit(TPad::kCannotMove,
true);
375 curr_zooming_plane = -1;
378 for (
size_t i = 0; i <
fPlanes.size(); ++i) {
381 fPlanes[i]->Pad()->GetFrame()->SetBit(TPad::kCannotMove,
true);
383 std::vector<double> ZoomParams =
fPlanes[i]->GetCurrentZoom();
450 for (
size_t iplane = 0; iplane <
fPlanes.size(); ++iplane) {
452 double ch = 0, convch = 0;
454 fPlanes[iplane]->RawDataDraw()->GetChargeSum(iplane, ch, convch);
455 mf::LogVerbatim(
"TWQMultiTPCProjectionView") <<
"Warning! Calculating for RawData! ";
458 fPlanes[iplane]->RecoBaseDraw()->GetChargeSum(iplane, ch, convch);
462 <<
"\ncharge collected at collection plane: " << iplane <<
" " << ch <<
" " << convch;
472 int event = gPad->GetEvent();
486 if (shift_lock == 1)
break;
488 case kButton1Down: shift_lock = 0;
500 int event = gPad->GetEvent();
501 int px = gPad->GetEventX();
502 if (
event != 11)
return;
503 TObject* select = gPad->GetSelected();
505 if (!select->InheritsFrom(
"TBox"))
return;
508 float xx = gPad->AbsPixeltoX(px);
509 float x = gPad->PadtoX(xx);
512 kWire = (
unsigned int)TMath::Nint(x);
523 int event = gPad->GetEvent();
525 if (
event != 7)
return;
530 int px = gPad->GetEventX();
531 double w0 = gPad->AbsPixeltoX(px);
532 double x = gPad->PadtoX(w0);
534 int py = gPad->GetEventY();
535 double t0 = gPad->AbsPixeltoY(py);
536 double y = gPad->PadtoY(t0);
539 curr_zooming_plane = -1;
542 int repeat_plane = -1;
543 for (
size_t ii = 0; ii < this->
ppoints.size(); ++ii)
544 if (ppx.
plane == this->ppoints[ii].plane) {
549 this->
fPlanes[this->
ppoints[ii].plane]->View()->AddMarker(ppx.
w, ppx.
t, kRed, 29, 2.0);
551 this->
fPlanes[plane]->View()->AddMarker(0.0, 0.0, 2, 1, 0.1);
553 repeat_plane = this->
ppoints[ii].plane;
559 if (repeat_plane == -1) {
560 if (this->
ppoints.size() >= 2) {
567 this->
fPlanes[plane]->Pad()->cd();
568 this->
fPlanes[plane]->View()->Clear();
570 this->
fPlanes[plane]->View()->AddMarker(ppx.
w, ppx.
t, kRed, 29, 2.0);
572 this->
fPlanes[plane]->View()->AddMarker(0.0, 0.0, 2, 1, 0.1);
573 this->
fPlanes[plane]->View()->Draw();
585 fPlanes[
x]->View()->AddMarker(0.0, 0.0, 2, 1, 0.1);
601 if (
pline.size() >= 2) {
603 double xyz_vertex_fit[3];
605 double xx0 = 0., yy0 = 0., zz0 = 0.;
606 double xx1 = 0., yy1 = 0., zz1 = 0.;
623 bool wires_cross =
false;
624 bool time_good =
false;
631 TGText*
tt =
new TGText(
"too big");
632 tt->InsLine(1,
"time distance");
639 TGText*
tt =
new TGText(
"wires cross");
642 xyz_vertex_fit[1] =
y;
643 xyz_vertex_fit[2] =
z;
645 xyz_vertex_fit[0] = (
pline[0].t0 -
trigger_offset(clockData)) * larv * ftimetick + pos.X();
649 xx0 = (xyz_vertex_fit[0] + second_time) / 2;
657 TGText*
tt =
new TGText(
"cross");
658 tt->InsLine(1,
"wires do not");
676 TGText*
tt =
new TGText(
"too big");
677 tt->InsLine(1,
"time distance");
684 TGText*
tt =
new TGText(
"wires do cross");
687 xyz_vertex_fit[1] =
y;
688 xyz_vertex_fit[2] =
z;
691 xyz_vertex_fit[0] = (
pline[0].t1 -
trigger_offset(clockData)) * larv * ftimetick + pos.X();
695 xx1 = (xyz_vertex_fit[0] + second_time) / 2;
701 TGText*
tt =
new TGText(
"cross");
702 tt->InsLine(1,
"wires do not");
713 length = pow(xx0 - xx1, 2) + pow(yy0 - yy1, 2) + pow(zz0 - zz1, 2);
714 length = pow(length, 0.5);
719 TGText*
tt =
new TGText(
"selected points");
720 tt->InsLine(1,
"not enough");
733 std::cerr <<
"No event available\n";
745 double xyz_vertex_fit[3] = {0.};
746 double second_time = 0.;
754 double larv = detProp.DriftVelocity(detProp.Efield(), detProp.Temperature());
764 bool wires_cross =
false;
765 bool time_good =
false;
772 TGText*
tt =
new TGText(
"too big");
773 tt->InsLine(1,
"time distance");
780 xyz_vertex_fit[1] =
y;
781 xyz_vertex_fit[2] =
z;
787 TGText*
tt =
new TGText(Form(
"z:%4.1f", z));
788 tt->InsLine(1, Form(
"x:%4.1f,", (xyz_vertex_fit[0] + second_time) / 2));
789 tt->InsLine(1, Form(
"y:%4.1f,", y));
796 TGText*
tt =
new TGText(
"cross");
797 tt->InsLine(1,
"wires do not");
806 unsigned int wplane = 0;
807 unsigned int wirevertex = 0;
812 for (
int yy = 0; yy < 2; ++yy)
823 pos.SetY(xyz_vertex_fit[1]);
824 pos.SetZ(xyz_vertex_fit[2]);
829 ((xyz_vertex_fit[0]) / detProp.DriftVelocity(detProp.Efield(), detProp.Temperature())) *
833 (pos.X() / detProp.DriftVelocity(detProp.Efield(), detProp.Temperature())) *
838 fPlanes[wplane]->View()->Clear();
840 fPlanes[wplane]->View()->AddMarker(wirevertex, timestart, kMagenta, 29, 2.0);
842 fPlanes[wplane]->View()->AddMarker(0.0, 0.0, 2, 1, 0.1);
843 fPlanes[wplane]->Pad()->Update();
844 fPlanes[wplane]->View()->Draw();
852 TGText*
tt =
new TGText(
"selected points");
853 tt->InsLine(1,
"not enough");
867 TObject* select = gPad->GetSelected();
869 if (!select->InheritsFrom(
"TBox"))
return;
871 static Float_t w0 = -1,
t0 = -1, w1 = -1,
t1 = -1;
873 static Int_t pxold, pyold;
874 static Int_t pw0, pt0;
875 static Int_t linedrawn;
879 static int wstart, wend;
880 static float tstart, tend;
882 int event = gPad->GetEvent();
883 int px = gPad->GetEventX();
884 int py = gPad->GetEventY();
889 gVirtualX->SetLineColor(-1);
890 w0 = gPad->AbsPixeltoX(px);
891 t0 = gPad->AbsPixeltoY(py);
897 float x = gPad->PadtoX(w0);
898 tstart = gPad->PadtoY(
t0);
900 wstart = (
unsigned int)TMath::Nint(x);
901 curr_zooming_plane = plane;
904 case kButton1Motion: {
924 if (linedrawn) gVirtualX->DrawBox(lx, ly, hx, hy, TVirtualX::kHollow);
947 gVirtualX->DrawBox(lx, ly, hx, hy, TVirtualX::kHollow);
951 if (px == pw0 && py == pt0)
break;
952 w1 = gPad->AbsPixeltoX(px);
953 t1 = gPad->AbsPixeltoY(py);
954 gPad->Modified(kTRUE);
959 float x = gPad->PadtoX(w1);
960 tend = gPad->PadtoY(
t1);
961 wend = (
unsigned int)TMath::Nint(x);
963 gROOT->SetEditorMode();
966 double xx1, yy1, xx2, yy2;
968 gPad->GetRangeAxis(xx1, yy1, xx2, yy2);
970 if (wstart != 0 && tstart != 0 && (fabs(wend - wstart) > 0.01 * (xx2 - xx1)) &&
971 (fabs(tend - tstart) > 0.01 * (yy2 - yy1) && curr_zooming_plane == plane)) {
973 this->
SetZoom(plane, wstart, wend, tstart, tend);
1000 for (
size_t iplane = 0; iplane <
fPlanes.size(); ++iplane) {
1001 int minw, maxw, mint, maxt;
1005 fPlanes[iplane]->RawDataDraw()->GetRegionOfInterest(iplane, minw, maxw, mint, maxt);
1007 fPlanes[iplane]->RecoBaseDraw()->GetRegionOfInterest(iplane, minw, maxw, mint, maxt);
1009 if (test == -1)
continue;
1013 minw = -0.005 * (geo->
Nwires(planeID) - 1);
1014 maxw = 1.005 * (geo->
Nwires(planeID) - 1);
1015 mint = -0.005 *
fPlanes[iplane]->RawDataDraw()->TotalClockTicks();
1016 maxt = 1.01 *
fPlanes[iplane]->RawDataDraw()->TotalClockTicks();
1019 SetZoom(iplane, minw, maxw, mint, maxt,
false);
1020 zo.
wmin[iplane] = minw;
1021 zo.
tmin[iplane] = mint;
1022 zo.
wmax[iplane] = maxw;
1023 zo.
tmax[iplane] = maxt;
1057 fZoomInterest->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"ZoomInterest()");
1061 "Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"ZoomInterest(=false)");
1064 fZoomBack->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"ZoomBack()");
1069 "Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"SetZoomInterest()");
1075 fVFrame->AddFrame(
fZoomBack,
new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 0, 5, 1));
1083 if (parameter == 1 || parameter == 2) {
fToggleZoom->SetState(kButtonUp); }
1096 fFindEndpoint->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"FindEndPoint()");
1099 fVFrame, 100, 55, 999, TGView::kNoHSB | TGView::kNoVSB);
1101 TGText*
tt =
new TGText(
"x,y,z");
1106 "Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"ClearEndPoints()");
1109 new TGCheckButton(
fVFrame,
"ShowMarkers", 0);
1111 "Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"ToggleEndPointMarkers()");
1130 ThePrevZoomOpt.
wmin[plane],
1131 ThePrevZoomOpt.
wmax[plane],
1132 ThePrevZoomOpt.
tmin[plane],
1133 ThePrevZoomOpt.
tmax[plane],
1137 for (
size_t iplane = 0; iplane !=
fPlanes.size(); ++iplane) {
1139 ThePrevZoomOpt.
wmin[iplane],
1140 ThePrevZoomOpt.
wmax[iplane],
1141 ThePrevZoomOpt.
tmin[iplane],
1142 ThePrevZoomOpt.
tmax[iplane],
1151 <<
"unable to unzoom further - no zoom settings left on stack" << std::endl;
1173 TVirtualPad* ori = gPad;
1177 if (wirehi < wirelow) {
1183 if (timehi < timelow) {
1190 curr_zooming_plane = -1;
1192 fPlanes[plane]->SetZoomRange(wirelow, wirehi, timelow, timehi);
1210 TVirtualPad* ori = gPad;
1218 fWireQ->
Pad()->SetBit(TPad::kCannotMove,
true);
1219 fWireQ->
Pad()->GetFrame()->SetBit(TPad::kCannotMove,
true);
1234 kPlane = (
unsigned int)
fPlaneEntry->GetNumberEntry()->GetNumber();
1242 kWire = (
unsigned int)
fWireEntry->GetNumberEntry()->GetNumber();
1250 kDistance = (double)
fDistance->GetNumberEntry()->GetNumber();
1256 double threshold =
fThresEntry->GetNumberEntry()->GetNumber();
1261 TVirtualPad* ori = gPad;
1277 TGButton* b = (TGButton*)gTQSender;
1278 if (b->GetState() == kButtonDown) { cst->
fColorOrGray = 1; }
1283 TVirtualPad* ori = gPad;
1299 TGButton* b = (TGButton*)gTQSender;
1300 int id = b->WidgetId();
1322 TVirtualPad* ori = gPad;
1344 TGButton* b = (TGButton*)gTQSender;
1345 if (b->GetState() == kButtonDown) {
1354 TVirtualPad* ori = gPad;
code to link reconstructed objects back to the MC truth information
TGRadioButton * fCalibDraw
Draw calibrated information only.
MaybeLogger_< ELseverityLevel::ELsev_info, true > LogVerbatim
unsigned int NTPC(CryostatID const &cryoid=cryostat_zero) const
Returns the total number of TPCs in the specified cryostat.
const art::Event * GetEvent() const
TQPad * fWireQ
Histogram of charge vs time on selected wire.
int fEnableMCTruthCheckBox
1 to have the check box appear, 0 otherwise
unsigned int fTPC
TPC number to draw, typically set by TWQProjectionView.
static unsigned int kWire
Drawing pad for short summary of an MC event.
Drawing pad showing a single X-Z or Y-Z projection of an event.
TGCompositeFrame * fVFrame
needed for the side frame
int fDrawRawDataOrCalibWires
0 for raw
TGCompositeFrame * fFrame
Graphics frame.
The data type to uniquely identify a Plane.
Drawing pad for time or charge histograms.
double Temperature() const
In kelvin.
TGNumberEntry * fThresEntry
ADC threshold to display.
std::map< int, double > tmin
bool ChannelsIntersect(raw::ChannelID_t c1, raw::ChannelID_t c2, double &y, double &z) const
Returns an intersection point of two channels.
static unsigned int kPlane
TCanvas * fCanvas
The ROOT drawing canvas.
A collection of drawable 2-D objects.
WireID_t Wire
Index of the wire within its plane.
TGTextButton * fUnZoomInterest
Unzoom on iteresting region.
TGRadioButton * fRawCalibDraw
Draw raw and calibrated information.
TGLayoutHints * fLayout
Layout hints for frame.
void ChangeWire(int plane)
Manage all things related to colors for the event display.
unsigned short fShowMCTruthVectors
std::vector< TWireProjPad * > fPlanes
time vs wire projection for each plane
Singleton to hold the current art::Event for the event display.
void ZoomInterest(bool flag=true)
void Draw(const char *opt="")
MCBriefPad * fMC
Short summary of MC event.
double FindLineLength(detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp)
double Efield(unsigned int planegap=0) const
kV/cm
void RadioButtonsDispatch(int parameter)
TGNumberEntry * fPlaneEntry
Plane number displayed.
int fShowEndPointSection
Show section corresponding to EndPoint finding.
The color scales used by the event display.
HeaderPad * fHeaderPad
Show header information.
std::deque< util::PxPoint > ppoints
list of points in each WireProjPad used for x,y,z finding
TGTextButton * fFindEndpoint
Calculate XYZ position of two points in wire planes.
TGCheckButton * fMCOn
Display MC truth information.
PlaneGeo const & Plane(PlaneID const &planeid) const
Returns the specified wire.
Point_t GetBoxCenter() const
Returns the centre of the box representing the plane.
int fShowSideBar
1 to show, 0 don't show
TGTextButton * fZoomBack
Unzoom on iteresting region.
unsigned short fXsize
Size of the canvas;.
A drawing pad for time vs wire.
int fAutoZoomInterest
Set the automatic zoom to the interest region.
void SelectPoint(int plane)
TGCheckButton * fToggleAutoZoom
Toggle the autozoom setting.
geo::Point_t toWorldCoords(LocalPoint_t const &local) const
Transform point from local plane frame to world frame.
TGTextButton * fClearPPoints
Clear current list of End Points.
unsigned int fCryostat
Cryostat number to draw, typically set by TWQProjectionView.
static EventHolder * Instance()
static int curr_zooming_plane
int fShowEndPointMarkers
Draw EndPoint Markers if clicked.
double fMinSignal
minimum ADC count to display a time bin
TGTextView * fXYZPosition
Display the xyz position.
TGRadioButton * fRawDraw
Draw Raw information only.
geo::TPCID CurrentTPC() const
Returns the current TPC as a TPCID.
void DrawPads(const char *opt="")
double DriftVelocity(double efield=0., double temperature=0.) const
cm/us
The data type to uniquely identify a TPC.
TGCompositeFrame * fMetaFrame
needed for the side frame
Class to aid in the rendering of RecoBase objects.
Class to aid in the rendering of RawData objects.
unsigned short fYsize
Size of the canvas;.
void SetMouseZoomRegion(int plane)
std::map< int, double > wmax
TWQMultiTPCProjectionView(TGMainFrame *mf)
TGTextButton * fZoomInterest
Zoom on iteresting region.
static void MouseDispatch(int plane, void *wqpv)
raw::ChannelID_t PlaneWireToChannel(WireID const &wireid) const
Returns the ID of the TPC channel connected to the specified wire.
SigType_t SignalType(PlaneID const &pid) const
Returns the type of signal on the channels of specified TPC plane.
WireID NearestWireID(Point_t const &point, PlaneID const &planeid) const
Returns the ID of wire closest to position in the specified TPC.
Encapsulate the construction of a single detector plane.
int fChangeWire
1 to click mouse and change wire, 0 don't
Contains all timing reference information for the detector.
TGRadioButton * fToggleZoom
Use zoom setting.
void ToggleEndPointMarkers()
std::vector< TQPad * > fPlaneQ
charge on each plane
TGCheckButton * fGreyScale
Display gray or color scale.
int fColorOrGray
0 = color, 1 = gray
unsigned int Nwires(PlaneID const &planeid) const
Returns the total number of wires in the specified plane.
int trigger_offset(DetectorClocksData const &data)
static const char * zoom_opt
std::vector< ZoomOptionsMultiTPC > fPrevZoomOpt
unsigned int Nplanes(TPCID const &tpcid=tpc_zero) const
Returns the total number of planes in the specified TPC.
int fPrintTotalCharge
Print out the total charge in an event.
std::deque< util::PxLine > pline
list of lines in each WireProjPad used for calculating 2d and 3d angles
std::map< int, double > wmin
void SetZoom(int plane, int wirelow, int wirehi, int timelo, int timehi, bool StoreZoom=true)
TGNumberEntry * fWireEntry
Wire number displayed.
std::map< int, double > tmax
double sampling_rate(DetectorClocksData const &data)
Returns the period of the TPC readout electronics clock.
ZoomOptionsMultiTPC fZoomOpt
Namespace collecting geometry-related classes utilities.
~TWQMultiTPCProjectionView()
TRootEmbeddedCanvas * fEmbCanvas
Embedded canvas.
art framework interface to geometry description
geo::Point3DBase_t< PlaneGeoCoordinatesTag > LocalPoint_t
Type of points in the local GDML wire plane frame.
TGNumberEntry * fDistance
Distance from line to find hits in cluster.
constexpr Point origin()
Returns a origin position with a point of the specified type.
Event finding and building.
TGCheckButton * fToggleShowMarkers
Toggle the ShowEndPointMarkersSetting.
Signal from collection planes.
void SetPlaneWire(unsigned int plane=0, unsigned int wire=0)