1 | // ssthandler.h
|
---|
2 | // Eric Aubourg CEA/DAPNIA/SPP juillet 1999
|
---|
3 |
|
---|
4 | #ifndef SSTHANDLER_H
|
---|
5 | #define SSTHANDLER_H
|
---|
6 |
|
---|
7 | #include <math.h>
|
---|
8 | #include <vector>
|
---|
9 | #include <map>
|
---|
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 |
|
---|
19 | class ArcheopsFile;
|
---|
20 |
|
---|
21 | // Zone findStar
|
---|
22 | #include "sstetoile.h"
|
---|
23 | #include "pisteetoile.h"
|
---|
24 |
|
---|
25 | //#define SST_DEBUG
|
---|
26 | //#define SSTDUMP
|
---|
27 | #define SSTChassLog
|
---|
28 | //#define SSTStatLog
|
---|
29 |
|
---|
30 | #define NbChanDump (3)
|
---|
31 | #define NbPhotDiodBarette (46)
|
---|
32 | #define NbEtInMapMax (100)
|
---|
33 | #define NbSampleBlock (2*nb_per_block)
|
---|
34 | // Fin Zone findStar
|
---|
35 |
|
---|
36 | class SSTHandler {
|
---|
37 | public:
|
---|
38 | SSTHandler();
|
---|
39 | SSTHandler(SSTHandler const&);
|
---|
40 | SSTHandler& operator = (SSTHandler const&);
|
---|
41 | virtual ~SSTHandler();
|
---|
42 |
|
---|
43 | enum process { permDiode = 1,
|
---|
44 | findStars = 2,
|
---|
45 | findPeriod = 4,
|
---|
46 | findAxis = 8 };
|
---|
47 |
|
---|
48 | void NeedProcess(int prcMask);
|
---|
49 | void ProcessBlock(block_type_sst*);
|
---|
50 |
|
---|
51 | static void Has2Bars(bool, int elecOffset=0); // elecOffset : which wired together
|
---|
52 |
|
---|
53 | long getLastBlkNum() {return lastBlkNum;}
|
---|
54 | int getRawSignal(int imesure, int idiode); // for last block
|
---|
55 | int getSignal(int imesure, int idiode); // for last block, imesure<0 -> history
|
---|
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
|
---|
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 |
|
---|
75 | // Is there two photoDiod Arrays and how are they connected?
|
---|
76 | static bool has2bars;
|
---|
77 | static int elecOffset;
|
---|
78 |
|
---|
79 | inline int& diode(int iSamp, int iDiod) {return diodeT[iSamp*nb_photo_diodes+iDiod];}
|
---|
80 |
|
---|
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;
|
---|
90 |
|
---|
91 | PisteEtoile** PisteBar;
|
---|
92 |
|
---|
93 | #ifdef SSTDUMP
|
---|
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;
|
---|
101 |
|
---|
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é
|
---|
112 |
|
---|
113 | static ofstream sstchass;
|
---|
114 | static bool sstchassinit;
|
---|
115 |
|
---|
116 | void findStarConstruct();
|
---|
117 | void findStarDestruct();
|
---|
118 | };
|
---|
119 |
|
---|
120 | #endif
|
---|