Spécification Technique oiFitsExplorer
Ce topic à pour objectif de définir les fonctions à implémenter dans le logiciel.
Les Données
Chargement
- On ne modifie/écrase jamais un fichier original.
- Ouvrir en lecture seule (en local/en distant) plusieurs OIFits complexes : assuré par OITools/OIFitsCollectionManager.
- Charger en lecture seule plusieurs fichiers de l'OIDB : à faire (SAMP).
- Valider chaque fichier : OITools.
On obtient un modèle en mémoire de tous les fichiers chargés, appelée
OIFitsCollectionOriginale : doit-on cloner cette structure pour la garder intacte à tout instant de la vie de l'application ?
Analyse
- Doit-on factoriser automatiquement toutes les informations/tables redondantes (crossmatch des targets, les wavelengthes, les oi_array) ?
- Pour l'instant on garde tout, et une analyse permet de détecter les éléments communs (targets, stations/baselines/configurations, plage min/max wavelength);
- Doit-on analyser d'autres informations (temps) ?
- On calcule des données dérivées rajoutées comme colonnes virtuelles dans les objets OIData (fréquence spatiale, effective wavelength, configuration des stations);
- Il faut rajouter les bases projetées, l'angle de position de la base, l'angle horaire, le temps;
- Comment interpréter les INSNAME pour catégorisation par code couleur ?
- Comment interpréter les différents modes instrumentaux ?
- Comment identifier chaque table parmi toute celles chargées ? Quel identifiant (fichier, vis2, arrayname, insane, nb de points, ...) ?
Présentation
- Doit-on pouvoir afficher la structure/header des fichiers ?
- Afficher les données sous forme de table:
- Quoi afficher ? Une table ? Toutes les tables ?
- Doit-on pouvoir trier par colonne ?
- Sélection continue/discontinue par l'utilisateur ?
- Mise en surbrillance d'un ensemble de valeurs sélectionnées dans un plot ?
- doit-on afficher les données et identifiants bruts, ou afficher les références résolues (index n°1 ou ETA_TAU dans la case TARGET_ID) avec tous les risques d'ambiguité que cela peut engendrer ?
- y-a-t'il des conversions à faire (temps julien, ...)
- doit-on afficher les colonnes dérivées ?
- comment afficher les valeurs dépendantes de la longueur d'onde (tableau de tableau) ?
Parcours
- Doit-on garder/naviguer par le nom/chemin des fichiers ?
- Est-ce que le nom de fichier doit pouvoir servir pour identifier des données dans des plots (valeur/symboles) ?
Filtrage
- Comment filtrer par dates/heures ?
- Quelles sont les formules d'interprétation du temps ?
Transformation
- Flagger les données:
- Directement par sélection depuis les plots;
- Suivant une valeur de barre d'erreur maximum ?
- Par date ?
- Merger des données:
- Merger des fichiers différents ?
- Merger des tables différentes ?
- Quelles sont les règles de décision en cas de redondances des informations ?
- Modifier les données:
- Comment les sélectionner ?
- Moyenne, binage, ...
- Comment exprimer les modifications complexes (formules, langage de script) ?
- Quid des binages complexes ? plugins ???
Export
- Suppression des redondances de méta-données (target name, arrname, ...) ?
- Exporter un graphe au format ASCII;
- Exporter un graphe au format PDF;
Plots
- Choisir des symboles de point, mais en fonction de quoi ?
- Comment superposer des jeux de données différents ?
- Liste des plots particuliers:
- Plan UV;
- Plan de l'interféromètre ?
- Synchronisation des sélections entre plots ?
- Cohérence des couleurs et symboles entre plots ?
Les Sessions
- Quels réglages doit-on conserver d'un lancement à l'autre de l'application ?
- Quels réglages doit-on pouvoir exporter pour transmission à un collègue ?
Les Recettes
Annexes
Calcul HA / ANGLE / BASE
RADIUS = SQRT(U² + V²)
BASE = RADIUS * sin(angle) ?
let
MyName['a_'] "ANGLE"
let
MyErr['a_'] 0
let
MyText['a_'] "UV position angle (degrees)"
let
MyFunc['a_'] "180|pi*atan2(Y,X)"
let
MyNpars['a_'] 2
let
MyUnit['a_'] "SPACE"
let
MyVar[1,'a_'] "OI_DATA%OI_VIS2%COL%UCOORD"
let
MyVar[2,'a_'] "OI_DATA%OI_VIS2%COL%VCOORD"
hour angle computation from Aspro1
let x OI_DATA%OI_ARRAY%ARRAYX
let y OI_DATA%OI_ARRAY%ARRAYY
let z OI_DATA%OI_ARRAY%ARRAYZ
let oi%arraylat atan2(z,sqrt(x^2+y^2))
let oi%arraylat 180|PI*oi%arraylat
let oi%arraylon atan2(y,x)
let oi%arraylon 180|PI*oi%arraylon
!
! formula necessary for hour angle . Do it for v2
! retrieve DAY MONTH YEAR HOUR MIN SEC
! note MJD = JD - 2400000.5 . MJD2000=51544.0
! use j2000 as julian days (+ or -) starting at 1-JAN-2000 12:00 UT
!
define double j2000 /like OI_DATA%OI_VIS2%COL%MJD
define double julcen gmst Om L L1 dp de eps dT gast lmst last /like j2000
if (exist(oi%ha)) then
delete /var oi%ha
endif
define double oi%ha /like j2000 /global
let j2000 OI_DATA%OI_VIS2%COL%MJD-51544.5
let julcen j2000/36525.0
let gmst mod(280.46061837+360.98564736629*j2000,360.0)
let Om mod(125.04452-1934.136261*julcen,360.0)*PI|180 !ascending node of sun
let L mod(280.4665+36000.7698*julcen,360.0)*PI|180 !MeanLongOfSun
let L1 mod(218.3165+481267.8813*JULCEN,360.0)*PI|180 !MeanLongOfMoon
! change in the ecliptic longitude of a star due to the nutation
! (good to about 0.5arcsec)
let dp -17.2*sin(Om)-1.32*sin(2*L)-0.23*sin(2*l1)+0.21*sin(2*Om) !degrees
! shift in angle between the ecliptic and equator (good to about
! 0.1 arcsec)
let de 9.2*cos(Om)+0.57*cos(2*L)+0.1*cos(2*l1)-0.09*cos(2*Om) !degrees
! Obliquity of the Ecliptic
let eps 23.43929111-46.815/60/60*julcen !degrees
! difference between Mean and Apparent Sidereal Times
let dT dp*cos((de+eps)*PI/180)/3600
! Greenwich Apparent sidereal time
let gast gmst+dT
! Local Mean Sidereal
let lmst gmst+oi%arraylon
! Local Apparent Sidereal Time
let last gast+oi%arraylon
let oi%ha (last-oi_data%oi_target%COL%RAEP0)|15.0D0
delete /variable j2000 julcen gmst Om L L1 dp de eps dT gast lmst last
--
SylvainLafrasse - 07 Feb 2013