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