| 1 | #include "manip.h" | 
|---|
| 2 | #include "choix_acquisition.h" | 
|---|
| 3 | #include "archeops.h" | 
|---|
| 4 | #include "choix_param.h" | 
|---|
| 5 | #include "structure.h" | 
|---|
| 6 | #include "fenetres_diabolo.h" | 
|---|
| 7 |  | 
|---|
| 8 | #define   acquisition_PCI  ( (tt->PCI_actif==1) ou  (tt->PCI_actif==4) ) | 
|---|
| 9 | #define   acquisition_avec_telecommande  (tt->PCI_actif==4) | 
|---|
| 10 |  | 
|---|
| 11 | /* | 
|---|
| 12 | Le fichier de données diabolo est un fichier mac de type 'DIA2' qui contient | 
|---|
| 13 | une suite d'enregistrements. | 
|---|
| 14 |  | 
|---|
| 15 | Il commence par une entete correspondant à la structure de type F_entete | 
|---|
| 16 | - cette entete contient | 
|---|
| 17 |  | 
|---|
| 18 | On a ensuite une suite d'enregistrements comportant chacun: | 
|---|
| 19 | - une entete partielle avec les parametres de mesure, y compris les parametres DAC | 
|---|
| 20 | structure de type F_entete_part | 
|---|
| 21 | - une suite de valeur correspondant à chaque point mesuré et contenant: | 
|---|
| 22 | Le temps calculé | 
|---|
| 23 | Les 6 signaux de synchro | 
|---|
| 24 | Les voies 1 à 7 :  5 bolometre + 1 temperature + 1 chauffage regul | 
|---|
| 25 |  | 
|---|
| 26 | */ | 
|---|
| 27 |  | 
|---|
| 28 |  | 
|---|
| 29 |  | 
|---|
| 30 | /* | 
|---|
| 31 | long_entete            = 272 | 
|---|
| 32 | long_entete_part       = 2128 | 
|---|
| 33 | long_donne             = 14 | 
|---|
| 34 |  | 
|---|
| 35 | */ | 
|---|
| 36 |  | 
|---|
| 37 |  | 
|---|
| 38 | /*  ancienne structure reglage de DIABOLO        (longueur= 12 + 14 *  nb_max_bolo ) */ | 
|---|
| 39 | /*      la nouvelle structure  a une longueur de  :     4  +  8 * nb_max_bolo  + automatismes + regul */ | 
|---|
| 40 | /*typedef struct | 
|---|
| 41 | { | 
|---|
| 42 | long    duree;                   durée d'une periode (en unite de 4.8 µsec) | 
|---|
| 43 | short   nb_mesures;              nombre de mesures dans une periode entiere 46 à 92 | 
|---|
| 44 | short   temp_mort;               temps mort pour la detection synchrone numerique | 
|---|
| 45 |  | 
|---|
| 46 | short   periode_horloge;         durée d'une periode (en unite de 0.2 µsec), 20 à 80 | 
|---|
| 47 | short   flag;                    ---------------------------------------------- | 
|---|
| 48 |  | 
|---|
| 49 | short   gainbrut[nb_max_bolo];   valeur du gain codé : (0,1,2,...,15) | 
|---|
| 50 | short   gain[nb_max_bolo];       valeur du gain en vraies valeurs(1,2,4,8,10,...,100) | 
|---|
| 51 | short   dac[4][nb_max_bolo];     les valeurs des DAC 4 voies en entier (0 à 4095) | 
|---|
| 52 | short   phase[nb_max_bolo];      valeur du dephasage individuel : valeur  0  à  1 | 
|---|
| 53 |  | 
|---|
| 54 | } | 
|---|
| 55 | reglage_bolo; | 
|---|
| 56 | */ | 
|---|
| 57 |  | 
|---|
| 58 |  | 
|---|
| 59 | extern   param_bolo     parametr;               // liste bolo dans le programme principal | 
|---|
| 60 | extern   reglage_bolo   reglage_standard[8];            // liste bolo dans le programme principal | 
|---|
| 61 |  | 
|---|
| 62 |  | 
|---|
| 63 | typedef struct  { | 
|---|
| 64 | short   version;                // 2 pour cette version du programme | 
|---|
| 65 |  | 
|---|
| 66 | short   long_entete;            // longueur de l'entete | 
|---|
| 67 | short   long_entete_part;       // longueur de l'entete partielle | 
|---|
| 68 | short   long_donne;             // longueur d'une ligne de données | 
|---|
| 69 |  | 
|---|
| 70 | unsigned long tempsdebut;       // temps de debut de fichier (temps mac en sec) | 
|---|
| 71 | unsigned long tempsfin;         // temps de fin de fichier   (temps mac en sec) | 
|---|
| 72 | char commentaires[256];         // commentaires à la main | 
|---|
| 73 | } F_entete; | 
|---|
| 74 |  | 
|---|
| 75 |  | 
|---|
| 76 | typedef struct | 
|---|
| 77 | { | 
|---|
| 78 | short   n_ligne_don;            // Nombre de lignes de donné dans cet enregistrement | 
|---|
| 79 | // ou    nombre d'octets du commentaire | 
|---|
| 80 | short   n_blok;                 // numero du blok dans le fichier | 
|---|
| 81 | short   change;                 // valeur 0 = bloc identique au precedent | 
|---|
| 82 | // valeur 1 = bloc modifié | 
|---|
| 83 | // valeur 2 = debut de prise de donnees | 
|---|
| 84 | // valeur 10 = le block ne contient qu'un commentaire | 
|---|
| 85 | // valeur 1001 et suivante : block telescope type  th | 
|---|
| 86 | // valeur 2001 et suivante : block telescope type  tp | 
|---|
| 87 |  | 
|---|
| 88 | short   bololut;                //  ancien parametre: bit 0 à bit 3  ==1  si les courbes bolo ont ete lues | 
|---|
| 89 | } F_block_desc; | 
|---|
| 90 |  | 
|---|
| 91 |  | 
|---|
| 92 | typedef struct | 
|---|
| 93 | { | 
|---|
| 94 |  | 
|---|
| 95 | unsigned long   temps_controleur_debut;         // en micro/secondes :temps du premier point dans le bloc | 
|---|
| 96 | unsigned long   temps_controleur_fin;           // en micro/secondes :temps du dernier point dans le bloc | 
|---|
| 97 |  | 
|---|
| 98 | reglage_bolo    reglage; | 
|---|
| 99 |  | 
|---|
| 100 | short   bol_per[nb_max_bolo][nb_max_mes_per];   //   courbe echantillon d'une mesure | 
|---|
| 101 |  | 
|---|
| 102 | } F_block_param; | 
|---|
| 103 |  | 
|---|
| 104 |  | 
|---|
| 105 | //__________________________   calcul des valeurs  vraies en micro/volt | 
|---|
| 106 |  | 
|---|
| 107 | //#define       xbolbrut(j)     ((1e5*(double)gg->don.don_bolo[j])/(65536.*((double)(gg->reglage.gain[j]))))            // en µV | 
|---|
| 108 | //#define       xbolbrut(jjj)   ((1e7*(double)gg->don.don_bolo[jjj])/(65536.*(double)parametr.bolo_gain[jjj]*gain_ampli(gg->reglage.bolo[jjj])))                // en µV | 
|---|
| 109 | #define xbolbrut(jjj)   bol_micro_volt(gg->don.don_bolo[jjj],(double)parametr.bolo[jjj].bolo_gain*gain_ampli(gg->reglage.bolo[jjj]))    // en µV | 
|---|
| 110 |  | 
|---|
| 111 | #define xbol(jjj)       gg->corel[jjj] | 
|---|
| 112 |  | 
|---|
| 113 |  | 
|---|
| 114 |  | 
|---|
| 115 | typedef struct          // structure globale gg  dans le programme principal | 
|---|
| 116 | { | 
|---|
| 117 | //      param_bolo      param;                                  // liste bolo dans le programme principal | 
|---|
| 118 | reglage_bolo    reglage;                                // etat bolo dans le programme principal | 
|---|
| 119 |  | 
|---|
| 120 | double          temperature_cryo;       // temperature du cryo (0.1K) en K | 
|---|
| 121 | /* La germanium doit toujours etre en premier par rapport aux autres thermos absolus */ | 
|---|
| 122 |  | 
|---|
| 123 | short           bol_per[nb_max_bolo][nb_max_mes_per];   // table une periode | 
|---|
| 124 |  | 
|---|
| 125 |  | 
|---|
| 126 | //  ------  données lues en un point: | 
|---|
| 127 |  | 
|---|
| 128 | double          periode_echantillonage; | 
|---|
| 129 | unsigned long   temps_cntl;                     //  temps courant de la lecture d'un point | 
|---|
| 130 | unsigned long   temps_mac;                      //  temps courant de la lecture d'un point | 
|---|
| 131 |  | 
|---|
| 132 | F_donne         don; | 
|---|
| 133 |  | 
|---|
| 134 | double          corel[nb_max_bolo+3+nb_photo_diodes];           // données apres corellation eventuelle | 
|---|
| 135 |  | 
|---|
| 136 |  | 
|---|
| 137 | //__________________________________________________________________________________ | 
|---|
| 138 | // ----------  parametres generaux | 
|---|
| 139 |  | 
|---|
| 140 | int     depou_en_cours;                 // la tache de fond est active | 
|---|
| 141 |  | 
|---|
| 142 | int     trace_ouvert;                   //  pour connaitre les fenetre de trace ouverte | 
|---|
| 143 | //  1 -->  trace tout  ---  n'est plus utilise | 
|---|
| 144 | //  2 -->  trace une periode | 
|---|
| 145 | //  4 -->  trace detection synchrone | 
|---|
| 146 | //  8 -->  trace ondelette | 
|---|
| 147 | //  16 --> trace carte des lobes | 
|---|
| 148 | //  32 ->  une synchro selectuionnée | 
|---|
| 149 |  | 
|---|
| 150 | int     trace_tout[8];                  //  numero des 8 fenetres trace_tout si elles sont ouvertes | 
|---|
| 151 | int     fichier_dia2_ouvert;            //  pour connaitre les fichiers ouverts | 
|---|
| 152 | int     fichier_arch_ouvert;            //  pour connaitre les fichiers ouverts | 
|---|
| 153 | int     flag_fou;                       //  flag pour transformé de fourier | 
|---|
| 154 | int     flag_corel;                     //  flag pour transformé de fourier | 
|---|
| 155 | int     flag_tc_reduite;                //  flag pour telecommandes reduites | 
|---|
| 156 | int     scan_en_cours;                  // scan en cours pour autoval, sauve fichier et bip de fin de scan | 
|---|
| 157 | int     compte_subscan;                 // compte les sub scan | 
|---|
| 158 | int     compte_fichiers_th;             // compte les fichiers telescopr de type th sub scan | 
|---|
| 159 | int     compte_fichiers_tp;             // compte les fichiers telescopr de type tp  sub scan | 
|---|
| 160 | int     nb_trace; | 
|---|
| 161 | double  temps_origine;                  //  origine des temps en secondes pour trace | 
|---|
| 162 |  | 
|---|
| 163 |  | 
|---|
| 164 |  | 
|---|
| 165 | //  ------  pour enregistrement d'une transitoire individuel | 
|---|
| 166 |  | 
|---|
| 167 |  | 
|---|
| 168 | //      int             transilut;                                                                                      // un seul flag pour tous : la table a été lue | 
|---|
| 169 | //      int             transiindice;           le// indice pour ecriture de la table transi | 
|---|
| 170 | //      short   transi[nb_max_bolo][max_nb_transi];// table une periode | 
|---|
| 171 |  | 
|---|
| 172 | } | 
|---|
| 173 | stglob; | 
|---|
| 174 |  | 
|---|
| 175 |  | 
|---|
| 176 |  | 
|---|
| 177 | extern  stglob  *gg; | 
|---|
| 178 |  | 
|---|
| 179 |  | 
|---|
| 180 | void    tache_rapide(void); | 
|---|
| 181 |  | 
|---|
| 182 |  | 
|---|
| 183 | void    emission_telecommande(int direction,void * tc); // telecommande une chaine de 10 mots | 
|---|
| 184 | void    emission_tc_reduite(unsigned char mot1,unsigned char mot2,unsigned char mot3); | 
|---|
| 185 |  | 
|---|
| 186 | void    param_reglage(void); | 
|---|
| 187 |  | 
|---|
| 188 | void    montracen(int fen,int n,double x,double*y); | 
|---|
| 189 | int     bolo_rouge(void);               //  l'indice du bolo rouge | 
|---|
| 190 |  | 
|---|
| 191 | void    rafraichis_fenetres(void); | 
|---|
| 192 |  | 
|---|
| 193 |  | 
|---|
| 194 | void    traite_block_journal            (block_type_journal*            blk); | 
|---|
| 195 | void    traite_block_reglage            (block_type_reglage*            blk); | 
|---|
| 196 | void    traite_block_dilution           (block_type_dilution*           blk); | 
|---|
| 197 | void    traite_block_gps                (block_type_gps*                blk); | 
|---|
| 198 | void    traite_block_une_periode        (block_type_une_periode*        blk); | 
|---|
| 199 | void    traite_block_bolo_comprime      (block_type_bolo_comprime*      blk); | 
|---|
| 200 | void    traite_block_bolo               (block_type_bolo*               blk); | 
|---|
| 201 | void    traite_block_sst_brut           (block_type_sst*                blk); | 
|---|
| 202 | void    traite_block_sst_comprime_brut  (block_type_sst_comprime*       blk); | 
|---|
| 203 | void    traite_block_sst                (block_type_sst*                blk); | 
|---|
| 204 | void    traite_block_sst_comprime       (block_type_sst_comprime*       blk); | 
|---|
| 205 | void    traite_block_gyro               (block_type_gyro*               blk); | 
|---|
| 206 | void    traite_block_gyro_comprime      (block_type_gyro_comprime*      blk); | 
|---|
| 207 | void    traite_block_synchro_sol        (block_type_synchro_sol*        blk); | 
|---|
| 208 |  | 
|---|
| 209 | #ifdef  transmet_data_brute | 
|---|
| 210 | void    traite_block_data_brute         (block_type_data_brute*         blk); | 
|---|
| 211 | #endif | 
|---|
| 212 |  | 
|---|
| 213 |  | 
|---|