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