def new(self, root_dir, strains, aligned, sample): out_dir = root_dir + "/" + sample[0] os.makedirs(out_dir, exist_ok=True) # sample_json = out_dir + "/sample.json" # w.write(sample_json, w.json(s.to_json(sample))) sample_fasta = out_dir + "/sample.fasta" w.write(sample_fasta, w.fasta(s.to_fasta(sample))) art_prefix = out_dir + "/art" art = os.environ['ART_ILLUMINA'] subprocess.run([ art, "--in", sample_fasta, "--out", art_prefix, "--seqSys", "HS20", "--len", "100", "--fcov", "100" ], stdout=subprocess.DEVNULL) take_ref = False art_output = r.read(art_prefix + ".aln", r.aln(take_ref)) instance = Instance().new(strains, aligned, art_output) # w.write(out_dir + "/instance.json", w.json(instance.to_json())) w.write(out_dir + "/instance.txt", w.text(instance.to_text())) w.write(out_dir + "/instance.stats.json", w.json(instance.stats()))
class Simulation: def new(self, params): os.makedirs(params.out_dir, exist_ok=True) self.params = params w.write(params.out_dir + "/params.json", w.pretty_json(params.to_json())) self.sample = Sample().new(params) sample_file = params.out_dir + "/sample.fasta" w.write(sample_file, w.fasta(self.sample)) art_prefix = params.out_dir + "/art" art = os.environ['ART_ILLUMINA'] subprocess.run([ art, "--in", sample_file, "--out", art_prefix, "--rndSeed", str(params.seed) ] + params.art_flags, stdout=subprocess.DEVNULL) self.art_output = r.read(art_prefix + ".aln", r.aln(params.take_ref)) self.instance = Instance().new(params, self.art_output) w.write(params.out_dir + "/instance.json", w.json(self.instance.to_json())) w.write(params.out_dir + "/instance.txt", w.text(self.instance.to_text())) w.write(params.out_dir + "/instance.stats.json", w.json(self.instance.stats())) return self def load(self, out_dir): self.params = Params().from_json( r.read(out_dir + "/params.json", r.json)) self.sample = Sample().from_fasta( r.read(out_dir + "/sample.fasta", r.fasta_list)) self.art_output = r.read(out_dir + "/art.aln", r.aln(self.params.take_ref)) self.instance = Instance().from_json( r.read(out_dir + "/instance.json", r.json)) return self