Skip to content

Commit

Permalink
version 0.3.14
Browse files Browse the repository at this point in the history
  • Loading branch information
sharkLoc committed Apr 3, 2024
1 parent 7f8572f commit 1dc4666
Show file tree
Hide file tree
Showing 8 changed files with 203 additions and 138 deletions.
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "fqkit"
version = "0.3.13"
version = "0.3.14"
edition = "2021"
authors = ["sharkLoc <mmtinfo@163.com>"]
rust-version = "1.65.0"
Expand Down
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -40,7 +40,7 @@ cargo install --git https://github.com/sharkLoc/fqkit.git
```bash
FqKit -- A simple and cross-platform program for fastq file manipulation

Version: 0.3.13
Version: 0.3.14

Authors: sharkLoc <mmtinfo@163.com>
Source code: https://github.com/sharkLoc/fqkit.git
Expand Down
223 changes: 118 additions & 105 deletions src/command.rs

Large diffs are not rendered by default.

32 changes: 17 additions & 15 deletions src/main.rs
Expand Up @@ -144,18 +144,18 @@ fn main() -> Result<(), Error> {
Subcli::select { read1, read2, out1, out2 } => {
select_pe_fastq(&read1, &read2, &out1, &out2, arg.compression_level)?;
}
Subcli::trim { input, left, right, out } => {
Subcli::trim { input, left, right, len, out } => {
if let Some(input) = input {
if let Some(out) = out {
trim_fq(&Some(input.as_str()), left, right, &Some(out.as_str()), arg.compression_level)?;
trim_fq(&Some(input.as_str()), left, right, len, &Some(out.as_str()), arg.compression_level)?;
} else {
trim_fq(&Some(input.as_str()), left, right, &None, arg.compression_level)?;
trim_fq(&Some(input.as_str()), left, right, len, &None, arg.compression_level)?;
}
} else {
if let Some(out) = out {
trim_fq(&None, left, right, &Some(out.as_str()), arg.compression_level)?;
trim_fq(&None, left, right, len, &Some(out.as_str()), arg.compression_level)?;
} else {
trim_fq(&None, left, right, &None, arg.compression_level)?;
trim_fq(&None, left, right, len, &None, arg.compression_level)?;
}
}
}
Expand Down Expand Up @@ -367,33 +367,35 @@ fn main() -> Result<(), Error> {
Subcli::concat { read1, read2, out1, out2 } => {
concat_fqstq_lane(&read1, &read2, &out1, &out2, arg.compression_level)?;
}
Subcli::remove { input, out, name , save} => {
Subcli::remove { input, out, name , save, rm} => {
if let Some(input) = input {
if let Some(out) = out {
remove_read(&Some(&input), &Some(&out) ,&name, &save, arg.compression_level)?;
remove_read(&Some(&input), &Some(&out) ,&name, &save, rm, arg.compression_level)?;
} else {
remove_read(&Some(&input), &None ,&name, &save, arg.compression_level)?;
remove_read(&Some(&input), &None ,&name, &save, rm, arg.compression_level)?;
}
} else {
if let Some(out) = out {
remove_read(&None, &Some(&out) ,&name, &save, arg.compression_level)?;
remove_read(&None, &Some(&out) ,&name, &save, rm, arg.compression_level)?;
} else {
remove_read(&None, &None ,&name, &save, arg.compression_level)?;
remove_read(&None, &None ,&name, &save, rm, arg.compression_level)?;
}
}
}
Subcli::rename { input, keep, prefix, output } => {
Subcli::rename { input, keep, prefix, label, before, output } => {
let x = label.unwrap_or_default();
let label = Some(x.as_str());
if let Some(input) =input {
if let Some(output) = output {
rename_fastq(&Some(&input), keep, prefix, &Some(&output), arg.compression_level)?;
rename_fastq(&Some(&input), keep, prefix, label, before, &Some(&output), arg.compression_level)?;
} else {
rename_fastq(&Some(&input), keep, prefix, &None, arg.compression_level)?;
rename_fastq(&Some(&input), keep, prefix, label, before, &None, arg.compression_level)?;
}
} else {
if let Some(output) = output {
rename_fastq(&None, keep, prefix, &Some(&output), arg.compression_level)?;
rename_fastq(&None, keep, prefix, label, before, &Some(&output), arg.compression_level)?;
} else {
rename_fastq(&None, keep, prefix, &None, arg.compression_level)?;
rename_fastq(&None, keep, prefix, label, before, &None, arg.compression_level)?;
}
}
}
Expand Down
33 changes: 23 additions & 10 deletions src/remove.rs
Expand Up @@ -10,6 +10,7 @@ pub fn remove_read(
out: &Option<&str>,
name: &str,
save: &str,
rm: bool,
compression_level: u32,
) -> Result<(),Error> {
if let Some(file) = file {
Expand All @@ -18,7 +19,9 @@ pub fn remove_read(
info!("reading reads from stdin");
}
info!("reading reads id form file: {}", name);
info!("removed reads in file: {}", save);
if !rm {
info!("removed reads in file: {}", save);
}
let start = Instant::now();

let mut ids = vec![];
Expand All @@ -34,16 +37,26 @@ pub fn remove_read(

let fq_reader = fastq::Reader::new(file_reader(file)?);
let mut fq_writer = fastq::Writer::new(file_writer(out, compression_level)?);
let mut rm_writer = fastq::Writer::new(file_writer(&Some(&save), compression_level)?);
for rec in fq_reader.records().flatten() {
if !ids.contains(&rec.id().to_string()) {
fq_writer.write(rec.id(), rec.desc(), rec.seq(), rec.qual())?;
} else {
rm_writer.write(rec.id(), rec.desc(), rec.seq(), rec.qual())?;
}

if rm {
for rec in fq_reader.records().flatten() {
if !ids.contains(&rec.id().to_string()) {
fq_writer.write(rec.id(), rec.desc(), rec.seq(), rec.qual())?;
}
}
fq_writer.flush()?;
} else {
let mut rm_writer = fastq::Writer::new(file_writer(&Some(&save), compression_level)?);
for rec in fq_reader.records().flatten() {
if !ids.contains(&rec.id().to_string()) {
fq_writer.write(rec.id(), rec.desc(), rec.seq(), rec.qual())?;
} else {
rm_writer.write(rec.id(), rec.desc(), rec.seq(), rec.qual())?;
}
}
fq_writer.flush()?;
rm_writer.flush()?;
}
fq_writer.flush()?;
rm_writer.flush()?;

info!("time elapsed is: {:?}",start.elapsed());
Ok(())
Expand Down
41 changes: 36 additions & 5 deletions src/rename.rs
Expand Up @@ -8,7 +8,9 @@ use crate::utils::*;
pub fn rename_fastq(
input: &Option<&str>,
keep: bool,
prefix: Option<String>, //&str,
prefix: Option<String>,
label: Option<&str>,
before: bool,
output: &Option<&str>,
compression_level: u32,
) -> Result<()> {
Expand All @@ -18,15 +20,30 @@ pub fn rename_fastq(
} else {
info!("reading from stdin");
}

let fp = fastq::Reader::new(file_reader(input)?);
let mut fo = fastq::Writer::new(file_writer(output, compression_level)?);
let mut n: usize = 0;

if let Some(pre) = prefix {
for rec in fp.records().flatten() {
n += 1;
let newid = format!("{}{}",pre,n);
/*let newid = match label {
Some(x) => {
if before {
format!("{}{}{}",x,pre,n)
} else {
format!("{}{}{}",pre,x,n)
}
},
None => { format!("{}{}",pre,n) }
};*/
let newid = if before {
format!("{}{}{}",label.unwrap_or_default(),pre,n)
} else {
format!("{}{}{}",pre,label.unwrap_or_default(),n)
};

let record = if keep {
Record::with_attrs(&newid, rec.desc(), rec.seq(),rec.qual())
} else {
Expand All @@ -38,10 +55,24 @@ pub fn rename_fastq(
} else {
for rec in fp.records().flatten() {
n += 1;
/*let newid = if let Some(x) = label {
if before {
format!("{}{}",x,rec.id())
} else {
format!("{}{}",rec.id(),x)
}
} else {
format!("{}",rec.id())
};*/
let newid = if before {
format!("{}{}",label.unwrap_or_default(),rec.id())
} else {
format!("{}{}",rec.id(),label.unwrap_or_default())
};
let record = if keep {
Record::with_attrs(rec.id(), rec.desc(), rec.seq(),rec.qual())
Record::with_attrs(&newid, rec.desc(), rec.seq(),rec.qual())
} else {
Record::with_attrs(rec.id(), None, rec.seq(),rec.qual())
Record::with_attrs(&newid, None, rec.seq(),rec.qual())
};
fo.write_record(&record)?;
}
Expand Down
6 changes: 6 additions & 0 deletions src/trimfq.rs
Expand Up @@ -9,6 +9,7 @@ pub fn trim_fq(
file: &Option<&str>,
left: usize,
right: usize,
len: usize,
out: &Option<&str>,
compression_level: u32,
) -> Result<()> {
Expand All @@ -22,15 +23,20 @@ pub fn trim_fq(
let length = right + left;
let fq_reader = fastq::Reader::new(file_reader(file)?);
let mut fq_writer = fastq::Writer::new(file_writer(out, compression_level)?);

for (idx,rec) in fq_reader.records().flatten().enumerate() {
let rlen = rec.seq().len();
if left >= rlen || right>= rlen || length >= rlen {
warn!("read: {} in order {} is short than {} , skip", rec.id(), idx+1, length);
continue;
}

let end = rlen - right;
let seq = &rec.seq()[left..end];
let qual = &rec.qual()[left..end];
if seq.len() < len {
continue;
}
fq_writer.write(rec.id(), rec.desc(), seq, qual)?;
}
fq_writer.flush()?;
Expand Down

0 comments on commit 1dc4666

Please sign in to comment.