How the likelihood is computed:
1. likelihoodComputation::getTreeLikelihoodAllPosAlphTheSame
All positions, sp (could be gammaRate categories)
Perform: fillPij with the class	computePijGam (filled for all rate categories)
Next: 
 1.1 likelihoodComputation::getLofPos( with pi and for all cat) 
 Use the Pij info
 Next: 
  1.1.1 likelihoodComputation::getLofPos( with pi for single cat )
  Perform: fillPij with the class	computePijGam (filled for all rate categories)
  Use computeUpAlg class to fillComputeUp.
  Res += suffStatGlobalHomPos.get(et.getRoot()->id(),let) * sp.freq(let);

   



The likelihood classes:
Based on the equivalent likelihood by:
L(Tree|Data) = E_all_x_y = P(D,NodeF=x,Node=y)
 and
P(D,Node1=x,Node2=y) = Up(Node,y) * Pij(x,y,dist(NodeF,Node)) * Down(Node,y) //Down is actaully calculated over the father




___COMPUTE_PIJ_COMPONENT
// holds the prob fillPij for the tree (all nodes)
computePijHomSpec										// for specific node
		_V[let1][let2]
computePijHom											//all nodes, based on the previous
		vector<computePijHomSpec> _V; // let, let
		_V[nodeId].getPij(let1,let2)
computePijGam											// all rateCategories, based on the previous
		vector<computePijHom> _V; // each rate category
		_V[rateCategor].getPij(nodeId,let1,let2)
 

 
 ___SUFF_STAT_COMPONENT:		
 // holds the prob results of computeUp and computeDown
suffStatSpecHomPos[letter][prob]						// this is for a specific node
suffStatGlobalHomPos[nodeid][letter][prob]				// this is for all nodes
suffStatGlobalGamPos[category][nodeid][letter][prob]	// this is for all nodes
	For fixed root (non-reversible)- also used as suffStatGlobalGamPos[letter@root][nodeid][letter][prob]

suffStatGlobalHom[pos][nodeid][letter][prob]			// this is for all positions (and for all nodes).
suffStatGlobalGam[pos][category][nodeid][letter][prob]	// this is for all positions (and for all nodes).


___COMPUTE_UP_ALG
// compute partial likelihoods of subtrees (for each node) - filled into suffStats
fillComputeUp(tr,sc,pi, ->suffStatGlobalGam)
	calls:
		foreach pos
			foreach categor
				cupAlg.fillComputeUp(tr,sc,pos,pi[categor],ssc[pos][categor]) //  go over all tree to fill suffStatGlobalGam[pos][category][nodeid][letter][prob]

___COMPUTE_DOWN_ALG
// compute parial "upward" likelihoods - for each node N, if Up(N) is the N subtree than Down(N)=P(Tree\Subtree_N)
// uses the suffStat computed by the UpAlg
fillComputeDown(tr,sc,pos,pi,->suffStatGlobalHomPos& ssc, using: suffStatGlobalHomPos& cup)
	also a version with given sp instead of pi, if it was not pre-computed (use sp.Pij_t(letter, letterInFather, dist))

Note: the "foreach pos,foreach categor" is looped externally.


___BBL_EM_H
Using the following members:
	vector<countTableComponentGam> _computeCountsV; // for each node - a table of rate*alph*alph
	computePijGam _pij;
	suffStatGlobalGam _cup;
	suffStatGlobalGamPos _cdown;


