View Javadoc

1   /*
2    * Copyright 2006-2010 Sam Adams <sea36 at users.sourceforge.net>
3    *
4    * This file is part of JNI-InChI.
5    *
6    * JNI-InChI is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU Lesser General Public License as published
8    * by the Free Software Foundation, either version 3 of the License, or
9    * (at your option) any later version.
10   *
11   * JNI-InChI is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU Lesser General Public License for more details.
15   *
16   * You should have received a copy of the GNU Lesser General Public License
17   * along with JNI-InChI.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  package net.sf.jniinchi;
20  
21  /**
22   * Encapsulates properties of InChI Atom.  See <tt>inchi_api.h</tt>.
23   * @author Sam Adams
24   */
25  public class JniInchiAtom {
26  
27      /**
28       * Indicates relative rather than absolute isotopic mass. Value
29       * from inchi_api.h.
30       */
31      protected static final int ISOTOPIC_SHIFT_FLAG = 10000;
32  
33      /**
34       * Atom x-coordinate.
35       */
36      private double x;
37  
38      /**
39       * Atom y-coordinate.
40       */
41      private double y;
42  
43      /**
44       * Atom z-coordinate.
45       */
46      private double z;
47  
48      /**
49       * Chemical element symbol eg C, O, Fe, Hg.
50       */
51      private String elname;
52  
53      /**
54       * Number of implicit hydrogens on atom. If set to -1, InChI will add
55       * implicit H automatically.
56       */
57      private int implicitH = -1;
58  
59      /**
60       * Number of implicit protiums (isotopic 1-H) on atom.
61       */
62      private int implicitP = 0;
63  
64      /**
65       * Number of implicit deuteriums (isotopic 2-H) on atom.
66       */
67      private int implicitD = 0;
68  
69      /**
70       * Number of implicit tritiums (isotopic 3-H) on atom.
71       */
72      private int implicitT = 0;
73  
74      /**
75       * Mass of isotope. If set to 0, no isotopic mass set; otherwise, isotopic
76       * mass, or ISOTOPIC_SHIFT_FLAG + (mass - average atomic mass).
77       */
78      private int isotopic_mass = 0;
79  
80      /**
81       * Radical status of atom.
82       */
83      private INCHI_RADICAL radical = INCHI_RADICAL.NONE;
84  
85      /**
86       * Charge on atom.
87       */
88      private int charge = 0;
89  
90      /**
91       * <p>Create new atom.
92       *
93       * <p>Coordinates and element symbol must be set (unknown
94       * coordinates/dimensions should be set to zero).  All other
95       * parameters are initialised to default values:
96       * <p>
97       * <tt>
98       *    Num Implicit H = 0<br>
99       *    Num Implicit 1H = 0<br>
100      *    Num Implicit 2H = 0<br>
101      *    Num Implicit 3H = 0<br>
102      *    Isotopic mass = 0 (non isotopic)<br>
103      *    Radical status = NONE  (radical status not defined)
104      * </tt>
105      *
106      * @param x     x-coordinate
107      * @param y     y-coordinate
108      * @param z     z-coordinate
109      * @param el    Chemical element symbol
110      * @throws NullPointerException - if the element symbol is null.
111      */
112     public JniInchiAtom(final double x, final double y, final double z, final String el) {
113         this.x = x;
114         this.y = y;
115         this.z = z;
116 
117         if (el == null) {
118         	throw new NullPointerException("Chemical element must not be null");
119         }
120         this.elname = el;
121     }
122 
123 
124     /**
125      * Convenience method to create a new atom with zero coordinates.
126      * @param el
127      */
128     public JniInchiAtom(final String el) {
129         this(0.0, 0.0, 0.0, el);
130     }
131 
132 
133     /**
134      * Sets charge on atom.
135      *
136      * @param charge
137      */
138     public void setCharge(final int charge) {
139         this.charge = charge;
140     }
141 
142     /**
143      * Sets radical status of atom.
144      *
145      * @param radical
146      */
147     public void setRadical(final INCHI_RADICAL radical) {
148         this.radical = radical;
149     }
150 
151     /**
152      * Sets isotopic mass. If set to 0, non-isotopic.
153      *
154      * @param mass  Isotopic mass
155      */
156     public void setIsotopicMass(final int mass) {
157         this.isotopic_mass = mass;
158     }
159 
160     /**
161      * Sets isotopic mass, relative to standard mass.
162      *
163      * @param shift  Isotopic mass minus average atomic mass
164      */
165     public void setIsotopicMassShift(final int shift) {
166         this.isotopic_mass = ISOTOPIC_SHIFT_FLAG + shift;
167     }
168 
169     /**
170      * Sets number of implicit hydrogens on atom. If set to -1, InChI will add
171      * implicit H automatically.
172      *
173      * @param n  Number of implicit hydrogen
174      */
175     public void setImplicitH(final int n) {
176         this.implicitH = n;
177     }
178 
179     /**
180      * Sets number of implicit protium (1H) on atom.
181      * @param n  Number of implicit protium
182      */
183     public void setImplicitProtium(final int n) {
184         this.implicitP = n;
185     }
186 
187     /**
188      * Sets number of implicit deuterium (2H) on atom.
189      *
190      * @param n  Number of implicit deuterium
191      */
192     public void setImplicitDeuterium(final int n) {
193         this.implicitD = n;
194     }
195 
196     /**
197      * Sets number of implicit tritium (3H) on atom.
198      * @param n  Number of implicit tritium
199      */
200     public void setImplicitTritium(final int n) {
201         this.implicitT = n;
202     }
203 
204     /**
205      * Returns chemical element symbol of atom.
206      * @return
207      */
208     public String getElementType() {
209         return elname;
210     }
211 
212     /**
213      * Returns charge on atom.
214      * @return
215      */
216     public int getCharge() {
217         return charge;
218     }
219 
220     /**
221      * Returns radical state of atom.
222      * @return
223      */
224     public INCHI_RADICAL getRadical() {
225         return radical;
226     }
227     
228     /**
229      * Returns atom's X-coordinate.
230      * @return
231      */
232     public double getX() {
233         return x;
234     }
235 
236     /**
237      * Returns atom's Y-coordinate.
238      * @return
239      */
240     public double getY() {
241         return y;
242     }
243 
244     /**
245      * Returns atom's Z-coordinate.
246      * @return
247      */
248     public double getZ() {
249         return z;
250     }
251 
252     /**
253      * Returns number of implicit hydrogens on atom.
254      * @return
255      */
256     public int getImplicitH() {
257         return implicitH;
258     }
259 
260     /**
261      * Returns number of implicit protiums (1H) on atom.
262      * @return
263      */
264     public int getImplicitProtium() {
265         return implicitP;
266     }
267 
268     /**
269      * Returns number of implicit deuteriums (2H) on atom.
270      * @return
271      */
272     public int getImplicitDeuterium() {
273         return implicitD;
274     }
275 
276     /**
277      * Returns number of implicit tritiums (3H) on atom.
278      * @return
279      */
280     public int getImplicitTritium() {
281         return implicitT;
282     }
283 
284     /**
285      * Returns isotopic mass of atom.
286      * @return
287      */
288     public int getIsotopicMass() {
289         return isotopic_mass;
290     }
291 
292     
293     int getInchiRadical() {
294     	return radical.getIndx();
295     }
296     
297     void setInchiRadical(int radical) {
298     	this.radical = INCHI_RADICAL.getValue(radical);
299     }
300 
301     
302     /**
303      * Generates string representation of information on atom,
304      * for debugging purposes.
305      */
306     public String getDebugString() {
307         return "InChI Atom: "
308             + elname
309             + " [" + x + "," + y + "," + z + "] "
310             + "Charge:" + charge + " // "
311             + "Iso Mass:" + isotopic_mass + " // "
312             + "Implicit H:" + implicitH
313             + " P:" + implicitP
314             + " D:" + implicitD
315             + " T:" + implicitT
316             + " // Radical: " + radical;
317     }
318 
319     /**
320      * Outputs information on atom, for debugging purposes.
321      */
322     public void debug() {
323         System.out.println(getDebugString());
324     }
325 }