Changed implementation of WeightedRips to store simplex values (max distance between simplices' vertices) as an invisible layer on top of each simplex object, so that the data() field of WeightedRips has been freed for use by the users again.
/*
* Author: Dmitriy Morozov
* Department of Computer Science, Duke University, 2005 -- 2006
*
* Depends on Daniel Russel's "simple C++ PDB" (aka DSR-PDB).
*/
#ifndef __PDBDISTANCE_H__
#define __PDBDISTANCE_H__
#include <fstream>
#include <string>
#include <dsrpdb/Protein.h>
#include <dsrpdb/iterator.h>
#include <cmath>
#include <boost/serialization/access.hpp>
#include "utilities/types.h"
#include "grid2D.h"
#include <boost/serialization/export.hpp>
class PDBDistanceGrid: public Grid2D
{
public:
PDBDistanceGrid()
{}
PDBDistanceGrid(std::istream& in, bool ca_only = true)
{
load_stream(in, ca_only);
}
void load_stream(std::istream& in, bool ca_only = true)
{
dsrpdb::Protein p(in);
typedef std::vector<dsrpdb::Point> PointVector;
PointVector coordinates;
if (ca_only)
{
PointVector v(ca_coordinates_begin(p), ca_coordinates_end(p));
coordinates.swap(v);
}
else
{
PointVector v(backbone_coordinates_begin(p), backbone_coordinates_end(p));
coordinates.swap(v);
}
std::cout << "Coordinatess created, size: " << coordinates.size() << std::endl;
Grid2D::change_dimensions(coordinates.size(), coordinates.size());
for (Grid2D::CoordinateIndex i = 0; i < coordinates.size(); ++i)
for (Grid2D::CoordinateIndex j = 0; j < coordinates.size(); ++j)
{
if (i < j)
Grid2D::operator()(i,j) = distance(coordinates[i], coordinates[j]);
else
Grid2D::operator()(i,j) = 0;
}
}
private:
Grid2D::ValueType distance(dsrpdb::Point p1, dsrpdb::Point p2) const
{
dsrpdb::Vector v = p1 - p2;
return std::sqrt(v*v);
}
#if 0
private:
// Serialization
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive& ar, version_type version)
{
ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Grid2D);
}
#endif
};
//BOOST_CLASS_EXPORT(PDBDistanceGrid)
#endif // __PDBDISTANCE_H__