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