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