diff --git a/pub/lib/manip.cpp b/pub/lib/manip.cpp index 1b608e771c47ee53e297cf1a10931a9540aab5aa..1cf31b31e1ecade4dcced5ea55a6056bece66909 100644 --- a/pub/lib/manip.cpp +++ b/pub/lib/manip.cpp @@ -164,25 +164,16 @@ void NManip::points_rebin_by_factor() for ( int j=0; j<fin->nJ(); j++ ) { RSpec sin = fin->VS(j); - PSpec sout( new CSpec() ); - sout->z = sin->z; - if ( sin->size()<ng ) + int nout = sin->size() / ng; + if ( nout<1 ) throw "not enough points in spectrum " + S(j); + vector<int> breaks( nout+1 ); + for ( int iout=0; iout<nout+1; ++iout ) + breaks[iout] = iout*ng; + + PSpec sout = sin->binned( breaks ); - for ( int iv=0; iv<sin->size()/ng; ++iv ) { - double xg = 0, yg = 0, vg = 0; - for ( int i=iv*ng; i<(iv+1)*ng; ++i ) { - xg += sin->x[i]; - yg += sin->y[i]; - if ( sin->has_dy() ) - vg += SQR( sin->dy[i] ); - } - if ( sin->has_dy() ) - sout->push_xyd(xg/ng, yg/ng, sqrt(vg)/ng ); - else - sout->push_xy(xg/ng, yg/ng ); - } fout->V.push_back(sout); } NOlm::mem_store( fout, fiter.k() ); diff --git a/pub/test/mpa.f2t b/pub/test/mpa.f2t index 75f21722548a545365e509566b04b15f07e1b79f..14f7619bff6ed80980412e576c8f4f295d49db3c 100755 --- a/pub/test/mpa.f2t +++ b/pub/test/mpa.f2t @@ -1,11 +1,15 @@ #!/usr/bin/env frida -fm 7 7 h -0 oy j+i +fm 9 1 h +0 oy 3+i 1 mpa 0,3 -throw_unless(abs(y[2,3,0]-(3+1))<1e-15,"mpa_test11") -throw_unless(abs(y[2,3,1]-(3+4.5))<1e-15,"mpa_test12") +throw_unless(abs(y[2,0,0]-(3+1))<1e-15,"mpa_test11") +throw_unless(abs(y[2,0,1]-(3+5.5))<1e-15,"mpa_test12") 1 mpaf 3 -throw_unless(ni[3,3]==2,"mpa_test20") -throw_unless(abs(y[3,3,0]-(3+1))<1e-15,"mpa_test21") -throw_unless(abs(y[3,3,1]-(3+4))<1e-15,"mpa_test22") +throw_unless(ni[3,0]==3,"mpa_test20") +throw_unless(abs(y[3,0,0]-(3+1))<1e-15,"mpa_test21") +throw_unless(abs(y[3,0,2]-(3+7))<1e-15,"mpa_test22") +1 mpaf 4 +throw_unless(ni[4,0]==2,"mpa_test30") +throw_unless(abs(y[4,0,0]-(3+1.5))<1e-15,"mpa_test31") +throw_unless(abs(y[4,0,1]-(3+5.5))<1e-15,"mpa_test32") exit(1)