10 #include "TGDimension.h" 11 #include "TGNumberEntry.h" 15 #include "TRootEmbeddedCanvas.h" 18 #include "TGTextView.h" 76 fMC =
new MCBriefPad(
"fMCPadMultiTPC",
"MC Info.",0.15,0.13,1.0,0.17,
"");
80 fWireQ =
new TQPad(
"fWireQPadMultiTPC",
"ADCvsTime",0.15,0.0,1.0,0.13,
"TQ", 0, 0);
81 fWireQ->
Pad()->SetBit(TPad::kCannotMove,
true);
86 fMetaFrame =
new TGCompositeFrame(mf, 60, 60, kHorizontalFrame);
92 fLayout =
new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX |
93 kLHintsExpandY, 5, 5, 5, 5);
101 fMetaFrame->AddFrame(
fVFrame,
new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandY));
111 TGNumberFormat::kNESInteger,
112 TGNumberFormat::kNEAAnyNumber,
113 TGNumberFormat::kNELLimitMinMax,
117 kWire = TMath::Nint(0.5*geo->
Nwires(0));
127 fPlaneEntry->Connect(
"ValueSet(Long_t)",
"evd::TWQMultiTPCProjectionView",
this,
"SetPlane()");
128 fPlaneEntry->GetNumberEntry()->Connect(
"ReturnPressed()",
"evd::TWQMultiTPCProjectionView",
this,
"SetPlane()");
134 TGNumberFormat::kNESInteger,
135 TGNumberFormat::kNEAAnyNumber,
136 TGNumberFormat::kNELLimitMinMax,
144 fWireEntry->Connect(
"ValueSet(Long_t)",
"evd::TWQMultiTPCProjectionView",
this,
"SetWire()");
145 fWireEntry->GetNumberEntry()->Connect(
"ReturnPressed()",
"evd::TWQMultiTPCProjectionView",
this,
"SetWire()");
152 TGNumberFormat::kNESInteger,
153 TGNumberFormat::kNEAAnyNumber,
154 TGNumberFormat::kNELLimitMinMax,
168 fThresEntry->Connect(
"ValueSet(Long_t)",
"evd::TWQMultiTPCProjectionView",
this,
"SetThreshold()");
169 fThresEntry->GetNumberEntry()->Connect(
"ReturnPressed()",
"evd::TWQMultiTPCProjectionView",
this,
"SetThreshold()");
176 fGreyScale->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"SetGreyscale()");
177 if(cst->fColorOrGray == 1)
fGreyScale->SetState(kButtonDown);
182 fMCOn->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"SetMCInfo()");
190 fRawDraw ->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"SetRawCalib()");
191 fCalibDraw ->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"SetRawCalib()");
192 fRawCalibDraw->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"SetRawCalib()");
201 fFrame->AddFrame(
fMCOn,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 5, 1 ) );
203 fFrame->AddFrame(
fGreyScale,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 5, 1 ) );
204 fFrame->AddFrame(
fRawCalibDraw,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 5, 1 ) );
205 fFrame->AddFrame(
fCalibDraw,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 5, 1 ) );
206 fFrame->AddFrame(
fRawDraw,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 5, 1 ) );
207 fFrame->AddFrame(
fPlaneEntry,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 2, 1 ) );
208 fFrame->AddFrame(
fPlaneLabel,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 5, 1 ) );
209 fFrame->AddFrame(
fWireEntry,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 2, 1 ) );
210 fFrame->AddFrame(
fWireLabel,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 5, 1 ) );
211 fFrame->AddFrame(
fThresEntry,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 2, 1 ) );
212 fFrame->AddFrame(
fThresLabel,
new TGLayoutHints(kLHintsBottom | kLHintsRight, 0, 0, 5, 1 ) );
224 unsigned int ntpc = geo->
NTPC();
227 unsigned int nplanes = geo->
Nplanes();
231 for(
unsigned int t = 0; t < ntpc; ++t){
232 for(
unsigned int i = 0; i < nplanes; ++i){
233 double twx1 = 0. + t*0.97/(1.*ntpc);
234 double twx2 = t*0.97/(1.*ntpc);
236 double twy1 = 0.17 + (i)*(1.0-0.171)/(1.*nplanes);
237 double twy2 = 0.17 + (i+1)*(1.0-0.171)/(1.*nplanes);
239 TString padname =
"fWireProjTPC";
244 TString padtitle =
"TPC";
252 fPlanes.push_back(
new TWireProjPad(padname, padtitle, twx1, twy1, twx2, twy2, i+t*nplanes));
258 fPlanes.back()->Pad()->AddExec(
"mousedispatch",
259 Form(
"evd::TWQMultiTPCProjectionView::MouseDispatch(%d, (void*)%lu)",
260 i+t*nplanes, (
unsigned long)
this)
266 padname =
"fQPadTPC";
277 fPlaneQ.push_back(
new TQPad(padname, padtitle, twx2, twy1, twx3, twy2,
"Q", i, 0));
297 for(
unsigned int i = 0; i <
fPlanes.size(); ++i){
308 for(
unsigned int i=0; i<
fPlanes.size();++i){
311 fPlanes[i]->Pad()->GetFrame()->SetBit(TPad::kCannotMove,
true);
313 for(
unsigned int j=0;j<
fPlaneQ.size();++j){
316 fPlaneQ[j]->Pad()->GetFrame()->SetBit(TPad::kCannotMove,
true);
340 curr_zooming_plane=-1;
343 for(
size_t i = 0; i <
fPlanes.size(); ++i){
346 fPlanes[i]->Pad()->GetFrame()->SetBit(TPad::kCannotMove,
true);
348 std::vector<double> ZoomParams =
fPlanes[i]->GetCurrentZoom();
417 for(
size_t iplane = 0; iplane <
fPlanes.size(); ++iplane){
419 double ch=0,convch=0;
421 fPlanes[iplane]->RawDataDraw()->GetChargeSum(iplane,ch,convch);
422 mf::LogVerbatim(
"TWQMultiTPCProjectionView") <<
"Warning! Calculating for RawData! ";
425 fPlanes[iplane]->RecoBaseDraw()->GetChargeSum(iplane,ch,convch);
428 mf::LogVerbatim(
"TWQMultiTPCProjectionView") <<
"\ncharge collected at collection plane: " 429 << iplane <<
" " << ch <<
" " << convch;
441 int event = gPad->GetEvent();
455 if(shift_lock==1)
break;
456 if(evdlayoutopt-> fChangeWire==1) wqpp->
ChangeWire(plane);
457 case kButton1Down: shift_lock=0;
470 int event = gPad->GetEvent();
471 int px = gPad->GetEventX();
472 if(
event!=11)
return;
473 TObject *select = gPad->GetSelected();
475 if(!select->InheritsFrom(
"TBox"))
return;
478 float xx = gPad->AbsPixeltoX(px);
479 float x = gPad->PadtoX(xx);
483 kWire = (
unsigned int)TMath::Nint(x);
495 int event = gPad->GetEvent();
503 int px = gPad->GetEventX();
504 double w0 = gPad->AbsPixeltoX(px);
505 double x = gPad->PadtoX(w0);
507 int py = gPad->GetEventY();
508 double t0 = gPad->AbsPixeltoY(py);
509 double y = gPad->PadtoY(t0);
512 curr_zooming_plane=-1;
516 for(
size_t ii = 0; ii < this->
ppoints.size(); ++ii)
517 if(ppx.
plane==this->ppoints[ii].plane){
522 this->
fPlanes[this->
ppoints[ii].plane]->View()->AddMarker(ppx.
w, ppx.
t, kRed, 29, 2.0);
524 this->
fPlanes[plane]->View()->AddMarker(0.0,0.0,2,1,0.1);
526 repeat_plane=this->
ppoints[ii].plane;
532 if(repeat_plane==-1){
540 this->
fPlanes[plane]->Pad()->cd();
541 this->
fPlanes[plane]->View()->Clear();
543 this->
fPlanes[plane]->View()->AddMarker(ppx.
w, ppx.
t, kRed, 29, 2.0);
545 this->
fPlanes[plane]->View()->AddMarker(0.0,0.0,2,1,0.1);
546 this->
fPlanes[plane]->View()->Draw();
560 fPlanes[
x]->View()->AddMarker(0.0,0.0,2,1,0.1);
581 if(
pline.size() >= 2){
583 double xyz_vertex_fit[3];
586 const double origin[3] = {0.,0.,0.};
587 double xx0 = 0., yy0 = 0., zz0 = 0.;
588 double xx1 = 0., yy1 = 0., zz1 = 0.;
603 bool wires_cross=
false;
604 bool time_good=
false;
611 TGText *
tt=
new TGText(
"too big");
612 tt->InsLine(1,
"time distance");
619 TGText *
tt=
new TGText(
"wires cross");
629 xx0=(xyz_vertex_fit[0]+second_time)/2;
637 TGText *
tt=
new TGText(
"cross");
638 tt->InsLine(1,
"wires do not");
656 TGText *
tt=
new TGText(
"too big");
657 tt->InsLine(1,
"time distance");
664 TGText *
tt=
new TGText(
"wires do cross");
674 xx1=(xyz_vertex_fit[0]+second_time)/2;
681 TGText *
tt=
new TGText(
"cross");
682 tt->InsLine(1,
"wires do not");
693 length=pow(xx0-xx1,2)+pow(yy0-yy1,2)+pow(zz0-zz1,2);
694 length=pow(length,0.5);
699 TGText *
tt=
new TGText(
"selected points");
700 tt->InsLine(1,
"not enough");
717 double xyz_vertex_fit[3] = {0.};
718 double second_time = 0.;
719 double pos[3] = {0.};
720 const double origin[3] = {0.,0.,0.};
734 bool wires_cross=
false;
735 bool time_good=
false;
742 TGText *
tt=
new TGText(
"too big");
743 tt->InsLine(1,
"time distance");
757 TGText *
tt=
new TGText(Form(
"z:%4.1f",z));
758 tt->InsLine(1,Form(
"x:%4.1f,",(xyz_vertex_fit[0]+second_time)/2));
759 tt->InsLine(1,Form(
"y:%4.1f,",y));
767 TGText *
tt=
new TGText(
"cross");
768 tt->InsLine(1,
"wires do not");
777 unsigned int wplane = 0;
778 unsigned int wirevertex = 0;
783 for(
int yy = 0; yy < 2; ++yy)
795 pos[1]=xyz_vertex_fit[1];
796 pos[2]=xyz_vertex_fit[2];
798 wirevertex = geom->
NearestWire(pos, wplane, rawOpt->fTPC, rawOpt->fCryostat);
804 fPlanes[wplane]->View()->Clear();
806 fPlanes[wplane]->View()->AddMarker(wirevertex, timestart, kMagenta, 29, 2.0);
808 fPlanes[wplane]->View()->AddMarker(0.0,0.0,2,1,0.1);
809 fPlanes[wplane]->Pad()->Update();
810 fPlanes[wplane]->View()->Draw();
818 TGText *
tt=
new TGText(
"selected points");
819 tt->InsLine(1,
"not enough");
833 TObject *select = gPad->GetSelected();
835 if(!select->InheritsFrom(
"TBox"))
return;
837 static Float_t w0=-1,
t0=-1, w1=-1,
t1=-1;
839 static Int_t pxold, pyold;
840 static Int_t pw0, pt0;
841 static Int_t linedrawn;
845 static int wstart,wend;
846 static float tstart,tend;
848 int event = gPad->GetEvent();
849 int px = gPad->GetEventX();
850 int py = gPad->GetEventY();
855 gVirtualX->SetLineColor(-1);
856 w0 = gPad->AbsPixeltoX(px);
857 t0 = gPad->AbsPixeltoY(py);
859 pxold = px; pyold = py;
861 float x = gPad->PadtoX(w0);
862 tstart = gPad->PadtoY(
t0);
864 wstart = (
unsigned int)TMath::Nint(x);
865 curr_zooming_plane=plane;
868 case kButton1Motion:{
888 if (linedrawn) gVirtualX->DrawBox(lx, ly, hx, hy,TVirtualX::kHollow);
911 gVirtualX->DrawBox(lx, ly, hx, hy,TVirtualX::kHollow);
915 if (px == pw0 && py == pt0)
break;
916 w1 = gPad->AbsPixeltoX(px);
917 t1 = gPad->AbsPixeltoY(py);
918 gPad->Modified(kTRUE);
923 float x = gPad->PadtoX(w1);
924 tend = gPad->PadtoY(
t1);
925 wend = (
unsigned int)TMath::Nint(x);
927 gROOT->SetEditorMode();
930 double xx1,yy1,xx2,yy2;
932 gPad->GetRangeAxis(xx1, yy1, xx2, yy2);
934 if(wstart != 0 && tstart != 0 &&
935 ( fabs(wend-wstart ) > 0.01*(xx2-xx1) ) &&
936 ( fabs(tend-tstart ) > 0.01*(yy2-yy1) &&
937 curr_zooming_plane==plane ) ){
939 this->
SetZoom(plane,wstart,wend,tstart,tend);
955 if(flag==
true) zoom_opt=
"1";
966 for(
size_t iplane = 0; iplane <
fPlanes.size(); ++iplane){
967 int minw,maxw,mint,maxt;
971 fPlanes[iplane]->RawDataDraw()->GetRegionOfInterest(iplane,minw,maxw,mint,maxt);
973 fPlanes[iplane]->RecoBaseDraw()->GetRegionOfInterest(iplane,minw,maxw,mint,maxt);
979 minw = -0.005*(geo->
Nwires(iplane)-1);
980 maxw = 1.005*(geo->
Nwires(iplane)-1);
981 mint = -0.005*
fPlanes[iplane]->RawDataDraw()->TotalClockTicks();
982 maxt = 1.01*
fPlanes[iplane]->RawDataDraw()->TotalClockTicks();
985 SetZoom(iplane,minw,maxw,mint,maxt,
false);
986 zo.
wmin[iplane]=minw;
987 zo.
tmin[iplane]=mint;
988 zo.
wmax[iplane]=maxw;
989 zo.
tmax[iplane]=maxt;
1024 fZoomInterest->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"ZoomInterest()");
1029 fUnZoomInterest->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"ZoomInterest(=false)");
1033 fZoomBack->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"ZoomBack()");
1037 fToggleAutoZoom->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"SetZoomInterest()");
1043 fVFrame->AddFrame(
fZoomBack,
new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 0, 5, 1 ) );
1053 if(parameter==1 || parameter == 2){
1070 fFindEndpoint->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"FindEndPoint()");
1074 TGText *
tt=
new TGText(
"x,y,z");
1079 fClearPPoints->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"ClearEndPoints()");
1082 fToggleShowMarkers->Connect(
"Clicked()",
"evd::TWQMultiTPCProjectionView",
this,
"ToggleEndPointMarkers()");
1086 fVFrame->AddFrame(
fXYZPosition,
new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 0, 5, 1 ) );
1102 ThePrevZoomOpt.
wmin[plane],
1103 ThePrevZoomOpt.
wmax[plane],
1104 ThePrevZoomOpt.
tmin[plane],
1105 ThePrevZoomOpt.
tmax[plane],
1109 for(
size_t iplane = 0; iplane !=
fPlanes.size(); ++iplane){
1111 ThePrevZoomOpt.
wmin[iplane],
1112 ThePrevZoomOpt.
wmax[iplane],
1113 ThePrevZoomOpt.
tmin[iplane],
1114 ThePrevZoomOpt.
tmax[iplane],
1123 mf::LogVerbatim(
"TWQMultiTPCProjectionView") <<
"unable to unzoom further - no zoom settings left on stack"<<std::endl;
1146 TVirtualPad *ori = gPad;
1163 curr_zooming_plane=-1;
1165 fPlanes[plane]->SetZoomRange(wirelow, wirehi,timelow,timehi);
1183 TVirtualPad *ori = gPad;
1191 fWireQ->
Pad()->SetBit(TPad::kCannotMove,
true);
1192 fWireQ->
Pad()->GetFrame()->SetBit(TPad::kCannotMove,
true);
1207 kPlane = (
unsigned int)
fPlaneEntry->GetNumberEntry()->GetNumber();
1215 kWire = (
unsigned int)
fWireEntry->GetNumberEntry()->GetNumber();
1223 kDistance = (double)
fDistance->GetNumberEntry()->GetNumber();
1229 double threshold =
fThresEntry->GetNumberEntry()->GetNumber();
1234 TVirtualPad *ori = gPad;
1250 TGButton *b = (TGButton *)gTQSender;
1251 if(b->GetState() == kButtonDown){
1258 TVirtualPad *ori = gPad;
1274 TGButton *b = (TGButton *)gTQSender;
1275 int id = b->WidgetId();
1297 TVirtualPad *ori = gPad;
1319 TGButton *b = (TGButton *)gTQSender;
1320 if(b->GetState() == kButtonDown){
1329 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
TQPad * fWireQ
Histogram of charge vs time on selected wire.
int fEnableMCTruthCheckBox
1 to have the check box appear, 0 otherwise
PlaneGeo const & Plane(unsigned int const p, unsigned int const tpc=0, unsigned int const cstat=0) const
Returns the specified wire.
yes & test(std::ostream &)
static unsigned int kWire
virtual int TriggerOffset() const =0
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.
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.
virtual double SamplingRate() const =0
Returns the period of the TPC readout electronics clock.
static unsigned int kPlane
TCanvas * fCanvas
The ROOT drawing canvas.
A collection of drawable 2-D objects.
SigType_t SignalType(geo::PlaneID const &pid) const
Returns the type of signal on the channels of specified TPC 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.
std::vector< TWireProjPad * > fPlanes
time vs wire projection for each plane
unsigned int Nwires(unsigned int p, unsigned int tpc=0, unsigned int cstat=0) const
Returns the total number of wires in the specified plane.
void ZoomInterest(bool flag=true)
void Draw(const char *opt="")
MCBriefPad * fMC
Short summary of MC event.
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.
unsigned int Nplanes(unsigned int tpc=0, unsigned int cstat=0) const
Returns the total number of wire planes in the specified TPC.
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.
TGTextButton * fClearPPoints
Clear current list of End Points.
Class to perform operations needed to select hits and pass them to a cluster.
std::vector< TQPad * > fPlaneQ
charge on each plane
virtual double Temperature() const =0
static int curr_zooming_plane
geo::WireID::WireID_t NearestWire(geo::Point_t const &point, geo::PlaneID const &planeid) const
Returns the index of wire closest to position in the specified TPC.
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="")
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)
unsigned int NTPC(unsigned int cstat=0) const
Returns the total number of TPCs in the specified cryostat.
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.
Encapsulate the construction of a single detector plane.
TGRadioButton * fToggleZoom
Use zoom setting.
virtual double DriftVelocity(double efield=0., double temperature=0.) const =0
void ToggleEndPointMarkers()
TGCheckButton * fGreyScale
Display gray or color scale.
int fColorOrGray
0 = color, 1 = gray
static const char * zoom_opt
std::vector< ZoomOptionsMultiTPC > fPrevZoomOpt
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
virtual double Efield(unsigned int planegap=0) const =0
Returns the nominal electric field in the specified volume.
ZoomOptionsMultiTPC fZoomOpt
Namespace collecting geometry-related classes utilities.
~TWQMultiTPCProjectionView()
TRootEmbeddedCanvas * fEmbCanvas
Embedded canvas.
void LocalToWorld(const double *plane, double *world) const
Transform point from local plane frame to world frame.
art framework interface to geometry description
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)