//  $Id: Ligands.java,v 1.4 2004/04/08 23:55:06 moreland Exp $
//
//  Copyright 2000-2004 The Regents of the University of California.
//  All Rights Reserved.
//
//  Permission to use, copy, modify and distribute any part of this
//  Molecular Biology Toolkit (MBT)
//  for educational, research and non-profit purposes, without fee, and without
//  a written agreement is hereby granted, provided that the above copyright
//  notice, this paragraph and the following three paragraphs appear in all
//  copies.
//
//  Those desiring to incorporate this MBT into commercial products
//  or use for commercial purposes should contact the Technology Transfer &
//  Intellectual Property Services, University of California, San Diego, 9500
//  Gilman Drive, Mail Code 0910, La Jolla, CA 92093-0910, Ph: (858) 534-5815,
//  FAX: (858) 534-7345, E-MAIL:invent@ucsd.edu.
//
//  IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
//  DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
//  LOST PROFITS, ARISING OUT OF THE USE OF THIS MBT, EVEN IF THE
//  UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//  THE MBT PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE
//  UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT,
//  UPDATES, ENHANCEMENTS, OR MODIFICATIONS. THE UNIVERSITY OF CALIFORNIA MAKES
//  NO REPRESENTATIONS AND EXTENDS NO WARRANTIES OF ANY KIND, EITHER IMPLIED OR
//  EXPRESS, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
//  MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, OR THAT THE USE OF THE
//  MBT WILL NOT INFRINGE ANY PATENT, TRADEMARK OR OTHER RIGHTS.
//
//  For further information, please see:  http://mbt.sdsc.edu
//
//  History:
//  $Log: Ligands.java,v $
//  Revision 1.4  2004/04/08 23:55:06  moreland
//  Updated copyright to new UCSD wording.
//
//  Revision 1.3  2004/01/30 02:07:36  moreland
//  Updated copyright and class block comments.
//
//  Revision 1.2  2003/04/24 00:30:16  moreland
//  Updated to use the Residue StructureComponent class.
//
//  Revision 1.1  2003/03/10 22:57:36  moreland
//  New example to demonstrate ligand traversal.
//
//  Revision 1.0  2003/03/10 17:24:22  moreland
//  First revision.
//


// Core
import java.io.File;
import java.net.*;

// MBT
import edu.sdsc.mbt.*;
import edu.sdsc.mbt.io.*;
import edu.sdsc.mbt.util.Status;


/**
 *  An example program which demonstrates the use of the ligand
 *  classification and traversal capabilities of the StructureMap class.
 *  <P>
 *  @author	John L. Moreland
 */
public class Ligands
{
	/**
	 *  This the main application entry point for the example program.
	 */
	public static void main( String args[] )
	{
		//
		// Load a sample data set.
		//

		Structure structure = null;
		for ( int i=0; i<args.length; i++ )
		{
			if ( args[i].equals( "-s" ) )
			{
				// Set the status level
				Status.setOutputLevel( args[++i] );
			}
			else if ( args[i].equals( "-f" ) )
			{
				structure = StructureFactory.load( new File( args[++i] ) );
			}
			else if ( args[i].equals( "-u" ) )
			{
				try
				{
					structure = StructureFactory.load( new URL( args[++i] ) );
				}
				catch ( MalformedURLException e )
				{
					Status.output( Status.LEVEL_ERROR, e.toString() );
				}
			}
			else if ( args[i].equals( "-p" ) )
			{
				structure = StructureFactory.load( args[++i] );
			}
			else
			{
				Status.output( Status.LEVEL_ERROR, "Arguments:" );
				Status.output( Status.LEVEL_ERROR, "   -f ../data/5ebx.cif" );
				Status.output( Status.LEVEL_ERROR, "   -u ftp://beta.rcsb.org/pub/pdb/uniformity/data/mmCIF.gz/all/5ebx.cif.gz" );
				Status.output( Status.LEVEL_ERROR, "   -p 5ebx" );
				Status.output( Status.LEVEL_ERROR, "   -s STATUS_LEVEL_NAME" );
			}
		}

		if ( structure == null )
		{
			Status.output( Status.LEVEL_ERROR, "Sorry, the Structure load failed." );
			System.exit( 1 );
		}
		else
		{
			Status.output( Status.LEVEL_DEBUG, "dataset = " + structure.getUrlString() );
		}

		//
		// Create a StructureMap.
		//

		StructureMap structureMap = structure.getStructureMap( );

		//
		// Print some ligand information from the StructureMap.
		//

		int ligandCount = structureMap.getLigandCount( );
		System.err.println( "Ligands: ligandCount = " + ligandCount );

		//
		// Print ligand information.
		//

		Atom atom = new Atom( );
		for ( int ligand=0; ligand<ligandCount; ligand++ )
		{
			Residue residue = structureMap.getLigandResidue( ligand );
			String compoundCode = residue.getCompoundCode( );
			int atomCount = residue.getAtomCount( );
			System.err.println( "Ligands: " );
			System.err.println( "   ligand = " + ligand );
			System.err.println( "   compoundCode = " + compoundCode );
			System.err.println( "   atomCount = " + atomCount );
		}
	}
}

