| [394] | 1 | #ifndef PisteEtoileSeen
 | 
|---|
 | 2 | #define PisteEtoileSeen
 | 
|---|
 | 3 | #include "sstetoile.h"
 | 
|---|
 | 4 | #include "transfelec.h"
 | 
|---|
 | 5 | #include "formepulse.h"
 | 
|---|
 | 6 | 
 | 
|---|
| [534] | 7 | /*      // D. Yvon, CE Saclay, DAPNIA/SPP, 08/99
 | 
|---|
| [394] | 8 | 
 | 
|---|
 | 9 |         // Analyse the Photodiode track to find star pulse.
 | 
|---|
 | 10 |         // Caracterise the time and amplitude of the star Pulse
 | 
|---|
 | 11 | 
 | 
|---|
| [534] | 12 |         We analyse a set of 48 samples. The 32 first are considered as prepulse sample.
 | 
|---|
| [394] | 13 |         On the prepulse: 
 | 
|---|
 | 14 |                 We compute baseline and substract it. 
 | 
|---|
 | 15 |                 Then compute slope due to pile up and substract it
 | 
|---|
 | 16 |                 Then compute Vrms.
 | 
|---|
 | 17 |                 Look for trigger
 | 
|---|
 | 18 |         If triggered :
 | 
|---|
| [534] | 19 |                 Look for maximum. 
 | 
|---|
 | 20 |                 Compute Full width half maximum
 | 
|---|
 | 21 |                 Fit a paroabole on max of the pulse
 | 
|---|
 | 22 |                 return max fitte and time of max fitte
 | 
|---|
 | 23 |         if analfine
 | 
|---|
| [394] | 24 |                 Iterate time fit on pulse area and compute amplitude and X2
 | 
|---|
 | 25 |                 Find best X2. 
 | 
|---|
 | 26 |                 Fit parabole arond the minimum of X2 to get the true minimum.
 | 
|---|
 | 27 |                 Build SSTStar.
 | 
|---|
 | 28 |                 
 | 
|---|
| [534] | 29 |         That's it. 
 | 
|---|
| [394] | 30 |         When  done push the track eigth samples forward and iterate analysis. 
 | 
|---|
 | 31 | */
 | 
|---|
 | 32 | 
 | 
|---|
 | 33 | class FormePulse;
 | 
|---|
 | 34 | 
 | 
|---|
 | 35 | #define PEtoileDebug
 | 
|---|
 | 36 | 
 | 
|---|
 | 37 | 
 | 
|---|
 | 38 | #define PhDiodTabLong (48)
 | 
|---|
 | 39 | #define Prepulselong (32)
 | 
|---|
 | 40 | #define Pousslong (8)
 | 
|---|
 | 41 | 
 | 
|---|
 | 42 | 
 | 
|---|
 | 43 | //      Parametrisation du Trigger 
 | 
|---|
 | 44 | #define SeuilGachette (6.)                              // On déclenche à SeuilGachette sigmas
 | 
|---|
| [534] | 45 | #define SSTLsbVal (10./4096.)
 | 
|---|
| [394] | 46 | 
 | 
|---|
 | 47 | //      Parametrisation Analyse Fine
 | 
|---|
 | 48 | #define TFExcursion (15.e-3)                    // Secondes: Excursion du fit autour de MaxIndex
 | 
|---|
| [534] | 49 | #define TPasTFit (1.5e-3)                               // Secondes:
 | 
|---|
| [394] | 50 |                         // Secondes:
 | 
|---|
 | 51 | 
 | 
