1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
// -*- Mode: C++; tab-width: 2; -*-
// vi: set ts=2:
//
#include <BALL/DOCKING/COMMON/conformationSet.h>
#include <BALL/KERNEL/atomContainer.h>
#include <BALL/FORMAT/DCDFile.h>
#include <BALL/MOLMEC/COMMON/snapShotManager.h>
#include <BALL/MOLMEC/COMMON/forceField.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
namespace BALL
{
ConformationSet::ConformationSet(const ConformationSet& cs)
: snapshot_order_(cs.snapshot_order_),
system_(cs.system_),
structures_(cs.structures_),
parent_(cs.parent_)
{
}
ConformationSet::ConformationSet(const System& system)
: system_(system),
parent_(NULL)
{
}
void ConformationSet::setup(const System& system)
{
system_ = system;
parent_ = NULL;
}
void ConformationSet::add(const float score, const System& conformation)
{
SnapShot sn;
sn.takeSnapShot(conformation);
structures_.push_back(sn);
Conformation c(snapshot_order_.size(), score);
snapshot_order_.push_back(c);
}
const System& ConformationSet::getSystem() const
{
return system_;
}
System& ConformationSet::getSystem()
{
return system_;
}
const std::vector < ConformationSet::Conformation > & ConformationSet::getScoring() const
{
return snapshot_order_;
}
void ConformationSet::setScoring(std::vector < Conformation > & score)
{
snapshot_order_ = score;
}
void ConformationSet::resetScoring()
{
snapshot_order_.resize(structures_.size());
for (Size i = 0; i < snapshot_order_.size(); i++)
{
snapshot_order_[i].first = i;
snapshot_order_[i].second = 0.0;
}
}
const std::vector < SnapShot > & ConformationSet::getUnscoredConformations() const
{
return structures_;
}
const SnapShot& ConformationSet::operator [] (const Index pos) const
{
return structures_[snapshot_order_[pos].first];
}
bool ConformationSet::writeDCDFile(const String& filename, const Size num)
{
try
{
ForceField ff(system_);
DCDFile dcd(filename, std::ios::out);
SnapShotManager ssm(&system_, &ff, &dcd);
Size min = ((num < snapshot_order_.size()) && (num != 0)) ? num : snapshot_order_.size();
for (Size i = 0; i < min; i++)
{
structures_[snapshot_order_[i].first].applySnapShot(system_);
ssm.takeSnapShot();
}
ssm.flushToDisk();
dcd.close();
}
catch(...)
{
return false;
}
return true;
}
bool ConformationSet::readDCDFile(const String& filename)
{
try
{
SnapShot snapshot;
vector<SnapShot> structures;
DCDFile file(filename, ios::in | ios::binary);
for (Size i = 0; i < file.getNumberOfSnapShots(); ++i)
{
file.read(snapshot);
structures.push_back(snapshot);
}
structures_ = structures;
}
catch(...)
{
return false;
}
return true;
}
Size ConformationSet::size() const
{
return snapshot_order_.size();
}
}
|