dna-mutation-api / mutation_analyzer.py
jebin511's picture
Upload 3 files
d53784b verified
import sys
import json
def find_mutations(reference, sample):
mutations = []
i, j = 0, 0
pos = 1 # 1-based position for biology
while i < len(reference) and j < len(sample):
if reference[i] == sample[j]:
i += 1
j += 1
pos += 1
else:
# Substitution
if i + 1 < len(reference) and j + 1 < len(sample) and reference[i+1] == sample[j+1]:
mutations.append({
"type": "substitution",
"position": pos,
"reference": reference[i],
"observed": sample[j]
})
i += 1
j += 1
pos += 1
# Insertion
elif j + 1 < len(sample) and reference[i] == sample[j+1]:
mutations.append({
"type": "insertion",
"position": pos,
"inserted": sample[j]
})
j += 1
pos += 1
# Deletion
elif i + 1 < len(reference) and reference[i+1] == sample[j]:
mutations.append({
"type": "deletion",
"position": pos,
"deleted": reference[i]
})
i += 1
pos += 1
else:
mutations.append({
"type": "substitution",
"position": pos,
"reference": reference[i],
"observed": sample[j]
})
i += 1
j += 1
pos += 1
while j < len(sample):
mutations.append({
"type": "insertion",
"position": pos,
"inserted": sample[j]
})
j += 1
pos += 1
while i < len(reference):
mutations.append({
"type": "deletion",
"position": pos,
"deleted": reference[i]
})
i += 1
pos += 1
return mutations
if __name__ == "__main__":
data = json.loads(sys.stdin.read())
reference = data["reference"].upper()
sample = data["sample"].upper()
result = find_mutations(reference, sample)
message = "No mutation found. Sequence matches reference."
if len(result) > 0:
message = f"Mutation found! Total mutations detected: {len(result)}"
print(json.dumps({
"message": message,
"total_mutations": len(result),
"mutations": result
}))