/* XND_DOC.D fichier cree en novembre 90 */ /* revision novembre 91, fevrier 92, mai 92, novembre 92 */ /* correction pour 1.10 sept 95, nov 95 */ Le programme XND a pour but l'affinement de structures cristallogra- phiques a partir de donnees obtenues sur des echantillons pulverulents selon la methode proposee par Rietveld (J. Appl. Cryst., 1969). Il a ete ecrit pour faciliter la resolution de phenomenes physico-chimique qui con- duisent a l'enregistrement d'un grand nombre de diagrammes (transitions de phases, mesures en temps reel, ...). La premiere description en a ete publiee en 1990 au congres de Toulouse : J.-F.Berar, I.U.Cr. Sat. Meeting "Powder Diffractometry", Toulouse, July 1990 "Reduction of the number of parameters in real time Rietveld refine- ments." I - METHODE II - DEFINITIONS III - FICHIER COORDONNEES IV - FICHIER LISTING ET CODE DE FIN D'EXECUTION V - FICHIER DATA VI - FICHIER DIFFUSION VII - FICHIER SYMETRIE VIII - FICHIERS TEMPORAIRES IX - FICHIERS EXEMPLES X - FICHIERS HKL ET PLG XI - EXEMPLES DE RELATIONS ENTRE VARIABLES, CODES D'AFFINEMENT XII - CYCLAGE XIII - MESSAGES D'ERREURS XIV - INSTALLATION - VERSION I - METHODE L'enregistrement de donnees de diffraction en temps reel conduit a un grand nombre de diagrammes pouvant avoir ayant chacun une statistique assez faible, cependant les donnees structurales entre ces diagrammes ne sont pas independantes. La prise en compte de ce fait amene a decrire les grandeurs cristallographiques en fonction d'un parametre externe et a affiner non seulement leur valeur mais aussi leur dependance par rapport a ce parametre externe appele 'Temps' par la suite. Ce programme est donc capable de minimiser sur plusieurs diagrammes ou experiences un ensemble de parametres cristallographiques en utilisant leur developpement en fonction du temps. Lorsque le developpement ne contient qu'un terme constant, on est ramene a la situation classique. Le programme minimise la somme S : S = Sigma(m) Sigma(n) Sigma(i) (Wmdi (Yobs,mdi - Ycal,mdi)^2) + Penal ou la somme sur m correspond aux diverses experiences contenant chacune n diagrammes et i points de mesure des intensites Yobs de poids W. Les intensites Ycal,i sont obtenus a partir de la relation : Ycal,i = Sigma(p) Sigma(hkl) Ip,hkl Prof(theta(i)-theta(p,hkl)) + Yfond,i ou Ip,hkl represente l'intensite de la reflection hkl pour la phase p en incluant les termes correctifs des fonctions instrumentales, d'orientations, les facteurs d'echelles et Prof est une fonction de profil dont les parametres largeurs, assymetrie, forme dependent de la raie p,hkl et aussi de l'experience m,n. Le profil de chaque raie est calcule sur un domaine minimal de 2 largeurs a mi_hauteur, il s'etend jusqu'a ce que la valeur calculee deviennent inferieur a Eps_profil multiplie par le sigma du point significatif le plus faible du diagramme. Yfond,i est la valeur du fond continu pour le point i. Le terme penal represente une fonction de penalisation qui est calculee sur les distances (ou les angles) pour chaque phase aux temps t. Penal = Sigma(p) Sigma(t) Sigma(d) (W (d-do)2) Plusieurs phases peuvent coexister, certaines de structure inconnue peuvent etre traites en intensites integrees, d'autres amorphes peuvent aussi etre modelisee par un fond continu avec facteur d'echelle. Plusieurs longueurs d'ondes peuvent coexister sur chaque diagramme. Il est aussi possible d'utiliser simultanement des donnees prises dans des conditions differentes. Les corrections due a la diffusion anomale sont possibles, celles due a la diffraction magnetiques des neutrons sont pre- vues. Les valeurs du profil sont calcules pour les angles reels, ce qui per- met l'utilisation directes de donnees mesurees avec des compteurs lineaires tangents au cercle de focalisation ou a pas variables. Il est possible d'utiliser des diagrammes partiels pour certaines valeurs du temps. Ce programme peut etre utilise sur micro-ordinateur (compatible PC...), un utilitaire de visualisation permet l'affichage sur ecran et le dessin sur table tracante (HP) des divers diagrammes. Une version Sun de cet utilitaire graphique existe. Remarques : les raies sont generees automatiquement sur l'espace angu- laire des diagrammes, le programme ne verra pas des raies tres larges dont le centre est eloigne de plus d'un degre des limites du diagramme; les raies trop faibles pour etre visibles ne sont pas indiquees sauf specifica- tion contraire. Les indices sont stockes en caracteres ( -127 a +127 sont leur limite). II - DEFINITIONS Toutes les variables sont exprimees au moyen d'une combinaison lineaire de parametres developpes en serie en fonction du Temps. Leur definition suppose donc de connaitre la dimension de cette relation lineaire ( 1 sauf specification contraire pour creer des motifs atomiques linaires ou plans, ou des substitutions multiples sur des sites, et le nom- bre de termes des developpemnts en serie : 1 pour une constante (variable classique), 2 dans le cas d'un developpement lineaire... Dans le cas de combinaison lineaire, des parametres internes sont crees pour calculer les variation des variables (voir IX Exemples). Par rapport d'autres programmes, il comporte une redefinition des parametres de profil afin de mieux separer les causes d'elargissements instrumentales ou physiques. Aussi le programme ne reconnait qu'un seul type de fonctions de profils : des Voigt exprimees a partir des largeurs de leurs composantes Lorentzienne et Gaussienne. Plusieurs dependances angu- laires ont ete introduites pour representer les pricipales causes phy- siques, la convolution de ces largeurs permet d'arriver au profil global. Une representation interne approchee en pseudoVoigt (David, J. Appl. Cryst. 1986) est utilisable. L'assymetrie des profils est traitee par une fonction globale ( 1 + a . H1(dt/w) + b . H3(dt/w) ) , ou les coefficients a et b sont la somme de coefficients ayant diverses dependances angulaires et H1, H3 les fonctions d'Hermites impaires dont les polynomes sont de degre 1 et 3 (Berar, Baldinozzi, J. Appl. Cryst. 1993) Les fonctions d'orientations preferentielles et de profils des phases utilisent un developpement sur la base de polynomes de Legendre d'ordre pair. Pour chaque polynome, la position de l'axe est definie par ses angles : teta avec z, phi sa projection avec x dans un repere (x, y=b, z=c*). Ces polynomes sont ortogonaux quand ils ont le meme axe. Le nombre d'harmoniques spheriques independantes est limite, dans les ordres superieurs il peut etre necessaire d'introduire plusieurs directions equivalentes pour respecter la symetrie. 0 : P0 = 1.0 (existe en profil seulement, equivaut au facteur d'echelle) 1 : P2 = (3 z2-1)/2 2 : P4 = (35 z4 - 30 z2 + 3)/8 3 : P6 = (231 z6 -315 z4 + 105 z2 -5)/16 4 : P8 = (6435 z8 -12012 z6 + 6930 z4 - 1260 z2 + 35)/128 Le traitement de phase magnetique ou incommensurable est prevu: le programme genere alors des pseudo-phases correspondants aux raies mag- netiques, aux satellites... Les branches non valides ou non acheves du programme engendrent un message d'avertissement ou d'erreur, les intructions indiquees 'reserve' correspondent a des branches non encore valides ou simplement prevues. III - FICHIER COORDONNEES Le programme utilise un fichier contenant les coordonnees dont le nom est passe en argument sur la ligne de commande, l'option '-s' passee en premier argument interdit l'ecriture d'un resume sur la sortie standart. Ce fichier fournit toute l'information necessaire a l'execution, son contenu est reproduit entierement et dans le meme ordre sur le listing. Il se compose de 6 sections : 1 / entete, 2 / tables de symetrie (facultative), 3 / tables de diffusion anomale (facultative) 4 / tables de diffusion (facultative) 5 / experiences 6 / phases 7 / parametres Remarques : - les variables affinables sont introduits par groupe, a l'interieur du quel tous les parametres sont developpes avec une meme dimension au meme ordre. A la lecture ce groupe commence par la lecture de l'ordre du developpement, un ordre precede du signe moins indique une dependance a plusieurs dimensions, on doit alors preciser ce nombre (>1). - chaque variable affinable est repere dans cette note par '*', dans le fichier reel il se compose de deux ou trois champs : sa valeur , son code : n<=0 non affine, 1 a 9 : affine et independant, n>= 10 parametre commun a plusieurs variables sa projection sur ce parametre commun si n != 0,+-1...,+-9. le signe '-' permet de bloquer un parametre, les codes 1 a 9 sont equivalents, l'existence de plusieurs valeurs possibles autorise le blo- quage automatique de certaines familles (profil, coordonnees ...) en alter- nance (voir valid_ref). Le caractere qui suit ce code est ignore, il peut donc etre utilise par un editeur. - cette structure est repete pour chaque dimension et chaque ordre du developpement (cf 5.3). - les noms (fichiers, titres ... sauf espece atomique) commencent avec le premier caractere significatif et ils se terminent avec le changement de ligne ('0), ils sont limites a 60 caracteres et marques ci-dessous avec un '%', ils doivent respecter les conventions du systeme d'exploitation (che- min, majuscules, espaces...). - un separateur (espace, tabulation, ligne...) est necessaire entre les divers nombres, ils doivent etre ecrits meme si ils sont nuls (les lectures de ce fichier ne sont pas formatees, les changements de lignes servent seulement a faciliter la lecture. - les identificateurs sont precedes de d'un code 'c','d','f','s','*' indicant la nature de l'argument ( caractere, decimal, flottant, string, param) et une eventuelle longueur. Les arguments conditionels sont precedes de '@'. Le groupe '*@*' est utilise pour ne pas repeter la structure com- plete des parametres (cf 5.2/5.3). - le fichier source peut contenir des lignes de commentaires placees au debut des structures de variables. Elles commencent par un diese '#', elles seront reproduite dans le fichier new. Les endroits ou elles sont autorises sont precises ci-dessous. Description du fichier des coordonnees ou de commande: 1 / s titre% s list_name% nom du fichier sortie d ncycle nb de cycle, si ce nb est negatif, definition de tests internes d nl_sym nb de table de symetries a lire d nl_ano nb de table de diffusions anomales a lire d nl_dif nb de table de diffusions a lire d n_manip nb d'experiences independantes d n_phase nb de phases f eps_stop arret si deplacement/sigma < eps_stop f eps_prof conditionne la largeur des profils , qui sont calcules pour: valeur < esp_prof*sig_min. Typiquement 1. Une valeur tres faible augmente la zone d'influence des raies. Cette valeur sert aussi a rejeter les raies eteintes ou trop faibles qui sont elliminees du fichier hkl. f stabilise deplacement effectif reduit a abs(stab) d methode 0 : moindre carre standart, +1 : minimisation lineaire, +2 : ponderation selon les y calc et non les poids obs +4 : (prevu pour tenir compte des correlations locales) (reserve) +8 : (n'utilise que les points hors fond_continu) (reserve) d back_ground 0 : par interpolation +1 : par spline sinon interpolation simple +2 : si genere incoherent ajoute au fond sinon a ical (reserve) +4 : impression incoherent si genere (reserve) d profil 0 : pseudo_voigt 1 : voigt d assym_max les asymetries utilisent 0, 1 ... 3 fonctions d ordre_max dans les developpements (controle des lectures) d valid_ref ce parametre permet d'alterner des variables a affiner en cas de fortes correlations ou de grandes dimensions 0 : interpretation standart des code_word 2-8 : seuls seront affines les variables dont les codes valent 1 ou sont compris entre 10 et 199. Pour les codes 2 a 9, on affine ceux tel que (code - 2) modulo valid_ref = (1 + prt_new) modulo valid_ref Pour les codes 200 a 999, on affine ceux tel que (code/100 - 2) mod valid_ref = (1 + prt_new) mod valid_ref voir Exemple. (XI). d prt_sym 0 : pas d'impression des operations de symetries 1 : lues seulement +2 : y compris celles lues sur fichier standart d prt_dif 0 : pas d'impression des facteurs de diffusion 1 : lues seulement +2 : y compris celles lues fichier standart d prt_cor 0 : pas d'impression de la matrice des correlations 1 : la matrice entiere 2..9 : elements au dessus de 20..90% d prt_new <=0 : pas d'impression n : ecrit un fichier coordonne actualise n+1 dont le nom doit etre different du fichier de depart @s new_name% nom du fichier si prt_new != 0 d prt_hkl <=0 : pas d'impression 1 : imprime au dernier cycle les hkl 2 : + les hkl negligeables (dans le listing) 3 : + les hkl nuls (dans le listing) 103 : + les hkl dans le listing @s hkl_name% nul nom du fichier si prt_hkl != 0 d prt_plg <=0 : pas d'impression 1 : imprime au dernier cycle le profil +2: pas de header +4: ajoute une ligne 999.9 apres chaque diagramme +8: ajoute un ';' entre chaque champ @s prof_name% nom du fichier si prt != 0 ................. en mode test ncycle < 0 des lectures complementaires peuvent apparaitre ici. d disk_dy_dp 0 : dimensions auto de la table Y et derivees n : dimension en memoire d disk_data 0 : fichier binaire data temporaire 1 : sur fichier conserve a la fin de l'execution 2 : lit ce fichier au depart 3 : lit et conserve @s data_name% nom du fichier binaire data si disk_data !=0 d disk_path 0 : chemins standarts sinon @s path_name% +1 : lecture du chemin vers fichier sym et dif @s temp_name% +2 : lecture du chemin pour les fichiers temporaires 2 / @ les nl_sym table de sym a lire 2.1 / s nom identificateur chaine sans espace commencant par le reseau de bravais : P, I, F, A, B, C, R ( voir remarque sur le fichier SYM pour les axes Rhombo, le reseau effectif y est P) un identificateur commencant par '*' est reserve au groupe complementaire intervenant dans les phases modulees. @s commentaire eventuel jusqu'a la fin de la ligne c reseau C Cubique Q Quadratique H Hexagonal ( 6/m ou 6/mmm) R Trigonal sur axe hexagonal (-3 ou -3m) T Trigonal (axes rhomboedriques) O Orthorhombique M Monoclinique axe b N Monoclinique axe c L Monoclinique axe a A Anortic (triclinique) * de nouveau si complement pour modulation d holoedrie 0 non_holoedre 1 holoedre ( classe de Laue ) dimension si complement pou modulation d inversion 0 (x, y, z) 1 (x, y, z ) + (-x, -y, -z) 0 si complement pour modulation d nb_op nombre d'operations a lire s% ops operations ecrites sous la forme x,y,z; x+1/2,y+2/3,-z separees par ';' ou '0 meme notation pour la partie complementaire en modulation avec la lettre x : -x+1/4 inverse le vecteur et dephasage 3 / @ les nl_ano table de diffusion anomale a lire c6 nom FE ou FE2+ d tot nb de longueur d'onde ou il faut corriger f lambda pour chaque lambda ces trois valeurs f f_prime f f_second @f lambda ..... la correction est appliquee si la difference entre lambda est inferieure a 0.0002 A (constante EPSILON_ANOMAL) 4 / @ les nl_dif table de diffusion a lire c6 nom 0FE, 57FE pour neutrons f val longueur c6 nom FE,FE2+ pour donnees X selon TIC IV p99, f val 9 coefficcients f ... c6 nom *FE,*FE2+ donnees par table interpolation d tot nb de points f ds pas f val valeur pour s =0, ds, 2*ds, .... f ... c6 nom (reserve pour)_FE pour donnees magnetiques (interpolation) d tot nb de points de la table interpolation f ds pas f val valeur pour s =0, ds, 2*ds, .... f ... c6 nom (reserve)@FE pour diffusion incoherente RX (interpolation) d tot nb de points de la table interpolation f ds pas f val valeur pour s =0, ds, 2*ds, .... f ... c6 nom (reserve pour)&FE pour diffusion incoherente RX (table hadju) d tot nb de points de la table interpolation f ds pas f val valeur pour s =0, ds, 2*ds, .... f ... c6 nom $FE pour diffusion incoherente neutrons (interpolation) d tot nb de points de la table interpolation f ds pas f val valeur pour s =0, ds, 2*ds, .... f ... 5 / les n_manip (experiences) a lire # commentaire facultatif d nature 0 X sur poudre 1 Neutrons 2 X avec diffusion anomale 3 Neutrons, structure magnetique (reserve pour) +8 (reserve) monocristaux profil th2th d techn 0 Reflexion (incidence mobile theta) 1 reflexion (incidence mobile assym) 2 reflexion (lineaire) 3 reflexion (banane) 4 reserve pour transmission d n_diag nb de diagrammes d fichier type des fichiers, voir IV pour leur structure 0 pas de fichier, creation de diagrammes avec bruit Poiss. 1 2theta, i 2 theta, 2theta, i 3 2theta, i, w 4 theta, 2theta, i , 10 1 colonne, pas fixe 11 8 colonnes, pas fixe 12 10 colonnes,pas fixe 13-14 10 col+nb compteurs 100-199 multi-colonnes avec sauts 1000-1999 =+w 20 multiple ILL D1B, D20 21 multiple LURE, ECP (XDMI) 50 (reserve) hkl Fo So 51 (reserve) hkl Io So d n_lambda nb de lambda d n_back nb de points du fond continu f temp_orig pour le developpement des parametres instrumentaux s% titre 5.1 / selon le type de fichier 5.11/ cas 0 : creation n_diag fois f temp valeur du parametre f dtheta0 f pas f dthetaf 5.12/ cas 20, 21 : fichiers multiples d n_pts nb de points : controle si disk_data = lecture binaire f tmin valeur de depart du parametre a lire d cumul 1 ou somme de cumul diagrammes successifs d skip 0 ou nombre de diagrammes a sauter entre chaque lecture d numvar numero du parametre de controle (cf IV) d mono 0 ou valeur de renormalisation du moniteur s% nom_fichier ascii contenant les data 5.13/ sinon n_diag fois f temp valeur du parametre d n_pts nb de points : controle si disk_data = lecture binaire s% nom_fichier ascii contenant les data 5.2/ # commentaire facultatif n_lambda fois d o_lambda ordre du developpement @* longueur parametre ordre0 @* longueur parametre ordre1 ... *@* intensite parametre *@* WlTm largeur composante lorentz * fabs(tan(theta)-t_mono) *@* WgTm largeur composante gauss * (tan(theta)-t_mono) : ces 2 largueurs correspondent au 'u' classique. 5.3 / # commentaire facultatif d o_back ordre du developpement du fond continu @d d_back si o_back est negatif on lit la dimension du parametre n_back fois f back_pos 2theta du point ou le fond est defini @* back_val parametre ordre0 @* back_val parametre ordre1 ..... f back_pos 2theta @* back_val parametre ordre0 @* back_val parametre ordre1 ..... 5.4/ # commentaire facultatif d o_reglage ordre du developpement *@* zero_2th en degre 2theta *@* polar composante polarisee perpandiculaire(N=0, Rx=1 ou cos^2(2theta_mono), Syn=0) *@* t_mono tangente du minimum distribution spectrale ( -v/2u) *@* sEclair au dessous, intensite corrigee de l'eclairement : sin(theta)/sEclair si techn (5.0) est non nul : *@* zero_th decallage theta/2theta ou angle en incidence fixe *@* absor techn >=4 5.5 / # commentaire facultatif d o_instru ordre du developpement *@* Wl0 largeur composante lorentz constante *@* Wg0 largeur composante gauss constante (= w - (v/2u)^2) *@* Wl_T2 largeur composante lorentz : 1/tan(2theta) *@* Wg_T2 largeur composante gauss : 1/tan(2theta) 5.6 / selon max_assym # commentaire facultatif d o_instru ordre du developpement max_assym fois le groupe suivant *@* A_T2 assymetrie atan : 1/tan(2theta) *@* A_T assymetrie atan : 1/tan(theta) *@* AS assymetrie atan : sin(2theta) ......... 6 / les n_phase phases a lire # commentaire facultatif d nb_hkl nombre hkl a lire, 0 = genere, -1 amorphe (reserve pour), -2 RaiesParasites -3 QuasiCristalCubique -4 magnetique -5 modulation d n_transit nb de transition de phase dans le facteur d'echelle f temp_orig dans les developpements de la phase %s titre # commentaire facultatif d o_ech ordre du developpement du facteur d'echelle *@* ech facteur d'echelle *@* bg B global 6.1 / si n_transit > 0 n_transit elements # commentaire facultatif d o_transit ordre du developpement *@* T_c tel que : ech = ech * exp(u)/(exp(u)+exp(-u)) *@* T_a avec : u = signe(T-T_c) * T_a * abs(T-T_C)^expo *@* expo 6.2 / # commentaire facultatif si nb_hkl >= 0 ou -4 ou -5 s nom_sym identificateur declare au &2 ou dans le fichier sym d n_orien nb fonctions pour orientation preferentielle d n_prof nb fonctions pour profil et assymetrie d nb_atom nombre d'atomes independants d nb_bloc nombre de blocs rigides d incohrent code pour diffus (reserve pour) d nb_bond nombre de temps pour calcul des contraintes # commentaire facultatif d o_maille ordre du developpement *@* centrage *@* a *@* b *@* c *@* alpha *@* beta *@* gamma 6.21/ ..... (projet) si la phase a ete declaree magnetique ou modulee on intercale a ce niveau les declarations qui permettent de construire cette phase modulee: 6.211/ # commentaire facultatif d dim nb de vecteurs de modulation d nature 0 : incommensurable (integration par defaut) >=1 : comensurable d'ordre nature <=-1 : incommensurable avec -nature pts d'integration d nb_sat nb de satellites a generer y compris la structure de base f t_org pour les struct comensurables, t de la section d'origine 6.212/ les groupes d'indices des satellites dim * n_sat valeurs d n_hkl 0 (genere) ou nb de hkl a lire d hkl_sat indices complementaires de la famille de satellites 6.213/ nom du groupe complementaire de symetrie s nom_sym identificateur declare au &2 ou dans le fichier sym 6.214/ # commentaire facultatif @ les dim vecteurs de modulation d o_vect *@* x_vect *@* y_vect *@* z_vect 6.22 / les orientations preferentielles, deux cas n_orien positif, les fonctions sont communes a touts les experiences n_orien negatif, il y a n_orien fonction par experiences, il faut donc en lire n_orien * n_manip 6.221 / les fonctions de definitions # commentaire facultatif @ si n_orien > 0 d c_orien les n_orien numero des fonctions utilises d ... @ si n_orien < 0 d c_orien les n_orien*n_manip numero des fonctions utilises d ... 6.222 / les coefficients # commentaire facultatif d o_orien ordre du developpement n_orien(*n_manip) fois le groupe suivant *@* coef coefficient de la premiere fonction *@* teta orientation de la premiere fonction *@* phi orientation de la premiere fonction *@* coef.. ... 6.23 / les fonctions de profils 6.231 / les fonctions de definitions # commentaire facultatif @ n_prof > 0 d c_prof les n_prof numero des fonctions utilises d ... 6.232 / les coefficients pour le profil # commentaire facultatif d o_prof ordre du developpement n_prof fois le groupe suivant ou chaque terme est multiplie par la valeur de la fonction *@* Wl_C largeur composante lorentz : / cos(theta) *@* Wg_C largeur composante gauss : / cos(theta) *@* WlT largeur composante lorentz : * tan(theta) *@* WgT largeur composante gauss : * tan(theta) *@* teta orientation de l'axe *@* phi orientation de l'axe 6.234 / les coefficients pour l'assymetrie # commentaire facultatif d o_prof ordre du developpement n_prof*max_assym fois le groupe suivant ou chaque terme est multiplie par la valeur de la fonction la boucle sur max_assym est interne vis a vis de n_prof *@* A0 assymetrie (constante) *@* AT assymetrie : * tan(theta) 6.24 / les atomes # commentaire facultatif @ si nb_atom > 0 c7 nom identificateur c7 espece nom longueur ou facteur dif d nature 0 : atome simple B_isotrope +1 : B_anisotrope +2 : Avec moment magnetique (reserve pour) +4, 8, 12, 16 : Avec modulation ordre 1, 2, 3, 4... # commentaire facultatif d o_atom ordre du developpement *@* X *@* Y... Z, T, puis selon nature dans l'ordre des codes de nature *@* B ou par exemple *@* B11... B22, B33, B12, B13, B23 *@* B... Kx, Ky, Kz *@* B11... B22, B33, B12, B13, B23, Kx, Ky, Kz *@* B... A_x, A_y, A_z, P_x, P_y, P_z, A_t, P_t modulation A sin (2 pi ( t + P )) 6.25 / les blocs rigides # commentaire facultatif @ les nb_blocs d o_bloc *@* x *@* y *@* z *@* teta *@* phi *@* psi 6.251/ puis pour chaque bloc d n_atom les n_atom du bloc 6.252/ # commentaire facultatif c7 nom identificateur c7 espece nom longueur ou facteur dif d nature 0 : B_isotrope 1 : B_anisotrope 2 : B_isotrope magnetique 3 : B_anisotrope magnetique # commentaire facultatif d o_atom ordre du developpement *@* X dans le repere ortho du bloc *@* Y... Z, T, puis selon nature *@* B *@* B11... B22, B33, B12, B13, B23 *@* B... K1, K2, K3 *@* B11... B22, B33, B12, B13, B23, K1, K2, K3 6.252/ bloc suivant .... 6.26/ # commentaire facultatif @ si nb_hkl > 0 et n=atom!=0 : nb_hkl groupes d o_int 0 si n_atom == 0 ou ordre des intensites d h d k d l *@* int intensites : F^2, ces valeurs ne sont pas corrigees d h k l de Lorentz-Polar et de la multiplicite : un groupe est cependant necessaire (P1 possible) on peut introduire directement les valeurs du fichier hkl il y a cependant une legere difference dans les deux modes de calcul. Cette operation peut etre automatisee avec le programme utilitaire xhkl2k ou ce bloc est identifie par les commentaires #BEGINHKL2H et #ENDHKL2K. En cas de phase modulee, on doit relire un bloc 6.26 pour chaque groupe de satellite ou n_hkl est non nul. 6.27 / ..... (projet) # commentaire facultatif @ si nb_dif > 0 : nb_dif groupes d o_int ordre d h d k d l *@* int intensites hors corrections instrumentales *@* wl largeur lorentz d h k l .... 6.28/ les distances interatomiques et leur contraintes # commentaire facultatif @ si nb_bond > 0 d nb_dist nb de parametres de distances d nb_angl nb de parametres angulaires f temps ou est calcule le systeme de contrainte @f temps nb_bond fois 6.281/ # commentaire facultatif @ nb_dist fois d d_coord f sigma ponderation du systeme de contrainte # commentaire facultatif d o_dist ordre du developpement *@* dist @ d_coord fois c7 nom_at0 distance entre At0 et sym (At1) c7 nom_at1 s% sym chaine du type 1+x,y-1/2,-z 6.282/ .... (projet) @ nb_angl fois d a_coord f sigma ponderation du systeme de contrainte d o_angl ordre du developpement *@* angl @ a_coord fois c7 nom_at0 sommet c7 nom_at1 extremite = sym (At1) s% sym1 c7 nom_at2 extremite = sym (At2) s% sym2 6.3 / si nb_hkl == -1 ( amorphe, projet non affinable) d nb_dist nombre de diffusion 6.31 / nb_dist fois d nb_pos nombre de points c7 espece origine (nom du facteur de diffusion) c7 espece extremite d o_dist ordre du developpement f dif_pos distance du point ou le fond est defini @* dif_val amplitude 6.4 / nb_hkl == -2 ( raies parasites ) d n_prof nb de fonction de profil 0 ou 1 d nb_dist nb de raies de diffraction 6.41 / @ n_prof > 0 d c_prof numero de la fonction utilisee, 0 d ... d o_prof ordre du developpement *@* Wl_C largeur composante lorentz : / cos(theta) *@* WlT largeur composante lorentz : * tan(theta) *@* Wg_C largeur composante gauss : / cos(theta) *@* WgT largeur composante gauss : * tan(theta) *@* A0 assymetrie atan : constante *@* B0 assymetrie exp : constante *@* AT assymetrie atan : * tan(theta) *@* BT assymetrie exp : * tan(theta) *@* teta orientation de l'axe *@* phi orientation de l'axe 6.31 / nb_dist groupes d o_int int *@* dist pour chaqur raie distance et *@* int intensite .... 6.4 / nb_hkl == -3 ( quasicubique ) d n_prof nb de fonction de profil 0 ou 1 d nb_dist nb de raies de diffraction d o_cell ordre du developpement *@* centrage *@* a parametre de la maille 6.41 / @ n_prof > 0 d c_prof les n_prof numero des fonctions utilises d ... d o_prof ordre du developpement *@* Wl_C largeur composante lorentz : / cos(theta) *@* WlT largeur composante lorentz : * tan(theta) *@* Wg_C largeur composante gauss : / cos(theta) *@* WgT largeur composante gauss : * tan(theta) *@* A0 assymetrie degre1 : constante *@* B0 assymetrie degre3/2 : constante *@* AT assymetrie degre1 : * tan(theta) *@* BT assymetrie degre3/2 : * tan(theta) *@* teta orientation de l'axe *@* phi orientation de l'axe 6.42 / nb_dist groupes d o_int d m d n d 0 *@* int intensites d ml .... 7 / f marqhart on inverse la matrice ( M + marq * Ident) : 0 ou valeur d controle de la variation entre cycle de ce coefficient exprime en 1/10 , typiquement 12-25 IV - FICHIER LISTING ET CODE DE FIN D'EXECUTION Ce fichier reprend de facon detaillee la liste des donnees en util- isant les identificateurs declares ci-dessus puis a chaque cycle il indique les deplacements des parametres. Une '*' repere les parametres dont le deplacement devient inferieur a la limite. Au debut de chaque cycle, le listing contient le facteur d'echelle de chaque phase suivi du coefficient modifiant ce facteur en fonction des transitions declarees en I.6.1. Le nombre de hkl reellement utilise est aussi donne en comparaison avec les nombres de hkl generes et non nuls. En fin de cycle plusieurs indicateurs statistiques sont affiches: Rwp est l'indicateur classique sqrt (Som(WdI^2) / Som(WIo^2)); Rp la version non ponderee Som(Abs(dI)) / Som(Io) Rwp_c Rwp modifie pour tenir compte des correlations locales selon Berar,Lelann, J.Appl.Cryst. (1991)24 p1-5 GoF Goodness of Fit = Rwp/Rexp Rwp_b Rwp modifie sqrt (Som(WdI^2) / Som(W(Io-Iback)^2)); Rp_b Rp modifie Som(Abs(dI)) / Som(Io-Iback); N_b nombre de points ou il existe une intensite calcule en plus du fond continu, utilise dansdans les sommes Rwp_b et Rp_p, R_exp limite des R... due a la statistique d-2 distance de Durbin-Watson -2, tend vers 0 en l'absence de correl Ne nombre de points effectifs (N diminue du nombre de parametres) N nombre de points observes En fin d'execution le programme retourne un entier qui peut etre utilise par systeme d'exploitation dans une suite de traitement. Ce code prend les valeurs suivantes : Arret sur deplacement : 0 minimum au dernier cycle. 1 minimum non au dernier cycle, dernier meilleur que #0. 2 minimum non au dernier cycle, cycle 0 meilleur que le dernier. Arret sur max_cycle : 3 minimum au dernier cycle. 4 minimum intermediaire, dernier cycle meilleur que #0 5 minimum intermediaire, cycle 0 meilleur que le dernier Arret sur erreur : 10 lecture et verification 11 inversion matrice 12 inversion matrices spline du fond continu 13 erreur mathematique 14 allocation memoire 15 gestion des fichiers internes 16 coherence interne L'introduction de parametre non significatifs ne provoque pas obligatoirement l'arret du programme, celui-ci peut etre bloque automa- tiquement, cependant en cas de croissance rapide de ce nombre ou de forte divergence, il y a arret. Il est possible d'utiliser ces codes dans un fonctionement de type batch pour generer regulierement un fichier de coordonnees de depart optimum, un exemple de tel fichier de commande est donne avec le mode d'installation dans le fichier 'xnd_ins.d'. V - FICHIER DATA Differentes structures sont possibles, elles sont reperes par un code dans le fichier coordonnee, tous les fichiers utilises sont de type texte, editable. Les donnees presentes dans un meme fichier doivent respecter une contrainte : les intensites doivent correspondre a des angles croissants ( on peut concevoir des recouvrements en utilisant plusieurs fichiers). Le programme peut lire plusieurs fichiers simples, des fichiers a pas fixe et quelques fichiers multiples contenant plusieurs experiences. En l'absence de poids, on utilise des poids Poissonnien w = 1/Io, si les sigma sont specifies, les poids sont w = 1/s^2. Les fichiers les plus simples sont une liste contenant sur chaque ligne angle et intensite. Ils sont reperes par code_fichier : 1 2theta, i 2 theta, 2theta, i 3 2theta, i, s 4 theta, 2theta, i, s Un code general (100-199) permet de lire d'autre fichier de ce type, '1nm' signifie : ignorer n valeurs, lire l'angle, ignorer m valeurs, lire int. De meme pour le groupe (1000-1999) en ajoutant la lecture de sigma. Les fichiers a pas fixes reconnus sont : 10 1 colonne 11 8 colonnes 12 10 colonnes sans nb de compteur 13 10 colonnes avec nb compteurs ignore 14 10 colonnes avec prise en compte nb compteurs 15 8 colonnes avec nb compteurs ignore 16 8 colonnes avec prise en compte nb compteurs Ils comprennent un entete permettant la lecture de plusieurs blocs NBLOC SCALE WSCALE 2THETA0 PAS 2THETAF MONO 2T0 2TF i0 i1 i2 i3 i4 i5 i6 i7 xxx i8 i9 .... 2THETA1 ... NBLOC nb de bloc a lire SCALE coef multiplicatif des valeurs a lire WSCALE coef multiplicatif des ecarts_types 2THETA0 premiere valeur significative du bloc qui commence a 2TO 2THETAF derniere valeur significative du bloc qui fini a 2TF 2T0 et 2TF peuvent etre omis s'ils sont egaux a 2THETA0 et 2THETAF MONO valeur du moniteur ou 0 on utilise INT = Ix * SCALE et SIGMA = WSCALE * sqrt (INT) + sqrt(MONO) Dans les formats 10 colonnes on trouve le nombre de compteur sur un entier apres chaque comptage et dans le code 14 SIGMA en tient compte : sqrt(i/n). Les fichiers multiples reconnus sont : 20 : ILL D1B, D20 (format de 1990) Ces fichiers contiennent un entete dans lequel on extrait la variable de controle selon sa position (1 a 22). Le temps (cas 0) est compte en secondes a partir du premier diagramme. 21 : fichier acquisition IPN transforme par XDMI (LURE ou ECP) : Le nombre de parametres a lire est specifie dans l'entete, qui est suivi par une table des angles de mesure et si neff est non nul par la table des efficacites pour chaque angle. Pour chaque diagramme, on lit le numero (cas 0) puis les parametres avant les intensites. ndiags npts npar neff 2theta0 2theta1 .... eff0 eff1 eff2 0 par1(0) .... int0 int1 .... 0 ... Ce fichier est presente en pratique avec 10 valeurs par ligne. La variable de controle utilisee doit etre inferieure a npar, nb de variable du fichier. On peut corriger les donnees par une table d'efficacite a lire ( neff = 1 ), ou seulement les poids (neff = -1) si la correction a deja ete faite. si neff est nul les lignes de la tables sont sautees. VI - FICHIER DIFFUSION Un fichier standart existe 'xnd_dif.d', il est en ascii, modifiable et est installe sur le meme chemin que l'executable. Les donnees y sont identiques a celles lues dans le fichier standart, il est explore quand les donnees necessaires ne sont pas fournis dans le fichier des coordonnees. Il comprend au depart : les longueurs de diffusions de neutrons des elements naturels 0FE et de quelques isotopes. Ces valeurs extraites des tables internationales de cristallographie (IV, p ) sont exprimees en 10-12 cm les facteurs de diffusions des elements donnees dans les memes tables (IV, p 99-100). Une valeur de 3 pour prt_dif permet leur impression dans le listing, et leur verification. VII - FICHIER SYMETRIE Un fichier 'xnd_sym.d' existe, il est en ascii, modifiable et est installe sur le meme chemin que l'executable. Les donnees y sont identiques a celles lues dans le fichier coordonnees, leur nombre n'est pas defini. Ce fichier est explore pour trouver les groupes non decrit dans le fichier coordonnees. Il comprend au depart les elements de quelques de groupes de symmetrie definis selon le symbole des TIC et pour certains groupes de haute symmetrie, des groupes reduits aux positions de Wyckoff les plus symetriques. Pour les groupes Rhomboedriques, le symbole TIC est complete par la let- tre H pour une definition sur les axes H : R-3MH, le reseau effectif est utilise en axe rhomboedrique et un T est mis a la fin du symbole pour le distinguer : P3MT correspond a R3M en axe rhomboedriques. Les groupes reduits a des positions de Wyckoff sont marques FM3M_AB. Les phases modulees necessitent une description complementaire, on ajoute au groupe spatial un groupe special dont la description est la suivante: VIII - FICHIERS TEMPORAIRES Le programme utilise deux fichiers temporaires binaires. Le premier contient les donnees experimentales des divers diagrammes, il peut etre conserve pour eviter la relecture de ces donnees, son nom doit alors etre fournit par l'utilisateur. Le second contient la table des derivees des parametres sur le diagramme en cours d'affinement, et les valeurs des intensites. Il sert d'extension a la memoire si cela est necessaire (parametre disk_dydp et fonctions ...dydp). Sur micro-ordinateur de type PC ou MAC, le compilateur place les fichiers temporaires dans le directory courant, on peut utiliser un disque virtuel (ram_disk, memoire etendue...) pour loger ces fichiers en utilisant ce disque comme directory de travail. En indiquant un nom complet avec path les fichiers coordonnees, listing... peuvent resider sur un autre disque, le gain de temps peut etre important et atteindre 30% (cf essai sur MacSE30). La taille necessaire pour loger ce fichier est indiquer dans le listing a la fin de la phase de lecture. IX - FICHIERS EXEMPLES Des fichiers d'exemples xnd_1.k a xnd_5.k permettent de verifier le fonctionement apres installation du programme. Le premeier est un simple test qui genere un diagramme. Les 3 suivants correspondent a une etude neu- tron d'un meme compose, xnd_2 correspond a la phase ambiante, xnd_3 a la phase basse temperature, et xnd_4 traite plusieurs temperatures par developpement a partir des diagrammes precedents. L'exemple xnd_5 correspond a un diagramme obtenu en rayons X, la resolution plus grande y impose une definition plus elaborees des profils dont les largeurs peuvent dependre fortement des directions cristallines. Le fichier xnd_2.k demarre pour 4 cycles sur un fichier de 5399 points en affinant 42 variables correspondant a 30 parametres independant avec Rwp valant 0.1207 . Les donnees amenent a diverger en moindre carre au depart, mais la minimisation lineaire permet de descendre 0.0992. Au cycle 4, une valeur de 0.0936 est attteinte. X - FICHIERS HKL ET PLG Ces deux fichiers sont crees sur demande par XND. Le fichier HKL con- tient pour chaque raie calculee son angle, ses intensites, largeurs... Les intensites observees sont calculees de 2 facons independantes, la premiere utilise l'intensitee vue sous l'ensemble du profil, la seconde privilegie le centre de la raie calculee. L'intensite observee est precede d'un iden- tificateur de la classe de qualite de cette estimation base sur la differ- ence entre ces deux calculs : a=2%, b=4%, c=8%, d=16%, e=32%, f sinon. Le fichier PLG est un fichier 5 colonnes qui contient les informations necessairent a une representation graphique des resultats : angle, i_obs, i_calc, i_fond, delta_i, delta_i/sigma_i. XI - EXEMPLES DE RELATION ENTRE VARIABLE ET AFFINEMENT ALTERNE Les lignes suivantes illustrent l'ecriture des variables d'une maille hexagonale variant de facon linaire avec le temps : 2 variation lineaire de dimension 1 0.000 0 0.0 0 pas de correction de centrage 5.1234 12 1.0 0.002 13 1.0 a et b utilisent les memes parametres 5.1234 12 1.0 0.002 13 1.0 numerote 12 et 13 8.2345 1 0.004 1 c est independant 90 0 0 0 les angles sont constants 90 0 0 0 120 0 0 0 L'exemple suivant correspond a une ecriture plus complexe qui est rendue necessaire dans le cas de relation lineaire entre coordonnees ou taux d'occupations, substitution de 3 atomes sur un site : At1 FE 0 atome 1 -1 2 constante de dimension 2 0.25 0 0 x et y constant 0.25 0 0 0.413 14 1.0 0 0 z commun sur le site 0.700 15 0.5 16 1.0 t11 = p15 / 2 + p16 1.0 7 1.0 0 b commun sur le site At2 CO 0 atome 2 -1 2 .... 0.413 14 1.0 0 0 z commun sur le site 0.100 15 0.5 16 -1.0 t12 = p15 / 2 - p16 ... At3 NI 0 atome 3 -1 2 ... 0.200 15 -1.0 0 0 t13 = -p15 ... Si on ajoute une dependance du temps au cas precedant, on arrive a l'ecriture la plus complexe envisagee, cela donnerait pour l'atome 1 : At1 FE 0 atome 1 -2 2 variation lineaire de dimension 2 0.25 0 0 0 0 0 0.25 0 0 0 0 0 0.413 14 1.0 0 0 0.001 17 1.0 0 0.700 15 0.5 16 1.0 0.010 18 0.5 19 1.0 1.0 17 1.0 0 0.10 20 1.0 0 Cette structure permet l'ecriture de toutes les relations lineaires entre les parametres, le nombre de termes et la dimension des relations est commun a un ensemble de variables. En cas de correlation forte, le parametre valid_ref permet en utilisant un programme de cyclage (cycle.xnd sous UNIX, xnd_bat.bat sous ms_dos) d'affiner a tour de role les divers parametres en fonction du numero de passage gere dans le fichier x.new. Par exemple pour cet atome, avec valid_ref = 4, At1 FE 0 1 0.105 1 affine a tous les passages 0.251 2 affine aux passages 0, 4, 8 0.249 3 affine aux passages 1, 5, 9 0.413 11 1.0 affine a tous les passages 0.700 200 1.0 affine aux passages 0, 4, 8 ou le numero des passages est defini par (1+prt_new), superieur a 1 il est incremente par le programme dans le nouveau fichier coordonnees. XII - CYCLAGE... Un script permettant le cyclage sous Unix existe: cycle.xnd. Il utilise des suffixes standarts .k .lst .new .hkl pour les fichiers et recopie le fichier .new en .k apres chaque exectution. Une copie des fichiers pre- cedents est conserve .k_x .... Une option autorise un recyclage force sinon il s'arrete quand XND n'avance plus. A chaque cycle ce script peut appeler un executable qui peu servir a modifier le fichier de commande. Cette utilisation permet de reinjecter dans XND les valeurs observees des pics de Bragg quand on cherche a extraire des intensitees pour une phase inconnue. Cette methode evite d'inverser des matrices importantes et converge avec efficacite. On peut se contenter d'affiner des parametres de profils dans XND. L'exemple suivant utilise les commandes Unix standarts pour modichier le fichier .k en fonc- tion des intensitees observees. #script ex.com executable par cycle.xnd dans cycle.xnd ex head -66 ex.new >t awk -f ex.awk ex.hkl >>t cp ex.k ex.k_old mv t ex.k ou le fichier ex.awk contient { ligne = sprintf (" %3d %3d %3d %6.1f 0" ,$3+0, $4+0, $5+0, $8+0); if (NR > 2) print ligne; } XIII - MESSAGES D'ERREURS Les principaux sont contenus dans le fichier xnd_msg.h : E_FOPEN Ouverture fichier '%s' : '%s' impossible" E_CHK Coherence interne : %s" /* xnd_r... */ E_FNAME Nom de fichier '%s'0 E_READ Lecture '%s' a %.4f" E_ZEROP Pas de points sur fichier '%s'" E_NEGAT Fichier DATA non croissant : %.3f %.3f" E_RANGE Fichier DATA en %d dtheta impossible : %.3f" /* xnd_use... */ E_RDATF Lecture Fichier Data" E_WDATF Ecriture Fichier Data" E_DYDPS Positionement fichier interne DYDP" E_DYDPR Lecture fichier interne DYDP" E_DYDPW Ecriture fichier interne DYDP => En general un probleme de place sur le disque par defaut. E_ALLOC Allocation Memoire %u * %u : %s0 XIV - INSTALLATION - VERSION La structure du programme et son installation sont decrits dans le fichier xnd_ins.d, ce fichier contient aussi les principales differences entre les versions (bug reperes). Les noms de fichiers ou de chemins respectent les habitudes de diverses machines : DSK:....ch pour MSDOS /usr/..../fich pour UNIX [name.dir...]fich pour VMS vol:folder:fich pour MAC Les fichiers xnd_sym.d, xnd_dif.d sont cherches selon la compila- tion dans les directory par defaut suivant : dynamiquement dans le directory contenant le programme executable quelque soit le catalogue de travail pour MSDOS et VMS (xnd.exe) dans ce catalogue ( ou dans /usr/local si l'executable xnd n'est pas trouve par argv[0] ou le PATH ) pour UNIX le catalogue de travail pour MAC Des indications de temps d'execution de fichier test pour plusieurs machine y sont indiques. La version originale est numerote 1.00, elle est date de juin 91. Plusieurs corrections ont ete realises dans cette version, les pro- grammes en different par la date imprimee qui est dans le fichier xnd_ref.c. Une liste de ces corrections avec leur date existe dans le fichier xnd_ver.v. facteur d'echelle et intensites absolues Le calcul du flux recu par l'echantillon s'obtient facilement a partir de ce facteur d'echelle (voir Suorti, Acta Cryst 85 A41 p413 et XND) No = 32 Ech Pi^2 Mu Vc^2 / (180 Eff Analyse DivVert Re^2 Lamda^3) avec pour Al(OH)3 a 1.54 A Re = 2.82 E-15 m Vc = 425 E-30 m^3 Lambda = 1.54 E-10 m Analyse = 0.029 deg soit 5 E-4 rad DivVert = 2.3 deg soit 4 E-2 rad Eff = 1 (efficacite compteur, absortion air) Mu = (3x.43+48x11.5+27x48.6)/(3+48+27) x 2.4 = 57 cm^-1 = 5.7 E3 m^-1 Dans ce cas, on a donc No = 3.10 E12 Ech