annotate lib/FileIO/MDLMolFileIO.pm @ 0:4816e4a8ae95 draft default tip

Uploaded
author deepakjadmin
date Wed, 20 Jan 2016 09:23:18 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1 package FileIO::MDLMolFileIO;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3 # $RCSfile: MDLMolFileIO.pm,v $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4 # $Date: 2015/02/28 20:48:43 $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5 # $Revision: 1.32 $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
6 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
7 # Author: Manish Sud <msud@san.rr.com>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
8 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
9 # Copyright (C) 2015 Manish Sud. All rights reserved.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
10 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
11 # This file is part of MayaChemTools.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
12 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
13 # MayaChemTools is free software; you can redistribute it and/or modify it under
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
14 # the terms of the GNU Lesser General Public License as published by the Free
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
15 # Software Foundation; either version 3 of the License, or (at your option) any
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
16 # later version.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
17 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
18 # MayaChemTools is distributed in the hope that it will be useful, but without
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
19 # any warranty; without even the implied warranty of merchantability of fitness
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
20 # for a particular purpose. See the GNU Lesser General Public License for more
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
21 # details.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
22 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
23 # You should have received a copy of the GNU Lesser General Public License
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
24 # along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
25 # write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
26 # Boston, MA, 02111-1307, USA.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
27 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
28
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
29 use strict;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
30 use Carp;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
31 use Exporter;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
32 use Scalar::Util ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
33 use TextUtil ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
34 use FileUtil ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
35 use SDFileUtil ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
36 use FileIO::FileIO;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
37 use Molecule;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
38
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
39 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
40
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
41 @ISA = qw(FileIO::FileIO Exporter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
42 @EXPORT = qw();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
43 @EXPORT_OK = qw(IsMDLMolFile);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
44
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
45 %EXPORT_TAGS = (all => [@EXPORT, @EXPORT_OK]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
46
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
47 # Setup class variables...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
48 my($ClassName);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
49 _InitializeClass();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
50
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
51 # Class constructor...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
52 sub new {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
53 my($Class, %NamesAndValues) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
54
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
55 # Initialize object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
56 my $This = $Class->SUPER::new();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
57 bless $This, ref($Class) || $Class;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
58 $This->_InitializeMDLMolFileIO();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
59
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
60 $This->_InitializeMDLMolFileIOProperties(%NamesAndValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
61
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
62 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
63 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
64
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
65 # Initialize any local object data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
66 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
67 sub _InitializeMDLMolFileIO {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
68 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
69
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
70 # Nothing to do: Base class FileIO handles default class variables...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
71
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
72 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
73 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
74
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
75 # Initialize class ...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
76 sub _InitializeClass {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
77 #Class name...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
78 $ClassName = __PACKAGE__;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
79
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
80 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
81
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
82 # Initialize object values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
83 sub _InitializeMDLMolFileIOProperties {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
84 my($This, %NamesAndValues) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
85
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
86 # All other property names and values along with all Set/Get<PropertyName> methods
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
87 # are implemented on-demand using ObjectProperty class.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
88
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
89 my($Name, $Value, $MethodName);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
90 while (($Name, $Value) = each %NamesAndValues) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
91 $MethodName = "Set${Name}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
92 $This->$MethodName($Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
93 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
94
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
95 if (!exists $NamesAndValues{Name}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
96 croak "Error: ${ClassName}->New: Object can't be instantiated without specifying file name...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
97 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
98
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
99 # Make sure it's a MDLMol file...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
100 $Name = $NamesAndValues{Name};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
101 if (!$This->IsMDLMolFile($Name)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
102 croak "Error: ${ClassName}->New: Object can't be instantiated: File, $Name, doesn't appear to be MDLMol format...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
103 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
104
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
105 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
106 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
107
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
108 # Is it a MDLMol file?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
109 sub IsMDLMolFile ($;$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
110 my($FirstParameter, $SecondParameter) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
111 my($This, $FileName, $Status);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
112
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
113 if ((@_ == 2) && (_IsMDLMolFileIO($FirstParameter))) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
114 ($This, $FileName) = ($FirstParameter, $SecondParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
115 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
116 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
117 $FileName = $FirstParameter;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
118 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
119
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
120 # Check file extension...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
121 $Status = FileUtil::CheckFileType($FileName, "mol");
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
122
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
123 return $Status;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
124 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
125
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
126 # Read molecule from file and return molecule object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
127 sub ReadMolecule {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
128 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
129 my($FileHandle);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
130
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
131 $FileHandle = $This->GetFileHandle();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
132 return $This->ParseMoleculeString(SDFileUtil::ReadCmpdString($FileHandle));
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
133 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
134
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
135 # Write compound data using Molecule object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
136 sub WriteMolecule {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
137 my($This, $Molecule) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
138
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
139 if (!(defined($Molecule) && $Molecule->IsMolecule())) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
140 carp "Warning: ${ClassName}->WriteMolecule: No data written: Molecule object is not specified...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
141 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
142 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
143 my($FileHandle);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
144 $FileHandle = $This->GetFileHandle();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
145
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
146 print $FileHandle $This->GenerateMoleculeString($Molecule) . "\n";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
147
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
148 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
149 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
150
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
151 # Retrieve molecule string...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
152 sub ReadMoleculeString {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
153 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
154 my($FileHandle);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
155
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
156 $FileHandle = $This->GetFileHandle();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
157 return SDFileUtil::ReadCmpdString($FileHandle);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
158 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
159
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
160 # Parse molecule string and return molecule object. ParseMoleculeString supports two invocation methods: class
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
161 # method or a package function.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
162 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
163 sub ParseMoleculeString {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
164 my($FirstParameter, $SecondParameter) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
165 my($This, $MoleculeString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
166
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
167 if ((@_ == 2) && (_IsMDLMolFileIO($FirstParameter))) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
168 ($This, $MoleculeString) = ($FirstParameter, $SecondParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
169 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
170 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
171 $MoleculeString = $FirstParameter;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
172 $This = undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
173 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
174 if (!$MoleculeString) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
175 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
176 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
177 my($LineIndex, @MoleculeLines);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
178 @MoleculeLines = split /\n/, $MoleculeString;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
179
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
180 # Create molecule object and set molecule level native and MDL properties...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
181 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
182 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
183 $Molecule = new Molecule();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
184
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
185 # Set valence model for calculating implicit hydrogens...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
186 $Molecule->SetValenceModel('MDLValenceModel');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
187
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
188 # Process headers data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
189 $LineIndex = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
190 my($MoleculeName) = SDFileUtil::ParseCmpdMolNameLine($MoleculeLines[$LineIndex]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
191 $MoleculeName = TextUtil::RemoveTrailingWhiteSpaces($MoleculeName);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
192 $Molecule->SetName($MoleculeName);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
193
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
194 $LineIndex++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
195 my($UserInitial, $ProgramName, $Date, $Code, $ScalingFactor1, $ScalingFactor2, $Energy, $RegistryNum) = SDFileUtil::ParseCmpdMiscInfoLine($MoleculeLines[$LineIndex]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
196 $Molecule->SetProperties('MDLUserInitial' => $UserInitial, 'MDLProgramName' => $ProgramName, 'MDLDate' => $Date, 'MDLCode' => $Code, 'MDLScalingFactor1' => $ScalingFactor1, 'MDLScalingFactor2' => $ScalingFactor2, 'MDLEnergy' => $Energy, 'MDLRegistryNum' => $RegistryNum);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
197
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
198 $LineIndex++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
199 my($Comments) = SDFileUtil::ParseCmpdCommentsLine($MoleculeLines[$LineIndex]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
200 $Molecule->SetProperties('MDLComments' => $Comments);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
201
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
202 $LineIndex++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
203 my($AtomCount, $BondCount, $ChiralFlag, $PropertyCount, $Version) = SDFileUtil::ParseCmpdCountsLine($MoleculeLines[$LineIndex]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
204
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
205 $Molecule->SetProperties('MDLChiralFlag' => $ChiralFlag, 'MDLPropertyCount' => $PropertyCount, 'MDLVersion' => $Version);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
206
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
207 # Process atom data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
208 my($FirstAtomLineIndex, $LastAtomLineIndex, $AtomNum, $AtomX, $AtomY, $AtomZ, $AtomSymbol, $MassDifference, $Charge, $StereoParity, $Atom, %AtomNumToAtomMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
209
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
210 $AtomNum = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
211 %AtomNumToAtomMap = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
212 $FirstAtomLineIndex = 4; $LastAtomLineIndex = $FirstAtomLineIndex + $AtomCount - 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
213
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
214 for ($LineIndex = $FirstAtomLineIndex; $LineIndex <= $LastAtomLineIndex; $LineIndex++) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
215 $AtomNum++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
216 ($AtomSymbol, $AtomX, $AtomY, $AtomZ, $MassDifference, $Charge, $StereoParity) = SDFileUtil::ParseCmpdAtomLine($MoleculeLines[$LineIndex]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
217
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
218 $Atom = new Atom('AtomSymbol' => $AtomSymbol, 'XYZ' => [$AtomX, $AtomY, $AtomZ]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
219
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
220 if ($MassDifference && $MassDifference != 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
221 _ProcessMassDifference($Atom, $MassDifference);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
222 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
223 if ($Charge && $Charge != 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
224 _ProcessCharge($Atom, $Charge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
225 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
226 if ($StereoParity && $StereoParity != 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
227 _ProcessStereoParity($Atom, $StereoParity);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
228 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
229
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
230 $AtomNumToAtomMap{$AtomNum} = $Atom;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
231 $Molecule->AddAtom($Atom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
232 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
233
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
234 # Process bond data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
235 my($FirstBondLineIndex, $LastBondLineIndex, $FirstAtomNum, $SecondAtomNum, $BondType, $BondStereo, $InternalBondOrder, $InternalBondType, $Bond, $Atom1, $Atom2);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
236
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
237 $FirstBondLineIndex = $FirstAtomLineIndex + $AtomCount;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
238 $LastBondLineIndex = $FirstAtomLineIndex + $AtomCount + $BondCount - 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
239
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
240 for ($LineIndex = $FirstBondLineIndex; $LineIndex <= $LastBondLineIndex; $LineIndex++) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
241 ($FirstAtomNum, $SecondAtomNum, $BondType, $BondStereo) = SDFileUtil::ParseCmpdBondLine($MoleculeLines[$LineIndex]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
242
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
243 $Atom1 = $AtomNumToAtomMap{$FirstAtomNum};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
244 $Atom2 = $AtomNumToAtomMap{$SecondAtomNum};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
245
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
246 ($InternalBondOrder, $InternalBondType) = SDFileUtil::MDLBondTypeToInternalBondOrder($BondType);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
247 $Bond = new Bond('Atoms' => [$Atom1, $Atom2], 'BondOrder' => $InternalBondOrder);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
248 $Bond->SetBondType($InternalBondType);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
249
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
250 if ($BondStereo && $BondStereo != 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
251 _ProcessBondStereo($Bond, $BondStereo);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
252 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
253
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
254 $Molecule->AddBond($Bond);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
255 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
256
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
257 # Process available property block lines starting with A aaa, M CHG, M ISO and M RAD. All other property blocks
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
258 # lines are for query or specific display purposes and are ignored for now.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
259 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
260 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
261 my($PropertyLineIndex, $PropertyLine, $FirstChargeOrRadicalLine, @ValuePairs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
262
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
263 $PropertyLineIndex = $FirstAtomLineIndex + $AtomCount + $BondCount;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
264 $PropertyLine = $MoleculeLines[$PropertyLineIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
265 $FirstChargeOrRadicalLine = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
266
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
267 PROPERTYLINE: while ($PropertyLine !~ /^M END/i ) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
268 if ($PropertyLine =~ /\$\$\$\$/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
269 last PROPERTYLINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
270 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
271 if ($PropertyLine =~ /^(M CHG|M RAD)/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
272 if ($FirstChargeOrRadicalLine) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
273 $FirstChargeOrRadicalLine = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
274 _ZeroOutAtomsChargeAndRadicalValues(\%AtomNumToAtomMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
275 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
276 if ($PropertyLine =~ /^M CHG/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
277 @ValuePairs = SDFileUtil::ParseCmpdChargePropertyLine($PropertyLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
278 _ProcessChargeProperty(\@ValuePairs, \%AtomNumToAtomMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
279 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
280 elsif ($PropertyLine =~ /^M RAD/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
281 @ValuePairs = SDFileUtil::ParseCmpdRadicalPropertyLine($PropertyLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
282 _ProcessRadicalProperty(\@ValuePairs, \%AtomNumToAtomMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
283 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
284 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
285 elsif ($PropertyLine =~ /^M ISO/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
286 @ValuePairs = SDFileUtil::ParseCmpdIsotopePropertyLine($PropertyLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
287 _ProcessIsotopeProperty(\@ValuePairs, \%AtomNumToAtomMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
288 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
289 elsif ($PropertyLine =~ /^A /i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
290 my($NextPropertyLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
291 $PropertyLineIndex++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
292 $NextPropertyLine = $MoleculeLines[$PropertyLineIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
293 @ValuePairs = SDFileUtil::ParseCmpdAtomAliasPropertyLine($PropertyLine, $NextPropertyLine);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
294 _ProcessAtomAliasProperty(\@ValuePairs, \%AtomNumToAtomMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
295 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
296 $PropertyLineIndex++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
297 $PropertyLine = $MoleculeLines[$PropertyLineIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
298 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
299 # Store input molecule string as generic property of molecule...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
300 $Molecule->SetInputMoleculeString($MoleculeString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
301
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
302 return $Molecule;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
303 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
304
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
305 # Generate molecule string using molecule object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
306 sub GenerateMoleculeString {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
307 my($FirstParameter, $SecondParameter) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
308 my($This, $Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
309
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
310 if ((@_ == 2) && (_IsMDLMolFileIO($FirstParameter))) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
311 ($This, $Molecule) = ($FirstParameter, $SecondParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
312 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
313 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
314 $Molecule = $FirstParameter;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
315 $This = undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
316 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
317 if (!defined($Molecule)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
318 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
319 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
320 my(@MoleculeLines);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
321 @MoleculeLines = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
322
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
323 # First line: Molname line...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
324 push @MoleculeLines, SDFileUtil::GenerateCmpdMolNameLine($Molecule->GetName());
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
325
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
326 # Second line: Misc info...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
327 my($ProgramName, $UserInitial, $Code);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
328 $ProgramName = ''; $UserInitial = ''; $Code = '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
329
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
330 $Code = $Molecule->IsThreeDimensional() ? '3D' : '2D';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
331
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
332 push @MoleculeLines, SDFileUtil::GenerateCmpdMiscInfoLine($ProgramName, $UserInitial, $Code);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
333
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
334 # Third line: Comments line...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
335 my($Comments);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
336 $Comments = $Molecule->HasProperty('MDLComments') ? $Molecule->GetMDLComments() : ($Molecule->HasProperty('Comments') ? $Molecule->GetComments() : '');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
337 push @MoleculeLines, SDFileUtil::GenerateCmpdCommentsLine($Comments);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
338
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
339 # Fourth line: Counts line for V2000
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
340 my($AtomCount, $BondCount, $ChiralFlag);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
341 $AtomCount = $Molecule->GetNumOfAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
342 $BondCount = $Molecule->GetNumOfBonds();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
343 $ChiralFlag = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
344 push @MoleculeLines, SDFileUtil::GenerateCmpdCountsLine($AtomCount, $BondCount, $ChiralFlag);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
345
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
346 # Atom lines...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
347 my($Atom, $AtomSymbol, $AtomX, $AtomY, $AtomZ, $MassDifference, $Charge, $StereoParity, $AtomNum, $AtomID, @Atoms, %AtomIDToNum);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
348 my($ChargePropertyValue, $IsotopePropertyValue, $RadicalPropertyValue, $AtomAliasPropertyValue, @IsotopePropertyValuePairs, @ChargePropertyValuePairs, @RadicalPropertyValuePairs, @AtomAliasPropertyValuePairs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
349
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
350 @ChargePropertyValuePairs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
351 @IsotopePropertyValuePairs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
352 @RadicalPropertyValuePairs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
353 @AtomAliasPropertyValuePairs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
354
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
355 @Atoms = $Molecule->GetAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
356
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
357 $AtomNum = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
358 for $Atom (@Atoms) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
359 $AtomNum++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
360 $AtomID = $Atom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
361 $AtomIDToNum{$AtomID} = $AtomNum;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
362
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
363 $AtomSymbol = $Atom->GetAtomSymbol();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
364 ($AtomX, $AtomY, $AtomZ) = $Atom->GetXYZ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
365
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
366 # Setup mass difference...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
367 $MassDifference = _GetMassDifference($Atom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
368 if ($MassDifference) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
369 # Hold it for M ISO property lines...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
370 $IsotopePropertyValue = _GetIsotopePropertyValue($Atom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
371 if ($IsotopePropertyValue) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
372 push @IsotopePropertyValuePairs, ($AtomNum, $IsotopePropertyValue);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
373 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
374 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
375
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
376 # Setup charge...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
377 $Charge = _GetCharge($Atom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
378 if ($Charge) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
379 # Hold it for M CHG property lines...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
380 $ChargePropertyValue = _GetChargePropertyValue($Atom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
381 if ($ChargePropertyValue) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
382 push @ChargePropertyValuePairs, ($AtomNum, $ChargePropertyValue);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
383 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
384 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
385
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
386 # Hold any radical values for for M RAD property lines...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
387 $RadicalPropertyValue = _GetRadicalPropertyValue($Atom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
388 if ($RadicalPropertyValue) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
389 push @RadicalPropertyValuePairs, ($AtomNum, $RadicalPropertyValue);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
390 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
391
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
392 # Hold any atom alias value for A xxx property lines....
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
393 $AtomAliasPropertyValue = _GetAtomAliasPropertyValue($Atom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
394 if ($AtomAliasPropertyValue) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
395 push @AtomAliasPropertyValuePairs, ($AtomNum, $AtomAliasPropertyValue);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
396
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
397 # Set AtomSymbol to carbon as atom alias would override its value during parsing...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
398 $AtomSymbol = "C";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
399 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
400
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
401 # Setup stereo parity...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
402 $StereoParity = _GetStereoParity($Atom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
403
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
404 push @MoleculeLines, SDFileUtil::GenerateCmpdAtomLine($AtomSymbol, $AtomX, $AtomY, $AtomZ, $MassDifference, $Charge, $StereoParity);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
405 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
406
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
407 # Bond lines...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
408 my($FirstAtomID, $FirstAtom, $FirstAtomNum, $SecondAtomID, $SecondAtom, $SecondAtomNum, $MDLBondType, $BondOrder, $BondType, $MDLBondStereo, $Bond, @Bonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
409 for $FirstAtom (@Atoms) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
410 $FirstAtomID = $FirstAtom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
411 $FirstAtomNum = $AtomIDToNum{$FirstAtomID};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
412
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
413 @Bonds = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
414 @Bonds = $FirstAtom->GetBonds();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
415 BOND: for $Bond (@Bonds) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
416 $SecondAtom = $Bond->GetBondedAtom($FirstAtom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
417 $SecondAtomID = $SecondAtom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
418 $SecondAtomNum = $AtomIDToNum{$SecondAtomID};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
419 if ($FirstAtomNum >= $SecondAtomNum) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
420 next BOND;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
421 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
422 # Setup BondType...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
423 $BondOrder = $Bond->GetBondOrder();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
424 $BondType = $Bond->GetBondType();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
425 $MDLBondType = SDFileUtil::InternalBondOrderToMDLBondType($BondOrder, $BondType);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
426
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
427 # Setup BondStereo...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
428 $MDLBondStereo = _GetBondStereo($Bond);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
429
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
430 push @MoleculeLines, SDFileUtil::GenerateCmpdBondLine($FirstAtomNum, $SecondAtomNum, $MDLBondType, $MDLBondStereo);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
431 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
432 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
433 # Property lines...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
434 if (@IsotopePropertyValuePairs) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
435 push @MoleculeLines, SDFileUtil::GenerateCmpdIsotopePropertyLines(\@IsotopePropertyValuePairs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
436 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
437 if (@ChargePropertyValuePairs) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
438 push @MoleculeLines, SDFileUtil::GenerateCmpdChargePropertyLines(\@ChargePropertyValuePairs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
439 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
440 if (@RadicalPropertyValuePairs) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
441 push @MoleculeLines, SDFileUtil::GenerateCmpdRadicalPropertyLines(\@RadicalPropertyValuePairs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
442 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
443 if (@AtomAliasPropertyValuePairs) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
444 push @MoleculeLines, SDFileUtil::GenerateCmpdAtomAliasPropertyLines(\@AtomAliasPropertyValuePairs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
445 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
446
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
447 push @MoleculeLines, "M END";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
448
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
449 return join "\n", @MoleculeLines;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
450 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
451
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
452 # Process MassDifference value and set atom's mass number...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
453 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
454 sub _ProcessMassDifference {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
455 my($Atom, $MassDifference) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
456 my($MassNumber, $NewMassNumber, $AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
457
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
458 $AtomicNumber = $Atom->GetAtomicNumber();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
459
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
460 if (!$AtomicNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
461 carp "Warning: ${ClassName}->_ProcessMassDifference: Ignoring specified mass difference value, $MassDifference, in SD file: Assigned to non standard element...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
462 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
463 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
464 $MassNumber = $Atom->GetMassNumber();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
465 if (!$MassDifference) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
466 carp "Warning: ${ClassName}->_ProcessMassDifference: Ignoring specified mass difference value, $MassDifference, in SD file: Unknown MassNumber value...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
467 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
468 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
469 $NewMassNumber = $MassNumber + $MassDifference;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
470 if (!PeriodicTable::IsElementNaturalIsotopeMassNumber($AtomicNumber, $NewMassNumber)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
471 my($AtomSymbol) = $Atom->GetAtomSymbol();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
472 carp "Warning: ${ClassName}->_ProcessMassDifference: Unknown mass number, $MassNumber, corresponding to specified mass difference value, $MassDifference, in SD for atom with atomic number, $AtomicNumber, and atomic symbol, $AtomSymbol. The mass number value has been assigned. Don't forget to Set ExactMass property explicitly; otherwise, GetExactMass method would return mass of most abundant isotope...\n";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
473 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
474
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
475 # Use SetProperty method instead of SetMassNumber to skip explicit checks on MassNumber value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
476 $Atom->SetProperty('MassNumber', $NewMassNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
477 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
478
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
479 # Get mass difference value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
480 sub _GetMassDifference {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
481 my($Atom) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
482 my($MassDifference, $MassNumber, $MostAbundantMassNumber, $AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
483
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
484 $MassDifference = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
485 $MassNumber = $Atom->GetMassNumber();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
486 if (defined $MassNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
487 $AtomicNumber = $Atom->GetAtomicNumber();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
488 if (defined $AtomicNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
489 $MostAbundantMassNumber = PeriodicTable::GetElementMostAbundantNaturalIsotopeMassNumber($AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
490 if (defined($MostAbundantMassNumber) && $MassNumber != $MostAbundantMassNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
491 $MassDifference = $MassNumber - $MostAbundantMassNumber;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
492 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
493 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
494 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
495 return $MassDifference;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
496 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
497
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
498 # Process formal charge value and assign it to atom as formal charge...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
499 sub _ProcessCharge {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
500 my($Atom, $Charge) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
501 my($InternalCharge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
502
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
503 $InternalCharge = SDFileUtil::MDLChargeToInternalCharge($Charge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
504 $Atom->SetFormalCharge($InternalCharge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
505 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
506
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
507 # Get MDL formal charge value ...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
508 sub _GetCharge {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
509 my($Atom) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
510 my($InternalCharge, $Charge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
511
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
512 $Charge = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
513 if ($Atom->HasProperty('FormalCharge')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
514 $InternalCharge = $Atom->GetFormalCharge();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
515 if ($InternalCharge) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
516 $Charge = SDFileUtil::InternalChargeToMDLCharge($InternalCharge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
517 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
518 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
519 return $Charge;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
520 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
521
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
522 # Process stereo parity value and assign it to atom as MDL property...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
523 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
524 # Notes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
525 # . Mark atom as chiral center
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
526 # . Assign any explicit Clockwise (parity 1), CounterClockwise (parity 2) or either value (parity 3) as property of atom.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
527 # . MDL values of Clockwise and CounterClockwise don't correspond to priority assigned to ligands around
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
528 # stereo center using CIP scheme; consequently, these values can't be used to set internal Stereochemistry for
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
529 # an atom.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
530 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
531 sub _ProcessStereoParity {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
532 my($Atom, $StereoParity) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
533
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
534 $Atom->SetStereoCenter('1');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
535 $Atom->SetMDLStereoParity($StereoParity);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
536 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
537
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
538 # Set stereo parity value to zero for now: The current release of MayaChemTools hasn't implemented
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
539 # functionality to determine chirality.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
540 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
541 sub _GetStereoParity {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
542 my($Atom) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
543 my($StereoParity);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
544
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
545 $StereoParity = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
546
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
547 return $StereoParity;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
548 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
549
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
550 # Process bond stereo value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
551 sub _ProcessBondStereo {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
552 my($Bond, $BondStereo) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
553 my($InternalBondStereo);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
554
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
555 $InternalBondStereo = SDFileUtil::MDLBondStereoToInternalBondStereochemistry($BondStereo);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
556 if ($InternalBondStereo) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
557 $Bond->SetBondStereochemistry($InternalBondStereo);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
558 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
559 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
560
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
561 # Get MDLBondStereo value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
562 sub _GetBondStereo {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
563 my($Bond) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
564 my($InternalBondStereo, $BondStereo);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
565
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
566 $BondStereo = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
567
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
568 $InternalBondStereo = '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
569 BONDSTEREO: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
570 if ($Bond->IsUp()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
571 $InternalBondStereo = 'Up';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
572 last BONDSTEREO;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
573 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
574 if ($Bond->IsDown()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
575 $InternalBondStereo = 'Down';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
576 last BONDSTEREO;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
577 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
578 if ($Bond->IsUpOrDown()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
579 $InternalBondStereo = 'UpOrDown';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
580 last BONDSTEREO;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
581 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
582 if ($Bond->IsCisOrTrans() || $Bond->IsCis() || $Bond->IsTrans()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
583 $InternalBondStereo = 'CisOrTrans';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
584 last BONDSTEREO;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
585 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
586 $InternalBondStereo = '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
587 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
588
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
589 if ($InternalBondStereo) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
590 $BondStereo = SDFileUtil::InternalBondStereochemistryToMDLBondStereo($InternalBondStereo);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
591 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
592
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
593 return $BondStereo;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
594 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
595
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
596 # Zero out charge and radical values specified for atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
597 sub _ZeroOutAtomsChargeAndRadicalValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
598 my($AtomNumToAtomMapRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
599 my($Atom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
600
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
601 for $Atom (values %{$AtomNumToAtomMapRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
602 if ($Atom->HasProperty('FormalCharge')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
603 $Atom->DeleteProperty('FormalCharge');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
604 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
605 elsif ($Atom->HasProperty('SpinMultiplicity')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
606 $Atom->DeleteProperty('SpinMultiplicity');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
607 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
608 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
609 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
610
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
611 # Process charge property value pairs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
612 sub _ProcessChargeProperty {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
613 my($ValuePairsRef, $AtomNumToAtomMapRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
614
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
615 if (!(defined($ValuePairsRef) && @{$ValuePairsRef})) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
616 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
617 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
618 my($Index, $ValuePairsCount, $AtomNum, $Charge, $Atom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
619
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
620 $ValuePairsCount = scalar @{$ValuePairsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
621 VALUEPAIRS: for ($Index = 0; $Index < $ValuePairsCount; $Index +=2) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
622 $AtomNum = $ValuePairsRef->[$Index]; $Charge = $ValuePairsRef->[$Index + 1];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
623 if (!$Charge) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
624 next VALUEPAIRS;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
625 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
626 if (!exists $AtomNumToAtomMapRef->{$AtomNum}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
627 next VALUEPAIRS;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
628 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
629 $Atom = $AtomNumToAtomMapRef->{$AtomNum};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
630 if ($Atom->HasProperty('SpinMultiplicity')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
631 carp "Warning: ${ClassName}->_ProcessChargeProperty: Setting formal charge on atom number, $AtomNum, with already assigned spin multiplicity value...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
632 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
633 $Atom->SetFormalCharge($Charge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
634 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
635 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
636
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
637 # Get charge property value for an atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
638 sub _GetChargePropertyValue {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
639 my($Atom) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
640 my($Charge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
641
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
642 $Charge = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
643 if ($Atom->HasProperty('FormalCharge')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
644 $Charge = $Atom->GetFormalCharge();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
645 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
646 return $Charge;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
647 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
648
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
649 # Process charge property value pairs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
650 sub _ProcessRadicalProperty {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
651 my($ValuePairsRef, $AtomNumToAtomMapRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
652
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
653 if (!(defined($ValuePairsRef) && @{$ValuePairsRef})) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
654 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
655 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
656 my($Index, $ValuePairsCount, $AtomNum, $Radical, $SpinMultiplicity, $Atom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
657
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
658 $ValuePairsCount = scalar @{$ValuePairsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
659 VALUEPAIRS: for ($Index = 0; $Index < $ValuePairsCount; $Index +=2) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
660 $AtomNum = $ValuePairsRef->[$Index]; $Radical = $ValuePairsRef->[$Index + 1];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
661 if (!$Radical) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
662 next VALUEPAIRS;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
663 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
664 if (!exists $AtomNumToAtomMapRef->{$AtomNum}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
665 next VALUEPAIRS;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
666 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
667 $Atom = $AtomNumToAtomMapRef->{$AtomNum};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
668 if ($Atom->HasProperty('FormalCharge')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
669 carp "Warning: ${ClassName}->_ProcessRadicalProperty: Setting spin multiplicity on atom number, $AtomNum, with already assigned formal charge value...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
670 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
671 $SpinMultiplicity = SDFileUtil::MDLRadicalToInternalSpinMultiplicity($Radical);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
672 $Atom->SetSpinMultiplicity($SpinMultiplicity);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
673 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
674 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
675
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
676 # Get radical property value for an atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
677 sub _GetRadicalPropertyValue {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
678 my($Atom) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
679 my($Radical, $SpinMultiplicity);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
680
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
681 $Radical = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
682 if ($Atom->HasProperty('SpinMultiplicity')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
683 $SpinMultiplicity = $Atom->GetSpinMultiplicity();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
684 $Radical = SDFileUtil::InternalSpinMultiplicityToMDLRadical($SpinMultiplicity);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
685 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
686 return $Radical;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
687 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
688
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
689 # Process isotope property value pairs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
690 sub _ProcessIsotopeProperty {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
691 my($ValuePairsRef, $AtomNumToAtomMapRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
692
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
693 if (!(defined($ValuePairsRef) && @{$ValuePairsRef})) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
694 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
695 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
696 my($Index, $ValuePairsCount, $AtomNum, $MassNumber, $Atom, $AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
697
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
698 $ValuePairsCount = scalar @{$ValuePairsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
699 VALUEPAIRS: for ($Index = 0; $Index < $ValuePairsCount; $Index +=2) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
700 $AtomNum = $ValuePairsRef->[$Index]; $MassNumber = $ValuePairsRef->[$Index + 1];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
701 if (!$MassNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
702 next VALUEPAIRS;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
703 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
704 if (!exists $AtomNumToAtomMapRef->{$AtomNum}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
705 next VALUEPAIRS;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
706 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
707 $Atom = $AtomNumToAtomMapRef->{$AtomNum};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
708 $AtomicNumber = $Atom->GetAtomicNumber();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
709
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
710 if (!PeriodicTable::IsElementNaturalIsotopeMassNumber($AtomicNumber, $MassNumber)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
711 my($AtomSymbol) = $Atom->GetAtomSymbol();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
712 carp "Warning: ${ClassName}->_ProcessProcessIsotopeProperty: Unknown mass number, $MassNumber, specified on M ISO property line for atom number, $AtomNum, in SD for atom with atomic number, $AtomicNumber, and atomic symbol, $AtomSymbol. The mass number value has been assigned. Don't forget to Set ExactMass property explicitly; otherwise, GetExactMass method would return mass of most abundant isotope...\n";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
713 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
714
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
715 # Use SetProperty method instead of SetMassNumber to skip explicit checks on MassNumber value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
716 $Atom->SetProperty('MassNumber', $MassNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
717 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
718 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
719
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
720 # Get isotope property value for an atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
721 sub _GetIsotopePropertyValue {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
722 my($Atom) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
723 my($MassNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
724
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
725 $MassNumber = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
726 if ($Atom->HasProperty('MassNumber')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
727 $MassNumber = $Atom->GetMassNumber();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
728 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
729 return $MassNumber;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
730 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
731
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
732 # Process atom alias property value pairs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
733 sub _ProcessAtomAliasProperty {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
734 my($ValuePairsRef, $AtomNumToAtomMapRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
735
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
736 if (!(defined($ValuePairsRef) && @{$ValuePairsRef})) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
737 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
738 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
739 my($Index, $ValuePairsCount, $AtomNum, $AtomAlias, $Atom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
740
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
741 $ValuePairsCount = scalar @{$ValuePairsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
742 VALUEPAIRS: for ($Index = 0; $Index < $ValuePairsCount; $Index +=2) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
743 $AtomNum = $ValuePairsRef->[$Index]; $AtomAlias = $ValuePairsRef->[$Index + 1];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
744 if (!$AtomNum) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
745 next VALUEPAIRS;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
746 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
747 if (!exists $AtomNumToAtomMapRef->{$AtomNum}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
748 next VALUEPAIRS;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
749 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
750 $AtomAlias = TextUtil::RemoveLeadingAndTrailingWhiteSpaces($AtomAlias);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
751 if (TextUtil::IsEmpty($AtomAlias)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
752 carp("Warning: ${ClassName}->_ProcessAtomAliasProperty: Ignoring atom alias property line: No Atom alias value specified...");
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
753 next VALUEPAIRS;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
754 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
755
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
756 # Set atom symbol to atom alias which sets atomic number automatically...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
757 $Atom = $AtomNumToAtomMapRef->{$AtomNum};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
758 $Atom->SetAtomSymbol($AtomAlias);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
759
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
760 $Atom->SetProperty('AtomAlias', $AtomAlias);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
761 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
762 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
763
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
764 # Get atom alias property value for an atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
765 sub _GetAtomAliasPropertyValue {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
766 my($Atom) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
767 my($AtomAlias);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
768
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
769 $AtomAlias = undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
770 if ($Atom->HasProperty('AtomAlias')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
771 $AtomAlias = $Atom->GetAtomAlias();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
772 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
773 return $AtomAlias;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
774 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
775
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
776 # Is it a MDLMolFileIO object?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
777 sub _IsMDLMolFileIO {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
778 my($Object) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
779
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
780 return (Scalar::Util::blessed($Object) && $Object->isa($ClassName)) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
781 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
782
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
783
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
784 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
785
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
786 __END__
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
787
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
788 =head1 NAME
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
789
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
790 MDLMolFileIO
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
791
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
792 =head1 SYNOPSIS
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
793
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
794 use FileIO::MDLMolFileIO;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
795
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
796 use FileIO::MDLMolFileIO qw(:all);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
797
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
798 =head1 DESCRIPTION
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
799
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
800 B<MDLMolFIleIO> class provides the following methods:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
801
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
802 new, GenerateMoleculeString, IsMDLMolFile, ParseMoleculeString, ReadMolecule,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
803 ReadMoleculeString, WriteMolecule
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
804
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
805 The following methods can also be used as functions:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
806
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
807 GenerateMoleculeString, IsMDLMolFile, ParseMoleculeString
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
808
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
809 Data specific to B<MDLMolFileIO> class not directly used by B<Molecule>, B<Atom> and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
810 B<Bond> objects - data label/value pairs, atom SteroParity and so on - is associated to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
811 and retrieved from appropriate objects using following methods:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
812
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
813 SetMDL<PropertyName>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
814 GetMDL<PropertyName>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
815
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
816 B<MDLMolFileIO> class is derived from I<FileIO> class and uses its methods to support
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
817 generic file related functionality.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
818
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
819 =head2 METHODS
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
820
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
821 =over 4
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
822
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
823 =item B<new>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
824
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
825 $NewMDLMolFileIO = new FileIO::MDLMolFileIO(%NamesAndValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
826
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
827 Using specified I<MDLMolFileIO> property names and values hash, B<new> method creates a new object
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
828 and returns a reference to newly created B<MDLMolFileIO> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
829
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
830 =item B<GenerateMoleculeString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
831
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
832 $MoleculeString = $MDLMolFileIO->GenerateMoleculeString($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
833 $MoleculeString = FileIO::MDLMolFileIO::GenerateMoleculeString($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
834
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
835 Returns a B<MoleculeString> in MDLMol format corresponding to I<Molecule>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
836
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
837 =item B<IsMDLMolFile>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
838
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
839 $Status = $MDLMolFileIO->IsMDLMolFile($FileName);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
840 $Status = FileIO::MDLMolFileIO::IsMDLMolFile($FileName);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
841
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
842 Returns 1 or 0 based on whether I<FileName> is a MDLMol file.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
843
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
844 =item B<ParseMoleculeString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
845
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
846 $Molecule = $MDLMolFileIO->ParseMoleculeString($MoleculeString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
847 $Molecule = FileIO::MDLMolFileIO::ParseMoleculeString($MoleculeString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
848
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
849 Parses I<MoleculeString> and returns a B<Molecule> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
850
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
851 =item B<ReadMolecule>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
852
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
853 $Molecule = $MDLMolFileIO->ReadMolecule($FileHandle);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
854
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
855 Reads data for the compound in a file using already opened I<FileHandle>, creates,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
856 and returns a B<Molecule> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
857
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
858 =item B<ReadMoleculeString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
859
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
860 $MoleculeString = $MDLMolFileIO->ReadMoleculeString($FileHandle);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
861
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
862 Reads data for the compound in a file using already opened I<FileHandle> and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
863 returns a B<MoleculeString> corresponding to compound structure and other associated
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
864 data.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
865
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
866 =item B<WriteMolecule>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
867
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
868 $MDLMolFileIO->WriteMolecule($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
869
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
870 Writes I<Molecule> data to a file in MDLMol format and returns B<MDLMolFileIO>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
871
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
872 =back
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
873
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
874 =head1 AUTHOR
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
875
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
876 Manish Sud <msud@san.rr.com>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
877
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
878 =head1 SEE ALSO
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
879
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
880 MoleculeFileIO.pm, SDFileIO.pm
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
881
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
882 =head1 COPYRIGHT
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
883
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
884 Copyright (C) 2015 Manish Sud. All rights reserved.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
885
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
886 This file is part of MayaChemTools.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
887
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
888 MayaChemTools is free software; you can redistribute it and/or modify it under
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
889 the terms of the GNU Lesser General Public License as published by the Free
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
890 Software Foundation; either version 3 of the License, or (at your option)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
891 any later version.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
892
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
893 =cut