File: ClustalW.java

package info (click to toggle)
libjaba-client-java 2.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 2,052 kB
  • sloc: java: 17,308; makefile: 12
file content (120 lines) | stat: -rw-r--r-- 3,799 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/* Copyright (c) 2011 Peter Troshin
 *  
 *  JAva Bioinformatics Analysis Web Services (JABAWS) @version: 2.0     
 * 
 *  This library is free software; you can redistribute it and/or modify it under the terms of the
 *  Apache License version 2 as published by the Apache Software Foundation
 * 
 *  This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Apache 
 *  License for more details.
 * 
 *  A copy of the license is in apache_license.txt. It is also available here:
 * @see: http://www.apache.org/licenses/LICENSE-2.0.txt
 * 
 * Any republication or derived work distributed in source code form
 * must include this copyright and license notice.
 */

package compbio.runner.msa;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

import org.apache.log4j.Logger;

import compbio.data.sequence.Alignment;
import compbio.data.sequence.UnknownFileFormatException;
import compbio.engine.client.SkeletalExecutable;
import compbio.metadata.ResultNotAvailableException;
import compbio.runner.RunnerUtil;

public class ClustalW extends SkeletalExecutable<ClustalW> {

	private static Logger log = Logger.getLogger(ClustalW.class);
	private static final String EXEC_STAT_FILE = "stat.log";
	private static final String TREE_FILE_EXT = ".dnd";

	public static final String KEY_VALUE_SEPARATOR = "=";

	public ClustalW() {
		super(KEY_VALUE_SEPARATOR);
		addParameters(Arrays.asList("-OUTORDER=ALIGNED", "-QUIET", "-STATS="
				+ EXEC_STAT_FILE));
		// set default in, outs and err files
		this.setInput(super.inputFile);
		this.setOutput(super.outputFile);
		this.setError(super.errorFile);
	}

	@Override
	public ClustalW setOutput(String outFile) {
		super.setOutput(outFile);
		cbuilder.setParam("-OUTFILE=" + outFile);
		return this;
	}

	@Override
	public ClustalW setInput(String inFile) {
		super.setInput(inFile);
		cbuilder.setParam("-INFILE=" + inFile);
		return this;
	}

	@SuppressWarnings("unchecked")
	public Alignment getResults(String workDirectory)
			throws ResultNotAvailableException {
		try {
			return RunnerUtil.readClustalFile(workDirectory, getOutput());
		} catch (FileNotFoundException e) {
			log.error(e.getMessage(), e.getCause());
			throw new ResultNotAvailableException(e);
		} catch (IOException e) {
			log.error(e.getMessage(), e.getCause());
			throw new ResultNotAvailableException(e);
		} catch (UnknownFileFormatException e) {
			log.error(e.getMessage(), e.getCause());
			throw new ResultNotAvailableException(e);
		} catch (NullPointerException e) {
			log.error(e.getMessage(), e.getCause());
			throw new ResultNotAvailableException(e);
		}
	}

	@Override
	public List<String> getCreatedFiles() {
		return Arrays.asList(getOutput(), EXEC_STAT_FILE,
				convertInputNameToTreeName());
	}

	/**
	 * Clustal output tree with same name as input file but .dnd extension e.g.
	 * this methods do similar conversion TO122.fasta -> TO122.dnd or
	 * TO122.fasta.in -> TO122.fasta.dnd It does not seems that there is any
	 * limits on the name length
	 * 
	 * @return
	 */
	private String convertInputNameToTreeName() {
		assert super.getInput() != null;
		int dotIdx = getInput().lastIndexOf(".");
		String treeFileName = "";
		if (dotIdx > 0) {
			treeFileName = getInput().substring(0, dotIdx);
		}
		return treeFileName + TREE_FILE_EXT;
	}

	public static String getStatFile() {
		return EXEC_STAT_FILE;
	}

	@SuppressWarnings("unchecked")
	@Override
	public Class<ClustalW> getType() {
		return (Class<ClustalW>) this.getClass();
	}

}