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