00001
00002
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 #ifdef HAVE_CONFIG_H
00029 #include <config.h>
00030 #endif
00031
00038
00040
00041
00042
00043
00044 #include <cpl.h>
00045
00046 #include "xsh_model_kernel.h"
00047 #include "xsh_model_io.h"
00048 #include "xsh_model_metric.h"
00049
00050 #include <stdio.h>
00051 #include <stdlib.h>
00052 #include <math.h>
00053 #include <float.h>
00054 #include "xsh_model_sa.h"
00055 #include "xsh_model_r250.h"
00056 #include "xsh_model_cputime.h"
00057 #include "xsh_model_randlcg.h"
00058
00059 #include <xsh_utils.h>
00060 #include <xsh_error.h>
00061 #include <xsh_msg.h>
00062 #include "xsh_pfits.h"
00063 #include "xsh_dfs.h"
00064
00065 #ifdef _R250_H_
00066 #define uniform(a,b) ( a + (b - a) * xsh_dr250() )
00067 #endif
00068
00069
00070
00071
00072 #define BIG_VAL 400000.0
00073
00074
00075
00076
00077 int n = 0;
00078 int* chip;
00079 int* x;
00080 int* y;
00081 struct xs_3* local_p_xs;
00082 int local_nparam;
00083 double* local_p_abest;
00084 double* local_p_amin;
00085 double* local_p_amax;
00086 int* local_p_aname;
00087 ann_all_par*local_p_all_par;
00088
00089 DOUBLE p_obsx[10000],p_obsy[10000],p_obsf[10000];
00090 DOUBLE *p_wl;
00091 DOUBLE** ref;
00092 int p_obsarm[10000], p_obsorder[10000], sp_array[10000];
00093 int* p_chipmod;
00094 int size, mm;
00095
00096
00097 void xsh_3_assign(int loc, double val);
00098 void xsh_3_output_data(double*);
00099
00100
00120
00121
00122 cpl_table* xsh_model_anneal_comp(ann_all_par* p_all_par,
00123 int nparam,double* abest,
00124 double* amin,
00125 double* amax,
00126 int* aname,
00127 struct xs_3* p_xs_3,
00128 int DS_size,
00129 coord* msp_coord,
00130 DOUBLE* p_wlarray,
00131 DOUBLE** ref_ind,
00132 int maxit)
00133 {
00134 int ii;
00135 float z, t0, t;
00136 cpl_table* conf_tab=NULL ;
00137 double* a;
00138 a=(DOUBLE*)cpl_malloc(nparam*sizeof(DOUBLE));
00139
00140 #ifdef DEBUG
00141 fprintf(stderr,"%d points read for analysis\n", DS_size);
00142
00143 xsh_report_cpu( stderr, NULL );
00144 printf("%d nparam \n",nparam);
00145 #endif
00146
00147 if ( xsh_SAInit(xsh_3_energy,nparam) == 0 ) {
00148 fprintf(stderr,"trouble initializing in xsh_SAInit\n");
00149 exit(1);
00150 }
00151
00152 local_p_abest=abest;
00153 local_p_amax=amax;
00154 local_p_amin=amin;
00155 local_p_aname=aname;
00156 local_nparam=nparam;
00157 local_p_all_par=p_all_par;
00158 local_p_xs=p_xs_3;
00159 for (ii=0;ii<DS_size;ii++) {
00160 p_obsx[ii]=msp_coord[ii].x;
00161 p_obsy[ii]=msp_coord[ii].y;
00162 p_obsarm[ii]=msp_coord[ii].arm;
00163 p_obsf[ii]=msp_coord[ii].flux;
00164 sp_array[ii]=msp_coord[ii].slit_pos;
00165 p_obsorder[ii]=msp_coord[ii].order;
00166 #ifdef DEBUG
00167 printf("%d obsx: %lf obsy:%lf, obsarm: %d sp: %d\n",
00168 ii, p_obsx[ii],p_obsy[ii],p_obsarm[ii],
00169 sp_array[ii]);
00170 #endif
00171 }
00172
00173 p_wl=p_wlarray;
00174 size = DS_size;
00175 ref=ref_ind;
00176
00177 for (ii=0; ii<local_nparam ; ii++) {
00178 a[ii]=local_p_abest[ii];
00179 }
00180 #ifdef DEBUG
00181 printf("bef ener %lf %lf %lf %lf %lf \n",a[0], a[1],a[2], a[3],a[4]);
00182 #endif
00183
00184 check(z = xsh_3_energy(a));
00185
00186 #ifdef DEBUG
00187 printf("bef init %lf %lf %lf %lf %lf \n",a[0], a[1],a[2], a[3],a[4]);
00188 #endif
00189 xsh_SAinitial( a );
00190 xsh_SABoltzmann( 0.5 );
00191 #ifdef DEBUG
00192 printf("aft boltz %lf %lf %lf %lf %lf \n",a[0], a[1],a[2], a[3],a[4]);
00193
00194
00195
00196 fprintf(stderr,"Boltzman constant: %f\tlearning rate:%f\n",
00197 xsh_SABoltzmann( NO_VALUE ), xsh_SAlearning_rate( NO_VALUE ) );
00198
00199 fprintf(stderr,"Initial values: ");
00200 for (ii = 0; ii < local_nparam; ii++)
00201 fprintf(stderr,"%g\t", a[ii]);
00202 fprintf(stderr,"\t(energy = %g)\n", z);
00203 #endif
00204
00205 xsh_SAmelt( NO_VALUE );
00206 #ifdef DEBUG
00207 printf("aft melt %lf %lf %lf %lf %lf \n",a[0], a[1],a[2], a[3],a[4]);
00208 #endif
00209
00210 xsh_SAcurrent( a );
00211 #ifdef DEBUG
00212 printf("aft current %lf %lf %lf %lf %lf \n",a[0], a[1],a[2], a[3],a[4]);
00213 #endif
00214
00215 z = xsh_3_energy(a);
00216
00217 #ifdef DEBUG
00218 printf("aft energy %lf %lf %lf %lf %lf \n",a[0], a[1],a[2], a[3],a[4]);
00219
00220
00221 fprintf(stderr,"melt values: ");
00222 int i=0;
00223 for (i = 0; i < local_nparam; i++)
00224 fprintf(stderr,"%g\t", a[i]);
00225 fprintf(stderr,"\t(energy = %g)\n", z);
00226 #endif
00227
00228 t0 = xsh_SAtemperature( NO_VALUE );
00229
00230 #ifdef DEBUG
00231 printf("aft temp %lf %lf \n",a[0], a[1],a[2], a[3],a[4]);
00232 #endif
00233
00234
00235 t0 = 1.2 * xsh_SAtemperature( NO_VALUE );
00236
00237 xsh_SAtemperature( t0 );
00238 #ifdef DEBUG
00239 printf("aft temp t0 %lf %lf %lf %lf %lf \n",a[0], a[1],a[2], a[3],a[4]);
00240 #endif
00241
00242 t = xsh_SAanneal( maxit );
00243 #ifdef DEBUG
00244 printf("aft anneal %lf %lf %lf %lf %lf \n",a[0], a[1],a[2], a[3],a[4]);
00245 #endif
00246 xsh_SAcurrent( a );
00247 #ifdef DEBUG
00248 printf("aft current %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf \n",
00249 a[0], a[1],a[2], a[3],a[4],a[5], a[6],a[7], a[8],a[9]);
00250 #endif
00251 z = xsh_3_energy(a);
00252 #ifdef DEBUG
00253 printf("aft energy %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf \n",
00254 a[0], a[1],a[2], a[3],a[4],a[5], a[6],a[7], a[8],a[9]);
00255
00256 fprintf(stderr,"Initial temperature: %f\tfinal temperature: %f\n", t0, t);
00257 fprintf(stderr,"Estimated minimum at: ");
00258 for (i = 0; i < local_nparam; i++)
00259 fprintf(stderr,"%g\t", a[i]);
00260 fprintf(stderr,"\t(energy = %g)\n", z);
00261 #endif
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274 conf_tab = xsh_model_io_output_cfg(local_p_xs);
00275 xsh_3_output_data(a);
00276
00277 for (ii = 0; ii < nparam; ii++)
00278 {
00279 abest[ii]=local_p_abest[ii];
00280 }
00281 cpl_free(a);
00282 xsh_report_cpu( stderr, NULL );
00283
00284 cleanup:
00285 if(cpl_error_get_code() != CPL_ERROR_NONE) {
00286 cpl_free(a);
00287 return NULL;
00288 } else {
00289 return conf_tab ;
00290 }
00291 }
00292
00293 void xsh_3_output_data(double *a)
00294 {
00295 static int counter;
00296
00297 int ii;
00298
00299 double quad_diff;
00300
00301
00302
00303
00304
00305
00306 a[0]=a[0]+0.0;
00307 xsh_3_init(local_p_xs);
00308
00309 quad_diff=0;
00310 for (ii = 0; ii < size; ii++) {
00311 local_p_xs->es_y_tot=local_p_xs->es_y+local_p_xs->slit_scale*local_p_xs->slit[sp_array[ii]];
00312 mm=p_obsorder[ii];
00313 xsh_3_init(local_p_xs);
00314 xsh_3_eval(p_wl[ii],mm,ref,local_p_xs);
00315 xsh_3_detpix(local_p_xs);
00316 quad_diff+=
00317 ((p_obsx[ii]-local_p_xs->xpospix)*
00318 (p_obsx[ii]-local_p_xs->xpospix)+
00319 (p_obsy[ii]-local_p_xs->ypospix)*
00320 (p_obsy[ii]-local_p_xs->ypospix));
00321
00322 #ifdef DEBUG
00323 printf("%d %lf %lf %lf %lf %lf %lf %d %d %d %lf %lf\n",
00324 ii,p_obsx[ii]-local_p_xs->xpospix,
00325 p_obsy[ii]-local_p_xs->ypospix,p_obsx[ii],
00326 local_p_xs->xpospix,p_obsy[ii],local_p_xs->ypospix,
00327 p_obsarm[ii],p_obsorder[ii], sp_array[ii], p_obsf[ii], p_wl[ii]*1000.0);
00328 #endif
00329
00330
00331 counter++;
00332 }
00333 #ifdef DEBUG
00334 printf("%lf\n",quad_diff);
00335 #endif
00336 return;
00337 }
00338
00339
00340 float xsh_3_energy(double *a) {
00341 static int flux_wt;
00342
00343 static int counter;
00344 static int first_time;
00345 static float bestyet;
00346 static int first_ann_flag;
00347 double newval[100];
00348 double size_use=0;
00349 double blaze_wav=0.;
00350 double blaze_ref=0.;
00351 double blaze_off=0.;
00352 double val_max=0.;
00353 double x_max=0.;
00354 double y_max=0.;
00355 double fw_max=0.;
00356
00357
00358 int ii=0;
00359 float sum_nw = 0.0, val = 0.0;
00360 float sum_fw = 0.0, val_fw = 0.0;
00361 float sum_x = 0.0, val_x = 0.0;
00362 float sum_y = 0.0, val_y = 0.0;
00363 float sum = 0.0;
00364
00365 if (first_ann_flag==0) {
00366 if (size>33) {
00367 first_ann_flag=1;
00368 first_time=0;
00369 counter=0;
00370 }
00371 }
00372
00373
00374 for (ii=0; ii<local_nparam; ii++) {
00375 if(first_time >0) {
00376 newval[ii]=local_p_abest[ii]+((local_p_amax[ii]-local_p_amin[ii])/2.0)*a[ii];
00377 }
00378 else {
00379 newval[ii]=local_p_abest[ii];
00380 }
00381 if (newval[ii]>local_p_amax[ii] || newval[ii]<local_p_amin[ii]) {
00382 sum_nw=HUGE_VAL;
00383 sum_fw=HUGE_VAL;
00384 }
00385 xsh_3_assign(local_p_aname[ii],newval[ii]);
00386 }
00387
00388 blaze_off=0.0;
00389 for (mm=local_p_xs->morder_min;mm<=local_p_xs->morder_max;mm+=1) {
00390 blaze_wav=2.0*(sin(-local_p_xs->nug))/(mm*local_p_xs->sg);
00391 if (local_p_xs->arm==1) {
00392 blaze_ref=1.6180339887498949/(mm*99.4);
00393 }
00394 else if (local_p_xs->arm==0) {
00395 blaze_ref=1.3322840971595746/(mm*180.0);
00396 }
00397 else if (local_p_xs->arm==2) {
00398 blaze_ref=1.44030324281136/(mm*55.0);
00399 }
00400 if (fabs(blaze_wav-blaze_ref)>blaze_wav/200.0) {
00401
00402 sum_nw=HUGE_VAL;
00403 sum_fw=HUGE_VAL;
00404 }
00405 else {
00406 if (fabs(blaze_wav-blaze_ref)>blaze_off) {
00407 blaze_off=fabs(blaze_wav-blaze_ref);
00408 }
00409 }
00410 }
00411 xsh_3_init(local_p_xs);
00412
00413 val_max=0.0;
00414 fw_max=0.0;
00415 for (ii = 0; ii < size; ii++) {
00416 if (sum_nw<HUGE_VAL) {
00417 local_p_xs->es_y_tot=local_p_xs->es_y+local_p_xs->slit_scale*local_p_xs->slit[sp_array[ii]];
00418 mm=p_obsorder[ii];
00419
00420 if (local_p_xs->arm==1) {
00421 blaze_wav=2.0*(sin(-local_p_xs->nug))/(mm*local_p_xs->sg);
00422 blaze_ref=1.6180339887498949/(mm*99.4);
00423 }
00424 else if (local_p_xs->arm==0) {
00425 blaze_wav=2.0*(sin(-local_p_xs->nug))/(mm*local_p_xs->sg);
00426 blaze_ref=1.3322840971595746/(mm*180.0);
00427 }
00428
00429 xsh_3_init(local_p_xs);
00430
00431 xsh_3_eval(p_wl[ii],mm,ref,local_p_xs);
00432 xsh_3_detpix(local_p_xs);
00433 if (local_p_xs->chippix[0]==1) {
00434 val=((p_obsx[ii]-local_p_xs->xpospix)*
00435 (p_obsx[ii]-local_p_xs->xpospix)+
00436 (p_obsy[ii]-local_p_xs->ypospix)*
00437 (p_obsy[ii]-local_p_xs->ypospix));
00438 val_fw=((p_obsx[ii]-local_p_xs->xpospix)*
00439 (p_obsx[ii]-local_p_xs->xpospix)+
00440 (p_obsy[ii]-local_p_xs->ypospix)*
00441 (p_obsy[ii]-local_p_xs->ypospix))*p_obsf[ii];
00442 val_x=p_obsx[ii]-local_p_xs->xpospix;
00443 if (val_x<0.0) val_x=-val_x;
00444 val_y=p_obsy[ii]-local_p_xs->ypospix;
00445 if (val_y<0.0) val_y=-val_y;
00446
00447
00448
00449
00450
00451
00452
00453
00454 }
00455 else {
00456 val=BIG_VAL;
00457 val_fw=BIG_VAL;
00458 }
00459 if (val>val_max && val<BIG_VAL) {
00460 val_max=val;
00461 fw_max=val_fw;
00462 x_max=val_x;
00463 y_max=val_y;
00464 }
00465 sum_nw += val;
00466 sum_fw += val_fw;
00467 sum_x +=val_x;
00468 sum_y +=val_y;
00469
00470
00471
00472
00473 }
00474 }
00475 if (size>4 && val_max>0.5) {
00476 sum_nw-=val_max;
00477 sum_fw-=fw_max;
00478 sum_x-=x_max;
00479 sum_y-=y_max;
00480 size_use=(float)(size-1);
00481 }
00482 else {
00483 size_use=(float)(size);
00484 }
00485 if (flux_wt==2) {
00486 sum=val_max;
00487 size_use=1.0;
00488 }
00489 else if (flux_wt==1) {
00490 sum=sum_fw;
00491 }
00492 else {
00493 sum=sum_nw;
00494 }
00495
00496 if (sqrt(sum/size_use)<bestyet && sum>0.0) {
00497 #ifdef DEBUG
00498 xsh_msg("it: %d blaze off %lf nw %lf fw %lf",counter,blaze_off*1000000.0, sqrt(sum_nw/size_use), sqrt(sum_fw/size_use));
00499 xsh_msg("x %lf y %lf max %lf T %lf last %lf", sum_x/size_use, sum_y/size_use, sqrt(val_max), local_p_xs->temper, bestyet);
00500 for (ii=0; ii<local_nparam; ii++) {
00501 xsh_msg("%s %f %f %f %f", (local_p_all_par+local_p_aname[ii])->name, newval[ii],local_p_amax[ii],local_p_amin[ii],2.0*((newval[ii]-local_p_amin[ii])/(local_p_amax[ii]-local_p_amin[ii]))-1.0);
00502 }
00503
00504 #endif
00505 xsh_msg("Iteration No.: %d; Mean x residual: %f; Mean y residual: %f", counter, sum_x/size_use, sum_y/size_use);
00506
00507
00508 bestyet=sqrt(sum/size_use);
00509 if (bestyet<80.0) {
00510 xsh_SAiterations(400);
00511
00512
00513
00514
00515
00516
00517 }
00518
00519
00520
00521
00522 }
00523 counter++;
00524 if(first_time==0) {
00525 first_time++;
00526 bestyet=1000000;
00527 flux_wt=0;
00528 }
00529
00530 return sum;
00531
00532
00533 }
00534
00535 void xsh_3_assign(int loc, double val)
00536 {
00537 int compa,kk,indlen;
00538 char tempstr[10];
00539 compa=strncmp((local_p_all_par+loc)->name,"temper",6);
00540 if (compa==0) local_p_xs->temper=val;
00541 compa=strncmp((local_p_all_par+loc)->name,"t_ir_p2",7);
00542 if (compa==0) local_p_xs->t_ir_p2=val;
00543 compa=strncmp((local_p_all_par+loc)->name,"t_ir_p3",7);
00544 if (compa==0) local_p_xs->t_ir_p3=val;
00545 compa=strncmp((local_p_all_par+loc)->name,"es_x",4);
00546 if (compa==0) local_p_xs->es_x=val;
00547 compa=strncmp((local_p_all_par+loc)->name,"es_y",4);
00548 if (compa==0) local_p_xs->es_y=val;
00549 compa=strncmp((local_p_all_par+loc)->name,"mues",4);
00550 if (compa==0) local_p_xs->mues=val*DEG2RAD;
00551 compa=strncmp((local_p_all_par+loc)->name,"nues",4);
00552 if (compa==0) local_p_xs->nues=val*DEG2RAD;
00553 compa=strncmp((local_p_all_par+loc)->name,"taues",5);
00554 if (compa==0) local_p_xs->taues=val*DEG2RAD;
00555 compa=strncmp((local_p_all_par+loc)->name,"slit_scale",10);
00556 if (compa==0) local_p_xs->slit_scale=val;
00557 compa=strncmp((local_p_all_par+loc)->name,"es_s",4);
00558 if (compa==0) local_p_xs->es_s=val;
00559 compa=strncmp((local_p_all_par+loc)->name,"es_w",4);
00560 if (compa==0) local_p_xs->es_w=val;
00561 compa=strncmp((local_p_all_par+loc)->name,"fcol",4);
00562 if (compa==0) local_p_xs->fcol=val;
00563 compa=strncmp((local_p_all_par+loc)->name,"cmup1",5);
00564 if (compa==0) local_p_xs->cmup1=val*DEG2RAD;
00565 compa=strncmp((local_p_all_par+loc)->name,"mup1",4);
00566 if (compa==0) local_p_xs->mup1=val*DEG2RAD;
00567 compa=strncmp((local_p_all_par+loc)->name,"nup1",4);
00568 if (compa==0) local_p_xs->nup1=val*DEG2RAD;
00569 compa=strncmp((local_p_all_par+loc)->name,"taup1",5);
00570 if (compa==0) local_p_xs->taup1=val*DEG2RAD;
00571 compa=strncmp((local_p_all_par+loc)->name,"mup2",4);
00572 if (compa==0) local_p_xs->mup2=val*DEG2RAD;
00573 compa=strncmp((local_p_all_par+loc)->name,"nup2",4);
00574 if (compa==0) local_p_xs->nup2=val*DEG2RAD;
00575 compa=strncmp((local_p_all_par+loc)->name,"taup2",5);
00576 if (compa==0) local_p_xs->taup2=val*DEG2RAD;
00577 compa=strncmp((local_p_all_par+loc)->name,"mup3",4);
00578 if (compa==0) local_p_xs->mup3=val*DEG2RAD;
00579 compa=strncmp((local_p_all_par+loc)->name,"nup3",4);
00580 if (compa==0) local_p_xs->nup3=val*DEG2RAD;
00581 compa=strncmp((local_p_all_par+loc)->name,"taup3",5);
00582 if (compa==0) local_p_xs->taup3=val*DEG2RAD;
00583 compa=strncmp((local_p_all_par+loc)->name,"mup4",4);
00584 if (compa==0) local_p_xs->mup4=val*DEG2RAD;
00585 compa=strncmp((local_p_all_par+loc)->name,"nup4",4);
00586 if (compa==0) local_p_xs->nup4=val*DEG2RAD;
00587 compa=strncmp((local_p_all_par+loc)->name,"taup4",5);
00588 if (compa==0) local_p_xs->taup4=val*DEG2RAD;
00589 compa=strncmp((local_p_all_par+loc)->name,"mup5",4);
00590 if (compa==0) local_p_xs->mup5=val*DEG2RAD;
00591 compa=strncmp((local_p_all_par+loc)->name,"nup5",4);
00592 if (compa==0) local_p_xs->nup5=val*DEG2RAD;
00593 compa=strncmp((local_p_all_par+loc)->name,"taup5",5);
00594 if (compa==0) local_p_xs->taup5=val*DEG2RAD;
00595 compa=strncmp((local_p_all_par+loc)->name,"mup6",4);
00596 if (compa==0) local_p_xs->mup6=val*DEG2RAD;
00597 compa=strncmp((local_p_all_par+loc)->name,"nup6",4);
00598 if (compa==0) local_p_xs->nup6=val*DEG2RAD;
00599 compa=strncmp((local_p_all_par+loc)->name,"taup6",5);
00600 if (compa==0) local_p_xs->taup6=val*DEG2RAD;
00601 compa=strncmp((local_p_all_par+loc)->name,"mug",3);
00602 if (compa==0) local_p_xs->mug=val*DEG2RAD;
00603 compa=strncmp((local_p_all_par+loc)->name,"nug",3);
00604 if (compa==0) local_p_xs->nug=val*DEG2RAD;
00605 compa=strncmp((local_p_all_par+loc)->name,"taug",4);
00606 if (compa==0) local_p_xs->taug=val*DEG2RAD;
00607 compa=strncmp((local_p_all_par+loc)->name,"sg",2);
00608 if (compa==0) local_p_xs->sg=val;
00609 compa=strncmp((local_p_all_par+loc)->name,"fdet",4);
00610 if (compa==0) local_p_xs->fdet=val;
00611 compa=strncmp((local_p_all_par+loc)->name,"mud",3);
00612 if (compa==0) local_p_xs->mud=val*DEG2RAD;
00613 compa=strncmp((local_p_all_par+loc)->name,"nud",3);
00614 if (compa==0) local_p_xs->nud=val*DEG2RAD;
00615 compa=strncmp((local_p_all_par+loc)->name,"taud",4);
00616 if (compa==0) local_p_xs->taud=val*DEG2RAD;
00617 compa=strncmp((local_p_all_par+loc)->name,"pix",3);
00618 if (compa==0) {
00619 local_p_xs->pix=val;
00620 local_p_xs->pix_X=local_p_xs->pix;
00621 local_p_xs->pix_Y=local_p_xs->pix;
00622 }
00623 compa=strncmp((local_p_all_par+loc)->name,"chipx",5);
00624 if (compa==0) local_p_xs->chipx=val;
00625 compa=strncmp((local_p_all_par+loc)->name,"chipy",5);
00626 if (compa==0) local_p_xs->chipy=val;
00627 compa=strncmp((local_p_all_par+loc)->name,"chiprot",7);
00628 if (compa==0) local_p_xs->chiprot=val*DEG2RAD;
00629 compa=strncmp((local_p_all_par+loc)->name,"pc_x_xx",7);
00630 if (compa==0) local_p_xs->pc_x_xx=val;
00631 compa=strncmp((local_p_all_par+loc)->name,"pc_x_x1",7);
00632 if (compa==0) local_p_xs->pc_x_x1=val;
00633 compa=strncmp((local_p_all_par+loc)->name,"pc_x_yy",7);
00634 if (compa==0) local_p_xs->pc_x_yy=val;
00635 compa=strncmp((local_p_all_par+loc)->name,"pc_x_y1",7);
00636 if (compa==0) local_p_xs->pc_x_y1=val;
00637 compa=strncmp((local_p_all_par+loc)->name,"pc_x_xy",7);
00638 if (compa==0) local_p_xs->pc_x_xy=val;
00639 compa=strncmp((local_p_all_par+loc)->name,"pc_x_x3",7);
00640 if (compa==0) local_p_xs->pc_x_x3=val;
00641 compa=strncmp((local_p_all_par+loc)->name,"pc_x_x2y",8);
00642 if (compa==0) local_p_xs->pc_x_x2y=val;
00643 compa=strncmp((local_p_all_par+loc)->name,"pc_x_y2x",8);
00644 if (compa==0) local_p_xs->pc_x_y2x=val;
00645 compa=strncmp((local_p_all_par+loc)->name,"pc_x_y3",7);
00646 if (compa==0) local_p_xs->pc_x_y3=val;
00647 compa=strncmp((local_p_all_par+loc)->name,"pc_y_xx",7);
00648 if (compa==0) local_p_xs->pc_y_xx=val;
00649 compa=strncmp((local_p_all_par+loc)->name,"pc_y_x1",7);
00650 if (compa==0) local_p_xs->pc_y_x1=val;
00651 compa=strncmp((local_p_all_par+loc)->name,"pc_y_yy",7);
00652 if (compa==0) local_p_xs->pc_y_yy=val;
00653 compa=strncmp((local_p_all_par+loc)->name,"pc_y_y1",7);
00654 if (compa==0) local_p_xs->pc_y_y1=val;
00655 compa=strncmp((local_p_all_par+loc)->name,"pc_y_xy",7);
00656 if (compa==0) local_p_xs->pc_y_xy=val;
00657 compa=strncmp((local_p_all_par+loc)->name,"pc_y_x3",7);
00658 if (compa==0) local_p_xs->pc_y_x3=val;
00659 compa=strncmp((local_p_all_par+loc)->name,"pc_y_x2y",8);
00660 if (compa==0) local_p_xs->pc_y_x2y=val;
00661 compa=strncmp((local_p_all_par+loc)->name,"pc_y_y2x",8);
00662 if (compa==0) local_p_xs->pc_y_y2x=val;
00663 compa=strncmp((local_p_all_par+loc)->name,"pc_y_y3",7);
00664 if (compa==0) local_p_xs->pc_y_y3=val;
00665 compa=strncmp((local_p_all_par+loc)->name,"pc4_x_xy3",9);
00666 if (compa==0) local_p_xs->pc4_x_xy3=val;
00667 compa=strncmp((local_p_all_par+loc)->name,"pc4_x_x3y",9);
00668 if (compa==0) local_p_xs->pc4_x_x3y=val;
00669 compa=strncmp((local_p_all_par+loc)->name,"pc4_x_x2y2",10);
00670 if (compa==0) local_p_xs->pc4_x_x2y2=val;
00671 compa=strncmp((local_p_all_par+loc)->name,"pc4_x_x4",8);
00672 if (compa==0) local_p_xs->pc4_x_x4=val;
00673 compa=strncmp((local_p_all_par+loc)->name,"pc4_x_y4",8);
00674 if (compa==0) local_p_xs->pc4_x_y4=val;
00675 compa=strncmp((local_p_all_par+loc)->name,"pc4_y_xy3",9);
00676 if (compa==0) local_p_xs->pc4_y_xy3=val;
00677 compa=strncmp((local_p_all_par+loc)->name,"pc4_y_x3y",9);
00678 if (compa==0) local_p_xs->pc4_y_x3y=val;
00679 compa=strncmp((local_p_all_par+loc)->name,"pc4_y_x2y2",10);
00680 if (compa==0) local_p_xs->pc4_y_x2y2=val;
00681 compa=strncmp((local_p_all_par+loc)->name,"pc4_y_x4",8);
00682 if (compa==0) local_p_xs->pc4_y_x4=val;
00683 compa=strncmp((local_p_all_par+loc)->name,"pc4_y_y4",8);
00684 if (compa==0) local_p_xs->pc4_y_y4=val;
00685 compa=strncmp((local_p_all_par+loc)->name,"ca_x0",5);
00686 if (compa==0) local_p_xs->ca_x0=val;
00687 compa=strncmp((local_p_all_par+loc)->name,"ca_x1",5);
00688 if (compa==0) local_p_xs->ca_x1=val;
00689 compa=strncmp((local_p_all_par+loc)->name,"ca_y0",5);
00690 if (compa==0) local_p_xs->ca_y0=val;
00691 compa=strncmp((local_p_all_par+loc)->name,"ca_y1",5);
00692 if (compa==0) local_p_xs->ca_y1=val;
00693 compa=strncmp((local_p_all_par+loc)->name,"d2_x1",5);
00694 if (compa==0) local_p_xs->d2_x1=val;
00695 compa=strncmp((local_p_all_par+loc)->name,"d2_x2",5);
00696 if (compa==0) local_p_xs->d2_x2=val;
00697 compa=strncmp((local_p_all_par+loc)->name,"d2_x3",5);
00698 if (compa==0) local_p_xs->d2_x3=val;
00699 compa=strncmp((local_p_all_par+loc)->name,"d2_y1x0",7);
00700 if (compa==0) local_p_xs->d2_y1x0=val;
00701 compa=strncmp((local_p_all_par+loc)->name,"d2_y1x1",7);
00702 if (compa==0) local_p_xs->d2_y1x1=val;
00703 compa=strncmp((local_p_all_par+loc)->name,"d2_y1x2",7);
00704 if (compa==0) local_p_xs->d2_y1x2=val;
00705 compa=strncmp((local_p_all_par+loc)->name,"d2_y1x3",7);
00706 if (compa==0) local_p_xs->d2_y1x3=val;
00707 compa=strncmp((local_p_all_par+loc)->name,"d2_y2x0",7);
00708 if (compa==0) local_p_xs->d2_y2x0=val;
00709 compa=strncmp((local_p_all_par+loc)->name,"d2_y2x1",7);
00710 if (compa==0) local_p_xs->d2_y2x1=val;
00711 compa=strncmp((local_p_all_par+loc)->name,"d2_y2x2",7);
00712 if (compa==0) local_p_xs->d2_y2x2=val;
00713 compa=strncmp((local_p_all_par+loc)->name,"d2_y2x3",7);
00714 if (compa==0) local_p_xs->d2_y2x3=val;
00715 compa=strncmp((local_p_all_par+loc)->name,"d2_y3x0",7);
00716 if (compa==0) local_p_xs->d2_y3x0=val;
00717 compa=strncmp((local_p_all_par+loc)->name,"d2_y3x1",7);
00718 if (compa==0) local_p_xs->d2_y3x1=val;
00719 compa=strncmp((local_p_all_par+loc)->name,"d2_y3x2",7);
00720 if (compa==0) local_p_xs->d2_y3x2=val;
00721 compa=strncmp((local_p_all_par+loc)->name,"d2_y3x3",7);
00722 if (compa==0) local_p_xs->d2_y3x3=val;
00723 for (kk=0;kk<9;kk++) {
00724 sprintf(tempstr,"slit[%d]",kk);
00725 indlen=strlen(tempstr);
00726 compa=strncmp((local_p_all_par+loc)->name,tempstr,indlen);
00727 if (compa==0) local_p_xs->slit[kk]=val;
00728 }
00729 compa=strncmp((local_p_all_par+loc)->name,"offx",4);
00730 if (compa==0) local_p_xs->offx=val;
00731 compa=strncmp((local_p_all_par+loc)->name,"offy",4);
00732 if (compa==0) local_p_xs->offy=val;
00733 compa=strncmp((local_p_all_par+loc)->name,"flipx",5);
00734 if (compa==0) local_p_xs->flipx=val;
00735 compa=strncmp((local_p_all_par+loc)->name,"flipy",5);
00736 if (compa==0) local_p_xs->flipy=val;
00737 }