Entwicklerdokumentation Testzaehler fuer das RTK-Projekt v0500 Kay Schuetzler INHALT ====== 1. FUNKTIONALE BESCHREIBUNG 1.1. Ermittlung der Messwerte 1.2. Grenzen der Simulation 2. IMPLEMENTATION 2.1. Geaenderte Dateien 2.2. Neue Dateien 2.3. Einbindung in die vorhandene Projektstruktur 3. NUTZUNG 3.1. Schnittstelle 3.2. Aktivierung des Testzaehlers im .ini-File 1. FUNKTIONALE BESCHREIBUNG =========================== 1.1. Ermittlung der Messwerte ----------------------------- Der hier beschriebene Testzaehler soll den Test des RTK-Programms ohne Einsatz einer Roentgenquelle und eines echten Detektors ermoeglichen. Dazu wird die neue Zaehler-Klasse "Testdev" eingefuehrt, die auf Anforderung des Programms entsprechende Messwerte in Abhaengigkeit von der aktuellen Stellung der Motoren "Beugung fein", "Tilt" und "Kollimator" ermittelt und zurueckgibt. Die simulierten Messwerte wurden am Institut fuer Physik anhand einer echten und durchschnittlichen Probe ermittelt. Dabei wurde auf die Moeglichkeit zu- rueckgegriffen, in der Datei "Scan.mak" ein benutzerdefiniertes Makro "ScanJob" zu definieren. Allerdings ist die Zeilenzahl in dieser Datei auf ungefaehr 1000 bis 1200 Zeilen beschraenkt. Daher mussten die nachfolgend aufgefuehrten Dis- kretisierungen der Messwerte vorgenommen werden. Fuer folgende Motorstellungen wurden Messungen vorgenommen: "Beugung fein": Winkel: -300 bis 300 Sekunden Schrittweite: 1 Sekunde "Tilt": Winkel: -40 bis 40 Minuten Schrittweite: 5 Minuten "Kollimator": Bereich: -280 bis 280 Mikrometer Schrittweite: 70 Mikrometer Fuer jede dieser Positionen wurde ein Intensitaetswert ermittelt und gespei- chert. 1.2. Grenzen der Simulation --------------------------- Zunaechst ist festzuhalten, dass die Simulation nur in den angegebenen Berei- chen sinnvolle Werte liefert. Fuer Motorstellungen jenseits dieser Grenzen wird immer der letzte bekannte Wert angenommen. Aus der Diskretheit der Messwerte ergeben sich weitere Ungenauigkeiten der Si- mulation. Fuer Werte an nicht ausgemessenen Motorpositionen wird zunaechst auf die naechstkleinere vermessene Motorposition abgerundet. Fuer die Positionen von "Tilt" wird zusaetzlich eine lineare Interpolation zwischen der kleineren und groesseren bekannten Position mit einer Aufloesung von einer Minute vorge- nommen. Fuer den "Kollimator" liegen die bekannten Messwerte zu weit auseinan- der, so dass eine lineare Interpolation keine sinnvollen Werte mehr liefert. 2. IMPLEMENTATION ================= 2.1. Geaenderte Dateien ----------------------- Der Testzaehler ist als eine weitere Ableitung der Klasse "TDevice" implemen- tiert. Um den Testzaehler zu erstellen musste von den vorhandenen Quelldateien nur die Datei "Counters.cpp" geringfuegig veraendert werden. Folgende Aenderungen wurden durchgefuehrt: 1. Headerdatei des Testzaehlers einbinden Alt: #include "m_layer.h" #include Neu: #include "m_layer.h" //! neu #include "m_testdev.h" #include 2. Testzaehler in die Auswertung des .ini-Files aufnehmen Alt: aDevice[id] = (TEncoder*)new TEncoder(); goto EntryFound; } aDevice[id] = new TDevice(); Neu: aDevice[id] = (TEncoder*)new TEncoder(); goto EntryFound; } //! neu if(strstr(strupr(buf),"TEST")) { aDevice[id] = (Testdev*)new Testdev(); goto EntryFound; } aDevice[id] = new TDevice(); 2.2. Neue Dateien ----------------- Die eigentliche Implementation des Testzaehlers wurde in der Klasse "Testdev" vorgenommen. Dazu wurden die Dateien "m_testdev.h" und "m_testdev.cpp" er- stellt. Als Ableitung von "TDevice" erbt "Testdev" alle Membervariablen und Funktionen. Von den geerbten wurde nur die Funktion "PollDevice()" durch eine eigene Version ueberladen. Zusaetzlich wurden die privaten Funktionen "CalculateIntensity()", "Interpolate(...)" sowie "fillDevData()" hinzugefuegt. Ebenfalls neu ist der Konstruktor, der nach der Konstruktion des Basisklassen- objekts die Messdaten aus der Datei "testdev.dat" einlesen laesst. 2.3. Einbindung in die vorhandene Projektstruktur ------------------------------------------------- Um den Testzaehler in die vorhandene Projektdatei aufzunehmen, muessen die bei- den Dateien "m_testdev.h" und "m_testdev.cpp" als neue Knoten dem Projektbaum hinzugefuegt werden. Hierbei empfiehlt sich die Position zwischen am9513.cpp und braunpsd.cpp, da es sich beim Testzaehler auch um eine weitere Zaehler- klasse handelt. 3. NUTZUNG ========== 3.1. Schnittstelle ------------------ Der Testzaehler kann ueber die Funktion "Testdev::PollDevice()" dazu veranlasst werden, die Variable "fIntensity" in Abhaengigkeit von der Motorpositon zu ak- tualisieren. Dies kann auch, wie im originalen RTK-Programm, timergesteuert erfolgen. Der Wert von "fIntensity" kann durch den Aufruf der Funktion "Testdev::GetData( &float Data )" ermittelt werden. 3.2. Aktivierung des Testzaehlers im .ini-File ---------------------------------------------- Soll der Testzaehler im RTK-Programm als simulierter Detektor eingesetzt wer- den, so ist das .ini-File entsprechend zu veraendern. Folgende Eintragungen aktivieren den Testzaehler: [Device0] Type=Test Name=[A-z]+ ExposureTime=[0-9]+.[0-9]+ ExposureCounts=[0-9]+ Debug=[01] Dabei ist vor allem die Eintragung "Type=Test" entscheidend. Die anderen Konfi- gurationseinstellungen haben die uebliche Bedeutung und Funktion.