mirror of
				https://github.com/aportelli/LatAnalyze.git
				synced 2025-11-02 23:34:32 +00:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			c3cf22532e
			...
			6fbb0f70ef
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 6fbb0f70ef | |||
| f4dff86ce6 | 
@@ -206,6 +206,42 @@ PlotData::PlotData(const XYStatData &data, const Index i, const Index j, const b
 | 
				
			|||||||
    setCommand("'" + tmpFileName + "' " + usingCmd);
 | 
					    setCommand("'" + tmpFileName + "' " + usingCmd);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PlotData::PlotData(const XYStatData & data, XYStatData::CoordFilter f, Index i, const Index j, const bool abs)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    string usingCmd, tmpFileName;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if (!abs)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        usingCmd = (data.isXExact(i)) ? "u 1:3:4 w yerr" : "u 1:3:2:4 w xyerr";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        usingCmd = (data.isXExact(i)) ? "u 1:(abs($3)):4 w yerr" : "u 1:(abs($3)):2:4 w xyerr";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					    tmpFileName = dumpToTmpFile(data.getTable(i, j, f));
 | 
				
			||||||
 | 
					    pushTmpFile(tmpFileName);
 | 
				
			||||||
 | 
					    setCommand("'" + tmpFileName + "' " + usingCmd);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PlotData::PlotData(const XYStatData & data, XYStatData::PointFilter f, Index i, const Index j, const bool abs)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    string usingCmd, tmpFileName;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if (!abs)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        usingCmd = (data.isXExact(i)) ? "u 1:3:4 w yerr" : "u 1:3:2:4 w xyerr";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        usingCmd = (data.isXExact(i)) ? "u 1:(abs($3)):4 w yerr" : "u 1:(abs($3)):2:4 w xyerr";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					    tmpFileName = dumpToTmpFile(data.getTable(i, j, f));
 | 
				
			||||||
 | 
					    pushTmpFile(tmpFileName);
 | 
				
			||||||
 | 
					    setCommand("'" + tmpFileName + "' " + usingCmd);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PlotPoint constructor ///////////////////////////////////////////////////////
 | 
					// PlotPoint constructor ///////////////////////////////////////////////////////
 | 
				
			||||||
PlotPoint::PlotPoint(const double x, const double y)
 | 
					PlotPoint::PlotPoint(const double x, const double y)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -775,7 +811,7 @@ void Plot::display(void)
 | 
				
			|||||||
        ostringstream scriptBuf;
 | 
					        ostringstream scriptBuf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        getProgramPath();
 | 
					        getProgramPath();
 | 
				
			||||||
        command     = gnuplotPath_ + "/" + gnuplotBin_ + " 2>/dev/null";
 | 
					        command     = gnuplotPath_ + "/" + gnuplotBin_;
 | 
				
			||||||
        gnuplotPipe = popen(command.c_str(), "w");
 | 
					        gnuplotPipe = popen(command.c_str(), "w");
 | 
				
			||||||
        if (!gnuplotPipe)
 | 
					        if (!gnuplotPipe)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -94,6 +94,10 @@ public:
 | 
				
			|||||||
    PlotData(const DMatSample &x, const DVec       &y, const bool abs = false);
 | 
					    PlotData(const DMatSample &x, const DVec       &y, const bool abs = false);
 | 
				
			||||||
    PlotData(const XYStatData &data, const Index i = 0, const Index j = 0, 
 | 
					    PlotData(const XYStatData &data, const Index i = 0, const Index j = 0, 
 | 
				
			||||||
             const bool abs = false);
 | 
					             const bool abs = false);
 | 
				
			||||||
 | 
					    PlotData(const XYStatData &data, XYStatData::CoordFilter f, Index i = 0, 
 | 
				
			||||||
 | 
					             const Index j = 0, const bool abs = false);
 | 
				
			||||||
 | 
					    PlotData(const XYStatData &data, XYStatData::PointFilter f, Index i = 0, 
 | 
				
			||||||
 | 
					             const Index j = 0, const bool abs = false);
 | 
				
			||||||
    // destructor
 | 
					    // destructor
 | 
				
			||||||
    virtual ~PlotData(void) = default;
 | 
					    virtual ~PlotData(void) = default;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -184,7 +184,7 @@ void XYStatData::setXError(const Index i, const DVec &err)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void XYStatData::setYError(const Index j, const DVec &err)
 | 
					void XYStatData::setYError(const Index j, const DVec &err)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    checkXDim(j);
 | 
					    checkYDim(j);
 | 
				
			||||||
    checkErrVec(err, yyVar_(j, j));
 | 
					    checkErrVec(err, yyVar_(j, j));
 | 
				
			||||||
    yyVar_(j, j).diagonal() = err.cwiseProduct(err);
 | 
					    yyVar_(j, j).diagonal() = err.cwiseProduct(err);
 | 
				
			||||||
    scheduleFitVarMatInit();
 | 
					    scheduleFitVarMatInit();
 | 
				
			||||||
@@ -251,6 +251,62 @@ DMat XYStatData::getTable(const Index i, const Index j) const
 | 
				
			|||||||
    return table;
 | 
					    return table;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DMat XYStatData::getTable(const Index i, const Index j, CoordFilter &coordFilter) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    checkXDim(i);
 | 
				
			||||||
 | 
					    checkYDim(j);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    DMat  table(getYSize(j), 4);
 | 
				
			||||||
 | 
					    Index row = 0;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    for (auto &p: yData_[j])
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Index k = p.first;
 | 
				
			||||||
 | 
					        auto  c = dataCoord(k);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        if (coordFilter(c))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Index r = c[i];
 | 
				
			||||||
 | 
					            table(row, 0) = x(k)(i);
 | 
				
			||||||
 | 
					            table(row, 2) = p.second;
 | 
				
			||||||
 | 
					            table(row, 1) = xxVar_(i, i).diagonal().cwiseSqrt()(r);
 | 
				
			||||||
 | 
					            table(row, 3) = yyVar_(j, j).diagonal().cwiseSqrt()(row);
 | 
				
			||||||
 | 
					            row++;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    table.conservativeResize(row, 4);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return table;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DMat XYStatData::getTable(const Index i, const Index j, PointFilter &ptFilter) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    checkXDim(i);
 | 
				
			||||||
 | 
					    checkYDim(j);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    DMat  table(getYSize(j), 4);
 | 
				
			||||||
 | 
					    Index row = 0;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    for (auto &p: yData_[j])
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Index k = p.first;
 | 
				
			||||||
 | 
					        auto  c = dataCoord(k);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        if (ptFilter(x(k)))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Index r = c[i];
 | 
				
			||||||
 | 
					            table(row, 0) = x(k)(i);
 | 
				
			||||||
 | 
					            table(row, 2) = p.second;
 | 
				
			||||||
 | 
					            table(row, 1) = xxVar_(i, i).diagonal().cwiseSqrt()(r);
 | 
				
			||||||
 | 
					            table(row, 3) = yyVar_(j, j).diagonal().cwiseSqrt()(row);
 | 
				
			||||||
 | 
					            row++;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    table.conservativeResize(row, 4);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return table;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// get total fit variance matrix ///////////////////////////////////////////////
 | 
					// get total fit variance matrix ///////////////////////////////////////////////
 | 
				
			||||||
const DMat & XYStatData::getFitVarMat(void)
 | 
					const DMat & XYStatData::getFitVarMat(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -65,6 +65,9 @@ private:
 | 
				
			|||||||
 ******************************************************************************/
 | 
					 ******************************************************************************/
 | 
				
			||||||
class XYStatData: public FitInterface
 | 
					class XYStatData: public FitInterface
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    typedef std::function<bool(const std::vector<Index> &)> CoordFilter;
 | 
				
			||||||
 | 
					    typedef std::function<bool(const DVec &)> PointFilter;
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    // constructor
 | 
					    // constructor
 | 
				
			||||||
    XYStatData(void) = default;
 | 
					    XYStatData(void) = default;
 | 
				
			||||||
@@ -89,6 +92,8 @@ public:
 | 
				
			|||||||
    DVec           getXError(const Index i) const;
 | 
					    DVec           getXError(const Index i) const;
 | 
				
			||||||
    DVec           getYError(const Index j) const;
 | 
					    DVec           getYError(const Index j) const;
 | 
				
			||||||
    DMat           getTable(const Index i, const Index j) const;
 | 
					    DMat           getTable(const Index i, const Index j) const;
 | 
				
			||||||
 | 
					    DMat           getTable(const Index i, const Index j, CoordFilter &coordFilter) const;
 | 
				
			||||||
 | 
					    DMat           getTable(const Index i, const Index j, PointFilter &ptFilter) const;
 | 
				
			||||||
    // get total fit variance & correlation matrices and their pseudo-inverse
 | 
					    // get total fit variance & correlation matrices and their pseudo-inverse
 | 
				
			||||||
    const DMat & getFitVarMat(void);
 | 
					    const DMat & getFitVarMat(void);
 | 
				
			||||||
    const DMat & getFitVarMatPInv(void);
 | 
					    const DMat & getFitVarMatPInv(void);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user