simplified LatentCrfModel class and created LatentCrfPosTagger which inherits it. removed the methods: double LatentCrfModel::ComputeNLogZ_lambda(unsigned sentId), double LatentCrfModel::ComputeNLogPrYZGivenX(unsigned sentId, const std::vector<int>& y, const std::vector<int>& z), double LatentCrfModel::ComputeCorpusNloglikelihood(), void LatentCrfModel::ComputeD(unsigned sentId, const std::vector<int> &z, const fst::VectorFst<FstUtils::LogArc> &fst, const std::vector<FstUtils::LogWeight> &alphas, const std::vector<FstUtils::LogWeight> &betas, std::map<std::string, double> &DXZk);
1) split the implementation of latent crf pos tagger into two classes: LatentCrfPosTagger and LatentCrfModel. 2) create a new class LatentCrfAligner which inherits LatentCrfModel, and implement its constructor. 4)  3) add Functors.h which contains aggregator for various data types as functor objects, which is handy for mpi reduce.