Paul Scherrer Institut 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli ROME Root based...

Post on 17-Jan-2018

215 views 0 download

description

Paul Scherrer Institut 5232 Villigen PSI ROME / / Matthias Schneebeli Index Introduction to the ROME Environment o Objects inside ROME Projects o ROMEBuilder o Data Base o Installation Sample of a ROME generated framework

transcript

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

ROME

Root based Object oriented Midas Extension

Presented by Matthias Schneebeli

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

Index

• Introduction to the ROME Environment

o Objects inside ROME Projects

o ROMEBuilder

o Data Base

o Installation

• Sample of a ROME generated framework

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

Introduction to ROME

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

Features• Tool for Event based Data Analysis• Fully Object Oriented• Root based• Full connection to the Midas Environment• Online and Offline• Based on Tasks and Folders for an easy Data and Program Structure• Experiment independent Base Classes• Experiment dependent Classes are generated out of simple XML-Files• The Users write only experiment specific code (physics)• Administrative code is implemented in the generated code• Self Documenting Code• Self Linking Project

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

ObjectsFolders•Objects, where data is stored in•Stores the data of one detector (or sub detector) component

•Hierarchically arranged•Data inside of Folders is structured

Tasks•Tasks are objects, which provides actions

•They make calculations•Store and read data in folders•Fill trees and histograms•Hierarchically arranged. •Task also own histograms

Trees•Data Objects : only written, never read•Used to write data on files

Histograms•Graphical Data Objects : only written•Belong to one Task

Steering Parameters•Task steering•Framework steering

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

Interconnections

Folders

TasksTasksTasksFill

Read

TreesTreesTreesRead

Flag

HistogramsHistogramsHistograms

HistogramsHistogramsHistograms

HistogramsHistogramsHistograms

Fill

Fill

Disk (Output)Write (ROOT)

Disk (Input) Read (any

Format)

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

ADC BankValue 1Value 2

...

DMND Bank

Value 1Value 2

...

From Banks to Objects

PMT FolderADCTDC

XXXx

PMT FolderADCTDC

XXXx

PMT FolderADCTDC

HV demandHV measured

HV currentScaler

Readout values of a sub-detectors

Sub-detector with all it’s readout values

TDC BankValue 1Value 2

...

SCLR BankValue 1Value 2

...

MSRD BankValue 1Value 2

...

CRNT BankValue 1Value 2

...

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

ADCcountscountscountscounts

TDCheader

chn./valuechn./value

Pedestal subtractionCounts -> Charge

Decoding (chn./crate/…

-> number)Offset correction

MappingADC/TDC -> counter

Rawdata

*.root

Decodeddata

*.root

Objectdata

*.root

Optional analysis ofdecoded data

Highlevel

analysis

Task Task TaskBanks ROME folder

ROME folder

Proposed Analysis Structure

ADCchargechargechargecharge

TDCtimetimetimetime

HitchargetimeHV

scaler

HitchargetimeHV

scaler

HitchargetimeHV

scaler

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

Advantages of Proposed Analysis Structure

•High level analysis accesses data in objects–no knowledge of cable mapping or ADC/TDC decoding necessary

•ADC/TDC decoding is decoupled from mapping and high level analysis–If ADC/TDC module is changed, only decoding task needs to be changed–If counter is reconnected to different ADC/TDC,

only mapping task needs to be changed

•Data can be stored/retrieved between different tasks in ROOT format–Analyze raw data–Analyze decoded data–Analyze object data

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

The ROME Environment• Experiment independent ‘ROME’-Classes

o Base classes for the generated, experiment dependent classes. • ROMEBuilder

o Builds all experiment dependent classes out of simple XML Files.o XML files describe Tasks, Folders, Trees, Histos, Steering Parameters and

Midas Banks.o Links the generated project.o Documents the generated project.

ROME classesROME classesROME classes

XML File

ROME classesROME classesExp. classes

ROMEBuilder Executable

Documentation

Project

ROME Environment

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

XML Project Definition File<Experiment Shortcut>

