Mentions légales du service

Skip to content
Snippets Groups Projects
Commit d75d2e9f authored by BOULLE Olivier's avatar BOULLE Olivier
Browse files

add random non coding base instead of just A

parent 6865c727
Branches
Tags
No related merge requests found
......@@ -114,7 +114,7 @@ def encode_file(input_path: str, output_path: str) -> None:
binary_string = convert_file_to_bits(input_path) # get the binary string representing the file content
dna_payload_size = bdc.size_of_dna_from_bit_len_abaab(len(binary_string) + CHECK_SUM_SIZE) # length of the payload after conversion in dna
dna_payload_size = bdc.size_dna_from_bit_len_abaab(len(binary_string) + CHECK_SUM_SIZE) # length of the payload after conversion in dna
#print("payload size",str(dna_payload_size))
# estimate number of blocks, round up to next int
......@@ -138,8 +138,8 @@ def encode_file(input_path: str, output_path: str) -> None:
exit(1)
pass
# add a non coding A at the end of the sequence to make the last block at correct size when it is not possible to do by adding bits of 0 (very rare case)
add_A_at_end = False
# add a non coding base at the end of the sequence to make the last block at correct size when it is not possible to do by adding bits of 0 (very rare case)
add_base_at_end = False
if force_size_to_max or total_dna_size % block_number > 0: # need to add non payload bits to adjust the size of blocks
......@@ -158,16 +158,16 @@ def encode_file(input_path: str, output_path: str) -> None:
filler_length = bdc.size_binary_from_dna_len_abaab(dna_payload_needed_size) - len(binary_string) - CHECK_SUM_SIZE
#print("dna_payload_needed_size",str(dna_payload_needed_size)," +",filler_length,"bits")
# fill with '0' at the beginning of the binary # not the end because some zip can end with octets of 0, wich makes difficult to remove only the non coding '0'
# fill with '0' at the beginning of the binary # not the end because some zip can end with octets of 0, which makes difficult to remove only the non coding '0'
binary_string = math.ceil(filler_length) * "0" + binary_string
#print("updated binary size", str(len(binary_string)))
# rare case where adding 0 can not solve the problem of round blocks
if dna_payload_needed_size % 5 == 3:
# need a non coding A at the end
#print("added A")
add_A_at_end = True
# need a non coding base at the end
#print("added non coding base")
add_base_at_end = True
# apply a filter to the binary string -> shuffle the data to avoid long rows of 0 or 1, and avoid rows repetitions
......@@ -182,7 +182,7 @@ def encode_file(input_path: str, output_path: str) -> None:
# convert binaries into dna sequence
sequence = bdc.binary_to_dna_abaab(filtered_binary_string)
if add_A_at_end: sequence += "A"
if add_base_at_end: sequence += bdc.bit_to_dna_balance_GC("0", sequence[-1]) # add a non coding base different from the preceding one
total_sequence_size = len(sequence)+ dna_non_payload_size
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment