51 size_t l = freqVector.size();
53 for (
size_t i = 0; i < l; i++)
55 s *= freqVector[i]->getAlphabet()->getSize();
78 const WordAlphabet* pWA,
79 const std::vector<FrequenciesSet*>& freqVector,
80 const string& prefix,
const string& name) :
86 if (pWA->getSize() != sf)
87 throw Exception(
"WordFromIndependentFrequenciesSet: Size of the frequencies does not match size of the alphabet : " + TextTools::toString(sf) +
" vs " + TextTools::toString(pWA->getSize()));
89 size_t l = freqVector.size();
91 for (
size_t i = 0; i < l; i++)
93 vFreq_.push_back(freqVector[i]);
96 addParameters_(
vFreq_[i]->getParameters());
104 vFreq_(iwfs.vFreq_.size()),
105 vNestedPrefix_(iwfs.vNestedPrefix_)
107 for (
unsigned i = 0; i < iwfs.
vFreq_.size(); i++)
116 for (
unsigned i = 0; i <
vFreq_.size(); i++)
128 for (
unsigned i = 0; i <
vFreq_.size(); i++)
134 for (
unsigned i = 0; i <
vFreq_.size(); i++)
148 for (
size_t i = 0; i < l; i++)
150 f |=
vFreq_[i]->matchParametersValues(pl);
161 vector< vector<double> >f(l);
165 for (i = 0; i < l; i++)
167 f[i] =
vFreq_[i]->getFrequencies();
170 for (i = 0; i < s; i++)
174 for (p = l; p > 0; p--)
176 t =
vFreq_[p - 1]->getAlphabet()->getSize();
185 if (frequencies.size() !=
getAlphabet()->getSize())
186 throw DimensionException(
"WordFromIndependentFrequenciesSet::setFrequencies", frequencies.size(),
getAlphabet()->getSize());
188 size_t size = frequencies.size();
189 for (
size_t i = 0; i < size; i++)
191 sum += frequencies[i];
193 if (fabs(1. - sum) > 0.000001)
194 throw Exception(
"WordFromIndependentFrequenciesSet::setFrequencies. Frequencies must equal 1 (sum = " + TextTools::toString(sum) +
").");
196 size_t d, i, j, k, s, l =
vFreq_.size();
200 for (i = 0; i < l; i++)
202 s =
vFreq_[i]->getAlphabet()->getSize();
205 for (j = 0; j < s; j++)
209 for (k = 0; k < size; k++)
211 freq[(k / d) % s] += frequencies[k];
213 vFreq_[i]->setFrequencies(freq);
216 for (i = 0; i < l; i++)
218 matchParametersValues(
vFreq_[i]->getParameters());
232 AbstractFrequenciesSet::setNamespace(prefix);
233 for (
size_t i = 0; i <
vFreq_.size(); i++)
242 for (
size_t i = 1; i <
vFreq_.size(); i++)
244 s +=
" * " +
vFreq_[i]->getName();
254 const WordAlphabet* pWA,
256 const string& prefix,
257 const string& name) :
260 NestedPrefix_(pabsfreq->getNamespace()),
261 length_(pWA->getLength())
268 st += TextTools::toString(i + 1);
272 addParameters_(
pFreq_->getParameters());
279 pFreq_(iwfs.pFreq_->clone()),
280 NestedPrefix_(iwfs.NestedPrefix_),
281 length_(iwfs.length_)
308 if (
pFreq_->matchParametersValues(pl))
322 for (i = 0; i < s; i++)
336 if (frequencies.size() !=
getAlphabet()->getSize())
337 throw DimensionException(
"WordFromUniqueFrequenciesSet::setFrequencies", frequencies.size(),
getAlphabet()->getSize());
339 size_t size = frequencies.size();
340 for (
size_t i = 0; i < size; i++)
342 sum += frequencies[i];
344 if (fabs(1. - sum) > 0.000001)
345 throw Exception(
"WordFromUniqueFrequenciesSet::setFrequencies. Frequencies must equal 1 (sum = " + TextTools::toString(sum) +
").");
353 for (j = 0; j < letsi; j++)
362 for (k = 0; k < size; k++)
364 freq[(k / d) % letsi] += frequencies[k];
367 for (j = 0; j < letsi; j++)
369 freq[j] /=
static_cast<double>(
length_);
373 matchParametersValues(
pFreq_->getParameters());
380 AbstractFrequenciesSet::setNamespace(prefix);
382 for (
unsigned i = 0; i <
length_; i++)
384 st += TextTools::toString(i + 1);
virtual size_t getLength() const
virtual void updateFrequencies()
WordFromUniqueFrequenciesSet(const WordAlphabet *pWA, FrequenciesSet *pabsfreq, const std::string &prefix="", const std::string &name="WordFromUnique")
Constructor from a WordAlphabet* and a FrequenciesSet* repeated as many times as the length of the wo...
AbstractWordFrequenciesSet & operator=(const AbstractWordFrequenciesSet &af)
This class implements a state map where all resolved states are modeled.
virtual const Alphabet * getAlphabet() const =0
size_t getSizeFromVector(const std::vector< FrequenciesSet *> &freqVector)
const WordAlphabet * getAlphabet() const
virtual void setFrequencies(const std::vector< double > &frequencies)=0
Set the parameters in order to match a given set of frequencies.
virtual const std::vector< double > getFrequencies() const =0
FrequenciesSet * clone() const =0
Parametrize a set of state frequencies.
void setNamespace(const std::string &prefix)
virtual void updateFrequencies()
WordFromIndependentFrequenciesSet & operator=(const WordFromIndependentFrequenciesSet &iwfs)
std::vector< FrequenciesSet * > vFreq_
std::string NestedPrefix_
virtual void setFrequencies(const std::vector< double > &frequencies)
virtual void fireParameterChanged(const ParameterList &pl)
WordFromIndependentFrequenciesSet(const WordAlphabet *pWA, const std::vector< FrequenciesSet *> &freqVector, const std::string &prefix="", const std::string &name="WordFromIndependent")
Constructor from a WordAlphabet* and a vector of different FrequenciesSet*. Throws an Exception if th...
virtual std::string getName() const =0
virtual void setFrequencies(const std::vector< double > &frequencies)
std::string getDescription() const
virtual ~AbstractWordFrequenciesSet()
double & getFreq_(size_t i)
std::string getDescription() const
the Frequencies in words are the product of Independent Frequencies in letters
std::vector< std::string > vNestedPrefix_
~WordFromIndependentFrequenciesSet()
AbstractWordFrequenciesSet(StateMap *stateMap, const std::string &prefix="", const std::string &name="")
Map the states of a given alphabet which have a model state.
void setNamespace(const std::string &prefix)
std::string getName() const
void fireParameterChanged(const ParameterList &pl)
WordFromUniqueFrequenciesSet & operator=(const WordFromUniqueFrequenciesSet &iwfs)
~WordFromUniqueFrequenciesSet()
Basic implementation of the FrequenciesSet interface.