<Author Name=“Author”/><Programname Name=“Program Name”/><Folder>

Folder definitions…</Folder><Task>

Task definitions…</Task><Trees>

Tree definitions…</Trees><GeneralSteeringParameters>

Steering Parameters definitions…</GeneralSteeringParameters><MidasBanks>

Midas Bank definitions…</MidasBanks>

</Experiment Shortcut>

Folder Classes

Analyzer Class

Task Classes

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

Object Arrays[Field Type 1] Get[Folder Name]At(int index)->Get[Field 1]();void Get[Folder Name]At(int index)->Set[Field 1]([Field Type 1] value);

Single Objects[Field Type 1] Get[Folder Name]Object()->Get[Field 1]();void Get[Folder Name]Object()->Set[Field 1]([Field Type 1] value);

Folders<Experiment Shortcut>

<Folder><SubFolder FolderName=“Folder Name" FolderTitle="Folder Title“ Array=“yes/[no]” DataBase=“yes/[no]”>

<Author Name=“Author”/><Version Number=“Version Number”/><Description Text=“Class Description”/><Fields>

<Field Name 1 Type=“Field Type 1” Init=“Init Value 1” Comment=“Comment 1” DataBasePath=“DB-Path”/>

</Fields></SubFolder>

</Folder></Experiment Shortcut>

XML File

Code

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

<Experiment Shortcut><Task>

<SubTask Name=“Task Name”><Histos>

<Histo Name Type=“Variable Type” ArraySize=“Array Size” Title=“Title” FolderName=”Histo Folder Name” FolderTitle=”Histo Folder Title” NumberOfBinsX=“# of X bins” XMin=“X min” XMax=“X max”/>

</Histos></SubTask>

</Task></Experiment Shortcut>

XML File

void [Experiment Shortcut]T[Task Name]::Init() { }void [Experiment Shortcut]T[Task Name]::BeginOfRun() { }void [Experiment Shortcut]T[Task Name]::Event() { }void [Experiment Shortcut]T[Task Name]::EndOfRun() { }void [Experiment Shortcut]T[Task Name]::Terminate() { }

Fill[Histo Name](double value,double weight)Draw[Histo Name]()Get[Histo Name]Handle()

Fill[Histo Name]At(int index,double value,double weight)Draw[Histo Name]At(int index)Get[Histo Name]HandleAt(int index)

Code

Tasks

Histogram Arrays

Single Histograms

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

XML Editors

• XMLSpy- Table Format- Commercial Software (50 Euro)- Only for Windows

• EditiX- Nice Tree Format- Commercial Software (30 Euro)- Windows, Linux, Mac

• ROME works with any Editor

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

Benefit of a generated Framework• Consistent Program Structure

o All classes look the same

o Better readability

• Less Handwritten Code

o Code of a class is written once (in the builder) and reproduced many times

• Easier Maintenance

o Modification are done once (in the builder) and then available in the whole framework

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

Installation• Installation of ROOT• Installation of LIBXML2 (only Linux)• Installation of MIDAS (only online,

Linux)

[~]$ setenv ROMESYS ~/ROME[~]$ setenv PATH $ROMESYS/bin:$PATH[~]$ cvs checkout ROME[~/ROME]$ make[../MyExp]$ romebuilder myExp.xml –v [-o Output Path][~/MyExp]$ progname

Linux

• CVS checkout of ROME• Define environment variable

ROMESYS• Define environment variable ‘Path’

C:\> set ROMESYS=C:/ROMEC:\> set Path=%Path%;%ROMESYS%/binC:\> cvs checkout ROMEC:\ROME> nmake –f Makefile.winC:\MyExp> ROMEBuilder.exe myExp.xml –v [–o Output Path]C:\MyExp> progname

Windows

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

Configuration File

• XML-File for steering the program

<Configuration><Modes AnalyzingMode=“online” InputDataFormat=“root”/><RunNumbers=“1001,1002”/><Tasks>

<Task1 Active=“yes”/><Task2 Active=“no”/>

</Tasks><Trees>

