annotate mayachemtools/lib/FileIO/SDFileIO.pm @ 0:73ae111cf86f draft

Uploaded
author deepakjadmin
date Wed, 20 Jan 2016 11:55:01 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1 package FileIO::SDFileIO;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
2 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
3 # $RCSfile: SDFileIO.pm,v $
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
4 # $Date: 2015/02/28 20:48:43 $
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
5 # $Revision: 1.35 $
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
6 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
7 # Author: Manish Sud <msud@san.rr.com>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
8 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
9 # Copyright (C) 2015 Manish Sud. All rights reserved.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
10 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
11 # This file is part of MayaChemTools.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
12 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
13 # MayaChemTools is free software; you can redistribute it and/or modify it under
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
14 # the terms of the GNU Lesser General Public License as published by the Free
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
15 # Software Foundation; either version 3 of the License, or (at your option) any
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
16 # later version.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
17 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
18 # MayaChemTools is distributed in the hope that it will be useful, but without
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
19 # any warranty; without even the implied warranty of merchantability of fitness
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
20 # for a particular purpose. See the GNU Lesser General Public License for more
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
21 # details.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
22 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
23 # You should have received a copy of the GNU Lesser General Public License
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
24 # along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
25 # write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
26 # Boston, MA, 02111-1307, USA.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
27 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
28
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
29 use strict;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
30 use Carp;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
31 use Exporter;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
32 use Scalar::Util ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
33 use TextUtil ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
34 use FileUtil ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
35 use SDFileUtil ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
36 use FileIO::FileIO;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
37 use FileIO::MDLMolFileIO;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
38 use Molecule;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
39
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
40 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
41
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
42 @ISA = qw(FileIO::FileIO Exporter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
43 @EXPORT = qw();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
44 @EXPORT_OK = qw(IsSDFile);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
45
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
46 %EXPORT_TAGS = (all => [@EXPORT, @EXPORT_OK]);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
47
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
48 # Setup class variables...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
49 my($ClassName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
50 _InitializeClass();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
51
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
52 # Class constructor...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
53 sub new {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
54 my($Class, %NamesAndValues) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
55
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
56 # Initialize object...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
57 my $This = $Class->SUPER::new();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
58 bless $This, ref($Class) || $Class;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
59 $This->_InitializeSDFileIO();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
60
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
61 $This->_InitializeSDFileIOProperties(%NamesAndValues);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
62
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
63 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
64 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
65
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
66 # Initialize any local object data...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
67 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
68 sub _InitializeSDFileIO {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
69 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
70
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
71 # Sorting of MDL data fields during output: Keep the initial order or write 'em out alphabetically...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
72 $This->{SortDataFieldsDuringOutput} = 'No';
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
73
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
74 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
75 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
76
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
77 # Initialize class ...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
78 sub _InitializeClass {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
79 #Class name...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
80 $ClassName = __PACKAGE__;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
81
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
82 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
83
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
84 # Initialize object values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
85 sub _InitializeSDFileIOProperties {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
86 my($This, %NamesAndValues) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
87
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
88 # All other property names and values along with all Set/Get<PropertyName> methods
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
89 # are implemented on-demand using ObjectProperty class.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
90
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
91 my($Name, $Value, $MethodName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
92 while (($Name, $Value) = each %NamesAndValues) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
93 $MethodName = "Set${Name}";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
94 $This->$MethodName($Value);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
95 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
96
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
97 if (!exists $NamesAndValues{Name}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
98 croak "Error: ${ClassName}->New: Object can't be instantiated without specifying file name...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
99 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
100
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
101 # Make sure it's a SD file...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
102 $Name = $NamesAndValues{Name};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
103 if (!$This->IsSDFile($Name)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
104 croak "Error: ${ClassName}->New: Object can't be instantiated: File, $Name, doesn't appear to be SDF format...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
105 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
106
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
107 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
108 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
109
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
110 # Is it a SD file?
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
111 sub IsSDFile ($;$) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
112 my($FirstParameter, $SecondParameter) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
113 my($This, $FileName, $Status);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
114
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
115 if ((@_ == 2) && (_IsSDFileIO($FirstParameter))) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
116 ($This, $FileName) = ($FirstParameter, $SecondParameter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
117 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
118 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
119 $FileName = $FirstParameter;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
120 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
121
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
122 # Check file extension...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
123 $Status = FileUtil::CheckFileType($FileName, "sd sdf");
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
124
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
125 return $Status;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
126 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
127
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
128 # Read molecule from file and return molecule object...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
129 sub ReadMolecule {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
130 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
131 my($FileHandle);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
132
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
133 $FileHandle = $This->GetFileHandle();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
134 return $This->ParseMoleculeString(SDFileUtil::ReadCmpdString($FileHandle));
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
135 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
136
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
137 # Write compound data along with any data field label and values using Molecule object...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
138 sub WriteMolecule {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
139 my($This, $Molecule) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
140
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
141 if (!(defined($Molecule) && $Molecule->IsMolecule())) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
142 carp "Warning: ${ClassName}->WriteMolecule: No data written: Molecule object is not specified...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
143 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
144 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
145 my($FileHandle);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
146 $FileHandle = $This->GetFileHandle();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
147
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
148 print $FileHandle $This->GenerateMoleculeString($Molecule) . "\n";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
149
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
150 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
151 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
152
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
153 # Retrieve molecule string...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
154 sub ReadMoleculeString {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
155 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
156 my($FileHandle);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
157
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
158 $FileHandle = $This->GetFileHandle();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
159 return SDFileUtil::ReadCmpdString($FileHandle);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
160 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
161
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
162 # Parse molecule string and return molecule object. ParseMoleculeString supports two invocation methods: class
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
163 # method or a package function.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
164 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
165 sub ParseMoleculeString {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
166 my($FirstParameter, $SecondParameter) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
167 my($This, $MoleculeString);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
168
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
169 if ((@_ == 2) && (_IsSDFileIO($FirstParameter))) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
170 ($This, $MoleculeString) = ($FirstParameter, $SecondParameter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
171 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
172 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
173 $MoleculeString = $FirstParameter;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
174 $This = undef;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
175 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
176 if (!$MoleculeString) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
177 return undef;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
178 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
179 # Parse molecule data...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
180 my($Molecule);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
181 $Molecule = FileIO::MDLMolFileIO::ParseMoleculeString($MoleculeString);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
182
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
183 # Process data label/value pairs...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
184 my(@MoleculeLines, @DataLabels, %DataLabelsAndValues);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
185
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
186 %DataLabelsAndValues = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
187 @MoleculeLines = split /\n/, $MoleculeString;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
188 @DataLabels = SDFileUtil::GetCmpdDataHeaderLabels(\@MoleculeLines);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
189 %DataLabelsAndValues = SDFileUtil::GetCmpdDataHeaderLabelsAndValues(\@MoleculeLines);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
190
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
191 # Store reference to data labels to keep track of their initial order in SD file...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
192 $Molecule->SetDataFieldLabels(\@DataLabels);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
193
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
194 # Store reference to SD data label/value pairs hash as a generic property of molecule...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
195 $Molecule->SetDataFieldLabelAndValues(\%DataLabelsAndValues);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
196
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
197 return $Molecule;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
198 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
199
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
200 # Generate molecule string using molecule object...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
201 sub GenerateMoleculeString {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
202 my($FirstParameter, $SecondParameter) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
203 my($This, $Molecule);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
204
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
205 if ((@_ == 2) && (_IsSDFileIO($FirstParameter))) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
206 ($This, $Molecule) = ($FirstParameter, $SecondParameter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
207 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
208 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
209 $Molecule = $FirstParameter;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
210 $This = undef;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
211 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
212 if (!defined($Molecule)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
213 return undef;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
214 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
215 # Generate CTAB data...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
216 my($CmpdString);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
217 $CmpdString = FileIO::MDLMolFileIO::GenerateMoleculeString($Molecule);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
218
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
219 # Generate any data field labels and values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
220 my($DataFieldLabelsAndValuesString);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
221
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
222 $DataFieldLabelsAndValuesString = '';
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
223 if ($Molecule->HasProperty('DataFieldLabels')) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
224 my($DataFieldLabelsRef, $DataFieldLabelAndValuesRef, $SortDataFields);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
225
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
226 $SortDataFields = (exists($This->{SortDataFieldsDuringOutput}) && $This->{SortDataFieldsDuringOutput} =~ /^Yes$/i) ? 1 : 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
227
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
228 $DataFieldLabelsRef = $Molecule->GetDataFieldLabels();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
229 $DataFieldLabelAndValuesRef = $Molecule->GetDataFieldLabelAndValues();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
230 $DataFieldLabelsAndValuesString = join "\n", SDFileUtil::GenerateCmpdDataHeaderLabelsAndValuesLines($DataFieldLabelsRef, $DataFieldLabelAndValuesRef, $SortDataFields);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
231 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
232
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
233 return "${CmpdString }\n${DataFieldLabelsAndValuesString}\n\$\$\$\$";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
234 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
235
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
236
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
237 # Is it a SDFileIO object?
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
238 sub _IsSDFileIO {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
239 my($Object) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
240
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
241 return (Scalar::Util::blessed($Object) && $Object->isa($ClassName)) ? 1 : 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
242 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
243
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
244 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
245
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
246 __END__
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
247
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
248 =head1 NAME
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
249
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
250 SDFileIO
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
251
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
252 =head1 SYNOPSIS
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
253
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
254 use FileIO::SDFileIO;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
255
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
256 use FileIO::SDFileIO qw(:all);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
257
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
258 =head1 DESCRIPTION
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
259
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
260 B<SDFIleIO> class provides the following methods:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
261
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
262 new, GenerateMoleculeString, IsSDFile, ParseMoleculeString, ReadMolecule,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
263 ReadMoleculeString, WriteMolecule
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
264
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
265 The following methods can also be used as functions:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
266
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
267 GenerateMoleculeString, IsSDFile, ParseMoleculeString
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
268
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
269 Data specific to B<SDFileIO> class not directly used by B<Molecule>, B<Atom> and
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
270 B<Bond> objects - data label/value pairs, atom SteroParity and so on - is associated to
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
271 and retrieved from approptiate objects using following methods:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
272
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
273 SetMDL<PropertyName>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
274 GetMDL<PropertyName>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
275
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
276 SD data label and values are attached to B<Molecule> object as a refernece to a hash
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
277 using SetDataFieldLabelAndValues and can be retrieved using GetDataFieldLabelAndValues
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
278 method.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
279
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
280 B<SDFileIO> class is derived from I<FileIO> class and uses its methods to support
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
281 generic file related functionality.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
282
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
283 =head2 METHODS
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
284
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
285 =over 4
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
286
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
287 =item B<new>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
288
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
289 $NewSDFileIO = new FileIO::SDFileIO(%NamesAndValues);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
290
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
291 Using specified I<SDFileIO> property names and values hash, B<new> method creates a new object
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
292 and returns a reference to newly created B<SDFileIO> object.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
293
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
294 =item B<GenerateMoleculeString>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
295
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
296 $MoleculeString = $SDFileIO->GenerateMoleculeString($Molecule);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
297 $MoleculeString = FileIO::SDFileIO::GenerateMoleculeString($Molecule);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
298
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
299 Returns a B<MoleculeString> in SD format corresponding to I<Molecule>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
300
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
301 =item B<IsSDFile>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
302
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
303 $Status = $SDFileIO->IsSDFile($FileName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
304 $Status = FileIO::SDFileIO::IsSDFile($FileName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
305
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
306 Returns 1 or 0 based on whether I<FileName> is a SD file.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
307
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
308 =item B<ParseMoleculeString>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
309
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
310 $Molecule = $SDFileIO->ParseMoleculeString($MoleculeString);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
311 $Molecule = FileIO::SDFileIO::ParseMoleculeString($MoleculeString);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
312
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
313 Parses I<MoleculeString> and returns a B<Molecule> object. SD data field label and value pairs
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
314 are associated to B<Molecule> object as a reference to a hash using:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
315
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
316 $Molecule->SetDataFieldLabelAndValues(\%DataLabelsAndValues)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
317
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
318 The reference to hash can be retrieved by:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
319
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
320 $DataLabelsAndValues = $Molecule->GetDataFieldLabelAndValues();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
321 for $DataLabel (sort keys %{$DataLabelsAndValues}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
322 $DataValue = $DataLabelsAndValues->{$DataLabel};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
323 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
324
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
325 =item B<ReadMolecule>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
326
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
327 $Molecule = $SDFileIO->ReadMolecule($FileHandle);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
328
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
329 Reads data for the next compound in a file using already opened I<FileHandle>, creates,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
330 and returns a B<Molecule> object.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
331
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
332 =item B<ReadMoleculeString>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
333
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
334 $MoleculeString = $SDFileIO->ReadMoleculeString($FileHandle);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
335
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
336 Reads data for the next compound in a file using already opened I<FileHandle> and
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
337 returns a B<MoleculeString> corresponding to compound structure and other associated
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
338 data.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
339
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
340 =item B<WriteMolecule>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
341
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
342 $SDFileIO->WriteMolecule($Molecule);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
343
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
344 Writes I<Molecule> data to a file in MDLMol format and returns B<SDFileIO>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
345
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
346 =back
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
347
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
348 =head1 AUTHOR
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
349
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
350 Manish Sud <msud@san.rr.com>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
351
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
352 =head1 SEE ALSO
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
353
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
354 MoleculeFileIO.pm, MDLMolFileIO.pm
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
355
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
356 =head1 COPYRIGHT
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
357
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
358 Copyright (C) 2015 Manish Sud. All rights reserved.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
359
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
360 This file is part of MayaChemTools.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
361
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
362 MayaChemTools is free software; you can redistribute it and/or modify it under
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
363 the terms of the GNU Lesser General Public License as published by the Free
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
364 Software Foundation; either version 3 of the License, or (at your option)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
365 any later version.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
366
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
367 =cut