diff --git a/CREATE_TGZ b/CREATE_TGZ index 9f31b5fcd000fb15f899903141f858300cefc2fe..8b44f180549db6a8defd3a1b0443dd0f502bc5b1 100755 --- a/CREATE_TGZ +++ b/CREATE_TGZ @@ -1,11 +1,15 @@ -# TEMP: beim nächsten Mal: shared_ptr.hpp mitverteilen - - - - -# export A=frida2- -rm -f -r $A +# resynchronize +upgit +dngit +rm *~ +rm */*~ +rm */*/*~ +# copy everything +export A=frida2-#<yymmdd> +mkdir $A cp -r pub $A -cd $A; make maintainer-clean; cd .. -upgit # to synchronize +# cleanup and package +cd $A/pub; make maintainer-clean; +ls src # => check that .o have disappeared +up; up tar czv -h -f /io/$A.tgz $A/* diff --git a/pub/src/curve.cpp b/pub/src/curve.cpp index d0aeaab31f739e22cfa9d2b71f6264d4d2cc2caf..cf5615669f6f1842abaeaf0094e5a1c0c5f24c68 100644 --- a/pub/src/curve.cpp +++ b/pub/src/curve.cpp @@ -561,6 +561,8 @@ void NCurveFile::Fit( bool _allow_slow_conv ) if ( fc->ProtectedScans.contains( j ) ) continue; data.j = j; + if( fiter.size()>1 ) + printf("%3d", data.k); printf("%3d", j); D = &(fd->VS[j]); C = &(fc->VC[j]); @@ -579,7 +581,6 @@ void NCurveFile::Fit( bool _allow_slow_conv ) Par[ipf++] = C->P[ip]; } - printf( " [%d*%zu]", npfree, D->size() ); if ( NFitTune::nPrint ) printf("\n"); data.timeout = time(NULL) + NFitTune::maxtime; @@ -588,7 +589,6 @@ void NCurveFile::Fit( bool _allow_slow_conv ) if( control.info==10 ) throw string( "exception in fit function" ); - printf( " %4d", control.nfev); for ( uint i=0; i<npfree; i++ ) printf(" %12g", Par[i]); @@ -607,7 +607,8 @@ void NCurveFile::Fit( bool _allow_slow_conv ) // mean deviation: C->Quality[2] = SQR(control.fnorm) / nd; - printf( " (%9.7g)", C->Quality[NFitTune::mFitMetric] ); + printf( " (%3d->%9.7g)", + control.nfev, C->Quality[NFitTune::mFitMetric] ); // print status: printf( "%s\n", lm_shortmsg[ control.info ] ); diff --git a/pub/src/func.cpp b/pub/src/func.cpp index d6dd979115a42f3b73dfe0f11e06238ff7d23d15..4bf21c8320c04fafb4cc41096fb1dd0a43ef043a 100644 --- a/pub/src/func.cpp +++ b/pub/src/func.cpp @@ -118,12 +118,29 @@ double func_gaussnn (double x, double s) { // Gauss not normalized return s==0 ? 0 : exp(-x*x/(2*s*s)); } double func_cauchy (double x, double s) { return s==0 ? 0 : 2*fabs(s)/twopi/(x*x+s*s); } -double func_kwwc( double v, double a){ +double func_kwwc( double v, double a ){ if( a<0.1 || a>2.0 ) return 0; return kwwcf( (float)v, (float)a ); } -double func_kwws( double v, double a){ +double func_kwws( double v, double a ){ if( a<0.1 || a>2.0 ) return 0; return kwwsf( (float)v, (float)a ); } +double func_skww( double w, double _b, double _wc ){ + // KWW S(q,w) with round-off at wc + static double b=0, wc=0, sig2=0, amp=0; + if( _b<0.1 || _b>2.0 || _wc<=0 ) return 0; + if( _b!=b || _wc!=wc ){ + b = _b; + wc = _wc; + sig2 = - SQR(wc)*2e-4 / + ( log( kwwcf( (float)wc*(1+1e-4), (float)b ) ) - + log( kwwcf( (float)wc*(1-1e-4), (float)b ) ) ); + amp = kwwcf( (float)wc, (float)b ) * exp( SQR(wc)/2/sig2 ); + } + if( fabs(w)>=wc ) + return kwwcf( (float)w, (float)b ); + else + return amp * exp( -SQR(w)/2/sig2 ); +} double func_ran (double v, double a) { // a random number between v and a : @@ -275,6 +292,7 @@ void NFunctions::Register(void) { fmap.insert(make_pair(string("cauchy"),CFunc("cauchy", func_cauchy))); fmap.insert(make_pair(string("kwwc"), CFunc("kwwc",func_kwwc))); fmap.insert(make_pair(string("kwws"), CFunc("kwws",func_kwws))); + fmap.insert(make_pair(string("skww"), CFunc("skww",func_skww))); fmap.insert(make_pair(string("ran"), CFunc("ran", func_ran))); diff --git a/pub/src/func.h b/pub/src/func.h index 0216918bf189a7e9fe7f181d368ea57769fb26e8..9a54532bff0f4ffa221c3114dd23b724753d2128 100644 --- a/pub/src/func.h +++ b/pub/src/func.h @@ -102,8 +102,9 @@ extern double func_xor(double,double); extern double func_mod(double,double); extern double func_idiv(double,double); extern double func_over(double,double); -extern double func_kwwc( double v, double a); -extern double func_kwws( double v, double a); +extern double func_kwwc(double,double); +extern double func_kwws(double,double); +extern double func_skww(double,double,double); extern double func_in( double, vector<double> );