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) ?
- Une donnée peut être référencée par son fichier/table/numero de ligne. Il faut trouver une clé magique qui permettrai de s'abstraire au moins du numero de ligne mais aussi du nom de fichier pour permettre de reassocier des données selectionnées parmi des données issues de la même source mais apparaissant à plusieurs étages de filtrage.
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