File: INCLUDE\DATAVISA\DATAVISA.H
1 //#############################################################################
2 // //
3 // DATAVISA.H //
4 // Subsystem: Utilities - Datenbank (Diffraktometrie/ Reflektometrie) //
5 // Benutzung durch andere Subsysteme erforderlich: JA //
6 // Implementation: M_CURVE.CPP, M_DATA.CPP //
7 // //
8 //#############################################################################
9
10 #ifndef __DATAVISA_H
11 #define __DATAVISA_H
12
13 #include "internls\evrythng.h" // TScaleType
14
15
16 //##############################################################################
17 // globale Deklarationen
18 //##############################################################################
19
20 // gibt an nach welchem Kriterium die Kurve sortiert ist
21 /* enum TOrder
22 {
23 X_Sorted = 1, Y_Sorted = 2, Z_Sorted = 3, Incoming = 4
24 };
25
26 // Fehlertype bei DatenBasis
27 enum TCFault
28 {
29 // max. Anzahl speicherbarer Kurven ist erreicht
30 MaxScanExceeded = 1,
31 // kein ausreich. Speicherplatz verfuegbar
32 NoMemory = 2
33 };
34 */
35
36 const int MAXCURVE = 5000; // maximal speicherbare Kurven
37 // const int GROWUNIT = 50; // Punkte, um die die Kurve erweitert wird
38
39
40 //##############################################################################
41 // TCurve
42 //##############################################################################
43
44 // Klasse zum Verwalten einer Folge von Messwerten und zugehoeriger Parametern
45 class _CURVECLASS TCurve
46 {
47 public:
48 // Konstruktor
49 TCurve( void );
50 ~TCurve( void );
51
52 // haengt einen Punkt(Tripel) an Kurve an
53 // false wenn Fehler, sonst true
54 BOOL PAdd( float &x, float &y, float &z );
55
56 // liest ein Wertetripel der Kurve aus
57 // false wenn nicht moeglich, sonst true
58 BOOL PGet( float &x, float &y, float &z );
59
60 // wie PAdd (um schneller hintereinander Punkte anzuhaengen)
61 // false bei Fehler, sonst true
62 // BOOL FastPAdd( float &x, float &y, float &z );
63
64 // wie PGet (fuer schnellen Zugriff)
65 // Rueckkehrcode false bei Fehler,
66 // z.B. Kurve hat keine Punkte, Speicherfehler, usw,
67 // sonst true
68 // BOOL FastPGet( float &x, float &y, float &z );
69
70 // 'oeffnet' Kurve, macht Zugriffe auf Punkte erst moeglich
71 // Rueckkehrcode false bei Fehler sonst true
72 // BOOL FastOpen( void );
73
74 // 'schliesst' Kurve, kein Zugriff auf die Punkte moeglich
75 // Rueckkehrcode immer true
76 // BOOL FastClose( void );
77
78 // geht in der Kurve einen Punkt zurueck (Index zurück setzen)
79 void BackStep( void );
80
81 // setzt Kurve auf Initialwerte zurueck
82 // Rueckkehrcode gibt an, ob neuer Speicher alloziert wurde
83 BOOL New( void );
84
85 // markiert alle Punkte der Kurve als ungueltig, deren Y-wert <= (Level*100)
86 // Prozent von maximaler intensitaet der Kurve sind
87 // Rueckkehrcode false bei fehler sonst true
88 // (nur von GetPeakProperties benutzt)
89 BOOL DeleteUnderGround( float Level );
90
91 // setzt achse, nach welcher die Kurve geordnet ist
92 // (x,y,z oder messreihenf.)
93 // void SetOrder( TOrder order ) { m_eOrder = order; };
94
95 // setzt internen zeiger auf den (pos). Wert der Kurve falls moeglich
96 // bei unzulaess. pos auf 1. bzw. letzten Wert
97 // Rueckkehrcode false wenn Kurve keine Punkte hat sonst true
98 BOOL SetPP( int pos= 0 );
99 BOOL SetPPLast(); // auf letzten Eintrag setzen
100
101 // liefert die Anzahl der Punkte der Kurve als Rueckkehrcode
102 int GetPNumber( void ) { return m_PointList.GetCount(); };
103
104 // berechnet eine durch den letzen Param. bestimmte Fkt
105 // (max. Intensitaet/Schwerpunkt)
106 // 1.Param(ausg.) x enthaelt nach aufruf je nach funktion berechneten Wert
107 // 2.Param(ausg.) y enthaelt nach aufruf je nach funktion berechneten Wert
108 // 3.Param(ausg.) z enthaelt nach aufruf je nach funktion berechneten Wert
109 // 4.Param(eing.) func ermoeglicht verschieden funktionen aufzurufen
110 // (nur 2 implementiert)
111 // func=2 dann x,y,z tripel ermitteln, fuer das y (die
112 // Intensitaet) maximal ist
113 // func<>2 dann x,y,z Schwerpunkt der Kurve ermitteln
114 // (wird scheinbar nicht benutzt)
115 // Rueckkehrcode false wenn Fehler sonst true
116 BOOL GetGravityCenter( float&, float&, float& );
117
118 // liefert den in der Kurve vorhandenen dem Param 'search' naehsten X-wert
119 // (den indexwert) als Rueckkehrcode zurueck und den zugehoerigen Y-Wert
120 // sowie den abstand zwischen X-wert und search
121 // 1.param (eingabe) search in Kurve soll nach einem X-punkt gesucht
122 // werden, der zu search den geringsten abstand besitzt
123 // 2.Param (ausgabe) delta enthaelt nach aufruf den Abstand von search
124 // zum naehsten X-wert
125 // 3.Param (ausgabe) value enthaelt nach aufruf den zum naehsten X-wert
126 // gehoerigen Y-wert(Intensitaet)
127 // Rueckkehrcode ist der Index fuer den gilt X[Index] ist naehster X-wert
128 // zu search, wenn search im inneren des x-bereichs der Kurve ist sonst
129 // (wenn ausserhalb dieses bereiches oder bei fehler) den Wert 0
130 // voraussetzung ist, dass die X-werte der kurve von klein nach gross
131 // sortiert sind
132 int GetValueByValue( float, float&, float& );
133
134 // Zuweisungsoperator fuer Kurven
135 // alle x,y,z,v werte sowie max und min werden kopiert
136 TCurve& operator=( TCurve& );
137
138 float GetMax( int Idx ) { return m_MaxList.GetAt(Idx); };
139 float GetMin( int Idx ) { return m_MinList.GetAt(Idx); };
140
141 // markiert alle Punkte der Kurve als ungueltig,
142 // laesst nur lokal. Maxima uebrig
143 // Rueckkehrcode false bei Fehler, sonst true
144 // 07.04.2004 ToterCode da nicht benutzt und scheinbar nicht fertig impl.
145 // BOOL DeleteFlanks();
146
147 // speichert alle Punkte der Kurve in Datei (Parameter) ab
148 // Rueckkehrcode false bei fehler, sonst true
149 // 07.04.2004 ToterCode da nicht benutzt
150 // BOOL Save( LPCSTR );
151
152 // speichert Kurve in Datei (1.Parameter), 2. Param. gibt Art der
153 // Speicherung an (nur eine Option impl., diese speichert y-werte),
154 // 3. Param. nicht benutzt
155 // 07.04.2004 ToterCode da nicht benutzt
156 // BOOL Save( LPCSTR, int, int );
157
158 // 07.04.2004 ToterCode da nicht impl.
159 // void SetLastPoint( void );
160
161 // addiert val zum Y-wert des akt. Punktes der Kurve
162 // Rueckkehrcode false bei Fehler, sonst true
163 // 07.04.2004 ToterCode, da nicht benutzt
164 // BOOL ValueAdd( float &val );
165
166 // liefert akt. Pos. des internen Zeiger der Kurve als Rueckkehrcode
167 // 07.04.2004 ToterCode da nicht benutzt
168 // int GetPP( void ) { return ActualIdx; };
169
170 // 07.04.2004 ToterCode da nicht benutzt
171 // BOOL GetReflection( int order, LPCPoint );
172
173 // liefert die Breite des 1.Bereiches, in dem alle y-werte des Tripels
174 // die Haelfte des Intensitaetbereichs(Y(max)-Y(min)) uebersteigen, sowie
175 // aus diesem Bereich x-wert,y-wert des Tripels fuer das Y-wert
176 // (Intensitaet) maximal ist
177 // 1. bereich bedeutet der am weitesten links liegende Bereich der obige
178 // Eigenschaften erfuellt
179 // 1.Param(ausgabe) hw enthaelt nach aufruf breite des Bereichs
180 // 2.Param(ausgabe) pos enthaelt nach aufruf X-wert an der max. y-wert
181 // (intensitaet) in diesem Bereich
182 // 3.Param(ausgabe) intens enthaelt nach aufruf max.y-wert(intensitaet)
183 // in diesem Bereich
184 // Rueckkehrcode false wenn fehler sonst true
185 // anmerkung: dieser Bereich darf nicht bis ans ende der Kurve reichen
186 // d.h. kurve darf nicht monoton wachsend sein (sonst return false)
187 // 07.04.2004 ToterCode da nicht benutzt
188 // BOOL GetPeakProperties( float&, float&, float& );
189
190 private:
191
192 // enthalten die min und max Werte der 3 Achsen [0=x,1=y,2=z]
193 TFloatList m_MinList;
194 TFloatList m_MaxList;
195
196 TPointList m_PointList;
197
198 int m_ActualIdx; // indiziert den aktuellen Eintrag
199 BOOL m_bEnd; // Ende-Erkennung
200
201 // HGLOBAL m_hMemX; // handle auf globales speicherobjekt (x-werte)
202
203 // Ordnung der Kurve X_sorted, Y_sorted, Z_sorted oder Incoming
204 // TOrder m_eOrder;
205
206 // zeigt an ob kurve gerade im speicher fix. und somit zugriffe moeglich
207 // BOOL m_bStreamOpen;
208
209 // int m_MaxPointIdx; // indiziert den letzten Eintrag
210 // int m_MaxMemIdx; // indiziert den maximal moeglichen Eintrag
211 // CPoint FAR *m_lpPX; // Zeiger auf Datenfeld von X
212 };
213
214 typedef TCurve FAR *LPCurve;
215
216 //##############################################################################
217 // TDataBase
218 //##############################################################################
219
220 // Klasse zum Verwalten von mehreren Kurven (Areascan)
221 class _CURVECLASS TDataBase : protected TBaseList {
222 public:
223 TDataBase( void );
224 ~TDataBase( void );
225
226 // setzt internen Kurvenindex auf 0
227 void Reset( void ) { m_ActualIdx = 0; };
228
229 // liefert die Kurve als Rueckkehrcode deren Nummer gleich dem
230 // uebergebenen Param. ist
231 TCurve *GetCurve( int );
232 TCurve *GetLastCurve(); // letzte Curve
233
234 // liefert akt. Kurvenindex
235 int GetCurveIdx( void ) { return m_ActualIdx; };
236
237 // setzt Kurvenindex auf angegebenen Wert (Parameter)
238 BOOL SetCurveIdx( int );
239
240 // Rueckkehrcode = Anzahl der Kurven
241 int GetCNumber( void ) {
242 return GetCount();
243 };
244
245 // liefert als Rueckkehrcode die Scanreportcurve
246 TCurve *GetScanReport( void ) { return &m_ScanReport; };
247
248 // fuegt eine Kurve der angegebenen Groesse zur Datenbasis hinzu
249 // Rueckkehrcode true wenn erfolgreich
250 BOOL AddCurve( void );
251
252 // loescht alle Kurven der Datenbasis und setzt Indizes zurueck
253 BOOL New( void );
254
255 // liefert als Rueckkehrcode die Anzahl maximal speicherbarer Kurven pro Datenbasis
256 int GetMaxScanNumber( void )
257 {
258 return MAXCURVE - 1; // eigentlich unbegrenzt, soll aber sicherstellen, dass im AreaScan nicht nahezu unendliche viele Schritte durchgeführt werden
259 };
260
261 // liefert als Rueckkehrcode den zuletzt aufgetretenen Fehler
262 //24.03.2004 TCFault GetFault( void ) { return m_eFault; };
263
264 // neu akk
265 // entfernt die letzte Kurve in der Datenbasis
266 // Rueckkehrcode FALSE wenn Datenbasis leer
267 // sonst TRUE
268 BOOL DelCurve( void);
269
270 protected:
271 virtual void FreeData(void *aData) const;
272
273 private:
274 // zuletzt aufgetretener Fehler
275 //24.03.2004 TCFault m_eFault;
276 int m_ActualIdx; // indiziert die aktuelle Kurve
277
278 // Kurve enthaelt Werte zu jeder Kurve der Datenbasis
279 // Omegawinkel,Thetawinkel(absoluten winkel) und je nach modus einen
280 // dritten wert (monitorintens., absorberpos.,integrale intens. ,...)
281 TCurve m_ScanReport;
282 };
283
284 typedef TDataBase FAR * LPDataBase;
285
286 #endif
287 //DATAVISA_H
288 // __LastLine__
289