Blame |
Last modification |
View Log
| RSS feed
#include <userint.h>
#include "CAEN_V729_CVI.h"
#include "HDraw.h"
#include "H3D.h"
#include "H2D.h"
#include "H1D.h"
HColorMap
*colormap
= NULL
;
int hmapinit
=0;
int InitColors
(void) {
if (!hmapinit
) {
colormap
= malloc(sizeof(HColorMap
));
colormap
->numberofColors
= 5;
colormap
->array
= malloc(colormap
->numberofColors
*sizeof(ColorMapEntry
));
colormap
->array
[0].
color = 0x0000ff; //BLUE
colormap
->array
[1].
color = 0x00ff00; //GREEN
colormap
->array
[2].
color = 0xffff00; //YELLOW
colormap
->array
[3].
color = 0xff8000; //ORANGE
colormap
->array
[4].
color = 0xff0000; //RED
colormap
->HiColor
=colormap
->array
[colormap
->numberofColors
-1].
color ;
hmapinit
=1;
return 0;
}
return -1;
}
HColorMap
*GetColorMapPtr
(void) {
return colormap
;
}
int RangeColors
( double min
, double max
) {
int i
;
if (!hmapinit
) InitColors
();
//if (zerosuppress){
// if (min>0) min=0;
//}
if (colormap
->numberofColors
<2) return -1;
for (i
=0; i
<colormap
->numberofColors
; i
++) {
colormap
->array
[i
].
dataValue.
valDouble=i
*(max
-min
)/(colormap
->numberofColors
-1)+min
;
//sa02Printf("Colors %d ;%f %f %f\n",i, min,max,colormap->array[i].dataValue.valDouble );
}
return 0;
}
int H3DDrawSliceXY
(int histogram
,int slice
,int panel
, int control
, int *plothandle
) {
int i
=0;
if (!H2DExist
(histogram
)) {
printf("2D Histogram %d does not exist!\n",histogram
);
return 0;
}
if (H3DGetNbinsY
(histogram
)==1|| H3DGetNbinsX
(histogram
)==1) {
if (H3DGetNbinsY
(histogram
)==1) {
H1DInit
(499,"projection","projection", H3DGetNbinsX
(histogram
), H3DGetMinX
(histogram
),H3DGetStepX
(histogram
));
for (i
=0; i
< H3DGetNbinsX
(histogram
); i
++ ) H1DSetBinContent
(499,i
,H3DGetBinContent
(histogram
,i
,0,slice
));
} else {
H1DInit
(499,"projection","projection", H3DGetNbinsY
(histogram
), H3DGetMinY
(histogram
),H3DGetStepY
(histogram
));
for (i
=0; i
< H3DGetNbinsY
(histogram
); i
++ ) H1DSetBinContent
(499,i
,H3DGetBinContent
(histogram
,0,i
,slice
));
}
H1DDraw
(499, panel
, control
, plothandle
);
} else {
if (*plothandle
> 0 ) DeleteGraphPlot
(panel
, control
, *plothandle
, VAL_IMMEDIATE_DRAW
);
RangeColors
(H3DGetMin
(histogram
),H3DGetMax
(histogram
));
*plothandle
= PlotScaledIntensity
(panel
, control
,
H3DGetSliceXYData
(histogram
, slice
),
H3DGetNbinsX
(histogram
),
H3DGetNbinsY
(histogram
),
VAL_DOUBLE
,
H3DGetStepY
(histogram
),
H3DGetMinY
(histogram
),
H3DGetStepX
(histogram
),
H3DGetMinX
(histogram
),
colormap
->array
,
colormap
->HiColor
,
colormap
->numberofColors
, 1, 0);
}
ProcessSystemEvents
();
return *plothandle
;
}
int H2DDraw
(int histogram
,int panel
, int control
, int *plothandle
) {
int i
=0;
if (!H2DExist
(histogram
)) {
printf("2D Histogram %d does not exist!\n",histogram
);
return 0;
}
if (H2DGetNbinsY
(histogram
)==1|| H2DGetNbinsX
(histogram
)==1) {
if (H2DGetNbinsY
(histogram
)==1) {
H1DInit
(499,"projection","projection", H2DGetNbinsX
(histogram
), H2DGetMinX
(histogram
),H2DGetStepX
(histogram
));
for (i
=0; i
< H2DGetNbinsX
(histogram
); i
++ ) H1DSetBinContent
(499,i
,H2DGetBinContent
(histogram
,i
,0));
} else {
H1DInit
(499,"projection","projection", H2DGetNbinsY
(histogram
), H2DGetMinY
(histogram
),H2DGetStepY
(histogram
));
for (i
=0; i
< H2DGetNbinsY
(histogram
); i
++ ) H1DSetBinContent
(499,i
,H2DGetBinContent
(histogram
,0,i
));
}
H1DDraw
(499, panel
, control
, plothandle
);
} else {
if (*plothandle
> 0 ) DeleteGraphPlot
(panel
, control
, *plothandle
, VAL_IMMEDIATE_DRAW
);
double min
= H2DGetMin
(histogram
);
double max
= H2DGetMax
(histogram
);
RangeColors
(min
,max
);
*plothandle
= PlotScaledIntensity
(panel
, control
,
H2DGetData
(histogram
),
H2DGetNbinsX
(histogram
),
H2DGetNbinsY
(histogram
),
VAL_DOUBLE
,
H2DGetStepY
(histogram
),
H2DGetMinY
(histogram
),
H2DGetStepX
(histogram
),
H2DGetMinX
(histogram
),
colormap
->array
,
colormap
->HiColor
,
colormap
->numberofColors
, 1, 0);
}
ProcessSystemEvents
();
return *plothandle
;
}
unsigned int hcolors
[8]={VAL_RED
, VAL_GREEN
, VAL_BLUE
, VAL_CYAN
, VAL_MAGENTA
, VAL_YELLOW
, VAL_GRAY
, VAL_BLACK
};
int H1DDraw
(int histogram
,int panel
, int control
, int *plothandle
) {
if (!H1DExist
(histogram
)) {
printf("1D Histogram %d does not exist!\n",histogram
);
return 0;
}
if (*plothandle
> 0 ) DeleteGraphPlot
(panel
, control
, *plothandle
, VAL_IMMEDIATE_DRAW
);
*plothandle
= PlotWaveform
(panel
, control
, H1DGetData
(histogram
), H1DGetNbinsX
(histogram
), VAL_DOUBLE
, 1, 0, H1DGetMinX
(histogram
), H1DGetStepX
(histogram
), VAL_FAT_LINE
, VAL_SMALL_SOLID_SQUARE
, VAL_SOLID
, 1,
hcolors
[histogram
%8]);
ProcessSystemEvents
();
return *plothandle
;
}
int EstimatedFinish
(int panel
, int slider
,int txt
, time_t tstart
, double fraction
) {
time_t t
, tend
=tstart
;
time(&t
);
if (fraction
>0) tend
= ((double)(t
-tstart
))/fraction
+ tstart
;
SetCtrlVal
(panel
, txt
, ctime(&tend
));
SetCtrlVal
(panel
, slider
, 100*fraction
);
return 0;
}