MÉTHODE DE RÉDUCTION DES IMAGES EN IMAGERIE DIRECTE:

LA RECHERCHE D'ÉTOILES C DANS LES GALAXIES IRRÉGULIÈRES DU GROUPE LOCAL, IC1613 ET NGC3109.

  1. DESCRIPTION DU PROJET SCIENTIFIQUE
  2. DESCRIPTION DES OBSERVATIONS MENÉES AU TÉLESCOPE
  3. ÉTAPES DE RÉDUCTION AVEC IRAF EN ÉCRITURE (12mai99)
  4. SOMMAIRE DES ÉTAPES D'ANALYSE AVEC DAOPHOT / ALLSTAR / ALLFRAME EN ÉCRITURE (23août99)
    1. Introdution. NOUVEAU (23 août 99)
    2. Ordre des manipulations. NOUVEAU (23 août 99)
    3. Trouver le bon threshold. NOUVEAU (23 août 99)
    4. Trouver la première PSF. EN ÉCRITURE (23 août 99)
    5. Script Unix pour parfaire la PSF avec dépendance radiale (va=0 à va=2) à partir d'une PSF approximative. EN ÉCRITURE (23juillet99)
    6. Script Unix pour parfaire la PSF uniforme sur tout le champ (va=0) à partir d'une PSF approximative. EN ÉCRITURE (23juillet99)
    7. Script Unix pour trouver une liste complète d'étoiles et sa photométrie ALLSTAR à partir de la PSF finale. EN ÉCRITURE (23juillet99)
  5. TRANSFORMATION DE PIXELS EN COORDONNÉES CÉLESTES AVEC IRAF ET SKYCAT NOUVEAU (14juillet99)

DESCRIPTION DU PROJET

Je suis associé à Serge Demers et Bill Kunkel (Carnegie Institute). Nous sommes à la recherche d'étoiles C dans les galaxies du Groupe local. Les étoiles C nous serviront bientôt à tracer la courbe de rotation de ces galaxies. À ce jour, aucune galaxie exceptés les Nuages de Magellan ne possède de courbe de rotation stellaire. Quelques chercheurs ont déterminé la courbe stellaire près du centre de certaines galaxies, mais nous voulons la courbe jusqu'au rayon optique. Les résultats obtenus par Kunkel et al. (1997) montrent que les masses du Grand nuage déduites par la courbe HI et la courbe "étoiles C" sont différentes: la courbe stellaire donne une masse bien plus petite que la courbe HI.

Malheureusement, le Grand nuage de Magellan n'est pas exactement une galaxie spirale très équilibrée: la Voie lactée et le Petit Nuage de Magellan exercent des forces de marée non négligeables. Voilà pourquoi nous voulons étendre l'étude à d'autres galaxies. Nous choisissons les plus proches. Les étoiles C ont beau être très brillantes, elles ne sont toujours que des étoiles et leur magnitude apparente est d'environ I=20 à la distance de M31.

La première étape du projet consiste donc à découvrir des étoiles C dans les galaxies qui nous intéressent. Nous procédons selon la méthode de Brewer et al. (1995, 1996) qui utilisent des observations photométriques dans 4 bandes. Les filtres R et I sont utilisés pour découvrir les étoiles les plus rouges et les plus brillantes de la branche asymptotique des géantes (sur laquelle se trouvent les étoiles C); et deux filtres étroits sont positionnés, l'un sur le "continu" à 770 nm, l'autre dans une raie d'absorption moléculaire de CN présente à 810 nm dans les spectres d'étoiles C. C'est pour différencier les étoiles C des étoiles M géantes qui sont à la même position sur le diagramme H-R. Pour en connaître plus sur les étoiles C, vous pouvez consulter le deuxième chapitre de mon mémoire.


DESCRIPTION DES OBSERVATIONS MENÉES AU TÉLESCOPE

