class PF_COMMAND_1_0
Prediction of protein-folding in the 2D HP Model version 1.0
note
description: "Prediction of protein-folding in the 2D HP Model version 1.0"
license: "[https://www.gnu.org/licenses/gpl-3.0.en.html GNU General Public License]"
author: "Finnian Reilly"
copyright: "[
Copyright (C) 2016-2017 Gerrit Leder, Finnian Reilly
]"
contact: "finnian at eiffel hyphen loop dot com; gerrit.leder@gmail.com"
license: "[https://www.gnu.org/licenses/gpl-3.0.en.html GNU General Public License]"
date: "2023-07-08 18:39:36 GMT (Saturday 8th July 2023)"
revision: "4"
class
PF_COMMAND_1_0
inherit
PROTEIN_FOLDING_COMMAND
redefine
make
end
create
make
feature {EL_COMMAND_LINE_APPLICATION} -- Initialization
make (a_strseq: like strseq; a_output_path: like output_path)
do
Precursor (a_strseq, a_output_path)
create tool.make
minimum_loss := 9999; loss := 9999
number := 0
create folds.make
folds.compare_objects
--create losses.make
--losses.compare_objects
--create indices.make --from_collection(losses)
create fold.make (strseq.count - 1) --was - 1
fold.compare_objects
create seq.make (strseq.count)
--create zero.make
--create Bit sequence seq:
seq := tool.convert_str_bool_string (strseq)
--create first fold:
fold := tool.generate_first_fold (strseq)
zero := False
one := True
seq_count := seq.count
create grid.make (seq_count + 1)
grid := tool.embed (grid, 0, seq, fold)
loss := tool.calc_losses (grid, 0, seq, fold)
folds := tool.compare_loss_min_add_fold (grid, loss, minimum_loss, fold, folds)
end
feature -- Constants
Description: STRING = "Test distributed calculation of HP sequences in two-dimensional grid"
feature -- Basic operations
gen_folds
local
k, j: INTEGER; iteration_count: NATURAL_32
c: BOOLEAN
do
log.enter ("gen_folds")
c := False; j := 0
if loss < minimum_loss then
minimum_loss := loss
check folds.has (fold) end
end
from
k := 0
until
j = 1
loop
if fold.count > 1 then
from
k := fold.count - 1
c := half_add (fold.count)
until
k = 1 --was 1
loop
if c.is_equal (one) then
c := half_add (k)
end
k := k - 1
end
end
if c.is_equal (one) then
j := 1
end
--brute force enumeration of folds:
if j = 0 then
iteration_count := iteration_count + 1
print_progress (iteration_count)
create grid.make (seq_count + 1)
grid := tool.embed (grid, 0, seq, fold)
loss := tool.calc_losses (grid, 0, seq, fold)
folds := tool.compare_loss_min_add_fold (grid, loss, minimum_loss, fold, folds)
if loss < minimum_loss then
minimum_loss := loss
check folds.has (fold) end
check folds.count = 1 end
end
log_losses (fold, grid.used.has (zero), loss, minimum_loss, folds.count)
end
end
log.exit
end
half_add (count: INTEGER): BOOLEAN
local
b: BOOLEAN
do
--create b.make(1)
b := False
if fold.item (count) = 'N' then
fold.put ('E', count)
-- b.put_0(1)
b := False
Result := b
elseif fold.item (count) = 'E' then
fold.put ('S', count)
-- b.put_0(1)
b := False
Result := b
elseif fold.item (count) = 'S' then
fold.put ('W', count)
--b.put_0(1)
b := False
Result := b
elseif fold.item (count) = 'W' then
fold.put ('N', count)
--b.put_1(1)
b := True
Result := b
end
end
print_folds
do
output.put_new_line
--folds.fill_tagged_out_memory
--io.put_string(folds.out)
output.put_new_line
end -- print_folds
print_indices
do
output.put_new_line
-- indices.fill_tagged_out_memory
--io.put_string(indices)
output.put_new_line
end -- print_indices
print_item (item: STRING)
do
number := number + 1
output.put_character_8 ('#')
output.put_integer (number)
output.put_character_8 (' ')
output.put_string_8 (item.string)
output.put_character_8 ('%N')
end -- print_item
print_losses
do
output.put_new_line
--losses.fill_tagged_out_memory
--io.put_string(losses)
output.put_new_line
end -- print_losses
print_min_fold
local
sorted: EL_SORTABLE_ARRAYED_LIST [STRING]
do
create sorted.make_sorted (folds)
sorted.do_all (agent print_item)
end
feature {NONE} -- Implementation
fold_as_string: STRING
do
Result := fold
end
feature {NONE} -- Internal attributes
fold: STRING
folds: LINKED_LIST [STRING]
--losses: LINKED_LIST [INTEGER];
grid: GRID_1_0
iseq: INTEGER
loss: INTEGER;
number: INTEGER
--Constructor:
seq: PF_BOOL_STRING
seq_count: INTEGER
tool: TOOL_1_0
zero, one: BOOLEAN
end