File: INCLUDE\WORKFLOW\TScanCmd.h

    1 #ifndef _TSCANCMD_H
    2 #define _TSCANCMD_H
    3 
    4 #include "workflow\TCmd.h"
    5 #include "difrkmty\s_extern.h" // für TScanWindow
    6 #include "difrkmty\a_extern.h" // für TAreaScanWindow
    7 
    8 /** @file TScanCmd.h
    9  *  Ablaufsteuerung für StepScan und AreaScan (mit Psd).
   10  */
   11 
   12 /** Führt einen Scan durch.
   13  *
   14  *  @author David Damm
   15  *  @date 05.07.2004
   16  *  @version 0.1
   17  *  Doxygen-Kommentare hinzugefügt.
   18  */
   19 class TScanCmd : public TCmd
   20 {
   21 
   22 // Konstruktor und Destruktor
   23 public:
   24 
   25         /** Konstruktor.
   26          *  Initialisierung des Scans und üeberprüfen, ob ein Scan-Fenster oder
   27          *  AreaScan-Fenster geöffnet ist (ansonsten Abbruch und Fehlermeldung).
   28          *
   29          *  @param ct Das eingelesene Kommando mit Parametern.
   30          */
   31         TScanCmd ( TCmdTag );
   32 
   33 // Fortschritt- Kommandoinformtionen
   34 public:
   35         
   36         //* @copydoc TCmd::GetShowData()
   37         virtual bool GetShowData ( LPSTR );
   38         
   39         //* @copydoc TCmd::GetName()
   40         virtual void GetName ( LPSTR aName );
   41 
   42 // Schritte der Kommandoverarbeitung
   43 public:
   44         
   45         //* @copydoc TCmd::FirstStep()
   46         ECmdCode FirstStep ( void );
   47 
   48         //* @copydoc TCmd::ControlStep()
   49         ECmdCode ControlStep ( void );
   50 
   51         //* @copydoc TCmd:: ReadyStep()
   52         ECmdCode ReadyStep ( void );
   53 
   54 
   55 // Attribute
   56 private:
   57 
   58         /** Pointer auf zugehöriges Scan-Fenster.
   59          *  Darf nicht im Destruktor freigegeben werden, da er vom Hauptprogramm verwaltet wird.
   60          */
   61         TScanWindow *ScanW; 
   62 
   63         /** Pointer auf zugehöriges AreaScan-Fenster.
   64          *  Darf nicht im Destruktor freigegeben werden, da er vom Hauptprogramm verwaltet wird.
   65          */
   66         TAreaScanWindow *AreaScanW;
   67         
   68         /** Zeiger auf Liste mit Intensität und zugehörigen Schrittweiten.
   69          *  Nicht im Destruktor freigeben, wird von <AreaScanW> übernommen.
   70          */
   71         TFloatList *Scaler; 
   72         
   73         //* Gibt Scanart an (ForScan=StepScan / ForAreaScan=AreaScan).
   74         ECmdParam eCaller;
   75 
   76         //* Gibt Scantyp an (Standard,Omega2Theta).
   77         ExScanType eScanType;
   78 
   79         //* Anzahl schon gemessener Punkte.
   80         int nPointIdx,
   81 
   82         //* Anzahl der gesamten zu messenden Punkte.
   83         nPointNumber;
   84         
   85         //* Nummer des aktuellen Motors.
   86         int nMotor;
   87         
   88         //* Nummer vom Theta-Motor (nur bei Omega2Theta verwendet).
   89         int     nTheta;
   90         
   91         //* ?? (nur bei AreaScan verwendet)
   92         int     nAbsorber;
   93 
   94         //* Startwinkel des Scans.
   95         double dArgumentMin;
   96         
   97         //* Endwinkel des Scans.
   98         double dArgumentMax;
   99         
  100         //* Normale Schrittweite während Scan.
  101         double dArgumentWidth;
  102         
  103         //* Startwinkel des Thetamotors (nur AreaScan).
  104         double dThetaMin;
  105         
  106         //* Endwinkel des Thetamotors (nur AreaScan).
  107         double dThetaMax;
  108         
  109         //* Schrittweite des Thetamotors (nur AreaScan).
  110         double dThetaWidth;
  111         
  112         //* Winkel von Theta bei Scanstart (nur bei Omega2Theta verwendet).
  113         double dStartPointTheta;
  114         
  115         //* Winkel des Absorber bei Scanstart(nur bei AreaScan verwendet).
  116         double dStartPointAbsorber;
  117 
  118         //* Gibt an, ob Omega2Theta-Scan.
  119         BOOL bOmega2Theta; 
  120 
  121         //* Gibt an, ob Absorber benutzt wird.
  122         BOOL bAbsorberUsed;
  123 
  124         /** Gibt Verhältnis an, um das der Thetamotor bewegt werden soll, wenn sich
  125          *  der Omegamotor um einen Schritt bewegt (nur bei Omega2Theta verwendet).
  126          */
  127         double dMoveRelation;
  128 
  129         //* Gibt während des Scans den nächsten anzufahrenden Winkel (Omega bei O2T-Scan) an.
  130         double dArgument;
  131 
  132         //* Gibt an, ob dynamische Schrittweitensteuerung aktiv (nur bei StepScan verwendet).
  133         BOOL bDynamicStepWidth;
  134 
  135         //* Anzahl der verschiedenen Schrittweiten, die benutzt werden (nur bei StepScan).
  136         int nStepScaleLevels;
  137 
  138         //* Gibt während des Scans den nächsten anzufahrenden Winkel (Theta bei O2T-Scan) an.
  139         double dArgument2;
  140 
  141         /** Gibt für den AreaScan im Standardmodus an, ob ein Psd-Offset verwendet
  142          *  werden soll. In dem Fall muss eine Startposition angefahren werden.
  143          */
  144         BOOL bChannelOffset;
  145 
  146         DWORD dwStartTimeTicks;
  147         
  148         // ?? scheinbar überflüssig
  149         //21.04.2004 float fDriveInIntensity;
  150         //21.04.2004 float fDriveOutIntensity;
  151         //21.04.2004 float fIntensityRelation;
  152         //21.04.2004 BOOL bAbsorberActivated;
  153         //21.04.2004 BOOL bAbsorberMovedIn;     
  154 };
  155 
  156 #endif
  157