AOUT 96. Help de comparaison des instructions SIR et CLASS Systeme Interactif de Reduction Continuum and Line Analysis Single-dish Software Preliminaires : Ce document reprend l'ordre alphabetique de l'aide de SIR et pour chaque commande donne un equivalent dans CLASS. Il est bases sur les version suivantes : SIC V 8.0 du 15-DEC-94 LAS V 4.1-0 du 08-APR-88 SIR V 05/95 du 29-MAY-95 La plupart des commandes arithmetiques, des fonctions de langages, comme les boucles, les tests logiques... sont en fait des commandes SIC. Les fonctions de plus haut niveau (typiquement les manipulations de spectres ou de headers) sont des commandes CLASS. Ces deux modules etant intimement lies (avec d'autres en plus), il n'est pas a la charge de l'utilisateur de preciser si il s'agit d'une commande CLASS ou SIC ou autre, sauf en cas d'ambiguite, ce qui est de suite signale par l'interpreteur de commandes. Dans ce qui va suivre, il peut arriver qu'un paragraphe (la description d'une commande) fasse allusion a une autre commande. Dans ce cas il est ecrit COM1 => COM2 ou COM1 represente la commande SIR et COM2 la commande equivalente CLASS. Tous les paragraphes sont construits de la maniere suivante : COMMANDE SIR COMMANDE CLASS : commentaires (eventuellement un exemple) la commande Class est remplace par "inexistant" si il n'y a pas d'equivalent au sens strict du terme. Les instructions LET sont facultatives et sont precisees pour bien montrer qu'il s'agit d'une affectation. ------------------------------------------------------------------ ------------------------------------------------------------------ ABSO ABS : Retourne la valeur absolue d'un argument. ex : DEFINE INTEGER A LET A = ABS(-10) On ne trouvera pas d'equivalent a ABSO* ou tout autre manipulation sur les tableaux 1..8 specifiques a SIR. Cela restera vrai pour toutes les commandes les manipulant. ADDI "+" : Cette fonction est remplace par l'operateur mathematique "+" et donc est plus naturel d'emploi. ex : DEFINE INTEGER A B LET A = 10 LET B = 20 LET A = (A+B) SIR autorise la concatenation de chaines avec ADDI. Sous CLASS, la concatenation s'effectue de la maniere suivante : ex : DEFINE CHARACTER CHAINE1*5 !*5, *6, *11 DEFINE CHARACTER CHAINE2*6 !representent les dEFINE CHARACTER CHAINE3*11 !longueurs des chaines LET CHAINE3 = 'CHAINE1''CHAINE2' On prendra soin de declarer une variable cible suffisamment grande en taille. AREA AREA : AREA est une variable globale du header dont la valeur peut etre editee a l'aide de EXAMINE ou SAY. Cette variable est modifiee en fonction des operations qui sont effectuees sur les donnees. Par exemple, a l'issue d'une soustraction de ligne de base, AREA va prendre la valeur de l'aire non masquee sous la ligne de base. La maniere "classique" de faire un calcul d'aire est de charger un spectre (ou une moyenne), de definir un masque, de soustraire une ligne de base, definir le nombre de gaussiennes a fitter, et rechercher ces gaussiennes. ex : FILE IN toto.nan FIND/ALL SUM DEVICE XAUTO WHITE PLOT SET WINDOW ! voir CLIP => SET MASK ! => SET WINDOW BASE n/PLOT ! n = degre du polynome LINES 2 ! pour 2 gaussiennes GAUSS ! recherche interactive ! a l'aide du curseur. ! le click souris marche ! FIT ! affiche le resultat Les parametres tels que l'aire sont alors affiches a l'ecran. ASKN LET : La saisie d'une valeur numerique ou alphanumerique se programme par l'instruction LET sans utiliser de valeur derriere. ex : LET x = 10 initialise a 10 la variable x. LET x invite l'utilisateur a entrer la valeur de x et fourni l'affichage suivant a l'ecran : x = Un retour chariot sans entrer une valeur ou la saisie d'une valeur incoherente vis a vis du type de variable provoque une erreur et la pause caracteristique de tout probleme dans l'execution d'une procedure CLASS. L'option SYNTAX | FIXED | FREE | permet de ne pas preciser (dans le cas de FREE) la commande LET. Ainsi l'instruction x = 10 sera valide. FREE est l'option par defaut. Dans les versions recentes de SIC, vous pourrez trouver l'option /RANGE ou /CHOICE permettant de controler immediatement la validite de la valeur saisie. BASE BASE : La soustraction d'une ligne de base fonctionne a peu pres de la meme maniere dans les deux systemes. CLASS charge un spectre dans un tableau R. Lors d'un appel a BASE, ce tableau est copie dans un tableau memoire T. La soustraction de la ligne de base est alors appliquee sur le tableau R. ex : FILE IN toto.nan FIND GET FIRST SET WINDOW ! definition interactive d'un masque BASE 4/PLOT ! degre 4 et imprimee sur le graphique le degre du polynome a soustraire peut aussi etre defini par SET BASE n. Par defaut n = 1. L'utilisation de masques (comme SETM de SIR) fait intervenir dans CLASS la notion de fenetre (WINDOW). Voir SETM => SET WINDOW BRAL inexistant : ne pas chercher l'equivalent d'un goto ou tout autre branchement inconditionnel comme BRAL dans CLASS puisque cela n'existe pas ! Dans un souci de lisibilite, de maintenance et de fiabilite de programmation, les structures de programme qui ont ete inclue dans SIC (et donc dans CLASS) sont les IF..THEN..ELSE..ENDIF, FOR..NEXT et FOR/WHILE..NEXT que l'on retrouve dans tous les langages de programmation classique. Cela necessite de penser ses procedures differemment. Le BRAL n'est absolument pas necessaire sir l'on agence bien les differentes etapes de son programme. Les boucles WHILE, associees a des tests IF, permet de venir a bout de n'importe quel algorithme du 20eme siecle. (Mis a part les besoins incontournables de la recursivite). ex : Imaginons la situation SIR suivante : 1: ASKN "Entrer 0 ou 1 :", A BREQ 2, A COMP 1, A BREQ 3 BRAL 1 2: MESS Vous avez entre 0 3: MESS Vous avez entre 1 Cet exemple va boucler tant que l'utilisateur n'aura pas entre effectivement 0 ou 1 et sauter au paragraphe 2 ou 3 selon la valeur entree. L'equivalent en CLASS s'ecrira : DEFINE INTEGER VALEUR LET VALEUR FOR/WHILE VALEUR.NE.0.AND.VALEUR.NE.1 LET VALEUR NEXT IF VALEUR.EQ.0 THEN SAY "Vous avez entre 0" ELSE SAY "Vous avez entre 1" END IF Certes, vous aurez tape 10 lignes de code au lieu de 7, mais la lisibilite sera nettement meilleure, et la comprehension ulterieure du programme s'en resentira. Seuls le temps et la pratique permettent de se convaincre de l'interet de ce genre de syntaxe. Pour tester la validite d'une reponse, voir aussi la derniere remarque de ASKN => LET. BREA PAUSE :Il n'existe malheureusement pas d'equivalent a la commande BREAK de SIR. Celle qui s'en rapproche le plus est l'instruction PAUSE qui met en suspens l'execution de la procedure jusqu'a ce que l'utilisateur entre(pour continue) puis ou bien puispour quitter. ex : PAUSE "Ceci est une pause. pour continuer" BREQ inexistant : Comme pour BRAL, on ne trouvera pas d'equivalent dans SIC. Il faut structurer son programme de maniere a n'utiliser que des boucles FOR..NEXT, FOR/WHILE..NEXT et des tests IF..ENDIF Ne pas chercher a faire IF condition THEN GOTO puisque le goto n'existe pas. Ce qui aurait du figurer dans le paragraphe du goto devra tout simplement etre mis a la suite du IF. ELSE et/ou l'imbrication de plusieurs IF permet d'avoir ainsi plusieurs cas possibles. Les tests logiques possibles sont detaille ci-dessous. BRGE inexistant : Meme remarque que pour BRAL. en ce qui concerne les tests logiques destinees a effectuer telle ou telle operation en fonction du resultat, SIC offre les fonctions suivantes : .OR. ou logique .AND. et logique .NOT. non logique .GT. > .LT. < .GE. >= .LE. <= .NE. <> .EQ. = Les . sont a respecter dans la syntaxe. voir exemple de BRAL=>inexistant BRGT inexistant : idem ci-dessus BRLE inexistant : idem ci-dessus BRLT inexistant : idem ci-dessus BRNE inexistant : idem ci-dessus CALL @ : l'appel d'une procedure a l'interieur d'une autre procedure est possible dans CLASS, tant que l'on ne fait pas d'appel recursif, c'est a dire appeler une procedure a l'interieur d'elle meme. ex : Si une procedure A doit appeler une procedure B, on tapera au prompt /LAS de CLASS : @ A pour appeler la procedure principale. ( on peut se creer des racourcis ou alias par la commande SYMBOL) le corps de la procedure A fera de la meme maniere a B : @ B Un des avantages majeur de SIC, est qu-il permet de passer en argument des parametres aux fonctions appelees. Pour reprendre l'exemple du paragraphe BRAL => inexistant, imaginons que nous voulions remplacer le IF..THEN..ELSE par une procedure independante. Nous ecrivons alors : DEFINE INTEGER VALEUR LET VALEUR FOR/WHILE VALEUR.NE.0.AND.VALEUR.NE.1 LET VALEUR NEXT @TEST VALEUR La procedure TEST s'ecrira donc : ! procedure TEST.CLASS DEFINE INTEGER VALEUR_RECU LET VALEUR_RECU = &1 IF VALEUR_RECU.EQ.0 THEN SAY "Vous avez entre 0" ELSE SAY "Vous avez entre 1" END IF RETURN Dans la premiere procedure, nous appelons @ TEST en lui donnant comme argument la variable VALEUR. La procedure destination reconnait les arguments qui lui sont donnes grace a leur position. Il faut donc, dans le cas d'arguments multiples, qu'il y ai adequation entre la position des arguments donnes et celle des arguments attendus. Le nombre maximum d'argument est 8. Leurs noms , dans la procedures destination sont &1, &2, &3... Je conseillerai vivement de recopier de suite la valeur dans une variable plutot que de travailler directement sur &x, ce qui d'ailleur n'est pas toujours possible. Les procedures ne sont pas des fonctions et le passage d'arguments est unilateral c'est a dire q'une procedure ne peut pas donner de parametre a sa procedure appelante. On peut contourner ce probleme en utilisant des variables globales : Si l'on declare dans une procedure : DEFINE REAL TRUC/GLOBAL, cette variable sera connu de toutes les procedures appelees, quelque soit leur niveau d' imbrication. Ainsi si une procedure B appelee par @B dans une procedure A fait LET TRUC = TRUC+1, ce resultat sera connue de la procedure appelante A puisque la variable est globale. La difference avec une variable dite locale dans une procedure, c'est que cette derniere est detruite (enlevee de la memoire) lorsque la procedure se finit. Exactement comme quand on effectue un DELETE/VARIABLE nom_variable. CHPY inexistant : voir HARD => HARDCOPY CIDX FIND : Lorsque l'on cherche des spectres a partir d'un certain nombre de criteres (voir CRIT => SET), on cree le resultat de la requete a partir de l'instruction FIND. Un tableau appele INDEX contient tous les numeros de spectres issus de la recherche. INDEX est un tableau comme tous les autres qui peut se manipuler element par element : INDEX[1], INDEX[10], INDEX[i]. Le nombre d'elements trouves, ce qui correspond aussi a la taille du tableau INDEX est donne par la variable globale FOUND. FIND/ALL travaille de la meme maniere que FIND en ommettant le critere de selection sur les numero de version. Si aucun critere de version n'a ete defini, FIND et FIND/ALL retourneront le meme resultat d'INDEX. LIST IN affiche a l'ecran la liste des spectres contenus dans le fichier FILE IN sans tenir compte des criteres de recherche. voir aussi CRIT => SET MCRI => SET CLEA inexistant : Cependant, on peut soit utiliser une boucle FOR pour reinitialiser le tableau. En fait la boucle est implicite puisqu'il suffit d'ecrire : DEFINE INTEGER TAB[10] ! tableau de 10 entiers LET TAB[i] = 0 ! cela marche aussi pour plusieurs ! dimensions ON peut aussi effacer la variable et la recreer : DELETE/VARIABLE TAB DEFINE INTEGER TAB[10] mais la 1ere solution est bien meilleur car il n'y a qu'une seule declaration. CLIP SET MASK : SET WINDOW : toutes les operations de masquage de points passent par SET WINDOW ou SET MASK. SET WINDOW est utiliser pour masquer des points dans le cas d'une recherche de ligne de base. On peut definir plusieurs fenetres : SET WINDOW pt11 pt12 pt21 pt22 ... Les points definis dans la fenetre sont masques. Ce parametrage peut s'effectuer interactivement et graphiquement par le biais d'un curseur. (SET CURSOR ON). Dans ce cas des touches sont predefinies car les boutons de la souris ne sont pas geres. N new boudary C cancel last entry H help E exit SHOW WINDOW permet d'afficher les fenetres definies. DRAW WINDOW les affiches en surimpression du spectre. SET MASK cache des points pour la recherche d'une gaussienne. Memes remarques pour SET CURSOR ON les touches predefinies SHOW MASK DRAW MASK CLRM SET MASK : SET WINDOW : Pour effacer un masque precedemment defini, il faut executer la commande SET WINDOW (ou SET MASK) sans parametre et taper immediatement E pour sortir de la saisie interactive. Utiliser SET WINDOW 0 0 reduit le masque a un intervalle ridicule mais ne le detruit pas vraiment. ATTENTION : CLEAR WINDOW existe mais n'a rien a voir avec la notion de masque et efface la fenetre graphique de l'ecran ainsi que tout ce qui s'y rapporte. COMP inexistant : Il n'y a pas d'operateur de comparaison au sens de COMP. Cependant, on trouve tous les operateurs logiques necessaires. Ceux-ci sont donnes au paragraphe BRGE => inexistant. Associes a la fonction IF, ils rendent le meme service. CORR inexistant COSR COS : COSH : cette fonction retourne le cosinus (ou cosinus hyperbolique) de la valeur qui lui est donne en argument. ex : DEFINE REAL A B LET A = 3.14 LET B = COS(A) ! retournera -1 Les arguments doivent etres donnees en radians. La constante PI est definie en globale pour d'eventuelles conversions. CRIT SET : Pour definir un ou plusieurs criteres de recherche, on impose a l'aide de la fonction SET des valeurs a un certain nombre de rubriques du header des spectres. ex : si l'on recherche tous les spectres dont le numero de version est 2 on pourra taper : SET NUMBER *2 * faisant office de "joker" et remplacant n'importe quel caractere. La variable VERSION existe et peut etre interrogee grace a EXAMINE mais ne peut pas faire l'objet d'un SET particulier. On peut effectuer un SET sur la majorite des rubriques du header. SET DEFAULT permet d'annuler tous les criteres definis. Une instruction supplementaire, IGNORE, permet d'isoler des spectres qui ne seront jamais selectionnes quelque soient les criteres definis par SET. voir aussi CIDX => FIND MCRI => SET CURS SET CURSOR ON : rend visible le curseur en vue de son utilisation sur la fenetre graphique. voir aussi SETM => SET WINDOW => SET MASK DBUG inexistant : cette option de debugage peut etre remplace par l'affichage de message et de contenus de variables judicieusement places. DEFI inexistant : Les 8 tableaux predefinis de SIR n'existent pas dans CLASS, cependant, on peut declarer autant de tableaux que l'on veut par DEFINE type nom_var[dim] ou type est le type des elements contenus dans le tableau nom_var le nom du tableau dim sa dimension (unique ou multiple) dans ce cas, l'intervalle d'utilisation de ce tableau est sa dimension. voir aussi LOAD => GET DIVI "/" : "|" : La fonction de division est remplacee par l'operateur mathematique qui y est habituellement associe. l'operateur "/" etant egalement utilise pour certaines options comme LET.../WHERE, SIC offre la possibilite d'effectuer une division a l'aide du symbol "|" ex : DEFINE INTEGER A DEFINE INTEGER B DEFINE REAL C LET C = (A|B) EINT INT : INT retourne la partie entiere de l'argument qui lui est donne. ex : DEFINE REAL A DEFINE INTEGER B LET A = 4.567 LET B = INT(A) B prend la valeur 4 A noter qu'il existe dans CLASS une fonction qui arrondie une valeur a l'entier le plus proche : NINT. si l'on ecrit : LET B = NINT(A) B prendra la valeur 5 ENDL NEXT : la fin d'une boucle, dans CLASS, est marquee par l'instruction NEXT, qu'il s'agisse d'une boucle FOR...NEXT ou d'une boucle FOR/WHILE...NEXT. rem : les variables compteur des boucles FOR (I) sont declares implicitement. ex : DEFINE INTEGER TAB[10] FOR I 1 TO 10 EXAMINE TAB[I] NEXT ex : DEFINE INTEGER TAB[10] DEFINE INTEGER COMPTEUR LET COMPTEUR = 10 FOR/WHILE (COMPTEUR.GT.0) EXAMINE TAB[I] LET COMPTEUR = COMPTEUR-1 NEXT ENTE LET : Il n'y a pas d'equivalent a cette fonction dans le sens ou le vecteur @ de SIR n'existe pas. Cependant, une fois que l'on a declare un tableau (DEFINE) on peut initialiser chacun de ses elements a l'aide de la fonction LET. ex : DEFINE INTEGER TAB[10] LET TAB[3] = 5 LET TAB[7] = 4 si l'on veut que la valeur soit definie a l'execution, il suffit de ne pas mettre de valeur. LET TAB[3] LET TAB[7] EVAL inexistant : l'evaluation d'une expression arithmetique composee ne necessite pas, dans CLASS, d'instruction particuliere. ex : DEFINE REAL A LET A = MIN((EXP(COS(3.14))),(EXP(SIN(3.14)))) SIC propose a peu pres toutes les fonctions classiques : fonctions a 1 argument : ABS, ACOS, ASIN, ATAN, COS, COSH, EXP, INT, LOG, LOG10, NINT, SIN, SINH, SQRT, TAN, TANH fonctions a 2 arguments : ATAN2, MAX, MIN, MOD, SIGN operateurs : +, -, *, / ou |, ** ou ^ Les operations sur dates gregoriennes ou juliennes ne sont pas predefinies dans CLASS mais peuvent reprogrammees comme une procedure ou comme une fonction. En effet, l'utilisateur peut definir ses propre fonctions a l'aide de DEFINE FUNCTION ainsi l'exemple ci-dessus pourrai devenir : DEFINE REAL A DEFINE REAL ARG1 ARG2 DEFINE FUNCTION TRUC(P1, P2 ) MIN((EXP(COS(P1))),(EXP(SIN(P2)))) LET ARG1 = 3.14 LET ARG2 = 3.14 LET A = TRUC(ARG1, ARG2) EXPN EXP : Cette fonction retourne l'exponentiel de son argument. ex : DEFINE INTEGER A LET A = 1 SAY 'EXP(A)' affichera 2.718 EXTR inexistant : Cette fonction qui dans SIR fournie les indices et valeurs du minimum et/ou du maximum d'un tableau est facilement reprogrammable a l'aide d'une boucle parcourant un tableau. FFTA FFT : l'instruction FFT lance le calcul de la transformee de Fourier sur le tableau R et trace le resultat dans la fenetre graphique. Le contenu du tableau R n'est pas affecte par ce calcul. On peut definir des zones a effacer en utilisant le curseur comme pour definir une fenetre. E (exit) permet de sortir de la fenetre graphique. FFT/REMOVE. FOLD FOLD : La commande FOLD GAUS GAUSS :fit d'une gausienne sur un spectre. Il faut avoir prealablement defini un masque et soustrait une ligne de base. l'instruction LINES permet de definir certains parametres comme le nombre de gaussiennes a fitter. Une fois ces elements definis, il suffit de taper GAUSS puis FIT pour visualiser dans la fenetre graphique. METHOD GAUSS SHELL NH3(n,n) HFS CONTINUUM permet de fixer une methode de fit. voir BASE => BASE voir CLIP => SET MASK => SET WINDOW GETF inexistant : En ce qui concerne les exportations et importations de fichiers, il faut s'orienter vers la commande GREG. +fits (CFITS) GETM SHOW MASK : SHOW WINDOW : ces instructions permettent d'afficher les masques et fenetres definies par SET MASK et SET WINDOW. HARD HARDCOPY : Fournie un fichier postscript de l'ecran graphique. cette fonction propose differentes options concernant l'orientation de la feuille, le peripherique de sortie... ex : HARDCOPY nom_fic /DEVICE PS FAST ! (ou GREY ou COLOR) L'option /PLOT permet de faire une sortie immediate. HEAD HEADER : MODIFY : TAG : HEADER affiche le contenu du header du spectre courant. MODIFY et TAG permettent d'intervenir sur le contenu. TAG est juste destine a renseigner sur la qualite de l'observation. C'est une valeur entiere de 0 a 9. MODIFY permet de changer les principaux parametres du header : frequence, offset, canal de ref, nom de raie, vitesse au repos, resolution... La syntaxe est a peu pres toujours la meme : MODIFY nom_rubrique valeur HELP HELP : Aide "en ligne" de CLASS comprenant principalement la description des instructions SIC, LAS, ANALYSE et GTVL. Le manuel de reference reste cependant indispensable pour un bon nombre de details. HIST inexistant : Il n'y a pas la possibilite, sauf creation d'une procedure particuliere, de construire l'histogramme d'un tableau. SET PLOT H permet de tracer un spectre sous forme d'histogramme. Cependant, il ne s'agit pas de l'histogramme du spectre qui doit fournir une quantification du nombre de canaux pour une temperature donnee. (comme c'est le cas dans SIR) INDV inexistant : Pour obtenir la vitesse correspondant a un indice donne , il faut interroger le tableau RX. ex : SAY 'RX[30]' affichera la vitesse du point d'indice 30. Pour la fonction reciproque il faut programmer une fonction qui recherche la vitesse souhaitee et qui retourne l'indice correspondant. INTE ACCUMULATE : SUM : ACCUMULATE permet d'integrer les 2 spectres des tableaux R et T, le resultat etant conserve dans R. Cette integration est ponderee en tenant compte du poids de chacun des spectres. Si les spectres ne coincident pas dans leur position et dans leur calibration (SET MATCH et SET CALIBRATION), un message d'alerte est affiche. SUM effectue l'integration de l'ensemble des spectres contenus dans le tableau INDEX (voir CRIT => SET ou CIDX => FIND). Il y a egalement verification de la coherence entre les calibrations et les positions. INTV ACCUMULATE : SUM : Voir ci-dessus. INVM inexistant : Il n'y a pas de methode prevue pour prendre le complement des masques ou fenetres definies. IPOL inexistant LCRI SHOW : La fonction SHOW est assez generale pour l'affichage d'information. Associee a un champ particulier du HEADER, elle renseigne sur son contenu. L'option ALL (SHOW ALL) fourni la liste des parametres definis par l'instruction SET. Une * doit signifier qu'il n'y a pas de contraintes particulieres imposes sur un champs du header pour la recherche par FIND. LIST TYPE : La commande TYPE utilisee seule affiche le contenu de la pile des commandes entrees interactivement. ex : Si depuis le debut de la session, l'utilisateur a tape : FILE IN toto.nan FIND/ALL DEVICE XAUTO WHITE @ proc1.class CLEAR WIN TYPE fournira la liste de toutes ces instructions, sauf celles qui seront issues de l'execution de proc1.class. TYPE nom_proc affiche le code de la procedure nom_proc a l'ecran. L'extension du fichier peut etre omis si celui ci est .class. Si ce n'est pas le cas, il faut la preciser. ex : TYPE ma_proc ! si le fichier est ma_proc.class TYPE mine_too.txt ! si pas .class ATTENTION : l'instruction LIST existe dans CLASS mais sert a afficher la liste des spectres de l'INDEX issu de la recherche sur criteres par FIND. LOAD GET : Il n'y a pas d'equivalent des 8 tableaux predefinis de SIR. La structure de donnees qui s'en rapproche le est le tableau defini automatiquement lors du chargement d'un spectre. Lors de cette operation, un tableau RY conserve les valeurs des ordonnees, RX celles des abscisses et toutes les donnees du header sont egalement stockees en memoire. On peut memoriser le spectre et son header dans une structure de copie par : ex : FILE IN TOTO.NAN ! fichier de spectres FIND/ALL GET FIRST MEMORIZE une_memoire GET NEXT MEMORIZE deux_memoires GET NEXT ! a ce moment, c'est le 3eme spectre de TOTO.NAN qui ! est en memoire, mais on peut rappeler les deux ! premiers en faisant : RETRIEVE une_memoire ! le 3eme est alors place dans une memoire tampon ! TX, TY et "T"header. on peut le remettre dans la ! memoire R par SWAP RETRIEVE deux_memoires ! dans ce cas, le 2eme spectre est mis dans R ! le 1er qui etait dans R passe dans T ! et le 3eme aui etait dans T disparait puisque ! on ne l'a pas memorise. LOGN LOG10 : LOG : Retourne le logarithme (ou le logarithme decimal) de l'argument qui lui est donne. ex : SAY 'LOG(10)' ! affiche 2.3 SAY 'LOG10(10)' ! affiche 1 voir aussi EVAL => inexistant LOOK STAMP :La visualisation le plusieurs spectres sur la fenetre graphique peut etre obtenu par STAMP. cette fonction exige 2 arguments qui representent le nombre de spectres horizontalement et verticalement. On peut preciser l'option /NUMBER pour faire apparaitre dans le coin superieur gauche de chaque fenetre le numero de spectre concerne. ex : FILE IN toto.nan FIND/ALL DEVICE XAUTO WHITE STAMP 4 5 /NUMBER affichera 20 spectres avec leur numero respectif, sous forme d'un tableau de 4 colonnes de 5 spectres. On peut afficher plusieurs spectres a des emplacements determines par l'utilisateur a l'aide de SET BOX_LOCATION. Cette instruction fonctionne de la maniere suivante : ex : SET BOX_LOCATION 3 10 3 10 BOX SPECTRUM defini une boite dont le coin inferieur gauche est a 3 centimetres des bords de la feuille et le coin superieur droit a 10 centimetres. Le point de coordonnee 0,0 etant le coin inferieur gauche de la feuille d'affichage. Il est sous entendu que la fenetre graphique represente une feuille de format 21*29.7 d'ou la definition en cm des arguments donnees a la fonction. format general : SET BOX_LOCATION X1 X2 Y1 Y2 avec X1 Y1 les coordonnees du coin inf. gauche et X2 Y2 du coin sup. droit de la boite a afficher. BOX affiche cette boite. SPECTRUM insere dans cette boite le spectre courant. TITLE n'est pas encore au point (V 4.1 88). Il s'affiche toujour en haut de la fenetre graphique et non pas au dessus de la boite. Pour effacer la derniere operation graphique, utiliser CLEAR SEGMENT puis ZOOM REFRESH. LOOP FOR : Les boucles LOOP de SIR ont ete remplacees par des structures plus evolues comme FOR...NEXT et FOR/WHILE...NEXT. La boucle FOR...NEXT est une boucle a compteur d'iteration. ex : FOR I 1 TO 50 ..... suite d'instruction... ..... NEXT Cette boucle va tourner jusqu'a ce que I prenne la valeur 51. Les variables compteur de ce genre de boucle n'ont pas besoin d'etre declarees. Elles le sont implicitement par l'interpreteur. La boucle FOR/WHILE...NEXT est une boucle a interruption conditionnelle suivant un test logique. ex : DEFINE CHARACTER REPONSE*3 LET REPONSE FOR/WHILE (REPONSE.EQ."O".OR.REPONSE.EQ."OUI") .... suite d'instruction... .... SAY " Recommencer le traitement ? (O/N)" LET REPONSE NEXT tant que la valeur de REPONSE est O ou OUI, les traitements inclus dans la boucle seront effectues. MCRI SET : Pour ajouter un nouveau critere de selection (voir CRIT => SET) , ou pour modifier un critere deja defini, il faut utiliser l'instruction SET. ex : SET NUMBER 1000 2000 SET OBSERVED 1-JAN-1996 31-JAN-1996 FIND trouve tous les spectres dont le numero est compris entre 1000 et 2000 et dont l'observation a ete effectuee entre le 1er et le 31 janvier 1996. SET OBSERVED 1-JAN-1996 31-FEB-1996 SET LINE HI 21-cm FIND effectue une nouvelle recherche avec un intervalle de date plus etendu et une nouvelle contrainte sur le nom de la raie. MESS SAY : L'affichage a l'ecran d'un message s'obtient en utilisant SAY de deux manieres possibles : Afficher du texte : ex : SAY "Ceci est un message" Afficher le contenu de variables : ex : DEFINE INTEGER A GET FIRST SAY 'A''RY[3]' ! affiche le contenu de A et ! et la valeur du canal 3 du 1er spectre. On peut combiner les deux possibilites : ex : SAY "le contenu de A est :"'A' MOVE LET : "=" : MOVE utilise comme operateur d'affectation, peut etre remplace par l'operateur mathematique classique precede eventuellement de l'instruction LET. ex : DEFINE INTEGER A B LET A = B ! met le contenu de B dans A Cette affectation est la meme quelque soit le type de donnee : entiers, reels, caracteres, tableaux, booleens... L'affectation globale d'un tableau est possible si leurs tailles sont identiques. On peut egalement affecter un tableau d'entiers a un tableau de reels ou vice versa. Dans ce dernier cas, les valeurs seront tronquees a leur partie entiere. ex : DEFINE INTEGER TAB1[5] DEFINE INTEGER TAB2[5] DEFINE REAL TAB3[5] DEFINE INTEGER TAB4[9] TAB1 = TAB2 TAB2 = TAB3 sont des affectations valides TAB3 = TAB4 ne l'est pas car il n'y a pas coherence de taille. MULT "*" : Il s'agit de l'operateur classique de multiplication. on peut multiplier une variable unique ou multiplier un tableau en une seule instruction. ex : DEFINE INTEGER TAB1[3] DEFINE REAL TAB2[3] (ici aussi LET est optionnel) LET TAB1 = TAB1*2 LET TAB2 = TAB2*TAB1 sont des affectations valides On retrouve la contrainte de taille exprimee dans le paragraphe precedent. PFIT inexistant : pas de fonction pour avoir les coefficients d'un polynome qui fitte sur un spectre. Voir BASE => BASE. PLOT HARDCOPY : Fournie un fichier postscript de l'ecran graphique. cette fonction propose differentes options concernant l'orientation de la feuille, le peripherique de sortie... C'est cette fonction aui permet dans CLASS d'effectuer une sortie vers une table tracante en utilisant l'option /PLOT. ATTENTION : l'instruction PLOT existe dans CLASS mais sert a tracer le spectre courant a l'ecran, ainsi que son titre, et ses axes de coordonnees. PRIN SIC OUTPUT : Il ne s'agit pas tout a fait d'un equivalent puisque SIC OUTPUT redirige les affichages SAY (voir MESS => SAY) dans un fichier de sortie. Ce dernier est ecrit uniquement lorsque l'on ferme le fichier de sortie par l'instruction SIC OUTPUT. Les affichages a l'ecran sont conserves. ex : SAY "ce message s'affiche a l'ecran" SIC OUTPUT sortie.txt SAY "ce message sera a l'ecran et bientot dans le fichier" SIC OUTPUT ! fermeture du fichier SAY "Le second message est maintenant dans le fichier" ATTENTION : l'instruction PRIN existe dans CLASS mais sert a rediriger vers l'ecran ou vers un fichier un certain nombre de parametres FIT, AREA, CHANNEL... PUTF GREG : On peut exporter un spectre dans un fichier binaire avec la commande GREG. Il n'est pas possible de relire ces fichiers avec CLASS. (il n'y a donc pas d'equivalent de GETF). RDSY "@" : Les symboles (ou alias) sont une propriete du langage SIC et donc independant de CLASS. Si l'on souhaite conserver une sauvegarde de plusieurs symboles, cela doit se faire dans une procedure separee qui sera rappelee pour initialiser ces alias. On ne peut les sauvegarder dans un fichier resultat comme c'est le cas dans SIR. La sauvegarde sera effectuee par SAVE qui ecriera un .CLASS. SYMBOL donne la liste des symboles. SYMBOL X donne l'equivalent dy symbole X SYMBOL X "equivalent" defini un nouveau symbole. READ GET : Permet de charger un spectre dans le tableau R. Ce spectre est obligatoirement issu du fichier defini comme fichier d'entree a l'aide de l'instruction FILE IN. La destination du spectre sera le tableau R, l'ancien contenu de ce tableau etant recopie dans le tableau T. Si on lit un nouveau spectre, le contenu de T est alors perdu. On peut l'eviter en memorisant sont contenu a l'aide de MEMORIZE. ex : SET EXTENSION nan FILE IN toto ! sous entendu toto.nan FIND/ALL LIST GET 1234 ! charge 1234 dans R GET 1235 ! charge 1235 dans R et 1234 dans T SWAP ! permute R et T MEMORIZE save1 ! memorise T dans save1 SWAP GET 1236 ! charge 1236 dans R RETRIEVE save1 ! charge save1 dans R GET sans option charge le 1er spectre de la liste GET FIRST charge le premier GET NEXT charge le suivant GET LAST charge le dernier REGR inexistant RESM "@" : On ne peut pas sauvegarder les parametres d'un masque dans les fichiers resultats. Cependant, SAVE permet de sauvegarder les parametres d'une session CLASS (parametres etablis par SET) dans une procedure .CLASS. Cette derniere peut donc etre rappelee par un "@" comme n'importe quelle procedure. RETU RETURN : Cette fonction de retour de procedure peut etre utilisee de la meme maniere que dans SIR, cependant, etant donne que SIC (et donc CLASS) propose des structures de programme (boucles et tests) evolues, on s'arrangera toujours pour avoir un algorithme qui, quelque soit le devenir des variables, arrive en fin de procedure avant de terminer son execution. Une instruction RETURN a la fin d'une procedure aura pour role de terminer proprement l'algorithme en propageant une eventuelle erreur a la procedure appelante. REVE inexistant : Des lors que l'on peut manipuler les tableaux, on peut reprogrammer ce genre de fonction. ROTA inexistant : meme remarque que precedemment. SAVM SAVE : Il ne s'agit pas a proprement parle d'un equivalent puisque le masque n'est pas sauve dans le fichier resultat mais dans un fichier a part qui est en fait une procedure. Cette procedure obtenue a l'aide de SAVE sauvegarde non seulement les masques mais egalement tous les parametres qui ont ete definis en interactif par SET. voir RESM => "@" SCAL SET MODE : Permet de preciser un intervalle de valeurs pour les abscisses et/ou les ordonnees pour le trace des spectres. SET MODE accepte differents arguments : SET MODE X pour preciser l'intervalle des abscisses. ex : SET MODE X AUTO SET MODE X 1800 2200 definissent respectivement une echelle d'abscisse automatique en fonction des valeurs trouvee dans le fichier, une echelle d'abscisse definie par l'utilisateur. Les valeurs precisees dans la 2eme forme doivent etre en accord avec les unites choisies par SET UNIT. SET MODE Y fonctionne de la meme maniere pour definir l'intervalle des ordonnees. SDCL SYSTEM : SHELL : La commande qui calque le SDCL de SIR est SYSTEM. Cette instruction permet de lancer une commande systeme (DCL si c'est un environnement VMS, KSHELL par ex. si c'est un environnement UNIX). ex : SYSTEM ls ./ ../ essai1.class essai2.class stamp_carre.class timer.class SYSTEM "ls -n" -rw-r--r-- 1 207 3000 744 Jul 22 15:00 essai1.class -rw-r--r-- 1 207 3000 186 Jul 24 12:46 essai2.class -rw-r--r-- 1 207 3000 889 Jul 29 15:37 stamp_carre.class -rw-r--r-- 1 207 3000 882 Jul 24 17:40 timer.class Les commandes systemes qui necessitent des arguments doivent etre mises entre guillemets. rem : On peut lancer ainsi l'execution d'un programme externe (programme C compile par exemple). Le passage d'arguments a un programme C est eventuellement possible par le biais des arguments de la ligne de commande, moyennant quelques astuces et contraintes qui ne seront pas discutes ici. La commande SHELL bascule vers le prompt du systeme. On peut y effectuer l'ensemble des commandes systeme habituelles. Pour revenir a CLASS il faut taper EXIT. SETM SET MASK : Defini un intervalle de points a masquer. La fonction autorise deux argument qui representent le point de depart et le point d'arrivee du masque. On peut obtenir l'intervalle masque ulterieurement en utilisant la fonction SHOW MASK. DRAW MASK permet de symboliser le masque en surrimpression du graphique du spectre. Les valeurs specifiees pour le masque doivent etre exprimees dans l'unite choisie par SET UNIT. ex : SET MASK 100 200 ! exprime en canaux SHOW MASK ! affiche l'intervalle 100 200 DRAW MASK 0.5 ! "trace" le mask en ordonnee 0.5 Voir aussi CLIP => SET MASK => SET WINDOW SHIF MODIFY : MODIFY peut etre utilisee avec differentes options. MODIFY FREQUENCY MODIFY VELOCITY MODIFY RECENTER en ce qui concerne le lien avec SHIF. Cela permet de modifier l'echelle des frequences (FREQUENCY), de modifier le canal de reference (RECENTER ou LET REFERENCE x) et de recentrer ce canal de reference sur une frequence donnee (MODIFI VELOCITY). L'axe des abscisses n'est modifie en consequence qu'a l'issue d'un nouveau PLOT ou CLEAR puis BOX. SHOW PLOT : Trace le spectre dans la fenetre graphique. Cette fenetre doit avoir ete prealablement definie par DEVICE XAUTO WHITE (pour un terminal X). Un fois le spectre charge en memoire par GET (voir LOAD => GET et READ => GET), PLOT affiche successivement une fenetre vide (CLEAR), la boite determinant les abscisses et les ordonnees (BOX), le spectre (SPECTRUM) et le titre (TITLE). Ce trace prend toute la place disponible dans la fenetre. ( voir aussi LOOK => STAMP et les remarques sur SET BOX_LOCATION). ATTENTION : L'instruction SHOW existe dans CLASS mais sert a afficher dans la fenetre alphanumerique different parametres definis par SET (SET MASK, SET NUMBER...) SHOM DRAW MASK : On peut representer les intervalles masques par SET MASK ou par SET WINDOW sur le graphe en effectuant un DRAW MASK ou un DRAW WINDOW. Il est possible de specifier l'ordonnee a laquelle cet affichage va etre effectue. voir aussi SETM => SET MASK SIGM SIGMA : variable globale du header ???? SINR SINH : SIN : voir COSR => COSH => COS SMOO SMOOTH : On retrouve des types de lissage communs a SIR : par defaut, lissage "hanning-smooth" "boxcar-smoothing" ... Le lissage est effectue sur le tableau R, ce dernier etant prealablement copie dans le tableau T. SOMM SUM : Integre les spectres dont les numeros sont dans le tableau INDEX. Ces numeros sont definis par la fonction FIND qui travaille sur les criteres de recherche qui lui sont imposes par l'instruction SET. Voir CRIT => SET et CIDX => FIND SUM verifie la coherence des positions des spectres ainsi que l'homogeneite des calibrations. SORT inexistant : Il faut creer une procedure de tri. Les seuls tris efficaces du marche etant bases sur des algorithmes recursifs, il sera difficile d'obtenir un tri rapide a partir d'une procedure CLASS puisque la recursivite y est interdite. SQRT SQRT : Meme fonction que dans SIR. Elle retourne la racine carre de la valeur qui lui est passe en argument. ex : DEFINE INTEGER A DEFINE REAL B LET A = 5 LET B = SQRT(A) STOP EXIT : Instruction de terminaison du programme CLASS. SUBT "-" : Pour effectuer une soustraction, utiliser l'operateur mathematique classique "-". ex : DEFINE INTEGER A DEFINE REAL B C LET A = 3 LET B = 2.5 LET C = (A-B) TYPE SAY : voir MESS => SAY VISM SHOW MASK : visualise a l'ecran les masque actuellement definis. WRIT WRITE :Ecrit le spectre actuellement dans le tableau R dans le fichier de sortie (determine par FILE OUT nom_fic). Si le numero du spectre existe deja, une nouvelle version est cree, laissant intact la version precedente. Sinon un nouveau spectre est cree dans ce fichier. L'instruction UPDATE permet d'ecraser un spectre apres modifications. Le spectre de depart est efface puisque le nouveau le remplace avec toutefois l'incrementation du numero de version. ex : FILE BOTH toto.nan ! en entree et en sortie FIND/ALL GET FIRST SET UNIT C KILL 100 WRITE ecrit les modifications dans une nouvelle entree du fichier resultat qui sera placee a la fin. FILE IN toto.nan FILE OUT essai.nan NEW FIND/ALL GET FIRST WRITE si "FIRST" n'existe pas dans essai.nan, il sera cree. FILE BOTH toto.nan FIND/ALL GET FIRST UPDATE On ecrase le spectre designe par FIRST. A l'issue de l'UPDATE, il n'y aura pas de spectre en plus dans le fichier mais le numero de version de "FIRST" aura ete incremente quand meme. WTSY inexistant : voir RDSY => inexistant ----------------------------------------------------------------- INSTRUCTIONS CLASS N'AYANT PAS D'EQUIVALENT DANS SIR. beaucoup d'instructions de CLASS ne possedent pas d'equivalent sous SIR, soit parce que le concept n'existe pas (par exemple les nombreuses manipulations graphiques de CLASS) soit parce que CLASS offre une fonctionnalite de plus dans un domaine tout de meme present dans SIR. Les instructions suivantes presentes les "inovations" les plus importantes. La notion de type de variables : Chaque variable SIC (et donc CLASS) possede un type c'est a dire qu'on lui attribue, des sa creation, un domaine d'existance en terme de valeurs. Une variable de type INTEGER ne pourra contenir que des valeurs entieres, le type CHARACTER n'acceptera que des valeurs alphanumeriques, etc... On rencontre ainsi des INTEGER, CHARACTER, REAL, LOGICAL. On peut evoquer ici la possibiliter de declarer une fonction de la meme maniere qu'une variable. Cela a ete discute dans la comparaison ci-dessus : EVAL => inexistant. Manipulations graphiques : Ce domaine est plus riche dans CLASS que dans SIR et apporte donc beaucoup de nouveautes. DRAW TEXT : Afficher du texte sur un graphique a une position determinee par ses coordonnees en centimetres. BOX, SPECTRUM, TITLE : CLEAR SEGMENT: CHANGE VISIBILITY segname OFF: On peut afficher uniquement certaines portions d'un graphique, c'est a dire la fenetre et ses axes gradues, le spectre, son titre. Ces elements sont appeles par CLASS des segments. Le segment le dernier afficher peut etre effacer par CLEAR SEGMENT et ZOOM REFRESH. Cela n'est valable que pour la derniere operation graphique (principe des piles Last In First Out). Si l'on souhaite effacer un segment qui n'est pas le dernier on peut avoir recours a CHANGE VISIBILITY spectrum OFF puis ZOOM REFRESH. SET BOX_LOCATION : Determine les positions d'une boite destinee a contenir un spectre. On peut ainsi afficher autant de boites que l'on veut aux emplacements que l'on desire. La commande SPECTRUM dessinera le spectre dans la derniere boite definie mais rien n'empeche de reiterer la commande SET BOX_LOCATION sur une position deja existante pour en effacer le spectre ou en mettre un nouveau. CREATE DIRECTORY : CHANGE DIRECTORY : CREATE WINDOW : CLEAR TREE, WINDOW, WHOLE : Il est possible d'utiliser plusieurs fenetres (au sens X11) en meme temps dans CLASS. L'existance de ces fenetres est construite sous forme d'arbres. CREATE DIRECTORY permet de creer une nouvelle instance de la classe fenetre, identiques a la fenetre par defaut ouverte par DEVICE XAUTO. Pour aller travailler dans cette fenetre il faut changer de repertoire (CHANGE DIRECTORY). On peut egalement creer des fenetres de taille definie grace a CREATE WINDOW. CLEAR TREE, WINDOW, WHOLE efface l'arborescence des fenetres, une fenetre ou la totalite de la structure de description.