Ignore:
Timestamp:
Nov 1, 1999, 10:59:29 AM (26 years ago)
Author:
ansari
Message:

V2

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Poubelle/archTOI.old/pisteetoile.cc

    r400 r534  
    88FormePulse    PisteEtoile::FPulse(Trapani);
    99
    10 
    11 
    12 int SSTnbPasFit= (int) (2*TFExcursion/TPasTFit);
     10// D. Yvon, CE Saclay, DAPNIA/SPP, 08/99
    1311
    1412PisteEtoile::PisteEtoile(short NoPhotDiod) {
    15         PasTempsEch=0.005836818076;                     
     13        PasTempsEch=archParam.acq.perEch;                       
    1614                //BUGG doit changer     !!!!! Doit etre extrait d'un serveur de param d'acquisition
    1715        NoPhDiod=NoPhotDiod;
    1816        DiodVivante=true;
     17       
     18        SSTnbPasFit= (int) (2*TFExcursion/TPasTFit);
     19       
    1920        AmplNorm=0.;
    20 //      On echantillonne dix fois plus fin pour avoir une bonne estimation de AmplNorm
    21 //      Eviter les systematiques
    2221        for(int i=0; i<SSTLongIndexEvt()*10; i++){
    23                 AmplNorm+=FPulse.PulseShape(i/10.*TPasTFit)*FPulse.PulseShape(i/10.*TPasTFit);
     22                AmplNorm+=FPulse.PulseShape(i*PasTempsEch/10.)*FPulse.PulseShape(i*PasTempsEch/10.);
    2423        }
    2524        AmplNorm/=10.;
     
    3938PisteEtoile& PisteEtoile::operator =(PisteEtoile const & x) {
    4039        PasTempsEch=x.PasTempsEch;             
    41                 //BUGG doit changer     !!!!! Doit etre extrait d'un serveur de param d'acquisition
    4240        NoPhDiod=x.NoPhDiod;
    4341        DiodVivante=x.DiodVivante;
     
    115113void PisteEtoile::fill(int* pData, int InDebutPiste, int nData) {
    116114//      if(!isAlive()) return;
    117         indexDebutPiste=InDebutPiste;
    118         int* PhDiod=PhDiodArray;
     115        indexDebutPiste=InDebutPiste - PhDiodTabLong + nData;
     116        int* PhDiod=PhDiodArray + PhDiodTabLong - nData;
    119117        int* pDataC=pData;
    120118        for(int k=0;k<nData;k++,pDataC++, PhDiod++) (*PhDiod)=(*pDataC);
     
    152150       
    153151                if(testEtoile) {
    154                 // On emballe une etoile.
     152                // On emballe une etoile
     153                        LastEtoile.InpCurrent= AmplRes/FPulse.GainElectrique();
     154                        LastEtoile.InpCurFin= AmplFin/FPulse.GainElectrique();
     155                        LastEtoile.TEchan=TIndex;
     156                        LastEtoile.TFin=Tfin;
     157                        LastEtoile.InpCurrNoisRMS=Vrms/FPulse.GainElectrique();
     158                        LastEtoile.X2Calc=X2Min;
     159                        LastEtoile.NoDiode=NoPhDiod;
    155160                        LastEtoile.FitForme=SuccesAFine;
    156                         LastEtoile.X2Calc=X2Min;
    157                         LastEtoile.InpCurrNoisRMS=Vrms/FPulse.GainElectrique();
    158                         LastEtoile.TEchan=TIndex;
    159                         LastEtoile.InpCurrent= AmplRes/FPulse.GainElectrique();
    160                         LastEtoile.NoDiode=NoPhDiod;
    161161                        LastEtoile.LargMiHauteur=widthHalfMax;
     162                       
     163/*                      cout<<setprecision(9);
     164                        cout<<TIndex<<" "<<Tfin<<" "<<AmplRes<<" "<<AmplFin<<endl;
     165                        cout<<TIndex-Tfin<<" "<<(AmplRes-AmplFin)/AmplFin<<endl;
     166*/
    162167                }
    163168        }
     
    199204// On calcule le Vrms sur le prepulse
    200205        Vrms=0.;
    201         for (int i=0; i<Prepulselong; i++) Vrms+=PhDiodPiste[i]*PhDiodPiste[i];
    202         Vrms=sqrt(Vrms)/Prepulselong;
     206        for (int i=0; i<Prepulselong; i++) {
     207                Vrms+=PhDiodPiste[i]*PhDiodPiste[i];
     208        }
     209        Vrms=sqrt(Vrms/Prepulselong);
    203210        if(Vrms<SSTLsbVal) Vrms=SSTLsbVal;              // Pour eviter les VRMS=0.
    204211       
     
    281288// Maintenant que l'on se doute que il y a une etoile
    282289// On veut connaitre son flux et son temps de passage
    283 // Nécessite d'avoir un ordre d'idee de la vitesse de rotation du ballon.
     290// Nécessite de connaitre la vitesse de rotation du ballon.
    284291
    285292                // BUGG devra etre extrait des headers acquisition. Ca peut changer!!!!!!
    286 
    287        
    288293                       
    289294        int IndexDebutEvt=MaxIndex-SSTLargEvtIndex();
     
    292297                // Pointeur origine du tableau d'echantillon sur lequel sera calculé le fit
    293298        double DeltaTemps=0.;
    294 // Pour chaque decalage en temps, on estime un amplitude et calcule le X2
     299       
     300// Pour chaque decalage en temps, on estime une amplitude et calcule le X2
    295301        for(int k=0; k<SSTnbPasFit; k++) {
    296302                DeltaTemps=TFExcursion-k*TPasTFit;
     
    314320        X2Min=1.e99;
    315321        int X2MinIndex=-1;
    316         for(int k=0; k<SSTnbPasFit; k++)
     322        for(int k=0; k<SSTnbPasFit; k++) {
    317323                if (X2[k]<X2Min) {
    318324                        X2Min=X2[k];
    319325                        X2MinIndex=k;
    320326                }
    321 
     327        }
     328       
    322329        if((X2MinIndex>0)&&(X2MinIndex<(SSTnbPasFit-1))) {
    323330       
    324331// On fitte une parabole sur les trois X2 qui encadrent le min
    325         double Di;      // Index (non entier) du minimum du X2
     332                double Di;      // Index (non entier) du minimum du X2
    326333                double X=(X2[X2MinIndex+1]-X2Min)/(X2Min-X2[X2MinIndex-1]);             
    327334                Di=0.5*(X+1)/(X-1);
    328335
     336// Le X2 est mimimum pour le n° de pas de fit X2MinIndex+Di
    329337// On calcule l'amplitude estimee a ce temps
    330338                double Som1=0.; pFitArray=pFitArray0;
    331339                DeltaTemps=TFExcursion-(X2MinIndex-Di)*TPasTFit;
    332340                for(int i=0; i<SSTLongIndexEvt(); i++, pFitArray++)
    333                         Som1+=(*pFitArray)*FPulse.PulseShape(i*PasTempsEch-DeltaTemps);
    334                 AmplRes=Som1/AmplNorm;
    335                
    336 //Le X2 est mimimum pour le n° de pas de fit X2MinIndex+Di
     341                                Som1+=(*pFitArray)*FPulse.PulseShape(i*PasTempsEch-DeltaTemps);
     342                AmplFin=Som1/AmplNorm;
     343                       
     344
    337345
    338346#ifdef PEtoileDebug
    339                 double* PulseTrak=new double [SSTLongIndexEvt()];
     347                double *PulseTrak=new double [SSTLongIndexEvt()];
    340348#endif
    341 
     349// On calcule le X2 correspondant
    342350                double X2Som1=0.; double dummy=0.;pFitArray=pFitArray0;
    343351                for(int i=0;i<SSTLongIndexEvt();i++,pFitArray++) {     
     352               
    344353#ifdef PEtoileDebug
    345354                        PulseTrak[i]=FPulse.PulseShape(i*PasTempsEch-DeltaTemps);
    346355#endif
    347                         dummy=(*pFitArray)-AmplRes*FPulse.PulseShape(i*PasTempsEch-DeltaTemps);         // Différence
     356                        dummy=(*pFitArray)-AmplFin*FPulse.PulseShape(i*PasTempsEch-DeltaTemps);         // Différence
    348357                        X2Som1+=dummy*dummy;                                                                                                            // Au carré
    349358                }
    350                                        
     359                                               
    351360                X2Min=X2Som1/(SSTLongIndexEvt()*Vrms*Vrms);
    352        
    353                 TIndex=indexDebutPiste+IndexDebutEvt+DeltaTemps/PasTempsEch;
    354                                         //Ouff!!!!
     361               
     362                Tfin= indexDebutPiste+IndexDebutEvt+DeltaTemps/PasTempsEch;
     363                        //Ouff!!!!
     364/*                     
     365                cout<<setprecision(9)<<endl;                   
     366                cout<<Tfin<<" "<<indexDebutPiste<<" "<<IndexDebutEvt<<" "<<DeltaTemps/PasTempsEch<<endl;
     367*/             
    355368                SuccesAFine=true;
     369               
     370#ifdef PEtoileDebug
     371                delete[] PulseTrak;
     372#endif
    356373        }
    357374        else {                          // Echec, c'est tres bizarre! On doit etre dans le bruit
Note: See TracChangeset for help on using the changeset viewer.