| 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 | 
 | 
|---|