1 package CXGN
::Fieldbook
::TraitInfo
;
5 CXGN::Fieldbook::TraitInfo - a module to get information from a trait to build the fieldbook trait file.
9 my $trait_info_lookup = CXGN::Fieldbook::TraitInfo->new({ chado_schema => $chado_schema, db_name => $db_name, trait_accession => $trait_accession });
10 my $trait_info = $trait_info_lookup->get_trait_info(); #returns a string to use for the fieldbook trait file or returns false if not found
14 Looks up a trait and builds a string to use in the fieldbook trait file.
18 Jeremy D. Edwards (jde22@cornell.edu)
19 Naama Menda (nm249@cornell.edu)
24 use MooseX
::FollowPBP
;
25 use Moose
::Util
::TypeConstraints
;
27 has
'chado_schema' => (
29 isa
=> 'DBIx::Class::Schema',
37 has
'trait_accession' => (
45 my $trait_name = shift;
46 my $chado_schema = $self->get_chado_schema();
47 my $trait_info_string;
49 my $db_rs = $chado_schema->resultset("General::Db")->search( { 'me.name' => $self->get_db_name() });
52 print STDERR
"Could not find trait ontology database: ".$self->get_db_name()."\n";
56 my $trait_cvterm = $chado_schema->resultset("Cv::Cvterm")
58 'dbxref.db_id' => $db_rs->first()->db_id(),
59 'dbxref.accession' => $self->get_trait_accession(),
68 print STDERR
"Could not find trait name: ".$trait_name."\n";
73 my $cvtermprops = $trait_cvterm->search_related('cvtermprops');
75 # add full name in detail field, plus scale info if it's available
76 my $trait_details = $trait_name;
77 my $trait_def = $trait_cvterm->definition();
78 $trait_def =~ s/([^\.]*\.\s{1})//;
79 if ($trait_def =~ /=/) { $trait_details .= "\n" . $trait_def; }
80 #print STDERR "trait details = $trait_details\n";
82 my $cvterms = $self->_get_cvterms();
86 $trait_props{'trait_format'}='numeric';
87 $trait_props{'trait_default_value'}='';
88 $trait_props{'trait_minimum'}='';
89 $trait_props{'trait_maximum'}='';
90 $trait_props{'trait_details'}=$trait_details;
91 $trait_props{'trait_categories'}='';
94 print STDERR
"trait name = $trait_name\n";
95 # change from default numeric based on trait name
96 if ($trait_name =~ m/percent/) {
97 $trait_props{'trait_format'}='percent';
98 $trait_props{'trait_minimum'}='0';
99 $trait_props{'trait_maximum'}='100';
100 $trait_props{'trait_default_value'}='50';
102 # elsif ($trait_name =~ m/counting/) {
103 # $trait_props{'trait_format'}='counter';
105 elsif ($trait_name =~ m/image/) {
106 $trait_props{'trait_format'}='photo';
108 elsif ($trait_name =~ m/([0-9])-([0-9]+)/) {
109 print STDERR
"matched categorical trait with scale $1 to $2\n";
111 if (($2-$1) >= 12) { #leave categorical traits as numeric if they exceed fieldbook's max of 12 categories
112 $trait_props{'trait_minimum'}=$1;
113 $trait_props{'trait_maximum'}=$2;
115 $trait_props{'trait_format'}='categorical';
117 foreach (my $i=$1; $i < $2; $i++ ) {
118 $categories .= $i . "/";
121 print STDERR
"categories = $categories\n";
122 $trait_props{'trait_categories'}= $categories;
126 #change from default numeric based on properties stored in the database
127 foreach my $property_name (keys %{$cvterms}) {
128 my $prop_cvterm = $cvterms->{$property_name};
129 my $prop = $cvtermprops->find({'type_id' => $prop_cvterm->cvterm_id()});
130 if ($prop && $prop->value()) {
131 $trait_props{$property_name}=$prop->value();
135 #build trait_info_string
136 #order for trait file is: format,defaultValue,minimum,maximum,details,categories
137 $trait_info_string .= '"'.$trait_props{'trait_format'}.'",';
138 $trait_info_string .= '"'.$trait_props{'trait_default_value'}.'",';
139 $trait_info_string .= '"'.$trait_props{'trait_minimum'}.'",';
140 $trait_info_string .= '"'.$trait_props{'trait_maximum'}.'",';
141 $trait_info_string .= '"'.$trait_props{'trait_details'}.'",';
142 $trait_info_string .= '"'.$trait_props{'trait_categories'}.'"';
144 return $trait_info_string;
149 my $chado_schema = $self->get_chado_schema();
152 my @trait_property_names = qw(
161 # my $cv = $chado_schema->resultset("Cv::Cv")
163 # name => 'trait_property',
167 foreach my $property_name (@trait_property_names) {
169 $cvterms{$property_name} = $chado_schema->resultset("Cv::Cvterm")
171 name
=> $property_name,
172 cv
=> 'trait_property',