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.
  • Enlever un fichier de la liste des fichiers chargés

On obtient un modèle en mémoire de tous les fichiers chargés, appelée OIFitsCollectionOriginale. Elle sert de base à tous les traitements ultérieurs (filtrage, plot ...)

Design: Doit-on cloner cette structure pour la garder intacte à tout instant de la vie de l'application (transformation, filtrage ...) ?

pour l'instant non (filtrage = extraction / restriction) mais il faudra créer une nouvelle structure OIFits pour y stocker les résultats d'une transformation (merge, binning ...).

Analyse

Pour chaque fichier OIFits, une analyse est réalisée pour interpreter les données: permet de détecter les éléments communs (targets, stations/baselines/configurations, plage min/max wavelength);
  • Doit-on analyser d'autres informations (temps) = savoir quels sont les pas de temps (dates d'observations ...) ?
  • Quelles sont les formules d'interprétation du 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 valeurs de INSNAME = instrument + mode instrumental (catégorisation par code couleur) ?
  • Faut il afficher les tables individuelles (ex: LITPRO) ? Comment identifier chaque table parmi toute celles chargées ? càd un identifiant unique = (fichier, vis2, arrayname, insane, nb de points, ...) ? VIS2#1 [8 points - INSNAME=PIONIER_1.5_1.8] ...

Au niveau de la collection globale OIFitsCollectionOriginale, une analyse de haut niveau est réalisée pour regrouper les données relatives à une même étoile (target): TODO crossmatch: quel identifiant utiliser (nom ou ra/dec) ?

On obtient un mapping oiFitsPerTarget qui contient les tables de données par étoile.

Le logiciel ne travaille que sur les tables de données (VIS/VIS2/T3 = OIData): à discuter.

Faut il afficher les autres tables sous forme de table ? comment y accéder ?

Présentation

  • Doit-on pouvoir afficher la structure et headers des fichiers ? NON à priori.
  • Afficher les données sous forme de table:
    • 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 ?
    • afficher les colonnes dérivées ? indices (numéro de ligne)
    • comment afficher les valeurs dépendantes de la longueur d'onde (tableau de tableau) ? ou plusieurs colonnes: (EFFWAVE_1?) VIS2DATA_1, VIS2ERR_1, VIS2_FLAG_1, VIS2DATA_2...
    • conversions à faire (temps julien, ...) ?
    • 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 ?
  • Comment gerer l'affichage de plusieurs tables (1 à la fois) ?

Parcours

  • Doit-on garder/naviguer par le nom/chemin des fichiers ? NON.
  • Est-ce que le nom de fichier doit pouvoir servir pour identifier des données dans des plots (valeur/symboles) ? NON.
  • Identification d'une donnée:

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.

Comment faire ? proposition = MJD+U+V (VIS/VIS2), MJD+U1+V1+U2+V2 (T3) Comment déduire le lien entre VIS/VIS2 et T3 ? utiliser U+V vs U1+V1 ou V2+V2 ou (U1+U2)+(V1+V2) ? Risqué donc à ne pas faire.

Filtrage

  • Comment filtrer par dates/heures ?

  • Notion de subset:
1 subset est le concept associant:
  • une target définie
  • une selection de tables (pour l'instant: à supprimer ?)
  • des filtres:
    • lambda (min/max)
    • filtre générique: COLUMN OPERAND VALUE

1 subset ne s'applique qu'aux tables de données (VIS/VIS2/T3)

Transformation

  • Flagger les données:
    • Directement par sélection depuis les plots;
    • Suivant une valeur de barre d'erreur maximum ?
    • Par date ?
  • Modifier les données:
    • Comment les sélectionner ?
    • Moyenne, binage, ...
    • Comment exprimer les modifications complexes (formules, langage de script) ?
  • Quid des binages complexes ? plugins ???

Note: un merge de plusieurs OIFits n'est pas une transformation mais un export d'OIFits de la session...

Export

  • Export d'un subset au format OIFITS (merge): il faut dans ce cas supprimer les redondances de méta-données (target name, arrname, ...): Quelles sont les règles de 'merge' (OI_TARGET, WAVELENGTH, ARRAY) - fixer toutes les références en conflit(target_id, sta_index, et keywords insname, arrname) ?
  • Exporter un plot au format ASCII;
  • Exporter un plot au format PDF; cas de plusieurs plots ?

Plots

  • Choisir des symboles de point, mais en fonction de quoi ?
    • quid de la légende ?
  • 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

  • Le fichier de session :
    • contient le chemin vers les fichiers oifits * définir les cas d'erreurs cf checksum aspro2 pour les fichiers non trouvés
    • pourrait être exporté sous forme d'archive (data+session)

  • 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 ANGLE/ BASE PROJETEE / BASE

RADIUS = BASE PROJETEE = longueur de la base dans le plan UV (projetee) (m) = SQRT(U² + V²)

Rappel:

  • Frequence spatiale projetee = SPATIAL_FREQ = SQRT(U² + V²) / EFF_WAVE (Mlambda) = RADIUS / EFF_WAVE
  • effWave = longueur d'onde centrale du canal spectral

ANGLE = angle de position de la base (deg) (0 on V axis - East of North convention): TAN ANGLE = U / V

=> ANGLE = ATAN2(UCOORD,VCOORD)

Pas vraiment de sens pour les clotures => donner l'angle de la base max !

 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 -- LaurentBourges - 28 May 2013

Edit | Attach | Watch | Print version | History: r7 < r6 < r5 < r4 < r3 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r7 - 2013-05-28 - LaurentBourges
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2020 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback