Пример #1
0
BOOL ASENSOR::BiasSave( void )
{
BOOL ok;
matrix B,H;
time_t t;
int i;

    if( !CalibrationFlags[ASENSOR_CALIBRATION_BIAS] )
    {
        return(TRUE);
    }

    //disp(BiasVolts);
    TIMER_delay(10.0);
    B.duplicate(BiasVolts);
    MakeRowVector(B);

    //printf("ASENSOR::BiasSave()\n");
    //disp(B);

    ok = matrix_write(BiasFile,B);
    STR_printf(ok,ASENSOR_debugf,ASENSOR_errorf,"ASENSOR::BiasSave() %s %s.\n",BiasFile,STR_OkFailed(ok));

    if( ok )
    {
        time(&t);
        H.dim(1,DAQ_ChannelCount+1);
        H(1,1) = (double)t;
        for( i=0; (i < DAQ_ChannelCount); i++ )
        {
            H(1,i+2) = B(i+1,1);
        }

        ok = matrix_append(BiasHistoryFile,H);
        STR_printf(ok,ASENSOR_debugf,ASENSOR_errorf,"ASENSOR::BiasSave() %s %s.\n",BiasHistoryFile,STR_OkFailed(ok));
    }

    return(ok);
}
Пример #2
0
matrix_t* matrix_merge_sort(pk_internal_t* pk,
                            matrix_t* mata, matrix_t* matb)
{
    size_t i,ia,ib,l;
    matrix_t* mat;
    size_t nbrows;
    assert (mata->nbcolumns == matb->nbcolumns);
    if (!mata->_sorted || !matb->_sorted) {
        mat = matrix_append(mata,matb);
        matrix_sort_rows(pk,mat);
    }
    else {
        mat = _matrix_alloc_int(mata->nbrows+matb->nbrows,mata->nbcolumns,true);
        i = 0;
        ia = 0;
        ib = 0;
        while (ia < mata->nbrows && ib < matb->nbrows) {
            int res = vector_compare(pk,
                                     mata->p[ia],
                                     matb->p[ib],
                                     mat->nbcolumns);
            if (res<=0) {
                for (l=0; l<mat->nbcolumns; l++)
                    numint_init_set(mat->p[i][l],mata->p[ia][l]);
                ia++;
                if (res==0) ib++;
            }
            else {
                for (l=0; l<mat->nbcolumns; l++)
                    numint_init_set(mat->p[i][l],matb->p[ib][l]);
                ib++;
            }
            i++;
        }
        /* does some constraint remain ? */
        if (ia < mata->nbrows) {
            do {
                for (l=0; l<mat->nbcolumns; l++)
                    numint_init_set(mat->p[i][l],mata->p[ia][l]);
                ia++;
                i++;
            } while (ia < mata->nbrows);
        } else {
            while (ib < matb->nbrows) {
                for (l=0; l<mat->nbcolumns; l++)
                    numint_init_set(mat->p[i][l],matb->p[ib][l]);
                ib++;
                i++;
            }
        }
        nbrows = (size_t)i;
        /* initialize last rows of mat to zero */
        while (i<mat->nbrows) {
            for (l=0; l<mat->nbcolumns; l++)
                numint_init(mat->p[i][l]);
            i++;
        }
        mat->nbrows = nbrows;
    }

    return mat;
}