83 lines
3.4 KiB
Mathematica
83 lines
3.4 KiB
Mathematica
|
|
function update_join_difference(cqData, nCqCodes, spData, nSpCodes, locCliques, locSeparators, logml)
|
||
|
|
% update JOIN_DIFFERENCE
|
||
|
|
% Lu Cheng, 15.12.2012
|
||
|
|
|
||
|
|
global CQ_COUNTS; global SUM_CQ_COUNTS;
|
||
|
|
global SP_COUNTS; global SUM_SP_COUNTS;
|
||
|
|
global PARTITION;
|
||
|
|
global JOIN_DIFFERENCE;
|
||
|
|
|
||
|
|
global LOC_CQ_COUNTS;
|
||
|
|
global LOC_SP_COUNTS;
|
||
|
|
|
||
|
|
npops = size(CQ_COUNTS,3);
|
||
|
|
|
||
|
|
for i1 = 1:npops-1
|
||
|
|
indsToBeMoved = find(PARTITION==i1);
|
||
|
|
if isempty(indsToBeMoved)
|
||
|
|
% Cluster i1 is empty
|
||
|
|
JOIN_DIFFERENCE(i1,(i1+1):npops) = 0;
|
||
|
|
JOIN_DIFFERENCE((i1+1):npops,i1) = 0;
|
||
|
|
else
|
||
|
|
[diffCqCounts diffCqSumCounts] = computeDiffInCounts(indsToBeMoved, cqData, nCqCodes);
|
||
|
|
[diffSpCounts diffSpSumCounts] = computeDiffInCounts(indsToBeMoved, spData, nSpCodes);
|
||
|
|
diffLocCqCounts = computeDiffInCliqCounts(locCliques, indsToBeMoved);
|
||
|
|
diffLocSpCounts = computeDiffInCliqCounts(locSeparators, indsToBeMoved);
|
||
|
|
|
||
|
|
unknown_pops = find(isnan(JOIN_DIFFERENCE(i1,(i1+1):end)));
|
||
|
|
unknown_pops = unknown_pops+i1;
|
||
|
|
|
||
|
|
CQ_COUNTS(:,:,i1) = CQ_COUNTS(:,:,i1) - diffCqCounts;
|
||
|
|
SUM_CQ_COUNTS(:,i1) = SUM_CQ_COUNTS(:,i1) - diffCqSumCounts;
|
||
|
|
|
||
|
|
SP_COUNTS(:,:,i1) = SP_COUNTS(:,:,i1) - diffSpCounts;
|
||
|
|
SUM_SP_COUNTS(:,i1) = SUM_SP_COUNTS(:,i1) - diffSpSumCounts;
|
||
|
|
|
||
|
|
LOC_CQ_COUNTS(:,i1) = LOC_CQ_COUNTS(:,i1) - diffLocCqCounts;
|
||
|
|
LOC_SP_COUNTS(:,i1) = LOC_SP_COUNTS(:,i1) - diffLocSpCounts;
|
||
|
|
|
||
|
|
% PARTITION(indsToBeMoved) = -1;
|
||
|
|
updateLogmlTable(i1);
|
||
|
|
|
||
|
|
for i2 = unknown_pops
|
||
|
|
CQ_COUNTS(:,:,i2) = CQ_COUNTS(:,:,i2) + diffCqCounts;
|
||
|
|
SUM_CQ_COUNTS(:,i2) = SUM_CQ_COUNTS(:,i2) + diffCqSumCounts;
|
||
|
|
|
||
|
|
SP_COUNTS(:,:,i2) = SP_COUNTS(:,:,i2) + diffSpCounts;
|
||
|
|
SUM_SP_COUNTS(:,i2) = SUM_SP_COUNTS(:,i2) + diffSpSumCounts;
|
||
|
|
|
||
|
|
LOC_CQ_COUNTS(:,i2) = LOC_CQ_COUNTS(:,i2) + diffLocCqCounts;
|
||
|
|
LOC_SP_COUNTS(:,i2) = LOC_SP_COUNTS(:,i2) + diffLocSpCounts;
|
||
|
|
|
||
|
|
% PARTITION(indsToBeMoved) = i2;
|
||
|
|
updateLogmlTable(i2);
|
||
|
|
logml_new = computeTotalLogml();
|
||
|
|
JOIN_DIFFERENCE(i1,i2) = logml_new-logml;
|
||
|
|
JOIN_DIFFERENCE(i2,i1) = logml_new-logml;
|
||
|
|
|
||
|
|
CQ_COUNTS(:,:,i2) = CQ_COUNTS(:,:,i2) - diffCqCounts;
|
||
|
|
SUM_CQ_COUNTS(:,i2) = SUM_CQ_COUNTS(:,i2) - diffCqSumCounts;
|
||
|
|
|
||
|
|
SP_COUNTS(:,:,i2) = SP_COUNTS(:,:,i2) - diffSpCounts;
|
||
|
|
SUM_SP_COUNTS(:,i2) = SUM_SP_COUNTS(:,i2) - diffSpSumCounts;
|
||
|
|
|
||
|
|
LOC_CQ_COUNTS(:,i2) = LOC_CQ_COUNTS(:,i2) - diffLocCqCounts;
|
||
|
|
LOC_SP_COUNTS(:,i2) = LOC_SP_COUNTS(:,i2) - diffLocSpCounts;
|
||
|
|
|
||
|
|
% PARTITION(indsToBeMoved) = -1;
|
||
|
|
updateLogmlTable(i2);
|
||
|
|
end
|
||
|
|
|
||
|
|
CQ_COUNTS(:,:,i1) = CQ_COUNTS(:,:,i1) + diffCqCounts;
|
||
|
|
SUM_CQ_COUNTS(:,i1) = SUM_CQ_COUNTS(:,i1) + diffCqSumCounts;
|
||
|
|
|
||
|
|
SP_COUNTS(:,:,i1) = SP_COUNTS(:,:,i1) + diffSpCounts;
|
||
|
|
SUM_SP_COUNTS(:,i1) = SUM_SP_COUNTS(:,i1) + diffSpSumCounts;
|
||
|
|
|
||
|
|
LOC_CQ_COUNTS(:,i1) = LOC_CQ_COUNTS(:,i1) + diffLocCqCounts;
|
||
|
|
LOC_SP_COUNTS(:,i1) = LOC_SP_COUNTS(:,i1) + diffLocSpCounts;
|
||
|
|
|
||
|
|
% PARTITION(indsToBeMoved) = i1;
|
||
|
|
updateLogmlTable(i1);
|
||
|
|
end
|
||
|
|
end
|