+
+ if min_linker
+ if actual_out_of == 1
+ extract_domain( seq_name,
+ 1,
+ 1,
+ hmmscan_data.env_from,
+ hmmscan_data.env_to,
+ in_msa,
+ out_msa_singles,
+ add_position,
+ add_domain_number,
+ add_species )
+ if out_msa_single_domains_protein_seqs.find_by_name_start( seq_name, true ).length < 1
+ add_sequence( seq_name, in_msa, out_msa_single_domains_protein_seqs )
+ else
+ error_msg = "this should not have happened"
+ raise StandardError, error_msg
+ end
+
+ else
+ first = index == 0
+ last = index == hmmscan_datas.length - 1
+
+ if ( ( first && ( ( hmmscan_datas[ index + 1 ].env_from - hmmscan_data.env_to ) > min_linker) ) ||
+ ( last && ( ( hmmscan_data.env_from - hmmscan_datas[ index - 1 ].env_to ) > min_linker ) ) ||
+ ( !first && !last && ( ( hmmscan_datas[ index + 1 ].env_from - hmmscan_data.env_to ) > min_linker ) &&
+ ( ( hmmscan_data.env_from - hmmscan_datas[ index - 1 ].env_to ) > min_linker ) ) )
+
+ extract_domain( seq_name,
+ index + 1,
+ actual_out_of,
+ hmmscan_data.env_from,
+ hmmscan_data.env_to,
+ in_msa,
+ out_msa_isolated,
+ add_position,
+ add_domain_number,
+ add_species )
+ saw_isolated = true
+
+ elsif !first
+
+ from = hmmscan_datas[ index - 1 ].env_from
+ to = hmmscan_data.env_to
+
+ if ADD_TO_CLOSE_PAIRS > 0
+ from = from - ADD_TO_CLOSE_PAIRS
+ if from < 1
+ from = 1
+ end
+ to = to + ADD_TO_CLOSE_PAIRS
+ temp_seqs = in_msa.find_by_name_start( seq_name, true )
+ temp_seq = in_msa.get_sequence( temp_seqs[ 0 ] )
+ if to > temp_seq.get_length
+ to = temp_seq.get_length
+ end
+ end
+
+ extract_domain( seq_name,
+ index.to_s + "+" + ( index + 1 ).to_s,
+ actual_out_of,
+ from,
+ to,
+ in_msa,
+ out_msa_pairs,
+ add_position,
+ add_domain_number,
+ add_species )
+ saw_close_pair = true
+ end
+ end
+ end
+ if prev_seq_name && prev_seq_name != seq_name
+ error_msg = "this should not have happened"
+ raise StandardError, error_msg
+ end
+ prev_seq_name = seq_name
+ end # each
+ if saw_isolated
+ if out_msa_isolated_protein_seqs.find_by_name_start( seq_name, true ).length < 1
+ add_sequence( seq_name, in_msa, out_msa_isolated_protein_seqs )
+ else
+ error_msg = "this should not have happened"
+ raise StandardError, error_msg
+ end
+ end
+ if saw_close_pair
+ if out_msa_close_pairs_protein_seqs.find_by_name_start( seq_name, true ).length < 1
+ add_sequence( seq_name, in_msa, out_msa_close_pairs_protein_seqs )
+ else
+ error_msg = "this should not have happened"
+ raise StandardError, error_msg
+ end
+ end
+ if saw_close_pair && saw_isolated
+ if out_msa_isolated_and_close_pair_protein_seqs.find_by_name_start( seq_name, true ).length < 1
+ add_sequence( seq_name, in_msa, out_msa_isolated_and_close_pair_protein_seqs )
+ else
+ error_msg = "this should not have happened"
+ raise StandardError, error_msg
+ end
+ elsif saw_close_pair
+ if out_msa_close_pairs_only_protein_seqs.find_by_name_start( seq_name, true ).length < 1
+ add_sequence( seq_name, in_msa, out_msa_close_pairs_only_protein_seqs )
+ else
+ error_msg = "this should not have happened"
+ raise StandardError, error_msg
+ end
+ elsif saw_isolated
+ if out_msa_isolated_only_protein_seqs.find_by_name_start( seq_name, true ).length < 1
+ add_sequence( seq_name, in_msa, out_msa_isolated_only_protein_seqs )
+ else
+ error_msg = "this should not have happened"
+ raise StandardError, error_msg
+ end
+ end
+ end # def process_hmmscan_data
+
+ def extract_domain( sequence,
+ number,
+ out_of,
+ seq_from,
+ seq_to,
+ in_msa,
+ out_msa,
+ add_position,
+ add_domain_number,
+ add_species )
+ if number.is_a?( Fixnum ) && ( number < 1 || out_of < 1 || number > out_of )
+ error_msg = "number=" + number.to_s + ", out of=" + out_of.to_s