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 %lf %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 xsh_SAfree();
00288 return NULL;
00289 } else {
00290 xsh_SAfree();
00291 return conf_tab ;
00292 }
00293 }
00294
00295 void xsh_3_output_data(double *a)
00296 {
00297 static int counter;
00298
00299 int ii;
00300
00301 double quad_diff;
00302
00303
00304
00305
00306
00307
00308 a[0]=a[0]+0.0;
00309 xsh_3_init(local_p_xs);
00310
00311 quad_diff=0;
00312 for (ii = 0; ii < size; ii++) {
00313 local_p_xs->es_y_tot=local_p_xs->es_y+local_p_xs->slit_scale*local_p_xs->slit[sp_array[ii]];
00314 mm=p_obsorder[ii];
00315 xsh_3_init(local_p_xs);
00316 xsh_3_eval(p_wl[ii],mm,ref,local_p_xs);
00317 xsh_3_detpix(local_p_xs);
00318 quad_diff+=
00319 ((p_obsx[ii]-local_p_xs->xpospix)*
00320 (p_obsx[ii]-local_p_xs->xpospix)+
00321 (p_obsy[ii]-local_p_xs->ypospix)*
00322 (p_obsy[ii]-local_p_xs->ypospix));
00323
00324 #ifdef DEBUG
00325 printf("%d %lf %lf %lf %lf %lf %lf %d %d %d %lf %lf\n",
00326 ii,p_obsx[ii]-local_p_xs->xpospix,
00327 p_obsy[ii]-local_p_xs->ypospix,p_obsx[ii],
00328 local_p_xs->xpospix,p_obsy[ii],local_p_xs->ypospix,
00329 p_obsarm[ii],p_obsorder[ii], sp_array[ii], p_obsf[ii], p_wl[ii]*1000.0);
00330 #endif
00331
00332
00333 counter++;
00334 }
00335 #ifdef DEBUG
00336 printf("%lf\n",quad_diff);
00337 #endif
00338 return;
00339 }
00340
00341
00342 float xsh_3_energy(double *a) {
00343 static int flux_wt;
00344
00345 static int counter;
00346 static int first_time;
00347 static float bestyet;
00348 static int first_ann_flag;
00349 double newval[100];
00350 double size_use=0;
00351 double blaze_wav=0.;
00352 double blaze_ref=0.;
00353 double blaze_off=0.;
00354 double val_max=0.;
00355 double x_max=0.;
00356 double y_max=0.;
00357 double fw_max=0.;
00358
00359
00360 int ii=0;
00361 float sum_nw = 0.0, val = 0.0;
00362 float sum_fw = 0.0, val_fw = 0.0;
00363 float sum_x = 0.0, val_x = 0.0;
00364 float sum_y = 0.0, val_y = 0.0;
00365 float sum = 0.0;
00366
00367 if (first_ann_flag==0) {
00368 if (size>33) {
00369 first_ann_flag=1;
00370 first_time=0;
00371 counter=0;
00372 }
00373 }
00374
00375 double sin_min_nug_div_sg=(sin(-local_p_xs->nug))/local_p_xs->sg;
00376 for (ii=0; ii<local_nparam; ii++) {
00377 if(first_time >0) {
00378 newval[ii]=local_p_abest[ii]+((local_p_amax[ii]-local_p_amin[ii])/2.0)*a[ii];
00379 }
00380 else {
00381 newval[ii]=local_p_abest[ii];
00382 }
00383 if (newval[ii]>local_p_amax[ii] || newval[ii]<local_p_amin[ii]) {
00384 sum_nw=HUGE_VAL;
00385 sum_fw=HUGE_VAL;
00386 }
00387 xsh_3_assign(local_p_aname[ii],newval[ii]);
00388 }
00389
00390 blaze_off=0.0;
00391 for (mm=local_p_xs->morder_min;mm<=local_p_xs->morder_max;mm+=1) {
00392 blaze_wav=2.0*sin_min_nug_div_sg/mm;
00393 if (local_p_xs->arm==1) {
00394
00395 blaze_ref = 0.0162780076852276/mm;
00396 }
00397 else if (local_p_xs->arm==0) {
00398
00399 blaze_ref=0.0074015783175532/mm;
00400 }
00401 else if (local_p_xs->arm==2) {
00402
00403 blaze_ref = 0.0261873316874793/mm;
00404 }
00405 if (fabs(blaze_wav-blaze_ref)>blaze_wav/200.0) {
00406
00407 sum_nw=HUGE_VAL;
00408 sum_fw=HUGE_VAL;
00409 }
00410 else {
00411 double tmpval = fabs(blaze_wav-blaze_ref);
00412 if (tmpval>blaze_off) {
00413 blaze_off=tmpval;
00414 }
00415 }
00416 }
00417 xsh_3_init(local_p_xs);
00418
00419 val_max=0.0;
00420 fw_max=0.0;
00421 for (ii = 0; ii < size; ii++) {
00422 if (sum_nw<HUGE_VAL) {
00423 local_p_xs->es_y_tot=local_p_xs->es_y+local_p_xs->slit_scale*local_p_xs->slit[sp_array[ii]];
00424 mm=p_obsorder[ii];
00425
00426 if (local_p_xs->arm==1) {
00427 blaze_wav=2.0*sin_min_nug_div_sg/mm;
00428
00429 blaze_ref = 0.0162780076852276/mm;
00430 }
00431 else if (local_p_xs->arm==0) {
00432 blaze_wav=2.0*sin_min_nug_div_sg/mm;
00433
00434 blaze_ref=0.0074015783175532/mm;
00435 }
00436
00437 xsh_3_init(local_p_xs);
00438
00439 xsh_3_eval(p_wl[ii],mm,ref,local_p_xs);
00440 xsh_3_detpix(local_p_xs);
00441 if (local_p_xs->chippix[0]==1) {
00442 val_x=p_obsx[ii]-local_p_xs->xpospix;
00443 if (val_x<0.0) val_x=-val_x;
00444
00445 val_y=p_obsy[ii]-local_p_xs->ypospix;
00446 if (val_y<0.0) val_y=-val_y;
00447
00448 val=(val_x*val_x+val_y*val_y);
00449 val_fw=val*p_obsf[ii];
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459 }
00460 else {
00461 val=BIG_VAL;
00462 val_fw=BIG_VAL;
00463 }
00464 if (val>val_max && val<BIG_VAL) {
00465 val_max=val;
00466 fw_max=val_fw;
00467 x_max=val_x;
00468 y_max=val_y;
00469 }
00470 sum_nw += val;
00471 sum_fw += val_fw;
00472 sum_x +=val_x;
00473 sum_y +=val_y;
00474
00475
00476
00477
00478 }
00479 }
00480 if (size>4 && val_max>0.5) {
00481 sum_nw-=val_max;
00482 sum_fw-=fw_max;
00483 sum_x-=x_max;
00484 sum_y-=y_max;
00485 size_use=(float)(size-1);
00486 }
00487 else {
00488 size_use=(float)(size);
00489 }
00490 if (flux_wt==2) {
00491 sum=val_max;
00492 size_use=1.0;
00493 }
00494 else if (flux_wt==1) {
00495 sum=sum_fw;
00496 }
00497 else {
00498 sum=sum_nw;
00499 }
00500
00501 if (sqrt(sum/size_use)<bestyet && sum>0.0) {
00502 #ifdef DEBUG
00503 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));
00504 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);
00505 for (ii=0; ii<local_nparam; ii++) {
00506 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);
00507 }
00508
00509 #endif
00510 xsh_msg("Iteration No./10: %d; Mean x residual: %f; Mean y residual: %f", counter/10, sum_x/size_use, sum_y/size_use);
00511
00512
00513 bestyet=sqrt(sum/size_use);
00514 if (bestyet<80.0) {
00515 xsh_SAiterations(400);
00516
00517
00518
00519
00520
00521
00522 }
00523
00524
00525
00526
00527 }
00528 counter++;
00529 if(first_time==0) {
00530 first_time++;
00531 bestyet=1000000;
00532 flux_wt=0;
00533 }
00534
00535 return sum;
00536
00537
00538 }
00539
00540 void xsh_3_assign(int loc, double val)
00541 {
00542 int compa,kk,indlen;
00543 char tempstr[10];
00544 compa=strncmp((local_p_all_par+loc)->name,"temper",6);
00545 if (compa==0) local_p_xs->temper=val;
00546 compa=strncmp((local_p_all_par+loc)->name,"t_ir_p2",7);
00547 if (compa==0) local_p_xs->t_ir_p2=val;
00548 compa=strncmp((local_p_all_par+loc)->name,"t_ir_p3",7);
00549 if (compa==0) local_p_xs->t_ir_p3=val;
00550 compa=strncmp((local_p_all_par+loc)->name,"es_x",4);
00551 if (compa==0) local_p_xs->es_x=val;
00552 compa=strncmp((local_p_all_par+loc)->name,"es_y",4);
00553 if (compa==0) local_p_xs->es_y=val;
00554 compa=strncmp((local_p_all_par+loc)->name,"mues",4);
00555 if (compa==0) local_p_xs->mues=val*DEG2RAD;
00556 compa=strncmp((local_p_all_par+loc)->name,"nues",4);
00557 if (compa==0) local_p_xs->nues=val*DEG2RAD;
00558 compa=strncmp((local_p_all_par+loc)->name,"taues",5);
00559 if (compa==0) local_p_xs->taues=val*DEG2RAD;
00560 compa=strncmp((local_p_all_par+loc)->name,"slit_scale",10);
00561 if (compa==0) local_p_xs->slit_scale=val;
00562 compa=strncmp((local_p_all_par+loc)->name,"es_s",4);
00563 if (compa==0) local_p_xs->es_s=val;
00564 compa=strncmp((local_p_all_par+loc)->name,"es_w",4);
00565 if (compa==0) local_p_xs->es_w=val;
00566 compa=strncmp((local_p_all_par+loc)->name,"fcol",4);
00567 if (compa==0) local_p_xs->fcol=val;
00568 compa=strncmp((local_p_all_par+loc)->name,"cmup1",5);
00569 if (compa==0) local_p_xs->cmup1=val*DEG2RAD;
00570 compa=strncmp((local_p_all_par+loc)->name,"mup1",4);
00571 if (compa==0) local_p_xs->mup1=val*DEG2RAD;
00572 compa=strncmp((local_p_all_par+loc)->name,"nup1",4);
00573 if (compa==0) local_p_xs->nup1=val*DEG2RAD;
00574 compa=strncmp((local_p_all_par+loc)->name,"taup1",5);
00575 if (compa==0) local_p_xs->taup1=val*DEG2RAD;
00576 compa=strncmp((local_p_all_par+loc)->name,"mup2",4);
00577 if (compa==0) local_p_xs->mup2=val*DEG2RAD;
00578 compa=strncmp((local_p_all_par+loc)->name,"nup2",4);
00579 if (compa==0) local_p_xs->nup2=val*DEG2RAD;
00580 compa=strncmp((local_p_all_par+loc)->name,"taup2",5);
00581 if (compa==0) local_p_xs->taup2=val*DEG2RAD;
00582 compa=strncmp((local_p_all_par+loc)->name,"mup3",4);
00583 if (compa==0) local_p_xs->mup3=val*DEG2RAD;
00584 compa=strncmp((local_p_all_par+loc)->name,"nup3",4);
00585 if (compa==0) local_p_xs->nup3=val*DEG2RAD;
00586 compa=strncmp((local_p_all_par+loc)->name,"taup3",5);
00587 if (compa==0) local_p_xs->taup3=val*DEG2RAD;
00588 compa=strncmp((local_p_all_par+loc)->name,"mup4",4);
00589 if (compa==0) local_p_xs->mup4=val*DEG2RAD;
00590 compa=strncmp((local_p_all_par+loc)->name,"nup4",4);
00591 if (compa==0) local_p_xs->nup4=val*DEG2RAD;
00592 compa=strncmp((local_p_all_par+loc)->name,"taup4",5);
00593 if (compa==0) local_p_xs->taup4=val*DEG2RAD;
00594 compa=strncmp((local_p_all_par+loc)->name,"mup5",4);
00595 if (compa==0) local_p_xs->mup5=val*DEG2RAD;
00596 compa=strncmp((local_p_all_par+loc)->name,"nup5",4);
00597 if (compa==0) local_p_xs->nup5=val*DEG2RAD;
00598 compa=strncmp((local_p_all_par+loc)->name,"taup5",5);
00599 if (compa==0) local_p_xs->taup5=val*DEG2RAD;
00600 compa=strncmp((local_p_all_par+loc)->name,"mup6",4);
00601 if (compa==0) local_p_xs->mup6=val*DEG2RAD;
00602 compa=strncmp((local_p_all_par+loc)->name,"nup6",4);
00603 if (compa==0) local_p_xs->nup6=val*DEG2RAD;
00604 compa=strncmp((local_p_all_par+loc)->name,"taup6",5);
00605 if (compa==0) local_p_xs->taup6=val*DEG2RAD;
00606 compa=strncmp((local_p_all_par+loc)->name,"mug",3);
00607 if (compa==0) local_p_xs->mug=val*DEG2RAD;
00608 compa=strncmp((local_p_all_par+loc)->name,"nug",3);
00609 if (compa==0) local_p_xs->nug=val*DEG2RAD;
00610 compa=strncmp((local_p_all_par+loc)->name,"taug",4);
00611 if (compa==0) local_p_xs->taug=val*DEG2RAD;
00612 compa=strncmp((local_p_all_par+loc)->name,"sg",2);
00613 if (compa==0) local_p_xs->sg=val;
00614 compa=strncmp((local_p_all_par+loc)->name,"fdet",4);
00615 if (compa==0) local_p_xs->fdet=val;
00616 compa=strncmp((local_p_all_par+loc)->name,"mud",3);
00617 if (compa==0) local_p_xs->mud=val*DEG2RAD;
00618 compa=strncmp((local_p_all_par+loc)->name,"nud",3);
00619 if (compa==0) local_p_xs->nud=val*DEG2RAD;
00620 compa=strncmp((local_p_all_par+loc)->name,"taud",4);
00621 if (compa==0) local_p_xs->taud=val*DEG2RAD;
00622 compa=strncmp((local_p_all_par+loc)->name,"pix",3);
00623 if (compa==0) {
00624 local_p_xs->pix=val;
00625 local_p_xs->pix_X=local_p_xs->pix;
00626 local_p_xs->pix_Y=local_p_xs->pix;
00627 }
00628 compa=strncmp((local_p_all_par+loc)->name,"chipx",5);
00629 if (compa==0) local_p_xs->chipx=val;
00630 compa=strncmp((local_p_all_par+loc)->name,"chipy",5);
00631 if (compa==0) local_p_xs->chipy=val;
00632 compa=strncmp((local_p_all_par+loc)->name,"chiprot",7);
00633 if (compa==0) local_p_xs->chiprot=val*DEG2RAD;
00634 compa=strncmp((local_p_all_par+loc)->name,"pc_x_xx",7);
00635 if (compa==0) local_p_xs->pc_x_xx=val;
00636 compa=strncmp((local_p_all_par+loc)->name,"pc_x_x1",7);
00637 if (compa==0) local_p_xs->pc_x_x1=val;
00638 compa=strncmp((local_p_all_par+loc)->name,"pc_x_yy",7);
00639 if (compa==0) local_p_xs->pc_x_yy=val;
00640 compa=strncmp((local_p_all_par+loc)->name,"pc_x_y1",7);
00641 if (compa==0) local_p_xs->pc_x_y1=val;
00642 compa=strncmp((local_p_all_par+loc)->name,"pc_x_xy",7);
00643 if (compa==0) local_p_xs->pc_x_xy=val;
00644 compa=strncmp((local_p_all_par+loc)->name,"pc_x_x3",7);
00645 if (compa==0) local_p_xs->pc_x_x3=val;
00646 compa=strncmp((local_p_all_par+loc)->name,"pc_x_x2y",8);
00647 if (compa==0) local_p_xs->pc_x_x2y=val;
00648 compa=strncmp((local_p_all_par+loc)->name,"pc_x_y2x",8);
00649 if (compa==0) local_p_xs->pc_x_y2x=val;
00650 compa=strncmp((local_p_all_par+loc)->name,"pc_x_y3",7);
00651 if (compa==0) local_p_xs->pc_x_y3=val;
00652 compa=strncmp((local_p_all_par+loc)->name,"pc_y_xx",7);
00653 if (compa==0) local_p_xs->pc_y_xx=val;
00654 compa=strncmp((local_p_all_par+loc)->name,"pc_y_x1",7);
00655 if (compa==0) local_p_xs->pc_y_x1=val;
00656 compa=strncmp((local_p_all_par+loc)->name,"pc_y_yy",7);
00657 if (compa==0) local_p_xs->pc_y_yy=val;
00658 compa=strncmp((local_p_all_par+loc)->name,"pc_y_y1",7);
00659 if (compa==0) local_p_xs->pc_y_y1=val;
00660 compa=strncmp((local_p_all_par+loc)->name,"pc_y_xy",7);
00661 if (compa==0) local_p_xs->pc_y_xy=val;
00662 compa=strncmp((local_p_all_par+loc)->name,"pc_y_x3",7);
00663 if (compa==0) local_p_xs->pc_y_x3=val;
00664 compa=strncmp((local_p_all_par+loc)->name,"pc_y_x2y",8);
00665 if (compa==0) local_p_xs->pc_y_x2y=val;
00666 compa=strncmp((local_p_all_par+loc)->name,"pc_y_y2x",8);
00667 if (compa==0) local_p_xs->pc_y_y2x=val;
00668 compa=strncmp((local_p_all_par+loc)->name,"pc_y_y3",7);
00669 if (compa==0) local_p_xs->pc_y_y3=val;
00670 compa=strncmp((local_p_all_par+loc)->name,"pc4_x_xy3",9);
00671 if (compa==0) local_p_xs->pc4_x_xy3=val;
00672 compa=strncmp((local_p_all_par+loc)->name,"pc4_x_x3y",9);
00673 if (compa==0) local_p_xs->pc4_x_x3y=val;
00674 compa=strncmp((local_p_all_par+loc)->name,"pc4_x_x2y2",10);
00675 if (compa==0) local_p_xs->pc4_x_x2y2=val;
00676 compa=strncmp((local_p_all_par+loc)->name,"pc4_x_x4",8);
00677 if (compa==0) local_p_xs->pc4_x_x4=val;
00678 compa=strncmp((local_p_all_par+loc)->name,"pc4_x_y4",8);
00679 if (compa==0) local_p_xs->pc4_x_y4=val;
00680 compa=strncmp((local_p_all_par+loc)->name,"pc4_y_xy3",9);
00681 if (compa==0) local_p_xs->pc4_y_xy3=val;
00682 compa=strncmp((local_p_all_par+loc)->name,"pc4_y_x3y",9);
00683 if (compa==0) local_p_xs->pc4_y_x3y=val;
00684 compa=strncmp((local_p_all_par+loc)->name,"pc4_y_x2y2",10);
00685 if (compa==0) local_p_xs->pc4_y_x2y2=val;
00686 compa=strncmp((local_p_all_par+loc)->name,"pc4_y_x4",8);
00687 if (compa==0) local_p_xs->pc4_y_x4=val;
00688 compa=strncmp((local_p_all_par+loc)->name,"pc4_y_y4",8);
00689 if (compa==0) local_p_xs->pc4_y_y4=val;
00690 compa=strncmp((local_p_all_par+loc)->name,"ca_x0",5);
00691 if (compa==0) local_p_xs->ca_x0=val;
00692 compa=strncmp((local_p_all_par+loc)->name,"ca_x1",5);
00693 if (compa==0) local_p_xs->ca_x1=val;
00694 compa=strncmp((local_p_all_par+loc)->name,"ca_y0",5);
00695 if (compa==0) local_p_xs->ca_y0=val;
00696 compa=strncmp((local_p_all_par+loc)->name,"ca_y1",5);
00697 if (compa==0) local_p_xs->ca_y1=val;
00698 compa=strncmp((local_p_all_par+loc)->name,"d2_x1",5);
00699 if (compa==0) local_p_xs->d2_x1=val;
00700 compa=strncmp((local_p_all_par+loc)->name,"d2_x2",5);
00701 if (compa==0) local_p_xs->d2_x2=val;
00702 compa=strncmp((local_p_all_par+loc)->name,"d2_x3",5);
00703 if (compa==0) local_p_xs->d2_x3=val;
00704 compa=strncmp((local_p_all_par+loc)->name,"d2_y1x0",7);
00705 if (compa==0) local_p_xs->d2_y1x0=val;
00706 compa=strncmp((local_p_all_par+loc)->name,"d2_y1x1",7);
00707 if (compa==0) local_p_xs->d2_y1x1=val;
00708 compa=strncmp((local_p_all_par+loc)->name,"d2_y1x2",7);
00709 if (compa==0) local_p_xs->d2_y1x2=val;
00710 compa=strncmp((local_p_all_par+loc)->name,"d2_y1x3",7);
00711 if (compa==0) local_p_xs->d2_y1x3=val;
00712 compa=strncmp((local_p_all_par+loc)->name,"d2_y2x0",7);
00713 if (compa==0) local_p_xs->d2_y2x0=val;
00714 compa=strncmp((local_p_all_par+loc)->name,"d2_y2x1",7);
00715 if (compa==0) local_p_xs->d2_y2x1=val;
00716 compa=strncmp((local_p_all_par+loc)->name,"d2_y2x2",7);
00717 if (compa==0) local_p_xs->d2_y2x2=val;
00718 compa=strncmp((local_p_all_par+loc)->name,"d2_y2x3",7);
00719 if (compa==0) local_p_xs->d2_y2x3=val;
00720 compa=strncmp((local_p_all_par+loc)->name,"d2_y3x0",7);
00721 if (compa==0) local_p_xs->d2_y3x0=val;
00722 compa=strncmp((local_p_all_par+loc)->name,"d2_y3x1",7);
00723 if (compa==0) local_p_xs->d2_y3x1=val;
00724 compa=strncmp((local_p_all_par+loc)->name,"d2_y3x2",7);
00725 if (compa==0) local_p_xs->d2_y3x2=val;
00726 compa=strncmp((local_p_all_par+loc)->name,"d2_y3x3",7);
00727 if (compa==0) local_p_xs->d2_y3x3=val;
00728 for (kk=0;kk<9;kk++) {
00729 sprintf(tempstr,"slit[%d]",kk);
00730 indlen=strlen(tempstr);
00731 compa=strncmp((local_p_all_par+loc)->name,tempstr,indlen);
00732 if (compa==0) local_p_xs->slit[kk]=val;
00733 }
00734 compa=strncmp((local_p_all_par+loc)->name,"offx",4);
00735 if (compa==0) local_p_xs->offx=val;
00736 compa=strncmp((local_p_all_par+loc)->name,"offy",4);
00737 if (compa==0) local_p_xs->offy=val;
00738 compa=strncmp((local_p_all_par+loc)->name,"flipx",5);
00739 if (compa==0) local_p_xs->flipx=val;
00740 compa=strncmp((local_p_all_par+loc)->name,"flipy",5);
00741 if (compa==0) local_p_xs->flipy=val;
00742 }