package io.vivarium.scripts;
import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import io.vivarium.core.processor.NeuralNetwork;
import io.vivarium.core.processor.Processor;
import io.vivarium.serialization.FileIO;
import io.vivarium.serialization.Format;
import io.vivarium.serialization.VivariumObjectCollection;
public class MeasureProcessorGenomeLengths extends CommonsScript
{
private static final String INPUT_FILE = "input";
public MeasureProcessorGenomeLengths(String[] args)
{
super(args);
}
@Override
protected List<Option> getScriptSpecificOptions()
{
LinkedList<Option> options = new LinkedList<>();
options.add(Option
.builder("i")
.required(true)
.longOpt(INPUT_FILE)
.hasArg(true)
.argName("FILE")
.desc("file to load processors from.")
.build());
return options;
}
@Override
protected String getExtraArgString()
{
return "";
}
@Override
protected String getUsageHeader()
{
return "Measures the length of all genomes for all processors in a file and prints them in ascending order, seperated by newlines.";
}
@Override
protected void run(CommandLine commandLine)
{
// Load the file
String inputFile = commandLine.getOptionValue(INPUT_FILE);
VivariumObjectCollection collection = FileIO.loadObjectCollection(inputFile, Format.JSON);
Collection<Processor> processors = collection.getAll(Processor.class);
double[] lengths = run(processors);
for (double length : lengths)
{
System.out.println(length);
}
}
public double[] run(Collection<Processor> processors)
{
double[] lengths = new double[processors.size()];
int lengthIndex = 0;
for (Processor processor : processors)
{
NeuralNetwork nn = (NeuralNetwork) processor;
lengths[lengthIndex++] = nn.getGenomeLength();
}
Arrays.sort(lengths);
return lengths;
}
public static void main(String[] args)
{
new MeasureProcessorGenomeLengths(args);
}
}