From fd84b4e54618ee6840ed2437ff2d15c78f072ad2 Mon Sep 17 00:00:00 2001
From: Vincent Danjean <Vincent.Danjean@ens-lyon.org>
Date: Sun, 19 Apr 2009 07:18:38 +0000
Subject: [PATCH] git-svn-id:
 svn+ssh://imag/users/huron/danjean/svnroot/claire/altree/trunk@433
 cf695345-040a-0410-a956-b889e835fe2e

---
 ALTree/Nanova.pm | 11 ++++++----
 ALTree/Node.pm   | 35 +++++++++++++++++++++++++++++-
 altree           | 56 +++++++++++++++++++++++++++---------------------
 to_rewrite.pm    |  2 +-
 4 files changed, 74 insertions(+), 30 deletions(-)

diff --git a/ALTree/Nanova.pm b/ALTree/Nanova.pm
index 602aa4d..47772d0 100644
--- a/ALTree/Nanova.pm
+++ b/ALTree/Nanova.pm
@@ -68,10 +68,13 @@ sub FillTableaux
     my $values = shift;
     my $groups = shift;
     my $nb_term = shift;
+    
+    print "Node: ", $present_node->Name(), " ", Dumper($values);
+    print "\n";
 
     if ($present_node->NbChildren()==0)  {
-	$present_node->GetQuantiList();
-	push @{$values}, @{$present_node->GetQuantiList()};
+	print "list: ", Dumper($present_node->GetQuantiList()), "\n";
+	push @{$values}, @{$present_node->GetQuantiListValues()};
 	push @{$groups}, $present_node->NbQuanti(); 
 	$nb_term++;
     } else {
@@ -88,9 +91,9 @@ sub WriteMat
 
     my $mat = shift;
 
-    print STDERR Dumper($mat);
+    #print STDERR Dumper($mat);
 
-    return;
+    #return;
     for (my $i=0; $i<=$#$mat; $i++)  {
 	foreach my $elem (@{$mat->[$i]}) {
 	    print $elem, "\t";
diff --git a/ALTree/Node.pm b/ALTree/Node.pm
index f8cf43a..fd9f18e 100644
--- a/ALTree/Node.pm
+++ b/ALTree/Node.pm
@@ -239,9 +239,23 @@ sub Name {
     }
 }
 
+sub AddQuanti {
+    my $self=shift;
+    my $value=shift;
+    my $num_haplo=shift;
+    delete($self->{"moyenne"});
+    push @{$self->{"quanti"}}, [$value, $num_haplo];
+}
+
 sub GetQuantiList {
     my $self=shift;
-    return @{$self->{"quanti"}};
+    return $self->{"quanti"};
+}
+
+sub GetQuantiListValues {
+    my $self=shift;
+    my @t=map {$_->[0] } @{$self->{"quanti"}};
+    return \@t;
 }
 
 sub NbQuanti {
@@ -249,6 +263,25 @@ sub NbQuanti {
     return scalar(@{$self->{"quanti"}});
 }
 
+sub GetQuantiMean {
+    my $self=shift;
+
+    if (defined($self->{"moyenne"})) {
+	return $self->{"moyenne"};
+    }
+    
+    my $tab = $self->GetQuantiListValues();
+    my $sum;
+    my $i;
+    for ($i=0; $i < scalar (@{$tab}) ; $i++) {
+	$sum+=$tab->[$i];
+    }
+    my $moy=$sum/($i);
+    $self->{"moyenne"}=$moy;
+
+    return $moy;
+}
+
 #Faire meme chose pour case, control et br_len (HasBrLen), level, high, sequence, label, oldfather
 #Faire oldchildren (GetOldChildren, SetOldChildren, ) 
 
diff --git a/altree b/altree
index 7bb8a7e..54d4c40 100755
--- a/altree
+++ b/altree
@@ -31,7 +31,7 @@ use ALTree::Utils qw(erreur);
 use ALTree::Input qw(PrepareTree);
 #use Newchi2treeUtils;
 use TamuAnova;
-
+#use NAnova;
 use ALTree::Nanova;
 
 ###########################################
@@ -270,18 +270,6 @@ sub FillCaseControl
 }
 
 ######## QUANTITATIF ########
-sub Moyenne
-{
-    my $tab = shift;
-    my $sum;
-    my $i;
-    for ($i=0; $i < scalar (@{$tab}) ; $i++) {
-	$sum+=$tab->[$i]->[0];
-    }
-    my $moy=$sum/($i);
-    return $moy;
-}
-
 sub FillQuanti
 {
     my($present_node)=shift;
@@ -289,12 +277,14 @@ sub FillQuanti
     if ($present_node->NbChildren()==0)  {
 	my($id);
 	$id=$present_node->{"id"};
-	if (not defined $present_node->{"quanti"}) {# car sinon, pb pour H000
-							$present_node->{"quanti"}=[];
-							push @{$present_node->{"quanti"}}, @{$correspondance->{$id}};
-						    }
-	my $moy=Moyenne($present_node->{"quanti"});
-	$present_node->{"moyenne"}=$moy;
+	#if (not defined $present_node->{"quanti"}) {
+            # car sinon, pb pour H000
+	    #$present_node->{"quanti"}=[];
+	#print "cor: ", Dumper($correspondance->{$id}), "\n";
+	foreach my $corresp (@{$correspondance->{$id}}) {
+	    $present_node->AddQuanti($corresp->[0], $corresp->[1]);
+	}
+	#}
 	
 #DEBUG	print STDERR $present_node->{"id"}, " " ;
 #DEBUG	for (my $i=0; $i< scalar (@{$present_node->{"quanti"}}); $i++) {
@@ -305,11 +295,10 @@ sub FillQuanti
 	my($child);
 	for $child ($present_node->GetChildrenList()) { 
 	    FillQuanti($child, $correspondance);
-	    push (@{$present_node->{"quanti"}}, @{$child->{"quanti"}});
+	    foreach my $quanti (@{$child->GetQuantiList()}) {
+		$present_node->AddQuanti($quanti->[0], $quanti->[1]);
+	    }
 	}
-	my $moy=Moyenne($present_node->{"quanti"});
-	$present_node->{"moyenne"}=$moy;
-	
 #DEBUG	print STDERR $present_node->{"id"}, " " ;
 #DEBUG	for (my $i=0; $i< scalar (@{$present_node->{"quanti"}}); $i++) {
 #DEBUG	    print STDERR $present_node->{"quanti"}->[$i]->[0], " (" ,$present_node->{"quanti"}->[$i]->[1], ") ";
@@ -1533,8 +1522,27 @@ sub main
 #		    my $values = [];
 #		    my $groups = [];
 #		    my $nb_term=0;
-#		    FillTableaux($tree->GetRoot(), $values, $groups, $nb_term);
+#		    ALTree::Nanova::FillTableaux($tree->GetRoot(), $values, $groups, $nb_term);
+#		    print "Values:\n";
+#		    foreach my $val (@{$values}) {
+#			print $val, "\t";
+#		    }
+#		    print "\n";
+#		    print "Groups:\n";
+#		    foreach my $group (@{$groups}) {
+#			print $group, "\t";
+#		    }
+#		    print "\n";
+#		    print "*********\n";
+#		    my $una_results; 
+#		    $una_results = NAnova::UnbalancedNestedANOVA($mat, $groups, $values);
+#		    my $i=1;
+#		    foreach my $res (@{$una_results}) {
+#			print "Level $i\tF=",$res->{"F"}, "\tp-value=",$res->{"p_value"}, "\n";
+#			$i++;
+	#	    }
 #		}
+#		print "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT\n";
 
 		$option_require->("permutations", 
 				  "The number of permutations used to calculate".
diff --git a/to_rewrite.pm b/to_rewrite.pm
index 5d1a89f..197333b 100644
--- a/to_rewrite.pm
+++ b/to_rewrite.pm
@@ -308,7 +308,7 @@ sub InfosAffichees
 	$chaine.=" case/control:".$node->{"case"}."/".$node->{"control"};
     }
     if ($mode==3 || $mode == 4) {
-	$chaine.= sprintf " mean:%.2f",$node->{"moyenne"};
+	$chaine.= sprintf " mean:%.2f",$node->GetQuantiMean();
     }
     if (1) { # affiche les apomorphies
 	$chaine.="\n";
-- 
GitLab