Data Acquisition with EUDAQ

This page gives some details on test beam data acquisition using EUDAQ software.

See EUDAQ official pages for more information and installation instructions. Online documentation is available here.

Important Points for Running EUDAQ

Important points for running EUDAQ (as experienced by user).

Open ports

Ports must be opened for different parts of the software to communicate. Specifically port 44000 (Run Control)must be open in order to run the software (in addition ports 44001 (Data Collector) and 44002 (Log Collector) may be opened, see 3.1.2 of the manual for more info).

To open ports on Macs with xterm (may be similar for Linux) use ipfw commands (see man ipfw fro more info.):

>sudo ipfw list this lists all port commands

>sudo ipfw add 44000 allow tcp from any to any dst-port 44000 this opens port 44000

Port commands will need to be issued at each session.

Running EUDAQ

Make sure order is correct (kill all running eu programs)):

>cd /YOURPATH/eudaq/bin this is the directory whee all executables should be opened

>./euRun.exe  & opens Run Control window (NB ampersand)

>./euLog.exe  & opens Run Log window (NB ampersand)

Now you can run Data Collector/Producer programs. E.g.

>./TestDataCollector & this allows configuration

Device Configuration Data

Configuration information can be added as a header section to the dat files. This can then be retrieved later in analysis (using EUTelescope).

For example, when using the RCE system, the parameters from the EUDAQ config file are sent to RceOfflineProducer.cc where they are parsed in the OnConfigure function. The offline producer then configures the frontends. The plugin (APIX-CT-ConverterPlugin.cc), used by EUTelescope, gets configured by the RceOfflineProducer in the Initialize function. The BORE function reads a bunch of tags and corresponding values on the first event and sets the configuration of the EUTelescope plugin accordingly.

The header data can be used to check event configuration as well as pass configuration settings to EUTelescope, e.g. device Nrows & Ncols.

Setting Configuration Data

Configuration files can be found in the conf EUDAQ directory i.e. /YOURPATH/eudaq/conf/. File can be edited to contain information about the data in the header section of the data files. Information has the form:

[tile]

tagname = value

Retrieving Configuration Data

Using the EUTelescope plugin (e.g. $EUTELESCOPE/v00-09-02/external/eudaq/tags/v01-00-00/main/src/APIX-CT-ConverterPlugin.cc) the information contended in the header of the data file can be retrieved.

void APIXCTConverterPlugin::Initialize(const Event & source, const Configuration & config) {

int nFrontends = from_string(source.GetTag("nFrontends"), 0); // get number of modules

m_nFrames = from_string(source.GetTag("consecutive_lvl1"), 1);

char tagname[128]; // used to hold tag name

m_feToSensorid.clear();

m_fepos.clear();

m_sensorids.clear();

m_nFeSensor.clear();

for(int i=0;i<nFrontends;i++){ // loop over modules

sprintf(tagname, "OutLink_%d", i); // set tagname

int link=from_string(source.GetTag(tagname), 0); // return value associated with tagname

...

To see all the header data add config.Print() to the Initialize function. If the function is not present in the Configuration.cc file then add a function to the file:

void Configuration::Print() const {

for (map_t::const_iterator i = m_config.begin(); i = m_config.end(); ++i) {

if (i->first = "") {

std::cout << "[" << i->first << "]\n";

}

for (section_t::const_iterator j = i->second.begin(); j = i->second.end(); ++j) {

std::cout << j->first << " = " << j->second << "\n";

}

std::cout << "\n" << std::endl;

}

}

This should give an output of all header data to the screen at the start of the jobsub convertor step when running EUTelescope analysis. It will look like:

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] >>>KGW: config values...

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] GeoID = 262

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] Name = SLAC_2014_May_UK_167x125_500x25_3000e

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"]

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"]

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] [DataCollector]

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"]

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"]

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] [LogCollector]

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] PrintLevel = INFO

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] SaveLevel = EXTRA

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"]

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"]

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] [Producer.MimosaNI]

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] Det = MIMOSA26

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] FPGADownload = 0

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] IDOffset = 0

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] MimosaEn_1 = 1

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] MimosaEn_2 = 1

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] MimosaEn_3 = 1

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] MimosaEn_4 = 1

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] MimosaEn_5 = 1

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] MimosaEn_6 = 1

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] MimosaID_1 = 11

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] MimosaID_2 = 12

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] MimosaID_3 = 19

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] MimosaID_4 = 4

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] MimosaID_5 = 2

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] MimosaID_6 = 20

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] Mode = ZS2

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] NiIPaddr = 172.27.104.32

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] NiVersion = 1

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] NumBoards = 6

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] OneFrame = 0

10:20:32 jobsub.converter(INFO): [ VERBOSE "UNKOWN"] TriggerType = 1

...

-- Kenneth Wraight - 2014-07-31

Comments

Topic revision: r3 - 2014-08-07 - KennyWraight
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2018 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback