source: Sophya/trunk/SophyaPI/PIext/pigfd1.cc@ 4005

Last change on this file since 4005 was 2615, checked in by cmv, 21 years ago

using namespace sophya enleve de machdefs.h, nouveau sopnamsp.h cmv 10/09/2004

File size: 2.8 KB
Line 
1// Cette classe est maintenant obsolete: generaldata <==> ntuple pour le dessin
2
3#include <stdio.h>
4#include "sopnamsp.h"
5#include "pigfd1.h"
6
7/* --Methode-- */
8PIGenFitDat::PIGenFitDat(GeneralFitData* gfd, bool ad)
9: PIDrawer(), mGFD(gfd), mAdDO(ad), VarX(0), ErrX(false), ErrY(false)
10{
11SelectX(0);
12SelectErrBar(false,false);
13NptDraw = 0;
14}
15
16PIGenFitDat::~PIGenFitDat()
17{
18if(mAdDO && mGFD) delete mGFD;
19}
20
21/* --Methode-- */
22void PIGenFitDat::SelectX(int varx)
23{
24VarX = -1;
25if(mGFD == NULL) return;
26if(varx<0 || varx>=mGFD->NVar()) return;
27VarX = varx;
28}
29
30/* --Methode-- */
31void PIGenFitDat::SelectErrBar(bool erbx,bool erby)
32{
33ErrX = erbx; ErrY = erby;
34if(mGFD == NULL) {ErrX = ErrY = false; return;}
35if(!mGFD->HasXErrors()) ErrX = false;
36}
37
38/* --Methode-- */
39void PIGenFitDat::UpdateLimits()
40{
41if(!mGFD) return;
42if(mGFD->NData()<=0) return;
43if(VarX<0) return;
44double xmin=9.e19, xmax=-9.e19, ymin=9.e19, ymax=-9.e19;
45mGFD->GetMnMx(10*VarX+2,xmin,xmax);
46mGFD->GetMnMx(0,ymin, ymax);
47if(xmax<=xmin) xmax = xmin+1.;
48if(ymax<=ymin) ymax = ymin+1.;
49PIAxes::ReSizeMinMax(isLogScaleX(),xmin,xmax);
50PIAxes::ReSizeMinMax(isLogScaleY(),ymin,ymax);
51SetLimits(xmin,xmax,ymin,ymax);
52SetAxesFlags(kBoxAxes | kExtTicks | kLabels);
53}
54
55/* --Methode-- */
56void PIGenFitDat::Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax)
57{
58if (!mGFD) return;
59if(mGFD->NData()<=0) return;
60if(VarX<0) return;
61// On plotte les barre d'erreurs ligne demandee explicitement
62if(GetGraphicAtt().GetLineAtt()!=PI_NotDefLineAtt) SelectErrBar(true,true);
63double xp,yp,er;
64NptDraw = 0;
65for (int i=0; i<mGFD->NData(); i++) {
66 xp = mGFD->Absc(VarX,i);
67 yp = mGFD->Val(i);
68 if(xp<xmin || xp>xmax || yp<ymin || yp>ymax) continue;
69 NptDraw++;
70 if(ErrX) {
71 er = mGFD->EAbsc(VarX,i);
72 if(er>0.) g->DrawLine(xp-er,yp,xp+er,yp);
73 }
74 if(ErrY) {
75 er = mGFD->EVal(i);
76 if(er>0.) g->DrawLine(xp,yp-er,xp,yp+er);
77 }
78 g->DrawMarker(xp, yp);
79}
80return;
81}
82
83/* --Methode-- */
84double PIGenFitDat::GetDistanceToPoint(double x, double y)
85{
86 if(!mGFD) return 1.e+9;
87 if(mGFD->NData()<=0) return 1.e+9;
88 if(VarX<0) return 1.e+9;
89
90 const int nessai = 100;
91 long inc = (NptDraw>nessai) ? (long)(NptDraw/nessai)+1 : 1;
92
93 double dist = -1.e+18;
94 long n = 0;
95 for(long i=0; i<mGFD->NData(); i++) {
96 double xp=mGFD->Absc(VarX,i);
97 if(xp<XMin() || xp>XMax()) continue;
98 double yp=mGFD->Val(i);
99 if(yp<YMin() || yp>YMax()) continue;
100 if(n%inc==0) {
101 xp = (xp-x)/(XMax()-XMin())/0.5;
102 yp = (yp-y)/(YMax()-YMin())/0.5;
103 xp = xp*xp+yp*yp;
104 if(dist<0. || xp<dist) dist = xp;
105 }
106 n++;
107 }
108 dist=sqrt(fabs(dist));
109 //cout<<"PIGenFitDat: xlim="<<XMin()<<","<<XMax()<<" ylim="<<YMin()<<","<<YMax()
110 // <<" NData="<<mGFD->NData()<<" inc="<<inc<<endl;
111 //cout<<"....d="<<dist<<" x="<<x<<" y="<<y<<" NptDraw="<<NptDraw<<endl;
112
113 return dist;
114}
Note: See TracBrowser for help on using the repository browser.