aki2274 / KOnezumi-AID

MIT License
2 stars 0 forks source link

Add primer uniquness #40

Closed aki2274 closed 10 months ago

aki2274 commented 11 months ago

bowtieのテストが通ったのでユニークさの情報追加の部分が完成しました。 もう一つpull requestとコンフリクトしないようにしたはずなのでこちらもお手すきの際にマージお願いします。

akikuno commented 11 months ago

@aki2274

ありがとうございます!

main.pyのsubprocess.runに、pathが直書きされています([r"src\get_rtpcr_primer\get_uniqueness.sh"])が、こちらは一般にPathlibオブジェクトを渡したほうが安全です。

from pathlib import Path
path_get_uniqueness = Path("src", "get_rtpcr_primer", "get_uniqueness.sh")
subprocess.run([path_get_uniqueness])

https://github.com/aki2274/KOnezumi-AID/blob/a55ef1f56314cd4ec63ab94a260a1dfd5f317572/src/get_rtpcr_primer/main.py#L63

akikuno commented 11 months ago

add_uniqueness.py

check_primer_quality.py

aki2274 commented 11 months ago

add_uniqueness()の引数について、ファイルパスをデフォルト引数にせずに、明示してください。

こちらについてなのですが、

def add_uniqueness(
    candidate: list[dict],
    miss_0_path: str = "data/uniq/0_miss_counts.txt",
    miss_1_path: str = "data/uniq/1_miss_counts.txt",
    miss_2_path: str = "data/uniq/2_miss_counts.txt",
) -> list[dict]:
    miss_0 = read_uniqueness(miss_0_path)
    miss_1 = read_uniqueness(miss_1_path)
    miss_2 = read_uniqueness(miss_2_path)

def add_uniqueness(candidate: list[dict]) -> list[dict]:
    miss_0_path = "data/uniq/0_miss_counts.txt"
    miss_1_path = "data/uniq/1_miss_counts.txt"
    miss_2_path = "data/uniq/2_miss_counts.txt"
    miss_0 = read_uniqueness(miss_0_path)
    miss_1 = read_uniqueness(miss_1_path)
    miss_2 = read_uniqueness(miss_2_path)

に変更するという認識であってますか? そうした場合テストのときにdata/にアクセスできないですがどうすればよいですか。

akikuno commented 11 months ago
def add_uniqueness(
    candidate: list[dict],
    miss_0_path: str = "data/uniq/0_miss_counts.txt",
    miss_1_path: str = "data/uniq/1_miss_counts.txt",
    miss_2_path: str = "data/uniq/2_miss_counts.txt",
) -> list[dict]:
    miss_0 = read_uniqueness(miss_0_path)
    miss_1 = read_uniqueness(miss_1_path)
    miss_2 = read_uniqueness(miss_2_path)

について、以下のようなイメージですー

from pathlib import Path

def add_uniqueness(
    candidate: list[dict],
    miss_0_path: Path,
    miss_1_path: Path,
    miss_2_path: Path ,
) -> list[dict]:
    miss_0 = read_uniqueness(miss_0_path)
    miss_1 = read_uniqueness(miss_1_path)
    miss_2 = read_uniqueness(miss_2_path)

miss_0_path = Path("data", "uniq", "0_miss_counts.txt")
miss_1_path = Path("data", "uniq", "1_miss_counts.txt")
miss_2_path = Path("data", "uniq", "2_miss_counts.txt")
add_uniqueness(candidate, miss_0_path, miss_1_path, miss_2_path)

Pathは開発の進行に応じてとくに変更が多いものですので、デフォルト引数に入れるよりも関数の実引数としてあつかうようにすると、「変更容易性」が高まります 😄

aki2274 commented 10 months ago

pathの指定方法を変更しました。 その他修正点がありそうでしたらご指摘お願いします。

akikuno commented 10 months ago

ありがとうございますー!

data/uniqディレクトリを作成するコードはどこかにございますか?👀

# python
Path("data", "uniq").mkdir(parents=True, exist_ok=True)

or

# bash
mkdir -p data/uniq
aki2274 commented 10 months ago

作ってないのでエラー起こる可能性がありますね。 main.pyに追加しておきます。

akikuno commented 10 months ago

ありがとうございますー

細かいところですが、get_uniqueness.shのところにおいて、

grep -v "^@" /tmp/bowtie_result_0.sam | cut -f 1 | sort | uniq -c > data/uniq/0_miss_counts.txt
grep -v "^@" /tmp/bowtie_result_1.sam | cut -f 1 | sort | uniq -c >> data/uniq/1_miss_counts.txt
grep -v "^@" /tmp/bowtie_result_2.sam | cut -f 1 | sort | uniq -c >> data/uniq/2_miss_counts.txt

>>は「追記」を意味しており、今回はとくに追記をしないので、>が良いと思います!

grep -v "^@" /tmp/bowtie_result_0.sam | cut -f 1 | sort | uniq -c > data/uniq/0_miss_counts.txt
grep -v "^@" /tmp/bowtie_result_1.sam | cut -f 1 | sort | uniq -c > data/uniq/1_miss_counts.txt
grep -v "^@" /tmp/bowtie_result_2.sam | cut -f 1 | sort | uniq -c > data/uniq/2_miss_counts.txt

なお、追記はバグの温床なので、なるべく使わないほうが良いです。 追記は何度やってもエラーが出ないので、テストが通らない原因に気が付けない、とか、気がついたらファイルサイズが膨大になって焦る、などが問題が起こりやすいので要注意です😅

aki2274 commented 10 months ago

追記はテストでも用いるのでgithub上の容量も重くなる等、非常に危険ですね。 修正しました。

akikuno commented 10 months ago

@aki2274 ありがとうございますー!マージ、OKですー😁