source: Sophya/trunk/Poubelle/archTOI.old/archeopsfile.cc@ 315

Last change on this file since 315 was 315, checked in by ansari, 26 years ago

Archeops 24, gestion byte-swap

File size: 19.3 KB
Line 
1#define utilitaires_de_block_archeops
2#include "archeopsfile.h"
3extern "C" {
4#include "compress.h"
5}
6#include <iostream.h>
7
8// BlockSet is the current "state" of the file reader automate.
9// It contains the last blocks of each kind, the current block and
10// the look-ahead block.
11
12class BlockSet {
13public:
14 BlockSet();
15 BlockSet(BlockSet const&);
16 ~BlockSet();
17 void setBloc(block_type_modele const& blk);
18 void setRawBloc(block_type_modele const& blk);
19
20 block_type_param* lastParam;
21 block_type_journal* lastJournal;
22 block_type_reglage* lastReglage;
23 block_type_dilution* lastDilution;
24 block_type_gps* lastGPS;
25 block_type_une_periode* lastUnePeriode;
26 block_type_synchro_sol* lastSynchroSol;
27 block_type_pointage_sol* lastPointageSol;
28 block_type_bolo* lastBolo; // can be uncompressed bolo_comp
29 block_type_bolo* llastBolo;
30 block_type_gyro* lastGyro;
31 block_type_sst* lastSST;
32 block_type_bolo_comprime* lastBoloComp; // can be uncompressed bolo_comp
33 block_type_gyro_comprime* lastGyroComp;
34 block_type_sst_comprime* lastSSTComp;
35
36 block_type_modele curBlock;
37 block_type_modele peekBlock;
38
39 SSTHandler sstHandler;
40};
41
42BlockSet::BlockSet() {
43 lastParam = NULL;
44 lastJournal = NULL;
45 lastReglage = NULL;
46 lastDilution = NULL;
47 lastGPS = NULL;
48 lastUnePeriode = NULL;
49 lastSynchroSol = NULL;
50 lastPointageSol= NULL;
51 lastBolo = NULL;
52 llastBolo = NULL;
53 lastGyro = NULL;
54 lastSST = NULL;
55 lastBoloComp = NULL;
56 lastGyroComp = NULL;
57 lastSSTComp = NULL;
58
59 memset(&curBlock,0,sizeof(block_type_modele));
60 memset(&peekBlock,0,sizeof(block_type_modele));
61}
62
63BlockSet::~BlockSet() {
64 delete lastParam;
65 delete lastJournal;
66 delete lastReglage;
67 delete lastDilution;
68 delete lastGPS;
69 delete lastUnePeriode;
70 delete lastSynchroSol;
71 delete lastPointageSol;
72 delete lastBolo;
73 delete llastBolo;
74 delete lastGyro;
75 delete lastSST;
76 delete lastBoloComp;
77 delete lastGyroComp;
78 delete lastSSTComp;
79}
80
81BlockSet::BlockSet(BlockSet const& x)
82: sstHandler(x.sstHandler)
83{
84 lastParam = NULL;
85 lastJournal = NULL;
86 lastReglage = NULL;
87 lastDilution = NULL;
88 lastGPS = NULL;
89 lastUnePeriode = NULL;
90 lastSynchroSol = NULL;
91 lastPointageSol= NULL;
92 lastBolo = NULL;
93 llastBolo = NULL;
94 lastGyro = NULL;
95 lastSST = NULL;
96 lastBoloComp = NULL;
97 lastGyroComp = NULL;
98 lastSSTComp = NULL;
99
100 if (x.lastParam) {
101 lastParam = new block_type_param;
102 *lastParam = *x.lastParam;
103 }
104 if (x.lastJournal) {
105 lastJournal = new block_type_journal;
106 *lastJournal = *x.lastJournal;
107 }
108 if (x.lastReglage) {
109 lastReglage = new block_type_reglage;
110 *lastReglage = *x.lastReglage;
111 }
112 if (x.lastDilution) {
113 lastDilution = new block_type_dilution;
114 *lastDilution = *x.lastDilution;
115 }
116 if (x.lastGPS) {
117 lastGPS = new block_type_gps;
118 *lastGPS = *x.lastGPS;
119 }
120 if (x.lastUnePeriode) {
121 lastUnePeriode = new block_type_une_periode;
122 *lastUnePeriode = *x.lastUnePeriode;
123 }
124 if (x.lastSynchroSol) {
125 lastSynchroSol = new block_type_synchro_sol;
126 *lastSynchroSol = *x.lastSynchroSol;
127 }
128 if (x.lastPointageSol) {
129 lastPointageSol = new block_type_pointage_sol;
130 *lastPointageSol = *x.lastPointageSol;
131 }
132 if (x.lastBolo) {
133 lastBolo = new block_type_bolo;
134 *lastBolo = *x.lastBolo;
135 }
136 if (x.llastBolo) {
137 llastBolo = new block_type_bolo;
138 *llastBolo = *x.llastBolo;
139 }
140 if (x.lastGyro) {
141 lastGyro = new block_type_gyro;
142 *lastGyro = *x.lastGyro;
143 }
144 if (x.lastSST) {
145 lastSST = new block_type_sst;
146 *lastSST = *x.lastSST;
147 }
148 if (x.lastBoloComp) {
149 lastBoloComp = new block_type_bolo_comprime;
150 *lastBoloComp = *x.lastBoloComp;
151 }
152 if (x.lastGyroComp) {
153 lastGyroComp = new block_type_gyro_comprime;
154 *lastGyroComp = *x.lastGyroComp;
155 }
156 if (x.lastSSTComp) {
157 lastSSTComp = new block_type_sst_comprime;
158 *lastSSTComp = *x.lastSSTComp;
159 }
160
161 memcpy(&curBlock,&x.curBlock,sizeof(block_type_modele));
162 memcpy(&peekBlock,&x.peekBlock,sizeof(block_type_modele));
163
164}
165
166void BlockSet::setBloc(block_type_modele const& blk)
167{
168 int kind = type_block(&blk);
169 switch (kind) {
170 case block_param:
171 if (!lastParam) lastParam = new block_type_param;
172 memcpy(lastParam, &blk, sizeof(block_type_param));
173 // Les fichiers fournis contiennent des valeurs debiles...
174 if (lastParam->param.n_max_bolo < 0)
175 lastParam->param.n_max_bolo = nb_max_bolo;
176 if (lastParam->param.n_per_block < 0)
177 lastParam->param.n_per_block = nb_per_block;
178 if (lastParam->param.n_max_mes_per < 0)
179 lastParam->param.n_max_mes_per = nb_max_mes_per;
180 break;
181 case block_journal:
182 if (!lastJournal) lastJournal = new block_type_journal;
183 memcpy(lastJournal, &blk, sizeof(block_type_journal));
184 break;
185 case block_reglage:
186 if (!lastReglage) lastReglage = new block_type_reglage;
187 memcpy(lastReglage, &blk, sizeof(block_type_reglage));
188 break;
189 case block_dilution:
190 if (!lastDilution) lastDilution = new block_type_dilution;
191 memcpy(lastDilution, &blk, sizeof(block_type_dilution));
192 break;
193 case block_gps:
194 if (!lastGPS) lastGPS = new block_type_gps;
195 memcpy(lastGPS, &blk, sizeof(block_type_gps));
196 break;
197 case block_une_periode:
198 if (!lastUnePeriode) lastUnePeriode = new block_type_une_periode;
199 memcpy(lastUnePeriode, &blk, sizeof(block_type_une_periode));
200 break;
201 case block_synchro_sol:
202 if (!lastSynchroSol) lastSynchroSol = new block_type_synchro_sol;
203 memcpy(lastSynchroSol, &blk, sizeof(block_type_synchro_sol));
204 break;
205 case block_pointage_sol:
206 if (!lastPointageSol) lastPointageSol = new block_type_pointage_sol;
207 memcpy(lastPointageSol, &blk, sizeof(block_type_pointage_sol));
208 break;
209 case block_bolo:
210 if (!lastBolo) lastBolo = new block_type_bolo;
211 else if (!llastBolo) {
212 llastBolo = new block_type_bolo;
213 memcpy(llastBolo, lastBolo, sizeof(block_type_bolo));
214 }
215 memcpy(lastBolo, &blk, sizeof(block_type_bolo));
216 break;
217 case block_gyro:
218 if (!lastGyro) lastGyro = new block_type_gyro;
219 memcpy(lastGyro, &blk, sizeof(block_type_gyro));
220 break;
221 case block_sst:
222 if (!lastSST) lastSST = new block_type_sst;
223 memcpy(lastSST, &blk, sizeof(block_type_sst));
224 break;
225 }
226}
227
228void BlockSet::setRawBloc(block_type_modele const& blk)
229{
230 int kind = type_block(&blk);
231 switch (kind) {
232 case block_bolo_comprime:
233 if (!lastBoloComp) lastBoloComp = new block_type_bolo_comprime;
234 memcpy(lastBoloComp, &blk, sizeof(block_type_bolo_comprime));
235 break;
236 case block_gyro_comprime:
237 if (!lastGyroComp) lastGyroComp = new block_type_gyro_comprime;
238 memcpy(lastGyroComp, &blk, sizeof(block_type_gyro_comprime));
239 break;
240 case block_sst_comprime:
241 if (!lastSSTComp) lastSSTComp = new block_type_sst_comprime;
242 memcpy(lastSSTComp, &blk, sizeof(block_type_sst_comprime));
243 break;
244 }
245}
246
247
248
249ArcheopsFile::ArcheopsFile(string const& fname) {
250 f = fopen(fname.c_str(), "rb");
251 fn = fname;
252 if (!f) throw ArchExc("file not found");
253 fseek(f,0,SEEK_END);
254 fLen = ftell(f);
255 curPos = -1;
256 peekPos = -1;
257 curKind = -1;
258 curRawKind = -1;
259 blockSet = new BlockSet;
260 utcOffset=2;
261 computeMJD(fname);
262}
263
264ArcheopsFile::ArcheopsFile(ArcheopsFile const& x) {
265 blockSet = x.blockSet ? new BlockSet(*x.blockSet) : NULL;
266 fposStack = x.fposStack;
267
268 stack<BlockSet*> tmp;
269 ArcheopsFile& y = (ArcheopsFile&) x;
270 while (!y.blockStack.empty()) {
271 tmp.push(y.blockStack.top());
272 y.blockStack.pop();
273 }
274 while (!tmp.empty()) {
275 y.blockStack.push(tmp.top());
276 blockStack.push(new BlockSet(*tmp.top()));
277 tmp.pop();
278 }
279
280 //curBlock = x.curBlock;
281 curKind = x.curKind;
282 curRawKind = x.curRawKind;
283 curPos = x.curPos;
284 peekPos = x.peekPos;
285 fLen = x.fLen;
286 fn = x.fn;
287 f = fopen(fn.c_str(), "rb");
288}
289
290ArcheopsFile::~ArcheopsFile() {
291 if (f) fclose(f);
292 delete blockSet;
293 while (!blockStack.empty())
294 { delete blockStack.top(); blockStack.pop();}
295}
296
297void ArcheopsFile::grabLastBlocs(ArcheopsFile const& oldFile) {
298 delete blockSet;
299 blockSet = new BlockSet(*oldFile.blockSet);
300 //curBlock = oldFile.curBlock;
301 //peekBlock = oldFile.peekBlock;
302 peekPos = 0;
303 setUTCOffset(oldFile.utcOffset);
304}
305
306
307def_nom_block
308
309bool ArcheopsFile::nextBlock() {
310 // si pas de peek, alors en lire un pour commencer...
311 if (peekPos<0) {
312 peekPos=0; if (!nextBlock()) return false;
313 }
314 block_type_modele* curBlock=currentBlock();
315 block_type_modele* peekBlock=aheadBlock();
316
317 memcpy(curBlock, peekBlock, sizeof(block_type_modele));
318
319 if (peekPos+12 > fLen) return false;
320 fseek(f,peekPos,SEEK_SET);
321 size_t read = fread(peekBlock,1,sizeof(block_type_modele),f);
322 swapEntete(peekBlock);
323 if (read < longueur_block(peekBlock)) return false;
324 swapContent(peekBlock);
325 if (verifie_block(peekBlock) != block_correct) {
326 printf("block invalide\n"); throw ArchExc("invalid block");
327 }
328 peekPos += longueur_block(peekBlock);
329 if (curPos < 0) {
330 curPos = 0; return true;
331 }
332 curPos += longueur_block(curBlock);
333 curRawKind = curKind = type_block(curBlock);
334 //printf("block %d : %s \n",numero_block(&curBlock),nom_block[curKind]);
335 postProcessBlock();
336 saveCurBlock();
337 return true;
338}
339
340bool ArcheopsFile::nextBlock(long mask) {
341 if (!mask) return false;
342 while (1) {
343 if (!nextBlock()) return false;
344 if (( 1 << curRawKind) & mask) return true;
345 }
346}
347
348int ArcheopsFile::blockKind() {
349 return curKind;
350}
351
352int ArcheopsFile::blockRawKind() {
353 return curRawKind;
354}
355
356int ArcheopsFile::blockNum() {
357 return numero_block(currentBlock());
358}
359
360#define bitmot 24 // nb de bit horloge dans un mot ADC
361
362double ArcheopsFile::perEchant() { // periode d'echantillonage pour le dernier bloc reglage
363 double p,f1,f2,f3;
364 int pp;
365 pp=lastReglage()->reglage.horloge.periode;
366 p=pp/5.;
367 f1=1000/p;f2=f1/bitmot;f3=f2*1000./(double)(lastReglage()->reglage.horloge.nb_mesures);
368 return 0.5/f3; // 2 fois la frequence de modulation
369}
370
371double ArcheopsFile::perBlock() { // duree (en secondes) correspondant a un bloc bolo
372 return perEchant() * (double)lastParam()->param.n_per_block*2.;
373}
374
375int ArcheopsFile::nEchBlock() { // Nb d'echantillons dans un bloc
376 return lastParam()->param.n_per_block*2.;
377}
378
379string ArcheopsFile::blockKdName() {
380 return nom_block[curKind];
381}
382
383string ArcheopsFile::blockRawKdName() {
384 return nom_block[curRawKind];
385}
386
387
388block_type_modele* ArcheopsFile::currentBlock() {
389 //if (curPos<0) return NULL;
390 return &blockSet->curBlock;
391}
392
393block_type_modele* ArcheopsFile::aheadBlock() {
394 //if (peekPos<0) return NULL;
395 return &blockSet->peekBlock;
396}
397
398bool ArcheopsFile::sameBlockNumAhead() {
399 if (curPos<0) return false;
400 return (numero_block(&blockSet->curBlock) == numero_block(&blockSet->peekBlock));
401}
402
403
404block_type_param* ArcheopsFile::lastParam() {
405 return blockSet->lastParam;
406}
407block_type_journal* ArcheopsFile::lastJournal() {
408 return blockSet->lastJournal;
409}
410block_type_reglage* ArcheopsFile::lastReglage() {
411 return blockSet->lastReglage;
412}
413block_type_dilution* ArcheopsFile::lastDilution() {
414 return blockSet->lastDilution;
415}
416block_type_gps* ArcheopsFile::lastGPS() {
417 return blockSet->lastGPS;
418}
419block_type_une_periode* ArcheopsFile::lastUnePeriode() {
420 return blockSet->lastUnePeriode;
421}
422block_type_synchro_sol* ArcheopsFile::lastSynchroSol() {
423 return blockSet->lastSynchroSol;
424}
425block_type_pointage_sol* ArcheopsFile::lastPointageSol() {
426 return blockSet->lastPointageSol;
427}
428block_type_bolo* ArcheopsFile::lastBolo() {
429 return blockSet->lastBolo;
430}
431block_type_bolo* ArcheopsFile::llastBolo() {
432 return blockSet->llastBolo;
433}
434block_type_gyro* ArcheopsFile::lastGyro() {
435 return blockSet->lastGyro;
436}
437block_type_sst* ArcheopsFile::lastSST() {
438 return blockSet->lastSST;
439}
440block_type_bolo_comprime* ArcheopsFile::lastBoloComp() {
441 return blockSet->lastBoloComp;
442}
443block_type_gyro_comprime* ArcheopsFile::lastGyroComp() {
444 return blockSet->lastGyroComp;
445}
446block_type_sst_comprime* ArcheopsFile::lastSSTComp() {
447 return blockSet->lastSSTComp;
448}
449
450void ArcheopsFile::postProcessBlock() {
451 switch (curKind) {
452 case block_bolo_comprime: {
453 blockSet->setRawBloc(blockSet->curBlock);
454 block_type_bolo blk2;
455 block_type_bolo_comprime* blk = (block_type_bolo_comprime*) &blockSet->curBlock;
456 for(int j=0;j<nb_bolo_util;j++)
457 {
458 decompress_7_2(blk->data_bolo[j],blk2.data_bolo[j],nb_per_block*2);
459 }
460 valide_block((block_type_modele*)&blk2,block_bolo,numero_block(blk));
461 memcpy(&blockSet->curBlock,&blk2,sizeof(blk2));
462 curKind = block_bolo;
463 break;
464 }
465 case block_sst_comprime: { // $CHECK$ TBD
466 }
467 case block_sst : {
468 blockSet->sstHandler.ProcessBlock((block_type_sst*)&blockSet->curBlock);
469 }
470 }
471}
472
473void ArcheopsFile::saveCurBlock() {
474 blockSet->setBloc(blockSet->curBlock);
475}
476
477void ArcheopsFile::pushMark() { // push current file position, and "last" blocks`
478 fposStack.push(curPos);
479 fposStack.push(peekPos);
480 blockStack.push(new BlockSet(*blockSet));
481}
482
483void ArcheopsFile::popMark() { // pops last file position and "last" blocks
484 if (! blockStack.empty()) {
485 delete blockSet;
486 blockSet = blockStack.top();
487 blockStack.pop();
488 peekPos = fposStack.top();
489 fposStack.pop();
490 curPos = fposStack.top();
491 fposStack.pop();
492 }
493}
494
495typedef unsigned int4 uint_4;
496typedef unsigned short uint_2;
497
498static inline void bswap4(void* p)
499{
500 uint_4 tmp = *(uint_4*)p;
501 *(uint_4*)p = ((tmp >> 24) & 0x000000FF) |
502 ((tmp >> 8) & 0x0000FF00) |
503 ((tmp & 0x0000FF00) << 8) |
504 ((tmp & 0x000000FF) << 24);
505}
506
507static inline void bswap2(void* p)
508{
509 uint_2 tmp = *(uint_2*)p;
510 *(uint_2*)p = ((tmp >> 8) & 0x00FF) |
511 ((tmp & 0x00FF) << 8);
512}
513
514#ifdef __DECCXX
515#define SWAP
516#endif
517#if defined(Linux) || defined(linux)
518#define SWAP
519#endif
520
521void ArcheopsFile::swapEntete(block_type_modele* blk) {
522#ifdef SWAP
523 bswap4(&(blk->debut));
524 bswap4(&(blk->code1));
525 bswap4(&(blk->code2));
526 long lg = longueur_block(blk);
527 bswap4(((char*)blk) + lg - 4);
528#endif
529}
530
531void ArcheopsFile::swapContent(block_type_modele* blk) {
532#ifdef SWAP
533 int typ = type_block(blk);
534
535 if (typ == block_gps) return; // char only, no swap
536 if (typ == block_une_periode) { // une_periode, des shorts
537 block_type_une_periode* b = (block_type_une_periode*) blk;
538 for (int i=0; i<nb_max_bolo; i++)
539 for (int j=0; j<nb_max_mes_per; j++)
540 bswap2(&b->bol_per[i][j]);
541 return;
542 }
543
544 for (int i=0; i<longueur_block(blk)/4-4; i++)
545 bswap4(blk->mot + i);
546 // On deswappe ce qui ne devait pas etre swappe...
547 switch (typ) {
548 case block_param: {
549 block_type_param* b = (block_type_param*) blk;
550 for (int i=0; i<nb_max_bolo; i++)
551 for (int j=0; j<8; j++)
552 bswap4(&b->param.bolo[i].bolo_nom[4*j]);
553 }
554
555 }
556#endif
557}
558
559
560
561
562static int mlen[] = {31,28,31,30,31,30,31,31,30,31,30,31};
563
564void ArcheopsFile::computeMJD(string const& fname) {
565 //h99_04_29-15h36m22
566 short y,m,d,hh,mm,ss;
567 char const* p = fname.c_str();
568 char const* p2 = p + fname.length()-1;
569 while (*p2 != ':' && *p2 != '/' && p2 != p) p2--;
570 if (*p2 == ':' || *p2 == '/') p2++;
571 if (*p2 == 'h') p2++;
572 y = atoi(p2); p2+=3;
573 m = atoi(p2); p2+=3;
574 d = atoi(p2); p2+=3;
575 hh = atoi(p2); p2+=3;
576 mm = atoi(p2); p2+=3;
577 ss = atoi(p2);
578
579 if (y<50) y += 100;
580 // 1. depuis 0/1/97 minuit
581 rawMJD = (int) (365.25 * (y-97));
582 for (int i=0; i<m-1; i++)
583 rawMJD += mlen[i];
584 if (y%4 == 0 && m > 2) rawMJD++;
585 rawMJD += d;
586 rawMJD += hh/24. + mm/24./60. + ss/24./60./60;
587
588 rawMJD += 448.5; // 0/1/97 minuit
589 startMJD = rawMJD - utcOffset/24.;
590}
591
592void ArcheopsFile::setUTCOffset(int UTCOffset) {
593 utcOffset = UTCOffset;
594 startMJD = rawMJD - utcOffset/24.;
595}
596
597double ArcheopsFile::getStartMJD() {
598 return startMJD;
599}
600
601int ArcheopsFile::getBoloBlockNum() {
602 if (!lastBolo()) return -1;
603 return numero_block(lastBolo());
604}
605
606int ArcheopsFile::getSSTBlockNum() {
607 if (!lastSST()) return -1;
608 return numero_block(lastSST());
609}
610
611
612// GPS
613// $GPGGA,hhmmss.ss,ddmm.mmmm,n,dddmm.mmmm,e,q,ss,y.y,a.a,z,
614
615
616int ArcheopsFile::getGPSBlockNum() {
617 if (!lastGPS()) return -1;
618 return numero_block(lastGPS());
619}
620
621double ArcheopsFile::getGPSUTC() { // en secondes depuis minuit UTC jour courant
622 if (!lastGPS()) return -9.e99;
623 char* p = lastGPS()->gps;
624 if (strncmp(p, "$GPGGA,", 7)) return -9.e99;
625 p += 7;
626 double t;
627 sscanf(p, "%lg", &t);
628 int h = int(t/10000); t -= h*10000;
629 int m = int(t/100); t -= m*100;
630 return h*3600. + m*60. + t;
631}
632
633double ArcheopsFile::getGPSMJD() { // modified julian day du dernier bloc GPS, JD - 2450000
634 double t = getGPSUTC()/86400.;
635 if (t<0) return t;
636 if (t > (startMJD - int(startMJD))) {
637 return int(startMJD) + t;
638 } else {
639 return int(startMJD) + 1. + t;
640 }
641}
642
643double ArcheopsFile::getGPSLat() { // degres, + = NORD
644 if (!lastGPS()) return -9.e99;
645 char* p = lastGPS()->gps;
646 if (strncmp(p, "$GPGGA,", 7)) return -9.e99;
647 char* fence = p+80;
648 p += 7;
649 while (*p != ',' && p<fence) p++;
650 if (*p != ',') return -9.e99;
651 p++;
652 double t;
653 sscanf(p, "%lg", &t);
654 int d = int(t/100); t -= d*100;
655 t = d + t/60;
656 while (*p != ',' && p<fence) p++;
657 if (*p != ',') return -9.e99;
658 p++;
659 if (*p == 'S') t = -t;
660 return t;
661}
662
663double ArcheopsFile::getGPSLong() { // degres, + = EST
664 if (!lastGPS()) return -9.e99;
665 char* p = lastGPS()->gps;
666 if (strncmp(p, "$GPGGA,", 7)) return -9.e99;
667 char* fence = p+80;
668 p += 7;
669 for (int i=0; i<3; i++) {
670 while (*p != ',' && p<fence) p++;
671 if (*p != ',') return -9.e99;
672 p++;
673 }
674 double t;
675 sscanf(p, "%lg", &t);
676 int d = int(t/100); t -= d*100;
677 t = d + t/60;
678 while (*p != ',' && p<fence) p++;
679 if (*p != ',') return -9.e99;
680 p++;
681 if (*p == 'W') t = -t;
682 return t;
683}
684
685
686
687// Bolo
688
689long ArcheopsFile::getRawBolo(int ibolo, int imesure) { // donnee brute, avec seulement soustraction offset
690 int nb_coups,aa;
691 block_type_bolo* blk = imesure >= 0 ? lastBolo() : llastBolo();
692 if (imesure < 0) imesure += nEchBlock();
693 if (!blk) return 0;
694 block_type_reglage* reglage = lastReglage();
695 block_type_param* param = lastParam();
696
697 nb_coups= reglage->reglage.horloge.nb_mesures/2 - reglage->reglage.horloge.temp_mort;
698 aa = (nb_coups<<14) + (nb_coups*190) ;
699
700 int s = imesure % 2 ? 1 : -1;
701
702 return s*(((blk->data_bolo[ibolo][imesure]-aa)<<1)/nb_coups);
703}
704
705def_gains
706
707double ArcheopsFile::getMuVBolo(int ibolo, int imesure) { // microvolts, filtre avec filtre carre
708 double y = (getRawBolo(ibolo, imesure-1) - getRawBolo(ibolo, imesure))/2.;
709 if (imesure%2) y=-y;
710 block_type_reglage* reglage = lastReglage();
711 return ((1e5*y)/(65536.*gain_ampli(reglage->reglage.bolo[ibolo])));
712}
713
714
715// SST, gyros...
716
717void ArcheopsFile::needSSTProcessMask(int mask) {
718 blockSet->sstHandler.NeedProcess(mask);
719}
720
721
722long ArcheopsFile::getSSTSignal(int idiode, int imesure) {
723 return blockSet->sstHandler.getSignal(imesure, idiode);
724}
725// $CHECK$ TBD
726
727
728double ArcheopsFile::getAzimut(int imesure) {return imesure*360/nEchBlock();}
729double ArcheopsFile::getPendDirect(int /*imesure*/) {return 0;}
730double ArcheopsFile::getPendOrth(int /*imesure*/) {return 0;}
731double ArcheopsFile::getAlpha(int /*imesure*/) {return 0;}
732double ArcheopsFile::getDelta(int /*imesure*/) {return 0;}
Note: See TracBrowser for help on using the repository browser.