~ubuntu-branches/ubuntu/saucy/libbpp-phyl/saucy

« back to all changes in this revision

Viewing changes to src/Bpp/Phyl/Model/MixtureOfSubstitutionModels.cpp

  • Committer: Package Import Robot
  • Author(s): Julien Dutheil
  • Date: 2013-02-09 16:00:00 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20130209160000-5v65ba68z8032nzj
Tags: 2.0.3-1
* Reorganized model hierarchy
* New pairwise models
* Several bugs fixed

Show diffs side-by-side

added added

removed removed

Lines of Context:
48
48
 
49
49
MixtureOfSubstitutionModels::MixtureOfSubstitutionModels(const Alphabet* alpha,
50
50
                                                         vector<SubstitutionModel*> vpModel_) :
51
 
  AbstractMixedSubstitutionModel(alpha, "Mixture.")
 
51
 AbstractParameterAliasable("Mixture."),
 
52
 AbstractMixedSubstitutionModel(alpha, "Mixture.")
52
53
{
53
54
  unsigned int i, nbmod = vpModel_.size();
54
55
 
87
88
      addParameters_(vpModel_[i]->getParameters());
88
89
    }
89
90
 
90
 
  //  lParPmodel_.addParameters(getParameters());
91
 
  
92
91
  for (i = 0; i < nbmod; i++){
93
92
    vpModel_[i]->addRateParameter();
94
 
  //   lParPmodel_.addParameter(vpModel_[i]->getParameter("rate"));
95
93
  }
96
94
 
97
95
  updateMatrices();
101
99
                                                         vector<SubstitutionModel*> vpModel_,
102
100
                                                         Vdouble& vproba,
103
101
                                                         Vdouble& vrate) :
104
 
  AbstractMixedSubstitutionModel(alpha, "Mixture.")
 
102
 AbstractParameterAliasable("Mixture."),
 
103
 AbstractMixedSubstitutionModel(alpha, "Mixture.")
105
104
{
106
105
  unsigned int i, nbmod = vpModel_.size();
107
106
 
174
173
}
175
174
 
176
175
MixtureOfSubstitutionModels::MixtureOfSubstitutionModels(const MixtureOfSubstitutionModels& msm) :
 
176
  AbstractParameterAliasable(msm),
177
177
  AbstractMixedSubstitutionModel(msm)
178
178
{
179
179
}
225
225
  for (i = 0; i < getNumberOfStates(); i++){
226
226
    freq_[i] = 0;
227
227
    for (j = 0; j < modelsContainer_.size(); j++)
228
 
      freq_[i] += vProbas_[i]*modelsContainer_[j]->freq(i);
 
228
      freq_[i] += vProbas_[j]*modelsContainer_[j]->freq(i);
229
229
  }
230
230
}
231
231
 
239
239
  matchParametersValues(pl);
240
240
}
241
241
 
242
 
 
243
 
 
244
 
void MixtureOfSubstitutionModels::setVRates(Vdouble& vd)
 
242
void MixtureOfSubstitutionModels::setVRates(const Vdouble& vd)
245
243
{
246
244
  AbstractMixedSubstitutionModel::setVRates(vd);
247
245
 
248
246
  unsigned int i, nbmod = modelsContainer_.size();
 
247
  double sP=0;
 
248
  for (i = 0; i < nbmod - 1; i++)
 
249
    sP+=vProbas_[i];
 
250
  
249
251
  double y=0;
 
252
  for (i = 0; i < nbmod - 1; i++) {
 
253
    setParameterValue("relrate" + TextTools::toString(i+1), vProbas_[i]/sP * vRates_[i] / (1- y));
 
254
    y+=vProbas_[i]/sP*vRates_[i];
 
255
  }
 
256
}
 
257
 
 
258
Vint MixtureOfSubstitutionModels::getSubmodelNumbers(string& desc) const
 
259
{
 
260
  unsigned int i;
 
261
  for (i=0;i< getNumberOfModels(); i++){
 
262
    if (getNModel(i)->getName()==desc)
 
263
      break;
 
264
  }
 
265
  if (i==getNumberOfModels())
 
266
    throw Exception("MixtureOfSubstitutionModels::getSubmodelNumbers model description do not match " + desc);
 
267
 
 
268
  Vint submodnb;
 
269
  submodnb.push_back(i);
250
270
  
251
 
   for (i = 0; i < nbmod - 1; i++)
252
 
     {
253
 
       setParameterValue("relrate" + TextTools::toString(i+1), vProbas_[i] * vRates_[i] / (1- y));
254
 
       y+=vProbas_[i]*vRates_[i];
255
 
     }
 
271
  return submodnb;
256
272
}