--- /dev/null
+f0 <-
+function(Input, AlphaIn, BetaIn, EmpiricalR, NumOfGroups, log)
+{
+
+ BetaVect=do.call(c,sapply(1:length(BetaIn),function(i)rep(BetaIn[i],NumOfGroups[i]),simplify=F))
+ SampleNum=dim(Input)[2]
+ #Product part
+ ChooseParam1=round(Input+EmpiricalR-1)
+ roundInput=round(Input)
+ EachChoose=sapply(1:SampleNum, function(i)lchoose(ChooseParam1[,i], roundInput[,i]))
+
+ SumEachIso=rowSums(Input)
+ param1=AlphaIn + rowSums(EmpiricalR)
+ param2=BetaVect + SumEachIso
+ LogConst=rowSums(EachChoose)+lbeta(param1, param2)-lbeta(AlphaIn, BetaVect)
+
+
+ if (log==F) FinalResult=exp(LogConst)
+ if (log==T) FinalResult=LogConst
+ FinalResult
+}
+