use of de.bioforscher.jstructure.model.feature.ComputationException in project jstructure by JonStargaryen.
the class ProteinLigandInteractionProfiler method annotatePolymerInteractions.
private InteractionContainer annotatePolymerInteractions(Chain chain) {
try {
Path outputDirectoryPath = createTemporaryOutputDirectory();
Structure structure = chain.getParentStructure();
String[] commandLineCall = composePolymerCommandLineCall(structure, outputDirectoryPath, chain.getChainIdentifier().getChainId());
// execute command
executeCommandLineCall(commandLineCall);
Path outputPath = outputDirectoryPath.resolve("report.xml");
Document document = Jsoup.parse(outputPath.toFile(), "UTF-8");
return parseDocument(structure, document);
} catch (Exception e) {
throw new ComputationException(e);
}
}
use of de.bioforscher.jstructure.model.feature.ComputationException in project jstructure by JonStargaryen.
the class SiftsMappingAnnotator method processInternally.
@Override
protected void processInternally(Structure protein) {
try {
Document document = downloadXml(protein.getProteinIdentifier().getPdbId());
protein.chainsWithAminoAcids().forEach(chain -> processInternally(document, chain));
} catch (NullPointerException e) {
throw new ComputationException("protein did not provide pdbId, thus, cannot be mapped to UniProt");
}
}
use of de.bioforscher.jstructure.model.feature.ComputationException in project jstructure by JonStargaryen.
the class TMAlignService method process.
private synchronized TMAlignAlignmentResult process(String[] arguments, int run) throws AlignmentException {
try {
logger.debug("spawning tmalign process with arguments:{}{}", System.lineSeparator(), arguments);
ProcessBuilder processBuilder = new ProcessBuilder(arguments);
Process process = processBuilder.start();
List<String> outputLines;
try (BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
outputLines = br.lines().collect(Collectors.toList());
}
List<String> errorLines;
try (BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {
errorLines = br.lines().collect(Collectors.toList());
}
process.waitFor();
if (outputLines.stream().anyMatch(line -> line.startsWith("Can not open file:"))) {
throw new ComputationException("error during tmalign execution:" + System.lineSeparator() + outputLines.stream().collect(Collectors.joining(System.lineSeparator())));
}
// errors are not reported in error stream
if (!errorLines.isEmpty()) {
throw new ComputationException("error during tmalign execution:" + System.lineSeparator() + errorLines.stream().collect(Collectors.joining(System.lineSeparator())));
}
int length1 = 0;
int length2 = 0;
int alignedLength = 0;
RootMeanSquareDeviation rootMeanSquareDeviation = null;
double seqId = 0;
TemplateModelingScore templateModelingScore1 = null;
TemplateModelingScore templateModelingScore2 = null;
for (String outputLine : outputLines) {
if (outputLine.startsWith("Length of Chain_1")) {
length1 = Integer.valueOf(outputLine.split(":")[1].trim().split("\\s+")[0]);
} else if (outputLine.startsWith("Length of Chain_2")) {
length2 = Integer.valueOf(outputLine.split(":")[1].trim().split("\\s+")[0]);
} else if (outputLine.startsWith("Aligned length")) {
String[] split = outputLine.split("=");
alignedLength = Integer.valueOf(split[1].split(",")[0].trim());
rootMeanSquareDeviation = new RootMeanSquareDeviation(Double.valueOf(split[2].split(",")[0].trim()));
seqId = Double.valueOf(split[4].trim());
} else if (outputLine.startsWith("TM-score")) {
double tmscore = Double.valueOf(outputLine.split("=")[1].split("\\(")[0].trim());
TemplateModelingScore templateModelingScore = new TemplateModelingScore(tmscore);
if (outputLine.contains("Chain_1")) {
templateModelingScore1 = templateModelingScore;
} else {
templateModelingScore2 = templateModelingScore;
}
}
}
return new TMAlignAlignmentResult(length1, length2, alignedLength, rootMeanSquareDeviation, seqId, templateModelingScore1, templateModelingScore2);
} catch (Exception e) {
if (run > 3) {
logger.warn("tmalign computation finally failed:{}{}", System.lineSeparator(), Arrays.toString(arguments), e);
throw new AlignmentException("could not run tmalign", e);
}
return process(arguments, run + 1);
}
}
use of de.bioforscher.jstructure.model.feature.ComputationException in project jstructure by JonStargaryen.
the class A03_WriteDatasetCsv method handleLine.
private static Optional<String> handleLine(String line) {
try {
System.out.println(line);
String[] split = line.split(";");
String entryId = split[0];
String pdbId = split[1];
List<Integer> experimentIds = Pattern.compile(",").splitAsStream(split[2].replaceAll("\\[", "").replaceAll("]", "")).map(Integer::valueOf).collect(Collectors.toList());
Structure structure = StructureParser.fromPdbId(pdbId).parse();
Chain chain = structure.chains().findFirst().get();
Start2FoldXmlParser.parseSpecificExperiment(chain, Start2FoldConstants.XML_DIRECTORY.resolve(entryId + ".xml"), experimentIds);
EvolutionaryCouplingParser.parseHotSpotFile(chain, Start2FoldConstants.COUPLING_DIRECTORY.resolve(entryId.toUpperCase() + "_hs.html"));
EQuantParser.parseEQuantFile(chain, Start2FoldConstants.EQUANT_DIRECTORY.resolve(entryId.toLowerCase() + ".equant-small.txt"));
List<AminoAcid> earlyFoldingResidues = chain.aminoAcids().filter(aminoAcid -> aminoAcid.getFeature(Start2FoldResidueAnnotation.class).isEarly()).collect(Collectors.toList());
List<Integer> functionalResidueNumbers = Start2FoldConstants.extractFunctioanlResidueNumbers(split);
List<AminoAcid> functionalResidues = new ArrayList<>();
// do nothing if no annotation of functional residues exists
if (!functionalResidueNumbers.isEmpty()) {
FunctionalResidueParser.parse(chain, functionalResidueNumbers);
chain.aminoAcids().filter(aminoAcid -> aminoAcid.getFeature(FunctionalResidueAnnotation.class).isFunctional()).forEach(functionalResidues::add);
}
List<AminoAcid> aminoAcids = chain.aminoAcids().collect(Collectors.toList());
ProteinGraph conventionalProteinGraph = ProteinGraphFactory.createProteinGraph(chain, ProteinGraphFactory.InteractionScheme.CALPHA8);
return Optional.of(chain.aminoAcids().map(aminoAcid -> {
GenericSecondaryStructure sse = aminoAcid.getFeature(GenericSecondaryStructure.class);
HotSpotScoring hotSpotScoring = aminoAcid.getFeature(HotSpotScoring.class);
PLIPInteractionContainer plipInteractionContainer = aminoAcid.getFeature(PLIPInteractionContainer.class);
PLIPInteractionContainer nonLocalPlipInteractionContainer = new PLIPInteractionContainer(null, plipInteractionContainer.getInteractions().stream().filter(inter -> Math.abs(inter.getPartner1().getResidueIndex() - inter.getPartner2().getResidueIndex()) > 5).collect(Collectors.toList()));
PLIPInteractionContainer localPlipInteractionContainer = new PLIPInteractionContainer(null, plipInteractionContainer.getInteractions().stream().filter(inter -> !nonLocalPlipInteractionContainer.getInteractions().contains(inter)).collect(Collectors.toList()));
String equantScore = "NA";
try {
equantScore = StandardFormat.format(aminoAcid.getFeature(EQuantScore.class).getEvaluation());
} catch (ComputationException e) {
logger.warn("missing equant scoring for {}", aminoAcid);
}
String functionalAnnotation = "NA";
if (functionalResidues.size() > 0) {
functionalAnnotation = functionalResidues.contains(aminoAcid) ? "functional" : "non-functional";
}
ResidueTopologicPropertiesContainer residueTopologicPropertiesContainer = aminoAcid.getFeature(ResidueTopologicPropertiesContainer.class);
double terminusDistance = aminoAcids.indexOf(aminoAcid);
terminusDistance = Math.min(terminusDistance, aminoAcids.size() - terminusDistance);
terminusDistance /= (double) aminoAcids.size();
return pdbId + "," + "A" + "," + aminoAcid.getResidueIdentifier() + "," + aminoAcid.getOneLetterCode() + "," + sse.getSecondaryStructure().getReducedRepresentation() + "," + sse.getSecondaryStructure().getOneLetterRepresentation() + "," + sse.getSurroundingSecondaryStructureElement(aminoAcid).getSize() + "," + (aminoAcid.getFeature(AccessibleSurfaceArea.class).isExposed() ? "exposed" : "buried") + "," + StandardFormat.format(aminoAcid.getFeature(GeometricProperties.class).getDistanceToCentroid()) + "," + StandardFormat.format(terminusDistance) + "," + plipInteractionContainer.getHydrogenBonds().size() + "," + plipInteractionContainer.getHydrophobicInteractions().size() + "," + plipInteractionContainer.getBackboneInteractions().size() + "," + plipInteractionContainer.getInteractions().size() + "," + localPlipInteractionContainer.getHydrogenBonds().size() + "," + localPlipInteractionContainer.getHydrophobicInteractions().size() + "," + localPlipInteractionContainer.getBackboneInteractions().size() + "," + localPlipInteractionContainer.getInteractions().size() + "," + nonLocalPlipInteractionContainer.getHydrogenBonds().size() + "," + nonLocalPlipInteractionContainer.getHydrophobicInteractions().size() + "," + nonLocalPlipInteractionContainer.getBackboneInteractions().size() + "," + nonLocalPlipInteractionContainer.getInteractions().size() + "," + StandardFormat.format(aminoAcid.getFeature(EnergyProfile.class).getSolvationEnergy()) + "," + StandardFormat.format(aminoAcid.getFeature(EgorAgreement.class).getEgorPrediction()) + "," + equantScore + "," + StandardFormat.format(aminoAcid.getFeature(AccessibleSurfaceArea.class).getRelativeAccessibleSurfaceArea()) + "," + StandardFormat.format(aminoAcid.getFeature(LoopFraction.class).getLoopFraction()) + "," + hotSpotScoring.getEcCount() + "," + StandardFormat.format(hotSpotScoring.getCumStrength()) + "," + StandardFormat.format(hotSpotScoring.getEcStrength()) + "," + hotSpotScoring.getConservation() + "," + StandardFormat.format(residueTopologicPropertiesContainer.getFullPlip().getBetweenness()) + "," + StandardFormat.format(residueTopologicPropertiesContainer.getFullPlip().getCloseness()) + "," + StandardFormat.format(residueTopologicPropertiesContainer.getFullPlip().getClusteringCoefficient()) + "," + StandardFormat.format(residueTopologicPropertiesContainer.getHydrogenPlip().getBetweenness()) + "," + StandardFormat.format(residueTopologicPropertiesContainer.getHydrogenPlip().getCloseness()) + "," + StandardFormat.format(residueTopologicPropertiesContainer.getHydrogenPlip().getClusteringCoefficient()) + "," + StandardFormat.format(residueTopologicPropertiesContainer.getHydrophobicPlip().getBetweenness()) + "," + StandardFormat.format(residueTopologicPropertiesContainer.getHydrophobicPlip().getCloseness()) + "," + StandardFormat.format(residueTopologicPropertiesContainer.getHydrophobicPlip().getClusteringCoefficient()) + "," + conventionalProteinGraph.getContactsOf(aminoAcid).size() + "," + conventionalProteinGraph.getLocalContactsOf(aminoAcid).size() + "," + conventionalProteinGraph.getNonLocalContactsOf(aminoAcid).size() + "," + StandardFormat.format(residueTopologicPropertiesContainer.getConventional().getBetweenness()) + "," + StandardFormat.format(residueTopologicPropertiesContainer.getConventional().getCloseness()) + "," + StandardFormat.format(residueTopologicPropertiesContainer.getConventional().getClusteringCoefficient()) + "," + StandardFormat.format(residueTopologicPropertiesContainer.getFullPlip().getDistinctNeighborhoodCount()) + "," + StandardFormat.format(residueTopologicPropertiesContainer.getConventional().getDistinctNeighborhoodCount()) + "," + (earlyFoldingResidues.contains(aminoAcid) ? "early" : "late") + "," + functionalAnnotation;
}).collect(Collectors.joining(System.lineSeparator())));
} catch (Exception e) {
logger.info("calculation failed for {}", line, e);
return Optional.empty();
}
}
use of de.bioforscher.jstructure.model.feature.ComputationException in project jstructure by JonStargaryen.
the class BaselineReconstruction method computeBaselinePerformance.
private void computeBaselinePerformance(List<Chain> reconstructions) throws AlignmentException, IOException {
List<TMAlignAlignmentResult> alignmentResults = new ArrayList<>();
List<ReconstructionContactMap> reconstructionContactMaps = new ArrayList<>();
List<Path> tmpFiles = new ArrayList<>();
if (reconstructions.isEmpty()) {
throw new ComputationException("reconstruction did not yield any reconstructs");
}
for (Chain reconstructedChain : reconstructions) {
Path reconstructPath = Files.createTempFile("confoldservice-recon", ".pdb");
tmpFiles.add(reconstructPath);
Files.write(reconstructPath, reconstructedChain.getPdbRepresentation().getBytes());
alignmentResults.add(TM_ALIGN_SERVICE.process(new String[] { tmalignPath, referenceChainPath.toFile().getAbsolutePath(), reconstructPath.toFile().getAbsolutePath() }));
reconstructionContactMaps.add(ReconstructionContactMap.createReconstructionContactMap(reconstructedChain, fullMap.getContactDefinition()));
}
if (alignmentResults.isEmpty()) {
throw new ComputationException("tmalign did not yield any alignments");
}
averageRmsd = alignmentResults.stream().map(TMAlignAlignmentResult::getRootMeanSquareDeviation).mapToDouble(RootMeanSquareDeviation::getScore).average().getAsDouble();
averageTmScore = alignmentResults.stream().map(TMAlignAlignmentResult::getTemplateModelingScore1).mapToDouble(TemplateModelingScore::getScore).average().getAsDouble();
averageQ = reconstructionContactMaps.stream().mapToDouble(reconstructContactMap -> computeQ(fullMap, reconstructContactMap)).average().getAsDouble();
logger.info("baseline reconstruction {} - average RMSD: {}, average TM-score: {}, average Q: {}", iteration, StandardFormat.format(averageRmsd), StandardFormat.format(averageTmScore), StandardFormat.format(averageQ));
// cleanup
for (Path tmpFile : tmpFiles) {
Files.delete(tmpFile);
}
}
Aggregations