00001 #ifndef actcalPARAMS_H
00002 #define actcalPARAMS_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #define _POSIX_SOURCE 1
00038 #include "vltPort.h"
00039
00040
00041 #include "ECCS.h"
00042 #include "eccsTestTools.h"
00043 #include "eccsDB_ATTR.h"
00044 #include "eccsDB_TABLE.h"
00045
00046 #include <vector>
00047
00048 #include "eccsDB_VECTOR.h"
00049 #include "actcalErrors.h"
00050
00051
00052
00053 struct actcalM1_SUPP_PAR : eccsERROR_CLASS
00054 {
00055 vltDOUBLE weight;
00056 vltINT32 numRings;
00057 vltINT32 numSupports;
00058 vltINT32 numSupportsPerRing[actcalMAX_NUM_RINGS];
00059 vltINT32 ringOfSupport[actcalMAX_NUM_SUPPORTS];
00060 vltINT32 indexOfSupport[actcalMAX_NUM_SUPPORTS];
00061 vltDOUBLE angleOfSupport[actcalMAX_NUM_SUPPORTS];
00062 vltDOUBLE fractionWeightRing[actcalMAX_NUM_RINGS];
00063
00064 actcalM1_SUPP_PAR(const dbSYMADDRESS dbPoint = NULL);
00065 ccsCOMPL_STAT Read(const dbSYMADDRESS dbPoint);
00066 };
00067
00068 struct actcalCAL_FORCES_RECORD : public eccsDB_TABLE_RECORD
00069 {
00070 vltDOUBLE forcesOnRings[actcalMAX_NUM_RINGS];
00071
00072 ccsCOMPL_STAT Unpack( void *buffer ){
00073 memcpy( forcesOnRings, buffer, sizeof(vltDOUBLE)* actcalMAX_NUM_RINGS);
00074 return SUCCESS;
00075 }
00076
00077 ccsCOMPL_STAT Pack( void *buffer ){
00078 memcpy( buffer, forcesOnRings, sizeof(vltDOUBLE)* actcalMAX_NUM_RINGS );
00079 return SUCCESS;
00080 }
00081
00082 };
00083
00084
00085 struct actcalM1_CORR_PAR : eccsERROR_CLASS
00086 {
00087
00088 vltINT32 modeType[actcalMAX_NUM_MODES];
00089 vltINT32 modeSymmetry[actcalMAX_NUM_MODES];
00090 vltINT32 modeOrder[actcalMAX_NUM_MODES];
00091 actcalCAL_FORCES_RECORD forcesOfMode[actcalMAX_NUM_MODES];
00092
00093 vltDOUBLE coeffLowerLimits[actcalMAX_NUM_MODES];
00094
00095 vltDOUBLE forcesNasCass[actcalMAX_NUM_SUPPORTS];
00096
00097 actcalM1_CORR_PAR(const dbSYMADDRESS dbPoint = NULL);
00098 ccsCOMPL_STAT Read(const dbSYMADDRESS dbPoint);
00099
00100 };
00101
00102 struct actcalOPT_CONV_PAR : eccsERROR_CLASS
00103 {
00104 vltDOUBLE scaleRmsTilt[actcalMAX_NUM_MODES];
00105 vltDOUBLE scaleD80[actcalMAX_NUM_MODES];
00106 vltDOUBLE scaleRmsWave[actcalMAX_NUM_MODES];
00107
00108 actcalOPT_CONV_PAR(const dbSYMADDRESS dbPoint = NULL);
00109 ccsCOMPL_STAT Read(const dbSYMADDRESS dbPoint);
00110 };
00111
00112 struct actcalM2_TEMP_CORR : eccsERROR_CLASS
00113 {
00114 vltDOUBLE constantTerm;
00115 vltDOUBLE linearTerm;
00116
00117 actcalM2_TEMP_CORR(const dbSYMADDRESS dbPoint = NULL);
00118 ccsCOMPL_STAT Read(const dbSYMADDRESS dbPoint);
00119 };
00120
00121 struct actcalCOEFFS_M2_POS : public eccsDB_TABLE_RECORD
00122 {
00123 vltBYTES32 focus;
00124 vltDOUBLE defocus;
00125 vltDOUBLE coma;
00126
00127 ccsCOMPL_STAT Unpack( void *buffer ){
00128 memcpy( focus, buffer, sizeof(vltBYTES32) );
00129 buffer = (char*)buffer+sizeof(vltBYTES32);
00130 memcpy( &defocus, buffer, sizeof(vltDOUBLE));
00131 buffer = (char*)buffer+sizeof(vltDOUBLE);
00132 memcpy( &coma, buffer, sizeof(vltDOUBLE));
00133 return SUCCESS;
00134 }
00135
00136 ccsCOMPL_STAT Pack( void *buffer ){
00137 vltINT32 size;
00138 dbFillBuf( (char**)&buffer, (char*)focus, &size, dbBYTES32);
00139 dbFillBuf( (char**)&buffer, (char*)&defocus, &size, dbDOUBLE);
00140 dbFillBuf( (char**)&buffer, (char*)&coma, &size, dbDOUBLE);
00141 return(SUCCESS);
00142 }
00143
00144 };
00145
00146 struct actcalM2_ZENITH_POS : public eccsDB_TABLE_RECORD
00147 {
00148 vltBYTES32 focus;
00149 vltDOUBLE posX;
00150 vltDOUBLE posY;
00151 vltDOUBLE posZ;
00152 vltDOUBLE calibTemp;
00153
00154 ccsCOMPL_STAT Unpack( void *buffer ){
00155 memcpy( focus, buffer, sizeof(vltBYTES32) );
00156 buffer = (char*)buffer+sizeof(vltBYTES32);
00157 memcpy( &posX, buffer, sizeof(vltDOUBLE));
00158 buffer = (char*)buffer+sizeof(vltDOUBLE);
00159 memcpy( &posY, buffer, sizeof(vltDOUBLE));
00160 buffer = (char*)buffer+sizeof(vltDOUBLE);
00161 memcpy( &posZ, buffer, sizeof(vltDOUBLE));
00162 buffer = (char*)buffer+sizeof(vltDOUBLE);
00163 memcpy( &calibTemp, buffer, sizeof(vltDOUBLE));
00164 return SUCCESS;
00165 }
00166
00167 ccsCOMPL_STAT Pack( void *buffer ){
00168 vltINT32 size;
00169 dbFillBuf( (char**)&buffer, (char*)focus, &size, dbBYTES32);
00170 dbFillBuf( (char**)&buffer, (char*)&posX, &size, dbDOUBLE);
00171 dbFillBuf( (char**)&buffer, (char*)&posY, &size, dbDOUBLE);
00172 dbFillBuf( (char**)&buffer, (char*)&posZ, &size, dbDOUBLE);
00173 dbFillBuf( (char**)&buffer, (char*)&calibTemp, &size, dbDOUBLE);
00174 return(SUCCESS);
00175 }
00176
00177 };
00178
00179 struct actcalFIELD_ASTIG : public eccsDB_TABLE_RECORD
00180 {
00181 vltBYTES32 focus;
00182 vltDOUBLE factorFieldComa;
00183 vltDOUBLE constB0;
00184 vltDOUBLE constB1;
00185 vltDOUBLE constB2;
00186 vltDOUBLE offsetAngleX;
00187 vltDOUBLE offsetAngleY;
00188 vltDOUBLE alphaX;
00189 vltDOUBLE alphaY;
00190 vltDOUBLE centerGpX;
00191 vltDOUBLE centerGpY;
00192 vltDOUBLE angleGpToAlphaDelta;
00193 vltDOUBLE plateScale;
00194 vltDOUBLE factorAngleAltitude;
00195 vltDOUBLE factorAngleRotator;
00196 vltDOUBLE factorAngleAdapter;
00197 vltDOUBLE factorAngleGpArm;
00198 vltDOUBLE factorAngleAdaToM1;
00199 vltDOUBLE offsetAngleAdaToM1;
00200
00201
00202 ccsCOMPL_STAT Unpack( void *buffer ){
00203 memcpy( focus, buffer, sizeof(vltBYTES32) );
00204 buffer = (char*)buffer+sizeof(vltBYTES32);
00205 memcpy( &factorFieldComa, buffer, sizeof(vltDOUBLE));
00206 buffer = (char*)buffer+sizeof(vltDOUBLE);
00207 memcpy( &constB0, buffer, sizeof(vltDOUBLE));
00208 buffer = (char*)buffer+sizeof(vltDOUBLE);
00209 memcpy( &constB1, buffer, sizeof(vltDOUBLE));
00210 buffer = (char*)buffer+sizeof(vltDOUBLE);
00211 memcpy( &constB2, buffer, sizeof(vltDOUBLE));
00212 buffer = (char*)buffer+sizeof(vltDOUBLE);
00213 memcpy( &offsetAngleX, buffer, sizeof(vltDOUBLE));
00214 buffer = (char*)buffer+sizeof(vltDOUBLE);
00215 memcpy( &offsetAngleY, buffer, sizeof(vltDOUBLE));
00216 buffer = (char*)buffer+sizeof(vltDOUBLE);
00217 memcpy( &alphaX, buffer, sizeof(vltDOUBLE));
00218 buffer = (char*)buffer+sizeof(vltDOUBLE);
00219 memcpy( &alphaY, buffer, sizeof(vltDOUBLE));
00220 buffer = (char*)buffer+sizeof(vltDOUBLE);
00221 memcpy( ¢erGpX, buffer, sizeof(vltDOUBLE));
00222 buffer = (char*)buffer+sizeof(vltDOUBLE);
00223 memcpy( ¢erGpY, buffer, sizeof(vltDOUBLE));
00224 buffer = (char*)buffer+sizeof(vltDOUBLE);
00225 memcpy( &angleGpToAlphaDelta, buffer, sizeof(vltDOUBLE));
00226 buffer = (char*)buffer+sizeof(vltDOUBLE);
00227 memcpy( &plateScale, buffer, sizeof(vltDOUBLE));
00228 buffer = (char*)buffer+sizeof(vltDOUBLE);
00229 memcpy( &factorAngleAltitude, buffer, sizeof(vltDOUBLE));
00230 buffer = (char*)buffer+sizeof(vltDOUBLE);
00231 memcpy( &factorAngleRotator, buffer, sizeof(vltDOUBLE));
00232 buffer = (char*)buffer+sizeof(vltDOUBLE);
00233 memcpy( &factorAngleAdapter, buffer, sizeof(vltDOUBLE));
00234 buffer = (char*)buffer+sizeof(vltDOUBLE);
00235 memcpy( &factorAngleGpArm, buffer, sizeof(vltDOUBLE));
00236 buffer = (char*)buffer+sizeof(vltDOUBLE);
00237 memcpy( &factorAngleAdaToM1, buffer, sizeof(vltDOUBLE));
00238 buffer = (char*)buffer+sizeof(vltDOUBLE);
00239 memcpy( &offsetAngleAdaToM1, buffer, sizeof(vltDOUBLE));
00240
00241
00242
00243 return SUCCESS;
00244 }
00245
00246 ccsCOMPL_STAT Pack( void *buffer ){
00247 vltINT32 size;
00248 dbFillBuf( (char**)&buffer, (char*)focus, &size, dbBYTES32);
00249 dbFillBuf( (char**)&buffer, (char*)&factorFieldComa, &size, dbDOUBLE);
00250 dbFillBuf( (char**)&buffer, (char*)&constB0, &size, dbDOUBLE);
00251 dbFillBuf( (char**)&buffer, (char*)&constB1, &size, dbDOUBLE);
00252 dbFillBuf( (char**)&buffer, (char*)&constB2, &size, dbDOUBLE);
00253 dbFillBuf( (char**)&buffer, (char*)&offsetAngleX, &size, dbDOUBLE);
00254 dbFillBuf( (char**)&buffer, (char*)&offsetAngleY, &size, dbDOUBLE);
00255 dbFillBuf( (char**)&buffer, (char*)&alphaX, &size, dbDOUBLE);
00256 dbFillBuf( (char**)&buffer, (char*)&alphaY, &size, dbDOUBLE);
00257 dbFillBuf( (char**)&buffer, (char*)¢erGpX, &size, dbDOUBLE);
00258 dbFillBuf( (char**)&buffer, (char*)¢erGpY, &size, dbDOUBLE);
00259 dbFillBuf( (char**)&buffer, (char*)&angleGpToAlphaDelta, &size, dbDOUBLE);
00260 dbFillBuf( (char**)&buffer, (char*)&plateScale, &size, dbDOUBLE);
00261 dbFillBuf( (char**)&buffer, (char*)&factorAngleAltitude, &size, dbDOUBLE);
00262 dbFillBuf( (char**)&buffer, (char*)&factorAngleRotator, &size, dbDOUBLE);
00263 dbFillBuf( (char**)&buffer, (char*)&factorAngleAdapter, &size, dbDOUBLE);
00264 dbFillBuf( (char**)&buffer, (char*)&factorAngleGpArm, &size, dbDOUBLE);
00265 dbFillBuf( (char**)&buffer, (char*)&factorAngleAdaToM1, &size, dbDOUBLE);
00266 dbFillBuf( (char**)&buffer, (char*)&offsetAngleAdaToM1, &size, dbDOUBLE);
00267 return(SUCCESS);
00268 }
00269
00270 };
00271
00272 struct actcalIA_FOCUS_OFFSET : public eccsDB_TABLE_RECORD
00273 {
00274 vltBYTES32 focus;
00275 vltDOUBLE value;
00276
00277 ccsCOMPL_STAT Unpack( void *buffer ){
00278 memcpy( focus, buffer, sizeof(vltBYTES32) );
00279 buffer = (char*)buffer+sizeof(vltBYTES32);
00280 memcpy( &value, buffer, sizeof(vltDOUBLE));
00281 return SUCCESS;
00282 }
00283
00284 ccsCOMPL_STAT Pack( void *buffer ){
00285 vltINT32 size;
00286 dbFillBuf( (char**)&buffer, (char*)focus, &size, dbBYTES32);
00287 dbFillBuf( (char**)&buffer, (char*)&value, &size, dbDOUBLE);
00288 return SUCCESS;
00289 }
00290
00291 };
00292
00293 typedef eccsDB_TABLE<actcalIA_FOCUS_OFFSET> actcalIA_FOCUS_TABLE;
00294
00295 class actcalIA_FOCUS: public actcalIA_FOCUS_TABLE
00296 {
00297 public:
00298 actcalIA_FOCUS(const dbSYMADDRESS pointName, const char *attrName = dbEMPTY);
00299
00300 vltDOUBLE GetDefocus();
00301
00302 actcalIA_FOCUS &SetDefocus(vltDOUBLE newDefocus);
00303 };
00304
00305 struct actcalIA_CCD_ORIENT : public eccsDB_TABLE_RECORD
00306 {
00307 vltBYTES32 focus;
00308 vltDOUBLE factor;
00309 vltDOUBLE angleOffset;
00310
00311 ccsCOMPL_STAT Unpack( void *buffer ){
00312 memcpy( focus, buffer, sizeof(vltBYTES32) );
00313 buffer = (char*)buffer+sizeof(vltBYTES32);
00314 memcpy( &factor, buffer, sizeof(vltDOUBLE));
00315 buffer = (char*)buffer+sizeof(vltDOUBLE);
00316 memcpy( &angleOffset, buffer, sizeof(vltDOUBLE));
00317
00318 return SUCCESS;
00319 }
00320
00321 ccsCOMPL_STAT Pack( void *buffer ){
00322 vltINT32 size;
00323 dbFillBuf( (char**)&buffer, (char*)focus, &size, dbBYTES32);
00324 dbFillBuf( (char**)&buffer, (char*)&factor, &size, dbDOUBLE);
00325 dbFillBuf( (char**)&buffer, (char*)&angleOffset, &size, dbDOUBLE);
00326
00327 return SUCCESS;
00328 }
00329 };
00330
00331 #endif