annotate mayachemtools/lib/MolecularDescriptors/MolecularDescriptorsGenerator.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 MolecularDescriptors::MolecularDescriptorsGenerator;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
2 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
3 # $RCSfile: MolecularDescriptorsGenerator.pm,v $
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
4 # $Date: 2015/02/28 20:49:20 $
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
5 # $Revision: 1.13 $
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 ObjectProperty;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
34 use TextUtil ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
35 use FileUtil ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
36 use Molecule;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
37 use MolecularDescriptors::MolecularDescriptors;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
38
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
39 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
40
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
41 @ISA = qw(ObjectProperty Exporter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
42 @EXPORT = qw();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
43 @EXPORT_OK = qw(GetAvailableDescriptorClassNames GetAvailableClassAndDescriptorNames GetAvailableDescriptorNames GetAvailableDescriptorNamesForDescriptorClass GetAvailableClassNameForDescriptorName GetRuleOf5DescriptorNames GetRuleOf3DescriptorNames IsDescriptorClassNameAvailable IsDescriptorNameAvailable);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
44
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
45 %EXPORT_TAGS = (all => [@EXPORT, @EXPORT_OK]);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
46
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
47 # Setup class variables...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
48 my($ClassName, %DescriptorsDataMap);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
49 _InitializeClass();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
50
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
51 # Overload Perl functions...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
52 use overload '""' => 'StringifyMolecularDescriptorsGenerator';
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
53
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
54 # Class constructor...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
55 sub new {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
56 my($Class, %NamesAndValues) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
57
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
58 # Initialize object...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
59 my $This = {};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
60 bless $This, ref($Class) || $Class;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
61 $This->_InitializeMolecularDescriptorsGenerator();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
62
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
63 $This->_InitializeMolecularDescriptorsGeneratorProperties(%NamesAndValues);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
64
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
65 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
66 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
67
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
68 # Initialize class ...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
69 sub _InitializeClass {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
70 #Class name...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
71 $ClassName = __PACKAGE__;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
72
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
73 # Load available molecular descriptor classes...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
74 _LoadMolecularDescriptorsData();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
75
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
76 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
77
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
78 # Initialize object data...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
79 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
80 sub _InitializeMolecularDescriptorsGenerator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
81 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
82
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
83 # Type of desciptors to generate...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
84 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
85 # The current release of MayaChemTools supports generation of four sets of
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
86 # descriptors: All available descriptors, rule of 5 or 3 descriptors or a specified
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
87 # set of descriptors.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
88 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
89 # Possible values: All, RuleOf5, RuleOf3 or Specify
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
90 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
91 # RuleOf5 [ Ref 91 ] descriptor names: MolecularWeight, HydrogenBondDonors, HydrogenBondAcceptors,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
92 # SLogP. RuleOf5 states: MolecularWeight <= 500, HydrogenBondDonors <= 5, HydrogenBondAcceptors <= 10,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
93 # and logP <= 5.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
94 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
95 # RuleOf3 [ Ref 92 ] descriptor names: MolecularWeight, RotatableBonds, HydrogenBondDonors,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
96 # HydrogenBondAcceptors, SLogP, TPSA. RuleOf3 states: MolecularWeight <= 300, RotatableBonds <= 3,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
97 # HydrogenBondDonors <= 3, HydrogenBondAcceptors <= 3, logP <= 3, and TPSA <= 60.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
98 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
99 # For Specify value of Mode, a set of descritor names must be specified using
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
100 # DescriptorNames parameter.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
101 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
102 # Default: All
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
103 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
104 $This->{Mode} = '';
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
105
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
106 # Descriptor names used to generate descriptor values during a specified descriptor
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
107 # generation mode...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
108 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
109 @{$This->{DescriptorNames}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
110
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
111 # Descriptor calculation control parameters for specified descriptor class names...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
112 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
113 # These parameters are passed on to appropriate descriptor classes during
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
114 # instantiations of descriptor class objects.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
115 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
116 %{$This->{DescriptorClassParameters}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
117
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
118 $This->{DescriptorClassesInstantiated} = 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
119
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
120 # Descriptor class names and objects corresponding to specified descriptor names...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
121 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
122 @{$This->{DescriptorClassNames}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
123 %{$This->{DescriptorClassObjects}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
124
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
125 # Descriptor values generated for specified descriptor names...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
126 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
127 @{$This->{DescriptorValues}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
128
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
129 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
130 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
131
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
132 # Initialize object properties...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
133 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
134 sub _InitializeMolecularDescriptorsGeneratorProperties {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
135 my($This, %NamesAndValues) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
136
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
137 my($Name, $Value, $MethodName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
138 while (($Name, $Value) = each %NamesAndValues) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
139 $MethodName = "Set${Name}";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
140 $This->$MethodName($Value);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
141 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
142
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
143 # Set default value for Mode...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
144 if (!$This->{Mode}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
145 $This->{Mode} = 'All';
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
146 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
147
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
148 $This->_CheckAndInitializeDescriptorNames();
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 # Set descriptors generation mode......
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
154 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
155 sub SetMode {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
156 my($This, $Value) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
157
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
158 # All - all available descriptors
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
159 # Specify - Specified set of descriptors
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
160
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
161 if ($Value !~ /^(All|RuleOf5|RuleOf3|Specify)$/i) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
162 croak "Error: ${ClassName}->SetMode: Mode value, $Value, is not valid; Supported values: All, RuleOf5, RuleOf3 or Specify...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
163 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
164
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
165 $This->{Mode} = $Value;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
166
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
167 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
168 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
169
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
170 # Set descriptor names to use for generating descriptor values using an array
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
171 # or reference to an array...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
172 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
173 sub SetDescriptorNames {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
174 my($This, @Values) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
175
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
176 if ($This->{Mode} =~ /^All$/i) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
177 croak "Error: ${ClassName}->SetDescriptorNames: Descriptor names cann't be specified during \"All\" value of descsriptors generation \"Mode\"...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
178 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
179
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
180 if (!@Values) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
181 return;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
182 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
183
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
184 my($FirstValue, $TypeOfFirstValue);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
185
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
186 $FirstValue = $Values[0];
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
187 $TypeOfFirstValue = ref $FirstValue;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
188
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
189 @{$This->{DescriptorNames}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
190
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
191 if ($TypeOfFirstValue =~ /^ARRAY/) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
192 # Initialize using array refernce...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
193 push @{$This->{DescriptorNames}}, @{$FirstValue};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
194 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
195 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
196 # It's a list of values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
197 push @{$This->{DescriptorNames}}, @Values;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
198 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
199
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
200 # Make sure specified descriptor names are valid...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
201 $This->_ValidateDescriptorNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
202
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
203 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
204 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
205
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
206 # Get descriptor names as an array...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
207 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
208 sub GetDescriptorNames {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
209 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
210
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
211 return wantarray ? @{$This->{DescriptorNames}} : scalar @{$This->{DescriptorNames}};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
212 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
213
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
214 # Get all descriptor values as an array...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
215 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
216 sub GetDescriptorValues {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
217 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
218
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
219 if ($This->{DescriptorsGenerated}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
220 return wantarray ? @{$This->{DescriptorValues}} : scalar @{$This->{DescriptorValues}};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
221 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
222 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
223 my(@DescriptorValues);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
224
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
225 @DescriptorValues = ('None') x scalar @{$This->{DescriptorNames}};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
226
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
227 return wantarray ? @DescriptorValues : scalar @DescriptorValues;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
228 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
229 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
230
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
231 # Get descriptor value for a specified descriptor name...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
232 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
233 sub GetDescriptorValueByName {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
234 my($This, $Name) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
235 my(%NamesAndValues);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
236
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
237 %NamesAndValues = $This->GetDescriptorNamesAndValues();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
238
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
239 return exists $NamesAndValues{$Name} ? $NamesAndValues{$Name} : 'None';
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
240
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
241 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
242
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
243 # Get calculated molecular descriptor names sand values as a hash with names
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
244 # and values as key/value pairs...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
245 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
246 sub GetDescriptorNamesAndValues {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
247 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
248 my(%NamesAndValues);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
249
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
250 %NamesAndValues = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
251 @NamesAndValues{ @{$This->{DescriptorNames}} } = $This->GetDescriptorValues();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
252
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
253 return %NamesAndValues;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
254 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
255
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
256 # Set up descriptor calculation control parameters for a specified descriptor class name...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
257 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
258 # The specified parameter names and values are simply passed on to specified descriptor
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
259 # class during instantiation of descriptor class object without any performing any validation
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
260 # of parameter names and associated values. It's up to the appropriate descriptor class methods
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
261 # to validate these parameters and values.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
262 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
263 # In addition to specified parameter names and values, the parameter hash must also contain
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
264 # descriptor class name as key and value pair with DescriptorClassName as key with class
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
265 # name as value.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
266 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
267 sub SetDescriptorClassParameters {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
268 my($This, %NamesAndValues) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
269 my($DescriptorClassName, $Name, $Value);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
270
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
271 if (!exists $NamesAndValues{DescriptorClassName}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
272 croak "Error: ${ClassName}->_SetDescriptorNameParameters: Can't set descriptor class name paramaters: DescriptorClassName is not specified...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
273 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
274
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
275 $DescriptorClassName = $NamesAndValues{DescriptorClassName};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
276 if (!IsDescriptorClassNameAvailable($DescriptorClassName)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
277 carp "Warning: ${ClassName}->_SetDescriptorClassParameters: Can't set descriptor class name paramaters: Specified descriptor class name, $DescriptorClassName, is not available...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
278 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
279 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
280
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
281 if (exists $This->{DescriptorClassParameters}{$DescriptorClassName}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
282 carp "Warning: ${ClassName}->SetDescriptorClassParameters: Class name parameters for $DescriptorClassName have already been specified: Replacing previous values...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
283 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
284
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
285 %{$This->{DescriptorClassParameters}{$DescriptorClassName}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
286 NAME: while (($Name, $Value) = each %NamesAndValues) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
287 if ($Name =~ /^DescriptorClassName$/) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
288 next NAME;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
289 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
290 $This->{DescriptorClassParameters}{$DescriptorClassName}{$Name} = $Value;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
291 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
292
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
293 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
294 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
295
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
296 # Get descriptor name parameters as a reference to hash of hashes with hash
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
297 # keys corresponding to class name and class parameter name with hash value
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
298 # as class parameter value...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
299 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
300 sub GetDescriptorClassParameters {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
301 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
302
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
303 return \%{$This->{DescriptorClassParameters}};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
304 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
305
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
306 # Get available descriptor class names as an array.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
307 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
308 # This functionality can be either invoked as a class function or an
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
309 # object method.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
310 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
311 sub GetAvailableDescriptorClassNames {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
312
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
313 return wantarray ? @{$DescriptorsDataMap{ClassNames}} : scalar @{$DescriptorsDataMap{ClassNames}};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
314 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
315
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
316 # Get available descriptors class and descriptors names as a hash containing key/value
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
317 # pairs corresponding to class name and an array of descriptor names available for the
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
318 # class.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
319 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
320 # This functionality can be either invoked as a class function or an
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
321 # object method.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
322 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
323 sub GetAvailableClassAndDescriptorNames {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
324 my($DescriptorClassName, @DescriptorNames, %ClassAndDescriptorNames);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
325
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
326 %ClassAndDescriptorNames = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
327 for $DescriptorClassName (@{$DescriptorsDataMap{ClassNames}}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
328 @{$ClassAndDescriptorNames{$DescriptorClassName}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
329 push @{$ClassAndDescriptorNames{$DescriptorClassName}}, @{$DescriptorsDataMap{ClassToDescriptorNames}{$DescriptorClassName}};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
330 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
331
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
332 return %ClassAndDescriptorNames;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
333 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
334
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
335 # Get available descriptor names as an array.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
336 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
337 # This functionality can be either invoked as a class function or an
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
338 # object method.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
339 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
340 sub GetAvailableDescriptorNames {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
341 my(@DescriptorNames);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
342
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
343 @DescriptorNames = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
344 push @DescriptorNames, map { @{$DescriptorsDataMap{ClassToDescriptorNames}{$_}} } @{$DescriptorsDataMap{ClassNames}};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
345
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
346 return wantarray ? @DescriptorNames : scalar @DescriptorNames;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
347 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
348
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
349 # Is it a valid descriptors class name?
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
350 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
351 # This functionality can be either invoked as a class function or an
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
352 # object method.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
353 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
354 sub IsDescriptorClassNameAvailable {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
355 my($FirstParameter, $SecondParameter) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
356 my($This, $DescriptorClassName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
357
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
358 if ((@_ == 2) && (_IsMolecularDescriptorsGenerator($FirstParameter))) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
359 ($This, $DescriptorClassName) = ($FirstParameter, $SecondParameter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
360 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
361 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
362 ($DescriptorClassName) = ($FirstParameter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
363 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
364
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
365 return (exists $DescriptorsDataMap{ClassToDescriptorNames}{$DescriptorClassName}) ? 1 : 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
366 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
367
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
368 # Is it a valid descriptor name?
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
369 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
370 # This functionality can be either invoked as a class function or an
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
371 # object method.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
372 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
373 sub IsDescriptorNameAvailable {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
374 my($FirstParameter, $SecondParameter) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
375 my($This, $DescriptorName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
376
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
377 if ((@_ == 2) && (_IsMolecularDescriptorsGenerator($FirstParameter))) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
378 ($This, $DescriptorName) = ($FirstParameter, $SecondParameter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
379 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
380 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
381 ($DescriptorName) = ($FirstParameter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
382 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
383
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
384 return (exists $DescriptorsDataMap{DescriptorToClassName}{$DescriptorName}) ? 1 : 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
385 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
386
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
387 # Get available descriptors names for a descriptor class as an array.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
388 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
389 # This functionality can be either invoked as a class function or an
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
390 # object method.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
391 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
392 sub GetAvailableDescriptorNamesForDescriptorClass {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
393 my($FirstParameter, $SecondParameter) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
394 my($This, $DescriptorClassName, @DescriptorNames);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
395
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
396 if ((@_ == 2) && (_IsMolecularDescriptorsGenerator($FirstParameter))) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
397 ($This, $DescriptorClassName) = ($FirstParameter, $SecondParameter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
398 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
399 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
400 ($DescriptorClassName) = ($FirstParameter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
401 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
402
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
403 @DescriptorNames = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
404 if (exists $DescriptorsDataMap{ClassToDescriptorNames}{$DescriptorClassName}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
405 push @DescriptorNames, @{$DescriptorsDataMap{ClassToDescriptorNames}{$DescriptorClassName}};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
406 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
407
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
408 return wantarray ? @DescriptorNames : scalar @DescriptorNames;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
409 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
410
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
411 # Get available descriptors class name for a descriptor name.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
412 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
413 # This functionality can be either invoked as a class function or an
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
414 # object method.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
415 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
416 sub GetAvailableClassNameForDescriptorName {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
417 my($FirstParameter, $SecondParameter) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
418 my($This, $DescriptorClassName, $DescriptorName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
419
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
420 if ((@_ == 2) && (_IsMolecularDescriptorsGenerator($FirstParameter))) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
421 ($This, $DescriptorName) = ($FirstParameter, $SecondParameter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
422 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
423 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
424 ($DescriptorName) = ($FirstParameter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
425 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
426
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
427 $DescriptorClassName = '';
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
428 if (exists $DescriptorsDataMap{DescriptorToClassName}{$DescriptorName}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
429 $DescriptorClassName = $DescriptorsDataMap{DescriptorToClassName}{$DescriptorName};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
430 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
431
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
432 return $DescriptorClassName;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
433 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
434
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
435 # Get RuleOf5 descriptor names as an array.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
436 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
437 # This functionality can be either invoked as a class function or an
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
438 # object method.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
439 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
440 sub GetRuleOf5DescriptorNames {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
441 my(@DescriptorNames);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
442
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
443 @DescriptorNames = qw(MolecularWeight HydrogenBondDonors HydrogenBondAcceptors SLogP);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
444
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
445 return wantarray ? @DescriptorNames : scalar @DescriptorNames;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
446 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
447
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
448 # Get RuleOf3 descriptor names as an array.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
449 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
450 # This functionality can be either invoked as a class function or an
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
451 # object method.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
452 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
453 sub GetRuleOf3DescriptorNames {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
454 my(@DescriptorNames);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
455
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
456 @DescriptorNames = qw(MolecularWeight RotatableBonds HydrogenBondDonors HydrogenBondAcceptors SLogP TPSA);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
457
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
458 return wantarray ? @DescriptorNames : scalar @DescriptorNames;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
459 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
460
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
461
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
462 # Set molecule object...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
463 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
464 sub SetMolecule {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
465 my($This, $Molecule) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
466
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
467 $This->{Molecule} = $Molecule;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
468
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
469 # Weaken the reference to disable increment of reference count...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
470 Scalar::Util::weaken($This->{Molecule});
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
471
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
472 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
473 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
474
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
475 # Generate specified molecular descriptors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
476 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
477 # After instantiating descriptor class objects at first invocation and initialializing
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
478 # descriptor values during subsequent invocations, GenerateDescriptors method
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
479 # provided by each descriptor class is used to calculate descriptor values for
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
480 # specified descriptors.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
481 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
482 sub GenerateDescriptors {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
483 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
484 my($DescriptorClassName, $DescriptorClassObject);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
485
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
486 # Initialize descriptor values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
487 $This->_InitializeDescriptorValues();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
488
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
489 # Instantiate decriptor classed corresponding to specified descriptors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
490 if (!$This->{DescriptorClassesInstantiated}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
491 $This->_InstantiateDescriptorClasses();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
492 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
493
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
494 # Check availability of molecule...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
495 if (!$This->{Molecule}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
496 carp "Warning: ${ClassName}->GenerateDescriptors: $This->{Type} molecular descriptors generation didn't succeed: Molecule data is not available: Molecule object hasn't been set...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
497 return undef;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
498 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
499
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
500 # Calculate descriptor values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
501 for $DescriptorClassName (@{$This->{DescriptorClassNames}}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
502 $DescriptorClassObject = $This->{DescriptorClassObjects}{$DescriptorClassName};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
503
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
504 $DescriptorClassObject->SetMolecule($This->{Molecule});
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
505 $DescriptorClassObject->GenerateDescriptors();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
506
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
507 if (!$DescriptorClassObject->IsDescriptorsGenerationSuccessful()) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
508 return undef;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
509 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
510 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
511
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
512 # Set final descriptor values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
513 $This->_SetFinalDescriptorValues();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
514
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
515 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
516 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
517
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
518 # Initialize descriptor values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
519 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
520 sub _InitializeDescriptorValues {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
521 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
522
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
523 $This->{DescriptorsGenerated} = 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
524
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
525 @{$This->{DescriptorValues}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
526
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
527 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
528 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
529
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
530 # Setup final descriptor values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
531 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
532 sub _SetFinalDescriptorValues {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
533 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
534 my($DescriptorName, $DescriptorClassName, $DescriptorClassObject);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
535
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
536 $This->{DescriptorsGenerated} = 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
537
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
538 @{$This->{DescriptorValues}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
539
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
540 if ($This->{Mode} =~ /^All$/i) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
541 # Set descriptor values for all available descriptors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
542 for $DescriptorClassName (@{$This->{DescriptorClassNames}}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
543 $DescriptorClassObject = $This->{DescriptorClassObjects}{$DescriptorClassName};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
544
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
545 push @{$This->{DescriptorValues}}, $DescriptorClassObject->GetDescriptorValues();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
546 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
547 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
548 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
549 # Set descriptor values for a subset of available descriptors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
550 for $DescriptorName (@{$This->{DescriptorNames}}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
551 $DescriptorClassName = $DescriptorsDataMap{DescriptorToClassName}{$DescriptorName};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
552 $DescriptorClassObject = $This->{DescriptorClassObjects}{$DescriptorClassName};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
553
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
554 push @{$This->{DescriptorValues}}, $DescriptorClassObject->GetDescriptorValueByName($DescriptorName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
555 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
556 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
557
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
558 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
559 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
560
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
561 # Is descriptors generation successful?
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
562 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
563 # Notes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
564 # . After successful generation of descriptor values by each descriptor class
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
565 # corresponding to specified descriptor names, DescriptorsCalculated to 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
566 # otherwise, it's set to 0.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
567 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
568 sub IsDescriptorsGenerationSuccessful {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
569 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
570
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
571 return $This->{DescriptorsGenerated} ? 1 : 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
572 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
573
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
574 # Check and set default descriptor names for generating descriptor values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
575 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
576 sub _CheckAndInitializeDescriptorNames {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
577 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
578
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
579 if ($This->{Mode} =~ /^(All|RuleOf5|RuleOf3)$/i) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
580 if (@{$This->{DescriptorNames}}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
581 croak "Error: ${ClassName}->_CheckAndInitializeDescriptorNames: Descriptor names can't be specified during \"All, RuleOf5 or RuleOf3\" values of descsriptors generation \"Mode\"...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
582 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
583 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
584
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
585 if ($This->{Mode} =~ /^All$/i) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
586 @{$This->{DescriptorNames}} = GetAvailableDescriptorNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
587 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
588 elsif ($This->{Mode} =~ /^RuleOf5$/i) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
589 @{$This->{DescriptorNames}} = GetRuleOf5DescriptorNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
590 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
591 elsif ($This->{Mode} =~ /^RuleOf3$/i) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
592 @{$This->{DescriptorNames}} = GetRuleOf3DescriptorNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
593 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
594 elsif ($This->{Mode} =~ /^Specify$/i) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
595 if (!@{$This->{DescriptorNames}}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
596 croak "Error: ${ClassName}->_CheckAndInitializeDescriptorNames: DescriptorNames must be specified during Specify value for Mode...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
597 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
598 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
599 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
600 croak "Error: ${ClassName}->_CheckAndInitializeDescriptorNames: Mode value, $This->{Mode}, is not valid...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
601 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
602 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
603
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
604 # Instantiate descriptor classes corresponding to specified descriptor names...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
605 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
606 sub _InstantiateDescriptorClasses {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
607 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
608 my($DescriptorClassName, $DescriptorName, $DescriptorClassPath);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
609
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
610 $This->{DescriptorClassesInstantiated} = 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
611
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
612 @{$This->{DescriptorClassNames}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
613 %{$This->{DescriptorClassObjects}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
614
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
615 NAME: for $DescriptorName (@{$This->{DescriptorNames}}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
616 $DescriptorClassName = $DescriptorsDataMap{DescriptorToClassName}{$DescriptorName};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
617
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
618 if (exists $This->{DescriptorClassObjects}{$DescriptorClassName}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
619 next NAME;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
620 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
621 push @{$This->{DescriptorClassNames}}, $DescriptorClassName;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
622
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
623 $DescriptorClassPath = $DescriptorsDataMap{ClassNameToClassPath}{$DescriptorClassName};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
624
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
625 if (exists $This->{DescriptorClassParameters}{$DescriptorClassName}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
626 $This->{DescriptorClassObjects}{$DescriptorClassName} = $DescriptorClassPath->new(%{$This->{DescriptorClassParameters}{$DescriptorClassName}});
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
627 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
628 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
629 $This->{DescriptorClassObjects}{$DescriptorClassName} = $DescriptorClassPath->new();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
630 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
631 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
632
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
633 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
634 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
635
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
636 # Return a string containg data for MolecularDescriptorsGenerator object...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
637 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
638 sub StringifyMolecularDescriptorsGenerator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
639 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
640 my($TheString, $NamesAndValuesString, $Name, $Value, @NamesAndValuesInfo, %NamesAndValues);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
641
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
642 # Type of MolecularDescriptors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
643 $TheString = "MolecularDescriptorsGenerator: Mode - $This->{Mode}; SpecifiedDescriptorNames - < @{$This->{DescriptorNames}} >; AvailableMolecularDescriptorClassNames - < @{$DescriptorsDataMap{ClassNames}} >";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
644
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
645 @NamesAndValuesInfo = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
646 %NamesAndValues = $This->GetDescriptorNamesAndValues();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
647
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
648 for $Name (@{$This->{DescriptorNames}}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
649 $Value = $NamesAndValues{$Name};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
650 $Value = (TextUtil::IsEmpty($Value) || $Value =~ /^None$/i) ? 'None' : $Value;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
651 push @NamesAndValuesInfo, "$Name - $Value";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
652 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
653 if (@NamesAndValuesInfo) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
654 $TheString .= "Names - Values: <" . TextUtil::JoinWords(\@NamesAndValuesInfo, ", ", 0) . ">";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
655 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
656 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
657 $TheString .= "Names - Values: < None>";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
658 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
659
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
660 return $TheString;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
661 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
662
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
663 # Is it a MolecularDescriptorsGenerator object?
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
664 sub _IsMolecularDescriptorsGenerator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
665 my($Object) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
666
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
667 return (Scalar::Util::blessed($Object) && $Object->isa($ClassName)) ? 1 : 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
668 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
669
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
670 # Validate descriptor names for generating descriptor values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
671 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
672 sub _ValidateDescriptorNames {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
673 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
674 my($DescriptorName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
675
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
676 for $DescriptorName (@{$This->{DescriptorNames}}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
677 if (!exists $DescriptorsDataMap{DescriptorToClassName}{$DescriptorName}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
678 croak "Error: ${ClassName}->_SetAndValidateDescriptorNames: Specified descriptor name, $DescriptorName, is not valid...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
679 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
680 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
681
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
682 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
683 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
684
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
685 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
686 # Load available molecular descriptors data...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
687 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
688 # All available molecular descriptors classes are automatically detected in
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
689 # MolecularDescriptors directory under <MayaChemTools>/lib directory and
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
690 # information about available descriptor names is retrieved from each descriptor
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
691 # class using function GetDescriptorNames. The following %DescriptorsDataMap
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
692 # is setup containing all available molecular descriptors data:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
693 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
694 # @{$DescriptorsDataMap{ClassNames}}
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
695 # %{$DescriptorsDataMap{ClassNameToPath}}
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
696 # %{$DescriptorsDataMap{ClassToDescriptorNames}}
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
697 # %{$DescriptorsDataMap{DescriptorToClassName}}
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
698 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
699 # GenerateDescriptors method is invoked fo each specified descriptor class
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
700 # object to calculate descriptor values for specified descriptors. After successful
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
701 # calculation of descriptors, GetDescriptorValues or GetDescriptorValueByName
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
702 # methods provided by descriptor objects are used to retrieve calculated
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
703 # descriptor values.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
704 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
705 sub _LoadMolecularDescriptorsData {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
706
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
707 %DescriptorsDataMap = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
708
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
709 _RetrieveAndLoadDescriptorClasses();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
710 _SetupDescriptorsDataMap();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
711 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
712
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
713 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
714 # Retrieve available molecular descriptors classes from MolecularDescriptors directory under
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
715 # <MayaChemTools>/lib directory...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
716 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
717 sub _RetrieveAndLoadDescriptorClasses {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
718 my($DescriptorsDirName, $MayaChemToolsLibDir, $DescriptorsDirPath, $IncludeDirName, $DescriptorClassName, $DescriptorClassPath, $DescriptorsClassFileName, @FileNames, @DescriptorsClassFileNames);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
719
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
720 @{$DescriptorsDataMap{ClassNames}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
721 %{$DescriptorsDataMap{ClassNameToPath}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
722
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
723 $DescriptorsDirName = "MolecularDescriptors";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
724 $MayaChemToolsLibDir = FileUtil::GetMayaChemToolsLibDirName();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
725
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
726 $DescriptorsDirPath = "$MayaChemToolsLibDir/$DescriptorsDirName";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
727
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
728 if (! -d "$DescriptorsDirPath") {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
729 croak "Error: ${ClassName}::_RetrieveAndLoadDescriptorClasses: MayaChemTools package molecular descriptors directory, $DescriptorsDirPath, is missing: Possible installation problems...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
730 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
731
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
732 @FileNames = ("$DescriptorsDirPath/*");
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
733 $IncludeDirName = 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
734 @DescriptorsClassFileNames = FileUtil::ExpandFileNames(\@FileNames, "pm", $IncludeDirName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
735
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
736 if (!@DescriptorsClassFileNames) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
737 croak "Error: ${ClassName}::_RetrieveAndLoadDescriptorClasses: MayaChemTools package molecular descriptors directory, $DescriptorsDirPath, doesn't contain any molecular descriptor class: Possible installation problems...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
738 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
739
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
740 FILENAME: for $DescriptorsClassFileName (sort @DescriptorsClassFileNames) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
741 if ($DescriptorsClassFileName !~ /\.pm/) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
742 croak "Error: ${ClassName}::_RetrieveAndLoadDescriptorClasses: MayaChemTools package molecular descriptors directory, $DescriptorsDirPath, contains invalid class file name $DescriptorsClassFileName: Possible installation problems...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
743 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
744
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
745 # Ignore base class and descriptors generator class...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
746 if ($DescriptorsClassFileName =~ /^(MolecularDescriptorsGenerator\.pm|MolecularDescriptors\.pm)$/) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
747 next FILENAME;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
748 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
749
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
750 ($DescriptorClassName) = split /\./, $DescriptorsClassFileName;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
751 $DescriptorClassPath = "${DescriptorsDirName}::${DescriptorClassName}";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
752
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
753 # Load descriptors class...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
754 eval "use $DescriptorClassPath";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
755
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
756 if ($@) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
757 croak "Error: ${ClassName}::_RetrieveAndLoadDescriptorClasses: use $DescriptorClassPath failed: $@ ...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
758 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
759
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
760 push @{$DescriptorsDataMap{ClassNames}}, $DescriptorClassName;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
761
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
762 $DescriptorsDataMap{ClassNameToClassPath}{$DescriptorClassName} = $DescriptorClassPath;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
763 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
764 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
765
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
766 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
767 # Setup descriptors data map using loaded descriptor classes...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
768 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
769 sub _SetupDescriptorsDataMap {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
770 my($DescriptorClassName, $DescriptorName, $DescriptorClassPath, @DescriptorNames);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
771
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
772 # Class to decriptor names map...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
773 %{$DescriptorsDataMap{ClassToDescriptorNames}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
774
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
775 # Descriptor to class name map...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
776 %{$DescriptorsDataMap{DescriptorToClassName}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
777
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
778 for $DescriptorClassName (@{$DescriptorsDataMap{ClassNames}}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
779 $DescriptorClassPath = $DescriptorsDataMap{ClassNameToClassPath}{$DescriptorClassName};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
780
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
781 @DescriptorNames = $DescriptorClassPath->GetDescriptorNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
782
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
783 if (!@DescriptorNames) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
784 croak "Error: ${ClassName}::_SetupDescriptorsDataMap: Molecular descriptor class $DescriptorClassName doesn't provide any descriptor names...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
785 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
786
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
787 if (exists $DescriptorsDataMap{ClassToDescriptorNames}{$DescriptorClassName} ) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
788 croak "Error: ${ClassName}::_SetupDescriptorsDataMap: Molecular descriptor class $DescriptorClassName has already been processed...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
789 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
790
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
791 @{$DescriptorsDataMap{ClassToDescriptorNames}{$DescriptorClassName}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
792 @{$DescriptorsDataMap{ClassToDescriptorNames}{$DescriptorClassName}} = @DescriptorNames;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
793
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
794 for $DescriptorName (@DescriptorNames) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
795 if (exists $DescriptorsDataMap{DescriptorToClassName}{$DescriptorName}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
796 croak "Error: ${ClassName}::_SetupDescriptorsDataMap: Molecular descriptor name, $DescriptorName, in class name, $DescriptorClassName, has already been provided by class name $DescriptorsDataMap{DescriptorToClassName}{$DescriptorName}...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
797 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
798
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
799 $DescriptorsDataMap{DescriptorToClassName}{$DescriptorName} = $DescriptorClassName;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
800 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
801 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
802 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
803
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
804 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
805
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
806 __END__
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
807
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
808 =head1 NAME
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
809
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
810 MolecularDescriptorsGenerator
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
811
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
812 =head1 SYNOPSIS
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
813
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
814 use MolecularDescriptors::MolecularDescriptorsGenerator;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
815
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
816 use MolecularDescriptors::MolecularDescriptorsGenerator qw(:all);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
817
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
818 =head1 DESCRIPTION
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
819
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
820 B<MolecularDescriptorsGenerator> class provides the following methods:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
821
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
822 new, GenerateDescriptors, GetAvailableClassAndDescriptorNames,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
823 GetAvailableClassNameForDescriptorName, GetAvailableDescriptorClassNames,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
824 GetAvailableDescriptorNames, GetAvailableDescriptorNamesForDescriptorClass,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
825 GetDescriptorClassParameters, GetDescriptorNames, GetDescriptorNamesAndValues,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
826 GetDescriptorValueByName, GetDescriptorValues, GetRuleOf3DescriptorNames,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
827 GetRuleOf5DescriptorNames, IsDescriptorClassNameAvailable,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
828 IsDescriptorNameAvailable, IsDescriptorsGenerationSuccessful,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
829 SetDescriptorClassParameters, SetDescriptorNames, SetMode, SetMolecule,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
830 StringifyMolecularDescriptorsGenerator
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
831
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
832 B<MolecularDescriptorsGenerator> is derived from is derived from B<ObjectProperty>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
833 base class that provides methods not explicitly defined in B<MolecularDescriptorsGenerator>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
834 or B<ObjectProperty> classes using Perl's AUTOLOAD functionality. These methods are
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
835 generated on-the-fly for a specified object property:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
836
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
837 Set<PropertyName>(<PropertyValue>);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
838 $PropertyValue = Get<PropertyName>();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
839 Delete<PropertyName>();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
840
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
841 B<MolecularDescriptorsGenerator> is designed to provide a plug-in environment for
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
842 molecular descriptors development. The molecular descriptor class modules available
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
843 in B<MolecularDescriptors> directory under B<MayaChemTools/lib> directory are
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
844 automatically detected and loaded into the system. The descriptor names provided
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
845 by each descriptor class module through its B<GetDescriptorNames> function are
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
846 retrieved and are made available for calculations of their values for a specified
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
847 molecule.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
848
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
849 Any combination of available descriptor names can be specified during calculation
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
850 of descriptor values using B<GenerateDescriptors> method. The current release of
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
851 MayaChemTools supports generation of four sets of descriptors: All available
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
852 descriptors, rule of 5 or 3 descriptors, or a specified set of descriptor names.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
853
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
854 RuleOf5 [ Ref 91 ] descriptor names are: MolecularWeight, HydrogenBondDonors,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
855 HydrogenBondAcceptors, SLogP. RuleOf5 states: MolecularWeight <= 500,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
856 HydrogenBondDonors <= 5, HydrogenBondAcceptors <= 10, and logP <= 5.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
857
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
858 RuleOf3 [ Ref 92 ] descriptor names are: MolecularWeight, RotatableBonds,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
859 HydrogenBondDonors, HydrogenBondAcceptors, SLogP, TPSA. RuleOf3 states:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
860 MolecularWeight <= 300, RotatableBonds <= 3, HydrogenBondDonors <= 3,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
861 HydrogenBondAcceptors <= 3, logP <= 3, and TPSA <= 60.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
862
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
863 Before calculation of a specified set of descriptors by B<GenerateDescriptors>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
864 method, a set of descriptor calculation control parameters for a specific descriptor
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
865 class name can be set using B<SetDescriptorClassParameters> method. The specified
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
866 control parameter names and values are simply passed on to specified descriptor
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
867 class during instantiation of descriptor class object without performing any validation
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
868 of parameter names and associated values. It's up to the appropriate descriptor class methods
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
869 to validate these parameters and values. In addition to specified parameter names and
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
870 values, the parameter hash must also contain descriptor class name as key and
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
871 value pair with DescriptorClassName as key with class name as value.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
872
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
873 =head2 METHODS
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
874
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
875 =over 4
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
876
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
877 =item B<new>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
878
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
879 $NewMolecularDescriptorsGenerator = new MolecularDescriptors::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
880 MolecularDescriptorsGenerator(
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
881 %NamesAndValues);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
882
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
883 Using specified I<MolecularDescriptorsGenerator> property names and values hash, B<new>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
884 method creates a new object and returns a reference to newly created B<MolecularDescriptorsGenerator>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
885 object. By default, the following properties are initialized:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
886
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
887 Mode = 'All'
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
888 @{$This->{DescriptorNames}} = ()
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
889 %{$This->{DescriptorClassParameters}} = ()
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
890 @{$This->{DescriptorClassNames}} = ()
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
891 %{$This->{DescriptorClassObjects}} = ()
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
892 @{$This->{DescriptorValues}} = ()
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
893
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
894 Examples:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
895
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
896 $MolecularDescriptorsGenerator = new MolecularDescriptors::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
897 MolecularDescriptorsGenerator(
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
898 'Molecule' => $Molecule);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
899
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
900 @DescriptorNames = qw(MolecularWeight HydrogenBondDonors Fsp3Carbons)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
901 $MolecularDescriptorsGenerator = new MolecularDescriptors::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
902 MolecularDescriptorsGenerator(
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
903 'Mode' => 'Specify',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
904 'DescriptorNames' => \@DescriptorNames);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
905
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
906 $MolecularDescriptorsGenerator->SetDescriptorClassParameters(
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
907 'DescriptorClassName' => 'WeightAndMassDescriptors',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
908 'WeightPrecision' => 2,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
909 'MassPrecision' => 2);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
910
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
911 $MolecularDescriptorsGenerator->SetDescriptorClassParameters(
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
912 'DescriptorClassName' => 'HydrogenBondsDescriptors',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
913 'HydrogenBondsType' => 'HBondsType1');
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
914
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
915 $MolecularDescriptorsGenerator->SetMolecule($Molecule);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
916 $MolecularDescriptorsGenerator->GenerateDescriptors();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
917 print "MolecularDescriptorsGenerator: $MolecularDescriptorsGenerator\n";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
918
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
919
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
920 =item B<GenerateDescriptors>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
921
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
922 $MolecularDescriptorsGenerator->GenerateDescriptors();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
923
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
924 Calculates descriptor values for specified descriptors and returns I<MolecularDescriptorsGenerator>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
925
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
926 Descriptor class objects are instantiated only once at first invocation. During
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
927 subsequent calls to B<GenerateDescriptors> method, descriptor values are
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
928 initialized and B<GenerateDescriptors> method provided by descriptor class is
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
929 used to calculate descriptor values for specified descriptors.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
930
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
931 =item B<GetAvailableClassAndDescriptorNames>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
932
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
933 %ClassAndDescriptorNames = $MolecularDescriptorsGenerator->
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
934 GetAvailableClassAndDescriptorNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
935 %ClassAndDescriptorNames = MolecularDescriptors::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
936 MolecularDescriptorsGenerator::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
937 GetAvailableClassAndDescriptorNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
938
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
939 Returns available descriptors class and descriptors names as a hash containing key
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
940 and value pairs corresponding to class name and an array of descriptor names
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
941 available for the class.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
942
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
943 =item B<GetAvailableClassNameForDescriptorName>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
944
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
945 $DescriptorClassName = $MolecularDescriptorsGenerator->
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
946 GetAvailableClassNameForDescriptorName($DescriptorName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
947
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
948 $DescriptorClassName = MolecularDescriptors::MolecularDescriptorsGenerator::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
949 GetAvailableClassNameForDescriptorName($DescriptorName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
950
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
951 Returns available descriptor class name for a descriptor name.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
952
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
953 =item B<GetAvailableDescriptorClassNames>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
954
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
955 $Return = $MolecularDescriptorsGenerator->GetAvailableDescriptorClassNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
956
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
957 @DescriptorClassNames = $MolecularDescriptorsGenerator->
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
958 GetAvailableDescriptorClassNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
959 @DescriptorClassNames = MolecularDescriptors::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
960 MolecularDescriptorsGenerator::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
961 GetAvailableDescriptorClassNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
962
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
963 Returns available descriptor class names as an array or number of available descriptor
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
964 class names in scalar context.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
965
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
966 =item B<GetAvailableDescriptorNames>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
967
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
968 @DescriptorNames = $MolecularDescriptorsGenerator->
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
969 GetAvailableDescriptorNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
970 @DescriptorNames = MolecularDescriptors::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
971 MolecularDescriptorsGenerator::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
972 GetAvailableDescriptorNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
973
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
974 Returns available descriptor names as an array or number of available descriptor
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
975 names in scalar context.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
976
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
977 =item B<GetAvailableDescriptorNamesForDescriptorClass>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
978
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
979 @DescriptorNames = $MolecularDescriptorsGenerator->
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
980 GetAvailableDescriptorNamesForDescriptorClass($DescriptorClassName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
981 @DescriptorNames = MolecularDescriptors::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
982 MolecularDescriptorsGenerator::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
983 GetAvailableDescriptorNamesForDescriptorClass($DescriptorClassName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
984
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
985 Returns available descriptors names for a descriptor class as an array or number
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
986 of available descriptor names in scalar context.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
987
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
988 =item B<GetDescriptorClassParameters>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
989
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
990 $DescriptorClassParametersRef = $MolecularDescriptorsGenerator->
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
991 GetDescriptorClassParameters();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
992 $DescriptorClassParametersRef = MolecularDescriptors::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
993 MolecularDescriptorsGenerator::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
994 GetDescriptorClassParameters();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
995
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
996 Returns descriptor name parameters as a reference to hash of hashes with hash
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
997 keys corresponding to class name and class parameter name with hash value
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
998 as class parameter value.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
999
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1000 =item B<GetDescriptorNames>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1001
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1002 @DescriptorNames = $MolecularDescriptorsGenerator->GetDescriptorNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1003 @DescriptorNames = MolecularDescriptors::MolecularDescriptorsGenerator::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1004 GetDescriptorNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1005
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1006 Returns all available descriptor names as an array or number of available descriptors
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1007 in scalar context.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1008
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1009 =item B<GetDescriptorNamesAndValues>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1010
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1011 %NamesAndValues = $MolecularDescriptorsGenerator->
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1012 GetDescriptorNamesAndValues();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1013
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1014 Returns calculated molecular descriptor names and values as a hash with descriptor
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1015 names and values as hash key and value pairs.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1016
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1017 =item B<GetDescriptorValueByName>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1018
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1019 $Value = $MolecularDescriptorsGenerator->
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1020 GetDescriptorValueByName($Name);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1021
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1022 Returns calculated descriptor values for a specified descriptor name.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1023
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1024 =item B<GetDescriptorValues>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1025
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1026 @DescriptorValues = $MolecularDescriptorsGenerator->GetDescriptorValues();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1027
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1028 Returns all calculated descriptor values as an array corresponding to specified
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1029 descriptor names.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1030
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1031 =item B<GetRuleOf3DescriptorNames>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1032
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1033 @DescriptorNames = $MolecularDescriptorsGenerator->
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1034 GetRuleOf3DescriptorNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1035 @DescriptorNames = MolecularDescriptors::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1036 MolecularDescriptorsGenerator::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1037 GetRuleOf3DescriptorNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1038
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1039 Returns rule of 3 descriptor names as an array or number of rule of 3 descriptors in scalar
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1040 context.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1041
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1042 RuleOf3 [ Ref 92 ] descriptor names are: MolecularWeight, RotatableBonds,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1043 HydrogenBondDonors, HydrogenBondAcceptors, SLogP, TPSA. RuleOf3 states:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1044 MolecularWeight <= 300, RotatableBonds <= 3, HydrogenBondDonors <= 3,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1045 HydrogenBondAcceptors <= 3, logP <= 3, and TPSA <= 60.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1046
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1047 =item B<GetRuleOf5DescriptorNames>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1048
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1049 @DescriptorNames = $MolecularDescriptorsGenerator->
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1050 GetRuleOf5DescriptorNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1051 @DescriptorNames = $MolecularDescriptorsGenerator::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1052 GetRuleOf5DescriptorNames();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1053
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1054 Returns rule of 5 descriptor names as an array or number of rule of 4 descriptors in scalar
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1055 context.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1056
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1057 RuleOf5 [ Ref 91 ] descriptor names are: MolecularWeight, HydrogenBondDonors,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1058 HydrogenBondAcceptors, SLogP. RuleOf5 states: MolecularWeight <= 500,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1059 HydrogenBondDonors <= 5, HydrogenBondAcceptors <= 10, and logP <= 5.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1060
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1061 =item B<IsDescriptorClassNameAvailable>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1062
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1063 $Status = $MolecularDescriptorsGenerator->
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1064 IsDescriptorClassNameAvailable($ClassName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1065 $Status = MolecularDescriptors::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1066 MolecularDescriptorsGenerator::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1067 IsDescriptorClassNameAvailable($ClassName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1068
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1069 Returns 1 or 0 based on whether specified descriptor class name is available.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1070
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1071 =item B<IsDescriptorNameAvailable>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1072
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1073 $Status = $MolecularDescriptorsGenerator->
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1074 IsDescriptorNameAvailable($DescriptorName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1075 $Status = MolecularDescriptors::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1076 MolecularDescriptorsGenerator::
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1077 IsDescriptorNameAvailable($DescriptorName);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1078
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1079 Returns 1 or 0 based on whether specified descriptor name is available.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1080
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1081 =item B<IsDescriptorsGenerationSuccessful>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1082
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1083 $Status = $MolecularDescriptorsGenerator->
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1084 IsDescriptorsGenerationSuccessful();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1085
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1086 Returns 1 or 0 based on whether descriptors generation is successful.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1087
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1088 =item B<SetDescriptorClassParameters>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1089
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1090 $MolecularDescriptorsGenerator->SetDescriptorClassParameters(
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1091 %NamesAndValues);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1092
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1093 Sets descriptor calculation control parameters for a specified descriptor class name
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1094 and returns I<MolecularDescriptorsGenerator>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1095
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1096 The specified parameter names and values are simply passed on to specified descriptor
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1097 class during instantiation of descriptor class object without any performing any validation
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1098 of parameter names and associated values. It's up to the appropriate descriptor class methods
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1099 to validate these parameters and values.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1100
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1101 In addition to specified parameter names and values, the parameter hash must also contain
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1102 descriptor class name as key and value pair with DescriptorClassName as key with class
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1103 name as value.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1104
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1105 =item B<SetDescriptorNames>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1106
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1107 $MolecularDescriptorsGenerator->SetDescriptorNames(@Names);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1108 $MolecularDescriptorsGenerator->SetDescriptorNames(\@Names);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1109
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1110 Sets descriptor names to use for generating descriptor values using an array
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1111 or reference to an array and returns I<MolecularDescriptorsGenerator>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1112
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1113 =item B<SetMode>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1114
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1115 $MolecularDescriptorsGenerator->SetMode($Mode);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1116
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1117 Sets descriptors generation mode and returns I<MolecularDescriptorsGenerator>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1118 Possible I<Mode> values: I<All, RuleOf5, RuleOf3, Specify>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1119
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1120 =item B<SetMolecule>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1121
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1122 $MolecularDescriptorsGenerator->SetMolecule($Molecule);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1123
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1124 Sets molecule to use during calculation of molecular descriptors and returns
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1125 I<MolecularDescriptorsGenerator>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1126
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1127 =item B<StringifyMolecularDescriptorsGenerator>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1128
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1129 $String = $MolecularDescriptorsGenerator->StringifyMolecularDescriptorsGenerator();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1130
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1131 Returns a string containing information about I<MolecularDescriptorsGenerator> object.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1132
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1133 =back
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1134
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1135 =head1 AUTHOR
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1136
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1137 Manish Sud <msud@san.rr.com>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1138
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1139 =head1 SEE ALSO
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1140
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1141 MolecularDescriptors.pm
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1142
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1143 =head1 COPYRIGHT
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1144
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1145 Copyright (C) 2015 Manish Sud. All rights reserved.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1146
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1147 This file is part of MayaChemTools.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1148
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1149 MayaChemTools is free software; you can redistribute it and/or modify it under
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1150 the terms of the GNU Lesser General Public License as published by the Free
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1151 Software Foundation; either version 3 of the License, or (at your option)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1152 any later version.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1153
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1154 =cut