diff --git a/.travis.yml b/.travis.yml index d04fa93211..54f966f570 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,16 +2,14 @@ language: cpp dist: trusty sudo: false addons: + sources: + - ubuntu-toolchain-r-test apt: - sources: - - ubuntu-toolchain-r-test - - george-edison55-precise-backports packages: - gfortran - libbz2-dev - libblas-dev - liblapack-dev - - libarpack2-dev - libnetcdf-dev - libfftw3-dev - netcdf-bin diff --git a/doc/CpptrajManual.pdf b/doc/CpptrajManual.pdf index f4a3bc090c..1a2e5036c0 100644 Binary files a/doc/CpptrajManual.pdf and b/doc/CpptrajManual.pdf differ diff --git a/doc/cpptraj.lyx b/doc/cpptraj.lyx index 18cc1c59e1..15b0c9cd9a 100644 --- a/doc/cpptraj.lyx +++ b/doc/cpptraj.lyx @@ -38804,11 +38804,79 @@ integrate \end_layout \begin_layout LyX-Code -integrate [ ...] [out ] [name ] +integrate [ ...] [out ] [intout ] +\end_layout + +\begin_layout LyX-Code + [name ] +\end_layout + +\begin_deeper +\begin_layout Description + +\begin_inset space ~ +\end_inset + +[ +\begin_inset space ~ +\end_inset + +...] Data set(s) to integrate. +\end_layout + +\begin_layout Description +[out +\begin_inset space ~ +\end_inset + +] If specified, write cumulative sum curves to . +\end_layout + +\begin_layout Description +[intout +\begin_inset space ~ +\end_inset + +] If specified, write final integral values to . +\end_layout + +\begin_layout Description +[name +\begin_inset space ~ +\end_inset + +] Output data set(s) name. \end_layout +\begin_layout Standard +DataSets Created: +\end_layout + +\begin_layout Description + Final integral values, 1 for each input data set (indexed from 0). +\end_layout + +\begin_layout Description +[Sum]: Cumulative sum curves if +\series bold +out +\series default + was specified, 1 for each input data set (indexed from 0). +\end_layout + +\end_deeper \begin_layout Standard Integrate specified data set(s) using trapezoid integration. + If +\series bold +'out' +\series default + is specified write cumulative sum curves to . + If +\series bold +'intout' +\series default + is specified write final integral values for each set to . \end_layout \begin_layout Subsection @@ -42251,6 +42319,70 @@ Calculate running average over windows of given size for data in selected data set(s). \end_layout +\begin_layout Subsection +slope +\end_layout + +\begin_layout LyX-Code +slope [ ...] [out ] [name ] +\end_layout + +\begin_layout LyX-Code + [type {forward|backward|central}] +\end_layout + +\begin_deeper +\begin_layout Description + +\begin_inset space ~ +\end_inset + +[ +\begin_inset space ~ +\end_inset + +...] Data set(s) to calculate finite difference for. +\end_layout + +\begin_layout Description +[out +\begin_inset space ~ +\end_inset + +] File to write finite difference curves to. +\end_layout + +\begin_layout Description +[name +\begin_inset space ~ +\end_inset + +] Output data set(s) name. +\end_layout + +\begin_layout Description +[type +\begin_inset space ~ +\end_inset + +{forward|backward|central}] Specify type of finite difference to calculate + (default forward). +\end_layout + +\begin_layout Standard +DataSets generated: +\end_layout + +\begin_layout Description +: Output finite difference curves for each input data set (indexed + from 0). +\end_layout + +\end_deeper +\begin_layout Standard +Calculate finite differences for each input data set. +\end_layout + \begin_layout Subsection spline \end_layout @@ -42310,7 +42442,7 @@ spline [ ...] [out ] [meshsize | meshfactor ] \end_deeper \begin_layout Standard -Cubic spline the given data sets. +Apply cubic splines to the given input data sets to create new data sets. \end_layout \begin_layout Subsection diff --git a/src/Action_VelocityAutoCorr.cpp b/src/Action_VelocityAutoCorr.cpp index 954c01eb7d..1e23726a68 100644 --- a/src/Action_VelocityAutoCorr.cpp +++ b/src/Action_VelocityAutoCorr.cpp @@ -1,7 +1,6 @@ #include "Action_VelocityAutoCorr.h" #include "CpptrajStdio.h" #include "ProgressBar.h" -#include "DataSet_Mesh.h" #include "DataSet_double.h" #include "Constants.h" #include "Corr.h" @@ -281,9 +280,7 @@ void Action_VelocityAutoCorr::Print() { // Integration to get diffusion coefficient. VAC_->SetDim(Dimension::X, Dimension(0.0, tstep_, "Time (ps)")); mprintf("\tIntegrating data set %s, step is %f\n", VAC_->legend(), VAC_->Dim(0).Step()); - DataSet_Mesh mesh; - mesh.SetMeshXY( static_cast(*VAC_) ); - double total = mesh.Integrate_Trapezoid(); + double total = Ct.Integrate( DataSet_1D::TRAPEZOID ); const double ANG2_PS_TO_CM2_S = 10.0; // Convert Ang^2/ps to 1E-5 cm^2/s const char* tab = "\t"; if (!diffout_->IsStream()) { diff --git a/src/Analysis_Integrate.cpp b/src/Analysis_Integrate.cpp index ce04aa825d..47801d1b68 100644 --- a/src/Analysis_Integrate.cpp +++ b/src/Analysis_Integrate.cpp @@ -1,17 +1,22 @@ #include "Analysis_Integrate.h" #include "CpptrajStdio.h" +#include "DataSet_Mesh.h" -Analysis_Integrate::Analysis_Integrate() : outfile_(0) {} +Analysis_Integrate::Analysis_Integrate() : sumSet_(0) {} void Analysis_Integrate::Help() const { - mprintf("\t [ ...] [out ] [name ]\n" - " Integrate given data sets.\n"); + mprintf("\t [ ...] [out ] [intout ]\n" + "\t[name ]\n" + " Integrate given data sets. If 'out' is specified write cumulative\n" + " sum curves to . If 'intout' is specified write final\n" + " integral values for each set to .\n"); } Analysis::RetType Analysis_Integrate::Setup(ArgList& analyzeArgs, AnalysisSetup& setup, int debugIn) { std::string setname = analyzeArgs.GetStringKey("name"); - outfile_ = setup.DFL().AddDataFile(analyzeArgs.GetStringKey("out"), analyzeArgs); + DataFile* outfile = setup.DFL().AddDataFile(analyzeArgs.GetStringKey("out"), analyzeArgs); + DataFile* intfile = setup.DFL().AddDataFile(analyzeArgs.GetStringKey("intout"), analyzeArgs); // Select datasets from remaining args if (input_dsets_.AddSetsFromArgs( analyzeArgs.RemainingArgs(), setup.DSL() )) { mprinterr("Error: Could not add data sets.\n"); @@ -23,48 +28,55 @@ Analysis::RetType Analysis_Integrate::Setup(ArgList& analyzeArgs, AnalysisSetup& } // Set up output datasets - if (outfile_ != 0) { + if (setname.empty()) + setname = setup.DSL().GenerateDefaultName("Int"); + sumSet_ = setup.DSL().AddSet(DataSet::DOUBLE, setname); + if (sumSet_ == 0) return Analysis::ERR; + if (intfile != 0) intfile->AddDataSet( sumSet_ ); + if (outfile != 0) { + int idx = 0; + MetaData md(setname, "Sum"); for (Array1D::const_iterator dsIn = input_dsets_.begin(); dsIn != input_dsets_.end(); ++dsIn) { - DataSet* ds = setup.DSL().AddSet(DataSet::XYMESH, setname, "Int"); + md.SetIdx(idx++); + DataSet* ds = setup.DSL().AddSet(DataSet::XYMESH, md); if (ds == 0) return Analysis::ERR; ds->SetLegend( "Int(" + (*dsIn)->Meta().Legend() + ")" ); - outfile_->AddDataSet( ds ); + outfile->AddDataSet( ds ); output_dsets_.push_back( (DataSet_Mesh*)ds ); } } - mprintf(" INTEGRATE: Calculating integral of %zu data sets.\n", + mprintf(" INTEGRATE: Calculating integral for %zu data sets.\n", input_dsets_.size()); - if (outfile_ != 0) { + if (outfile != 0) { if (!setname.empty()) mprintf("\tOutput set name: %s\n", setname.c_str()); - mprintf("\tOutfile name: %s\n", outfile_->DataFilename().base()); + mprintf("\tOutfile name: %s\n", outfile->DataFilename().base()); + } + if (debugIn > 0) { + for (Array1D::const_iterator set = input_dsets_.begin(); set != input_dsets_.end(); ++set) + mprintf("\t%s\n", (*set)->legend()); } - //for (Array1D::const_iterator set = input_dsets_.begin(); set != input_dsets_.end(); ++set) - // mprintf("\t%s\n", (*set)->legend()); return Analysis::OK; } Analysis::RetType Analysis_Integrate::Analyze() { double sum; - int idx = 0; - for (Array1D::const_iterator DS = input_dsets_.begin(); - DS != input_dsets_.end(); ++DS, ++idx) - { - if ( (*DS)->Size() < 1) - mprintf("Warning: Set [%i] \"%s\" has no data.\n", idx, (*DS)->legend()); - else { - DataSet_Mesh mesh; - // Set XY mesh - mesh.SetMeshXY( *(*DS) ); - if (outfile_ != 0) - sum = mesh.Integrate_Trapezoid( *(output_dsets_[idx]) ); - else - sum = mesh.Integrate_Trapezoid(); - mprintf("\tIntegral of %s is %g\n", (*DS)->legend(), sum); - output_dsets_[idx]->SetDim(Dimension::X, (*DS)->Dim(0)); + for (unsigned int idx = 0; idx != input_dsets_.size(); idx++) { + DataSet_1D const& inSet = *(input_dsets_[idx]); + if (inSet.Size() < 1) { + mprintf("Warning: Set '%s' has no data.\n", inSet.legend()); + } else { + if (!output_dsets_.empty()) { + DataSet_Mesh& outSet = static_cast( *(output_dsets_[idx]) ); + sum = inSet.Integrate( DataSet_1D::TRAPEZOID, outSet.SetMeshX(), outSet.SetMeshY() ); + outSet.SetDim(Dimension::X, inSet.Dim(0)); + } else + sum = inSet.Integrate( DataSet_1D::TRAPEZOID ); + mprintf("\tIntegral of %s is %g\n", inSet.legend(), sum); + sumSet_->Add(idx, &sum); } } return Analysis::OK; diff --git a/src/Analysis_Integrate.h b/src/Analysis_Integrate.h index c01e235298..8bb6f83da3 100644 --- a/src/Analysis_Integrate.h +++ b/src/Analysis_Integrate.h @@ -2,7 +2,7 @@ #define INC_ANALYSIS_INTEGRATE_H #include "Analysis.h" #include "Array1D.h" -#include "DataSet_Mesh.h" +class DataSet_Mesh; class Analysis_Integrate : public Analysis { public: Analysis_Integrate(); @@ -12,8 +12,8 @@ class Analysis_Integrate : public Analysis { Analysis::RetType Setup(ArgList&, AnalysisSetup&, int); Analysis::RetType Analyze(); private: - DataFile* outfile_; // FIXME: May not need to be class var Array1D input_dsets_; std::vector output_dsets_; + DataSet* sumSet_; ///< Hold final sum for each set }; #endif diff --git a/src/Analysis_Rotdif.cpp b/src/Analysis_Rotdif.cpp index e34c37bc17..1513fb4baa 100644 --- a/src/Analysis_Rotdif.cpp +++ b/src/Analysis_Rotdif.cpp @@ -1590,7 +1590,7 @@ int Analysis_Rotdif::DetermineDeffs() { // Calculate mesh Y values spline.SetSplinedMeshY(pX, pY); // Integrate - double integral = spline.Integrate_Trapezoid(); + double integral = spline.Integrate( DataSet_1D::TRAPEZOID ); //mprintf("DEBUG: Vec %i integral= %g\n", nvec, integral); // Solve for deff D_eff_.push_back( calcEffectiveDiffusionConst(integral) ); diff --git a/src/Analysis_Slope.cpp b/src/Analysis_Slope.cpp new file mode 100644 index 0000000000..62f225e447 --- /dev/null +++ b/src/Analysis_Slope.cpp @@ -0,0 +1,78 @@ +#include "Analysis_Slope.h" +#include "CpptrajStdio.h" +#include "DataSet_Mesh.h" + +// Analysis_Slope::Help() +void Analysis_Slope::Help() const { + mprintf("\t [ ...] [out ] [name ]\n" + "\t[type {forward|backward|central}]\n" + " Calculate finite difference (default forward) of given data sets.\n"); +} + +const char* Analysis_Slope::dTypeStr_[] = {"forward", "backward", "central"}; + +// Analysis_Slope::Setup() +Analysis::RetType Analysis_Slope::Setup(ArgList& analyzeArgs, AnalysisSetup& setup, int debugIn) +{ + std::string setname = analyzeArgs.GetStringKey("name"); + DataFile* outfile = setup.DFL().AddDataFile(analyzeArgs.GetStringKey("out"), analyzeArgs); + std::string dtypestr = analyzeArgs.GetStringKey("type"); + if (!dtypestr.empty()) { + if (dtypestr == "forward" ) diffType_ = DataSet_1D::FORWARD; + else if (dtypestr == "backward") diffType_ = DataSet_1D::BACKWARD; + else if (dtypestr == "central" ) diffType_ = DataSet_1D::CENTRAL; + else { + mprinterr("Error: Unrecognized type: '%s'\n", dtypestr.c_str()); + return Analysis::ERR; + } + } + // Select datasets from remaining args + if (input_dsets_.AddSetsFromArgs( analyzeArgs.RemainingArgs(), setup.DSL() )) { + mprinterr("Error: Could not add data sets.\n"); + return Analysis::ERR; + } + if (input_dsets_.empty()) { + mprinterr("Error: No input data sets.\n"); + return Analysis::ERR; + } + + // Set up output datasets + for (Array1D::const_iterator dsIn = input_dsets_.begin(); + dsIn != input_dsets_.end(); ++dsIn) + { + DataSet* ds = setup.DSL().AddSet(DataSet::XYMESH, setname, "Diff"); + if (ds == 0) return Analysis::ERR; + ds->SetLegend( "Diff(" + (*dsIn)->Meta().Legend() + ")" ); + if (outfile != 0) outfile->AddDataSet( ds ); + output_dsets_.push_back( (DataSet_Mesh*)ds ); + } + + mprintf(" SLOPE: Calculating %s finite difference for %zu data sets.\n", + dTypeStr_[diffType_], input_dsets_.size()); + if (outfile != 0) { + if (!setname.empty()) + mprintf("\tOutput set name: %s\n", setname.c_str()); + mprintf("\tOutfile name: %s\n", outfile->DataFilename().base()); + } + if (debugIn > 0) { + for (Array1D::const_iterator set = input_dsets_.begin(); set != input_dsets_.end(); ++set) + mprintf("\t%s\n", (*set)->legend()); + } + return Analysis::OK; +} + +// Analysis_Slope::Analyze() +Analysis::RetType Analysis_Slope::Analyze() { + for (unsigned int idx = 0; idx != input_dsets_.size(); idx++) { + DataSet_1D const& inSet = *(input_dsets_[idx]); + mprintf("\t%s\n", inSet.legend()); + if (inSet.Size() < 1) { + mprintf("Warning: Set '%s' has no data.\n", inSet.legend()); + } else { + DataSet_Mesh& outSet = static_cast( *(output_dsets_[idx]) ); + inSet.FiniteDifference( diffType_, outSet.SetMeshX(), outSet.SetMeshY() ); + outSet.SetDim(Dimension::X, inSet.Dim(0)); + } + } + return Analysis::OK; +} diff --git a/src/Analysis_Slope.h b/src/Analysis_Slope.h new file mode 100644 index 0000000000..c2a63db6fa --- /dev/null +++ b/src/Analysis_Slope.h @@ -0,0 +1,22 @@ +#ifndef INC_ANALYSIS_SLOPE_H +#define INC_ANALYSIS_SLOPE_H +#include "Analysis.h" +#include "Array1D.h" +class DataSet_Mesh; +/// Calculate the slope (finite difference) for input DataSets +class Analysis_Slope : public Analysis { + public: + Analysis_Slope() : diffType_(DataSet_1D::FORWARD) {} + DispatchObject* Alloc() const { return (DispatchObject*)new Analysis_Slope(); } + void Help() const; + + Analysis::RetType Setup(ArgList&, AnalysisSetup&, int); + Analysis::RetType Analyze(); + private: + static const char* dTypeStr_[]; + + DataSet_1D::DiffType diffType_; + Array1D input_dsets_; + std::vector output_dsets_; +}; +#endif diff --git a/src/Analysis_TI.cpp b/src/Analysis_TI.cpp index c409b2a69e..ed9a65cfc7 100644 --- a/src/Analysis_TI.cpp +++ b/src/Analysis_TI.cpp @@ -272,11 +272,11 @@ int Analysis_TI::SetQuadAndWeights(int nq) { } /** Integrate each curve in the curve_ array using trapezoid method. */ -void Analysis_TI::Integrate_Trapezoid(Darray& sum) const { +void Analysis_TI::IntegrateCurves(Darray& sum) const { // Integrate each curve if not doing quadrature for (unsigned int j = 0; j != curve_.size(); j++) { - DataSet_Mesh const& CR = static_cast( *(curve_[j]) ); - sum[j] = CR.Integrate_Trapezoid(); + DataSet_1D const& CR = static_cast( *(curve_[j]) ); + sum[j] = CR.Integrate(DataSet_1D::TRAPEZOID); } } @@ -356,7 +356,7 @@ int Analysis_TI::Calc_Bootstrap() { sum[j] += (wgt_[idx] * Avgs[j]); } } // END loop over input data sets - if (mode_ == TRAPEZOID) Integrate_Trapezoid(sum); + if (mode_ == TRAPEZOID) IntegrateCurves(sum); // Calculate average DA from individual TI integration values. double DA_avg = 0.0; double DA_sd = 0.0; @@ -421,7 +421,7 @@ int Analysis_TI::Calc_Nskip() { sum[j] += (wgt_[idx] * avg[j]); } } // END loop over input data sets - if (mode_ == TRAPEZOID) Integrate_Trapezoid(sum); + if (mode_ == TRAPEZOID) IntegrateCurves(sum); // Store final TI integration values. DataSet_Mesh& DA = static_cast( *dAout_ ); DA.ModifyDim(Dimension::X).SetLabel("PtsSkipped"); @@ -511,7 +511,7 @@ int Analysis_TI::Calc_Increment() { sum[j] += (wgt_[idx] * avg[j]); } } // END loop over data sets - if (mode_ == TRAPEZOID) Integrate_Trapezoid(sum); + if (mode_ == TRAPEZOID) IntegrateCurves(sum); // Store final integration values DataSet_Mesh& DA = static_cast( *dAout_ ); DA.ModifyDim(Dimension::X).SetLabel("Point"); @@ -536,7 +536,7 @@ int Analysis_TI::Calc_Avg() { if (mode_ == GAUSSIAN_QUAD) sum[0] += (wgt_[idx] * avg_dvdl); } - if (mode_ == TRAPEZOID) Integrate_Trapezoid(sum); + if (mode_ == TRAPEZOID) IntegrateCurves(sum); // Store final integration values dAout_->ModifyDim(Dimension::X).SetLabel("TI"); dAout_->Add(0, &(sum[0])); diff --git a/src/Analysis_TI.h b/src/Analysis_TI.h index 7ac4633035..2af4d6608d 100644 --- a/src/Analysis_TI.h +++ b/src/Analysis_TI.h @@ -20,7 +20,7 @@ class Analysis_TI : public Analysis { typedef std::vector DSarray; int SetQuadAndWeights(int); - void Integrate_Trapezoid(Darray&) const; + void IntegrateCurves(Darray&) const; int Calc_Bootstrap(); int Calc_Nskip(); int Calc_Increment(); diff --git a/src/Command.cpp b/src/Command.cpp index e6bafb2193..6d38117975 100644 --- a/src/Command.cpp +++ b/src/Command.cpp @@ -181,6 +181,7 @@ #include "Analysis_TI.h" #include "Analysis_ConstantPHStats.h" #include "Analysis_HausdorffDistance.h" +#include "Analysis_Slope.h" CmdList Command::commands_ = CmdList(); @@ -396,6 +397,7 @@ void Command::Init() { Command::AddCmd( new Analysis_RmsAvgCorr(), Cmd::ANA, 1, "rmsavgcorr" ); Command::AddCmd( new Analysis_Rotdif(), Cmd::ANA, 1, "rotdif" ); Command::AddCmd( new Analysis_RunningAvg(), Cmd::ANA, 1, "runningavg" ); + Command::AddCmd( new Analysis_Slope(), Cmd::ANA, 1, "slope" ); Command::AddCmd( new Analysis_Spline(), Cmd::ANA, 1, "spline" ); Command::AddCmd( new Analysis_Statistics(), Cmd::ANA, 2, "stat", "statistics" ); Command::AddCmd( new Analysis_TI(), Cmd::ANA, 1, "ti" ); diff --git a/src/DataSet_1D.cpp b/src/DataSet_1D.cpp index 41d8377fc9..25e5933cd5 100644 --- a/src/DataSet_1D.cpp +++ b/src/DataSet_1D.cpp @@ -1,9 +1,11 @@ // Collection of routines to perform math on 1D datasets. #include // sqrt, fabs +#include // double max #include "DataSet_1D.h" #include "Corr.h" #include "CpptrajStdio.h" #include "Constants.h" // DEGRAD, RADDEG +#include "CpptrajFile.h" // Regression output /** Calculate the average over values in this set (and optionally the * standard deviation). @@ -330,3 +332,106 @@ int DataSet_1D::LinearRegression( double& slope, double& intercept, } return 0; } + +// ----- Integration routines -------------------------------------------------- +/* Just integration */ +double DataSet_1D::Integrate(IntegrationType itype) const { + double sum = 0.0; + if (Size() < 2) return 0; + if (itype == TRAPEZOID) { + for (unsigned int i = 1; i != Size(); i++) { + double b_minus_a = Xcrd(i) - Xcrd(i-1); + sum += (b_minus_a * (Dval(i-1) + Dval(i)) * 0.5); + } + } + return sum; +} + +/** Integration with cumulative sum. */ +double DataSet_1D::Integrate(IntegrationType itype, Darray& xOut, Darray& sumOut) const { + xOut.clear(); + sumOut.clear(); + double sum = 0.0; + if (Size() < 2) return 0; + xOut.reserve( Size() ); + xOut.push_back( Xcrd(0) ); + sumOut.reserve( Size() ); + sumOut.push_back( 0 ); + if (itype == TRAPEZOID) { + for (unsigned int i = 1; i != Size(); i++) { + xOut.push_back( Xcrd(i) ); + double b_minus_a = Xcrd(i) - Xcrd(i-1); + sum += (b_minus_a * (Dval(i-1) + Dval(i)) * 0.5); + sumOut.push_back( sum ); + } + } + return sum; +} + +// ----- Finite difference routines -------------------------------------------- +int DataSet_1D::FiniteDifference(DiffType dtype, Darray& xOut, Darray& diffOut) const { + int err = 0; + xOut.clear(); + xOut.reserve( Size() ); + diffOut.clear(); + diffOut.reserve( Size() ); + switch (dtype) { + case FORWARD : err = ForwardDifference(xOut, diffOut); break; + case BACKWARD : err = BackwardDifference(xOut, diffOut); break; + case CENTRAL : err = CentralDifference(xOut, diffOut); break; + } + if (err != 0) { + mprinterr("Error: Infinite slope detected when calculating finite difference of '%s'\n", + legend()); + } + return err; +} + +int DataSet_1D::ForwardDifference(Darray& xOut, Darray& diffOut) const { + int err = 0; + for (unsigned int i = 1; i < Size(); i++) { + xOut.push_back( Xcrd(i-1) ); + double xdiff = Xcrd(i-1) - Xcrd(i); + if (xdiff == 0) { + err = 1; + diffOut.push_back( - std::numeric_limits::max() ); + } else { + diffOut.push_back( (Dval(i-1) - Dval(i)) / xdiff ); + } + } + return err; +} + +int DataSet_1D::BackwardDifference(Darray& xOut, Darray& diffOut) const { + if (Size() == 0) return 0; + int err = 0; + for (unsigned int i = 0; i < Size()-1; i++) { + xOut.push_back( Xcrd(i) ); + double xdiff = Xcrd(i+1) - Xcrd(i); + if (xdiff == 0) { + err = 1; + diffOut.push_back( - std::numeric_limits::max() ); + } else { + diffOut.push_back( (Dval(i+1) - Dval(i)) / xdiff ); + } + } + return err; +} + +int DataSet_1D::CentralDifference(Darray& xOut, Darray& diffOut) const { + if (Size() == 0) return 0; + int err = 0; + for (unsigned int i = 1; i < Size()-1; i++) { + xOut.push_back( Xcrd(i) ); + double xdiff1 = Xcrd(i ) - Xcrd(i-1); + double xdiff2 = Xcrd(i+1) - Xcrd(i ); + double xdiff = xdiff1 + xdiff2; + if (xdiff == 0) { + err = 1; + diffOut.push_back( - std::numeric_limits::max() ); + } else { + diffOut.push_back( (Dval(i+1) - Dval(i-1)) / xdiff ); + } + } + return err; +} diff --git a/src/DataSet_1D.h b/src/DataSet_1D.h index b4f9ff60dc..e7f2ec9d7c 100644 --- a/src/DataSet_1D.h +++ b/src/DataSet_1D.h @@ -1,10 +1,13 @@ #ifndef INC_DATASET_1D_H #define INC_DATASET_1D_H #include "DataSet.h" -#include "CpptrajFile.h" +// Forward declarations +class CpptrajFile; /// Class that all 1D scalar DataSets will inherit. class DataSet_1D : public DataSet { public: + typedef std::vector Darray; + DataSet_1D() {} DataSet_1D(DataSet::DataType tIn, TextFormat const& fIn) : DataSet(tIn, SCALAR_1D, fIn, 1) {} virtual ~DataSet_1D() {} @@ -16,15 +19,34 @@ class DataSet_1D : public DataSet { /// \return Memory address at position cast to void *. virtual const void* VoidPtr(size_t) const = 0; // ------------------------------------------- + /// \return Average over set Y values double Avg() const { return Avg( 0 ); } + /// \return Average over set Y values; calculate standard deviation. double Avg(double& sd) const { return Avg(&sd); } + /// \return Set minimum Y value. double Min() const; + /// \return Set maximum Y value. double Max() const; + /// Calculate cross-correlation to another set. int CrossCorr(DataSet_1D const&, DataSet_1D&, int, bool, bool) const; + /// Calculate auto-correlation double CorrCoeff(DataSet_1D const&) const; /// Calculate linear regression; report slope, intercept, and correlation. int LinearRegression(double&, double&, double&, CpptrajFile*) const; + /// Integration types. + enum IntegrationType { TRAPEZOID = 0 }; + /// \return sum of integration over DataSet. + double Integrate(IntegrationType) const; + /// \return sum of integration over DataSet; compute cumulative sum. + double Integrate(IntegrationType, Darray&, Darray&) const; + /// Finite difference types. + enum DiffType { FORWARD = 0, BACKWARD, CENTRAL }; + /// Calculate finite difference + int FiniteDifference(DiffType, Darray&, Darray&) const; private: double Avg(double*) const; + int ForwardDifference(Darray&, Darray&) const; + int BackwardDifference(Darray&, Darray&) const; + int CentralDifference(Darray&, Darray&) const; }; #endif diff --git a/src/DataSet_Mesh.cpp b/src/DataSet_Mesh.cpp index 388062ea0b..28494a59f5 100644 --- a/src/DataSet_Mesh.cpp +++ b/src/DataSet_Mesh.cpp @@ -119,36 +119,6 @@ int DataSet_Mesh::SetMeshXY(DataSet_1D const& dsIn) { return 0; } -// ---------- Integration routines --------------------------------------------- -// DataSet_Mesh::Integrate_Trapezoid() -double DataSet_Mesh::Integrate_Trapezoid( DataSet_Mesh& sumOut ) const { - double sum = 0.0; - int mesh_size = (int)mesh_x_.size(); - if (mesh_size < 2) return 0.0; - // Give output data set the same X mesh - sumOut.mesh_x_ = mesh_x_; - sumOut.mesh_y_.resize( mesh_x_.size() ); - sumOut.mesh_y_[0] = 0.0; - for (int i = 1; i < mesh_size; i++) { - double b_minus_a = (mesh_x_[i] - mesh_x_[i - 1]); - sum += (b_minus_a * (mesh_y_[i - 1] + mesh_y_[i]) * 0.5); - sumOut.mesh_y_[i] = sum; - } - return sum; -} - -// DataSet_Mesh::Integrate_Trapezoid() -double DataSet_Mesh::Integrate_Trapezoid() const { - double sum = 0.0; - int mesh_size = (int)mesh_x_.size(); - if (mesh_size < 2) return 0.0; - for (int i = 1; i < mesh_size; i++) { - double b_minus_a = (mesh_x_[i] - mesh_x_[i - 1]); - sum += (b_minus_a * (mesh_y_[i - 1] + mesh_y_[i]) * 0.5); - } - return sum; -} - // ---------- Cubic Spline Routines -------------------------------------------- // DataSet_Mesh::SetSplinedMeshY() /** Assumes mesh X values already set with CalculateMeshX. */ diff --git a/src/DataSet_Mesh.h b/src/DataSet_Mesh.h index 814b4d732e..ce94ec4fef 100644 --- a/src/DataSet_Mesh.h +++ b/src/DataSet_Mesh.h @@ -6,6 +6,8 @@ /// Hold a mesh of X-Y values class DataSet_Mesh : public DataSet_1D { public: + typedef std::vector Darray; + DataSet_Mesh() : DataSet_1D(XYMESH, TextFormat(TextFormat::DOUBLE, 12, 4)) {} /// Construct mesh with preset X values DataSet_Mesh(int,double,double); @@ -35,26 +37,25 @@ class DataSet_Mesh : public DataSet_1D { void SetY(int i, double y) { mesh_y_[i] = y; } /// Calculate mesh X values given size, start, and end values. void CalculateMeshX(int,double,double); + /// Allow direct access to Y values. + Darray& SetMeshY() { return mesh_y_; } + /// Allow direct access to X values. + Darray& SetMeshX() { return mesh_x_; } /// Set mesh X and Y values from input data set. int SetMeshXY(DataSet_1D const&); // TODO remove /// Set mesh X and Y values from input arrays. - inline int SetMeshXY(std::vector const&, std::vector const&); // TODO remove - // ------------------------------------------- - /// Integrate the mesh, compute cumulative sum - double Integrate_Trapezoid( DataSet_Mesh& ) const; - /// Integrate the mesh - double Integrate_Trapezoid() const; + inline int SetMeshXY(Darray const&, Darray const&); // TODO remove // ------------------------------------------- /// Set mesh with splined values based on input X and Y values. - int SetSplinedMeshY(std::vector const&, std::vector const&); + int SetSplinedMeshY(Darray const&, Darray const&); /// Set mesh with splined values based on input DataSet. int SetSplinedMesh(DataSet_1D const&); // ------------------------------------------- /// Calculate single exponential regression via log and linear regression. int SingleExpRegression(double&, double&, double&, CpptrajFile*); private: - std::vector mesh_x_; - std::vector mesh_y_; + Darray mesh_x_; + Darray mesh_y_; Spline cspline_; ///< Cubic spline coefficients. TODO Split out completely? }; // ----- INLINE FUNCTIONS ------------------------------------------------------ @@ -62,7 +63,8 @@ void DataSet_Mesh::AddXY(double x, double y) { mesh_x_.push_back( x ); mesh_y_.push_back( y ); } -int DataSet_Mesh::SetMeshXY(std::vector const& X, std::vector const& Y) { + +int DataSet_Mesh::SetMeshXY(Darray const& X, Darray const& Y) { if (mesh_x_.size() != mesh_y_.size()) return 1; mesh_x_ = X; mesh_y_ = Y; diff --git a/src/Version.h b/src/Version.h index e1fe5b0f14..dbdde7d237 100644 --- a/src/Version.h +++ b/src/Version.h @@ -12,7 +12,7 @@ * Whenever a number that precedes is incremented, all subsequent * numbers should be reset to 0. */ -#define CPPTRAJ_INTERNAL_VERSION "V4.19.0" +#define CPPTRAJ_INTERNAL_VERSION "V4.19.1" /// PYTRAJ relies on this #define CPPTRAJ_VERSION_STRING CPPTRAJ_INTERNAL_VERSION #endif diff --git a/src/cpptrajdepend b/src/cpptrajdepend index cce298300f..83f099c656 100644 --- a/src/cpptrajdepend +++ b/src/cpptrajdepend @@ -82,7 +82,7 @@ Action_Translate.o : Action_Translate.cpp Action.h ActionState.h Action_Translat Action_Unstrip.o : Action_Unstrip.cpp Action.h ActionState.h Action_Unstrip.h ArgList.h AssociatedData.h Atom.h AtomExtra.h AtomMask.h BaseIOtype.h Box.h CharMask.h CoordinateInfo.h CpptrajFile.h CpptrajStdio.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h FileIO.h FileName.h FileTypes.h Frame.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h Residue.h SymbolExporting.h TextFormat.h Timer.h Topology.h Vec3.h Action_Unwrap.o : Action_Unwrap.cpp Action.h ActionState.h Action_Unwrap.h ArgList.h AssociatedData.h Atom.h AtomExtra.h AtomMask.h BaseIOtype.h Box.h CharMask.h CoordinateInfo.h CpptrajFile.h CpptrajStdio.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h FileIO.h FileName.h FileTypes.h Frame.h ImageRoutines.h ImageTypes.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h Residue.h SymbolExporting.h TextFormat.h Timer.h Topology.h Vec3.h Action_Vector.o : Action_Vector.cpp Action.h ActionState.h Action_Vector.h ArgList.h ArrayIterator.h AssociatedData.h Atom.h AtomExtra.h AtomMask.h BaseIOtype.h Box.h CharMask.h ComplexArray.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajStdio.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_1D.h DataSet_Coords.h DataSet_Coords_REF.h DataSet_Vector.h Dimension.h DispatchObject.h DistRoutines.h FileIO.h FileName.h FileTypes.h Frame.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h Residue.h SymbolExporting.h TextFormat.h Timer.h Topology.h Vec3.h -Action_VelocityAutoCorr.o : Action_VelocityAutoCorr.cpp Action.h ActionState.h Action_VelocityAutoCorr.h ArgList.h ArrayIterator.h AssociatedData.h Atom.h AtomExtra.h AtomMask.h BaseIOtype.h Box.h CharMask.h ComplexArray.h Constants.h CoordinateInfo.h Corr.h CpptrajFile.h CpptrajStdio.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_1D.h DataSet_Coords.h DataSet_Coords_REF.h DataSet_Mesh.h DataSet_Vector.h DataSet_double.h Dimension.h DispatchObject.h FileIO.h FileName.h FileTypes.h Frame.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterTypes.h ProgressBar.h PubFFT.h Range.h ReferenceFrame.h ReplicaDimArray.h Residue.h Spline.h SymbolExporting.h TextFormat.h Timer.h Topology.h Vec3.h +Action_VelocityAutoCorr.o : Action_VelocityAutoCorr.cpp Action.h ActionState.h Action_VelocityAutoCorr.h ArgList.h ArrayIterator.h AssociatedData.h Atom.h AtomExtra.h AtomMask.h BaseIOtype.h Box.h CharMask.h ComplexArray.h Constants.h CoordinateInfo.h Corr.h CpptrajFile.h CpptrajStdio.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_1D.h DataSet_Coords.h DataSet_Coords_REF.h DataSet_Vector.h DataSet_double.h Dimension.h DispatchObject.h FileIO.h FileName.h FileTypes.h Frame.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterTypes.h ProgressBar.h PubFFT.h Range.h ReferenceFrame.h ReplicaDimArray.h Residue.h SymbolExporting.h TextFormat.h Timer.h Topology.h Vec3.h Action_Volmap.o : Action_Volmap.cpp Action.h ActionState.h Action_Volmap.h ArgList.h ArrayIterator.h AssociatedData.h Atom.h AtomExtra.h AtomMask.h BaseIOtype.h Box.h CharMask.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajStdio.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_3D.h DataSet_Coords.h DataSet_Coords_REF.h DataSet_GridFlt.h Dimension.h DispatchObject.h FileIO.h FileName.h FileTypes.h Frame.h Grid.h GridBin.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h Residue.h SymbolExporting.h TextFormat.h Timer.h Topology.h Vec3.h Action_Volume.o : Action_Volume.cpp Action.h ActionState.h Action_Volume.h ArgList.h AssociatedData.h Atom.h AtomExtra.h AtomMask.h BaseIOtype.h Box.h CharMask.h CoordinateInfo.h CpptrajFile.h CpptrajStdio.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_1D.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h FileIO.h FileName.h FileTypes.h Frame.h ImagedAction.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h Residue.h SymbolExporting.h TextFormat.h Timer.h Topology.h Vec3.h Action_Watershell.o : Action_Watershell.cpp Action.h ActionState.h Action_Watershell.h ArgList.h AssociatedData.h Atom.h AtomExtra.h AtomMask.h BaseIOtype.h Box.h CharMask.h CoordinateInfo.h CpptrajFile.h CpptrajStdio.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h DistRoutines.h FileIO.h FileName.h FileTypes.h Frame.h ImageRoutines.h ImageTypes.h ImagedAction.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h Residue.h SymbolExporting.h TextFormat.h Timer.h Topology.h Vec3.h @@ -120,6 +120,7 @@ Analysis_Rms2d.o : Analysis_Rms2d.cpp ActionState.h Analysis.h AnalysisState.h A Analysis_RmsAvgCorr.o : Analysis_RmsAvgCorr.cpp ActionState.h Analysis.h AnalysisState.h Analysis_RmsAvgCorr.h ArgList.h AssociatedData.h Atom.h AtomExtra.h AtomMask.h BaseIOtype.h Box.h CharMask.h CoordinateInfo.h CpptrajFile.h CpptrajStdio.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h FileIO.h FileName.h FileTypes.h Frame.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterTypes.h ProgressBar.h Range.h ReferenceFrame.h ReplicaDimArray.h Residue.h SymbolExporting.h TextFormat.h Timer.h Topology.h Vec3.h Analysis_Rotdif.o : Analysis_Rotdif.cpp ActionState.h Analysis.h AnalysisState.h Analysis_Rotdif.h ArgList.h ArrayIterator.h AssociatedData.h Atom.h AtomExtra.h AtomMask.h BaseIOtype.h Box.h CharMask.h ComplexArray.h Constants.h CoordinateInfo.h Corr.h CpptrajFile.h CpptrajStdio.h CurveFit.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_1D.h DataSet_Coords.h DataSet_Coords_REF.h DataSet_Mat3x3.h DataSet_Mesh.h DataSet_Vector.h Dimension.h DispatchObject.h FileIO.h FileName.h FileTypes.h Frame.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterTypes.h ProgressBar.h PubFFT.h Random.h Range.h ReferenceFrame.h ReplicaDimArray.h Residue.h SimplexMin.h Spline.h StringRoutines.h SymbolExporting.h TextFormat.h Timer.h Topology.h Vec3.h Analysis_RunningAvg.o : Analysis_RunningAvg.cpp ActionState.h Analysis.h AnalysisState.h Analysis_RunningAvg.h ArgList.h Array1D.h AssociatedData.h Atom.h AtomExtra.h AtomMask.h BaseIOtype.h Box.h CharMask.h CoordinateInfo.h CpptrajFile.h CpptrajStdio.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_1D.h DataSet_Coords.h DataSet_Coords_REF.h DataSet_Mesh.h Dimension.h DispatchObject.h FileIO.h FileName.h FileTypes.h Frame.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h Residue.h Spline.h SymbolExporting.h TextFormat.h Timer.h Topology.h Vec3.h +Analysis_Slope.o : Analysis_Slope.cpp ActionState.h Analysis.h AnalysisState.h Analysis_Slope.h ArgList.h Array1D.h AssociatedData.h Atom.h AtomExtra.h AtomMask.h BaseIOtype.h Box.h CharMask.h CoordinateInfo.h CpptrajFile.h CpptrajStdio.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_1D.h DataSet_Coords.h DataSet_Coords_REF.h DataSet_Mesh.h Dimension.h DispatchObject.h FileIO.h FileName.h FileTypes.h Frame.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h Residue.h Spline.h SymbolExporting.h TextFormat.h Timer.h Topology.h Vec3.h Analysis_Spline.o : Analysis_Spline.cpp ActionState.h Analysis.h AnalysisState.h Analysis_Spline.h ArgList.h Array1D.h AssociatedData.h Atom.h AtomExtra.h AtomMask.h BaseIOtype.h Box.h CharMask.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajStdio.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_1D.h DataSet_Coords.h DataSet_Coords_REF.h DataSet_Mesh.h Dimension.h DispatchObject.h FileIO.h FileName.h FileTypes.h Frame.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h Residue.h Spline.h SymbolExporting.h TextFormat.h Timer.h Topology.h Vec3.h Analysis_State.o : Analysis_State.cpp ActionState.h Analysis.h AnalysisState.h Analysis_State.h ArgList.h Array1D.h AssociatedData.h Atom.h AtomExtra.h AtomMask.h BaseIOtype.h Box.h CharMask.h CoordinateInfo.h CpptrajFile.h CpptrajStdio.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_1D.h DataSet_Coords.h DataSet_Coords_REF.h DataSet_double.h Dimension.h DispatchObject.h FileIO.h FileName.h FileTypes.h Frame.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h Residue.h SymbolExporting.h TextFormat.h Timer.h Topology.h Vec3.h Analysis_Statistics.o : Analysis_Statistics.cpp ActionState.h Analysis.h AnalysisState.h Analysis_Statistics.h ArgList.h Array1D.h AssociatedData.h Atom.h AtomExtra.h AtomMask.h BaseIOtype.h Box.h CharMask.h CoordinateInfo.h CpptrajFile.h CpptrajStdio.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_1D.h DataSet_Coords.h DataSet_Coords_REF.h DataSet_float.h DataSet_integer.h DataSet_string.h Dimension.h DispatchObject.h FileIO.h FileName.h FileTypes.h Frame.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h Residue.h SymbolExporting.h TextFormat.h Timer.h Topology.h Vec3.h @@ -157,7 +158,7 @@ Cluster_ReadInfo.o : Cluster_ReadInfo.cpp ArgList.h ArrayIterator.h AssociatedDa Cmd.o : Cmd.cpp Cmd.h DispatchObject.h CmdInput.o : CmdInput.cpp CmdInput.h StringRoutines.h CmdList.o : CmdList.cpp Cmd.h CmdList.h DispatchObject.h -Command.o : Command.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Action_Align.h Action_Angle.h Action_AreaPerMol.h Action_AtomMap.h Action_AtomicCorr.h Action_AtomicFluct.h Action_AutoImage.h Action_Average.h Action_Bounds.h Action_Box.h Action_Center.h Action_Channel.h Action_CheckChirality.h Action_CheckStructure.h Action_Closest.h Action_ClusterDihedral.h Action_Contacts.h Action_CreateCrd.h Action_CreateReservoir.h Action_DNAionTracker.h Action_DSSP.h Action_Density.h Action_Diffusion.h Action_Dihedral.h Action_DihedralRMS.h Action_Dipole.h Action_DistRmsd.h Action_Distance.h Action_Energy.h Action_Esander.h Action_FilterByData.h Action_FixAtomOrder.h Action_FixImagedBonds.h Action_GIST.h Action_Grid.h Action_GridFreeEnergy.h Action_HydrogenBond.h Action_Image.h Action_InfraredSpectrum.h Action_Jcoupling.h Action_LESsplit.h Action_LIE.h Action_LipidOrder.h Action_MakeStructure.h Action_Mask.h Action_Matrix.h Action_MinImage.h Action_Molsurf.h Action_MultiDihedral.h Action_MultiVector.h Action_NAstruct.h Action_NMRrst.h Action_NativeContacts.h Action_OrderParameter.h Action_Outtraj.h Action_PairDist.h Action_Pairwise.h Action_Principal.h Action_Projection.h Action_Pucker.h Action_Radgyr.h Action_Radial.h Action_RandomizeIons.h Action_Remap.h Action_ReplicateCell.h Action_Rmsd.h Action_Rotate.h Action_RunningAvg.h Action_STFC_Diffusion.h Action_Scale.h Action_SetVelocity.h Action_Spam.h Action_Strip.h Action_Surf.h Action_SymmetricRmsd.h Action_Temperature.h Action_Time.h Action_Translate.h Action_Unstrip.h Action_Unwrap.h Action_Vector.h Action_VelocityAutoCorr.h Action_Volmap.h Action_Volume.h Action_Watershell.h Action_XtalSymm.h Analysis.h AnalysisList.h AnalysisState.h Analysis_AmdBias.h Analysis_AutoCorr.h Analysis_Average.h Analysis_Clustering.h Analysis_ConstantPHStats.h Analysis_Corr.h Analysis_CrankShaft.h Analysis_CrdFluct.h Analysis_CrossCorr.h Analysis_CurveFit.h Analysis_Divergence.h Analysis_FFT.h Analysis_HausdorffDistance.h Analysis_Hist.h Analysis_IRED.h Analysis_Integrate.h Analysis_KDE.h Analysis_Lifetime.h Analysis_LowestCurve.h Analysis_Matrix.h Analysis_MeltCurve.h Analysis_Modes.h Analysis_MultiHist.h Analysis_Multicurve.h Analysis_Overlap.h Analysis_PhiPsi.h Analysis_Regression.h Analysis_RemLog.h Analysis_Rms2d.h Analysis_RmsAvgCorr.h Analysis_Rotdif.h Analysis_RunningAvg.h Analysis_Spline.h Analysis_State.h Analysis_Statistics.h Analysis_TI.h Analysis_Timecorr.h Analysis_VectorMath.h Analysis_Wavelet.h ArgList.h Array1D.h ArrayIterator.h AssociatedData.h Atom.h AtomExtra.h AtomMap.h AtomMask.h AxisType.h BaseIOtype.h Box.h BufferedLine.h CharMask.h ClusterDist.h ClusterList.h ClusterMap.h ClusterNode.h ClusterSieve.h Cmd.h CmdInput.h CmdList.h Command.h ComplexArray.h Constraints.h Control.h CoordinateInfo.h Corr.h Cph.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_1D.h DataSet_2D.h DataSet_3D.h DataSet_Cmatrix.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h DataSet_GridFlt.h DataSet_Mat3x3.h DataSet_MatrixDbl.h DataSet_MatrixFlt.h DataSet_Mesh.h DataSet_Modes.h DataSet_RemLog.h DataSet_Vector.h DataSet_double.h DataSet_float.h DataSet_integer.h DataSet_integer_mem.h DataSet_pH.h DataSet_string.h Deprecated.h DihedralSearch.h Dimension.h DispatchObject.h DistRoutines.h Energy.h Energy_Sander.h EnsembleIn.h EnsembleOutList.h Ewald.h Exec.h Exec_Analyze.h Exec_Calc.h Exec_CatCrd.h Exec_Change.h Exec_ClusterMap.h Exec_CombineCoords.h Exec_Commands.h Exec_CompareTop.h Exec_CrdAction.h Exec_CrdOut.h Exec_CreateSet.h Exec_DataFile.h Exec_DataFilter.h Exec_DataSetCmd.h Exec_GenerateAmberRst.h Exec_Help.h Exec_LoadCrd.h Exec_LoadTraj.h Exec_ParallelAnalysis.h Exec_ParmBox.h Exec_ParmSolvent.h Exec_ParmStrip.h Exec_ParmWrite.h Exec_PermuteDihedrals.h Exec_Precision.h Exec_PrintData.h Exec_ReadData.h Exec_ReadEnsembleData.h Exec_ReadInput.h Exec_RotateDihedral.h Exec_RunAnalysis.h Exec_ScaleDihedralK.h Exec_SequenceAlign.h Exec_SortEnsembleData.h Exec_SplitCoords.h Exec_System.h Exec_Top.h Exec_Traj.h Exec_UpdateParameters.h Exec_ViewRst.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h Grid.h GridAction.h GridBin.h HistBin.h Hungarian.h ImageTypes.h ImagedAction.h InputTrajCommon.h MapAtom.h MaskArray.h MaskToken.h Matrix.h Matrix_3x3.h MetaData.h Molecule.h NameType.h NetcdfFile.h OnlineVarT.h OutputTrajCommon.h PDBfile.h PairList.h Parallel.h ParameterHolders.h ParameterTypes.h PubFFT.h RPNcalc.h Random.h Range.h ReferenceAction.h ReferenceFrame.h RemdReservoirNC.h ReplicaDimArray.h ReplicaInfo.h Residue.h Spline.h StructureCheck.h SymbolExporting.h SymmetricRmsdCalc.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h VariableArray.h Vec3.h molsurf.h +Command.o : Command.cpp Action.h ActionFrameCounter.h ActionList.h ActionState.h Action_Align.h Action_Angle.h Action_AreaPerMol.h Action_AtomMap.h Action_AtomicCorr.h Action_AtomicFluct.h Action_AutoImage.h Action_Average.h Action_Bounds.h Action_Box.h Action_Center.h Action_Channel.h Action_CheckChirality.h Action_CheckStructure.h Action_Closest.h Action_ClusterDihedral.h Action_Contacts.h Action_CreateCrd.h Action_CreateReservoir.h Action_DNAionTracker.h Action_DSSP.h Action_Density.h Action_Diffusion.h Action_Dihedral.h Action_DihedralRMS.h Action_Dipole.h Action_DistRmsd.h Action_Distance.h Action_Energy.h Action_Esander.h Action_FilterByData.h Action_FixAtomOrder.h Action_FixImagedBonds.h Action_GIST.h Action_Grid.h Action_GridFreeEnergy.h Action_HydrogenBond.h Action_Image.h Action_InfraredSpectrum.h Action_Jcoupling.h Action_LESsplit.h Action_LIE.h Action_LipidOrder.h Action_MakeStructure.h Action_Mask.h Action_Matrix.h Action_MinImage.h Action_Molsurf.h Action_MultiDihedral.h Action_MultiVector.h Action_NAstruct.h Action_NMRrst.h Action_NativeContacts.h Action_OrderParameter.h Action_Outtraj.h Action_PairDist.h Action_Pairwise.h Action_Principal.h Action_Projection.h Action_Pucker.h Action_Radgyr.h Action_Radial.h Action_RandomizeIons.h Action_Remap.h Action_ReplicateCell.h Action_Rmsd.h Action_Rotate.h Action_RunningAvg.h Action_STFC_Diffusion.h Action_Scale.h Action_SetVelocity.h Action_Spam.h Action_Strip.h Action_Surf.h Action_SymmetricRmsd.h Action_Temperature.h Action_Time.h Action_Translate.h Action_Unstrip.h Action_Unwrap.h Action_Vector.h Action_VelocityAutoCorr.h Action_Volmap.h Action_Volume.h Action_Watershell.h Action_XtalSymm.h Analysis.h AnalysisList.h AnalysisState.h Analysis_AmdBias.h Analysis_AutoCorr.h Analysis_Average.h Analysis_Clustering.h Analysis_ConstantPHStats.h Analysis_Corr.h Analysis_CrankShaft.h Analysis_CrdFluct.h Analysis_CrossCorr.h Analysis_CurveFit.h Analysis_Divergence.h Analysis_FFT.h Analysis_HausdorffDistance.h Analysis_Hist.h Analysis_IRED.h Analysis_Integrate.h Analysis_KDE.h Analysis_Lifetime.h Analysis_LowestCurve.h Analysis_Matrix.h Analysis_MeltCurve.h Analysis_Modes.h Analysis_MultiHist.h Analysis_Multicurve.h Analysis_Overlap.h Analysis_PhiPsi.h Analysis_Regression.h Analysis_RemLog.h Analysis_Rms2d.h Analysis_RmsAvgCorr.h Analysis_Rotdif.h Analysis_RunningAvg.h Analysis_Slope.h Analysis_Spline.h Analysis_State.h Analysis_Statistics.h Analysis_TI.h Analysis_Timecorr.h Analysis_VectorMath.h Analysis_Wavelet.h ArgList.h Array1D.h ArrayIterator.h AssociatedData.h Atom.h AtomExtra.h AtomMap.h AtomMask.h AxisType.h BaseIOtype.h Box.h BufferedLine.h CharMask.h ClusterDist.h ClusterList.h ClusterMap.h ClusterNode.h ClusterSieve.h Cmd.h CmdInput.h CmdList.h Command.h ComplexArray.h Constraints.h Control.h CoordinateInfo.h Corr.h Cph.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_1D.h DataSet_2D.h DataSet_3D.h DataSet_Cmatrix.h DataSet_Coords.h DataSet_Coords_CRD.h DataSet_Coords_REF.h DataSet_GridFlt.h DataSet_Mat3x3.h DataSet_MatrixDbl.h DataSet_MatrixFlt.h DataSet_Mesh.h DataSet_Modes.h DataSet_RemLog.h DataSet_Vector.h DataSet_double.h DataSet_float.h DataSet_integer.h DataSet_integer_mem.h DataSet_pH.h DataSet_string.h Deprecated.h DihedralSearch.h Dimension.h DispatchObject.h DistRoutines.h Energy.h Energy_Sander.h EnsembleIn.h EnsembleOutList.h Ewald.h Exec.h Exec_Analyze.h Exec_Calc.h Exec_CatCrd.h Exec_Change.h Exec_ClusterMap.h Exec_CombineCoords.h Exec_Commands.h Exec_CompareTop.h Exec_CrdAction.h Exec_CrdOut.h Exec_CreateSet.h Exec_DataFile.h Exec_DataFilter.h Exec_DataSetCmd.h Exec_GenerateAmberRst.h Exec_Help.h Exec_LoadCrd.h Exec_LoadTraj.h Exec_ParallelAnalysis.h Exec_ParmBox.h Exec_ParmSolvent.h Exec_ParmStrip.h Exec_ParmWrite.h Exec_PermuteDihedrals.h Exec_Precision.h Exec_PrintData.h Exec_ReadData.h Exec_ReadEnsembleData.h Exec_ReadInput.h Exec_RotateDihedral.h Exec_RunAnalysis.h Exec_ScaleDihedralK.h Exec_SequenceAlign.h Exec_SortEnsembleData.h Exec_SplitCoords.h Exec_System.h Exec_Top.h Exec_Traj.h Exec_UpdateParameters.h Exec_ViewRst.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h Grid.h GridAction.h GridBin.h HistBin.h Hungarian.h ImageTypes.h ImagedAction.h InputTrajCommon.h MapAtom.h MaskArray.h MaskToken.h Matrix.h Matrix_3x3.h MetaData.h Molecule.h NameType.h NetcdfFile.h OnlineVarT.h OutputTrajCommon.h PDBfile.h PairList.h Parallel.h ParameterHolders.h ParameterTypes.h PubFFT.h RPNcalc.h Random.h Range.h ReferenceAction.h ReferenceFrame.h RemdReservoirNC.h ReplicaDimArray.h ReplicaInfo.h Residue.h Spline.h StructureCheck.h SymbolExporting.h SymmetricRmsdCalc.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h TrajectoryFile.h Trajin.h TrajinList.h TrajoutList.h Trajout_Single.h VariableArray.h Vec3.h molsurf.h ComplexArray.o : ComplexArray.cpp ArrayIterator.h ComplexArray.h Constraints.o : Constraints.cpp ArgList.h Atom.h AtomExtra.h AtomMask.h Box.h CharMask.h Constants.h Constraints.h CoordinateInfo.h CpptrajStdio.h FileName.h Frame.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h SymbolExporting.h Topology.h Vec3.h Control.o : Control.cpp Action.h ActionList.h ActionState.h Analysis.h AnalysisList.h AnalysisState.h ArgList.h AssociatedData.h Atom.h AtomExtra.h AtomMask.h BaseIOtype.h Box.h CharMask.h Control.h CoordinateInfo.h CpptrajFile.h CpptrajState.h CpptrajStdio.h DataFile.h DataFileList.h DataIO.h DataSet.h DataSetList.h DataSet_Coords.h DataSet_Coords_REF.h Dimension.h DispatchObject.h EnsembleIn.h EnsembleOutList.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterTypes.h Range.h ReferenceFrame.h ReplicaDimArray.h ReplicaInfo.h Residue.h StringRoutines.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h Trajin.h TrajinList.h TrajoutList.h VariableArray.h Vec3.h diff --git a/src/cpptrajfiles b/src/cpptrajfiles index c02caaa64e..a29bf7dfe6 100644 --- a/src/cpptrajfiles +++ b/src/cpptrajfiles @@ -123,6 +123,7 @@ COMMON_SOURCES= \ Analysis_RmsAvgCorr.cpp \ Analysis_Rotdif.cpp \ Analysis_RunningAvg.cpp \ + Analysis_Slope.cpp \ Analysis_Spline.cpp \ Analysis_State.cpp \ Analysis_Statistics.cpp \ diff --git a/test/Makefile b/test/Makefile index 15062eae2d..7ffa07e9b1 100644 --- a/test/Makefile +++ b/test/Makefile @@ -456,6 +456,9 @@ test.splitcoords: test.dihedralrms: @-cd Test_DihedralRMS && ./RunTest.sh $(OPT) +test.slope: + @-cd Test_Slope && ./RunTest.sh $(OPT) + # Every test target should go here. COMPLETETESTS=test.general \ test.strip \ @@ -602,7 +605,8 @@ COMPLETETESTS=test.general \ test.xtalsymm \ test.time \ test.splitcoords \ - test.dihedralrms + test.dihedralrms \ + test.slope test.all: $(MAKE) test.complete summary diff --git a/test/Test_Integrate/RunTest.sh b/test/Test_Integrate/RunTest.sh index 0deb611173..29fb19da91 100755 --- a/test/Test_Integrate/RunTest.sh +++ b/test/Test_Integrate/RunTest.sh @@ -2,16 +2,18 @@ . ../MasterTest.sh -CleanFiles curve.in curve.dat +CleanFiles curve.in curve.dat int.dat INPUT="-i curve.in" cat > curve.in < curve.in <