File: ProteinManager.cpp

package info (click to toggle)
ausaxs 1.1.8-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 72,592 kB
  • sloc: cpp: 49,853; ansic: 6,901; python: 730; makefile: 18
file content (49 lines) | stat: -rw-r--r-- 1,763 bytes parent folder | download
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
// SPDX-License-Identifier: LGPL-3.0-or-later
// Author: Kristian Lytje

#include <em/manager/ProteinManager.h>
#include <em/ImageStack.h>
#include <data/Molecule.h>
#include <utility/Axis.h>
#include <settings/EMSettings.h>
#include <settings/MoleculeSettings.h>

using namespace ausaxs;
using namespace ausaxs::em::managers;

ProteinManager::~ProteinManager() = default;

ProteinManager::ProteinManager(observer_ptr<const em::ImageStackBase> images) : images(images) {
    settings::molecule::center = false;                 // centering doesn't make sense for dummy structures
    settings::molecule::implicit_hydrogens = false;     // likewise we don't know how many hydrogens are attached
    double max = images->from_level(settings::em::alpha_levels.max);
    double min = images->from_level(settings::em::alpha_levels.min);
    Axis axis(min, max, settings::em::charge_levels);
    set_charge_levels(axis.as_vector());
}

double ProteinManager::get_volume_grid() const {
    auto protein = get_protein();
    assert(protein != nullptr && "ProteinManager::get_volume_grid: protein is null");
    return protein->get_volume_grid();
}

double ProteinManager::get_excluded_volume_mass() const {
    auto protein = get_protein();
    assert(protein != nullptr && "ProteinManager::get_excluded_volume_mass: protein is null");
    return protein->get_excluded_volume_mass();
}    

std::vector<double> ProteinManager::get_charge_levels() const noexcept {
    return charge_levels;
}

void ProteinManager::set_charge_levels(const std::vector<double>& levels) noexcept {
    auto tmp = levels;

    // make sure the last bin can contain all atoms
    if (std::abs(levels.back()) < 10000) {
        tmp.push_back(10000);
    } 
    charge_levels = std::move(tmp);
}