package fr.ens.biologie.genomique.eoulsan.modules.mapping;
import static fr.ens.biologie.genomique.eoulsan.CommonHadoop.HADOOP_REDUCER_TASK_COUNT_PARAMETER_NAME;
import static fr.ens.biologie.genomique.eoulsan.core.InputPortsBuilder.singleInputPort;
import static fr.ens.biologie.genomique.eoulsan.data.DataFormats.MAPPER_RESULTS_BAM;
import static fr.ens.biologie.genomique.eoulsan.data.DataFormats.MAPPER_RESULTS_INDEX_BAI;
import static fr.ens.biologie.genomique.eoulsan.data.DataFormats.MAPPER_RESULTS_SAM;
import java.util.Set;
import fr.ens.biologie.genomique.eoulsan.EoulsanException;
import fr.ens.biologie.genomique.eoulsan.Globals;
import fr.ens.biologie.genomique.eoulsan.core.InputPorts;
import fr.ens.biologie.genomique.eoulsan.core.Modules;
import fr.ens.biologie.genomique.eoulsan.core.OutputPorts;
import fr.ens.biologie.genomique.eoulsan.core.OutputPortsBuilder;
import fr.ens.biologie.genomique.eoulsan.core.Parameter;
import fr.ens.biologie.genomique.eoulsan.core.StepConfigurationContext;
import fr.ens.biologie.genomique.eoulsan.core.Version;
import fr.ens.biologie.genomique.eoulsan.modules.AbstractModule;
/**
* This class define a module for converting SAM files into BAM.
* @since 2.0
* @author Laurent Jourdren
*/
public abstract class AbstractSAM2BAMModule extends AbstractModule {
private static final String MODULE_NAME = "sam2bam";
private static final int DEFAULT_COMPRESSION_LEVEL = 5;
protected static final String COUNTER_GROUP = "sam2bam";
private int compressionLevel = DEFAULT_COMPRESSION_LEVEL;
private int reducerTaskCount = -1;
//
// Getters
//
/**
* Get the compression level to use.
* @return the compression level to use
*/
protected int getCompressionLevel() {
return this.compressionLevel;
}
/**
* Get the reducer task count.
* @return the reducer task count
*/
protected int getReducerTaskCount() {
return this.reducerTaskCount;
}
//
// Module methods
//
@Override
public String getName() {
return MODULE_NAME;
}
@Override
public String getDescription() {
return "This module sam convert SAM files to BAM files.";
}
@Override
public Version getVersion() {
return Globals.APP_VERSION;
}
@Override
public InputPorts getInputPorts() {
return singleInputPort(MAPPER_RESULTS_SAM);
}
@Override
public OutputPorts getOutputPorts() {
return new OutputPortsBuilder().addPort("bam", MAPPER_RESULTS_BAM)
.addPort("bai", MAPPER_RESULTS_INDEX_BAI).create();
}
@Override
public void configure(final StepConfigurationContext context,
final Set<Parameter> stepParameters) throws EoulsanException {
for (Parameter p : stepParameters) {
switch (p.getName()) {
case "compression.level":
this.compressionLevel = p.getIntValueInRange(0, 9);
break;
case "input.format":
Modules.deprecatedParameter(context, p, true);
break;
case HADOOP_REDUCER_TASK_COUNT_PARAMETER_NAME:
this.reducerTaskCount = p.getIntValueGreaterOrEqualsTo(1);
break;
default:
Modules.unknownParameter(context, p);
}
}
}
}