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