00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00019 #define _CRT_SECURE_NO_DEPRECATE
00020
00021 #include "yanera.h"
00022 #include "yanera_xml_output.h"
00023 #include "yanera_xml_util.h"
00024
00025 void yanera_write_xml(yanera_container *yanera)
00026 {
00027 short i, j, k, r;
00028 xmlDocPtr xml_doc;
00029 xmlDtdPtr xml_dtd;
00030 xmlNodePtr xml_root;
00031 xmlNodePtr xml_node;
00032 xmlNodePtr xml_section;
00033 xmlNodePtr xml_node_data;
00034 xmlNodePtr xml_node_resolution;
00035 xmlNodePtr xml_node_model;
00036 xmlNodePtr xml_node_layer;
00037 xmlNodePtr xml_node_repeat;
00038 xmlNodePtr xml_comment;
00039 yanera_layer *layer;
00040 char buf[80];
00041
00042
00043
00044
00045 xmlThrDefIndentTreeOutput(1);
00046
00047
00048
00049
00050 xml_doc = xmlNewDoc((unsigned char*)"1.0");
00051 if (xml_doc == NULL )
00052 {
00053 yanera_error("XML output document not created successfully", \
00054 __FILE__, __LINE__, yanera);
00055 }
00056
00057
00058
00059 xml_dtd = xmlCreateIntSubset(xml_doc, (unsigned char *)"yanera", \
00060 NULL, (unsigned char *)"yanera.dtd");
00061 if (xml_dtd == NULL )
00062 {
00063 yanera_error("XML DTD not created successfully", \
00064 __FILE__, __LINE__, yanera);
00065 }
00066
00067
00068
00069 xml_root = xmlNewDocNode(xml_doc, NULL, (unsigned char*)"yanera", NULL);
00070 xmlDocSetRootElement(xml_doc, xml_root);
00071 xml_comment = xmlNewComment((const xmlChar *)\
00072 " ====================================================================== ");
00073 xmlAddChild(xml_root,xml_comment);
00074
00075
00076
00077
00078 xml_section = xmlNewChild(xml_root, NULL, \
00079 (unsigned char*)"miscellaneous_section", \
00080 NULL);
00081
00082
00083
00084 memset(buf, '\0', 30);
00085 setYesNoBooleanFromString((char *)buf,yanera->misc.write_results);
00086 xml_node = xmlNewTextChild(xml_section, NULL, \
00087 (unsigned char*)"write_results", \
00088 (unsigned char*)buf);
00089
00090
00091
00092 memset(buf, '\0', 30);
00093 setYesNoBooleanFromString((char *)buf,yanera->misc.write_profile);
00094 xml_node = xmlNewTextChild(xml_section, NULL, \
00095 (unsigned char*)"write_profile", \
00096 (unsigned char*)buf);
00097
00098
00099
00100 memset(buf, '\0', 30);
00101 setYesNoBooleanFromString((char *)buf,yanera->misc.write_reflectivity);
00102 xml_node = xmlNewTextChild(xml_section, NULL, \
00103 (unsigned char*)"write_reflectivity", \
00104 (unsigned char*)buf);
00105
00106
00107
00108 memset(buf, '\0', 30);
00109 setYesNoBooleanFromString((char *)buf, yanera->misc.write_slabs);
00110 xml_node = xmlNewTextChild(xml_section, NULL, \
00111 (unsigned char*)"write_slabs", \
00112 (unsigned char*)buf);
00113
00114
00115
00116 memset(buf, '\0', 30);
00117 sprintf((char *)buf,"%g",yanera->misc.q_min);
00118 xml_node = xmlNewTextChild(xml_section, NULL, \
00119 (unsigned char*)"q_min", \
00120 (unsigned char*)buf);
00121
00122
00123
00124 memset(buf, '\0', 30);
00125 sprintf((char *)buf,"%g",yanera->misc.q_max);
00126 xml_node = xmlNewTextChild(xml_section, NULL, \
00127 (unsigned char*)"q_max", \
00128 (unsigned char*)buf);
00129
00130
00131
00132 memset(buf, '\0', 30);
00133 sprintf((char *)buf,"%hd",yanera->misc.q_num);
00134 xml_node = xmlNewTextChild(xml_section, NULL, \
00135 (unsigned char*)"q_num", \
00136 (unsigned char*)buf);
00137
00138
00139
00140 memset(buf, '\0', 30);
00141 sprintf((char *)buf,"%hd",yanera->misc.z_num);
00142 xml_node = xmlNewTextChild(xml_section, NULL, \
00143 (unsigned char*)"z_num", \
00144 (unsigned char*)buf);
00145
00146
00147
00148 memset(buf, '\0', 30);
00149 sprintf((char *)buf,"%g",yanera->misc.quadrature_error);
00150 xml_node = xmlNewTextChild(xml_section, NULL, \
00151 (unsigned char*)"quadrature_error", \
00152 (unsigned char*)buf);
00153
00154
00155
00156 memset(buf, '\0', 30);
00157 sprintf((char *)buf,"%g",yanera->misc.quadrature_thik);
00158 xml_node = xmlNewTextChild(xml_section, NULL, \
00159 (unsigned char*)"quadrature_thik", \
00160 (unsigned char*)buf);
00161
00162
00163
00164 memset(buf, '\0', 30);
00165 setYesNoBooleanFromString((char *)buf, yanera->misc.fit_do);
00166 xml_node = xmlNewTextChild(xml_section, NULL, \
00167 (unsigned char*)"fit_do", \
00168 (unsigned char*)buf);
00169
00170
00171
00172 memset(buf, '\0', 30);
00173 switch (yanera->misc.fit_weighting) {
00174 case WEIGHT_NONE:
00175 sprintf((char *)buf,"WEIGHT_NONE");
00176 break;
00177 case WEIGHT_R:
00178 sprintf((char *)buf,"WEIGHT_R");
00179 break;
00180 case WEIGHT_SQRT:
00181 sprintf((char *)buf,"WEIGHT_SQRT");
00182 break;
00183 case WEIGHT_DATA:
00184 sprintf((char *)buf,"WEIGHT_DATA");
00185 break;
00186 default:
00187 break;
00188 }
00189 xml_node = xmlNewTextChild(xml_section, NULL, \
00190 (unsigned char*)"fit_weighting", \
00191 (unsigned char*)buf);
00192
00193
00194
00195
00196 memset(buf, '\0', 30);
00197 sprintf((char *)buf,"%hd",yanera->misc.fit_iterations);
00198 xml_node = xmlNewTextChild(xml_section, NULL, \
00199 (unsigned char*)"fit_iterations", \
00200 (unsigned char*)buf);
00201
00202
00203
00204 memset(buf, '\0', 30);
00205 sprintf((char *)buf,"%hd",yanera->misc.fit_write_iterations);
00206 xml_node = xmlNewTextChild(xml_section, NULL, \
00207 (unsigned char*)"fit_write_iterations", \
00208 (unsigned char*)buf);
00209
00210
00211
00212 memset(buf, '\0', 30);
00213 switch (yanera->misc.fit_method) {
00214 case CONJUGATE_FR:
00215 sprintf((char *)buf,"CONJUGATE_FR");
00216 break;
00217 case CONJUGATE_PR:
00218 sprintf((char *)buf,"CONJUGATE_PR");
00219 break;
00220 case VECTOR_BFGS:
00221 sprintf((char *)buf,"VECTOR_BFGS");
00222 break;
00223 case STEEP_DESC:
00224 sprintf((char *)buf,"STEEP_DESC");
00225 break;
00226 case NMSIMPLEX:
00227 sprintf((char *)buf,"NMSIMPLEX");
00228 break;
00229 case SIMAN:
00230 sprintf((char *)buf,"SIMAN");
00231 break;
00232 case LMSDR:
00233 sprintf((char *)buf,"LMSDR");
00234 break;
00235 case LMDR:
00236 sprintf((char *)buf,"LMDR");
00237 break;
00238 #ifdef HAVE_OOL
00239 case OOL_SPG:
00240 sprintf((char *)buf,"OOL_SPG");
00241 break;
00242 case OOL_GENCAN:
00243 sprintf((char *)buf,"OOL_GENCAN");
00244 break;
00245 #endif
00246 case CLMSDR:
00247 sprintf((char *)buf,"CLMSDR");
00248 break;
00249 case CLMDR:
00250 sprintf((char *)buf,"CLMDR");
00251 break;
00252 #ifdef HAVE_LEVMAR
00253 case LEVMAR:
00254 sprintf((char *)buf,"LEVMAR");
00255 break;
00256 #endif
00257 default:
00258 break;
00259 }
00260 xml_node = xmlNewTextChild(xml_section, NULL, \
00261 (unsigned char*)"fit_method", \
00262 (unsigned char*)buf);
00263
00264 xml_comment = xmlNewComment((const xmlChar *) \
00265 " ====================================================================== ");
00266 xmlAddChild(xml_root,xml_comment);
00267
00268
00269
00270
00271 xml_section = xmlNewChild(xml_root, NULL, \
00272 (unsigned char*)"data_section", \
00273 NULL);
00274
00275 for (i=0; i<yanera->number_of_data; i++)
00276 {
00277
00278
00279
00280 xml_comment = xmlNewComment((const xmlChar *)" ===== ");
00281 xmlAddChild(xml_section, xml_comment);
00282
00283
00284
00285
00286 xml_node_data = xmlNewChild(xml_section, NULL, \
00287 (unsigned char*)"data", \
00288 NULL);
00289 memset(buf, '\0', 30);
00290 sprintf((char *)buf,"%s",yanera->data[i].data_id);
00291 xmlSetProp(xml_node_data, (unsigned char*)"data_id", \
00292 (unsigned char*)buf);
00293
00294 xml_node = xmlNewTextChild(xml_node_data, NULL, \
00295 (unsigned char*)"file_name", \
00296 (unsigned char*)yanera->data[i].file_name);
00297 xml_node_resolution = xmlNewChild(xml_node_data, NULL,
00298 (unsigned char*)"resolution",
00299 NULL);
00300
00301 memset(buf, '\0', 30);
00302 switch (yanera->data[i].resolution.type) {
00303 case RESOLUTION_NONE:
00304 sprintf((char *)buf,"RESOLUTION_NONE");
00305 break;
00306 case RESOLUTION_CONSTANT:
00307 sprintf((char *)buf,"RESOLUTION_CONSTANT");
00308 break;
00309 case RESOLUTION_RELATIVE:
00310 sprintf((char *)buf,"RESOLUTION_RELATIVE");
00311 break;
00312 case RESOLUTION_ARRAY_CONSTANT:
00313 sprintf((char *)buf,"RESOLUTION_ARRAY_CONSTANT");
00314 break;
00315 case RESOLUTION_ARRAY_RELATIVE:
00316 sprintf((char *)buf,"RESOLUTION_ARRAY_RELATIVE");
00317 break;
00318 default:
00319 break;
00320 }
00321 xml_node = xmlNewTextChild(xml_node_resolution, NULL, \
00322 (unsigned char*)"type", \
00323 (unsigned char*)buf);
00324 memset(buf, '\0', 30);
00325 if (yanera->data[i].resolution.value != NULL)
00326 {
00327 sprintf((char *)buf,"%g",yanera->data[i].resolution.value[0]);
00328 xml_node = xmlNewTextChild(xml_node_resolution, NULL, \
00329 (unsigned char*)"value", \
00330 (unsigned char*)buf);
00331 }
00332 else
00333 {
00334 xml_node = xmlNewTextChild(xml_node_resolution, NULL, \
00335 (unsigned char*)"value", \
00336 (unsigned char*)NULL);
00337 }
00338 xml_node = xmlNewTextChild(xml_node_resolution, NULL, \
00339 (unsigned char*)"file_name", \
00340 (unsigned char*)yanera->data[i].resolution.file_name);
00341
00342 }
00343
00344
00345
00346 xml_comment = xmlNewComment((const xmlChar *)" ===== ");
00347 xmlAddChild(xml_section,xml_comment);
00348
00349
00350
00351
00352
00353 xml_comment = xmlNewComment((const xmlChar *)\
00354 " ====================================================================== ");
00355 xmlAddChild(xml_root,xml_comment);
00356
00357
00358
00359
00360 xml_section = xmlNewChild(xml_root, NULL, \
00361 (unsigned char*)"model_section", \
00362 NULL);
00363
00364
00365
00366 xml_comment = xmlNewComment((const xmlChar *)" ===== ");
00367 xmlAddChild(xml_section, xml_comment);
00368
00369
00370
00371
00372 memset(buf, '\0', 30);
00373 switch (yanera->type) {
00374 case MODEL_LAYER:
00375 sprintf((char *)buf,"MODEL_LAYER");
00376 break;
00377 case MODEL_SLAB:
00378 sprintf((char *)buf,"MODEL_SLAB");
00379 break;
00380 case MODEL_COMPONENT:
00381 sprintf((char *)buf,"MODEL_COMPONENT");
00382 break;
00383 case MODEL_FUNCTION:
00384 sprintf((char *)buf,"MODEL_FUNCTION");
00385 break;
00386 default:
00387 break;
00388 }
00389 xml_node = xmlNewTextChild(xml_section, NULL, \
00390 (unsigned char*)"model_type", \
00391 (unsigned char*)buf);
00392
00393
00394
00395
00396 layer = yanera->components;
00397 if (layer != NULL)
00398 {
00399
00400
00401
00402 xml_comment = xmlNewComment((const xmlChar *)" ===== ");
00403 xmlAddChild(xml_section, xml_comment);
00404 }
00405 while (layer != NULL)
00406 {
00407 xml_node_layer = xmlNewChild(xml_section, NULL, \
00408 (unsigned char*)"component", NULL);
00409 xmlLayer(xml_node_layer, layer, yanera);
00410 layer = layer->next;
00411 };
00412
00413
00414
00415
00416 for (i=0; i<yanera->number_of_models; i++)
00417 {
00418
00419
00420
00421 xml_comment = xmlNewComment((const xmlChar *)" ===== ");
00422 xmlAddChild(xml_section, xml_comment);
00423 xml_node_model = xmlNewChild(xml_section, NULL, \
00424 (unsigned char*)"model", \
00425 NULL);
00426
00427 if (yanera->models_xml[i].data_idref != NULL)
00428 {
00429 xmlSetProp(xml_node_model, (unsigned char*)"data_idref", \
00430 (unsigned char*)yanera->models_xml[i].data_idref);
00431 }
00432
00433 if (yanera->models_xml[i].name != NULL)
00434 {
00435 xml_node = xmlNewTextChild(xml_node_model, NULL, \
00436 (unsigned char*)"name", \
00437 (unsigned char*)yanera->models_xml[i].name);
00438 }
00439 if (yanera->models_xml[i].polarized != POLARIZED_NONE)
00440 {
00441 memset(buf, '\0', 30);
00442 if (yanera->models_xml[i].polarized == POLARIZED_UP)
00443 { sprintf((char *)buf,"POLARIZED_UP"); }
00444 else if (yanera->models_xml[i].polarized == POLARIZED_DOWN)
00445 { sprintf((char *)buf,"POLARIZED_DOWN"); }
00446 else if (yanera->models_xml[i].polarized == POLARIZED_UNPOLARIZED)
00447 { sprintf((char *)buf,"POLARIZED_UNPOLARIZED"); }
00448 xml_node = xmlNewTextChild(xml_node_model, NULL, \
00449 (unsigned char*)"polarized", \
00450 (unsigned char*)buf);
00451 }
00452
00453 layer = yanera->models_xml[i].first_layer;
00454 while (layer != NULL)
00455 {
00456 switch (layer->type)
00457 {
00458 case LAYER_BULK:
00459 xml_node_layer = xmlNewChild(xml_node_model, NULL, \
00460 (unsigned char*)"bulk", NULL);
00461 xmlLayer(xml_node_layer, layer, yanera);
00462 layer = layer->next;
00463 break;
00464 case LAYER_LAYER:
00465 case LAYER_BOX:
00466 case LAYER_GAUSSIAN:
00467 case LAYER_FUNCTION:
00468 xml_node_layer = xmlNewChild(xml_node_model, NULL, \
00469 (unsigned char*)"layer", NULL);
00470 xmlLayer(xml_node_layer, layer, yanera);
00471 layer = layer->next;
00472 break;
00473 case LAYER_REPEAT:
00474
00475
00476
00477 xml_node_repeat = xmlNewChild(xml_node_model, NULL, \
00478 (unsigned char*)"repeat", NULL);
00479
00480
00481
00482
00483
00484 j = layer->repeat_flag;
00485 do {
00486 xml_node_layer = xmlNewChild(xml_node_repeat, NULL, \
00487 (unsigned char*)"layer", NULL);
00488 xmlLayer(xml_node_layer, layer, yanera);
00489 layer = layer->next;
00490 } while (j == layer->repeat_flag);
00491
00492
00493
00494
00495
00496
00497
00498
00499 r = 1;
00500 while (j < layer->repeat_flag)
00501 {
00502 k = layer->repeat_flag;
00503 do {
00504 layer = layer->next;
00505 } while (k == layer->repeat_flag);
00506 r = r + 1;
00507 };
00508 memset(buf, '\0', 30);
00509 sprintf((char *)buf, "%d", r);
00510 xmlSetProp(xml_node_repeat, \
00511 (unsigned char*)"number", (unsigned char *)buf);
00512 break;
00513 case LAYER_SUBSTRATE:
00514 xml_node_layer = xmlNewChild(xml_node_model, NULL, \
00515 (unsigned char*)"substrate", NULL);
00516 xmlLayer(xml_node_layer, layer, yanera);
00517 layer = layer->next;
00518 break;
00519 default:
00520 break;
00521 }
00522 }
00523
00524 if (yanera->models_xml[i].background != -1)
00525 {
00526 memset(buf, '\0', 30);
00527 sprintf((char *)buf,"%g", \
00528 yanera->parameters.p[yanera->models_xml[i].background]);
00529 xml_node = xmlNewTextChild(xml_node_model, NULL, \
00530 (unsigned char*)"background", \
00531 (unsigned char *)buf);
00532 memset(buf, '\0', 30);
00533 setYesNoBooleanFromString((char *)buf, \
00534 yanera->parameters.f[yanera->models_xml[i].background]);
00535 xmlSetProp(xml_node, (unsigned char*)"fix", (unsigned char *)buf);
00536
00537
00538 xmlMinMax(xml_node, yanera->models_xml[i].background, yanera);
00539 xmlParameterError(xml_node, yanera->models_xml[i].background, yanera);
00540 }
00541 }
00542
00543
00544
00545 xml_comment = xmlNewComment((const xmlChar *)" ===== ");
00546 xmlAddChild(xml_section,xml_comment);
00547
00548
00549
00550 xml_comment = xmlNewComment((const xmlChar *)\
00551 " ====================================================================== ");
00552 xmlAddChild(xml_root,xml_comment);
00553
00554
00555
00556 xmlSaveFormatFileEnc("result.xml", xml_doc, "ISO-8859-1", 1);
00557 xmlFreeDoc(xml_doc);
00558 xmlCleanupParser();
00559 return;
00560 }
00561
00562 void xmlLayer(xmlNodePtr xml_node_layer, \
00563 yanera_layer *layer, yanera_container *yanera)
00564 {
00565 xmlNodePtr xml_node;
00566 char buf[30];
00567 short i;
00568
00569 if (layer->layer_id != NULL)
00570 {
00571 xmlSetProp(xml_node_layer, (unsigned char*)"layer_id", \
00572 (unsigned char*)layer->layer_id);
00573 }
00574 if (layer->layer_idref != NULL)
00575 {
00576 xmlSetProp(xml_node_layer, (unsigned char*)"layer_idref", \
00577 (unsigned char*)layer->layer_idref);
00578 }
00579 if (layer->component_id != NULL)
00580 {
00581 xmlSetProp(xml_node_layer, (unsigned char*)"component_id", \
00582 (unsigned char*)layer->component_id);
00583 }
00584 if (layer->component_idref != NULL)
00585 {
00586 xmlSetProp(xml_node_layer, (unsigned char*)"component_idref", \
00587 (unsigned char*)layer->component_idref);
00588 }
00589
00590
00591
00592 if (layer->type == LAYER_BOX)
00593 {
00594 xml_node = xmlNewTextChild(xml_node_layer, NULL, \
00595 (unsigned char*)"type", \
00596 (unsigned char*)"box");
00597 }
00598 if (layer->type == LAYER_GAUSSIAN)
00599 {
00600 xml_node = xmlNewTextChild(xml_node_layer, NULL, \
00601 (unsigned char*)"type", \
00602 (unsigned char*)"gaussian");
00603 }
00604 if (layer->type == LAYER_FUNCTION)
00605 {
00606 xml_node = xmlNewTextChild(xml_node_layer, NULL, \
00607 (unsigned char*)"type", \
00608 (unsigned char*)"function");
00609 }
00610
00611
00612
00613 if (layer->name != NULL)
00614 {
00615 xml_node = xmlNewTextChild(xml_node_layer, NULL, \
00616 (unsigned char*)"name", \
00617 (unsigned char*)layer->name);
00618 }
00619
00620
00621
00622 if (layer->func != NULL)
00623 {
00624 xml_node = xmlNewTextChild(xml_node_layer, NULL, \
00625 (unsigned char*)"func", \
00626 (unsigned char*)layer->func);
00627 }
00628 if (layer->parm_names != NULL)
00629 {
00630 for(i=0; i<layer->number_of_parm; i++)
00631 {
00632 memset(buf, '\0', 30);
00633 sprintf(buf,"%g", yanera->parameters.p[layer->parm_values[i]]);
00634 xml_node = xmlNewTextChild(xml_node_layer, NULL, \
00635 (unsigned char*)"parm", \
00636 (unsigned char*)buf);
00637
00638 memset(buf, '\0', 30);
00639 sprintf((char *)buf,"%c",layer->parm_names[i]);
00640 xmlSetProp(xml_node, (unsigned char*)"name", \
00641 (unsigned char*)buf);
00642
00643 memset(buf, '\0', 30);
00644 setYesNoBooleanFromString((char *)buf, \
00645 yanera->parameters.f[layer->parm_values[i]]);
00646 xmlSetProp(xml_node, (unsigned char*)"fix", (unsigned char*)buf);
00647
00648
00649 xmlMinMax(xml_node, layer->parm_values[i], yanera);
00650 xmlParameterError(xml_node, layer->parm_values[i], yanera);
00651 }
00652 }
00653
00654
00655
00656 if (layer->thik != -1)
00657 {
00658 memset(buf, '\0', 30);
00659 if (layer->thik == -2)
00660 sprintf((char *)buf,"n/a");
00661 else
00662 sprintf(buf,"%g", yanera->parameters.p[layer->thik]);
00663 xml_node = xmlNewTextChild(xml_node_layer, NULL, \
00664 (unsigned char*)"thik", \
00665 (unsigned char*)buf);
00666 memset(buf, '\0', 30);
00667 if (layer->thik == -2)
00668 sprintf((char *)buf,"yes");
00669 else
00670 setYesNoBooleanFromString((char *)buf,yanera->parameters.f[layer->thik]);
00671 xmlSetProp(xml_node, (unsigned char*)"fix", (unsigned char*)buf);
00672
00673
00674 xmlMinMax(xml_node, layer->thik, yanera);
00675 xmlParameterError(xml_node, layer->thik, yanera);
00676 }
00677
00678
00679
00680 if (layer->sigz != -1)
00681 {
00682 memset(buf, '\0', 30);
00683 if (layer->sigz == -2)
00684 sprintf((char *)buf,"n/a");
00685 else
00686 sprintf((char *)buf,"%g", yanera->parameters.p[layer->sigz]);
00687 xml_node = xmlNewTextChild(xml_node_layer, NULL, \
00688 (unsigned char*)"sigz", \
00689 (unsigned char*)buf);
00690 memset(buf, '\0', 30);
00691 if (layer->sigz == -2)
00692 sprintf((char *)buf,"yes");
00693 else
00694 setYesNoBooleanFromString((char *)buf,yanera->parameters.f[layer->sigz]);
00695 xmlSetProp(xml_node, (unsigned char*)"fix", (unsigned char*)buf);
00696
00697
00698 xmlMinMax(xml_node, layer->sigz, yanera);
00699 xmlParameterError(xml_node, layer->sigz, yanera);
00700 }
00701
00702
00703
00704 if (layer->cntr != -1)
00705 {
00706 memset(buf, '\0', 30);
00707 if (layer->cntr == -2)
00708 sprintf((char *)buf,"n/a");
00709 else
00710 sprintf((char *)buf,"%g", yanera->parameters.p[layer->cntr]);
00711 xml_node = xmlNewTextChild(xml_node_layer, NULL, \
00712 (unsigned char*)"cntr", \
00713 (unsigned char*)buf);
00714 memset(buf, '\0', 30);
00715 if (layer->cntr == -2)
00716 sprintf((char *)buf,"yes");
00717 else
00718 setYesNoBooleanFromString((char *)buf,yanera->parameters.f[layer->cntr]);
00719 xmlSetProp(xml_node, (unsigned char*)"fix", (unsigned char*)buf);
00720
00721
00722 xmlMinMax(xml_node, layer->cntr, yanera);
00723 xmlParameterError(xml_node, layer->cntr, yanera);
00724 }
00725
00726
00727
00728 if (layer->rsld != -1)
00729 {
00730 memset(buf, '\0', 30);
00731 if (layer->rsld == -2)
00732 sprintf((char *)buf,"n/a");
00733 else
00734 sprintf(buf,"%g", yanera->parameters.p[layer->rsld]);
00735 xml_node = xmlNewTextChild(xml_node_layer, NULL, \
00736 (unsigned char*)"rsld", \
00737 (unsigned char*)buf);
00738 memset(buf, '\0', 30);
00739 if (layer->rsld == -2)
00740 sprintf((char *)buf,"yes");
00741 else
00742 setYesNoBooleanFromString((char *)buf,yanera->parameters.f[layer->rsld]);
00743 xmlSetProp(xml_node, (unsigned char*)"fix", (unsigned char*)buf);
00744
00745
00746 xmlMinMax(xml_node, layer->rsld, yanera);
00747 xmlParameterError(xml_node, layer->rsld, yanera);
00748 }
00749
00750
00751
00752 if (layer->isld != -1)
00753 {
00754 memset(buf, '\0', 30);
00755 if (layer->isld == -2)
00756 sprintf((char *)buf,"n/a");
00757 else
00758 sprintf(buf,"%g", yanera->parameters.p[layer->isld]);
00759 xml_node = xmlNewTextChild(xml_node_layer, NULL, \
00760 (unsigned char*)"isld", \
00761 (unsigned char*)buf);
00762 memset(buf, '\0', 30);
00763 if (layer->isld == -2)
00764 sprintf((char *)buf,"yes");
00765 else
00766 setYesNoBooleanFromString((char *)buf,yanera->parameters.f[layer->isld]);
00767 xmlSetProp(xml_node, (unsigned char*)"fix", (unsigned char*)buf);
00768
00769
00770 xmlMinMax(xml_node, layer->isld, yanera);
00771 xmlParameterError(xml_node, layer->isld, yanera);
00772 }
00773
00774
00775
00776 if (layer->rmag != -1)
00777 {
00778 memset(buf, '\0', 30);
00779 if (layer->rmag == -2)
00780 sprintf((char *)buf,"n/a");
00781 else
00782 sprintf(buf,"%g", yanera->parameters.p[layer->rmag]);
00783 xml_node = xmlNewTextChild(xml_node_layer, NULL, \
00784 (unsigned char*)"rmag", \
00785 (unsigned char*)buf);
00786 memset(buf, '\0', 30);
00787 if (layer->rmag == -2)
00788 sprintf((char *)buf,"yes");
00789 else
00790 setYesNoBooleanFromString((char *)buf,yanera->parameters.f[layer->rmag]);
00791 xmlSetProp(xml_node, (unsigned char*)"fix", (unsigned char*)buf);
00792
00793
00794 xmlMinMax(xml_node, layer->rmag, yanera);
00795 xmlParameterError(xml_node, layer->rmag, yanera);
00796 }
00797
00798
00799
00800 if (layer->include_flag == NO)
00801 {
00802
00803 xml_node = xmlNewTextChild(xml_node_layer, NULL, \
00804 (unsigned char*)"include", \
00805 (unsigned char*)"no");
00806 }
00807
00808 return;
00809 }
00810
00811 void xmlMinMax(xmlNodePtr xml_node_layer_item, short parm_index, \
00812 yanera_container *yanera)
00813 {
00814 xmlNodePtr xml_node;
00815 char buf[30];
00816
00817 if ((yanera->parameters.con[parm_index] == CONSTRAIN_MIN) ||
00818 (yanera->parameters.con[parm_index] == CONSTRAIN_BOTH))
00819 {
00820 memset(buf, '\0', 30);
00821 sprintf(buf,"%g", yanera->parameters.min[parm_index]);
00822 xml_node = xmlNewTextChild(xml_node_layer_item, NULL, \
00823 (unsigned char*)"min", \
00824 (unsigned char*)buf);
00825 }
00826 if ((yanera->parameters.con[parm_index] == CONSTRAIN_MAX) ||
00827 (yanera->parameters.con[parm_index] == CONSTRAIN_BOTH))
00828 {
00829 memset(buf, '\0', 30);
00830 sprintf(buf,"%g", yanera->parameters.max[parm_index]);
00831 xml_node = xmlNewTextChild(xml_node_layer_item, NULL, \
00832 (unsigned char*)"max", \
00833 (unsigned char*)buf);
00834 }
00835
00836 return;
00837 }
00838
00839 void xmlParameterError(xmlNodePtr xml_node_layer_item, short parm_index, \
00840 yanera_container *yanera)
00841 {
00842 xmlNodePtr xml_node;
00843 char buf[30];
00844
00845 if ((yanera->misc.fit_do == YES) &&
00846 (parm_index >= 0))
00847 {
00848 memset(buf, '\0', 30);
00849 sprintf(buf,"%g", yanera->parameters.tmp[parm_index]);
00850 xml_node = xmlNewTextChild(xml_node_layer_item, NULL, \
00851 (unsigned char*)"err", \
00852 (unsigned char*)buf);
00853 }
00854 return;
00855 }