001package org.biopax.paxtools.examples;
002
003import org.biopax.paxtools.controller.ModelUtils;
004import org.biopax.paxtools.io.BioPAXIOHandler;
005import org.biopax.paxtools.io.SimpleIOHandler;
006//import org.biopax.paxtools.io.sif.InteractionRule;
007//import org.biopax.paxtools.io.sif.SimpleInteractionConverter;
008import org.biopax.paxtools.model.Model;
009import org.biopax.paxtools.pattern.miner.OldFormatWriter;
010import org.biopax.paxtools.pattern.miner.SIFEnum;
011import org.biopax.paxtools.pattern.miner.SIFInteraction;
012import org.biopax.paxtools.pattern.miner.SIFSearcher;
013
014import java.io.FileInputStream;
015import java.io.FileOutputStream;
016import java.io.IOException;
017import java.io.OutputStream;
018//import java.util.Arrays;
019import java.util.Set;
020
021/**
022 * This example exports A BioPAX model to SIF.
023 *
024 * To use specific rules uncomment the rule enumeration below.
025 *
026 */
027public final class SifnxExportExample {
028
029        public static void main(String[] args) throws IOException {
030                if (args.length != 2) {
031                        System.out.println("Please run again providing arguments: "
032                                        + "input(BioPAX OWL file), output");
033                        System.exit(-1);
034                }
035
036                // import BioPAX from OWL file (auto-detects level)
037                BioPAXIOHandler biopaxReader = new SimpleIOHandler();
038                Model model = biopaxReader.convertFromOWL(new FileInputStream(args[0]));
039                
040//              SimpleInteractionConverter sic = // add all rules
041//              new SimpleInteractionConverter(SimpleInteractionConverter
042//                              .getRules(model.getLevel()).toArray(new InteractionRule[]{}));
043
044                /* or - use some of the rules - 
045                SimpleInteractionConverter sic = null;
046                if (BioPAXLevel.L2.equals(model.getLevel())) {
047                        sic = new SimpleInteractionConverter(
048                                new org.biopax.paxtools.io.sif.level2.ComponentRule(),
049                                new org.biopax.paxtools.io.sif.level2.ConsecutiveCatalysisRule(), 
050                                new org.biopax.paxtools.io.sif.level2.ControlRule(),
051                                new org.biopax.paxtools.io.sif.level2.ControlsTogetherRule(), 
052                                new org.biopax.paxtools.io.sif.level2.ParticipatesRule());
053                } else if (BioPAXLevel.L3.equals(model.getLevel())) {
054                        sic = new SimpleInteractionConverter(
055                                        new org.biopax.paxtools.io.sif.level3.ComponentRule(),
056                                        new org.biopax.paxtools.io.sif.level3.ConsecutiveCatalysisRule(),
057                                        new org.biopax.paxtools.io.sif.level3.ControlRule(),
058                                        new org.biopax.paxtools.io.sif.level3.ControlsTogetherRule(),
059                                        new org.biopax.paxtools.io.sif.level3.ParticipatesRule());
060                } else {
061                        System.err.println("SIF converter does not yet support BioPAX level: " 
062                                        + model.getLevel());
063                        System.exit(0);
064                }
065                */
066//              OutputStream edgeStream = new FileOutputStream(args[1]);
067//              OutputStream nodeStream = new FileOutputStream(args[2]);
068//        sic.writeInteractionsInSIFNX(model, edgeStream, nodeStream,
069//                      null, Arrays.asList("entity/NAME","entity/XREF"),false);
070
071                ModelUtils.mergeEquivalentInteractions(model);
072
073                SIFSearcher searcher = new SIFSearcher(SIFEnum.values());
074//              searcher.setBlacklist(blacklist); //good to have a blacklist of ubiquitous molecules
075                Set<SIFInteraction> binaryInts = searcher.searchSIF(model);
076                OutputStream out = new FileOutputStream(args[1]);
077                OldFormatWriter.write(binaryInts, out);
078                try {out.close();} catch(Throwable t) {}
079        }
080
081}