Difference between revisions of "JLab discriminator"

From GlueXWiki
Jump to: navigation, search
(Scalers readout preliminary driver)
m (Scalers readout preliminary driver)
Line 40: Line 40:
 
== Scalers readout preliminary driver ==
 
== Scalers readout preliminary driver ==
  
The current scheme of data flow is the following (from top to down):
+
=== The current scheme of data flow is the following (from top to down): ===
  
 
{| style="color:green; background-color:#ffffcc;" cellpadding="10" cellspacing="0" border="1px"
 
{| style="color:green; background-color:#ffffcc;" cellpadding="10" cellspacing="0" border="1px"
Line 47: Line 47:
 
| style="border-style: solid; border-width: 1px 1px 1px 1px" | dsc2.c <br/ > mutex-ed access to the hardware
 
| style="border-style: solid; border-width: 1px 1px 1px 1px" | dsc2.c <br/ > mutex-ed access to the hardware
 
|-
 
|-
| style="border-style: solid; border-width: 1px 1px 1px 1px" | JLabDiscr.c::JLabDiscrReadTask() <br/ > a thread to poll scalers every second <br/ > and stores them in the memory
+
| style="border-style: solid; border-width: 1px 1px 1px 1px" | JLabDiscr.c::JLabDiscrReadTask() <br/ > a separate thread to poll scalers every <br/ > second and stores them in the memory
 
|-
 
|-
 
|}
 
|}
 
  
 
{| style="color:blue; background-color:#ffffcc;" cellpadding="10" cellspacing="0" border="1px"
 
{| style="color:blue; background-color:#ffffcc;" cellpadding="10" cellspacing="0" border="1px"
Line 60: Line 59:
 
|}
 
|}
  
Other supplemental files are:
+
=== Other supplemental files are: ===
 
* JLabDiscr_subMain.cpp -- The standard main program
 
* JLabDiscr_subMain.cpp -- The standard main program
 
* JLabDiscr_subConfig.c -- hooks for EPICS
 
* JLabDiscr_subConfig.c -- hooks for EPICS
 
* JLabDiscr_subConfig.dbd, JLabDiscr_subrecord.dbd -- DBD files
 
* JLabDiscr_subConfig.dbd, JLabDiscr_subrecord.dbd -- DBD files
 
* dbJLabDiscr.db -- DB file
 
* dbJLabDiscr.db -- DB file
 +
 +
=== The output ===
 +
 +
The output is accessible via PV hallddisc1:JLabDiscr. It has a type of aSubRecord.
 +
Its INPA field setups the card number (Will be configured once during IOC initilaztion).
 +
The VALA is an array of 16 contains scalers of gated triggers.
 +
The VALB is an array of 16 contains scalers of gated TDC values.
 +
The VALC is an array of 16 contains scalers of ungated triggers.
 +
The VALD is an array of 16 contains scalers of ungated TDC values.
 +
The VALE is a signle scalers of gated reference clock.
 +
The VALF is a signle scalers of ungated reference clock.

Revision as of 15:41, 6 December 2011

There is a Hall-B page for JLab discriminator

Manuals

Manual for 16-Channel Discriminator/Scaler VME Module (by J.Proffit), 20-Nov-2002, in (pdf)
Manual for New 16-Channel Discriminator/Scaler VME Module (draft by Ben Raydo), 6-Mar-2009, in (pdf)
Manual for New 16-Channel Discriminator/Scaler VME Module (rev.B by Ben Raydo), 28-May-2010, in (pdf)
Manual for New 16-Channel Discriminator/Scaler VME Module (rev.C by Ben Raydo), 11-Feb-2011, in (pdf)

Example Program

#include "dsc2.h"
int main(){
 vmeOpenDefaultWindows(); /* Map the VME bus memory (For Linux only.). */
 dsc2Init(0xe00000,0,1);  /* Base memory: Only last 2 HW switches are relevant, 
                             the rest are lost due to shift of address. */
                          /* Memory size per board. */
                          /* Number of boards. */
 dsc2Status(0,0);         /* Board number and flag which is not used. */
 dsc2PrintScalers(0,0xff);/* Board number and printing option */
 return(0);
}

Linux VME support

Brian Moffit from CODA group has setup a directory for software for Intel based VME controllers running Linux. README there is a good introduction to the subject.

/site/coda/2.6.1/extensions/linuxvme

RPMs for VME controllers running Linux located in the directory

/site/coda/2.6.1/extensions/linuxvme/RPMS

Available files are:

gefvme-kmod-common-4.1-0.i386.rpm (Development files)
kmod-gefvme-PAE*.rpm (Kernel module)

To install the development RPM without kernel module will require the --nodeps option

rpm -i --nodeps gefvme-kmod-common-4.1-0.i386.rpm

Scalers readout preliminary driver

The current scheme of data flow is the following (from top to down):

VME bus
dsc2.c
mutex-ed access to the hardware
JLabDiscr.c::JLabDiscrReadTask()
a separate thread to poll scalers every
second and stores them in the memory
EPICS Scan Task
will periodically start a record processing
JLabDiscr_subrecord.c
will copy from memory and push to CA server
EPICS CA Server will broardcast

Other supplemental files are:

  • JLabDiscr_subMain.cpp -- The standard main program
  • JLabDiscr_subConfig.c -- hooks for EPICS
  • JLabDiscr_subConfig.dbd, JLabDiscr_subrecord.dbd -- DBD files
  • dbJLabDiscr.db -- DB file

The output

The output is accessible via PV hallddisc1:JLabDiscr. It has a type of aSubRecord.

Its INPA field setups the card number (Will be configured once during IOC initilaztion).
The VALA is an array of 16 contains scalers of gated triggers.
The VALB is an array of 16 contains scalers of gated TDC values.
The VALC is an array of 16 contains scalers of ungated triggers.
The VALD is an array of 16 contains scalers of ungated TDC values.
The VALE is a signle scalers of gated reference clock.
The VALF is a signle scalers of ungated reference clock.