[350] | 1 | // ssthandler.h
|
---|
| 2 | // Eric Aubourg CEA/DAPNIA/SPP juillet 1999
|
---|
| 3 |
|
---|
[315] | 4 | #ifndef SSTHANDLER_H
|
---|
| 5 | #define SSTHANDLER_H
|
---|
| 6 |
|
---|
[394] | 7 | #include <math.h>
|
---|
[315] | 8 | #include <vector>
|
---|
[394] | 9 | #include <map>
|
---|
[315] | 10 |
|
---|
| 11 | #ifndef nb_max_bolo
|
---|
| 12 | #define _archeops // Acquisition Archeops (avec transputer)
|
---|
| 13 | #define programme
|
---|
| 14 | extern "C" {
|
---|
| 15 | #include "archeops.h"
|
---|
| 16 | }
|
---|
| 17 | #endif
|
---|
| 18 |
|
---|
[394] | 19 | class ArcheopsFile;
|
---|
[315] | 20 |
|
---|
[394] | 21 | // Zone findStar
|
---|
| 22 | #include "sstetoile.h"
|
---|
| 23 | #include "pisteetoile.h"
|
---|
| 24 |
|
---|
| 25 | //#define SST_DEBUG
|
---|
[534] | 26 | //#define SSTDUMP
|
---|
| 27 | #define SSTChassLog
|
---|
| 28 | //#define SSTStatLog
|
---|
| 29 |
|
---|
| 30 | #define NbChanDump (3)
|
---|
[394] | 31 | #define NbPhotDiodBarette (46)
|
---|
| 32 | #define NbEtInMapMax (100)
|
---|
| 33 | #define NbSampleBlock (2*nb_per_block)
|
---|
| 34 | // Fin Zone findStar
|
---|
| 35 |
|
---|
[315] | 36 | class SSTHandler {
|
---|
| 37 | public:
|
---|
| 38 | SSTHandler();
|
---|
| 39 | SSTHandler(SSTHandler const&);
|
---|
| 40 | SSTHandler& operator = (SSTHandler const&);
|
---|
| 41 | virtual ~SSTHandler();
|
---|
| 42 |
|
---|
[394] | 43 | enum process { permDiode = 1,
|
---|
[315] | 44 | findStars = 2,
|
---|
| 45 | findPeriod = 4,
|
---|
| 46 | findAxis = 8 };
|
---|
| 47 |
|
---|
| 48 | void NeedProcess(int prcMask);
|
---|
| 49 | void ProcessBlock(block_type_sst*);
|
---|
[342] | 50 |
|
---|
| 51 | static void Has2Bars(bool, int elecOffset=0); // elecOffset : which wired together
|
---|
[315] | 52 |
|
---|
[394] | 53 | long getLastBlkNum() {return lastBlkNum;}
|
---|
[315] | 54 | int getRawSignal(int imesure, int idiode); // for last block
|
---|
| 55 | int getSignal(int imesure, int idiode); // for last block, imesure<0 -> history
|
---|
[394] | 56 |
|
---|
| 57 | // Zone findStar
|
---|
| 58 | int getNumbStar(int iSampl);
|
---|
| 59 | // return number of star found in sample number iSampl
|
---|
| 60 | int getStarZ(int iSampl, int istar);
|
---|
| 61 | // return diode number of the star
|
---|
| 62 | double getStarF(int iSampl, int istar);
|
---|
| 63 | // return star flux in Ampère
|
---|
| 64 | double getStarTime(int iSampl, int istar);
|
---|
| 65 | // return star time in this sample
|
---|
[315] | 66 |
|
---|
| 67 | protected:
|
---|
| 68 | int diodeRaw[nb_per_block*2][48];
|
---|
| 69 | int diodeHistLength;
|
---|
| 70 | int* diodeT; //[>nb_per_block*2]*[nb_photo_diodes];
|
---|
| 71 | int prcTodo;
|
---|
| 72 | int starHistLength;
|
---|
| 73 | long lastBlkNum;
|
---|
| 74 |
|
---|
[394] | 75 | // Is there two photoDiod Arrays and how are they connected?
|
---|
[342] | 76 | static bool has2bars;
|
---|
| 77 | static int elecOffset;
|
---|
| 78 |
|
---|
[315] | 79 | inline int& diode(int iSamp, int iDiod) {return diodeT[iSamp*nb_photo_diodes+iDiod];}
|
---|
| 80 |
|
---|
[394] | 81 | static int diodpermut[46]; // diodpermut[i] = channel de la diode i
|
---|
| 82 |
|
---|
| 83 | void DecodeTMBlock(block_type_sst*, int i, int* diodes); // mesure i -> diodes
|
---|
| 84 | void PermutDiode(); // diodeRaw -> diode, avec decalage, 1 echantillon.
|
---|
| 85 | int FindStars(block_type_sst* blk); // sur les 72 derniers echantillons dans diode.
|
---|
| 86 | // return nmber of star found in last block
|
---|
| 87 |
|
---|
| 88 | // Zone findStar
|
---|
| 89 | int NbStarInBlock;
|
---|
[315] | 90 |
|
---|
[394] | 91 | PisteEtoile** PisteBar;
|
---|
| 92 |
|
---|
[534] | 93 | #ifdef SSTDUMP
|
---|
[394] | 94 | ofstream** pPisteDump;
|
---|
| 95 | #endif
|
---|
| 96 |
|
---|
| 97 | map<double,SSTEtoile> StarHistoryMap;
|
---|
| 98 | // On stocke les etoiles de manière ordonnée en temps
|
---|
| 99 | typedef map<double,SSTEtoile>::iterator StarHistIter;
|
---|
| 100 | typedef map<double,SSTEtoile>::const_iterator StarConstHistIter;
|
---|
[315] | 101 |
|
---|
[394] | 102 | vector<SSTEtoile> LastBlockStarVec;
|
---|
| 103 | // Vecteur des SSTEtoile du block classees en ordre de temps decroissant.
|
---|
| 104 | //vector<SSTEtoile> reverse_iterator StarVecRevIter LastBlockStarVec.rbegin();
|
---|
| 105 | SSTEtoile LastStar;
|
---|
| 106 | PisteEtoile* pPiste; // Piste courante d'analyse
|
---|
| 107 | int Diodedata[NbSampleBlock];
|
---|
| 108 | int offseDataDiod;
|
---|
| 109 | int LastBlockSSTNb; // Gère la disparition des blocs défectueux
|
---|
| 110 | int noStarDet;
|
---|
| 111 | int FirstSplNb(block_type_sst* blk); // Calcule l'index du premier echantillon du block analysé
|
---|
[534] | 112 |
|
---|
[401] | 113 | static ofstream sstchass;
|
---|
| 114 | static bool sstchassinit;
|
---|
[315] | 115 |
|
---|
[394] | 116 | void findStarConstruct();
|
---|
| 117 | void findStarDestruct();
|
---|
[315] | 118 | };
|
---|
| 119 |
|
---|
| 120 | #endif
|
---|