paul scherrer institut 5232 villigen psi rome / 30.6.2004 / matthias schneebeli rome root based...
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 frameworkTRANSCRIPT
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