; INFOS UTILES SUR VERIF_ANTENNES ; ; Modules necessaires pour VERIF_ANTENNES (le suffixe ".pro" est sous-entendu): ; /home/mercier/calib (Meudon) ; rh_corr_antennes rh_dp_calib_sub rh_dp_calib_con ; rh_harm_n_vis rh_image_con ; ; /home/mercier/rh_gene (Meudon) ; rh_harm_n_vis init_malax_2d ; ; (ces modules sont directement accessibles grace au IDL_PATH defini dans le ; .cshrc) ; Creation : 29 nov 2005, a partir de RH_CALIB_CON, dont c'est une version ; simplifiee. ; ; But : visualiser le remplissage du plan uv, de facon a detecter la presence ; d'antennes en panne, et les eliminer ensuite du traitement des donnees ; solaires. ; Cela est important pour le CLEAN, faute de quoi le CLEAN pourrait pro- ; duire de tres forts artefacts (ex cas du 24 sept 2001, ou il manquait ; presque toutes les antennes NS impaires). ; Recommandations : ; Pour bien voir l'absence eventuelle de certaines antennes, il vaut mieux ; que la fonction de visibilite soit aussi etendue et uniforme que possible ; dans le plan uv => integrer sur un continuum ou un sursaut aussi compact ; que possible. ; PLAN DE LA PARTIE DE VERIF_ANTENNES D'INTERET POUR L'UTILISATEUR : ; . parametres usuellement modifies, ; . parametres figes ; . choses automatiques ; . programme lui meme. ;______________________________________________________________________________ ; MODIFICATIONS : ;______________________________________________________________________________ PRO VERIF_ANTENNES ; DEBUT DES PARAMETRES DE DEFINITION (NON FIG'ES) ; Repertoire du fichier pref_dir = '/poub/extraits/mercier/' ; pref_juke = '/juke/10sec/INT0109C/' ; exemple pour le juke ; Nom de fichier nomfich = pref_dir + '2i051114.30' ; 10sec 19:44-23:29 rot NS0 H2 H4 pointe ; nomfich = dir_juke + '2i010924.01' ; 08:13-15:12 (ex. de NS manquantes). ; Debut et fin d'integration t_deb = [20, 30, 00, 00] & t_fin = [20, 55, 00, 00] ; Parametres de l'observation num_freq = 0 ; numero de frequence, de 0 a 6. i_polar = 0 ; 0 Stokes I, 1 Stokes V . sel_ant = $ ; Drapeaux d'utilisation des antennes. Laiss'e avec ; les parametres non fig'es car une antenne mise a ; zero peut servir de repere. [ 1, 1, 1, $ ; E2 E1 E0 ; 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,$ ; H1 H2 H3 H4 H6 H6 H7 NS0_ew H9 H10 H11 H12 H13 H14 H15 H16 ; 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, $ ; NS0 NS1 NS2 NS3 NS4 NS5 NS6 NS7 NS8 NS9 NS10 NS11 NS12 NS13 NS14 ; 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, $ ; NS15 NS16 NS17 NS18 NS19 NS20 NS21 NS22 NS23 NS45 ; 0, 0, 0, 0] 1, 1, 1, 1] ; AA1 AA2 AA3 AA4 ; FIN DES PARAMETRES NON FIG'ES et de la partie mofifiable. ;___________________________________________________________________________ ; DEBUT DES PARAMETRES FIG'ES (heritage de H_CALIB_CON) t_integ = 60 ; temps d'integration original (1 ou 60 sec uniquement) amul = 1000.0 ; coeff multiplicateur du niveau de parasites toleres ; defini plus bas. ; Choix des controles ; usuel a Nancay : icon_1 = 1, icon_2 = 1, icon_3 = 1, icon_4 = 0 icon_1 = 0 ; 1 pour trace images 1D EW et NS icon_2 = 0 ; 1 pour trace TF image 1D EW icon_3 = 0 ; 1 pour trace TF image 1D NS icon_4 = 1 ; 1 pour trace image 2D (et visibilite 2D avec .c) . ch_siz = 1.4 ; taille des caracteres pour xyouts. Usuel 1.3 . FIGE n_win = 4 ; numero de fenetre de sortie pour image 2D FIGE ; (usuel 4, 12, 20 pour des comparaisons). ; Indifferent si icon_4 = 0. ; On ajoute automatiquement 4 plus bas si i_recalib ; = 1 (pour comparer non recalibre et recalibre). fr_z = [1.0, 0.50] ; fraction de zooming [sur im_2D, sur TF_2D]. >0.37 ; Corrections possibles : ; . recalibration complete avec un fichier de type "coeff_corr", obtenu ; par un passage de RH_DP_CALIB (options avec et sans usuelles ; toutes les deux). ; . correction de position des antennes (implantation irreguliere), ; obligatoire apres le 12 mai 04. Commentaires detailles dans ; CORR_POS_ANT (fichier RH_CORR_ANTENNES) ; . correction de depointage des antennes H (option avec usuelle) ; . correction "manuelle" de gains apparents contenus dans un fichier ; ch_cor_man. Gouvernee par le parametre i_corr_man, usuellement ; mis a zero plus bas. i_soustrac_comp = 0 ; pour exciser une source compacte secondaire sur le ; soleil. Utile pour le cas du 27 aug 02. USUEL 0 ; PARAMETRES D'EXCISION XM2, YM2 DEFINIS PLUS BAS. i_source_cal = 1 ; source de calibration ou de recalibration : ; 0 soleil, 1 Cygne, 2 Vierge, 3 Hydre. ; Sert uniquement a CORR_POS_ANT (RH_CORR_ANTENNES) ; MIS D'OFFICE A 1 SI i_recalib=0 (la calibration ; d'origine est toujours sur le Cygne). h_cal = [18, 15] ; heure de calibration, indifferente pour observations ; apres 1 nov 2003 (uasge des AA), car figure alors ; dans l'entete du fichier. Sert a CORR_POS_ANT. ; Ecrasee par h_recal (tiree de ch_cor) dans le cas ; d'une recalibration. ; Recalibration complete dir_cor = '/home/mercier/coeff_corr/' ; FIGE (repertoire fichiers recalib) i_recalib = 0 ; 1 pour recalibrer (avec fichier identifie par ch_cor) ; L'heure de recalibration est extraite plus bas de ; ch_cor. ch_cor = '18_sep_01_19:45' ; Fichiers obtenus apres revision de CALIBRATION du 4-7 jul 2005 : ; '14_nov_05_20:00' '14_nov_05_21:00' ; Recalibration manuelle ; Le fichier dir_cor_man/ch_cor_man contient: ; . 12 lignes commentaires ; . phi_ew_ns et phi_w_e en format 2i8 ; . 5 lignes commentaires ; . g_amp et g_phi sur 44 ou 48 lignes (nbre auquel on adapte i_AA) i_AA = 1 ; 1 si antennes AA figurent dans fichier ch_cor_man. ; Toujours bien preciser, car sert a initialisation. i_corr_man = 1 ; recalibration manuelle du fichier "ch_cor_man" (se ; superpose a la recalibration). dir_cor_man = '/home/mercier/corr_man/' ch_cor_man = '14_nov_05_236_1' ; Archives des fichiers de correction manuelle : ; '14_nov_05_164_1' idem a 236 327 410 ; Ces fichiers contiennent les gains et phases apparents. ; ; Drapeaux d'utilisation des antennes ; Usuel : tous les drapeaux a 1, sauf depointage, parasites, ou gains ; aberrants, ou controle de polarisation i_pave_seul = 0 ; 1 pour ne garder que le pave central et le sous pave ; des AA, eliminant aussi E0. ; Ca met sel_ant a 0 pour E2, E0, NS45, et on annule ; les harm de E1 avec les H d'ordre > 16. ; FIGE (utilite pour mise au point seulement). ; Ancienne place de la definition de sel_ant (dans RH_CALIB_CON) ; Les suppressions avec sel_ant s'ajoutent aux suppressions avec ; les drapeaux d'utilisation de series d'harmoniques avec les ; antennes d'extension (ie0_ew, etc.) definis plus bas. type_obs = 1 ; 1 toutes les observations ; . posterieures au 17 avril 03 ; . anterieures au 8 oct 02 ; 2 pour observations de transition (apres fin 2002), ; semblables a celles pour la nouvelle calibration ; (toutes antennes pointees, dipoles de H2 H4 NS0 ; tournes, pas de modification des tables de gain), ; sauf que rotew et rotns sont indiqu'es nuls dans ; l'entete parce que le maxion et le micro-pointage ; ont ete decouples manuellement. ; ce cas ne se presente que pour les observations de ; calibration et pas pour celles de controle. i_corr_rot_NS0 = 1 ; 1 usuel. 0 pour ne pas corriger de la rotation de NS0 i_cor_dep_H = 1 ; 1 (usuel) pour corriger les effets de depointage des ; antennes H : perte de lobe et rotation des dipo- ; les (en fait on multiplie simplement ah_dep par ; i_cor_dep_H, CE QUI ANNULE ALORS ah_dep). On pas- ; se quand meme dans CORR_ROR_DEP_H, mais si les ; dipoles du reseau H sont tournes < 0.05 rad, on ; ne fait pas la correction des harm polar (des ; antennes EW ET des antennes NS), ce qui permet ; de traiter les observations non deointees pour ; mesurer l'alignement des dipoles des H. ; 0 au debut des observations avec depointage E, p ex ; pour mesurer le dephasage de depointage. ; Rem : ce n'est qu'une rustine et une meilleure so- ; lution serait de rectifier le depointage indi- ; que sans l'entete. Trop compliqu'e. i_AA_NS8 = 1 ; 1 pour superposer les harm de NS8 avec les AA. ; Excision des parasites : antennes des bases testees et niveaux acceptes ant_test_par = [ 0, 0, 0, $ ; E2 E1 E0 ; 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, $ ; H1 H2 H3 H4 H5 H6 H7 NS0_ew H9 H10 H11 H12 H13 H14 H15 H16 ; 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, $ ; NS0 NS1 NS2 NS3 NS4 NS5 NS6 NS7 NS8 NS9 NS10 NS11 NS12 NS13 NS14 ; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, $ ; NS15 NS16 NS17 NS18 NS19 NS20 NS21 NS22 NS23 NS45 0, 0, 0, 0 ] ; AA1 AA2 AA3 AA4 ; La procedure de traitement de calibration dans CALIBRATION est robus- ; vis a vis des parasites sur les tres courtes bases a partir de NS0. ; Il est donc inutile (et meme nuisible) de rejeter des scrutations ; parce que ces bases sont parasitees. C'est pourquoi H7, H9 et NS1 ; ne sont pas selectionnees dans ant_test_par. ; Les antennes donnant de grandes bases ne sont pas selctionnees non ; plus car ces grandes bases dependent du modele et les amplitudes ; des harmoniques correspondants peuvent varier de facon importante ; pendant la duree d'observation. ; Pour 6 freq (laisser ou mettre en commentaire) ; 164 151 236 327 411 432 t_1_p = [0.9, 0.8, 0.9, 2.0, 3.0, 4.0, 0.0, 0.0, 0.0, 0.0] ; 1 sec t_2_p = [0.2, 0.2, 0.2, 0.3, 0.6, 1.5, 0.0, 0.0, 0.0, 0.0] ; 60 sec ; Pour 5 freq (laisser ou mettre en commentaire) ; 164 151 236 327 411 432 ; t_1_p = [0.9, 0.9, 2.0, 3.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0] ; 1 sec ; t_2_p = [0.2, 0.2, 0.3, 0.6, 1.5, 0.0, 0.0, 0.0, 0.0, 0.0] ; 60 sec ; Pour eliminer les scrutations parasitees : on n'integre que les scru- ; tations pour lesquelles : ; abs (harmonique - val moy) < a_p * abs(val moy) ; Le test est fait sur plusieurs harmoniques a courte base a partir ; de NS0_ns. Si une scrutation est acceptable en non polar, on admet ; qu'elle l'est aussi en polar (commentaire a l'appel de RH_DP_SUB_1) ; Le coeff a_p depend du rapport signal / bruit de la source et est ; choisi dans les tableaux t_1_p et t_2_p ci-dessus selon le temps ; d'integration de l'observation initiale. Il doit etre ajuste par ; l'utilisateur en choisissant amul de facon a garder 1/2 ou un peu ; plus des scrutations initiales. ; Un coefficient multiplicatif d'ensemble amul est defini plus haut. ; S'il faut choisir amul >>1, c'est que l'observation est tres para- ; sitee. Se contenter de moins de scrutations selectionnees. ; Drapeaux d'utilisation de series d'harmoniques avec les antennes d'extension ; Usuel : tous les drapeaux a 1 et gap_ns0=[0, 0] (pas de suppress.) ; Il peut etre parfois utile de supprimer E2 et peut-etre NS45 si elles ; sont mal phasees. ; Rem : avant le remplissage du pave la suppression de E0 renforcait ; les alias a l'egal de l'image centrale et rendait leur reduction ; par clean impossible. ie0_ew = 1 ; E0 avec E2, E1, H1 a H16 (1 avec, 0 sans). Indispen- ; sable pour distinguer une source de son alias et ; que le clean ne s'y trompe pas. ie0_ns = 0 ; E0 avec les NS (distrib asym dans plan (u,v)) ie1_ew = 1 ; E1 avec H1 a H16. ie2_ew = 1 ; E2 avec E1, H1 a H16. La calibration de E2 etant pro- ; blematique, ne pas l'utiliser si ca peut arranger. ie2_ns = 1 ; E2 avec les NS (distrib asym dans plan (u,v)). Idem. ins45_ew = 1 ; NS45 avec E1, H1 a H16. ins45_NS = 1 ; NS45 avec les NS. i_redond = 1 ; 0 pour suppression des doublures mediocres (bases ; courtes a partir de NS0). Usuel 0. gap_ns0 = [0, 0] ; limites du gap d'ant [EW, NS], comptees a partir de ; NS0, non couplees a NS0 (parasitee). Usuel [0, 0]. i_corr_pos_ant = 1 ; Depuis le 12 mai 2004. ; Usuel i_reglage=0 dans RH_CORR_ANTENNES.PRO ; (lig 353). ; FIN DE PARAMETRES FIGES ; Debut de choses automatiques set_plot, 'x' ; device, decomposed=0 ; pour ne pas decomposer en R G B. Executer ; au lancement d'IDL. ; dans IMAGE_CALIB_CON on obtient bien "rain- ; bow" pour tvscl et "BW" pour shade_surf ; en chargeant les tables de couleur juste ; avant. rot_p = 1 ; pour tourner de l'angle p. Necessaire a im_2d_con mais bidon ; car on s'arrete a l'image interferometrique. ; Selection de la frequence ; 164 151 236 327 411 432 sel_freq = ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'] sel_freq(num_freq) = 'Y' if (t_integ eq 1) then a_p = amul * t_1_p(num_freq) ; ou num_freq+1 if (t_integ eq 60) then a_p = amul * t_2_p(num_freq) ; ------------ ; Modif numero de fenetre de sortie pour trace 2D (cas d'une recalibration) n_win = n_win + 4 * i_recalib ; pour comparer non recal et recalibre. ; Complement du format des heures de debut et de fin, pour gerer les cas : ; . t_deb avec 2 elements (sources) : on complete avec des zeros ; . t_deb avec 4 elements (soleil, intervalle court sur un sursaut) : ; on ne change pas t_deb et t_fin if(n_elements(t_deb) eq 2) then begin t_deb = [t_deb, 00, 00] & t_fin = [t_fin, 00, 00] endif ; Choix oblig'e du Cygne comme source de calibration en l'absence de recali- ; bration if (i_recalib eq 0) then i_source_cal = 1 ; Cygne suppos'e. ; Extraction de l'heure de recalibration du nom du fichier de recalibration if (i_recalib eq 1) then begin heu_recal = fix(strmid(ch_cor, 4, 2, /reverse_offset)) min_recal = fix(strmid(ch_cor, 1, 2, /reverse_offset)) ; Rem : avec /reverse_offset le 1er caractere est compte a partir ; de la fin, mais sa longueur est vers la droite. Ainsi : ; ch_h_recal = strmid(ch_cor, 4, 5, /reverse_offset) ; extrait "16:48" if (i_source_cal eq 0) then begin h_recal = [heu_recal, min_recal] ; Si la source de recalibration est le soleil, on n'ajoute rien ; car on recalibre sur un sursaut solaire bref. if (h_recal(1) ge 60) then h_recal = h_recal + [1, -60] endif if (i_source_cal gt 0) then begin h_recal = [heu_recal, min_recal] + [0, 15] ; Si la source de recalibration est une source non solaire on ; ajoute 15 min car la duree usuelle d'un intervalle de cali- ; bration sur une source non solaire est 30 minutes. if (h_recal(1) ge 60) then h_recal = h_recal + [1, -60] endif endif ; Preliminaire a une recalibration "manuelle" (gains apparents d'antennes dans ; un fichier "ch_cor_man") if (i_AA eq 0) then nbre_ant = 44 if (i_AA eq 1) then nbre_ant = 48 ; Initialisation par defaut des gains manuels et de leurs drapeaux g_flag = replicate( 0, nbre_ant) g_amp = replicate(1.0, nbre_ant) & g_phi = replicate(0, nbre_ant) ; Lecture du fichier de gains apparents pour une recalibration "manuelle" if (i_corr_man eq 0) then begin phi_ew_ns = 0 & phi_w_e = 0 ; pour CORR_GAIN_ANT. endif if (i_corr_man ne 0) then begin ; lecture des gains et phases apparents ; Definition des ch_* comme des chaines de caracteres (sinon ca bloque ; a la lecture si le 1er caractere n'est pas numerique). ch_1 = '1' & ch_2 = '1' & ch_3 = '1' & ch_4 = '1' & ch_5 = '1' ch_6 = '1' & ch_7 = '1' & ch_8 = '1' & ch_9 = '1' & ch_10 = '1' ch_11 = '1' & ch_12 = '1' & ch_14 = '1' & ch_15 = '1' & ch_16 = '1' ch_17 = '1' & ch_18 = '1' fich_cor_man = dir_cor_man + ch_cor_man openr, unit, fich_cor_man, /get_lun ; Saut des lignes de commentaire readf, unit, ch_1 & readf, unit, ch_2 & readf, unit, ch_3 readf, unit, ch_4 & readf, unit, ch_5 & readf, unit, ch_6 readf, unit, ch_7 & readf, unit, ch_8 & readf, unit, ch_9 readf, unit, ch_10 & readf, unit, ch_11 & readf, unit, ch_12 ; Lecture de phi_ew_ns et phi_w_e readf, unit, format="(2i8)", phi_ew_ns, phi_w_e ; Saut de 5 lignes vides readf, unit, ch_14 & readf, unit, ch_15 & readf, unit, ch_16 readf, unit, ch_17 & readf, unit, ch_18 ; lecture des g_amp et g_phi sur 44 ou 48 lignes ch_format = "(i3, f8.2, i8)" for i = 0, nbre_ant - 1 do begin readf, unit, format=ch_format, flag_i, amp_i, phi_i ; refuse de remplir directement amp(i) et phi(i). g_flag (i) = flag_i & g_amp(i) = amp_i & g_phi (i) = phi_i endfor close, unit free_lun, unit endif ; fin de lecture des gains "manuels". icon = 0 if (icon eq 1) then begin print, format="('phi_ew_ns =', i5, 6x, 'phi_w_e =', i5)", $ phi_ew_ns, phi_w_e ch_format_1 = "(10i8)" print, '' print, 'g_amp =' print, format="(10f8.2)", g_amp print, '' print, 'g_phi =' print, format="(10i8)", g_phi stop endif ; Suppression de E2 E0 NS45 si i_pave_seul=1 if (i_pave_seul eq 1) then begin sel_ant(0) = 0 ; E2 sel_ant(43) = 0 ; NS45 ; finalement on garde E0, les harm purement EW avec les AA etant ; trop mauvais endif ; Fin de choses automatiques ; FIN DE LA DEFINITION DES PARAMETRES ;____________________________________________________________________________ ; STRUCTURE entFI (entete), repris de de rh_common.inc ; ======================== ; ; Longueur tete du fichier entFI.lgent Long ; Longueur du fichier entFI.filesize Long ; Longueur d'une acquisition, en octets entFI.lg Int ; Type des acq du fichier, 1-1D, 2-2D entFI.typ Int ; Codage des acquisitions, 2-16 bits entFI.cod Int ; Representation des acq, 0-Harm entFI.rep Int ; Nombre de valeurs tete acq entFI.lgtet Int ; Nombre de valeurs corps acq entFI.nval Int ; Nombre de valeurs 2D entFI.nval_2d Int ; Nombre de valeurs EW entFI.nval_ew Int ; Nombre de valeurs NS entFI.nval_ns Int ; Type de donnees,'1D ','2D ' entFI.d_typ Bytarr(6) ; Temps d'integration en millisecondes entFI.itg Long ; Date (jour, mois, an) entFI.dat Intarr(3) ; Reference de la source, en caracteres entFI.ref Bytarr(6) ; Heure meridien (Heure, minute, sec, centieme) entFI.mer Intarr(3) ; Declinaison (degres,',',') entFI.dec Intarr(3) ; Horloge 0-TU ou 1-TS entFI.hg Int ; Heure de debut (heure, minute) entFI.hdeb Intarr(4) ; Heure de fin en heure, minute) entFI.hfin Intarr(4) ; Nombre de frequences, de 1 a 10 entFI.nf Int ; Table des frequences en centaines de Khz entFI.frq Intarr(10) ; Correction de trajectoire 1-avec ou 0-sans entFI.trj Int ; Compression 1-avec ou 0-sans entFI.comp Int ; Cycle recepteur, en millisecondes entFI.cyclms Int ; Description donnees entFI.d_obs bytarr(78) ; Reseau EW depointage 0-Sans, 1-Est, 2-Ouest entFI.depew Int ; Reseau EW depointage en minutes entFI.dephew Int ; Rotation dipoles ant 2, 4 EW 1-avec ou 0-sans entFI.rotew Int ; Rotation antenne 0 NS 1-avec ou 0-sans entFI.rotns Int ; Position EW des antennes en mm entFI.pxant Lonarr(44) ; Position NS des antennes en mm entFI.pyant lonarr(44) ; Table des correlations (no Ref, no ant) entFI.corel intarr(2,576) ; Tables de correction entCOR:entCOR ; Description de l'observation descrip bytarr(80,2) ; Description de l'activite activ bytarr(80) ; Description des pannes pannes bytarr(80,3) ; Evenements non comprimes evenements bytarr(80,15 ; swap_endian a faire si = 1 endian 0L ; numero du dernier enregistrement klumax 0L ;______________________________________________________________________________ ; DEBUT DE LA PARTIE ACTIVE, REPRISE DE RH_DP_CALIB ; NOTATIONS: ; correl tableau (2, 576) indiquant les numeros des 2 antennes ; correspondant a chacun des 576 harmoniques. Permet de faire ; le passage de harm_N a harm. ; entfi.freq frequences (intarr(10)) ; entfi.corel tableau (2, 576) indiquant les numeros des 2 antennes corres- ; pondant a chacun des 576 harmoniques. Permet dans malc_im_2d ; le passage de harm_N au tableau des harmoniques a 2 dimen- ; sions. ; bfi.h (h,m,s,c) de debut d'observation. ; klu, kdeb, kfin, kmax numeros des enregistrements. ; numim numero d'image. ; sfu_tb ; lufi.pt fltarr(4, 576) ; gap_ns0 intarr(2), definit une zone d'exclusion d'harmoniques parasi- ; te's autour de NS0. ; ant_test_par identification des antennes utilisees pour detection parasites. ; sel_ant drapeau d'utilisation des antennes (0 si antenne a probleme). ; entfi.frq tableau des frequences de l'observation ; isel tableau des frequences qu'on a choisi de traiter ; nsel nombre de frequences a traiter ; entfi.nval integer (2304 par exemple). ; pt fltarr(4, 576) puis fltarr(2, 2, 576). Tableau des harmoniques. ; 1er indice: cos ou sin, ; 2eme ind: non polar ou polar, ; 3eme indice: balaie les 576 harm. ; ; STRUCTURE entFI (entete), repris de de rh_common.inc ; ======================== ; ; Longueur tete du fichier entFI.lgent Long ; Longueur du fichier entFI.filesize Long ; Longueur d'une acquisition, en octets entFI.lg Int ; Type des acq du fichier, 1-1D, 2-2D entFI.typ Int ; Codage des acquisitions, 2-16 bits entFI.cod Int ; Representation des acq, 0-Harm entFI.rep Int ; Nombre de valeurs tete acq entFI.lgtet Int ; Nombre de valeurs corps acq entFI.nval Int ; Nombre de valeurs 2D entFI.nval_2d Int ; Nombre de valeurs EW entFI.nval_ew Int ; Nombre de valeurs NS entFI.nval_ns Int ; Type de donnees,'1D ','2D ' entFI.d_typ Bytarr(6) ; Temps d'integration en millisecondes entFI.itg Long ; Date (jour, mois, an) entFI.dat Intarr(3) ; Reference de la source, en caracteres entFI.ref Bytarr(6) ; Heure meridien (Heure, minute, sec, centieme) entFI.mer Intarr(3) ; Declinaison (degres,',',') entFI.dec Intarr(3) ; Horloge 0-TU ou 1-TS entFI.hg Int ; Heure de debut (heure, minute) entFI.hdeb Intarr(4) ; Heure de fin en heure, minute) entFI.hfin Intarr(4) ; Nombre de frequences, de 1 a 10 entFI.nf Int ; Table des frequences en centaines de Khz entFI.frq Intarr(10) ; Correction de trajectoire 1-avec ou 0-sans entFI.trj Int ; Compression 1-avec ou 0-sans entFI.comp Int ; Cycle recepteur, en millisecondes entFI.cyclms Int ; Description donnees entFI.d_obs bytarr(78) ; Reseau EW depointage 0-Sans, 1-Est, 2-Ouest entFI.depew Int ; Reseau EW depointage en minutes entFI.dephew Int ; Rotation dipoles ant 2, 4 EW 1-avec ou 0-sans entFI.rotew Int ; Rotation antenne 0 NS 1-avec ou 0-sans entFI.rotns Int ; Position EW des antennes en mm entFI.pxant Lonarr(44) ; Position NS des antennes en mm entFI.pyant Lonarr(44) ; Table des correlations (no Ref, no ant) entFI.corel intarr(2,576) ; 1à Tables de correction entCOR:entCOR ; Description de l'observation descrip bytarr(80,2) ; Description de l'activite activ bytarr(80) ; Description des pannes pannes bytarr(80,3) ; Evenements non comprimes evenements bytarr(80,15) ; swap_endian a faire si = 1 endian 0L ; numero du dernier enregistrement klumax 0L ; print, 'Fichier utilise ; ', nomfich stop ; LIBERATION DES NUMEROS DE CANAL for i=1, 127 do free_lun, i for i=1, 127 do close , i ; help, /files ; pour connaitre l'etat des fichiers. ; Inclusion de lignes de programmes "classiques" @rh_common.inc ; inclut le contenu de "rh_common.inc" (description de ; la structure "entfi." (en-tete de fichier). Inclut ; une ligne : common RH, liste de variables dans la ; structure entfi . ; Voir dans : ; /home/dirhelio/sswnrh/radio/nrh/idl/-> ; dp_soft_rh/routine_rh ; et faire xemacs rh_open.pro ; Nom presque complet des fichiers de recalibration (la freq et non polar ou ; polar sont rajoutes dans RECALIBRATION fich_cor = dir_cor + 'coeff_corr_' + ch_cor ; Annulation d'ensemble de la correction de certaines antennes g_flag = i_corr_man * g_flag ; Verification de non nullite de ces gains for ia = 0, nbre_ant - 1 do begin if (g_amp(ia) eq 0) then begin print, 'Erreur : un des gains des antennes est nul.' print, 'Taper .c pour continuer quand meme' stop endif endfor ; Calcul du temp de milieu d'intervalle d'integration (utilis'e dans pour la ; correction d'implantation d'antennes dans CORR_POS_ANT. Precision non ; requise. t_moy = (t_deb(0) + float(t_deb(1)) / 60 + $ t_fin(0) + float(t_fin(1)) / 60) / 2 ih_moy = fix(t_moy) im_moy = nint( (t_moy - ih_moy) * 60 ) ; nint pour arrondir. print, 'ih_moy, im_moy :', ih_moy, im_moy ihm_moy = [ih_moy, im_moy] ; pour entree de CORR_POS_ANT. ; Compilation des sous-programmes et controles. RH_DP_CALIB_SUB ; compilation de : ; . RH_DP_SUB_1 : decider si une scrutation est biaisee ou non par des ; parasites, et lever le drapeau d'autorisation ; d'integration i_integ. ; . DP_CON_2 : controle des drapeux d'integration RH_CORR_ANTENNES ; compilation de : ; CORR_POS_ANT correction de position de toutes les antennes. ; CORR_GAIN_ANT correction manuelle de certaines antennes. ; CORR_ROT_DEP_NP correction depointage et rotation non polar ; CORR_ROT_DEP_P --------------------------------- polar ; Choix de la methode de resolution des systemes lineaires apparaissant dans ; la determination de parametres aux moindres carres dans FIT_QUADRIC, ; FIT_CUBIC, FIT_QUARTIC (eux memes appelles par RH_MALC_IM_1D. i_sys_lin = 2 ; 1 Cramer, 2 LU, 3 SVD. npi = 128 ; nbre de points sur l'image interferometrique ; (ce n'est plus np). ; Debut de la sequence decrite 2 fois : ; . 1ere lecture et integration pour obtenir une valeur du niveau des har- ; moniques dont on espere que les parasites l'ont biaisee de moins d'un ; facteur 2 pour une integration de l'ordre de 1 heure ; . 2eme lecture et integration, ou on rejette les scrutations parasitees. ; On peut ainsi exciser les parasites ayant l'allure d'impulsion temporelles ; mais on ne detecte pas les parasites constants. ; Cette detection de parasite est rajoutee apres-coup et l'ensemble du trai- ; tement est fait 2 fois pour ne pas se faire chier a sortir de la boucle ; ce qui pourrait peut-etre l'etre. i_lec = 0 ; initialisation du numero de la lecture, qui ; sera increment'e a 1 puis a 2. a6: J_M = 0 ; fin du saut en arriere apres 1ere lecture. i_lec = i_lec + 1 if (i_lec eq 1) then t_0 = systime(1) if (i_lec eq 2) then begin t_lec = systime(1) dt = t_lec - t_0 ch_format ="(6x, 'Fin 1ere lecture et calcul moyenne :', " + $ "i3, ' sec')" print, format=ch_format, nint(dt) endif ; Ouverture du fichier de type Nancay ; if (not open_rh(nomfich, /mono, /malax)) then begin ; jusqu'au 26 aug 99. if (not RH_OPEN(nomfich, /mono )) then begin ; apres le 26 aug 99. ; RH_OPEN : ouvre le fichier Nancay, remplit le common RH, initia- ; lise des structures de lecture, et est aussi le nom de la ; variable logique (vraie ou fausse) qui indique le succes de ; l'ouverture du fichier. ; /mono : lecture scrutation par scrutation (donc une frequence a ; la fois) => klu s'incremente de 1 a la lecture d'une scrutation ; a une frequence. S'il n'y a pas /mono klu s'incrementera de 1 ; pour la lecture des crutations a toutes les frequences. ; (une structure en sortie de RH_READ contiendra une seule freq ; ou toutes). ; si lecture n'est pas bonne => fichier non trouve. print, 'fichier de donnees non trouve : ', nomfich return endif ; Le if (...) appelle OPEN_RH (avec le seul mot-cle mono) puis teste ; les codes de sortie. S'ils ne sont pas bons, impression d'un code ; erreur. date_obs = entfi.dat ; precautiom (problemes avec "date"). ; Lecture de l'heure de calibration dans l'entete et ecrasement de h_cal ; On prend en fait l'heure de calibration correspondant a la 1ere ; frequence selectionnee, admettant que c'est la meme pour toutes les ; frequences. h_cal_en_tete = entfi.entcor.heure ; Si on fait directement : ; h_cal_en_tete = reform(entfi.entcor.heure(*, dom(0))) ; ca laisse un intarr(2, 10). On commence donc par reduire au statut ; de variable normale h_cal_en_tete = reform(h_cal_en_tete(*, num_freq)) ; Ecrasement de h_cal pour les observations comportant l'eure de calibration if ((h_cal_en_tete(0) ne 0) and (h_cal_en_tete(1) ne 0)) then $ h_cal = h_cal_en_tete ; Definition de dates de changement dans les observations et les programmes date_AA = [01, 11, 2003] ; introduction des antennes AA. ; Calcul des dates juliennes precedentes jul_date_AA = julday(date_AA (1), date_AA (0), date_AA (2)) jul_date_obs = julday(date_obs(1), date_obs(0), date_obs(2)) ; Definitions reliees aux dates precedentes if (jul_date_obs lt jul_date_AA) then begin nbre_harm = 576 if (i_recalib eq 1) then h_cal = h_recal ; h_recal est extrait plus haut du nom du fichier de recalibration. ; Si on ne recalibre pas h_cal est entr'e manuellement plus haut. ; C'est le seul cas ou cette donnee entree manuellement est uti- ; lisee. endif if (jul_date_obs gt jul_date_AA) then begin nbre_harm = 576 + 1 * (18 * 4) if (i_recalib eq 0) then begin v_temp = entfi.entcor.heure ; temp comme "temporaire". h_cal = v_temp(*, num_freq) + [0, 15] ; Rem : entfi.entcor.heure(*, num_freq) ne marche pas. ; Rappel : on ajoute 15 min car la duree usuelle d'un inter- ; valle de calibration est 30 min. if (h_cal(1) ge 60) then h_cal = h_cal + [1, -60] endif if (i_recalib eq 1) then h_cal = h_recal endif correl = entfi.corel ; alleger notations et retablir orthographe. ; Initialisation du common MALAX ; Contient : ; . date (j, m, a) dans entfi.dat ; . sref 'soleil' ou 'autre' ; . drapeaux de corr iono, ; . parametres des reseaux, ; . new et nns, nbre de canaux "minima" en EW et NS, ; . heure meridien (TU ou TS decimale), declinaison, ; . angle P et derive en H et delta (nuls pour sources non solaires) ; Notations ; entfi.dat date (j, m, a) ; sref 'soleil' ou 'autre' ; rot_p correction de l'angel p : 0 sans, 1 avec. ; Variables necessaires pour calculer le common MALAX hmer = fltarr(3) ; TS pour les sources. hmer(0:2) = float (entfi.mer(0:2)) hmer(2) = hmer(2) + float(entfi.mer(3)) / 100. dec = fltarr (3) dec(0:2) = float (entfi.dec(0:2)) dec(2) = dec (2) + float(entfi.dec(3)) / 100. ; Declinaison, depointage, rotation des antennes, dephasage polar ; (utile pour la calibration) delta = !pi/180 * (dec(0) + float(dec(1)) / 60 + dec(2) / 3600) ; Rem : les 1/100 de '' d'arc sont dontenus dans dec(2) if (type_obs eq 1) then begin rotew = entfi.rotew rotns = entfi.rotns endif if (type_obs eq 2) then begin rotew = 1 rotns = 1 endif if (entfi.depew eq 0) then ah_dep = 0 if (entfi.depew eq 1) then ah_dep = - entfi.dephew ; en minutes de temps. if (entfi.depew eq 2) then ah_dep = entfi.dephew ; ------------------- ah_dep = !pi / 12 * ah_dep / 60 ; en radians, >0 pour depointage W. ; ah_dep sert uniquement aus corrections du depointage des antennes H : ; . correction de lobe des antennes H ; . correction des niveaux non polar et polar liee a la rotation des ; dipoles des antennes H due a leur depointage ; ah_dep n'est utilis'e que dans les CORR_ROT_DEP np et p. ah_dep = ah_dep * i_cor_dep_H sref = string (entfi.ref) ; 'soleil' ou 'autre'. ; Initialisation du common MALAX if (i_lec eq 1) then $ INIT_MALAX_2D, date_obs, hmer, dec, sref, rot_p ; entree. ; - Appelle IN_MALAX_2D qui remplit le common ; Initialisation d'une correction de phase a faire jusqu'au 5/11/1998 non in- ; clus (correction d'un sabotage delouisien traitre, sorte de chausse- ; trappe non signalee). jul_cor = julday (11, 5, 1998) ; pour "julian correction". 5 nov 98 jul_dat = julday (date_obs(1), date_obs(0), rh_date100(date_obs(2), /full)) ; pour "julien date". icorrec_phase = 0 if (jul_dat lt jul_cor) then begin icorrec_phase = 1 print, 'Correction des phases: entfi.nval =', entfi.nval / 4 endif temps = [3600000L, 60000L, 1000L, 10L] msd = (transpose(temps) # long(t_deb)) (0) ; h debut en msec msf = (transpose(temps) # long(t_fin)) (0) ; - fin ------- ; Selection des heures: ; Calcul des indices des records de debut et de fin nbim = -1 if (msd eq msf) then nbim = 1 ; Donnees non comprimees if (entfi.comp eq 0) then begin ind = where (t_deb ne t_fin, count) ; nbre d'elements differents ; dans t_deb et t_fin. RH_HDEB, t_deb, $ ; entree, heure de debut demandee. kdeb, h ; sortie, kdeb numero d'image de debut, ; h heure --------------- ; Rem du 23 nov 2005 : quand on entre une heure exterieure au ; fichier, RH_DEB retourne kdeb = num du dernier enrgt et ; h = heure de fin de fichier, meme si on a choisi t_deb ; anterieur au debut de fichier. ; Ca a l'air de marcher si on entre des heures existantes, ; avec t_fin - t_deb > 1 scrutation t_deb = h ; heure de debut effective. ; print, format='("Debut ", 3(i2.2,":"),i2.2)', hd if (count ne 0) then begin RH_HDEB, t_fin , $ ; entree, heure de fin demandee. kfin, h ; sortie, kfin numero d'image de fin, ; h heure -------------- t_fin = h ; heure de fin effective. end else begin kfin = kdeb t_fin = t_deb endelse endif else begin ; Donnees comprimees RH_LECDEB, msd, msf, $ ; entree (heure debut et fin en msec). kdeb, kfin ; sortie numeros extremes des enrg a traiter. if (nbim eq 1) then kdeb = kfin endelse ; Si klumax n'est pas une frequence selectionnee, on demande a lire une ; frequence au dela de klumax et on tombe sur "end of file". isel = where (sel_freq eq 'Y') nsel = n_elements (isel) if ( abs(kfin - entfi.klumax) lt entfi.nf) then $ kfin = entfi.klumax -entfi.nf + isel(nsel-1) + 1L if (i_lec eq 1) then begin print, ' ' + $ 'Numeros d''enregistrements: debut fin fin fichier' ch_format = "(32x, i6, 3x, i6, 6x, i6)" print, format=ch_format, kdeb, kfin, entfi.klumax endif klu = kdeb ; numero d'enregistrement lu RH_READCH, klu, sel_freq ; Lecture prealable, ici seulement pour avoir l'heure de debut. ; En entree sel_freq indique les frequences selectionnees. ; En sortie les variables en sont dans le common RH. ; RH_READCH boucle sur les scrutations en incrementant klu, jusqu'a ; trouver une scrutation pour une frequence selectionnee. A ce moment ; on sort sans incrementer klu, qui doit etre increment par l'utili- ; sateur. ; Au final klu est le nombre total de scrutations lues a toutes les ; frequences, selectionnees ou non. hmsc = bfi.h ch_format = "(' : heure debut : ', " + $ "i2, ':', i2, ':', i2, ':', i2)" ; if (i_lec eq 1) then print, format=ch_format, hmsc ; Mise en forme des header fits, ouverture des fichiers et ecriture des ; headers provisoires. A COMMENTER MIEUX. numrec = lonarr(entfi.nf) numrec(*) = 0L numcnt = lonarr(entfi.nf) numcnt(*) = 0L iunit = lonarr(entfi.nf) imsdeb = 0L imsfin = 24L * 3600000L imstd = lonarr (entfi.nf) imstf = lonarr (entfi.nf) imstd(*) = imsdeb imstf(*) = imsfin itd = intarr (4, entfi.nf) itf = intarr (4, entfi.nf) mmax = fltarr (entfi.nf) mmin = fltarr (entfi.nf) dirdsmf = strarr(entFI.nf) ; Initialisation des accumulateurs de scrutations pout l'integration. ; On integre sur toute la duree d'observation choisie avant de comparer ; directement a un modele approximatif donn'e a priori ou a un modele ; lisse qu'on determine a partir des observations. ; Il faut un accumulateur pour l'imtegration non selective (avec suf- ; fixe _moy) et un autre pour l'integration selective (suffixe _I). if (i_lec eq 1) then begin harm_N_np_moy = complexarr(nbre_harm, 10) ; 10 frequences possibles, harm_N_p_moy = complexarr(nbre_harm, 10) ; non polar et polar. harm_N_np_I = complexarr(nbre_harm, 10) harm_N_p_I = complexarr(nbre_harm, 10) endif c_harm_N_np_I = intarr(10) ; compteur d'integration (2eme passage) c_harm_N_p_I = intarr(10) ; ------------------------------------ freq_I = fltarr(10) ; rustine pour la calibration. if (i_lec eq 2) then begin t_i_integ = intarr(n_image/nsel + 2, 2, nf_max + 1) ; Tableau des drapeaux d'integration. ; 1er indice : scrutation a 1 freq, ; 2eme ------ : non polar ou polar ; 3eme ------ : nbre de frequences. ; + 2 par precaution. ; nf_max + 1 ( et non nsel) car t_i_integ est adresse en 3eme ; indice par le numero de frequence nf. nf_max + 1 = nsel si ; les premieres frequences sont selectionnees, mais nfmax > nsel ; si ce n'est pas le cas => plantage. endif ; Boucle sur les acquisitions (1 acq = nbre_harm harmoniques) ; Les enregistrement des differentes frequences a une meme heure sont ; contigus (numero klu). La boucle sur les frequences est donc interne ; a la boucle sur les heures. ; Rappel : isel tableau des frequences qu'on a choisi de traiter. ; nsel nombre de frequences a traiter. ; nf numero de frequence traitee dans la boucle du while. n_image = 1 ; initialisation du numero d'image traitee. n_bord = 10 ; hauteur des bandes N et S pour ajuster base ; dans RH_MALC_IM_2D. Usuel 10. dom = where(sel_freq eq 'Y') nf_max = max(dom) ; numero de la plus haute freq selectionnee ; n_im_f = intarr(nsel) ; avant 7 avril 03 => plantage si les frequen ; ces les plus basses ne sont pas selection- ; nees. n_im_f = intarr(nf_max + 1) ; initialisation des compteurs d'image pour ; chaque frequence. Les frequences sont re- ; perees par leur numero, qui peut etre supe- ; rieur a nsel (nbre de frequences selection- ; nees si les basses frequences ne sont pas ; selectionnees. ; while (klu le kfin) do begin while (klu le kfin + 6) do begin ; l'ajout de 6 est destine a taiter le cas ou on veut isoler une ; seule scrutation (dans un fichier 10sec ou 128 sec), et entrer ; dans la boucle si une une frequence autre que la frequence 0 ; est selectionnee. t0 = systime(1) ; temps en sec depuis le 1er jan 70. RH_READCH, klu, sel_freq ; RH_READCH boucle sur les scrutations en incrementant klu, jusqu'a ; trouver une scrutation pour une frequence selectionnee. A ce ; moment on sort sans incrementer klu, qui doit etre incremente ; par l'utilisateur. ; Au final klu est le nombre total de scrutations lues a toutes les ; frequences, selectionnees ou non. ; print, 'VERIF_ANTENNES, klu, kfin :', klu, kfin if klu eq -999L then goto, a0 ; vers fermeture du fichier lu. hmsc = bfi.h ; vrai pour donnees non simulees. if (n_image eq 1) then hmsc_deb = hmsc ; pour passage a RH_IMAGE_CON ; print, '' ; print, 'Boucle while : klu =', fix(klu), ' hmsc =', byte(hmsc(0:3)) ch_format = "(i2)" ch_hms = string(format=ch_format, hmsc(0)) + ':' + $ string(format=ch_format, hmsc(1)) + ':' + $ string(format=ch_format, hmsc(2)) ; print, 'VERIF_ANTENNES, heure lue : ', ch_hms, $ ; ' num freq :',bfi.nof nf = bfi.nof ; numero de la frequence lue. ; print, klu, hmsc ; heure, min sec, 1/100 freq = float (entfi.frq(nf)) / 10 ch_format = "('VERIF_ANTENNES, heure lue : ', " + $ "i2, ':', i2, ':', i2, ' freq =', f6.1, ' MHz')" ; print, ' ' ; print, format=ch_format, hmsc(0), hmsc(1), hmsc(2), freq ; impressions souvent utile nsa = long (bfi.c) ; nbre d'images comprimees. ihms = transpose(temps)#hmsc ; heure en msec. if (numrec(nf) eq 0L) then begin imstd(nf) = ihms itd(*,nf) = hmsc endif pt = lufi.pt if (icorrec_phase eq 1) then RH_COREC_PHASE, nf, pt, hmsc ; correction de l'erreur sur le phasage jusqu'au 4 nov 98. pt = reform (pt, 2 , 2 , entfi.nval / 4) ; pt = fltarr(4, nbre_harm), puis fltarr(2, 2, nbre_harm). C'est ; la table des donnees : ; 1er indice: cos ou sin, ; 2eme ind: non polar ou polar, ; 3eme indice: balaie les nbre_harm harm. ; Rem : non polar et polar ne sont pas traites symetriquement. ; C'est un reste du traitement non polar + polar pour les images ; solaires. ; Integration non polar ; Remplissage du tableau des harmoniques non polar rang'es format Nancay. harm_N_np = complex(pt(0, 0, *), pt(1, 0, *)) ; le 2eme indice indique non polar ou polar. harm_N_np = reform(harm_N_np) ; pour supprimer 2 indices degeneres. ; pt est un reel, tableau des harmoniques. 1er indice: cos ou sin, ; 2eme ind: non polar ou polar, 3eme indice: balaie les nbre_harm ; harmoniques. ; harm_N_np est donc un complexarr (nbre_harm). ; Integration non selective (1ere lecture) if (i_lec eq 1) then begin harm_N_np_moy(*, nf) = harm_N_np_moy(*, nf) + harm_N_np endif ; Integration selective (2eme lecture) if (i_lec eq 2) then begin ; on convient de detecter les parasites sur l'harmonique (NS2, ; NS0_ew), de numero 45 dans harm_N. Tous les harmoniques a ; une meme frequence sont ainsi gardes ou jetes. Des frequen- ; ces differentes ne sont pas forcement parasitees ensemble. ; Test d'integration ameliore sur plusieurs harmoniques RH_DP_SUB_1, $ ; fichier RH_DP_CALIB_SUB.PRO ant_test_par, a_p, correl, i_polar, $ ; entree n_image, freq, nf, $ ; entree harm_N_np_moy, harm_N_np, $ ; entree i_integ_np ; sortie, drapeau ; d'integration. t_i_integ(n_im_f(nf), 0, nf) = i_integ_np ; rappel : t_i_integ tableau d'autorisation d'integration, ; n_im_f numero d'image a la freq de numero nf. ; 2eme indice : non polar ou polar. if (i_polar eq 1) then goto, a1 ; Dans ce cas on ne fait pas l'integration selective non ; polar. On utilise seulement i_integ_np pour en affecter ; la valeur a i_integ_p. ; Integration selective proprement dite if (i_integ_np eq 1) then begin harm_N_np_I(*, nf) = harm_N_np_I(*, nf) + harm_N_np c_harm_N_np_I (nf) = c_harm_N_np_I(nf) + 1 endif endif ; fin du if de 2eme lecture non polar. freq_I (nf) = freq max_np = 1 ; valeur bidon pour RH_CLOSE_HEADER. min_np = 1 ; valeur bidon pour RH_CLOSE_HEADER. ; Fin d'integration non polar a1: J_M = 0 ; fin du saut de l'integration non polar. ; Debut d'integration polar if (i_polar eq 1) then begin harm_N_p = complex(pt(0, 1, *), pt(1, 1, *)) ; le 2eme indice indique non polar ou polar. harm_N_p = reform(harm_N_p) ; pour supprimer 2 indices degeneres. ; Integration non selective if (i_lec eq 1) then begin harm_N_p_moy(*, nf) = harm_N_p_moy(*, nf) + harm_N_p endif ; Integration selective if (i_lec eq 2) then begin ; Test d'integration ameliore sur plusieurs harmoniques RH_DP_SUB_1, $ ; dans fichier RH_DP_CALIB_SUB.PRO ant_test_par, a_p, correl, i_polar, $ ; entree. n_image, freq, nf, $ ; entree. harm_N_p_moy, harm_N_p, $ ; entree. i_integ_p ; sortie. t_i_integ(n_im_f(nf), 1, nf) = i_integ_p ; Integration selective proprement dite ; Pour une observation destinee a la calibration de nom- ; breux harmoniques polar sont nuls. En particulier NS2 ; et NS4 entre elles et avec H10 et H12, qui sont utili- ; ses dans la detection des parasites impulsifs. ; Pour un observation de controle et si le reseau H est de- ; point'e, il y a moins d'harmoniques polar nuls mais ; (NS2, NS4) reste nul. ; Par simplicite dans un premier temps (12 mai 03) on admet ; que si une scrutation non polar est acceptable la scru- ; tation polar l'est aussi. Pour preserver l'avenir et ; modifier le moins possible ls structure du programme ; on ecrase i_integ_p avec i_integ_np. ; Rem : La partie polar de t_i_integ n'est pas ecrasee ; mais elle devient inutilisee. i_integ_p = i_integ_np ; solution du 12 mai 03 if (i_integ_p eq 1) then begin ; on peut faire le test sur i_integ_np mais alors il ; faut changer plus bas la normalisation de l'inte- ; gration selective. harm_N_p_I(*, nf) = harm_N_p_I(*, nf) + harm_N_p c_harm_N_p_I(nf) = c_harm_N_p_I(nf) + 1 endif endif ; fin du if de 2eme lecture polar. freq_I (nf) = freq endif ; fin d'integration polar. klu = klu + 1L ; numero de l'engrt suivant a lire, n_image = n_image + 1 ; numero d'image suivante, toutes fre- ; quences selectionnees jointes. n_im_f(nf) = n_im_f(nf) + 1 ; incrementation du compteur de scru- ; tations pour la frequence corres- ; pondant a la scrutation lue. endwhile ; Fin de boucle sur les acquisitions et les frequences. hmsc_fin = hmsc ; pour passage a RH_IMAGE_CON. ; CONTROLE des scrutations integrees sans selection (non polar ou polar) a ; toutes les frequences icon = 0 if ((icon eq 1) and (i_lec eq 1)) then begin if (i_polar eq 0) then $ DP_CON_1, correl, i_polar, freq_I, harm_N_np_moy, harm_N_np_moy if (i_polar eq 1) then $ DP_CON_1, correl, i_polar, freq_I, harm_N_p_moy, harm_N_p_moy endif ; Controle de la selection des scrutations au cours de la 2eme lecture icon = 0 if ((icon eq 1) and (i_lec eq 2)) then $ DP_CON_2, n_image, nsel, freq_I, t_i_integ ; Rappel : le 2eme indice de t_i_integ correspond a non polar ou ; polar. ; Fermeture du fichiers lu a0: J_M = 0 ; fin saut de sortie de boucle while. n_image = n_image - 1 ; nbre d'images (dernier + 1 en trop). ; c_harm_N_np_I = c_harm_N_np_I - 1 ; ------------- np non parasitees. ; c_harm_N_p_I = c_harm_N_p_I - 1 ; ------------- polar -------------- rh_close ; fermeture du fichier de lecture. ; Normalisation des scrutations integrees sans excision des parasites et aiguil ; lage vers la relecture pour excision de parasites ou vers les traces. ; La normalisation de l'integration selective est faite plus bas. if (i_lec eq 1) then begin ; eq 10 pour essais (comme avant) harm_N_np_moy = harm_N_np_moy / (n_image/nsel) harm_N_p_moy = harm_N_p_moy / (n_image/nsel) a_harm_N_np_moy = abs(harm_N_np_moy) a_harm_N_p_moy = abs(harm_N_p_moy) ; a_harm_N_np_moy sera considere comme une valeur raisonnable du ; niveau des harmoniques. ; Rem : il est inutile de remettre a zero les accumulateurs ; harm_N_np_I et harm_N_p_I, car ils seront re-definis dans ; le 2eme passage. ch_format = "(' : fin 1ere lecture,', i5,' scrutations " + $ "(', i4, ' par frequence).')" ; print, format=ch_format, n_image, n_image/nsel ; print, ' : debut 2eme lecture.' ; help, nsel, klu, n_image ; on verifie avec cette instruction que klu est bien le numero ; d'enregitrement a partir du debut du fichier et que n_image est ; le nombre total d'images lues pour l'ensemble des frequences ; selectionnees. icon = 0 if (icon eq 1) then begin window, 0 plot, a_harm_N_np_moy(0 : 575, num_freq) stop endif goto, a6 ; vers 2eme lecture de fichier. endif ; Controle des compteurs de scrutations integrees aux frequences selectionnees icon = 0 if (icon eq 1) then begin print, 'n_im_f =', n_im_f print, ' ' print, 'c_harm_N_np_I =', c_harm_N_np_I endif t_integ = systime(1) dt = t_integ - t_lec ch_format ="(6x, 'Fin 2eme lecture et retrait parasites :', i3, ' sec')" print, format=ch_format, nint(dt) print, ' ' ch_format = "(5x, i2, ' frequences,', i8, ' images lues,', i8, " + $ "' images lues par freq')" print, format=ch_format, nsel, n_image, nint(n_image / nsel) print, ' Nombres d''images integrees pour les frequences ' + $ 'selectionnees :' print, ' non polar :', c_harm_N_np_I(0:5) print, ' polar :', c_harm_N_p_I (0:5) if ( (i_polar eq 0) and (c_harm_N_np_I(num_freq) eq 0) ) then begin print, 'Aucune image selectionne a la frequence demandee' stop endif if ( (i_polar eq 1) and (c_harm_N_p_I(num_freq) eq 0) ) then begin print, 'Aucune image selectionne a la frequence demandee' stop endif ; Controle integration icon = 0 if (icon eq 1) then begin ; rappel si i_polar=0 h arm_N_np_I ne 0 harm_N_p_I =0 ; i_polar=1 h arm_N_np_I = 0 harm_N_p_I ne 0 ; Trace de harm_N_np_I ou harm_N_p_I if (i_polar eq 0) then begin harm_N_I = harm_N_np_I ch_label = 'abs(harm non polar integres)' endif if (i_polar eq 1) then begin harm_N_I = harm_N_p_I ch_label = 'abs(harm polar integres)' endif amax = max(abs(harm_N_I(*, num_freq)), min=amin) & da = amax-amin ymax = amax + 0.05 * da & ymin = amin - 0.05 * da window, 0 plot, abs(harm_N_I(*, num_freq)), $ xrange=[-20, n_elements(harm_N_I(*, num_freq)) + 20], xstyle=1, $ yrange=[ymin, ymax], ystyle=1 xyouts, 0.5, 0.97, /normal, alignment=0.5, ch_label stop endif print, 'Fin integration et debut de calcul et trace des images' ; Balayage sur les frequences pour retenir la seule frequence selectionnee ; Rappel : il y avait un bouclage sur les frequences dans le while de ; lecture. for nf=0, 10-1 do begin ; pour balayer toutes les frequences, ; selectionnees ou non freq = freq_I(nf) if (freq eq 0) then goto, a5 ; freq non selectionnee dans sel_freq. ; Saut vers la frequence suivante. if (i_polar eq 1) then goto, a7 ; Non polar et polar ne sont pas traitees sur le meme plan. C'est ; un reste du cas des images solaires. ch_format = "('Frequence', i4, ' MHz :', i6, ' images lues,'," + $ "i6, ' images non polar non parasitees')" print, ' ' print, format=ch_format, nint(freq), nint(n_image/nsel), $ c_harm_N_np_I(nf) harm_N_np = reform(harm_N_np_I(*, nf) / c_harm_N_np_I(nf) ) ; pour une simulation n_image=1 et si nsel>1 on diviserait ; par zero. ; niveau de boucle sur les frequences dans les traces non polar. ; Mise a zero des harmoniques de E1 et E0 avec les H d'ordre > 16 ; (i_pave_seul=1) ; Les autres harmoniques exterieurs au pave central seront annules ; dans RH_IMAGE_CON grace a sel_ant, qui a ete modifie par ; i_pave_seul. ; De toutes facons ce n'est qu'une rustine de mise au point. if (i_pave_seul eq 1) then begin harm_N_np(521 - 7 : 521) = 0 harm_N_np(539 - 7 : 539) = 0 ; E1 ---- E2, E1, H1 a H16 504 a 521 ; E0 ---- E2, E1, H1 a H16 522 a 539 endif ; Excision simplifiee d'une eventuelle 2eme source compacte ; (rustine du 8 dec 04 pour excision du cas du 27 aug 02 ; La source excisee est supposee plus faible que celle qui sert a ; calibrer. ; On la retire, ainsi que son alias,mais de facon moins complete ; que la source principale quand il s'agira de determiner la ; base. xm2 = -1 ; abscisse du max, en canaux interfero entre -64 + 63 ym2 = 0 ; ordonnee ------------------------------------------ larg_b = 3 ; 1/2 largeur de la barre d'ecretage (canaux interfero) r_cont = 5 ; rayon domaine de contrainte pour interpol facettes ; (canaux interferometriques) long_ew = 6 ; 1/2 longueur de la barre d'ecretage EW ------------ if (i_soustrac_comp eq 1) then begin i_recentrage = 0 & x_centrage = 0 & y_centrage = 0 ; bidons. i_stop = 1 i_pave_plein = 0 RH_MALC_IM_2D, $ ; entree i_stop, i_sys_lin, $ i_pave_plein, i_recentrage, x_centrage, y_centrage, $ freq, ie0_ew, harm_N_np, correl, npi, n_bord, $ ; sortie: image interfero et lobe theorique, avec le centre du ; Soleil en (npi/2, npi/2). harl_0, l_th, harm_0, im_2d, flux_total, flux_compact, uu, vv SOUSTRAC_COMPACT, $ ; fichier SOUSTRAC_C_B_H i_sys_lin, npi, $ ; entree parametres generaux larg_b, r_cont, long_ew, $ ; entree parametres d'ecretage xm2, ym2, $ ; entree position source correl, harm_N_np, im_2d, $ ; entree donnees im_ecr, harm_N_ecr, im_ecr_2 ; sortie ; im _ecr image ecretee avec les bandes interpolees. ; Sa TF n'est donc pas strictement limitee ; a la grille incomplete du RH ; harm_N_ecr vecteur harm_N calcule a partir de im_ecr. ; Il ne contient donc pas toute l'informa- ; tion de im_ecr. ; im_ecr_2 image recalculee a partir de harm_N_ecr. ; C'est donc un filtrage de im_ecr par le ; RH. les bandes ont disparu et les secon- ; daires obliteres sont reconstitues. Satis- ; faisant a l'oeil. icon = 0 if (icon eq 1) then begin CALIB_CON ; pour compiler. CALIB_CON_74, i_sys_lin, npi, freq, correl, im_2d, im_ecr, $ harm_N_ecr, im_ecr_2 endif ; Elimination definitive de la source secondaire harm_N_np = harm_N_ecr ; im_2d = im_ecr_2 ; utile ? endif ; fin du if d'excision de la source compacte secondaire. ; Recalibration non polar eventuelle (usage fichiers coeff_corr* seuls) if (i_recalib eq 1) then begin harm_0 = harm_N_np i_np_p = 0 ; 0 non polar, 1 polar RH_RECALIBRATION, $ ; fichier RH_RECALIBRATION.PRO n_image, $ ; entree i_np_p, freq, fich_cor, $ ; ------ correl, $ ; ------ harm_N_np ; ------ sortie icon = 0 if (icon eq 1) then begin diff = harm_N_np - harm_0 window, 2 plot, abs(diff) print, abs(diff) stop endif endif ; Correction eventuelle de certaines antennes (gains entres manuellement) ; Il n'y a pas de "if" car on entre les drapeux d'utilisation ; g_flag. n_image = 1 ; pour compatibilite CORR_GAIN_ANT, $ ; fichier RH_CORR_ANTENNES.PRO n_image, $ ; entree. phi_ew_ns, phi_w_e, $ ; ----- g_flag, g_amp, g_phi, $ ; ------ correl, $ ; ------ harm_N_np ; entree et sortie ; Correction des irregularites d'implantation d'antennes ; (doit tenir compte que c'est recalibre ou non pour faire la cor- ; rection de position d'antennes) if (i_corr_pos_ant eq 1) then begin n_image = 1 ; pour compatibilite CORR_POS_ANT, $ ; dans RH_CORR_ANTENNES.PRO n_image, $ ; entree i_source_cal, h_cal, $ ; ------ date_obs, dec, hmer, ihm_moy, $ ; ------ correl, freq, $ ; ------ harm_N_np ; entree et sortie ; . dec et hmer sont relatifs a la source observee. Pour la ; source de calibration (en fait souvent la meme que la ; source de controle) ces grandeurs sont definies dans ; CORR_POS_ANT. ; . i_source cal identifie la source de calibration ou de ; recalibration (qui oblitere la calibration du TR) ; . h_cal heure de calibration (dans l'entete du fichier ; apres mise enservice des AA fin 2003). Ecrasee plus haut ; par h_recal s'il y a recalibration. ; . ihm_moy est [heure, min] de la scrutation en TS (source de ; controle) ou en TU (soleil). On en fait la difference ; avec hmer, exprimee dans le meme temps (TS ou TU). endif ; Correction depointage et rotation des antennes (sources de controle) ; Dans ce cas date_obs suffit pour savoir comment corriger. Le cas ; de l'examen de sources de calibration n'est pas prevu au 11 avr ; 03. ; Rem : avec RH_DP_CALIB l'appel a CORR_ROT_DEP_NP ne figure pas ; a ce stade car il est fait dans CALIBRATION. type_obs = 1 & type_calib = 1 & n_image = 1 ; pour compatibilite CORR_ROT_DEP_NP, $ ; dans fichier RH_CORR_ANTENNES.PRO n_image, $ ; entree. date_obs, type_obs, type_calib, $ ; ------ i_corr_rot_NS0, $ ; ------ rotew, rotns, ah_dep, delta, freq, $ ; ------ (rads, MHz). harm_N_np, $ ; ------ et sortie. a_H2, a_NS0 ; sortie (radians), ; Controle des harmoniques NS de NS0_ew et NS0_ns icon = 0 if (icon eq 1) then begin ch_polar = 'non polar : ' DP_CON_1, freq, ch_polar, harm_N_np endif ; niveau de la boucle de lecture des scrutations successives. ; Calcul de l'image non polar et normalisation ; Le temps cpu utilis'e depuis le debut de la boucle sur les scru- ; tations est environ 0.162 sec sur mesopz ch_pol = 'non polar' RH_IMAGE_CON, $ ; dans fichier RH_IMAGE_CON.PRO ; tous les parametres sont en entree. Version simplifiee de ; RH_CALC_IMAGE_HELIO. ; Caracterisation image sref, correl, freq, ch_pol, npi, n_bord, $ ; Suppression (eventuelle) des harmoniques de certaines antennes ie0_ew, ie0_ns, ie1_ew, ie2_ew, ie2_ns, $ ins45_ew, ins45_ns, i_redond, gap_ns0, sel_ant, $ ; Donnees pour une image n_image, hmsc_deb, hmsc_fin, $ harm_N_np, $ ; Divers i_sys_lin, i_AA_NS8, $ ; Affichages dans IM_2D_CON icon_1, icon_2, icon_3, icon_4, n_win, fr_z, ch_siz ; Rem : n_image, hmsc_debut, hmsc_fin sont ajoutes le 24 ; nov 2005 pour affichage sur le trace. ; niveau non polar de la boucle de lecture des scrutations successives. ; Fin de traces non polar. if (i_polar eq 0) then goto, a5 ; vers fin de procedure. ; Non polar et polar ns sont pas sur lr meme plan. C'est un reste ; du cas des images solaires. ; niveau non polar a7: J_M = 0 ; fin du saut de l'image non polar si i_polar=1 . ; Debut de traitement de l'image polar if (i_polar eq 1) then begin harm_N_p = reform(harm_N_p_I(*, nf) / c_harm_N_p_I(nf) ) ; niveau polar dans boucle de lecture des scrutations successives. ; Controle de series d'harmoniques NS (pour verif VERIF_ANTENNES polar) icon = 0 if (icon eq 1) then begin hNS_NS0_ew = complexarr(25) for i=1, 24 do hNS_NS0_ew(i) = harm_N_p(9 + 18 *i) ch_format ="(50f8.3)" print, ' ' print, 'NS0_ew avec les NS' print, format=ch_format, abs(hNS_NS0_ew) print, ' ' print, 'NS0_ns avec NS7 a NS23' print, format=ch_format, abs(harm_N_p(573:575)), $ abs(harm_N_p(558:572)) print, ' ' print, 'NS8 avec NS0 a NS17' print, format=ch_format, abs(harm_N_p(540:557)) print, ' ' print, 'NS45 avec les NS' print, format=ch_format, abs(harm_N_p(450:485)) print, ' ' stop endif ; Recalibration polar eventuelle if (i_recalib eq 1) then begin i_np_p = 1 ; 0 non polar, 1 polar. n_image = 1 ; pour compatibilite RH_RECALIBRATION, $ ; fichier RH_RECALIBRATION.PRO n_image, $ ; entree i_np_p, freq, fich_cor, $ ; entree correl, $ ; entree harm_N_p ; entree sortie endif ; Correction eventuelle de certaines antennes (gains "manuels") ; Pas de "if" car on entre le drapeau d'utilisation. n_image = 1 ; pour compatibilite CORR_GAIN_ANT, $ ; fichier RH_CORR_ANTENNES.PRO. n_image, $ ; entree. phi_ew_ns, phi_w_e, $ ; ----- g_flag, g_amp, g_phi, $ ; ------ correl, $ ; ------ harm_N_p ; entree et sortie ; Correction d'implantation irreguliere des antennes if (i_corr_pos_ant eq 1) then $ n_image = 1 ; pour compatibilite CORR_POS_ANT, $ ; fichier RH_CORR_ANTENNES.PRO n_image, $ ; entree i_source_cal, h_cal, $ ; ------ date_obs, dec, hmer, ihm_moy, $ ; ------ correl, freq, $ ; ------ harm_N_p ; entree sortie ; Correction des harmoniques dans le cas de l'examen des sources de ; controle ; Dans ce cas date_obs suffit pour savoir comment corriger. Le ; cas de l'examen de sources de calibration n'est pas prevu ; au 11 avr 03. ; Rem : avec RH_DP_CALIB l'appel a CORR_ROT_DEP_P ne figure pas ; ici car il est fait dans CALIBRATION_P. type_obs = 1 & type_calib = 1 & n_image = 1 ; pour compatibilite CORR_ROT_DEP_P, $ ; dans fichier RH_CORR_ANTENNES.PRO n_image, $ ; entree date_obs, type_obs, type_calib, $ ; ------ i_corr_rot_NS0, $ ; ------ rotew, rotns, ah_dep, delta, freq, $ ; ------ (rads, MHz). harm_N_p, $ ; ------ et sortie. a_H2, a_NS0 ; sortie (radians), ; Controle des harmoniques NS de NS0_ew et NS0_ns icon = 0 if (icon eq 1) then begin ch_polar = 'polar : ' DP_CON_1, freq, ch_polar, harm_N_p endif ; niveau de la boucle de lecture des scrutations successives. ; Remplacement eventuel des donnees polar par des donnees simulees ; La simulation concerne ici uniquement les donnees solaires. ; Dans le cas de la calibration elle est faite plus bas. ; if (i_simulation eq 0) then begin ; objet_simule = 0 ; au lieu de fltarr(npi, npi). Economie. ; tf_objet_simule = 0 ; ------------------------------------- ; endif ; Calcul de l'image polar et normalisation ch_pol = 'polar' RH_IMAGE_CON, $ ; dans fichier RH_IMAGE_CON ; tous les parametres sont en entree. ; Caracterisation image sref, correl, freq, ch_pol, npi, n_bord, $ ; Suppression eventuelle des harmoniques de certaines antennes ie0_ew, ie0_ns, ie1_ew, ie2_ew, ie2_ns, $ ins45_ew, ins45_ns, i_redond, gap_ns0, sel_ant, $ ; Donnees pour une image n_image, hmsc_debut, hmsc_fin, $ harm_N_p, $ ; Divers i_sys_lin, i_AA_NS8, $ ; Affichages dans IM_2D_CON icon_1, icon_2, icon_3, icon_4, n_win, fr_z, ch_siz max_p = max(im_2d_p, ind_p, min=min_p) ; print, 'RH_DPATCHFITS_NRH (apres RH_CALC_IMAGE_HELIO' + $ ; ' polar) heure scrut traitee : ', ch_hms endif ; fin de traces polar. a5: J_M = 0 ; fin du saut de l'image polar si i_polar=0, ou de la frequence ; tout entiere (non polr et polar) si elle n'est pas selec- ; tionnee. endfor ; Fin de boucle sur les frequences end ; fin de VERIF_ANTENNES