Git Lab CI for docker build enabled! You can enable it using .gitlab-ci.yml in your project. Check file template at https://gitlab.bio.di.uminho.pt/snippets/5

Commit 67bffede authored by Davide Lagoa's avatar Davide Lagoa
Browse files

bugs metacyc retriever fixed

parent b2e5cf95
......@@ -226,12 +226,19 @@ public class FetchCompoundsByName {
Map<MetaboliteMajorLabel, Set<Long>> counts = new HashMap<>();
if(!node.getEntry().isEmpty()) {
String entryID = node.getEntry();
if(!entryID.isEmpty()) {
Map<String, Object> nodeProperties = node.getAllProperties();
Set<String> names = getSynonyms(node, nodeProperties, service);
if(entryID.matches("META:.*"))
names.add(entryID);
for(String name : names) {
if(!compounds.containsKey(name)) {
......
......@@ -127,17 +127,17 @@ public class WriteByMetabolitesID {
// }
// }
Node node = service.getNodeByEntryAndLabel("cpd15496", MetaboliteMajorLabel.ModelSeed);
Node node = service.getNodeByEntryAndLabel("META:Glucuronides", MetaboliteMajorLabel.MetaCyc);
System.out.println(node.getAllProperties());
Iterable<Relationship> rels = node.getRelationships();
for(Relationship rel : rels) {
Long otherNode = rel.getOtherNodeId(node.getId());
System.out.println(service.getNodeById(otherNode).getAllProperties());
}
// Iterable<Relationship> rels = node.getRelationships();
//
// for(Relationship rel : rels) {
// Long otherNode = rel.getOtherNodeId(node.getId());
//
// System.out.println(service.getNodeById(otherNode).getAllProperties());
// }
......@@ -155,8 +155,10 @@ public class WriteByMetabolitesID {
Map<String, Set<TcNumberContainer2>> reactionsData, Properties properties) {
try {
Boolean generate = true;
String accession = "P77211";
Boolean generate = false;
String accession = "P16433";
// test2(service, null, null);
Retriever.runRetriever(true, true, accession);
......@@ -243,6 +245,9 @@ public class WriteByMetabolitesID {
Set<String> synonyms = FetchCompoundsByName.getSynonyms(node, nodeProperties, service);
if(entryID.matches("META:.*")) {
synonyms.add(entryID);
}
// String names ="";
//
// if(node.hasProperty("name")) {
......@@ -267,13 +272,21 @@ public class WriteByMetabolitesID {
else
bioSynMetab = new BiosynthMetaboliteProperties(entryID, BiosynthMetaboliteProperties.NONE, synonyms);
if(node.hasProperty("formula"))
bioSynMetab.setFormula((String) nodeProperties.get("formula"));
if(node.hasProperty("formula")) {
String formula = (String) nodeProperties.get("formula");
if(formula != null && !(formula.equalsIgnoreCase("none") || formula.equalsIgnoreCase("null")))
bioSynMetab.setFormula(formula);
}
if(entryID.equalsIgnoreCase("cpd03805"))
bioSynMetab.setFormula("C6H11O8P"); //there's an error in the database, it needs to be updated
else if(entryID.equalsIgnoreCase("cpd15391"))
bioSynMetab.setFormula("C11H17NO11P"); //there's an error in the database, it needs to be updated
else if(entryID.equalsIgnoreCase("cpd26871"))
bioSynMetab.setFormula("C4H6N2O3R2"); //there's an error in the database, it needs to be updated
else if(entryID.equalsIgnoreCase("cpd28237"))
bioSynMetab.setFormula("C6H8N3O4R3"); //there's an error in the database, it needs to be updated
if(node.hasProperty("remark"))
bioSynMetab.setRemark((String) nodeProperties.get("remark"));
......
......@@ -10,6 +10,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pt.uminho.ceb.biosystems.transyt.service.containers.BiosynthMetabolites;
import pt.uminho.ceb.biosystems.transyt.utilities.capsules.BiosynthMetaboliteProperties;
import pt.uminho.ceb.biosystems.transyt.utilities.capsules.ReactionContainer;
import pt.uminho.ceb.biosystems.transyt.utilities.capsules.TcNumberContainer2;
import pt.uminho.ceb.biosystems.transyt.utilities.capsules.TcdbMetabolitesContainer;
......@@ -30,14 +31,17 @@ public class IdentifyReactionsMetabolites {
private Map<String, Set<String>> metabolites;
private Map<String, String[]> forChildsSearch;
private Map<String, String> metabolitesByOriginalName = new HashMap<String, String>();
private Map<String, BiosynthMetaboliteProperties> allData;
private Synonyms dictionary;
private static final Logger logger = LoggerFactory.getLogger(IdentifyReactionsMetabolites.class);
public IdentifyReactionsMetabolites(Map<String, Set<TcNumberContainer2>> reactionsData, BiosynthMetabolites namesAndIDsContainer, BiodbGraphDatabaseService service) {
public IdentifyReactionsMetabolites(Map<String, Set<TcNumberContainer2>> reactionsData, BiosynthMetabolites namesAndIDsContainer,
Map<String, BiosynthMetaboliteProperties> allData, BiodbGraphDatabaseService service) {
this.dictionary = new Synonyms();
this.allData = allData;
metabolites = getMetabolitesFromReactions(reactionsData);
......@@ -80,34 +84,40 @@ public class IdentifyReactionsMetabolites {
// System.out.println("metabolites >>>" + metabolites.size()); //2078
//
// System.out.println("allmetabolites >>>" + namesAndIDsContainer.getMetabolitesIDs().size()); //154224
boolean print = false;
//
identificationByDirectMatch();
// System.out.println("FOUND1: " + tcdbMetabolitesIDs.size()); //911
if(print)
System.out.println("FOUND1: " + tcdbMetabolitesIDs.size()); //911
identificationDeletingStoichiometry();
// System.out.println("FOUND2: " + tcdbMetabolitesIDs.size()); //975
if(print)
System.out.println("FOUND2: " + tcdbMetabolitesIDs.size()); //975
identificationInLowerCase();
// System.out.println("FOUND3: " + tcdbMetabolitesIDs.size()); //1089
if(print)
System.out.println("FOUND3: " + tcdbMetabolitesIDs.size()); //1089
if(print)
identificationReplacingNonAlphanumeric();
// System.out.println("FOUND4: " + tcdbMetabolitesIDs.size()); //1095
if(print)
System.out.println("FOUND4: " + tcdbMetabolitesIDs.size()); //1095
identificationIntroducingDandL();
// System.out.println("FOUND5: " + tcdbMetabolitesIDs.size()); //1103
if(print)
System.out.println("FOUND5: " + tcdbMetabolitesIDs.size()); //1103
identificationReplacingNonAlphanumericAndInLowercase();
// System.out.println("FOUND6: " + tcdbMetabolitesIDs.size()); //1109
if(print)
System.out.println("FOUND6: " + tcdbMetabolitesIDs.size()); //1109
// System.out.println(metabolites);
......@@ -125,8 +135,6 @@ public class IdentifyReactionsMetabolites {
if(id != null) {
// System.out.println(id + "\t" + ids.get(id));
Map<String, MetaboliteMajorLabel> map = new HashMap<>();
if(id.equals(MetaboliteMajorLabel.EcoCyc))
......@@ -134,9 +142,15 @@ public class IdentifyReactionsMetabolites {
else
map.put(ids.get(id), id);
tcdbMetabolitesIDs.put(metabolite, map);
// if(metabolite.equalsIgnoreCase("quinol") || metabolite.equalsIgnoreCase("quinone"))
// System.out.println();
// if(allData.containsKey(ids.get(id)) && allData.get(ids.get(id)).getFormula() != null
// && !allData.get(ids.get(id)).getFormula().equalsIgnoreCase("NONE")) {
tcdbMetabolitesIDs.put(metabolite, map);
metabolites.remove(metabolite);
// }
}
}
......@@ -356,8 +370,8 @@ public class IdentifyReactionsMetabolites {
for(String metabolite : new HashSet<>(metabolites.keySet())) {
if(metabolite.equals("light"))
System.out.println();
// if(metabolite.equals("light"))
// System.out.println();
try {
if(metabolite.equalsIgnoreCase("galactonate"))
......
......@@ -56,7 +56,7 @@ import pt.uminho.ceb.biosystems.transyt.utilities.transytUtilities.Properties;
public class ProvideTransportReactionsToGenes {
private static final String NO_TCNUMBER_ASSOCIATED = "Undefined_TCnumber";
public static final String NO_TCNUMBER_ASSOCIATED = "Undefined_TCnumber";
private Map<String, List<AlignmentCapsule>> blastResults;
private RestNeo4jGraphDatabase service;
......@@ -543,22 +543,15 @@ public class ProvideTransportReactionsToGenes {
private void generateFinalResultsAuxValidation(Map<String, Set<String>> similaritiesResults,
Map<String, GeneContainer> genesContainers) {
// Map<String, Map<String, Set<String>>> finalResultsAux = new HashMap<>();
finalResults = new HashMap<>();
// Map<String, String> locus =
// FilesUtils.readMapFromFile(path.concat("Acc_to_locus.txt"));
for(String queryAccession : resultsByEvalue.keySet()) {
// resultsByEvalue = new HashMap<String, Set<String>>(); //DELETE ME!!!!!!!!!!!!!!1
if(queryAccession.equals("b0341"))
System.out.println();
for(String queryAccession : blastResults.keySet()) {
Set<String> reactionsAlreadyAssigned = new HashSet<>();
Set<String> accepted = new HashSet<>();
String tcFamily = genesContainers.get(queryAccession).getAnnotatedFamily();
Map<String, Set<String>> res = new HashMap<>();
......@@ -570,6 +563,10 @@ public class ProvideTransportReactionsToGenes {
// for(String tc : reactionsByTcNumberForAnnotation.keySet())
// System.out.println("new" + tc + "\t" + reactionsByTcNumberForAnnotation.get(tc));
if(resultsByEvalue.containsKey(queryAccession)) {
String tcFamily = genesContainers.get(queryAccession).getAnnotatedFamily();
for(String tcNumber : resultsByEvalue.get(queryAccession)) {
if(reactionsByTcNumberForAnnotation.containsKey(tcNumber) && tcNumber.contains(tcFamily)){
......@@ -613,7 +610,7 @@ public class ProvideTransportReactionsToGenes {
reportByEvalueAux.put(queryAccession, new HashMap<>(res));
}
}
if(similaritiesResults.containsKey(queryAccession) && !similaritiesResults.get(queryAccession).isEmpty()) {
Set<String> toAdd = new HashSet<>();
......@@ -1609,10 +1606,10 @@ public class ProvideTransportReactionsToGenes {
metabolitesNames.putAll(service.getTemporaryCompoundsNames());
metabolitesFormulas.putAll(service.getTemporaryCompoundsFormulas());
// for(String name : metabolitesNames.values())
// if(GENERATIONS_EXCEPTION_FILE.containsKey(name)) {
// return null;
// }
// for(String name : metabolitesNames.values())
// if(GENERATIONS_EXCEPTION_FILE.containsKey(name)) {
// return null;
// }
// System.out.println(reactionWithIDs);
// System.out.println(reactionAux);
......
......@@ -18,6 +18,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pt.uminho.ceb.biosystems.merlin.utilities.io.FileUtils;
import pt.uminho.ceb.biosystems.transyt.scraper.tcdb.reactionsGenerator.GenerateTransportReactions;
import pt.uminho.ceb.biosystems.transyt.service.containers.BiosynthMetabolites;
import pt.uminho.ceb.biosystems.transyt.service.relations.MetabolitesChilds;
import pt.uminho.ceb.biosystems.transyt.service.transytDatabase.TransytNeo4jInitializer;
......@@ -125,12 +126,11 @@ public class TransportReactionsBuilder {
BiosynthMetabolites biosynthMetabolites, BiodbGraphDatabaseService service) {
Map<String, String> mainMetabolitesMap = new HashMap<>();
Map<String, Set<Long>> childs = new HashMap<>();
Map<String, String> childNames = new HashMap<>();
Map<String, Set<Long>> originalMetabolitesChilds = new HashMap<>();
Map<String, String> metabolites = new HashMap<>();
Map<String, String> formulas = new HashMap<>();
IdentifyReactionsMetabolites metabolitesIdentification = new IdentifyReactionsMetabolites(reactionsData, biosynthMetabolites, service);
IdentifyReactionsMetabolites metabolitesIdentification = new IdentifyReactionsMetabolites(reactionsData, biosynthMetabolites, this.allData, service);
Map<String, Map<String, MetaboliteMajorLabel>> tcdbMetabolitesIDs = metabolitesIdentification.getTcdbMetabolitesIDs();
......@@ -146,23 +146,14 @@ public class TransportReactionsBuilder {
for(String accession : reactionsData.keySet()) {
// i++;
//
// if(i == 1000)
// break;
// System.out.println();
// System.out.println(accession);
Set<TcNumberContainer2> setTcContainers = new HashSet<>();
for(TcNumberContainer2 tcContainer : reactionsData.get(accession)) {
TcNumberContainer2 newTcContainer = new TcNumberContainer2(tcContainer.getTcNumber());
// System.out.println(tcContainer.getTcNumber());
// if(tcContainer.getTcNumber().equals("3.A.1.152.8"))
// System.out.println("TCNUMER: " + tcContainer.getTcNumber());
Map<String, Set<Long>> childs = new HashMap<>(); //sadly this can not be cached because of the dinamic limits
Map<String, String> childNames = new HashMap<>();
for(Integer key : tcContainer.getAllReactionsIds()) {
......@@ -180,13 +171,10 @@ public class TransportReactionsBuilder {
// System.out.println(metabolitesForReplacement);
Set<String> originalMetabolites = new HashSet<>();
if(originalMetabolites.isEmpty())
originalMetabolites =IdentifyReactionsMetabolites.getMetabolitesFromReaction(reactionContainer.getOriginalReaction(), dictionary, false);
Set<String> originalMetabolites = IdentifyReactionsMetabolites.getMetabolitesFromReaction(reactionContainer.getOriginalReaction(), dictionary, false);
if(!originalMetabolites.isEmpty() && !(originalMetabolites.size() == 1 && originalMetabolites.contains(BiosynthMetaboliteProperties.NONE))) {
for(String originalM : new HashSet<>(originalMetabolites)) {
for(String originalM : new HashSet<>(originalMetabolites)) { // this step is important for the common ontologies filter
if(metabolitesByOriginalName.containsKey(originalM)) {
originalMetabolites.remove(originalM);
......@@ -197,7 +185,7 @@ public class TransportReactionsBuilder {
String entryID = "";
MetaboliteMajorLabel label = null;
if(!childs.containsKey(originalM) && tcdbMetabolitesIDs.containsKey(originalM)) {
if(!originalMetabolitesChilds.containsKey(originalM) && tcdbMetabolitesIDs.containsKey(originalM)) {
for(String id : tcdbMetabolitesIDs.get(originalM).keySet()) { //this map will always have only one entry
......@@ -213,7 +201,7 @@ public class TransportReactionsBuilder {
long identifier = MetabolitesChilds.identifyNode(entryID, label, service);
childs.put(originalM, MetabolitesChilds.getMetaboliteChilds(originalM, -1, identifier, service, this.missingChilds)); //no limits here
originalMetabolitesChilds.put(originalM, MetabolitesChilds.getMetaboliteChilds(originalM, -1, identifier, service, this.missingChilds)); //no limits here
mainMetabolitesMap.put(originalM, Long.toString(identifier));
}
}
......@@ -224,6 +212,9 @@ public class TransportReactionsBuilder {
if(generationsLimit.containsKey(metabolite))
childGenerationLimit = generationsLimit.get(metabolite);
else if(reactionContainer.getConfidenceLevel().equals(GenerateTransportReactions.METACYC_CONFIDENCE_LEVEL)
&& !reactionContainer.getTransportType().equals(TypeOfTransporter.RedoxNADH))
childGenerationLimit = 0; //don't search childs
if(tcdbMetabolitesIDs.containsKey(metabolite)) {
......@@ -328,7 +319,7 @@ public class TransportReactionsBuilder {
for(Set<String> s : sets)
allReactions.add(new HashSet<>(s)); //deep copy
List<Set<String>> commonOntologyMetabolites = filterMetabolitesByCommonOntology(allReactions, childs, originalMetabolites);
List<Set<String>> commonOntologyMetabolites = filterMetabolitesByCommonOntology(allReactions, originalMetabolites, originalMetabolitesChilds);
if(allReactions != null) {
......@@ -393,7 +384,8 @@ public class TransportReactionsBuilder {
}
private static List<Set<String>> filterMetabolitesByCommonOntology(List<Set<String>> sets, Map<String, Set<Long>> childs, Set<String> originalMetabolites) {
private static List<Set<String>> filterMetabolitesByCommonOntology(List<Set<String>> sets,
Set<String> originalMetabolites, Map<String, Set<Long>> originalMetabolitesChilds) {
List<Set<String>> newSet = new ArrayList<>();
......@@ -406,10 +398,10 @@ public class TransportReactionsBuilder {
for(String key : originalMetabolites) {
try {
if(!childs.containsKey(key)) {
if(!originalMetabolitesChilds.containsKey(key)) {
contains = true; //not restrictive
}
else if(childs.get(key).contains(Long.valueOf(metabolite))) {
else if(originalMetabolitesChilds.get(key).contains(Long.valueOf(metabolite))) {
contains = true;
break;
}
......@@ -526,6 +518,8 @@ public class TransportReactionsBuilder {
// System.out.println(formulasReaction);
if(!reactionContainer.getConfidenceLevel().equals(GenerateTransportReactions.METACYC_CONFIDENCE_LEVEL)) {
if((reactant.contains("ATP") && product.contains("ADP")) || (reactant.contains("GTP") && product.contains("GDP"))) {
newTransportType = TypeOfTransporter.BiochemicalATP;
......@@ -569,13 +563,13 @@ public class TransportReactionsBuilder {
formulasReaction = formulaSplit[0].replace(" 4H", " 5H").concat(reactionContainer.getDirectionToken()).concat(formulaSplit[1]);
}
}
// System.out.println("verificador");
// System.out.println(formulasReaction);
// System.out.println(reactionContainer.getDirectionRegex());
// System.out.println();
boolean print = true;
boolean print = false;
if(print) {
System.out.println(reactant + " <<>> " + product);
......@@ -594,7 +588,8 @@ public class TransportReactionsBuilder {
boolean sugarPEPcorrect = true;
if(balanced && reactionContainer.getTransportType().equals(TypeOfTransporter.PEPdependent)) {
if(balanced && reactionContainer.getTransportType().equals(TypeOfTransporter.PEPdependent)
&& !reactionContainer.getConfidenceLevel().equals(GenerateTransportReactions.METACYC_CONFIDENCE_LEVEL)) {
sugarPEPcorrect = checkPEPReactions(reactant, product, reactionContainer.getDirectionRegex());
}
......@@ -641,8 +636,8 @@ public class TransportReactionsBuilder {
else if(defaultLabel.equals(MetaboliteMajorLabel.LigandCompound))
newReactContainer.setReactionKEGG(auxReaction);
// if(reactionBase.contains("cpd00205") && newReactContainer.getMetabolites().size() == 2)
// System.out.println();
// if(reactionBase.contains("cpd00205") && newReactContainer.getMetabolites().size() == 2)
// System.out.println();
newReactContainer.generateTranSyTID(metabolitesMapById, this.allExistingReactions, tcNumber);
......@@ -695,7 +690,7 @@ public class TransportReactionsBuilder {
String replace = metabolitesToReplace.iterator().next();
metabolitesToReplace.remove(replace);
// for(String replace : metabolitesToReplace) {
// for(String replace : metabolitesToReplace) {
if(reactionContainer.getTransportType().equals(TypeOfTransporter.PEPdependent)) { //PEP dependent
......@@ -788,7 +783,7 @@ public class TransportReactionsBuilder {
else {
formulasReaction = null;
}
// }
// }
}
else {
go = false;
......
......@@ -15,6 +15,7 @@ import pt.uminho.ceb.biosystems.merlin.utilities.Pair;
import pt.uminho.ceb.biosystems.merlin.utilities.containers.capsules.AlignmentCapsule;
import pt.uminho.ceb.biosystems.transyt.service.internalDB.WriteByMetabolitesID;
import pt.uminho.ceb.biosystems.transyt.service.neo4jRest.RestNeo4jGraphDatabase;
import pt.uminho.ceb.biosystems.transyt.service.reactions.ProvideTransportReactionsToGenes;
import pt.uminho.ceb.biosystems.transyt.utilities.capsules.GeneContainer;
import pt.uminho.ceb.biosystems.transyt.utilities.transytUtilities.Properties;
......@@ -455,6 +456,8 @@ public class GPRAssociations {
if(!geneRule.contains(g) && complexesTCDB.get(tcNumber) != null && complexesTCDB.get(tcNumber).size() < 2) //avoids creating incomplete GPRs
geneRule = geneRule.concat(" or ").concat(g);
else if(tcNumber.equals(ProvideTransportReactionsToGenes.NO_TCNUMBER_ASSOCIATED))
geneRule = geneRule.concat(" or ").concat(g);
}
geneRule = geneRule.replaceAll("^\\sor\\s", "");
......
......@@ -79,6 +79,7 @@ public class MetabolitesChilds {
Node[] nodes = rel.getNodes();
try {
if(nodes[1].getId() == currentNodeID && rel.getType().toString().equals(MetaboliteRelationshipType.instance_of.toString())) {
Integer currentGeneration = generation.get(currentNodeID);
......@@ -86,8 +87,10 @@ public class MetabolitesChilds {
if(currentGeneration < generationLimit || generationLimit == ALL_CODE) {
if(!visited.contains(nodes[0].getId())
&& !node.getProperty("entry").toString().matches("(?i).*modified.*")
&& !node.getProperty("name").toString().matches("(?i).*modified.*")) {
&& !nodes[0].getProperty("entry").toString().matches("(?i).*modified.*")) {
if(!nodes[0].hasProperty("name")
|| (nodes[0].hasProperty("name") && !nodes[0].getProperty("name").toString().matches("(?i).*modified.*"))) {
toVisit.add(nodes[0].getId());
generation.put(nodes[0].getId(), currentGeneration + 1);
......@@ -95,6 +98,11 @@ public class MetabolitesChilds {
}
}
}
} catch (Exception e) {
logger.error(e.getMessage());
// e.printStackTrace();
}
}
visited.add(currentNodeID);
}
......
......@@ -6,13 +6,12 @@ import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pt.uminho.ceb.biosystems.transyt.scraper.tcdb.tcdbTransportTypesRetriever.FindTransporters;
import pt.uminho.ceb.biosystems.transyt.scraper.APIs.MetaCycAPI;
import pt.uminho.ceb.biosystems.transyt.scraper.tcdb.tcdbTransportTypesRetriever.Retriever;
import pt.uminho.ceb.biosystems.transyt.service.internalDB.WriteByMetabolitesID;
import pt.uminho.ceb.biosystems.transyt.service.reactions.ProvideTransportReactionsToGenes;
import pt.uminho.ceb.biosystems.transyt.service.utilities.OrganismProperties;
import pt.uminho.ceb.biosystems.transyt.utilities.capsules.Organism;
import pt.uminho.ceb.biosystems.transyt.utilities.connection.ReadFastaTcdb;
import pt.uminho.ceb.biosystems.transyt.utilities.enumerators.Enumerators.STAIN;
import pt.uminho.ceb.biosystems.transyt.utilities.transytUtilities.Properties;
......@@ -26,19 +25,49 @@ public class TransyTestMain {
public static void main(String[] args) throws Exception {
// Integer taxID = Integer.valueOf(args[0]);
// Set<String> toSearch = ReadFastaTcdb.getAccessionForAlignment();
// String command = args[0];
// Set<String> toSearch = new HashSet<>();
// toSearch.add("P16433");
//
//
// MetaCycAPI api = new MetaCycAPI(toSearch);
// List<String> l = new ArrayList<>();
// l.add("WP_072782069.1");
//
// List<UniProtEntry> entries = UniprotAPIExtension.getEntriesFromUniProtIDs(l, 0);
//
// for(UniProtEntry entry : entries) {
// System.out.println(entry.getPrimaryUniProtAccession());
// for(DatabaseCrossReference db : entry.getDatabaseCrossReferences()) {
//
// if(db.getDatabase().getName().equalsIgnoreCase("biocyc")) {
//// System.out.println(db.getDatabase().getDisplayName());
// System.out.println(db.getPrimaryId());
// }
// }
// System.out.println();
// }
// JSONFilesUtils.readJSONtcdbReactionsFile();
// Set<String> toSearch = ReadFastaTcdb.getAccessionForAlignment();
// Set<String> toSearch = new HashSet<>();
// toSearch.add("P0AE06");
// MetaCycAPI api = new MetaCycAPI(toSearch);
// Set<String> coiso = new HashSet<>();