|---|
 | 52 | class PisteEtoile {
 | 
|---|
 | 53 | public:
 | 
|---|
 | 54 |         PisteEtoile(short NoPhotDiod=0);
 | 
|---|
 | 55 |         PisteEtoile (PisteEtoile const & x);
 | 
|---|
 | 56 |         ~PisteEtoile();
 | 
|---|
 | 57 |         PisteEtoile& operator = (PisteEtoile const & x);
 | 
|---|
 | 58 |         void fill(int* pData, int inDebutPiste=0, int nData=PhDiodTabLong);
 | 
|---|
 | 59 |         void push(int* pData, int nbdata=Pousslong); 
 | 
|---|
 | 60 |                 //"Pousse" les données dans PhDiodArray de nbdata
 | 
|---|
 | 61 |         bool traque() ; 
 | 
|---|
 | 62 |                 // Traque l'etoile.     
 | 
|---|
 | 63 |         bool trig(); 
 | 
|---|
 | 64 |                 //Trig sur les donnees? Si Oui declenche une analyse complète
 | 
|---|
 | 65 |         void demasque();
 | 
|---|
 | 66 |                 // Met en Oeuvre un fit de forme pour determiner le temps et l'amplitude.
 | 
|---|
 | 67 | 
 | 
|---|
 | 68 |         bool isAlive()  {       return  DiodVivante;}
 | 
|---|
 | 69 |         void kill()             {       DiodVivante=false;}
 | 
|---|
 | 70 |         void restore()  {       DiodVivante=true;}
 | 
|---|
 | 71 |         
 | 
|---|
 | 72 |         SSTEtoile DonneEtoile() {return LastEtoile;}
 | 
|---|
 | 73 |                 //Retourne la dernière Etoile détectee
 | 
|---|
 | 74 |         inline int SSTLargEvtIndex(); 
 | 
|---|
 | 75 |         inline int SSTLongIndexEvt();
 | 
|---|
| [534] | 76 |         static TransFuncElec Trapani;
 | 
|---|
 | 77 |         static FormePulse FPulse;
 | 
|---|
 | 78 |         
 | 
|---|
| [394] | 79 | protected:
 | 
|---|
 | 80 |         double PasTempsEch;     //Secondes 
 | 
|---|
 | 81 | // Idendificateur, repères et gestion 
 | 
|---|
 | 82 |         short NoPhDiod;
 | 
|---|
| [534] | 83 |         long indexDebutPiste;   // A actualiser dans push() et Fill()
 | 
|---|
| [394] | 84 |         bool DiodVivante;               // Si false, On ne fait rien 
 | 
|---|
 | 85 |         
 | 
|---|
 | 86 | // Stocke donnees brutes et traitees
 | 
|---|
 | 87 |         int* PhDiodArray;
 | 
|---|
 | 88 |         double* PhDiodPiste;
 | 
|---|
 | 89 |         
 | 
|---|
 | 90 | // Derniere Etoile Vue
 | 
|---|
 | 91 |         SSTEtoile LastEtoile;
 | 
|---|
 | 92 |         
 | 
|---|
 | 93 | // Variables d'analyse
 | 
|---|
 | 94 |         bool gachette;
 | 
|---|
 | 95 |         double Vrms;
 | 
|---|
 | 96 |         short MaxIndex;                 // Index de l'amplitude Max en analyse Trig()
 | 
|---|
| [534] | 97 |         double TIndex;
 | 
|---|
| [394] | 98 |         double AmplMax;
 | 
|---|
| [534] | 99 |         double AmplRes;
 | 
|---|
| [394] | 100 |         int widthHalfMax;
 | 
|---|
| [534] | 101 |         int SSTnbPasFit;
 | 
|---|
| [394] | 102 | //      double integ;
 | 
|---|
 | 103 | // Variables Resultat d'analyse fine
 | 
|---|
| [534] | 104 |         double AmplFin;
 | 
|---|
 | 105 |         double Tfin;
 | 
|---|
| [394] | 106 |         double X2Min;
 | 
|---|
 | 107 |         bool SuccesAFine;
 | 
|---|
 | 108 |         
 | 
|---|
 | 109 | // Utilitaires de calcul analyse fine
 | 
|---|
 | 110 |         double AmplNorm;
 | 
|---|
 | 111 |                 // Normalisation d'amplitude sur FPulse dans l'ajustement iteratif
 | 
|---|
 | 112 |         double *pFitArray0;
 | 
|---|
 | 113 |                 // Pointeur origine du tableau d'echantillon sur lequel sera calculé le fit
 | 
|---|
 | 114 |         double *pFitArray;
 | 
|---|
 | 115 |                 // Pointeur courant du tableau d'echantillon 
 | 
|---|
 | 116 |         double* Ampl;   //Tableau des amplitudes calculées
 | 
|---|
 | 117 | 
 | 
|---|
 | 118 |         double* X2;             //Tableau des X2 calculés
 | 
|---|
 | 119 |         
 | 
|---|
| [534] | 120 | 
 | 
|---|
| [394] | 121 |         
 | 
|---|
 | 122 | };
 | 
|---|
 | 123 | 
 | 
|---|
 | 124 | #endif
 | 
|---|