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

Last change on this file since 685 was 685, checked in by ercodmgr, 26 years ago

FileChooser multiples ds PIStdImgApp, Correction Ndisp ds PINTuple, Fenetre NObjMgrWind non bloquant desormais ds piapp - Reza 12/12/99

File size: 4.4 KB
RevLine 
[544]1// Classe traceur de StarList 97-99
2// CEA-DAPNIA LAL-IN2P3/CNRS
3
[165]4#include <stdio.h>
5#include "pistlist.h"
6
[544]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
[165]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
[544]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
[165]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
[205]84 double dx, dy;
[165]85 double x1, x2, y1, y2;
86 mStL->CalcXYLimits(x1, x2, y1, y2);
87
88 dx = 0.02*(x2-x1);
89 dy = 0.02*(y2-y1);
90
91 SetLimits(x1-dx, x2+dx, y1-dy, y2+dy);
92 SetAxesFlags(kBoxAxes | kExtTicks | kLabels);
93}
94
95
96/* --Methode-- */
[205]97void PIStarList::Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax)
[165]98{
99BStar *sti;
[205]100double xp,yp;
101float flx;
[165]102int sz;
103char buff[128];
104int nok, nl2;
105
106if (!mStL) return;
107
[685]108PIGrCoord uxmin, uxmax, uymin, uymax;
109g->GetGrSpace(uxmin, uxmax, uymin, uymax);
110double xmin2 = uxmin;
111double ymin2 = uymin;
112double xmax2 = uxmax;
113double ymax2 = uymax;
114
[165]115int msz = mMSz;
116if (msz < 1) msz = 1;
117PIMarker mrk = (mMrk != PI_NotDefMarker) ? mMrk : PI_FCircleMarker;
118// g->SelFont();
119nok = 0; nl2 = mNLev*2-1;
120for (int i=0; i<mStL->NbStars(); i++) {
121 sti = mStL->Star(i);
122 if ( !(sti->Nice(BStar::flagOK)) ) continue;
123 flx = sti->Flux();
124 if ( (flx < mFmin) || (flx > mFmax) ) continue;
125 xp = sti->PosX(); yp = sti->PosY();
126 if ( (xp < xmin) || (xp > xmax) || (yp < ymin) || (yp > ymax) ) continue;
[685]127 if ( (xp < xmin2) || (xp > xmax2) || (yp < ymin2) || (yp > ymax2) ) continue;
[165]128 nok++;
129 sz = (int)((log10((double)flx/mF0))/mDLgF*(double)nl2-0.01) + msz;
130 if (sz < 2) g->SelMarker(sz, PI_DotMarker);
131 else g->SelMarker(sz, mrk);
132 g->DrawMarker((double)xp,(double)yp );
133 if (mDspFV) {
134 sprintf(buff," F=%g", flx);
[205]135 double dx,dy;
[165]136 g->DGrC2UC(sz, 4, dx, dy);
137 g->DrawString(xp+dx, yp-dy, buff);
138 }
139 }
140
141/*
142sprintf(buff, "StarList: NbStars= %d NDisp= %d", (int)mStL->NbStars(), nok);
143g->BaseGraphic()->DrawString(15,15,buff);
144sprintf(buff, "FMin= %g FMax= %g Nl= %d Sz0= %d", mFmin, mFmax, mNLev, mMSz0);
145g->BaseGraphic()->DrawString(15,30,buff);
146*/
147
148}
149
[344]150/* --Methode-- */
151void PIStarList::AppendTextInfo(string& info, double xmin, double ymin, double xmax, double ymax)
152{
153BStar *sti;
154double xp,yp;
155double flx,fnd;
156char buff[128];
157int ncnt = 0;
[685]158sprintf(buff,"PIStarList: NStars %d \n", mStL->NbStars() );
[344]159info += buff;
160info += " Num: XPos YPos Flux Fond \n";
161for (int i=0; i<mStL->NbStars(); i++) {
162 sti = mStL->Star(i);
163 if ( !(sti->Nice(BStar::flagOK)) ) continue;
164 flx = sti->Flux();
165 if ( (flx < mFmin) || (flx > mFmax) ) continue;
166 xp = sti->PosX(); yp = sti->PosY();
167 if ( (xp < xmin) || (xp > xmax) || (yp < ymin) || (yp > ymax) ) continue;
168 ncnt++;
169 if (ncnt > 101) continue;
170 fnd = sti->Fond();
171 sprintf(buff,"%6d: %8.3g %8.3g %8.3g %8.3g \n", i, xp, yp, flx, fnd);
172 info += buff;
173 }
174if (ncnt >= 101) info += " .... \n";
175sprintf(buff," %d stars inside selected region \n", ncnt);
176info += buff;
177return;
178}
Note: See TracBrowser for help on using the repository browser.