First commit of PhyloMOEO files with some additions to Paradiseo-MOEO
git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@1335 331e1502-861f-0410-8da2-ba01fb791d7f
This commit is contained in:
parent
a8c13eb798
commit
aa33715685
44 changed files with 8623 additions and 0 deletions
142
contribution/branches/PhyloMOEA/PhyloMOEA/likelihoodcalculator.h
Normal file
142
contribution/branches/PhyloMOEA/PhyloMOEA/likelihoodcalculator.h
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
/***************************************************************************
|
||||
* Copyright (C) 2005 by Waldo Cancino *
|
||||
* wcancino@icmc.usp.br *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#ifndef LIKELIHOODCALCULATOR_H
|
||||
#define LIKELIHOODCALCULATOR_H
|
||||
#include <phylotreeIND.h>
|
||||
#include <SubsModel.h>
|
||||
#include <probmatrixcontainer.h>
|
||||
//#include <pthread.h>
|
||||
#include <tree_limits.h>
|
||||
/**
|
||||
@author Waldo Cancino
|
||||
*/
|
||||
|
||||
|
||||
class LikelihoodCalculator{
|
||||
private:
|
||||
edge bfocus; // branch focus
|
||||
node a,b; // bfocus vertices (b can be a taxon, a never can be)
|
||||
double **prob; // point to the probability matrix associated to bfocus
|
||||
int worker; // for threading, not used really
|
||||
int nrates;
|
||||
double *rates_prob; // rate probabilities
|
||||
double *rates_freq; // rate frequences
|
||||
double alpha;
|
||||
node root; // root of the likelihood calculator
|
||||
node oldroot, invalid_node; // old root and first root when change the focus of the likelihood calculations
|
||||
|
||||
// continous allocated memory to store partial results
|
||||
double *part_memory_internal, // conditional likelihood of internal nodes
|
||||
*part_memory_taxons, // conditional likelihood of internal nodes, no longer used
|
||||
*part_memory_factors; // correction factors for nodes
|
||||
|
||||
double *site_liks; // site likelihoods
|
||||
|
||||
// maps nodes to the continous memory
|
||||
node_map< double *> Partials; // maps nodes to the corresponding conditional likelihood
|
||||
node_map<double *> Factors; // maps node to the corresponding correct factors
|
||||
|
||||
// external data
|
||||
phylotreeIND *tree_ptr; // point to the tree
|
||||
SubstModel *model; // substitution model
|
||||
ProbMatrixContainer *probmatrixs; // container of probmatrixs
|
||||
Sequences *SeqData; // sequence data
|
||||
|
||||
|
||||
bool invalid_partials_taxons; // when received a new tree, the partials are invalidated
|
||||
|
||||
// init partials memory
|
||||
void init_partials();
|
||||
|
||||
// prepare the post-order tree iterator
|
||||
void calculate_partials(node n, node *);
|
||||
// calculate conditional likelihood for the node father, from the son conditionals
|
||||
void calculate_node_partial( node father, node son, edge edgeaux);
|
||||
|
||||
// likelihood sum of partial for the focus branch
|
||||
double sum_partials( int pos);
|
||||
double sum_partials_a_to_taxon( int pos );
|
||||
double sum_partials_a_to_b_notaxon( int pos);
|
||||
|
||||
// sum the site likelihoods
|
||||
double sum_site_liks();
|
||||
|
||||
// allocate partial memory
|
||||
void allocate_partials()
|
||||
{
|
||||
long total_pos = SeqData->pattern_count();
|
||||
int ntaxons = SeqData->num_seqs();
|
||||
part_memory_internal = new double[ (ntaxons-2) * nrates * total_pos * 4 ];
|
||||
part_memory_factors = new double [ (2*ntaxons-2) * total_pos];
|
||||
site_liks = new double[total_pos];
|
||||
}
|
||||
|
||||
// destroy partial memory
|
||||
void deallocate_partials()
|
||||
{
|
||||
delete [] part_memory_internal;
|
||||
delete [] part_memory_factors;
|
||||
delete [] site_liks;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// deprecated
|
||||
double sum_partials2( node a, node b, edge edgeaux, int pos, int which=0);
|
||||
void build_rates_sites();
|
||||
|
||||
public:
|
||||
bool corrected;
|
||||
LikelihoodCalculator( phylotreeIND &ind, SubstModel &m, ProbMatrixContainer &p, unsigned int nr=1);
|
||||
LikelihoodCalculator( phylotreeIND &ind, Sequences &Seqs, SubstModel &m, ProbMatrixContainer &p, unsigned int nr=1);
|
||||
|
||||
// main functions, prepare the object to calculate likelihood
|
||||
double calculate_likelihood();
|
||||
double get_site_lik(int i) { return site_liks[i]; }
|
||||
double calculate_likelihood_exp(edge focus);
|
||||
double calculate_all_likelihoods();
|
||||
void update_partials();
|
||||
void recalculate_cj(node n, node father);
|
||||
void set_alpha(double a) { alpha = a; build_rates_sites(); };
|
||||
// change the tree '
|
||||
void set_tree( phylotreeIND &ind );
|
||||
double rate_probabilities(int i) { return rates_prob[i]; }
|
||||
int number_rates() { return nrates; }
|
||||
|
||||
|
||||
~LikelihoodCalculator()
|
||||
{
|
||||
//cout << "deallocando partialas" << endl;
|
||||
deallocate_partials();
|
||||
//cout << "deallocando o restante" << endl;
|
||||
if(prob!=NULL) delete[] prob;
|
||||
if(rates_prob!=NULL) delete [] rates_prob;
|
||||
if(rates_freq!=NULL) delete [] rates_freq;
|
||||
}
|
||||
|
||||
// change the dataset
|
||||
void set_data( const Sequences &seqs);
|
||||
|
||||
friend void* lik_slave_class(void *);
|
||||
|
||||
// frind class to do optimizations
|
||||
friend class Step_LikOptimizer;
|
||||
};
|
||||
#endif
|
||||
Loading…
Reference in a new issue