Nous avons eu trois missions au télescope DuPont (2.5m) à Las Campanas, au Chili en novembre 1998 (Kunkel), en décembre 1998 (Albert et Kunkel) et en mars 1999 (Kunkel) pour un total de quatre nuits et demie pendant la pleine lune (grâce à des missions d'ingéniérie(!) déguisées). Nous avons observé IC1613 et NGC3109 avec le réducteur focal et un Tek5 qui donnent un champ de 25' à une échelle de 0.7"/pixel.

Notre stratégie ambitieuse était d'obtenir des images à grands rayons du centre des galaxies (pour avoir des courbes de rotations aux plus grands rayons possibles). Nous avons imagé les galaxies en deux champs (est et ouest). Nous avons utilisé 1/2 nuit pour chaque côté de IC1613, et 1 nuit et 1/2 pour chaque côté de NGC3109. 1/2 nuit a été consacrée à Sculptor à travers un seeing médiocre.

Les poses étaient de l'ordre de 2 minutes en I (ciel très brillant à cause de la pleine lune!), 4 minutes en R, et 10 minutes dans les bandes étroites f770 (sur le continu) et f810 (dans la bande d'sbsorption). Le détecteur est un 2kx2k, 2^15 tons de gris.

Le principal inconvénient de ce setup est qu'il donne une mauvaise échelle pour étalonner la PSF (Point Spread Function). Le FWHM (Full Width at Half Maximum) est d'environ 1.3 pixels (soit 0.9" de seeing). On deal avec cet inconvénient dans l'analyse finale de la photométrie avec DAOPHOT, pas avant. Un deuxième inconvénient du setup est le vignetting sévère à cause du réducteur focal. En pratique, sur les 2048 pixels, seulement 1880 sont utilisés. Bref, un cadre sombre ceinture toutes les images CCD et ça introduit des difficultés non triviales dans l'étape de la réduction des données avec IRAF.


RÉDUCTION AVEC IRAF


  1. PRÉPARATION DES IMAGES: ENLEVER LES ZÉROS

    1. rfits les zero fits @listezero.fits --> @listezero.imh
    2. Combine les 15 zero avec zerocombine @listezero.imh --> Zero.imh
    3. Fait une liste des champs, des flats, de toute image sauf celles des zéros et l'appeler listepourzeroer (images .fits)
    4. Soustraire le Zero.imh de la listepourzeroer avec ccdproc
      images = @listepourzeroer
      trim et zerocor = yes
      les autres = no
      biassec=[2049:2064,1:2048]
      trimsec=[1:2048,1:2048]
      zero = Zero.imh
    5. Le résultat de cette opération est de transformer tous les .fits en .imh (zéro enlevé, trim fait donc image de 2048x2048).

  2. PRÉPARATION DES DOMEFLATS OU DES SKYFLATS

    1. Comprendre à quoi sert un flatfield. Voir IV.
    2. Le zéro est déjà soustrait des flats.
    3. Faire une liste des bons flats* pour chaque filtres qui s'appellent:
      listedome[I,R,770,810]a pour novembre 1998
      listedome[]b pour decembre 1999
      *Vérifier que chaque flat est bon, qu'il ne dépasse pas environ 28000.
    4. Combiner les flats de chaque filtre avec flatcombine
      flatcombine:
      Dome[I,R,770,810]a
      average=avsigclip
      process=no
      statsec=[600:900,400:1600]
    5. Normaliser les domeflats. Il faut utiliser imsurfit pour normaliser les flats. Cette étape consiste à mettre les flats à un niveau moyen de 1.
      Imsurfit:
      Dome[I,R,770,810]a
      Domenormal[]a
      1 1 response leg
      ...
      regions=circle
      ...
      circle=1043 990 925

  3. DIVISION DES IMAGES PAR LE FLATFIELD

    Deux méthodes possibles:
    1. On n'efface pas les images non-flatfieldées, tâche imarith (pour être en sécurité).
    2. On écrit par-dessus les images non-flatfieldées, tâche ccdproc (pour économiser de l'espace-disque).

    Méthode A:
    1. Créer une liste des images à flatfielder, listeimages.
    2. Créer une liste de même dimension des flatfields correspondants à chacune de ces images, listeflats.
    3. Créer une dernière liste des images résultantes, listeresultat. Si vous ne voulez pas encombrer votre disque en créant d'autres images, donc que vous nommez les images résultantes du nom des images de départ, alors utilisez plutôt la tâche ccdproc (je parle de cette alternative un peu plus loin). Cette méthode-ci a l'avantage de conserver intacte vos images départ au lieu de réécrire dessus. C'est utile si vous vous rendez compte d'une erreur plus tard.
    4. Diviser par les flats associés à chaque filtre en utilisant imarith. cl> imarith operand1=@listeimages op=/ operand2=@listeflats result=@listeresultat calctyp=real divzero=0

    Méthode B:
    1. Faire une liste des images pour chaque filtre, c'est-à-dire: listeI,listeR, liste770, liste810 contiennent toutes les images prises dans chaque filtre (I,R,770 ou 810).
    2. Diviser par les flats associés à chaque filtre en utilisant ccdproc.
      seul flatcor = yes
      @listeIa avec DomenormalIa
      @listeRa avec DomenormalRa
      @liste770a avec Domenormal770a
      @liste810a avec Domenormal810a
    conserve le champ avec contour = zero. 2) utilise images.median pour smoother 35x35 fait l'affaire. Ca donne un pas mal bon Illum810. *) Mais il reste pas mal de structures haute frequence nuisibles. pour demain, faire un sandwich de vraiment bons champs car zm.imh montre un fantome semblable a NGC3109 en haut de 3109. -->
  4. COMMENT FAIRE UN BON FLATFIELD?

    1. Lire flatfield pour comprendre les différentes façons de faire un flatfield.
      1. Utiliser de bons skyflats. Pour les nuits 23-24 novembre 1998--je n'en ai pas.
      2. Pour corriger un domeflat à l'aide d'un skyflat --> mkskyflat Pour les nuits 23-24 novembre 1998--je n'ai pas de skyflat.
      3. Pour corriger un domeflat pour son propre gradient à grande échelle (faire un illumination flat) --> mkillumflat La routine mkillumflat n'accepte pas les images circulaires et l'algorithme fitte dans les coins où c'est zéro.
      4. Pour faire des corrections secondaires post-flattage sur chaque image individuelle --> mkskycor (à partir d'un skyflat médiocre) ou mkillumcor (à partir d'un domeflat)
    2. J'ai fait des tests avec l'option 1.c) pour faire de bons flats mais sans succès.
      1. Transformer les flats @listeDomea pour que le contour soit à un niveau continu le plus proche du niveau moyen des bords.
        1. Dome[]a pup = Domecut[]a
        2. Domecut[]a + k*pupneg = Domenivele[]a
        3. mkillumflat de Domenivele[]a...
        *** cette méthode donne des résultats pas tout à fait satisfaisants. Une autre méthode consiste à...
        1. imsurfit de Dome[]a leg ordre 3 dans un cercle de 950 centré à 1043,990. Gardez le fit, Domefit[]a
        2. imarith: Domefit[]a * pupneg = tmp[]1 (un cercle vide avec des contours d'un niveau acceptable par la suite.
        3. imarith: Dome[]a * pup = tmp[]2 (le champ avec les contours à zéro).
        4. imarith: tmp[]1 + tmp[]2 = Domenivele[]a (l'intérieur du cercle contient le Dome[]a, l'extérieur, le fit extrapolé de Domefit[]a).
        5. Utiliser mkillumflat pour apporter une correction à l'illumination du Domeflat (Dome[]a) en utilisant Domenivele[]a. *** Cette démarche ne marche pas davantage. Je décide d'abandonner l'utilisation de mkillumflat.

    3. FABRICATION D'UNE IMAGE DE CORRECTION DES FRANGES D'INTERFERENCE.

      (voir fichier /imdir/loic/mars/moire/README)

      À MODIFIER

      Ce repertoire contient les images pour fabriquer une image des franges d'interference de Moire presentes dans les bandes I a Las Campanas. Le fichier listemoire contient les 7 images flatfieldees ayant servies pour construire MoireI. J'ai utilise imcombine avec median et crreject pour fabriquer MoireI. J'ai utilise imsurfit (response, 1, 1, leg) pour obtenir MoirenormalI. Le resultat est tres bon. L'image MoireI est tres peu bruitee. Les deviations standards sont de 30 sur un flux de 9100, soit environ 0.4% (un S/B > 200). Au fait, le patron de Moire ne change pas de nuit a nuit, meme de mission a mission. Il reste le meme.


    4. FABRICATION DE L'IMAGE DE CORRECTION D'ILLUMINATION POUR LES FILTRES 770 ET 810.

      Exposé du problème:

      Après avoir flatfieldé, le ciel n'est pas encore uniforme pour les images dans les filtres interférentiels. Il reste une structure lisse concentrique. Dans le filtre f770, le ciel est brillant au centre et et plus sombre vers les bords de l'image (image.gif). Pour le filtre f810, c'est le contraire. La difference bord-centre est de l'ordre de 10%. J'attribue ce phénomène aux raies du ciel qui qui interfèrent différemment au centre et au bord de l'image car les filtres n'étaient pas placé dans un faisceau vraiment parallèle au télescope. Ce problème ne se présente pas du tout pour les deux filtres à bande large R et I où; le fond du ciel est vraiment uniforme à moins de 1%. Solution: Je veux appliquer une correction de très bas ordre sur toutes les images prises dans f770 et f810 affligées de ce problème. Je divise les images par cette correction comme je diviserais une image non flatfieldée par le flatfield. Selon la tâche ccdproc de IRAF, ça s'appelle une correction d'illumination. Fabriquer l'image de correction n'est pas du tout trivial dans mon cas à cause des pourtours mis à zéro. Voici les étapes à suivre.

      Il existe plusieurs façons de fabriquer une image de correction d'illumination. Au fond, c'est simplement une image qui épouse le ciel, un fit de la surface. Et bien il s'avère difficile de faire un tel fit avec IRAF.

      • MÉTHODE IDÉAL

        Comme l'illumination du ciel est concentrique (centre brillant, bord sombres) on devrait tout bonnement faire un fit polaire de la surface de chaque image de IC1613 et NGC3109 dans les filtres f770 et f810. On laisserait le centre comme paramètre libre puis la tâche IRAF fitterait une fonction d'ordre 2 ou 3 radialement. Cela permettrait de rejeter la galaxie (qui se trouve sur le bord des images) du fit radial. Ça ne fitterait vraiment que le fond du ciel. MAIS, IL N'Y A PAS DE TÂCHE IRAF QUI FASSE DE FIT EN COORDONNÉES POLAIRES!

      • MÉTHODE IDÉALE DE RECHANGE

        Cependant, IRAF contient la tâche imsurfit qui fitte la surface d'une image le long des lignes et colonnes (en coordonnées cartésiennes). Ça réussit plutôt bien à fitter le ciel dans le filtre f770 avec une fonction de legendre d'ordre 2 (parabole). Mais pour le filtre f810, la surface n'est pas parabolique (le centre est plus plat et les bords plus pentus). Il faut un fit d'ordre supérieur. Mais alors, de sévères effets de bord apparaissent. Ça vient du pourtour du CCD mis à zéro à cause du vignetting. En fait, je pense que l'effet de bord existerait même si l'image occupait tout le CCD (j'essaierais quand même si mes images étaient bien carrées sans vignetting).

        En pratique, imsurfit fonctionne donc pour le filtre f770, mais sur quelle image doit on l'appliquer? Pas sur l'image scientifique seule, car ce n'est pas un fit polaire et la galaxie n'est pas rejetée comme point déviant par un fit cartésien (pensez-y un peu...). La galaxie influence donc le fit du ciel, ce qu'on ne veut pas. Il faut donc fabriquer une image du ciel avec le moins de pollution d'objets étendus. Il existe trois techniques.

        1. On peut combiner disons une demie-douzaines d'images de différentes cibles astronomiques avec un algorithme de réjection comme crreject dans imcombine. Ensuite on utilise imsurfit pour fitter une fonction d'ordre 2. Le désavantage: on obtient une correction moyenne qui s'appliquera à toutes les images utilisées alors qu'on sait très bien que l'illumination du ciel change au cours d'une nuit, par exemple quand la Lune se lève. Voici les détails avec IRAF.
        2. On peut utiliser qu'une seule image et appliquer des rotations puis combiner ces copies. Ensuite on utilise imsurfit pour fitter une fonction d'ordre 2. L'avantage: chaque image donne sa propre correction d'illumination (ce n'est pas une correction moyenne). Désavantages: C'est une technique plutôt longue, et l'illumination doit être absolument centrosymétrique. Voici les détails.

      • MÉTHODE NON-IDÉALE UTILISÉE

        Il existe une tâche nommée median dans IRAF qui filtre les images. Je l'ai utilisée sur chacune de mes images d'intérêt astronomique pour fabriquer ma correction d'illumination. median lisse une image pour ne laisser pratiquement que les structures basses fréquences. Les étoiles sont complètement fondues grâce à une boîte de lissage médiane de 51x51 pixels. De plus, les effets de bords sont inexistants. J'ai opté pour cette technique car chaque image génère sa propre correction d'illumination de façon simple. Voici les détails.


      ANALYSE AVEC DAOPHOT-II / ALLSTAR / ALLFRAME

        Introduction

        L'analyse consiste à extraire les magnitudes stellaires à partir des images. C'est une tâche non-triviale qui demande beaucoup de soins afin d'obtenir une bonne précision. Peter Stetson distribue un package de programmes FORTRAN qui effectuent plus que convenablement cette analyse. Il s'agit des programmes DAOPHOT-II (IRAF ne contient que la première version de DAOPHOT) qui détecte les étoiles et détermine une PSF, ALLSTAR qui mesure les magnitudes approximatives sur une image, et ALLFRAME qui détermine par itération les magnitudes des étoiles sur plusieurs images simultanément en fittant une PSF sur chaque étoile. Ces programmes sont installés sur le réseau d'astro. Il est essentiel de lire la documentation pour comprendre, sur venus, elle se trouve sur /usr/local/soft/daophot-II/ALLframe/cook2.2.ps (ALLFRAME) et /usr/local/soft/daophot-II/daophotii.tex (DAOPHOT ET ALLSTAR).

        Ordre des manipulations

        L'objectif avec DAOPHOT / ALLSTAR est de caractériser la PSF des sources stellaires dans l'image qui nous intéresse, c'est-à-dire, construire une PSF. Ça peut être très long car il faut procéder par itérations pour raffiner la solution finale. C'est donc aussi très répétitif. Voilà pourquoi j'ai écrit des scripts pour me faciliter la tâche. ALLFRAME utilise ensuite la PSF finale de chaque image pour déterminer la photométrie finale dans plusieurs images simultanément. Voici donc les étapes que je suis pour trouver la PSF finale:

        Pour tout ce qui suit, je suppose que la réduction des images (bias, flat field) est déjà faite.

      1. Trouver le bon threshold à utiliser.

        Par défaut, le seuil de détection des étoiles est à th=5 dans le fichier daophot.opt. Il faut quand même trouver le bon threshold pour chaque image. On peut faire ça à la main avec DAOPHOT en lançant FIND et en changeant le paramètre th puis en faisant un graphique du nombre d'étoiles détectées en fonction du paramètre th. Il faut alors choisir la valeur de th là où se situe le coude dans le graphique. J'ai mis au point un script qui fait ça plus rapidement, il lance FIND pour plusieurs valeurs de th différentes. Voici le script. Il n'est pas encore capable de déterminer tout seul automatiquement la bonne valeur de th. Il faut encore écrire ces valeurs dans un fichier et à déterminer comme avant le coude dans le graphique.

      2. Trouver une première PSF à la main.

        Il faut lancer DAOPHOT,

      3. SCRIPT UNIX POUR PARFAIRE LA PSF AVEC DÉPENDANCE RADIALE (va=0 À va=2) À PARTIR D'UNE PSF APPROXIMATIVE.

      4. SCRIPT UNIX POUR PARFAIRE LA PSF UNIFORME SUR TOUT LE CHAMP (va=0) À PARTIR D'UNE PSF APPROXIMATIVE.

      5. SCRIPT UNIX POUR TROUVER UNE LISTE COMPLÈTE D'ÉTOILES ET SA PHOTOMÉTRIE ALLSTAR À PARTIR DE LA PSF FINALE.

      TRANSFORMATION DE PIXELS EN COORDONNÉES CÉLESTES AVEC IRAF

      Vous voulez (ou vous devez!) transformer la position de vos objets en coordonnées célestes? Voici la méthode que j'ai utilisée. Elle met à profit IRAF.images.imcoords et le merveilleux Skycat. Tout ce qu'il vous faut, c'est un lien internet qui fonctionne, une liste de positions d'étoiles en x,y et l'image scientifique que vous voulez calibrer. Voici les étapes à suivre.

      1. Lancez Skycat et downloadez une image couvrant le champ de votre CCD. J'ai utilisé le Digitized Sky at ESO pour obtenir une image 30'x30' couvrant la partie ouest de IC 1613 que j'ai sauvegardée sur disque.

      2. Downloadez une liste d'étoiles d'un catalogue, toujours avec Skycat. Je suggère d'utiliser le USNO qui contient des étoiles très faibles (plus faibles que le Guide Star Catalogue) et qui est calibré avec les données Hipparcos. Il y a environ 500 étoiles du USNO dans mon champ. Je sauve cette liste sur disque.

      3. Il faut créer une liste de 3 étoiles avec les bonnes coordonnées x,y et ra,dec. Pour ça, j'ouvre deux fenêtres Skycat, l'une avec l'image du catalogue, l'autre avec mon image scientifique, et je mesure le mieux possible les positions de 3 étoiles. Je crée une liste "liste.3stars" du format suivant (sur deux lignes):

        ra1 dec1 ra2 dec2 ra3 dec3
        x1 y1 x2 y2 x3 y3

        qui servira dans ccxymatch pour une première solution approximative.

      4. Pour trouver une solution avec le plus grand nombre d'étoiles possible, il faut utiliser une liste de positions x,y (une liste ALLSTAR ou ALLFRAME, par exemple) et une liste de positions ra,dec (celle downloadée). On les croise avec ccxymatch pour trouver les étoiles en commun et trouver la meilleure solution. Assurez-vous que les listes n'aient pas de header, et que les données d'une étoile n'occuppent qu'une seule ligne (ça peut être un problème avec les listes de ALLFRAME). Ensuite, lancez IRAF.images.imcoords.ccxymatch. Les paramères importants sont:

        input = liste.xy
        referenc = liste.radec
        output = liste.matched.stars
        toleranc = 1 ou 2 ou ? secondes d'arc
        refpoin = liste.3stars
        lngcolu = colonne de liste.radec contenant les ra
        latcolu = colonne de liste.radec contenant les dec
        xcolumn = colonne de liste.xy contenant les ra
        ycolumn = colonne de liste.xy contenant les dec
        matchin = tolerance

        Ça produit une liste d'étoiles matchées (liste.matched.stars). Ajustez le paramètre toleranc pour incorporer plus ou moins d'étoiles. Ma liste contenait 227 étoiles.

      5. Enfin, pour calculer la solution précise, utilisez ccmap. Voici les paramètres importants:

        input = liste.matched.stars
        database = database_des_solutions
        solutio = solution_1
        images = votre image scientifique en format fits (ou imh?)
        lngcolu = colonne de liste.radec contenant les ra
        latcolu = colonne de liste.radec contenant les dec
        xcolumn = colonne de liste.xy contenant les ra
        ycolumn = colonne de liste.xy contenant les dec
        update = yes

        Il y a d'autres paramètres pour parfaire votre fit. Vous pouvez les changer interactivement. C'est ce que j'ai fait pour améliorer la solution. Le paramètre update écrit la solution dans le header de votre image si bien que lorsque vous ouvrez ensuite l'image avec Skycat, les coordonnées apparaissent! N'est-ce pas fantastique!

      6. Il est bon de faire une deuxième itération pour parfaire le fit initial utilisé dans ccxymatch et ainsi matcher un plus grand nombre d'étoiles. Il s'agit donc de refaire un fichier liste.3stars avec des coordonnées x,y plus précises. Pour ça, il faut trouver les coordonnées x,y dans le fichier liste.matched.stars correspondant à trois étoiles qui sont bien fittées (on évalue ça en regardant l'image scientifique avec Skycat). Puis on recommence les étapes précédentes avec le nouveau fichier liste.3stars. J'ai obtenu une précision de l'ordre de 0.3" sur ma solution finale.

      7. Pour transformer ma liste de 200 étoiles C avec des positions x,y, j'ai utilisé cctran qui a changé toutes mes positions x,y en positions ra,dec selon la solution donnée par ccmap. Les paramètres importants sont:

        input = liste.cstars.xy
        output = liste.cstars.radec
        database = database_des_solutions
        solution = solution_1
        xcolumn = 2
        ycolumn = 3

        J'ai ainsi réussi à déterminer la position de mes étoiles avec une dispersion de l'ordre de 0.3".