annotate mayachemtool/mayachemtools/lib/FileIO/SDFileIO.pm @ 0:68300206e90d draft default tip

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