function loess_trace(loess_data,bandwidth){
console.log("loess_trace has bandwidth " + bandwidth);
const x_vec = loess_data.map(d => d[0]);
const n = x_vec.length
const M = 50;
const nindx = n > M ? M : n;
var index = new Array(nindx);
if(nindx == M){
for(let i = 0; i < nindx; i++){
index[i] = Math.floor(i/nindx * n);
}
} else {
for(let i = 0; i < nindx; i++){
index[i] = i;
}
}
var trace = 0;
var tmpData = [];
var f;
for(let i=0; i<n; i++){
tmpData.push([x_vec[i], 0]);
}
for(let i=0; i<nindx; i++){
tmpData[index[i]][1] = 1.0;
f = d3.regressionLoess()
.x(d=>d[0])
.y(d=>d[1])
.bandwidth(bandwidth)
(tmpData);
trace += f.map(d => d[1])[i];
tmpData[index[i]][1] = 0.0;
}
console.log("loess_trace: trace = " + trace);
return trace;
}