function (N, data, CART_OR_SPH, DIRECT_OR_PINV) {
    
    var Ndirs = data.length, Nsh = (N+1)*(N+1);
    var invY_N;
    var mag = [,];
    if (Nsh>Ndirs)  {
        console.log("The SHT degree is too high for the number of data points")
    }
    
    // Convert cartesian to spherical if needed
    if (CART_OR_SPH==0) data = convertCart2Sph(data);
    for (var  i=0; i<data.length; i++) {
        mag[i] = data[i][2];
    }
    // SH sampling matrix
    Y_N = computeRealSH(N, data);
    // Direct SHT
    if (DIRECT_OR_PINV==0) {
        invY_N = numeric.mul(1/Ndirs,Y_N);
    }
    else {
        invY_N = pinv_direct(numeric.transpose(Y_N));
    }
    // Perform SHT
    var coeffs = numeric.dotMV(invY_N, mag);
    return coeffs;
}
function (N, data, CART_OR_SPH, DIRECT_OR_PINV) {
    
    var Ndirs = data.length, Nsh = (N+1)*(N+1);
    var invY_N;
    var mag = [,];
    if (Nsh>Ndirs)  {
        console.log("The SHT degree is too high for the number of data points")
    }
    
    
    if (CART_OR_SPH==0) data = convertCart2Sph(data);
    for (var  i=0; i<data.length; i++) {
        mag[i] = data[i][2];
    }
    
    Y_N = computeRealSH(N, data);
    
    if (DIRECT_OR_PINV==0) {
        invY_N = numeric.mul(1/Ndirs,Y_N);
    }
    else {
        invY_N = pinv_direct(numeric.transpose(Y_N));
    }
    
    var coeffs = numeric.dotMV(invY_N, mag);
    return coeffs;
}
function ( N , data , CART_OR_SPH , DIRECT_OR_PINV ) { var Ndirs = data . length , Nsh = ( N + 1 ) * ( N + 1 ) ; var invY_N ; var mag = [ , ] ; if ( Nsh > Ndirs ) { console . log ( "The SHT degree is too high for the number of data points" ) } // Convert cartesian to spherical if needed if ( CART_OR_SPH == 0 ) data = convertCart2Sph ( data ) ; for ( var i = 0 ; i < data . length ; i ++ ) { mag [ i ] = data [ i ] [ 2 ] ; } // SH sampling matrix Y_N = computeRealSH ( N , data ) ; // Direct SHT if ( DIRECT_OR_PINV == 0 ) { invY_N = numeric . mul ( 1 / Ndirs , Y_N ) ; } else { invY_N = pinv_direct ( numeric . transpose ( Y_N ) ) ; } // Perform SHT var coeffs = numeric . dotMV ( invY_N , mag ) ; return coeffs ; }
forwardSHT implements the forward SHT on data defined over the sphere
forwardSHT implements the forward SHT on data defined over the sphere