source: Sophya/trunk/SophyaPI/PIext/pistlist.cc@ 2180

Last change on this file since 2180 was 2115, checked in by cmv, 23 years ago

ResizeMinMax: cmv 17/07/2002

File size: 4.6 KB
Line 
1// Classe traceur de StarList 97-99
2// CEA-DAPNIA LAL-IN2P3/CNRS
3
4#include <stdio.h>
5#include "pistlist.h"
6
7//++
8// Class PIStarList
9// Lib PIext
10// include pistlist.h
11//
12// Classe traceur d'objets de la classe *StarList*
13//--
14//++
15// Links Parents
16// PIDrawer
17//--
18//++
19// Titre Constructeur
20//--
21
22//++
23// PIStarList(StarList* stl, bool ad)
24// Constructeur. Si "ad == true", l'objet "stl" est détruit par
25// le destructeur de l'objet "PIStarList"
26// Note : "stl" doit être créé par new
27//--
28
29/* --Methode-- */
30PIStarList::PIStarList(StarList* stl, bool ad)
31: PIDrawer(), mStL(stl)
32{
33 mAdDO = ad;
34 if (stl == NULL) return;
35 SetFluxLimits(1., -1.);
36}
37
38PIStarList::~PIStarList()
39{
40 if (mAdDO && mStL) delete mStL;
41}
42
43//++
44// Titre Méthodes
45//--
46//++
47// void SetFluxLimits(float min=1., float max=-1., int nl=5, bool dispflx=false, bool refr=false)
48// Modifie les paramètres de visualisation (limites en flux). Si "dispflx==true"
49// les valeurs de flux sont affichées pour chaque étoile.
50// StarList* StList()
51// Retourne l'objet "StarList" associé.
52// float FluxMin()
53// Retourne le paramètre de visualisation flux minimum
54// float FluxMax()
55// Retourne le paramètre de visualisation flux maximum
56//--
57
58/* --Methode-- */
59void PIStarList::SetFluxLimits(float fmin, float fmax, int nl, bool dispflx, bool refr)
60{
61 if (!mStL) return;
62 if (fmin < fmax) { mFmin = fmin; mFmax = fmax; }
63 else mStL->CalcFluxLimits(mFmin, mFmax);
64 if (mFmin < 1.e-10) mFmin = 1.e-10;
65 if (mFmax <= mFmin) mFmax = 1.5*mFmin;
66 mDLgF = log10((double)mFmax/(double)mFmin);
67 if (mDLgF < 1.e-10) mDLgF = 1.e-10;
68 mF0 = mFmin;
69 if (nl < 1) nl = 1;
70 if (nl > 20) nl = 20;
71 mNLev = nl;
72 mDspFV = dispflx;
73 if (refr) Refresh();
74 return;
75}
76
77
78/* --Methode-- */
79void PIStarList::UpdateLimits()
80{
81 if (!mStL) return;
82
83 // Commencer par trouver nos limites
84 double x1,x2,y1,y2;
85 mStL->CalcXYLimits(x1, x2, y1, y2);
86 PIAxes::ReSizeMinMax(isLogScaleX(),x1,x2);
87 PIAxes::ReSizeMinMax(isLogScaleY(),y1,y2);
88 SetLimits(x1,x2,y1,y2);
89 SetAxesFlags(kBoxAxes | kExtTicks | kLabels);
90}
91
92
93/* --Methode-- */
94void PIStarList::Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax)
95{
96BStar *sti;
97double xp,yp;
98float flx;
99int sz;
100char buff[128];
101int nok, nl2;
102
103if (!mStL) return;
104
105PIGrCoord uxmin, uxmax, uymin, uymax;
106g->GetGrSpace(uxmin, uxmax, uymin, uymax);
107double xmin2 = uxmin;
108double ymin2 = uymin;
109double xmax2 = uxmax;
110double ymax2 = uymax;
111
112// int msz = mMSz; //OP
113int msz = GetGraphicAtt().GetMarkerSz();
114
115if (msz < 1) msz = 1;
116//PIMarker mrk = (mMrk != PI_NotDefMarker) ? mMrk : PI_FCircleMarker; //OP
117PIMarker mmrk = GetGraphicAtt().GetMarker();
118PIMarker mrk = (mmrk != PI_NotDefMarker) ? mmrk : PI_FCircleMarker;
119
120// g->SelFont();
121nok = 0; nl2 = mNLev*2-1;
122for (int i=0; i<mStL->NbStars(); i++) {
123 sti = mStL->Star(i);
124 if ( !(sti->Nice(BStar::flagOK)) ) continue;
125 flx = sti->Flux();
126 if ( (flx < mFmin) || (flx > mFmax) ) continue;
127 xp = sti->PosX(); yp = sti->PosY();
128 if ( (xp < xmin2) || (xp > xmax2) || (yp < ymin2) || (yp > ymax2) ) continue;
129 nok++;
130 if ( (xp < xmin) || (xp > xmax) || (yp < ymin) || (yp > ymax) ) continue;
131 sz = (int)((log10((double)flx/mF0))/mDLgF*(double)nl2-0.01) + msz;
132 if (sz < 2) g->SelMarker(sz, PI_DotMarker);
133 else g->SelMarker(sz, mrk);
134 g->DrawMarker((double)xp,(double)yp );
135 if (mDspFV) {
136 sprintf(buff," F=%g", flx);
137 double dx,dy;
138 g->DGrC2UC(sz, 4, dx, dy);
139 g->DrawString(xp+dx, yp-dy, buff);
140 }
141 }
142
143/*
144sprintf(buff, "StarList: NbStars= %d NDisp= %d", (int)mStL->NbStars(), nok);
145g->BaseGraphic()->DrawString(15,15,buff);
146sprintf(buff, "FMin= %g FMax= %g Nl= %d Sz0= %d", mFmin, mFmax, mNLev, mMSz0);
147g->BaseGraphic()->DrawString(15,30,buff);
148*/
149
150}
151
152/* --Methode-- */
153void PIStarList::AppendTextInfo(string& info, double xmin, double ymin, double xmax, double ymax)
154{
155BStar *sti;
156double xp,yp;
157double flx,fnd;
158char buff[128];
159int ncnt = 0;
160sprintf(buff,"PIStarList: NStars %d \n", mStL->NbStars() );
161info += buff;
162info += " Num: XPos YPos Flux Fond \n";
163for (int i=0; i<mStL->NbStars(); i++) {
164 sti = mStL->Star(i);
165 if ( !(sti->Nice(BStar::flagOK)) ) continue;
166 flx = sti->Flux();
167 if ( (flx < mFmin) || (flx > mFmax) ) continue;
168 xp = sti->PosX(); yp = sti->PosY();
169 if ( (xp < xmin) || (xp > xmax) || (yp < ymin) || (yp > ymax) ) continue;
170 ncnt++;
171 if (ncnt > 101) continue;
172 fnd = sti->Fond();
173 sprintf(buff,"%6d: %8.3g %8.3g %8.3g %8.3g \n", i, xp, yp, flx, fnd);
174 info += buff;
175 }
176if (ncnt >= 101) info += " .... \n";
177sprintf(buff," %d stars inside selected region \n", ncnt);
178info += buff;
179return;
180}
Note: See TracBrowser for help on using the repository browser.