Commit c8f56975 authored by Sander van der Zeeuw's avatar Sander van der Zeeuw
Browse files

General refactor Biopet

parent ede07209
......@@ -22,22 +22,22 @@ import org.broadinstitute.gatk.utils.commandline.Input
trait PythonCommandLineFunction extends BiopetCommandLineFunction {
@Input(doc = "Python script", required = false)
var python_script: File = _
var pythonScript: File = _
executable = config("exe", default = "python", submodule = "python", freeVar = false)
protected var python_script_name: String = _
protected var pythonScriptName: String = _
/**
* checks if script already exist in jar otherwise try to fetch from the jar
* @param script name / location of script
*/
def setPythonScript(script: String) {
python_script = new File(script)
if (!python_script.exists()) {
pythonScript = new File(script)
if (!pythonScript.exists()) {
setPythonScript(script, "")
} else {
python_script_name = script
pythonScriptName = script
}
}
......@@ -47,17 +47,17 @@ trait PythonCommandLineFunction extends BiopetCommandLineFunction {
* @param subpackage location of script in jar
*/
def setPythonScript(script: String, subpackage: String) {
python_script_name = script
python_script = new File(".queue/tmp/" + subpackage + python_script_name)
if (!python_script.getParentFile.exists) python_script.getParentFile.mkdirs
val is = getClass.getResourceAsStream(subpackage + python_script_name)
val os = new FileOutputStream(python_script)
pythonScriptName = script
pythonScript = new File(".queue/tmp/" + subpackage + pythonScriptName)
if (!pythonScript.getParentFile.exists) pythonScript.getParentFile.mkdirs
val is = getClass.getResourceAsStream(subpackage + pythonScriptName)
val os = new FileOutputStream(pythonScript)
org.apache.commons.io.IOUtils.copy(is, os)
os.close()
}
/** return basic command to prefix the complete command with */
def getPythonCommand: String = {
required(executable) + required(python_script)
required(executable) + required(pythonScript)
}
}
......@@ -44,29 +44,29 @@ class Cufflinks(val root: Configurable) extends BiopetCommandLineFunction with V
@Output(doc = "Output GTF file")
lazy val outputGtf: File = {
require(input != null && output_dir != null,
require(input != null && outputDir != null,
"Can not set Cufflinks GTF output while input file and/or output directory is not defined")
// cufflinks always outputs a transcripts.gtf file in the output directory
new File(output_dir, "transcripts.gtf")
new File(outputDir, "transcripts.gtf")
}
@Output(doc = "Output isoform FPKM file")
lazy val outputIsoformsFpkm: File = {
require(input != null && output_dir != null,
require(input != null && outputDir != null,
"Can not set Cufflinks isoforms.fpkm_tracking output while input file and/or output directory is not defined")
new File(output_dir, "isoforms.fpkm_tracking")
new File(outputDir, "isoforms.fpkm_tracking")
}
@Output(doc = "Output GTF file")
lazy val outputGenesFpkm: File = {
require(input != null && output_dir != null,
require(input != null && outputDir != null,
"Can not set Cufflinks genes.fpkm_tracking output while input file and/or output directory is not defined")
// cufflinks always outputs a genes.fpkm_tracking file in the output directory
new File(output_dir, "genes.fpkm_tracking")
new File(outputDir, "genes.fpkm_tracking")
}
/** write all output files to this directory [./] */
var output_dir: File = config("output_dir", default = new File("."))
var outputDir: File = config("output_dir", default = new File("."))
/** value of random number generator seed [0] */
var seed: Option[Int] = config("seed")
......@@ -75,106 +75,106 @@ class Cufflinks(val root: Configurable) extends BiopetCommandLineFunction with V
var GTF: Option[File] = config("GTF")
/** use reference transcript annotation to guide assembly */
var GTF_guide: Option[File] = config("GTF_guide")
var gtfGuide: Option[File] = config("GTF_guide")
/** ignore all alignment within transcripts in this file */
var mask_file: Option[File] = config("mask_file")
var maskFile: Option[File] = config("mask_file")
/** use bias correction - reference fasta required [NULL] */
var frag_bias_correct: Option[String] = config("frag_bias_correct")
var fragBiasCorrect: Option[String] = config("frag_bias_correct")
/** use 'rescue method' for multi-reads (more accurate) [FALSE] */
var multi_read_correct: Boolean = config("multi_read_correct", default = false)
var multiReadCorrect: Boolean = config("multi_read_correct", default = false)
/** library prep used for input reads [below] */
var library_type: Option[String] = config("library_type")
var libraryType: Option[String] = config("library_type")
/** Method used to normalize library sizes [below] */
var library_norm_method: Option[String] = config("library_norm_method")
var libraryNormMethod: Option[String] = config("library_norm_method")
/** average fragment length (unpaired reads only) [200] */
var frag_len_mean: Option[Int] = config("frag_len_mean")
var fragLenMean: Option[Int] = config("frag_len_mean")
/** fragment length std deviation (unpaired reads only) [80] */
var frag_len_std_dev: Option[Int] = config("frag_len_std_dev")
var fragLenStdDev: Option[Int] = config("frag_len_std_dev")
/** maximum iterations allowed for MLE calculation [5000] */
var max_mle_iterations: Option[Int] = config("max_mle_iterations")
var maxMleIterations: Option[Int] = config("max_mle_iterations")
/** count hits compatible with reference RNAs only [FALSE] */
var compatible_hits_norm: Boolean = config("compatible_hits_norm", default = false)
var compatibleHitsNorm: Boolean = config("compatible_hits_norm", default = false)
/** count all hits for normalization [TRUE] */
var total_hits_norm: Boolean = config("total_hits_norm", default = true)
var totalHitsNorm: Boolean = config("total_hits_norm", default = true)
/** Number of fragment generation samples [100] */
var num_frag_count_draws: Option[Int] = config("num_frag_count_draws")
var numFragCountDraws: Option[Int] = config("num_frag_count_draws")
/** Number of fragment assignment samples per generation [50] */
var num_frag_assign_draws: Option[Int] = config("num_frag_assign_draws")
var numFragAssignDraws: Option[Int] = config("num_frag_assign_draws")
/** Maximum number of alignments allowed per fragment [unlim] */
var max_frag_multihits: Option[Int] = config("max_frag_multihits")
var maxFragMultihits: Option[Int] = config("max_frag_multihits")
/** No effective length correction [FALSE] */
var no_effective_length_correction: Boolean = config("no_effective_length_correction", default = false)
var noEffectiveLengthCorrection: Boolean = config("no_effective_length_correction", default = false)
/** No length correction [FALSE] */
var no_length_correction: Boolean = config("no_length_correction", default = false)
var noLengthCorrection: Boolean = config("no_length_correction", default = false)
/** assembled transcripts have this ID prefix [CUFF] */
var label: Option[String] = config("label")
/** suppress transcripts below this abundance level [0.10] */
var min_isoform_fraction: Option[Float] = config("min_isoform_fraction")
var minIsoformFraction: Option[Float] = config("min_isoform_fraction")
/** suppress intra-intronic transcripts below this level [0.15] */
var pre_mrna_fraction: Option[Float] = config("pre_mrna_fraction")
var preMrnaFraction: Option[Float] = config("pre_mrna_fraction")
/** ignore alignments with gaps longer than this [300000] */
var max_intron_length: Option[Int] = config("max_intron_length")
var maxIntronLength: Option[Int] = config("max_intron_length")
/** alpha for junction binomial test filter [0.001] */
var junc_alpha: Option[Float] = config("junc_alpha")
var juncAlpha: Option[Float] = config("junc_alpha")
/** percent read overhang taken as 'suspiciously small' [0.09] */
var small_anchor_fraction: Option[Float] = config("small_anchor_fraction")
var smallAnchorFraction: Option[Float] = config("small_anchor_fraction")
/** minimum number of fragments needed for new transfrags [10] */
var min_frags_per_transfrag: Option[Int] = config("min_frags_per_transfrag")
var minFragsPerTransfrag: Option[Int] = config("min_frags_per_transfrag")
/** number of terminal exon bp to tolerate in introns [8] */
var overhang_tolerance: Option[Int] = config("overhang_tolerance")
var overhangTolerance: Option[Int] = config("overhang_tolerance")
/** maximum genomic length allowed for a given bundle [3500000] */
var max_bundle_length: Option[Int] = config("max_bundle_length")
var maxBundleLength: Option[Int] = config("max_bundle_length")
/** maximum fragments allowed in a bundle before skipping [500000] */
var max_bundle_frags: Option[Int] = config("max_bundle_frags")
var maxBundleFrags: Option[Int] = config("max_bundle_frags")
/** minimum intron size allowed in genome [50] */
var min_intron_length: Option[Int] = config("min_intron_length")
var minIntronLength: Option[Int] = config("min_intron_length")
/** minimum avg coverage required to attempt 3' trimming [10] */
var trim_3_avgcov_thresh: Option[Int] = config("trim_3_avgcov_thresh")
var trim3AvgCovThresh: Option[Int] = config("trim_3_avgcov_thresh")
/** fraction of avg coverage below which to trim 3' end [0.1] */
var trim_3_dropoff_frac: Option[Float] = config("trim_3_dropoff_frac")
var trim3DropOffFrac: Option[Float] = config("trim_3_dropoff_frac")
/** maximum fraction of allowed multireads per transcript [0.75] */
var max_multiread_fraction: Option[Float] = config("max_multiread_fraction")
var maxMultireadFraction: Option[Float] = config("max_multiread_fraction")
/** maximum gap size to fill between transfrags (in bp) [50] */
var overlap_radius: Option[Int] = config("overlap_radius")
var overlapRadius: Option[Int] = config("overlap_radius")
/** disable tiling by faux reads [FALSE] */
var no_faux_reads: Boolean = config("no_faux_reads", default = false)
var noFauxReads: Boolean = config("no_faux_reads", default = false)
/** overhang allowed on 3' end when merging with reference [600] */
var flag_3_overhang_tolerance: Option[Int] = config("flag_3_overhang_tolerance")
var flag3OverhangTolerance: Option[Int] = config("flag_3_overhang_tolerance")
/** overhang allowed inside reference intron when merging [30] */
var intron_overhang_tolerance: Option[Int] = config("intron_overhang_tolerance")
var intronOverhangTolerance: Option[Int] = config("intron_overhang_tolerance")
/** log-friendly verbose processing (no progress bar) [FALSE] */
var verbose: Boolean = config("verbose", default = false)
......@@ -183,7 +183,7 @@ class Cufflinks(val root: Configurable) extends BiopetCommandLineFunction with V
var quiet: Boolean = config("quiet", default = false)
/** do not contact server to check for update availability [FALSE] */
var no_update_check: Boolean = config("no_update_check", default = false)
var noUpdateCheck: Boolean = config("no_update_check", default = false)
def versionRegex = """cufflinks v(.*)""".r
def versionCommand = executable
......@@ -191,46 +191,46 @@ class Cufflinks(val root: Configurable) extends BiopetCommandLineFunction with V
def cmdLine =
required(executable) +
required("--output-dir", output_dir) +
required("--output-dir", outputDir) +
optional("--num-threads", threads) +
optional("--seed", seed) +
optional("--GTF", GTF) +
optional("--GTF-guide", GTF_guide) +
optional("--mask-file", mask_file) +
optional("--frag-bias-correct", frag_bias_correct) +
conditional(multi_read_correct, "--multi-read-correct") +
optional("--library-type", library_type) +
optional("--library-norm-method", library_norm_method) +
optional("--frag-len-mean", frag_len_mean) +
optional("--frag-len-std-dev", frag_len_std_dev) +
optional("--max-mle-iterations", max_mle_iterations) +
conditional(compatible_hits_norm, "--compatible-hits-norm") +
conditional(total_hits_norm, "--total-hits-norm") +
optional("--num-frag-count-draws", num_frag_count_draws) +
optional("--num-frag-assign-draws", num_frag_assign_draws) +
optional("--max-frag-multihits", max_frag_multihits) +
conditional(no_effective_length_correction, "--no-effective-length-correction") +
conditional(no_length_correction, "--no-length-correction") +
optional("--GTF-guide", gtfGuide) +
optional("--mask-file", maskFile) +
optional("--frag-bias-correct", fragBiasCorrect) +
conditional(multiReadCorrect, "--multi-read-correct") +
optional("--library-type", libraryType) +
optional("--library-norm-method", libraryNormMethod) +
optional("--frag-len-mean", fragLenMean) +
optional("--frag-len-std-dev", fragLenStdDev) +
optional("--max-mle-iterations", maxMleIterations) +
conditional(compatibleHitsNorm, "--compatible-hits-norm") +
conditional(totalHitsNorm, "--total-hits-norm") +
optional("--num-frag-count-draws", numFragCountDraws) +
optional("--num-frag-assign-draws", numFragAssignDraws) +
optional("--max-frag-multihits", maxFragMultihits) +
conditional(noEffectiveLengthCorrection, "--no-effective-length-correction") +
conditional(noLengthCorrection, "--no-length-correction") +
optional("--label", label) +
optional("--min-isoform-fraction", min_isoform_fraction) +
optional("--pre-mrna-fraction", pre_mrna_fraction) +
optional("--max-intron-length", max_intron_length) +
optional("--junc-alpha", junc_alpha) +
optional("--small-anchor-fraction", small_anchor_fraction) +
optional("--min-frags-per-transfrag", min_frags_per_transfrag) +
optional("--overhang-tolerance", overhang_tolerance) +
optional("--max-bundle-length", max_bundle_length) +
optional("--max-bundle-frags", max_bundle_frags) +
optional("--min-intron-length", min_intron_length) +
optional("--trim-3-avgcov-thresh", trim_3_avgcov_thresh) +
optional("--trim-3-dropoff-frac", trim_3_dropoff_frac) +
optional("--max-multiread-fraction", max_multiread_fraction) +
optional("--overlap-radius", overlap_radius) +
conditional(no_faux_reads, "--no-faux-reads") +
optional("--flag-3-overhang-tolerance", flag_3_overhang_tolerance) +
optional("--intron-overhang-tolerance", intron_overhang_tolerance) +
optional("--min-isoform-fraction", minIsoformFraction) +
optional("--pre-mrna-fraction", preMrnaFraction) +
optional("--max-intron-length", maxIntronLength) +
optional("--junc-alpha", juncAlpha) +
optional("--small-anchor-fraction", smallAnchorFraction) +
optional("--min-frags-per-transfrag", minFragsPerTransfrag) +
optional("--overhang-tolerance", overhangTolerance) +
optional("--max-bundle-length", maxBundleLength) +
optional("--max-bundle-frags", maxBundleFrags) +
optional("--min-intron-length", minIntronLength) +
optional("--trim-3-avgcov-thresh", trim3AvgCovThresh) +
optional("--trim-3-dropoff-frac", trim3DropOffFrac) +
optional("--max-multiread-fraction", maxMultireadFraction) +
optional("--overlap-radius", overlapRadius) +
conditional(noFauxReads, "--no-faux-reads") +
optional("--flag-3-overhang-tolerance", flag3OverhangTolerance) +
optional("--intron-overhang-tolerance", intronOverhangTolerance) +
conditional(verbose, "--verbose") +
conditional(quiet, "--quiet") +
conditional(no_update_check, "--no-update-check") +
conditional(noUpdateCheck, "--no-update-check") +
required(input)
}
......@@ -40,46 +40,46 @@ class Cuffquant(val root: Configurable) extends BiopetCommandLineFunction with V
/** input GTF file */
@Input(doc = "Input GTF file", required = true)
var transcripts_gtf: File = null
var transcriptsGtf: File = null
/** output file, computed automatically from output directory */
@Output(doc = "Output CXB file")
lazy val outputCxb: File = {
require(output_dir != null,
require(outputDir != null,
"Can not set Cuffquant CXB output while input file and/or output directory is not defined")
// cufflinks always outputs a transcripts.gtf file in the output directory
new File(output_dir, "abundances.cxb")
new File(outputDir, "abundances.cxb")
}
/** write all output files to this directory [./] */
var output_dir: File = config("output_dir", default = new File("."))
var outputDir: File = config("output_dir", default = new File("."))
/** ignore all alignment within transcripts in this file */
var mask_file: Option[File] = config("mask_file")
var maskFile: Option[File] = config("mask_file")
/** use bias correction - reference fasta required [NULL] */
var frag_bias_correct: Option[String] = config("frag_bias_correct")
var fragBiasCorrect: Option[String] = config("frag_bias_correct")
/** use 'rescue method' for multi-reads (more accurate) [FALSE] */
var multi_read_correct: Boolean = config("multi_read_correct", default = false)
var multiReadCorrect: Boolean = config("multi_read_correct", default = false)
/** number of threads used during analysis [1] */
var num_threads: Option[Int] = config("num_threads")
var numThreads: Option[Int] = config("num_threads")
/** library prep used for input reads [below] */
var library_type: Option[String] = config("library_type")
var libraryType: Option[String] = config("library_type")
/** average fragment length (unpaired reads only) [200] */
var frag_len_mean: Option[Int] = config("frag_len_mean")
var fragLenMean: Option[Int] = config("frag_len_mean")
/** fragment length std deviation (unpaired reads only) [80] */
var frag_len_std_dev: Option[Int] = config("frag_len_std_dev")
var fragLenStdDev: Option[Int] = config("frag_len_std_dev")
/** minimum number of alignments in a locus for testing [10] */
var min_alignment_count: Option[Int] = config("min_alignment_count")
var minAlignmentCount: Option[Int] = config("min_alignment_count")
/** maximum iterations allowed for MLE calculation [5000] */
var max_mle_iterations: Option[Int] = config("max_mle_iterations")
var maxMleIterations: Option[Int] = config("max_mle_iterations")
/** log-friendly verbose processing (no progress bar) [FALSE] */
var verbose: Boolean = config("verbose", default = false)
......@@ -91,31 +91,31 @@ class Cuffquant(val root: Configurable) extends BiopetCommandLineFunction with V
var seed: Option[Int] = config("seed")
/** do not contact server to check for update availability [FALSE] */
var no_update_check: Boolean = config("no_update_check", default = false)
var noUpdateCheck: Boolean = config("no_update_check", default = false)
/** maximum fragments allowed in a bundle before skipping [500000] */
var max_bundle_frags: Option[Int] = config("max_bundle_frags")
var maxBundleFrags: Option[Int] = config("max_bundle_frags")
/** Maximum number of alignments allowed per fragment [unlim] */
var max_frag_multihits: Option[Int] = config("max_frag_multihits")
var maxFragMultihits: Option[Int] = config("max_frag_multihits")
/** No effective length correction [FALSE] */
var no_effective_length_correction: Boolean = config("no_effective_length_correction", default = false)
var noEffectiveLengthCorrection: Boolean = config("no_effective_length_correction", default = false)
/** No length correction [FALSE] */
var no_length_correction: Boolean = config("no_length_correction", default = false)
var noLengthCorrection: Boolean = config("no_length_correction", default = false)
/** Skip a random subset of reads this size [0.0] */
var read_skip_fraction: Option[Double] = config("read_skip_fraction")
var readSkipFraction: Option[Double] = config("read_skip_fraction")
/** Break all read pairs [FALSE] */
var no_read_pairs: Boolean = config("no_read_pairs", default = false)
var noReadPairs: Boolean = config("no_read_pairs", default = false)
/** Trim reads to be this long (keep 5' end) [none] */
var trim_read_length: Option[Int] = config("trim_read_length")
var trimReadLength: Option[Int] = config("trim_read_length")
/** Disable SCV correction */
var no_scv_correction: Boolean = config("no_scv_correction", default = false)
var noScvCorrection: Boolean = config("no_scv_correction", default = false)
def versionRegex = """cuffquant v(.*)""".r
def versionCommand = executable
......@@ -123,28 +123,28 @@ class Cuffquant(val root: Configurable) extends BiopetCommandLineFunction with V
def cmdLine =
required(executable) +
required("--output-dir", output_dir) +
optional("--mask-file", mask_file) +
optional("--frag-bias-correct", frag_bias_correct) +
conditional(multi_read_correct, "--multi-read-correct") +
optional("--num-threads", num_threads) +
optional("--library-type", library_type) +
optional("--frag-len-mean", frag_len_mean) +
optional("--frag-len-std-dev", frag_len_std_dev) +
optional("--min-alignment-count", min_alignment_count) +
optional("--max-mle-iterations", max_mle_iterations) +
required("--output-dir", outputDir) +
optional("--mask-file", maskFile) +
optional("--frag-bias-correct", fragBiasCorrect) +
conditional(multiReadCorrect, "--multi-read-correct") +
optional("--num-threads", numThreads) +
optional("--library-type", libraryType) +
optional("--frag-len-mean", fragLenMean) +
optional("--frag-len-std-dev", fragLenStdDev) +
optional("--min-alignment-count", minAlignmentCount) +
optional("--max-mle-iterations", maxMleIterations) +
conditional(verbose, "--verbose") +
conditional(quiet, "--quiet") +
optional("--seed", seed) +
conditional(no_update_check, "--no-update-check") +
optional("--max-bundle-frags", max_bundle_frags) +
optional("--max-frag-multihits", max_frag_multihits) +
conditional(no_effective_length_correction, "--no-effective-length-correction") +
conditional(no_length_correction, "--no-length-correction") +
optional("--read-skip-fraction", read_skip_fraction) +
conditional(no_read_pairs, "--no-read-pairs") +
optional("--trim-read-length", trim_read_length) +
conditional(no_scv_correction, "--no-scv-correction") +
required(transcripts_gtf) +
conditional(noUpdateCheck, "--no-update-check") +
optional("--max-bundle-frags", maxBundleFrags) +
optional("--max-frag-multihits", maxFragMultihits) +
conditional(noEffectiveLengthCorrection, "--no-effective-length-correction") +
conditional(noLengthCorrection, "--no-length-correction") +
optional("--read-skip-fraction", readSkipFraction) +
conditional(noReadPairs, "--no-read-pairs") +
optional("--trim-read-length", trimReadLength) +
conditional(noScvCorrection, "--no-scv-correction") +
required(transcriptsGtf) +
required(input.map(_.mkString(";").mkString(" ")))
}
......@@ -192,7 +192,7 @@ class Cutadapt(val root: Configurable) extends BiopetCommandLineFunction with Su
"bpoutput" -> 0,
"toomanyn" -> 0
)
val adapter_stats: mutable.Map[String, Long] = mutable.Map()
val adapterStats: mutable.Map[String, Long] = mutable.Map()
if (statsOutput.exists) {
val statsFile = Source.fromFile(statsOutput)
......@@ -206,7 +206,7 @@ class Cutadapt(val root: Configurable) extends BiopetCommandLineFunction with Su
case tooManyN(m) => stats("toomanyn") = m.replaceAll(",", "").toLong
case basePairsProcessed(m) => stats("bpinput") = m.replaceAll(",", "").toLong
case basePairsWritten(m) => stats("bpoutput") = m.replaceAll(",", "").toLong
case adapterR(adapter, count) => adapter_stats += (adapter -> count.toLong)
case adapterR(adapter, count) => adapterStats += (adapter -> count.toLong)
case _ =>
}
}
......@@ -224,7 +224,7 @@ class Cutadapt(val root: Configurable) extends BiopetCommandLineFunction with Su
"num_reads_discarded_many_n" -> stats("toomanyn"),
"num_bases_input" -> stats("bpinput"),
"num_based_output" -> stats("bpoutput"),
adaptersStatsName -> adapter_stats.toMap
adaptersStatsName -> adapterStats.toMap
)
}
......
......@@ -40,7 +40,7 @@ class Fastqc(val root: Configurable) extends BiopetCommandLineFunction with Vers
var output: File = null
executable = config("exe", default = "fastqc")
var java_exe: String = config("exe", default = "java", submodule = "java", freeVar = false)
var javaExe: String = config("exe", default = "java", submodule = "java", freeVar = false)
var kmers: Option[Int] = config("kmers")
var quiet: Boolean = config("quiet", default = false)
var noextract: Boolean = config("noextract", default = false)
......@@ -85,7 +85,7 @@ class Fastqc(val root: Configurable) extends BiopetCommandLineFunction with Vers
/** return commandline to execute */
def cmdLine = required(executable) +
optional("--java", java_exe) +
optional("--java", javaExe) +
optional("--threads", threads) +
optional("--contaminants", contaminants) +
optional("--adapters", adapters) +
......
......@@ -31,22 +31,22 @@ import scala.io.Source
*/
class Sickle(val root: Configurable) extends BiopetCommandLineFunction with Summarizable with Version {
@Input(doc = "R1 input")
var input_R1: File = _
var inputR1: File = _
@Input(doc = "R2 input", required = false)
var input_R2: File = _
var inputR2: File = _
@Output(doc = "R1 output", required = false)
var output_R1: File = _
var outputR1: File = _
@Output(doc = "R2 output", required = false)
var output_R2: File = _
var outputR2: File = _
@Output(doc = "singles output", required = false)
var output_singles: File = _
var outputSingles: File = _