Changeset 534 in Sophya for trunk/Poubelle/archTOI.old/pisteetoile.cc
- Timestamp:
- Nov 1, 1999, 10:59:29 AM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Poubelle/archTOI.old/pisteetoile.cc
r400 r534 8 8 FormePulse PisteEtoile::FPulse(Trapani); 9 9 10 11 12 int SSTnbPasFit= (int) (2*TFExcursion/TPasTFit); 10 // D. Yvon, CE Saclay, DAPNIA/SPP, 08/99 13 11 14 12 PisteEtoile::PisteEtoile(short NoPhotDiod) { 15 PasTempsEch= 0.005836818076;13 PasTempsEch=archParam.acq.perEch; 16 14 //BUGG doit changer !!!!! Doit etre extrait d'un serveur de param d'acquisition 17 15 NoPhDiod=NoPhotDiod; 18 16 DiodVivante=true; 17 18 SSTnbPasFit= (int) (2*TFExcursion/TPasTFit); 19 19 20 AmplNorm=0.; 20 // On echantillonne dix fois plus fin pour avoir une bonne estimation de AmplNorm21 // Eviter les systematiques22 21 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.); 24 23 } 25 24 AmplNorm/=10.; … … 39 38 PisteEtoile& PisteEtoile::operator =(PisteEtoile const & x) { 40 39 PasTempsEch=x.PasTempsEch; 41 //BUGG doit changer !!!!! Doit etre extrait d'un serveur de param d'acquisition42 40 NoPhDiod=x.NoPhDiod; 43 41 DiodVivante=x.DiodVivante; … … 115 113 void PisteEtoile::fill(int* pData, int InDebutPiste, int nData) { 116 114 // if(!isAlive()) return; 117 indexDebutPiste=InDebutPiste ;118 int* PhDiod=PhDiodArray ;115 indexDebutPiste=InDebutPiste - PhDiodTabLong + nData; 116 int* PhDiod=PhDiodArray + PhDiodTabLong - nData; 119 117 int* pDataC=pData; 120 118 for(int k=0;k<nData;k++,pDataC++, PhDiod++) (*PhDiod)=(*pDataC); … … 152 150 153 151 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; 155 160 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;161 161 LastEtoile.LargMiHauteur=widthHalfMax; 162 163 /* cout<<setprecision(9); 164 cout<<TIndex<<" "<<Tfin<<" "<<AmplRes<<" "<<AmplFin<<endl; 165 cout<<TIndex-Tfin<<" "<<(AmplRes-AmplFin)/AmplFin<<endl; 166 */ 162 167 } 163 168 } … … 199 204 // On calcule le Vrms sur le prepulse 200 205 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); 203 210 if(Vrms<SSTLsbVal) Vrms=SSTLsbVal; // Pour eviter les VRMS=0. 204 211 … … 281 288 // Maintenant que l'on se doute que il y a une etoile 282 289 // 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. 284 291 285 292 // BUGG devra etre extrait des headers acquisition. Ca peut changer!!!!!! 286 287 288 293 289 294 int IndexDebutEvt=MaxIndex-SSTLargEvtIndex(); … … 292 297 // Pointeur origine du tableau d'echantillon sur lequel sera calculé le fit 293 298 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 295 301 for(int k=0; k<SSTnbPasFit; k++) { 296 302 DeltaTemps=TFExcursion-k*TPasTFit; … … 314 320 X2Min=1.e99; 315 321 int X2MinIndex=-1; 316 for(int k=0; k<SSTnbPasFit; k++) 322 for(int k=0; k<SSTnbPasFit; k++) { 317 323 if (X2[k]<X2Min) { 318 324 X2Min=X2[k]; 319 325 X2MinIndex=k; 320 326 } 321 327 } 328 322 329 if((X2MinIndex>0)&&(X2MinIndex<(SSTnbPasFit-1))) { 323 330 324 331 // On fitte une parabole sur les trois X2 qui encadrent le min 325 double Di; // Index (non entier) du minimum du X2332 double Di; // Index (non entier) du minimum du X2 326 333 double X=(X2[X2MinIndex+1]-X2Min)/(X2Min-X2[X2MinIndex-1]); 327 334 Di=0.5*(X+1)/(X-1); 328 335 336 // Le X2 est mimimum pour le n° de pas de fit X2MinIndex+Di 329 337 // On calcule l'amplitude estimee a ce temps 330 338 double Som1=0.; pFitArray=pFitArray0; 331 339 DeltaTemps=TFExcursion-(X2MinIndex-Di)*TPasTFit; 332 340 for(int i=0; i<SSTLongIndexEvt(); i++, pFitArray++) 333 Som1+=(*pFitArray)*FPulse.PulseShape(i*PasTempsEch-DeltaTemps);334 Ampl Res=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 337 345 338 346 #ifdef PEtoileDebug 339 double *PulseTrak=new double [SSTLongIndexEvt()];347 double *PulseTrak=new double [SSTLongIndexEvt()]; 340 348 #endif 341 349 // On calcule le X2 correspondant 342 350 double X2Som1=0.; double dummy=0.;pFitArray=pFitArray0; 343 351 for(int i=0;i<SSTLongIndexEvt();i++,pFitArray++) { 352 344 353 #ifdef PEtoileDebug 345 354 PulseTrak[i]=FPulse.PulseShape(i*PasTempsEch-DeltaTemps); 346 355 #endif 347 dummy=(*pFitArray)-Ampl Res*FPulse.PulseShape(i*PasTempsEch-DeltaTemps); // Différence356 dummy=(*pFitArray)-AmplFin*FPulse.PulseShape(i*PasTempsEch-DeltaTemps); // Différence 348 357 X2Som1+=dummy*dummy; // Au carré 349 358 } 350 359 351 360 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 */ 355 368 SuccesAFine=true; 369 370 #ifdef PEtoileDebug 371 delete[] PulseTrak; 372 #endif 356 373 } 357 374 else { // Echec, c'est tres bizarre! On doit etre dans le bruit
Note:
See TracChangeset
for help on using the changeset viewer.