Closed aki2274 closed 10 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])
add_uniqueness()
の引数について、ファイルパスをデフォルト引数にせずに、明示してください。check_exon_junction()
において、引数のcandidate_primer_infoを上書きしていますが、引数は上書きしないほうが保守性が高いです。returnする変数は新しく作り、引数は変更しないように修正いただければ幸いです。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/にアクセスできないですがどうすればよいですか。
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は開発の進行に応じてとくに変更が多いものですので、デフォルト引数に入れるよりも関数の実引数としてあつかうようにすると、「変更容易性」が高まります 😄
pathの指定方法を変更しました。 その他修正点がありそうでしたらご指摘お願いします。
ありがとうございますー!
data/uniq
ディレクトリを作成するコードはどこかにございますか?👀
# python
Path("data", "uniq").mkdir(parents=True, exist_ok=True)
or
# bash
mkdir -p data/uniq
作ってないのでエラー起こる可能性がありますね。 main.pyに追加しておきます。
ありがとうございますー
細かいところですが、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
なお、追記はバグの温床なので、なるべく使わないほうが良いです。 追記は何度やってもエラーが出ないので、テストが通らない原因に気が付けない、とか、気がついたらファイルサイズが膨大になって焦る、などが問題が起こりやすいので要注意です😅
追記はテストでも用いるのでgithub上の容量も重くなる等、非常に危険ですね。 修正しました。
@aki2274 ありがとうございますー!マージ、OKですー😁
bowtieのテストが通ったのでユニークさの情報追加の部分が完成しました。 もう一つpull requestとコンフリクトしないようにしたはずなのでこちらもお手すきの際にマージお願いします。