All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.actelion.research.chem.io.pdb.parser.RemarkParser Maven / Gradle / Ivy

There is a newer version: 2024.12.1
Show newest version
package com.actelion.research.chem.io.pdb.parser;


import java.text.ParseException;
import java.util.AbstractMap;
import java.util.HashMap;
import java.util.List;
import java.util.AbstractMap.SimpleEntry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * RemarkParser
 * 

Copyright: Idorsia Pharmaceuticals Ltd., Inc. All Rights Reserved * This software is the proprietary information of Idorsia Pharmaceuticals, Ltd. * Use is subject to license terms.

* Created by korffmo1 on 09.04.18. */ public class RemarkParser { private int indexLine; private HashMap hmNo_Remark; public RemarkParser() { } void parse(List liRaw, int indexLine) throws ParseException { this.indexLine = indexLine; hmNo_Remark = new HashMap<>(); int ccRemark = 0; // Optional Mandatory for a re-refined structure if(RemarkParser.getMatcherRemark(ccRemark, liRaw.get(indexLine)).find()) { SimpleEntry siIndex = parseRemark(liRaw, indexLine, ccRemark); hmNo_Remark.put(ccRemark, siIndex.getKey()); indexLine = siIndex.getValue(); } ccRemark++; if(RemarkParser.getMatcherRemark(ccRemark, liRaw.get(indexLine)) .find()) { SimpleEntry siIndex = parseRemark(liRaw, indexLine, ccRemark); hmNo_Remark.put(ccRemark, siIndex.getKey()); indexLine = siIndex.getValue(); } // Remark 2 mandatory ccRemark++; if(RemarkParser.getMatcherRemark(ccRemark, liRaw.get(indexLine)) .find()) { SimpleEntry siIndex = parseRemark(liRaw, indexLine, ccRemark); hmNo_Remark.put(ccRemark, siIndex.getKey()); indexLine = siIndex.getValue(); } //else { // throw new RuntimeException("Missing " + PDBFileParser.TAG_REMARK2); //} // Remark 3 mandatory ccRemark++; if(RemarkParser.getMatcherRemark(ccRemark, liRaw.get(indexLine)) .find()) { SimpleEntry siIndex = parseRemark(liRaw, indexLine, ccRemark); hmNo_Remark.put(ccRemark, siIndex.getKey()); indexLine = siIndex.getValue(); } //else { // throw new RuntimeException("Missing " + PDBFileParser.TAG_REMARK3); //} Pattern p = getPatternRemark(); boolean searchRemarks = true; while (searchRemarks) { String line = liRaw.get(indexLine); Matcher matcher = p.matcher(line); if(matcher.find()) { String [] arr = line.split("[ ]+"); ccRemark = Integer.parseInt(arr[1]); SimpleEntry siIndex = parseRemark(liRaw, indexLine, ccRemark); hmNo_Remark.put(ccRemark, siIndex.getKey()); indexLine = siIndex.getValue(); } else { searchRemarks = false; } } this.indexLine = indexLine; } public int getIndexLine() { return indexLine; } public HashMap getHmNo_Remark() { return hmNo_Remark; } private static SimpleEntry parseRemark(List liRaw, int indexLine, int indexRemark) throws ParseException { Pattern pattern = RemarkParser.getPatternRemark(indexRemark); // String titleSub0 = l0.substring(tag.length()).trim(); StringBuilder sb = new StringBuilder(); int start = indexLine; for (int i = start; i < liRaw.size(); i++) { String l = liRaw.get(i); Matcher matcher = pattern.matcher(l); if(matcher.find()) { String [] arr = l.split("[ ]+"); sb.append(" "); for (int j = 2; j < arr.length; j++) { sb.append(arr[j]); if(j < arr.length-1) { sb.append(" "); } } indexLine++; } else { break; } } AbstractMap.SimpleEntry siTextIndex = new AbstractMap.SimpleEntry<>(sb.toString(), indexLine); return siTextIndex; } static Pattern getPatternRemark() { String p = PDBFileParser.TAG_REMARK + "[ ]+"; return Pattern.compile(p); } static Pattern getPatternRemark(int index) { String p = PDBFileParser.TAG_REMARK + "[ ]+" + index; return Pattern.compile(p); } static Matcher getMatcherRemark(int indexRemark, String s){ Pattern p = getPatternRemark(indexRemark); Matcher matcher = p.matcher(s); return matcher; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy