Changeset 2008 in Sophya
- Timestamp:
- May 16, 2002, 3:13:00 PM (23 years ago)
- Location:
- trunk/ArchTOIPipe
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ArchTOIPipe/ProcWSophya/simoffset.cc
r2004 r2008 20 20 mWSz = (mwsz > 8) ? mwsz : 8; 21 21 nPtFit = (nptfit > degpol+2) ? nptfit : degpol+2; 22 if (nPtFit%2 == 0) nPtFit++; 22 23 degPol = (degpol > 1)?degpol:1; 23 24 totnscount = 0; … … 95 96 int wsize = mWSz; 96 97 97 Vector vin(wsize); 98 int hisblk = nPtFit/2+1; 99 Vector vinhist(wsize*hisblk); 100 TVector<uint_8> vfghist(wsize*hisblk); 98 101 Vector voff(wsize); 99 102 Vector vout(wsize); 100 TVector<uint_8> vfg(wsize); 103 Vector vinc(wsize); 104 TVector<uint_8> vfgc(wsize); 105 101 106 102 107 // Pour le fit 103 Vector errCoef( 3);104 105 Vector X(nPtFit );106 Vector X0(nPtFit );107 Vector Y(nPtFit );108 Vector YErr(nPtFit );108 Vector errCoef(degPol+1); 109 110 Vector X(nPtFit+1); 111 Vector X0(nPtFit+1); 112 Vector Y(nPtFit+1); 113 Vector YErr(nPtFit+1); 109 114 110 115 // Variables diverses 111 int k,i,j,klast; 112 int nks = 0; 116 int k,kb,j,klast; 113 117 klast = snb-1; 114 118 totnbblock = 0; … … 124 128 double sig = 0.; 125 129 double meanx = 0.; 126 130 double sn_last = 0.; 131 double y_last = 0.; 132 127 133 // Boucle sur les sampleNum 128 // 1er partie, on traite par paquets de wsize 129 130 for(k=snb;k<=sne-wsize+1;k+=wsize) { 134 // 1ere partie, on traite par paquets de wsize 135 int nblk = (sne-snb+1)/wsize; 136 for(kb=0; kb<nblk; kb++) { 137 k = kb*wsize+snb; 138 // for(k=snb;k<=sne-wsize+1;k+=wsize) { 131 139 // Lecture d'un bloc de donnees 140 Vector vin( vinhist(Range((kb%hisblk)*wsize, 0, wsize) ) ); 141 TVector<uint_8> vfg( vfghist(Range((kb%hisblk)*wsize, 0, wsize) ) ); 142 132 143 getData(0, k, wsize, vin.Data(), vfg.Data()); 133 144 … … 144 155 } 145 156 146 sn0 = (double)(k+wsize/2);147 157 148 158 if (!fginiXYdone) { … … 152 162 sig = sig/nok-mean*mean; 153 163 } 154 X = RegularSequence( k+wsize*0.5, (double)wsize);164 X = RegularSequence((kb+0.5)*wsize, (double)wsize); 155 165 Y = mean; 156 166 YErr = (nok > 0.5) ? sqrt(mean) : 1.; … … 158 168 } 159 169 160 if (nok > 3. ) {170 if (nok > 3.5) { 161 171 mean /= nok; 162 172 meanx /= nok; 163 173 sig = sig/nok-mean*mean; 174 if (sig < 1.e-6*mean) sig = 1.e-6*mean; 164 175 int kk = nbblkok%nPtFit; 165 176 nbblkok++; … … 169 180 } 170 181 171 X0 = X; 172 X0 -= sn0; 173 if (nbblkok > poly.Degre()+1) 182 if ((nok>3.5) && (nbblkok >= nPtFit) ) { 183 // On force le fit a garder une certaine continuite 184 Y(nPtFit) = y_last; 185 double smin, smax; 186 YErr(Range(0,0,nPtFit)).MinMax(smin, smax); 187 YErr(nPtFit) = smax/10.; 188 X(nPtFit) = sn_last; 189 sn0 = (double)(k-nPtFit*wsize*0.5); 190 X0 = X; 191 X0 -= sn0; 174 192 poly.Fit(X0,Y,YErr,degPol,errCoef); 193 } 175 194 else { 176 poly[0] = mean; 177 for(int jj=1; jj<=poly.Degre(); jj++) poly[jj] = 0.; 178 } 179 /* 180 if (nbblkok < 8) { 181 cout << "------ DBG-X " << nbblkok << "," << nok << " degre=" << poly.Degre() << endl; 182 cout << "DBG-A X0=" << X0 << endl; 183 cout << "DBG-A Y=" << Y << endl; 184 cout << "DBG-A YErr=" << YErr << endl; 185 cout << "DBG-A poly= " << poly << endl; 186 } 187 */ 188 189 // Calcul des valeurs d'offset en sortie 190 for(j=0; j<wsize; j++) 191 voff(j) = poly(k+j-sn0); 192 193 if (fgoffset) putData(0, k, wsize, voff.Data()); 194 if (fgincopie) putData(2, k, wsize, vin.Data(), vfg.Data()); 195 if (fgout) { 196 vin -= voff; 197 putData(1, k, wsize, vin.Data(), vfg.Data()); 198 } 199 200 if (fga0) { 201 vout = poly[0]; 202 putData(3, k, wsize, vout.Data()); 203 } 204 if (fga1) { 205 vout = poly[1]; 206 putData(4, k, wsize, vout.Data()); 207 } 208 if (fga2) { 209 vout = poly[2]; 210 putData(5, k, wsize, vout.Data()); 211 } 212 if (fgsn0) { 213 vout = sn0; 214 putData(6, k, wsize, vout.Data()); 215 } 216 if (fgmeany) { 217 vout = mean; 218 putData(7, k, wsize, vout.Data()); 219 } 220 if (fgsigy) { 221 vout = sig; 222 putData(8, k, wsize, vout.Data()); 223 } 224 225 if (fgmeanx) { 226 vout = meanx; 227 putData(9, k, wsize, vout.Data()); 228 } 229 195 if (nbblkok < 2) { 196 sn0 = k+1; 197 poly[0] = mean; 198 for(int jj=1; jj<=poly.Degre(); jj++) poly[jj] = 0.; 199 } 200 else if (nbblkok < nPtFit) { 201 poly[0] = 0.5*(Y(nbblkok-1)+Y(0)); 202 poly[1] = (Y(nbblkok-1) - Y(0))/(X(nbblkok-1)-X(0)); 203 sn0 = 0.5*(X(nbblkok-1)+X(0)); 204 for(int jj=2; jj<=poly.Degre(); jj++) poly[jj] = 0.; 205 } 206 sn_last = sn0; 207 y_last = poly(sn_last-sn0); 208 } 230 209 if (ntpoly) { // Remplissage du XNTuple de controle 231 char * nomsnt[] = {"sncur", "sn0", "meanx", "meany", "sigy", "a0", "a1", "a2", "ycur"};232 210 float xnt[10]; 233 211 xnt[0] = k; … … 243 221 } 244 222 223 /* 224 if (nbblkok < 8) { 225 cout << "------ DBG-X " << nbblkok << "," << nok << " degre=" << poly.Degre() << endl; 226 cout << "DBG-A X0=" << X0 << endl; 227 cout << "DBG-A Y=" << Y << endl; 228 cout << "DBG-A YErr=" << YErr << endl; 229 cout << "DBG-A poly= " << poly << endl; 230 } 231 */ 232 233 if (fgincopie) putData(2, k, wsize, vin.Data(), vfg.Data()); 234 235 if (kb < nPtFit/2) continue; 236 Vector vinc; 237 TVector<uint_8> vfgc; 238 int kbs = kb-nPtFit/2; 239 k = kbs*wsize+snb; 240 if (kb == nblk-1) { 241 int wszt = wsize*hisblk; 242 voff.ReSize(wszt); 243 vout.ReSize(wszt); 244 vinc.ReSize(wszt); 245 vfgc.ReSize(wszt); 246 int jb = 0; 247 for(int kbsc=kbs; kbsc<nblk; kbsc++) { 248 vinc(Range(jb*wsize, 0, wsize)) = 249 vinhist(Range((kbsc%hisblk)*wsize, 0, wsize) ) ; 250 vfgc(Range(jb*wsize, 0, wsize)) = 251 vfghist(Range((kbsc%hisblk)*wsize, 0, wsize) ) ; 252 jb++; 253 } 254 wsize = wszt; 255 } 256 else { 257 vinc = vinhist(Range((kbs%hisblk)*wsize, 0, wsize) ) ; 258 vfgc = vfghist(Range((kbs%hisblk)*wsize, 0, wsize) ) ; 259 } 260 261 // Calcul des valeurs d'offset en sortie 262 for(j=0; j<wsize; j++) 263 voff(j) = poly(k+j-sn0); 264 sn_last = k+wsize; 265 y_last = poly(sn_last-sn0); 266 267 if (fgoffset) putData(0, k, wsize, voff.Data()); 268 if (fgout) { 269 vinc -= voff; 270 putData(1, k, wsize, vinc.Data(), vfgc.Data()); 271 } 272 273 if (fga0) { 274 vout = poly[0]; 275 putData(3, k, wsize, vout.Data()); 276 } 277 if (fga1) { 278 vout = poly[1]; 279 putData(4, k, wsize, vout.Data()); 280 } 281 if (fga2) { 282 vout = poly[2]; 283 putData(5, k, wsize, vout.Data()); 284 } 285 if (fgsn0) { 286 vout = sn0; 287 putData(6, k, wsize, vout.Data()); 288 } 289 if (fgmeany) { 290 vout = mean; 291 putData(7, k, wsize, vout.Data()); 292 } 293 if (fgsigy) { 294 vout = sig; 295 putData(8, k, wsize, vout.Data()); 296 } 297 298 if (fgmeanx) { 299 vout = meanx; 300 putData(9, k, wsize, vout.Data()); 301 } 302 245 303 klast+=wsize; 246 304 totnscount+=wsize; … … 249 307 } // Fin boucle sur les samples, par pas de wsize 250 308 251 // 2eme partie, on traite la fin du bloc d'echantillons si necessaire309 // 3eme partie, on traite la fin du bloc d'echantillons si necessaire 252 310 if (klast < sne) { 253 311 wsize = sne-klast; 254 vin.ReSize(wsize);312 Vector vin(wsize); 255 313 voff.ReSize(wsize); 256 314 vout.ReSize(wsize); 257 vfg.ReSize(wsize); 315 TVector<uint_8> vfg(wsize); 316 k = klast+1; 258 317 getData(0, k, wsize, vin.Data(), vfg.Data()); 259 318 for(j=0; j<wsize; j++) -
trunk/ArchTOIPipe/ProcWSophya/simtoipr.cc
r2007 r2008 3 3 // Christophe Magneville 4 4 // Reza Ansari 5 // $Id: simtoipr.cc,v 1. 19 2002-05-15 22:44:51ansari Exp $5 // $Id: simtoipr.cc,v 1.20 2002-05-16 13:13:00 ansari Exp $ 6 6 7 7 #include "config.h" … … 25 25 26 26 totnscount = glnscount = glcount = out_range_nscount = 0; 27 srcfgcount = srcfgnscount = 0; 27 28 deglitchdone = false; 28 29 … … 71 72 << " GlitchSampleCount=" << GlitchSampleCount() 72 73 << "( " << (double)GlitchSampleCount()*100./nst << " % )" << endl; 74 os << " SrcFgCount= " << SrcFgCount() 75 << " SrcFgSampleCount=" << SrcFgSampleCount() 76 << "( " << (double)SrcFgSampleCount()*100./nst << " % )" << endl; 73 77 os << " ------------------------------------------------------ " << endl; 74 78 } … … 280 284 else { // Trop long ou trop court - ce n'est pas un glitch ... 281 285 uint_8 flg_src = 0; 282 if (k-kgl > maxpoints) flg_src = FlgToiSource; // Si trop long 286 if (k-kgl > maxpoints) { 287 flg_src = FlgToiSource; // Si trop long 288 srcfgcount++; srcfgnscount += (k-kgl); 289 } 283 290 for(ii=kgl; ii<k; ii++) 284 291 putData(0, ii+snb, vin(ii%wsize), vfg(ii%wsize)|flg_src); … … 296 303 if (k-kgl+1 > maxpoints) { // serie de points > seuil 297 304 for(ii=kgl; ii<=k; ii++) // -> Donc pas glitch 298 putData(0, ii+snb, vin(ii%wsize), vfg(ii%wsize)); 305 putData(0, ii+snb, vin(ii%wsize), vfg(ii%wsize)|FlgToiSource); 306 srcfgcount++; srcfgnscount += (k-kgl+1); 299 307 lastput = snb+k; 300 308 fgglitch = false; … … 308 316 else { // On est toujours dans une serie > seuil 309 317 putData(0, k+snb, vin(k%wsize), vfg(k%wsize)); 318 srcfgnscount++; 310 319 lastput = snb+k; lastvalok = valcur; 311 320 } -
trunk/ArchTOIPipe/ProcWSophya/simtoipr.h
r2000 r2008 5 5 // Christophe Magneville 6 6 // Reza Ansari 7 // $Id: simtoipr.h,v 1.1 2 2002-05-14 13:06:58ansari Exp $7 // $Id: simtoipr.h,v 1.13 2002-05-16 13:13:00 ansari Exp $ 8 8 9 9 … … 66 66 inline int_8 GlitchCount() const { return glcount; } 67 67 inline int_8 GlitchSampleCount() const { return glnscount; } 68 inline int_8 SrcFgCount() const { return srcfgcount; } 69 inline int_8 SrcFgSampleCount() const { return srcfgnscount; } 68 70 inline int_8 OutOfRangeSampleCount() const { return out_range_nscount; } 69 71 … … 74 76 int_8 glnscount; // Nombre total de glitch 75 77 int_8 glcount; // Nombre de glitch detecte 78 int_8 srcfgnscount; // Nombre total d'echantillons flagges source 79 int_8 srcfgcount; // Nombre de sections flaggees source 76 80 int_8 out_range_nscount; // Nombre de sample Out Of Range 77 81 bool deglitchdone; // Deglitch effectue -
trunk/ArchTOIPipe/TestPipes/simofftst.cc
r2000 r2008 3 3 // Christophe Magneville 4 4 // Reza Ansari 5 // $Id: simofftst.cc,v 1. 1 2002-05-14 13:06:58ansari Exp $5 // $Id: simofftst.cc,v 1.2 2002-05-16 13:13:00 ansari Exp $ 6 6 7 7 /* Test de processeurs ds simtoipr.cc - Reza Avril 2001 … … 37 37 #include "nooppr.h" 38 38 #include "timing.h" 39 #include " sambainit.h"39 #include "histinit.h" 40 40 #include <stdexcept> 41 41
Note:
See TracChangeset
for help on using the changeset viewer.