From 320110cd310378f60aa392e3c9e2216c39a0d396 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (laptop)" <j.wuttke@fz-juelich.de>
Date: Tue, 4 May 2010 10:53:03 +0200
Subject: [PATCH] restored oi and oixy (untested)

---
 pub/src/opr.cpp      | 129 +++++++++++++++++++------------------------
 pub/src/special2.cpp |   2 +-
 2 files changed, 57 insertions(+), 74 deletions(-)

diff --git a/pub/src/opr.cpp b/pub/src/opr.cpp
index 7d1d11c0..9ead5396 100644
--- a/pub/src/opr.cpp
+++ b/pub/src/opr.cpp
@@ -168,7 +168,9 @@ void NOperate::Pointwise( string llabel )
         POlc fc = P2C( fin );
 
         POlo fout( fin->new_olo() );
-        fout->lDoc.push_back( "o" + lref.ref_info() + " " + expr);
+
+        if( lref.var!=CRef::_FP )
+            fout->lDoc.push_back( "o" + lref.ref_info() + " " + expr);
         
         if ( lref.pointwise() && !fd )
             throw string( "no pointwise operation on curve" );
@@ -233,67 +235,57 @@ void NOperate::Integral(void)
 {
     NOlm::SelAssert();
 
-    throw string( "TODO broken after V rewrite" );
-/*
     string expr = sask( "Functional ?" );
     if ( expr=="" ) return;
     PTree T;
     user_xaxparse( expr.c_str(), &T );
 
-    NOlm::IterateD fiter;
-    COld *fin, fout;
-    COlo *f;
-    CSpec S;
-    CCoord zco;
-    double xval, zval, result;
-    bool savable;
-    uint k, nz;
+    NOlm::IterateO fiter;
+    POlo fin;
     while( (fin=fiter()) ) {
-        k = fiter.k();
-        nz = fin->ZCo.size();
-        savable = nz > 0;
+        uint k = fiter.k();
+        uint nz = fin->ZCo.size();
+        bool savable = nz > 0;
 
-        fout = *fin;
-        f = (COlo*) fin;
-        fout->VS.clear();
-        if (savable) {
-            fout->lDoc.push_back( "oi " +expr );
+        POld fd = P2D( fin );
+        POlc fc = P2C( fin );
 
-            zco = fin->ZCo.back();
-            fout->ZCo.pop_back();
-            fout->xco = zco;
+        POlo fout( fin->new_olo() );
 
-            T->coord(&(fout->yco), k);
-        }
+        fout->lDoc.push_back( "oi " +expr );
+        
+        fout->ZCo.pop_back();
+        fout->xco = fin->ZCo.back();
+        T->coord( &(fout->yco), k );
+
+        PSpec sout( new CSpec );
+        sout->z = fin->V[0]->z;
+        sout->z.pop_back();
 
-        S.clear();
-        S.z = fin->VS[0].z;
-        S.z.pop_back();
-        for ( uint j=0; j<fin->nSpec(); j++ ) {
+        for ( uint j=0; j<fin->nJ(); j++ ) {
+            double xval, zval, result;
             T->tree_point_val( &result, k, j );
             if (!savable) {
-                cout << "results: " << result << "\n";
-                break;
+                cout << "result: " << result << "\n";
+                continue;
             }
-            xval = fin->VS[j].z[nz-1];
-            S.push_xy( xval, result );
+            xval = fin->V[j]->z[nz-1];
+            sout->push_xy( xval, result );
             if (nz>=2) { // new spectrum if jump in other z values
-                zval = fin->VS[j].z[nz-2];
-                if ((j+1)<fin->VS.size() && 
-                    fin->VS[j+1].z[nz-2]!=zval) {
-                    fout->VS.push_back( S );
-                    S.clear();
-                    S.z = fin->VS[j+1].z;
-                    S.z.pop_back();
+                zval = fin->V[j]->z[nz-2];
+                if ( j+1 < fin->nJ() && fin->V[j+1]->z[nz-2] != zval ) {
+                    fout->V.push_back( sout );
+                    sout = PSpec( new CSpec );
+                    sout->z = fin->V[j+1]->z;
+                    sout->z.pop_back();
                 }
             }
         }
         if ( savable ) {
-            fout->VS.push_back( S );
-            NOlm::OloAdd( fout );
+            fout->V.push_back( sout );
+            NOlm::OloAdd( fout, fiter.k() );
         }
     }
-*/
 };
 
 
