Blame |
Last modification |
View Log
| RSS feed
#include "vme.h"
#include <userint.h>
#include "minirich.h"
#include "toolbox.h"
#include "icfa.h"
#include "H1D.h"
#include "H2D.h"
#include "H3D.h"
#include "HDraw.h"
int p6h
;
int hxy
=200;
int minirichplothandle
=0;
int sa02Printf
(const char *format
, ...
);
typedef struct {
int feb
;
int chip
;
int ch
;
int chx
;
int chy
;
int pmtx
;
int pmty
;
int pmtid
} EID2MAPMT
;
EID2MAPMT eid2mapmt
[144*4];
int icfa_LoadElectronicMap
(const char *fname
) {
FILE
*fp
= fopen(fname
,"r");
int febidx
, feb
,chip
,ch
,chx
,chy
,pmtx
,pmty
,pmt
;
int nread
=0;
int ndim
=400;
char line
[400];
int nr
=0;
// file should be sorted feb [0..3], chip[0..3], ch [0.. 35]
while (fgets(line
,ndim
,fp
)!=NULL
) {
// FEBCH PMTCH X Y PMTX PMTY PMTID
nr
= sscanf(line
,"%d%d%d%d%d",&febidx
,&ch
,&chx
,&chy
,&pmt
);
if (nr
) {
chip
= febidx
/ 36;
ch
= febidx
% 36;
pmtx
= pmt
/ 3;
pmty
= pmt
% 3;
for (feb
= 0; feb
<4; feb
++){
// 4 febs
// 0 2
// 1 3
int fx
= feb
%2;
int fy
= feb
/2;
eid2mapmt
[nread
+feb
*144].
feb = feb
;
eid2mapmt
[nread
+feb
*144].
chip = chip
;
eid2mapmt
[nread
+feb
*144].
ch = ch
;
eid2mapmt
[nread
+feb
*144].
chx = chx
+ fx
* 18;
eid2mapmt
[nread
+feb
*144].
chy = chy
+ fy
* 18;
eid2mapmt
[nread
+feb
*144].
pmtx = pmtx
;
eid2mapmt
[nread
+feb
*144].
pmty = pmty
;
}
}
nread
++;
}
sa02Printf
("eid2pmtxy %d records read.\n",nread
);
fclose(fp
);
return 0;
}
int icfa_GetPosition
(unsigned int febchid
, int *chx
, int *chy
) {
if (febchid
>=144*4) return -1;
*chx
= eid2mapmt
[febchid
].
chx;
*chy
= eid2mapmt
[febchid
].
chy ;
return 0;
}
int icfa_Fill
(int febchid
, double weight
){
int x
;
int y
;
icfa_GetPosition
(febchid
, &x
, &y
);
H2DFillBin
(hxy
, x
,y
,weight
);
return 0;
}
int icfa_Init
(){ // read mapmt mapping
icfa_LoadElectronicMap
("eid2pmtxy.map");
//short VMUSB_VME_DGG(unsigned short channel, unsigned short trigger,unsigned short output,
// long delay, unsigned short gate, unsigned short invert, unsigned short latch);
// set DGG 1 to create ADC gate, I1 -> O1 delay:0, gate 0x400 = 12us
WIENER_VMUSB_VME_DGG
(0,1,0,0x0,0x100,0,0);
/*
channel
[in] The DGG channel you wish to modify. Valid values are:
0 For DGG channel A
1 For DGG channel B
trigger
[in] Determines the start of the DGG. Valid Values are:
0 Channel Disabled
1 NIM input 1
2 NIM input 2
3 Event Trigger
4 - End of Event
5 - USB Trigger
6 - Pulser
output
[in] Determines the NIM ouput used for the DGG channel. Valid values are:
0 NIM O1
1 NIM O2
delay
[in] 32 bit word in steps of 12.5ns between trigger and start of gate consisting of
lower 16 bits: Delay_fine
upper 16 bits: Delay_coarse
gate
[in] Sets the length of the gate in units of 12.5ns
invert
[in] Determines whether or not the DGG is inverted. Valid values are:
0 Not inverted
1 Is inverted
latch
[in] Determines whether or not the DGG is latched. Valid values are:
0 Not latched
1 Is latched
*/
// User Devices Source Selector - Read/Write Offset = 16 0x10
// xxusb_register_write(udev, XXUSB_ACTION_REGISTER, 0x2); // USB Trigger
WIENER_VMUSB_VME_DGG
(0,5,0,0xF,0xF,0,0);
//WIENER_VMUSB_VME_Output_settings(0,7,0,0); // nekaj od tega bi moralo delat
WIENER_VMUSB_register_write
(10,0x2); // USB Trigger
return 0;
}
int icfa_Histo
(){ // read mapmt mapping
H2DInit
(hxy
,"minirich","MiniRICH hit map",36,0, 1,36,0, 1);
H2DSetTitleX
(hxy
,"x (channels)");
H2DSetTitleY
(hxy
,"y (channels)");
return 0;
}
int icfa_Draw
(){
if (minirichplothandle
> 0 ) {
DeleteGraphPlot
(p6h
, MINIRICH_GRAPH
, minirichplothandle
, VAL_IMMEDIATE_DRAW
);
minirichplothandle
=0;
}
H2DDraw
(hxy
,p6h
, MINIRICH_GRAPH
, &minirichplothandle
);
return 0;
}
int icfa_Event
(uint32_t *d
, int mode
){
if (!mode
) H2DClear
(hxy
);
for (int i
=0;i
<144*4;i
++){
if (d
[i
]>0) icfa_Fill
(i
,d
[i
]);
}
return 0;
}
int CVICALLBACK daq_icfa
(void *functionData
) {
int neve
;
int threshold
;
icfa_Init
();
GetCtrlVal
(p6h
,MINIRICH_NEVE
, &neve
);
GetCtrlVal
(p6h
,MINIRICH_THR
, &threshold
);
icfa_Histo
();
for (int k
=0;k
<144*4;k
++){
int i
= Random
(0,144*4);
icfa_Fill
(k
,1);
}
icfa_Draw
(hxy
);
return 0;
}
int CVICALLBACK rich_Draw_RingCB
(int panel
, int control
, int event
,
void *callbackData
, int eventData1
, int eventData2
) {
static int oh1
=0;
static int oh2
=0;
switch (event
) {
case EVENT_COMMIT
: {
double min_r
;
double max_r
;
double x
,y
;
GetCtrlVal
(p6h
, MINIRICH_R_MIN
, &min_r
) ;
GetCtrlVal
(p6h
, MINIRICH_R_MAX
, &max_r
) ;
double r1
=min_r
*2.0 ;
double r2
=max_r
*2.0 ;
GetGraphCursor
(p6h
, MINIRICH_GRAPH
, 1, &x
, &y
);
sa02Printf
( "x:%5.2f\ty:%5.2f OH1=%d OH2=%d\n", x
, y
, oh1
, oh2
) ;
if (oh1
> 0 ) {
DeleteGraphPlot
(p6h
, MINIRICH_GRAPH
, oh1
, VAL_IMMEDIATE_DRAW
);
oh1
=0;
}
if (oh2
> 0 ) {
DeleteGraphPlot
(p6h
, MINIRICH_GRAPH
, oh2
, VAL_IMMEDIATE_DRAW
);
oh2
=0;
}
oh1
= PlotOval
(p6h
, MINIRICH_GRAPH
, x
-r1
, y
-r1
, x
+r1
, y
+r1
, VAL_RED
, VAL_TRANSPARENT
);
oh2
= PlotOval
(p6h
, MINIRICH_GRAPH
, x
-r2
, y
-r2
, x
+r2
, y
+r2
, VAL_RED
, VAL_TRANSPARENT
);
break;
}
}
return 0;
}
int CVICALLBACK rich_Histo_ClearCB
(int panel
, int control
, int event
,
void *callbackData
, int eventData1
, int eventData2
) {
switch (event
) {
case EVENT_COMMIT
:
H2DClear
(hxy
);
icfa_Draw
();
break;
}
return 0;
}
int CVICALLBACK icfa_StartCB
(int panel
, int control
, int event
,
void *callbackData
, int eventData1
, int eventData2
) {
switch (event
) {
case EVENT_COMMIT
:
daq_icfa
(NULL
);
break;
}
return 0;
}
extern HColorMap
*colormap
;
int CVICALLBACK SetMaximum
(int panel
, int control
, int event
,
void *callbackData
, int eventData1
, int eventData2
) {
switch (event
) {
case EVENT_COMMIT
:
if (minirichplothandle
> 0 ) DeleteGraphPlot
(panel
, MINIRICH_GRAPH
, minirichplothandle
, VAL_IMMEDIATE_DRAW
);
int histogram
=hxy
;
double min
= H2DGetMin
(histogram
);
double fx
=0;
GetCtrlVal
(p6h
,MINIRICH_MAXZ
, &fx
);
double max
= H2DGetMax
(histogram
)*fx
/100.
;
RangeColors
(min
,max
);
minirichplothandle
= PlotScaledIntensity
(panel
, MINIRICH_GRAPH
,
H2DGetData
(histogram
),
H2DGetNbinsX
(histogram
),
H2DGetNbinsY
(histogram
),
VAL_DOUBLE
,
H2DGetStepY
(histogram
),
H2DGetMinY
(histogram
),
H2DGetStepX
(histogram
),
H2DGetMinX
(histogram
),
colormap
->array
,
colormap
->HiColor
,
colormap
->numberofColors
, 1, 0);
break;
}
return 0;
}