all_together_cumulative = {
let tmp = Array(all_together.length);
let i = 0;
tmp[i] = { ...all_together[i] };
const prevCumSlpValid = 0;
const prevCumActValid = 0;
const prevCumSlpInval = 0;
const prevCumActInval = 0;
const prevCumValid = prevCumSlpValid + prevCumActValid;
const curSlp = all_together[i].sleep ? all_together[i].sleep.points : 0;
const curAct = all_together[i].activity ? all_together[i].activity.points : 0;
const curCum = curSlp + curAct;
const newCumSlp = prevCumSlpValid + curSlp;
const newCumAct = prevCumActValid + curAct;
const newCum = prevCumValid + curCum;
const newCumValid = d3.min([newCum, MAX_POINTS]);
const pointsNeeded = d3.max([newCumValid - prevCumValid, 0]);
const curFractionValid = pointsNeeded / curCum;
const curSlpValid = curSlp * curFractionValid;
const curSlpInval = curSlp * (1 - curFractionValid);
const curActValid = curAct * curFractionValid;
const curActInval = curAct * (1 - curFractionValid);
tmp[i].curSlpValid = curSlpValid;
tmp[i].curSlpInval = curSlpInval;
tmp[i].curActValid = curActValid;
tmp[i].curActInval = curActInval;
tmp[i].cumSlpValid = prevCumSlpValid + curSlpValid;
tmp[i].cumSlpInval = prevCumSlpInval + curSlpInval;
tmp[i].cumActValid = prevCumActValid + curActValid;
tmp[i].cumActInval = prevCumActInval + curActInval;
for (let i = 1; i < all_together.length; i++) {
tmp[i] = { ...all_together[i] };
// previous
const prevCumSlpValid = tmp[i].weekday == 0 ? 0 : tmp[i - 1].cumSlpValid;
const prevCumActValid = tmp[i].weekday == 0 ? 0 : tmp[i - 1].cumActValid;
const prevCumSlpInval = tmp[i].weekday == 0 ? 0 : tmp[i - 1].cumSlpInval;
const prevCumActInval = tmp[i].weekday == 0 ? 0 : tmp[i - 1].cumActInval;
// console.log(
// i,
// prevCumSlpValid,
// prevCumActValid,
// prevCumSlpInval,
// prevCumActInval
// );
const prevCumValid = prevCumSlpValid + prevCumActValid;
// current
const curSlp = all_together[i].sleep ? all_together[i].sleep.points : 0;
const curAct = all_together[i].activity
? all_together[i].activity.points
: 0;
const curCum = curSlp + curAct;
// new
const newCumSlp = prevCumSlpValid + curSlp;
const newCumAct = prevCumActValid + curAct;
const newCum = prevCumValid + curCum; // or, newCumSlp + newCumAct
// could just set curFractionValid to 0 if we have any previous invalid
const newCumValid = d3.min([newCum, MAX_POINTS]);
const pointsNeeded = d3.max([newCumValid - prevCumValid, 0]);
const curFractionValid = curCum > 0 ? pointsNeeded / curCum : 1;
const curSlpValid = curSlp * curFractionValid;
const curSlpInval = curSlp * (1 - curFractionValid);
const curActValid = curAct * curFractionValid;
const curActInval = curAct * (1 - curFractionValid);
// console.log(
// i,
// prevCumSlpValid,
// prevCumActValid,
// prevCumSlpInval,
// prevCumActInval,
// prevCumValid,
// curSlp,
// curAct,
// curCum,
// newCumSlp,
// newCumAct,
// newCum
// );
// set current values
tmp[i].curSlpValid = curSlpValid;
tmp[i].curSlpInval = curSlpInval;
tmp[i].curActValid = curActValid;
tmp[i].curActInval = curActInval;
// set cumulative values
tmp[i].cumSlpValid = prevCumSlpValid + curSlpValid;
tmp[i].cumSlpInval = prevCumSlpInval + curSlpInval;
tmp[i].cumActValid = prevCumActValid + curActValid;
tmp[i].cumActInval = prevCumActInval + curActInval;
}
return tmp;
}