@@ -303,8 +295,6 @@ void NOperate::IntXY(void)
 {
     NOlm::SelAssert();
 
-    throw string( "TODO broken after V rewrite" );
-/*
     static int icolx = 0, icoly = 1;
     static CCoord xco, yco;
     icolx = iask( "x from column", icolx );
@@ -315,49 +305,42 @@ void NOperate::IntXY(void)
     yco = CCoord( "y", "" ); // .Ask( "y coordinate", ASK_DEF_GIVEN, yco );
 
     NOlm::IterateD fiter;
-    COld *fin, fout;
-    COlo *f;
-    CSpec S;
-    CCoord zco;
-    double zval;
-    uint k, nz, n;
+    POld fin;
     while( (fin=fiter()) ) {
-        k = fiter.k();
-        nz = fin->ZCo.size();
+        uint nz = fin->ZCo.size();
         if( nz<1 )
             throw "no z in file " + strg(fiter.k());
-        fout = *fin;
-        f = (COlo*) fin;
-        fout->VS.clear();
+
+        POld fout( new COld( *fin ) );
+        fout->V.clear();
         fout->lDoc.push_back( "oixy " + strg(icolx) + " " + strg(icoly) );
+
         fout->ZCo.pop_back();
         fout->xco = xco;
         fout->yco = yco;
-        S.clear();
-        if( !(fin->nSpec()) )
-            throw string( "input file has no spectra" );
-        S.z = fin->VS[0].z;
-        S.z.pop_back();
-        for (uint j=0; j<fin->nSpec(); j++) {
-            n = fin->VS[j].size();
+
+        PSpec sout( new CSpec );
+        sout->z = fin->V[0]->z;
+        sout->z.pop_back();
+
+        for ( uint j=0; j<fin->nJ(); j++ ) {
+            uint n = fin->nPts(j);
             if( icolx>=n || icoly>=n )
                 throw "not enough columns in spectrum " + strg(j);
-            S.push_xy( fin->VS[j].y[icolx], fin->VS[j].y[icoly] );
+            sout->push_xy( fin->VS(j)->y[icolx], fin->VS(j)->y[icoly] );
             if (nz>=2) { // new spectrum if jump in other z values
-                zval = fin->VS[j].z[nz-2];
-                if ((j+1)<fin->VS.size() && 
-                    fin->VS[j+1].z[nz-2]!=zval) {
-                    fout->VS.push_back(S);
-                    S.clear();
-                    S.z = fin->VS[j+1].z;
-                    S.z.pop_back();
+                double zval = fin->V[j]->z[nz-2];
+                if ( j+1 < fin->nJ() && fin->V[j+1]->z[nz-2] != zval) {
+                    fout->V.push_back( sout );
+                    sout = PSpec( new CSpec );
+                    sout->z = fin->V[j+1]->z;
+                    sout->z.pop_back();
                 }
             }
         }
-        fout->VS.push_back(S);
-        NOlm::OloAdd( fout );
+        fout->V.push_back( sout );
+        NOlm::OloAdd( fout, fiter.k() );
     }
-*/
 };
 
 
diff --git a/pub/src/special2.cpp b/pub/src/special2.cpp
index f43ddcc4..54b86bcc 100644
--- a/pub/src/special2.cpp
+++ b/pub/src/special2.cpp
@@ -46,7 +46,7 @@ void NSpecial::FourierCosine(void)
             n = sin->size();
                         
             plan = fftw_plan_r2r_1d(
-                n, &(Sin->y[0]), &(Sout->y[0]),
+                n, &(sin->y[0]), &(sout->y[0]),
                 FFTW_REDFT00,  FFTW_ESTIMATE);
             nold = n; // currently not used
             fftw_execute( plan );
-- 
GitLab