Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
246bed5
testing commit
KhairaK Jan 22, 2025
b72d7c8
Merge branch 'hurwitzlab:main' into main
bhurwitz33 Jan 30, 2025
71b8321
Merge branch 'hurwitzlab:main' into main
bhurwitz33 Jan 31, 2025
e5f48f8
Merge branch 'hurwitzlab:main' into main
KhairaK Feb 3, 2025
55ab584
Merge branch 'hurwitzlab:main' into main
bhurwitz33 Feb 10, 2025
60f627d
fixing test.py in 07_syndna
bhurwitz33 Mar 24, 2025
3810cdf
Assignment 1 commit and exercise 1
KhairaK Mar 24, 2025
782a979
Merge branch 'main' into main
KhairaK Apr 1, 2025
9825362
Checkpoint before assistant change: Fix division by zero error by add…
Apr 5, 2025
e520d38
Assistant checkpoint: Move zero division check before division operation
KhairaK Apr 5, 2025
b366bb0
Submitting Homework 2
KhairaK Apr 5, 2025
667000f
Fixing Shell Error
KhairaK Apr 5, 2025
c2fa805
Assistant checkpoint: Configure workflow to run Python
KhairaK Apr 5, 2025
4d4d687
Submitting Homework 3
KhairaK Apr 5, 2025
bd3b8b0
Submitting Homework 4
KhairaK Apr 5, 2025
7b1e033
Assignment 5
KhairaK Apr 6, 2025
58026a1
Submitting Assignment 6
KhairaK May 6, 2025
046b98e
Merge branch 'hurwitzlab:main' into main
KhairaK May 6, 2025
fc98ec3
Submitting Assignment 7
KhairaK May 6, 2025
d7e8222
Submitting Assignment 8
KhairaK May 7, 2025
a0b0e9b
Checkpoint before assistant change: Add tools to analyze data, filter…
May 7, 2025
428e640
Assistant checkpoint: Fix string join syntax in error message
KhairaK May 7, 2025
a7f73ae
submitting assignment 9 csvfilter.py
KhairaK May 7, 2025
51ef593
Submitting assignment 10 !!
KhairaK May 7, 2025
50fb602
Checkpoint before assistant change: Add programs to process DNA seque…
May 7, 2025
c0e6f5a
Assignment 12
KhairaK May 7, 2025
5e3f3fd
submitting assignment 11
KhairaK May 7, 2025
b3aae7a
Submitting Project 1
KhairaK May 7, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion .replit
Original file line number Diff line number Diff line change
@@ -1,8 +1,22 @@
modules = ["bash", "python-3.11", "python-3.12"]

modules = ["python-3.12", "bash"]

run = "~/workspace/assignments/grade_hw.sh"

[nix]
channel = "stable-24_05"

[deployment]
run = ["sh", "-c", "~/workspace/assignments/grade_hw.sh"]

[workflows]
runButton = "Run"

[[workflows.workflow]]
name = "Run"
author = 39028111
mode = "sequential"

[[workflows.workflow.tasks]]
task = "shell.exec"
args = "python main.py"
46 changes: 46 additions & 0 deletions assignments/01_howdy/howdy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#!/usr/bin/env python3
"""
Author : Khaira Kukich <kukichk0@arizona.edu>
Date : 2025-03-24
Purpose: Print greeting
"""

import argparse
from enum import Flag


# --------------------------------------------------
def get_args():
"""Get command-line arguments"""

