code: public static Pattern molecularInteraction()
  	{
  		Pattern p = new Pattern(SequenceEntityReference.class, "Protein 1");
  		p.add(linkedER(true), "Protein 1", "generic Protein 1");
  		p.add(erToPE(), "generic Protein 1", "SPE1");
  		p.add(linkToComplex(), "SPE1", "PE1");
  		p.add(new PathConstraint("PhysicalEntity/participantOf:MolecularInteraction"), "PE1", "MI");
  		p.add(participant(), "MI", "PE2");
  		p.add(equal(false), "PE1", "PE2");
  
  		// participants are not both baits or preys
  		p.add(new NOT(new AND(new MappedConst(isPrey(), 0), new MappedConst(isPrey(), 1))), "PE1", "PE2");
  		p.add(new NOT(new AND(new MappedConst(isBait(), 0), new MappedConst(isBait(), 1))), "PE1", "PE2");
  
  		p.add(linkToSpecific(), "PE2", "SPE2");
  		p.add(type(SequenceEntity.class), "SPE2");
  		p.add(new PEChainsIntersect(false), "SPE1", "PE1", "SPE2", "PE2");
  		p.add(peToER(), "SPE2", "generic Protein 2");
  		p.add(linkedER(false), "generic Protein 2", "Protein 2");
  		p.add(equal(false), "Protein 1", "Protein 2");
  		return p;
  	}
docs: Constructs a pattern where first and last molecules are participants of a
  MolecularInteraction.
  @return the pattern