Creating rhythmic meso / macro structure with Demand trigger mask

hey, in this thread Masking triggers and adjust overlap legato style i have been asking how to adjust the overlap in a “legato style” when masking triggers by binary values. i have made this sketch which is working already (see the plot). But i would like to calculate the legato values from the serialized binary matrix which im passing, inside of triggerMask and have two events mask and legato as outputs. I think it would be more intuitive to use the initial ~matrixOfDurations for the legato values instead of the calculated ~legato matrix. How can i do that?

(
~seqOfRows = [2, 0];

~matrixOfDurations = [
	[ 12 ],
	[ 6, 6 ],
	[ 6, 3, 3 ],
	[ 3, 3, 3, 3 ],
	[ 3, 3, 2, 1, 3 ],
	[ 3, 1, 2, 2, 1, 3 ],
	[ 3, 1, 2, 2, 1, 2, 1 ],
	[ 2, 1, 1, 2, 2, 1, 2, 1 ],
	[ 2, 1, 1, 2, 2, 1, 1, 1, 1 ],
	[ 2, 1, 1, 2, 1, 1, 1, 1, 1, 1 ],
	[ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ],
	[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
];

// matrixOfDurations converted to binary values
~binaryDurations = [
	[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
	[ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ],
	[ 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0 ],
	[ 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0 ],
	[ 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0 ],
	[ 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0 ],
	[ 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1 ],
	[ 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1 ],
	[ 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1 ],
	[ 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1 ],
	[ 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ],
	[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
];

// manually calculated legato values for these specific binaryDurations
~legato = [
	[ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12 ],
	[ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 ],
	[ 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3 ],
	[ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ],
	[ 3, 3, 3, 3, 3, 3, 2, 2, 1, 3, 3, 3 ],
	[ 3, 3, 3, 1, 2, 2, 2, 2, 1, 3, 3, 3 ],
	[ 3, 3, 3, 1, 2, 2, 2, 2, 1, 2, 2, 1 ],
	[ 2, 2, 1, 1, 2, 2, 2, 2, 1, 2, 2, 1 ],
	[ 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1 ],
	[ 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1 ],
	[ 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ],
	[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
];
)

(
var timingInformation = { |numChannels, trig, grainRate|
	var rate = if(trig.rate == \audio, \ar, \kr);
	var arrayOfTrigsAndPhases = numChannels.collect{ |i|
		var localTrig = PulseDivider.perform(rate, trig, numChannels, i);
		var hasTriggered = PulseCount.perform(rate, localTrig) > 0;
		var localPhase = Sweep.perform(rate, localTrig, grainRate * hasTriggered);
		[localTrig, localPhase];
	};
	var trigsAndPhasesArray = arrayOfTrigsAndPhases.flop;
	(\trigger : trigsAndPhasesArray[0], \phase: trigsAndPhasesArray[1]);
};

var triggerMask = { |trig, reset, arrayOfValues, arrayOfLegatos, valuesPerRow, seqOfRows, rowSeqSize|
	var noteInSeq = Demand.ar(trig, reset, Dseq([Dseries(0, 1, valuesPerRow)], inf));
	var rowTrig = HPZ1.ar(noteInSeq) < 0;
	var row = Demand.ar(rowTrig + Impulse.ar(0), reset,
		Dseq([Dser(seqOfRows, rowSeqSize)], inf)
	);
	var seqOffset = row.floor * valuesPerRow;
	var mask = Demand.ar(trig, reset, Dswitch1(arrayOfValues, seqOffset + noteInSeq));
	var legato = Demand.ar(trig, reset, Dswitch1(arrayOfLegatos, seqOffset + noteInSeq));
	(mask: mask, legato: legato);
};

var hanningWindow = { |phase|
	(1 - (phase * 2pi).cos) / 2 * (phase < 1);
};

{
	var numChannels = 4;

	var sig, tFreq, trig, grainRate, grainWindow, phase, maskedTrig, legato, timings;

	tFreq = \tFreq.kr(400);
	trig = Impulse.ar(tFreq);

	maskedTrig = triggerMask.(
		trig: trig,
		reset: \reset.tr(0),
		arrayOfValues: ~binaryDurations.flat,
		arrayOfLegatos: ~legato.flat,
		valuesPerRow: ~binaryDurations.size,
		seqOfRows: ~seqOfRows,
		rowSeqSize: ~seqOfRows.size,
	);

	grainRate = (tFreq / (\overlap.kr(1) * maskedTrig.legato));

	timings = timingInformation.(numChannels, trig * maskedTrig.mask, grainRate);

	grainWindow = hanningWindow.(timings.phase);

	sig = SinOsc.ar(440);

	sig = sig * grainWindow;

}.plot(0.2);
)