parser = argparse.ArgumentParser(
description='Print greeting',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('-g', '--greeting', default= 'Howdy', metavar= 'str', help='The greeting')

parser.add_argument('-n','--name', default= 'Stranger', metavar= 'str', help='Whom to greet')

parser.add_argument('-e','--excited', help='Print ! if this flag is present', action='store_true')
return parser.parse_args()


# --------------------------------------------------
def main():
"""Make a jazz noise here"""

args = get_args()
greeting = args.greeting
name = args.name
excited = args.excited

if excited:
print(f'{greeting}, {name}!')
else:
print(f'{greeting}, {name}.')




# --------------------------------------------------
if __name__ == '__main__':
main()
44 changes: 44 additions & 0 deletions assignments/02_divide/divide.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#!/usr/bin/env python3
"""
Author : Khaira Kukich <kukichk0@arizona.edu>
Date : 2025-04-03
Purpose: Dividing two numbers
"""

import argparse


# --------------------------------------------------
def get_args():
"""Get command-line arguments"""
parser = argparse.ArgumentParser(
description='Divide two numbers',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('INT', metavar= 'INT', nargs= 2, type=valid_int, help= 'Numbers to divide')
return parser

def valid_int(value):
try:
ivalue= int(value)
except ValueError:
raise argparse.ArgumentTypeError(f'invalid int value: {value}')

return ivalue
# --------------------------------------------------
def main():
"""Make a jazz noise here"""

parser = get_args()
args = parser.parse_args()
numerator, denominator = args.INT

if args.INT[1] == 0:
parser.error('Cannot divide by zero, dum-dum!')

result = numerator // denominator
print(f'{numerator} / {denominator} = {result}')


# --------------------------------------------------
if __name__ == '__main__':
main()
38 changes: 38 additions & 0 deletions assignments/03_dna/dna.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/usr/bin/env python3
"""
Author : Khaira Kukich <kukichk0@arizona.edu>
Date : 2025-04-05
Purpose:
"""

import argparse


# --------------------------------------------------
def get_args():
"""Get command-line arguments"""
parser = argparse.ArgumentParser(description="Tetranucleotide frequency")
parser.add_argument("DNA", help="Input DNA sequence")
return parser.parse_args()


# --------------------------------------------------
def main():
"""Make a jazz noise here"""

args = get_args()
sequence = args.DNA.upper()
a_count = sequence.count('A')
c_count = sequence.count('C')
g_count = sequence.count('G')
t_count = sequence.count('T')

print(f'{a_count} {c_count} {g_count} {t_count}')





# --------------------------------------------------
if __name__ == '__main__':
main()
48 changes: 48 additions & 0 deletions assignments/04_revc/revc.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/usr/bin/env python3
"""
Author : Khaira Kukich <kukichk0@arizona.edu>
Date : 2025-04-05
Purpose: Print the Reverse complement of DNA
"""

import argparse
import os

# --------------------------------------------------
def get_args():
"""Get command-line arguments"""

parser = argparse.ArgumentParser(
description='Print the reverse complement of DNA',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)

parser.add_argument('DNA', help="Input sequence or file")


return parser.parse_args()

def read_sequence(dna_args):
if os.path.isfile(dna_args):
with open(dna_args) as file:
return file.read().strip()
else:
return dna_args.strip()

def reverse_complement(sequence):
"""Return the reverse complement of a DNA sequence"""
complement = {'A': 'T', 'T': 'A', 'C': 'G', 'G': 'C', 'a': 't', 't': 'a', 'c': 'g', 'g': 'c'}
return ''.join(complement.get(base, base) for base in reversed(sequence))
# --------------------------------------------------
def main():
"""Make a jazz noise here"""

args = get_args()
sequence = read_sequence(args.DNA)
revc = reverse_complement(sequence)
print(revc)



# --------------------------------------------------
if __name__ == '__main__':
main()
Empty file added assignments/05_gc/Rosalind_0808
Empty file.
Empty file added assignments/05_gc/Rosalind_5959
Empty file.
Empty file added assignments/05_gc/Rosalind_6404
Empty file.
65 changes: 65 additions & 0 deletions assignments/05_gc/cgc.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#!/usr/bin/env python3
"""
Author : Khaira Kukich <kukichk0@arizona.edu>
Date : 2025-04-05
Purpose: Compute GC content
"""

import argparse
import os
import sys

# --------------------------------------------------
def get_args():
"""Get command-line arguments"""

parser = argparse.ArgumentParser(
description='Compute GC content',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("FILE", nargs="?", help='Input sequence file')

return parser.parse_args()

def read_fasta(file):
sequences = {}
current_id = None
for line in file:
line = line.strip()
if line.startswith('>'):
current_id = line[1:]
sequences[current_id] = ''
else:
sequences[current_id] += line
return sequences
def gc_content(sequence):
gc = sum(1 for base in sequence if base.upper() in "GC")
return (gc / len(sequence)) * 100 if sequence else 0.0
# --------------------------------------------------
def main():
"""Make a jazz noise here"""

args = get_args()
if args.FILE:
if not os.path.isfile(args.FILE):
print('usage: cgc.py [-h] FILE')
print(f"cgc.py: error: No such file or directory: '{args.FILE}'")
sys.exit(1)
with open(args.FILE) as file:
sequences = read_fasta(file)
else:
sequences = read_fasta(sys.stdin)
max_id = None
max_gc = 0.0

for seq_id, sequence in sequences.items():
gc = gc_content(sequence)
if gc > max_gc:
max_gc = gc
max_id = seq_id
print(f'{max_id} {max_gc:.6f}')



# --------------------------------------------------
if __name__ == '__main__':
main()
58 changes: 58 additions & 0 deletions assignments/06_rna/rna.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#!/usr/bin/env python3
"""
Author : Khaira Kukich <kukichk0@arizona.edu>
Date : 2025-04-05
Purpose: Transcribe DNA into RNA
"""

import argparse
import os
import sys
# --------------------------------------------------
def get_args():
"""Get command-line arguments"""

parser = argparse.ArgumentParser(
description='Transcribe DNA into RNA')
parser.add_argument('files', metavar= 'FILE', nargs='+', help='Input DNA file', type=str)
parser.add_argument('-o', '--out_dir', help='Output directory (default: out', metavar='DIR', default='out')

return parser.parse_args()


# --------------------------------------------------
def main():
"""Make a jazz noise here"""

args = get_args()
out_dir = args.out_dir
files = args.files

if not os.path.isdir(out_dir):
os.makedirs(out_dir)

total_sequences = 0
for file in files:
try:
basename = os.path.basename(file)
out_path = os.path.join(out_dir, basename)
with open(file) as fh_in, open(out_path, 'wt') as fh_out:
for line in fh_in:
rna = line.strip().replace("T", "U")
fh_out.write(rna + '\n')
total_sequences += 1
except FileNotFoundError:
print(f"usage: {os.path.basename(sys.argv[0])} [-h]", file=sys.stderr)
print(f"No such file or directory: '{file}'", file=sys.stderr)
sys.exit(1)

num_files = len(files)
seq_str = 'sequence' if total_sequences == 1 else 'sequences'
file_str = 'file' if num_files == 1 else 'files'
print(f'Done, wrote {total_sequences} {seq_str} in {num_files} {file_str} to directory "{out_dir}".')



# --------------------------------------------------
if __name__ == '__main__':
main()
Loading