<Tree1 Read=“yes” Write=“no” /><Tree2 Read=“no” Write=“yes” />

</Trees><GeneralSteeringParameters>

<ValueName>100</ValueName></GeneralSteeringParameters>

</Configuration>

XML File

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

Sample Experiment

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

Sample Overview

• 3 Folderso PMTDatao Calib (Data base)o PMTInfo (Data base)

• 2 Taskso ReadMidaso ADCCalib

• 1 Midas Banko ADC0

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

XML Configuration File I<XYZ>

<Folder><SubFolder FolderName="PMTData" Array="257">

<Fields><ADC Type="Float_t" Initialisation="0" Comment="// ADC Data"/>

</Fields></SubFolder><SubFolder FolderName="Calib" Array="257" DataBase="yes">

<Fields><ADCPedestal Type="Float_t" Initialisation="0" DataBasePath=“/Calib/Ped”/>

</Fields></SubFolder><SubFolder FolderName="PMTInfo" Array="257" DataBase="yes">

<Fields><PMID Type="Int_t" Initialisation="0" DataBasePath=“/Info/PMID”/><ADCID Type="Int_t" Initialisation="0" DataBasePath=“/Info/ADCID”/>

</Fields></SubFolder>

</Folder>

sample.xml

Paul Scherrer Institut • 5232 Villigen PSI ROME / 11.5.2004 / Matthias Schneebeli

XML Configuration File II

<Task><SubTask Name="ReadMidas“/><SubTask Name="ADCCalib">

<Histos><ADCHisto Type="TH1F" ArraySize="257" FolderName="adc" Title="ADC"

NumberOfBinsX=“500" XMin="0" XMax=“500"/></Histos>

</SubTask></Task><MidasBanks>

<ADC0 Type="unsigned short“/></MidasBanks>

</XYZ>

sample.xml

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

Read Midas Task

void XYZTReadMidas::Event(){ for (int i=0;i<257;i++) { int iadc = fAnalyzer->GetPMTInfoAt(i)->GetADCID();

Float_t adcValue = fAnalyzer->GetADC0BankAt(iadc); fAnalyzer->GetPMTDataAt(i)->SetADC(adcValue); }}

XYZTReadMidas.cpp

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

ADC Calibration Task

void XYZTADCCalib::Event(){ for (int i=0;i<257;i++) { float pmtData = fAnalyzer->GetPMTDataAt(i)->GetADC(); float pedestal = fAnalyzer->GetCalibAt(i)->GetADCPedestal(); FillADCHistoAt(i,pmtData - pedestal); }}void XYZTADCCalib::EndOfRun(){ for (int i=0;i<257;i++) { DrawADCHistoAt(i);

}}

XYZTADCCalib.cpp

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

Run ProgramC:\Sample> ROMEBuilder.exe sample.xml –v link messagesC:\Sample> XYZSample 12005 events processed Task 'ReadMidas' : run time = 00:00:00 Task 'ADCCalib' : run time = 00:00:02

Windows

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

The MEG Experiment

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

MEG Experiment

CMDC TC

CMScaler

Scaler

CMHV

HV

EnvironmentEnv

Trigger

Trigger

MEG

CMHit

Hit

Hit Tree

CMRefCMPMTData

Ref

PMT Data Tree

PMT Data

CMPMTInfo

Info

Data base

CMCalib

Calib

Data base

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

Referencies

CMHit

Hit

CMPMTInfo

Info

CMCalib

Calib

CMScaler

Scaler

CMHV

HV

EnvironmentEnv

Trigger

Trigger

MEG

PMT Data

CMPMTData

ADC0ADC1TDCInfo

CMRef Scaler HV Env Trigger

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

Detailed Introduction to ROME

Paul Scherrer Institut • 5232 Villigen PSI ROME / 30.6.2004 / Matthias Schneebeli

ROME Classes

• ROMEAnalyzer

o Main Class

o Provides general steering methods

• ROMEEventLoop

o Implements the event loop

• ROMETask

• ROMETree

• ROMERunTable