Example #1
0
static void update_labels(MBLOCK *mblk)
{
    POPUP_INFO *popinf = mblk->popinf + POP_INT1D;

    if (popinf->cont_id) {
        char *label;
        label = psnd_sprintf_temp("%d", mblk->int1dinf->left);
        g_popup_set_label(popinf->cont_id, INT1D_LEFT, label);
        label = psnd_sprintf_temp("%d", mblk->int1dinf->right);
        g_popup_set_label(popinf->cont_id, INT1D_RIGHT, label);
    }
}
Example #2
0
static void write_integrals(MBLOCK *mblk)
{
    FILE *outfile = stdout;
    char *filename;

    if (mblk->int1dinf->next == NULL) {
        g_popup_messagebox(mblk->info->win_id, "Warning", "Empty list", FALSE);
        return;
    }

    filename = psnd_savefilename(mblk,"Write integrals to file","*");

    if (!filename) 
        return;

    if ((outfile = fopen(filename,"w")) == NULL) {
        char *label;
        label = psnd_sprintf_temp("Can not open file %s",filename);
        g_popup_messagebox(mblk->info->win_id, "Warning", label, FALSE);
        return;
    }

    print_integrals(mblk, outfile);
    fclose(outfile);
}
Example #3
0
static void show_color(MBLOCK *mblk, int col_id)
{
    int  save_win_id;
    char *label;
    int  colornamecount;
    char **arraydata;
    int win_id   = mblk->info->colorwin_id; 
    int block_id = mblk->info->colorblock_id;
    int array_id = mblk->info->colorarray_id;
    
    g_push_gc();
    save_win_id=g_get_windownr();
    g_select_window(win_id);
    g_delete_object(mblk->spar[S_COLORMAP].obj_id+1);
    g_open_object(mblk->spar[S_COLORMAP].obj_id+1);
    g_select_viewport(mblk->spar[S_COLORMAP].vp_id);
    g_set_foreground(col_id);

    g_fillrectangle(0,MAXROW,MAXCOLUMN,MAXROW+1);
    g_moveto(0.2,MAXROW+0.2);
    if (col_id == G_WHITE )
        g_set_foreground(G_BLACK);
    else
        g_set_foreground(G_WHITE);

    g_set_font(G_FONT_HELVETICA_BOLD,G_RELATIVE_FONTSCALING);
    g_set_charsize(1.0);
    arraydata = psnd_get_colornames(&colornamecount);
    label = psnd_sprintf_temp("Block%d:%s:Color=%d", 
                    block_id+1, arraydata[array_id], col_id);
    g_label(label);
    g_close_object(mblk->spar[S_COLORMAP].obj_id+1);
    g_call_object(mblk->spar[S_COLORMAP].obj_id+1);
    g_flush();
    g_pop_gc();
    g_select_window(save_win_id);
}
Example #4
0
/*
* Integrate peaks
*/
void psnd_integrate1d(MBLOCK *mblk, float x1, float x2)
{
    int i;
    int i1 = round(x1);
    int i2 = round(x2);
    int lim1 = min(i1, i2);
    int lim2 = max(i1, i2);    
    int xmin, xmax;
    float sum0, sum1, sum, ymin, ymax, yrange,xx;
    char *label;
    POPUP_INFO *popinf = mblk->popinf + POP_INT1D;
    
    lim1 = max(1, lim1);
    lim2 = max(1, lim2);
    lim1 = min(DAT->isize, lim1);
    lim2 = min(DAT->isize, lim2);

    mblk->int1dinf->left  = min(lim1,lim2);
    mblk->int1dinf->right = max(lim1,lim2);
    update_labels(mblk);

    lim1 = mblk->int1dinf->left;
    lim2 = mblk->int1dinf->right;
    /*
     * ... determine integral over visible area (and min and max)
     */
    for (i=0,sum0=0;i<DAT->isize;i++)
        sum0 += DAT->xreal[i];
    if (sum0 == 0)
        sum0 = 1;
    /*        
     *
     * ... determine integral over selected area (and min and max)
     * ... and draw the intensity lines
     *
     */
    g_append_object(mblk->spar[S_REAL].obj_id);
    g_set_foreground(mblk->spar[S_REAL].color);
    
    for (i=lim1,sum=0,xmin=lim1,xmax=lim1;i<=lim2;i++) {
        sum += DAT->xreal[i-1];
        g_moveto((float) i, DAT->xreal[i-1]);
        g_lineto((float) i, 0.0);
    }
    /*
     *
     * ...  calc integral
     *
     */
    g_set_foreground(mblk->spar[S_REAL].color3);
    minmax(DAT->xreal,DAT->isize,&(DAT->ylimit[0]),&(DAT->ylimit[1]));
    sum1=0;
    yrange = (DAT->ylimit[1] - DAT->ylimit[0])/ sum0;
    for (i=lim1;i<lim2;i++) {
        sum1 += yrange * DAT->xreal[i-1];
        DAT->work1[i-1] = sum1;
    }
    /*
     * Try to move integral on top of peak
     */
    xx=DAT->ylimit[0];
    for (i=lim1;i<lim2;i++) {
        if (xx < (DAT->xreal[i-1]-DAT->work1[i-1]))
            xx = DAT->xreal[i-1]-DAT->work1[i-1];
    }
    /*
     * But not outside window
     */
    if (DAT->work1[lim2-2]+xx>DAT->ylimit[1])
        xx -= -DAT->ylimit[1] + (DAT->work1[lim2-2] + xx);
    xx += (DAT->ylimit[1] - DAT->ylimit[0])/100;
    for (i=lim1;i<lim2;i++) {
        DAT->work1[i-1] += xx;
    }
    /*
     * Draw integral
     */
    g_moveto((float) lim1, DAT->work1[lim1-1]);
    for (i=lim1;i<lim2;i++) {
        g_lineto((float)i, DAT->work1[i-1]);
    }
    /*
     * Print label
     */
    g_moveto((float) lim1, DAT->work1[lim1-1]+(DAT->work1[lim2-2]-DAT->work1[lim1-1])/2);
    label = psnd_sprintf_temp("%.2e", sum);
/*    g_set_motif_realtextrotation(1);
    g_set_textdirection(90);*/
    g_label(label);
/*    g_set_textdirection(0);*/
    g_set_foreground(mblk->spar[S_REAL].color);
    g_close_object(mblk->spar[S_REAL].obj_id);
    g_plotall();
/*    g_set_motif_realtext rotation(0);*/
    mblk->int1dinf->sum = sum;
    if (popinf->visible)
        add_integral(mblk);
    psnd_printf(mblk," Range: %6d%6d Area: %g\n", lim1, lim2, sum);
}
Example #5
0
/*
 * Popup menu 
 */
