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