void psnd_int1d_popup(MBLOCK *mblk)
{
    int i, ok;
    G_POPUP_CHILDINFO ci[20];
    int id;
    char *label;
    POPUP_INFO *popinf = mblk->popinf + POP_INT1D;

    if (popinf->visible)
        return;
    popinf->visible = TRUE;
    if (!popinf->cont_id) {
        int cont_id;
        if (!mblk->int1dinf->left) {
            mblk->int1dinf->left   = 1;
            mblk->int1dinf->right  = DAT->isize;
        }
        mblk->int1dinf->left = max(mblk->int1dinf->left, 1);
        mblk->int1dinf->left = min(mblk->int1dinf->left, DAT->isize);
        mblk->int1dinf->right = max(mblk->int1dinf->right, 1);
        mblk->int1dinf->right = min(mblk->int1dinf->right, DAT->isize);
        cont_id = g_popup_container_open(mblk->info->win_id, 
                      "Integrate 1D",  G_POPUP_KEEP|G_POPUP_SINGLEBUTTON);
        popinf->cont_id = cont_id;
        label = psnd_sprintf_temp("%d", mblk->int1dinf->left);
        id=0;
        g_popup_init_info(&(ci[id]));
        ci[id].type  = G_CHILD_TEXTBOX;
        ci[id].id            = INT1D_LEFT;
        ci[id].title         = "Left  ";
        ci[id].func          = integrate1d_callback;
        ci[id].userdata      = (void*) mblk;
        ci[id].item_count    = 20;
        ci[id].items_visible = 10;
        ci[id].label         = label;
        ci[id].horizontal    = TRUE;
        g_popup_add_child(cont_id, &(ci[id]));

        label = psnd_sprintf_temp("%d", mblk->int1dinf->right);
        id++;
        g_popup_init_info(&(ci[id]));
        ci[id].type  = G_CHILD_TEXTBOX;
        ci[id].id            = INT1D_RIGHT;
        ci[id].title         = "Right ";
        ci[id].func          = integrate1d_callback;
        ci[id].userdata      = (void*) mblk;
        ci[id].item_count    = 20;
        ci[id].items_visible = 10;
        ci[id].label         = label;
        ci[id].horizontal    = TRUE;
        g_popup_add_child(cont_id, &(ci[id]));

        id++;
        g_popup_init_info(&(ci[id]));
        ci[id].type  = G_CHILD_PUSHBUTTON;
        ci[id].id    = INT1D_MOUSE;
        ci[id].label = "Grab Mouse Button 1";
        ci[id].func  = integrate1d_callback;
        ci[id].userdata      = (void*) mblk;
        g_popup_add_child(cont_id, &(ci[id]));

        id++;
        g_popup_init_info(&(ci[id]));
        ci[id].type  = G_CHILD_PUSHBUTTON;
        ci[id].id    = INT1D_INTEGRAL;
        ci[id].label = "Calc Integral";
        ci[id].func  = integrate1d_callback;
        ci[id].userdata      = (void*) mblk;
        g_popup_add_child(cont_id, &(ci[id]));
/*
        id++;
        g_popup_init_info(&(ci[id]));
        ci[id].type  = G_CHILD_PUSHBUTTON;
        ci[id].id    = INT1D_NOISE;
        ci[id].label = "Calc Noise";
        ci[id].func  = integrate1d_callback;
        ci[id].userdata      = (void*) mblk;
        g_popup_add_child(cont_id, &(ci[id]));
*/
        id++;
        g_popup_init_info(&(ci[id]));
        ci[id].type  = G_CHILD_PUSHBUTTON;
        ci[id].id    = INT1D_PRINT;
        ci[id].label = "Print Integrals";
        ci[id].func  = integrate1d_callback;
        ci[id].userdata      = (void*) mblk;
        g_popup_add_child(cont_id, &(ci[id]));

        id++;
        g_popup_init_info(&(ci[id]));
        ci[id].type  = G_CHILD_PUSHBUTTON;
        ci[id].id    = INT1D_WRITE;
        ci[id].label = "Write to disk";
        ci[id].func  = integrate1d_callback;
        ci[id].userdata      = (void*) mblk;
        g_popup_add_child(cont_id, &(ci[id]));

        id++;
        g_popup_init_info(&(ci[id]));
        ci[id].type  = G_CHILD_PUSHBUTTON;
        ci[id].id    = INT1D_RESET;
        ci[id].label = "Clear list";
        ci[id].func  = integrate1d_callback;
        ci[id].userdata      = (void*) mblk;
        g_popup_add_child(cont_id, &(ci[id]));

        id++;
        g_popup_init_info(&(ci[id]));
        ci[id].type  = G_CHILD_OK;
        ci[id].func  = integrate1d_callback;
        ci[id].userdata      = (void*) mblk;
        g_popup_add_child(cont_id, &(ci[id]));

        id++;
        g_popup_init_info(&(ci[id]));
        ci[id].type  = G_CHILD_CANCEL;
        ci[id].func  = integrate1d_callback;
        ci[id].userdata      = (void*) mblk;
        g_popup_add_child(cont_id, &(ci[id]));
    }
    mblk->int1dinf->left = max(mblk->int1dinf->left, 1);
    mblk->int1dinf->left = min(mblk->int1dinf->left, DAT->isize);
    mblk->int1dinf->right = max(mblk->int1dinf->right, 1);
    mblk->int1dinf->right = min(mblk->int1dinf->right, DAT->isize);
    g_popup_container_show(popinf->cont_id) ;
}