the gammaware package olivier stézowski (on behalf of the data analysis team) data analysis...

27
The GammaWare package Olivier Stézowski (on behalf of the Data Analysis Team) Data Analysis Workshop, Legnaro, November 9-10 2009 (including ADF)

Upload: claude-pope

Post on 28-Dec-2015

212 views

Category:

Documents


0 download

TRANSCRIPT

The GammaWare package

Olivier Stézowski(on behalf of the Data Analysis

Team)Data Analysis Workshop, Legnaro,

November 9-10 2009

(including ADF)

Evolution of the package

2004 2009

Protoype:Simu from LS

Organisation:•Serveur SVN•Doc•Bugtracker…

ADF Library

Core library / tools /Interface

to other frameworks+ …

DAQ

Interface GEANT4generators

« Collaborative development » !!

Framework : collaborative work• Work on the same files

(subversion)• Developers / users – tags, releases• Documentation !• Interaction (bug tracker, ticket system)• Design proposals : design before writing• …

Not a huge success … so far …

Ne

w !

GammaWare current situation

Design : avoid (circular) dependancies between libraries

Add-ons for ROOT

DAQ

(PSA, Tracking not in but could be plugged)

« Narval terminology »

Producer

Filter

Consumer

C/C++ code loaded in Narval (ADA)

(single library)

Distributed system : many computers connected by the network

A topology : chain of analysis

« ADF view » : Blocks of Frames

Key, Frame have a name, a type and version numbers

Ex: « agata » , « data:psa », (1,0)

Strongly processed data flow likely to change over the years (version !!)

DataFrame

ConfigurationFrame

CompositeFrame : made of three DataFrame

An .adf data flow or file

Ag

ata

Keys

Fra

mes

Full definition of the DataFlow !!

agata0xFA0000000xFF000000 conf0xFA0002000xFF000F00conf:global0xFA0002000xFFFFFFFF conf:crystal0xFA0102010xFFFFFFFF conf:psa0xFA0102020xFFFFFFFF conf:ranc00xFA0102A00xFFFFFFFF conf:ranc10xFA0102A10xFFFFFFFF conf:ranc20xFA0102A20xFFFFFFFF data0xFA0001000xFF000F00 data:crystal0xFA0101010xFFFFFFFFdata:ccrystal0xFA0101110xFFFFFFFF data:psa0xFA0101020xFFFFFFFF event:data:psa0xFA0101030xFFFFFFFF event:data0xFA0101040xFFFFFFFF data:tracked0xFA0101050xFFFFFFFFdata:ranc00xFA0101A00xFFFFFFFF data:ranc10xFA0101A10xFFFFFFFF data:ranc20xFA0101A20xFFFFFFFF meta0xFA0011000xFF00FF00meta:vertex0xFA0111000xFFFFFFFF

agata0xFA000000 conf

0xFA000200conf:global0xFA000200data

0xFA000100data:crystal0xFA010100data:ccrystal0xFA010111data:psa

0xFA010102event:data:psa0xFA010103event:data0xFA010104data:tracked0xFA010105data:ranc00xFA0101A0meta

0xFA001100meta:vertex0xFA011100

Agata Data Flow @ different stages

Actions on an Agata Data FlowComplex Data Flow BUT an algorithm just needs the Frames it

could processed !! DFTrigger

Algorithm

DataFlow Reader … (reconfiguration)

Trigger

Frames

Frames

Ow

ned b

y T

rigger

Fram

e ar

e sh

ared

obj

ects

!!

Actions on an Agata Data FlowDefinition of a DFTrigger

AgataFrameTrigger *t = new AgataFrameTrigger(“OnTrackAndAncillary“);

SharedFP *sfp_event = t->Add(”event:data” …, IsConsumed , … );

SharedFP *sfp_track = t->Add(”data:tracked”, …, IsConsumed , … );

SharedFP *sfp_anc0 = t->Add(”data:ranc0”, …, IsConsumed , … );

t->SetOutputFrame( … );

Ne

w !

Reconfiguration of the Data Flow, pointers likely to be deleted :

SharedFP are safeA given version of an algorithm works with some versions of Frames :

controled with SharedFP virtual void SetKeyChangeFunction( … )virtual void SetFrameChangeFunction( … )

The DataInterface

Communications Narval - ADF

ActorInput Data Output Data

Log GRU

Set/GetGlobalParameters()

Algo_path

Watchers

messages spectra

conf files

Output Data

from time to time ..

Online / offline !

Emulators

Simple topology could be emulated without Narval (see in gammaware) :

src/adf/dev/test0.1.csrc/adf/dev/test0.2.cdemos/adf/Emulator.C

+ … others (Joa)

c programs

ROOT macros

Watchers on a Trigger

Watcher, WatcherWithTags :Base classes for a watcher

FrameDispacher (consumer) :Dispatchs a Frame (trigger) to Watchers

WatcherClient (emulator) :Collects a data block and sends it to a

FameDispatcher

class MyWatcher : public Watcher{… Watcher( … );… virtual void Exec( … );…}

Declaration of spectra !

Fill them !

Dump Frames on files

Check Keys

Signals from the crystals

Fold, singles and gamma-gamma

matrix

Rate in Crystals (core/segments)

WatcherClients (FrameDispacher)

From the just finished experiment

Watcher on any Frame (AgataKey)

From the just finished experiment

Watcher on event:data:psa (RateDisplay)

From the just finished experiment

From the just finished experiment

Doppler correction available (VertexFrame) …. to be implemented …

Watcher on data:tracked (Coinc2D)

From the just finished experiment

Watcher ShowSignals on almost real online data !!!

From the just finished experiment

Watcher TrackDisplay on almost real online data !!!

Other parts of the GammaWare

• SpectrumPlayer• LevelSchemePlayer• Graphical Fit• Spectra converters• All ROOT facilities for free !

• γ-γ interactive gating … (to be revisited)

Conclusions & perspectives

• More stabilities• More tests/benchmarks• More documentations• New « fast » features (« anti-trigger »)• LevelShemePlayer • New watchers ?

• What else ?

• Long term evolutions ?

Postdoc in Lyon

Coinc2D::Coinc2D() : TrackedWatcher("Coinc2D","Check singles and build a gamma-gamma matrix"),fSingles(0x0),fSinglesDoppler(0x0),fFold(0x0),fGxG(0x0)

{fSingles = new TH1F("Singles","Singles",6000,0,6000);AddToPool(fSingles);fSinglesDoppler = new TH1F("SinglesDoppler","Singles with Doppler correction",6000,0,6000);TagOn(fSinglesDoppler);AddToPool(fSinglesDoppler);fFold = new TH1F("Fold","Fold distributions",10,0,10);TagOn(fFold);AddToPool(fFold);fGxG = new TH2F("GxG","Gamma Gamma matrix",2000,0,1000,2000,0,1000);AddToPool(fGxG);

}void Coinc2D::Exec(Option_t */*option*/) {

const GammaTrackedInterface *data = GetCstDataPointer<GammaTrackedInterface>(fFrame);

// now fill histogramsUInt_t fold = data->GetNbGamma();fFold->Fill( fold );for (UShort_t i = 0u; i < fold; i++) {

const TrackedHit *gamma1 = data->GetGamma(i); Double_t edc1 = VertexWatcher::theCurrentVertex()->DopplerCorrection(gamma1);fSingles->Fill(gamma1->GetE());fSinglesDoppler->Fill(edc1);for (UShort_t j = i+1u; j < fold; j++) {

const TrackedHit *gamma2 = data->GetGamma(j); Double_t edc2 = VertexWatcher::theCurrentVertex()-

>DopplerCorrection(gamma2);fGxG->Fill(edc1,edc2); fGxG->Fill(edc2,edc1);

}}

}

ConfAgent and ADF.conf#////ADF::ConfAgent_beg//// Agata 1 Init# `Endian: kLittle#KeyFactory: DefaultKeyFactory: Agata#FrameFactory: Agata# PrimaryKey: Default FS 0 1 #AutoConf: Agata conf:global 2 0 Agata conf:global 0 0##////ADF::ConfAgent_end//// #////ADF::AgataKeyFactory_beg//// InitAgata 0xFA0000000xFF000000Conf 0xFA0002000xFF00FF00conf:global 0xFA0002000xFFFFFFFF conf:crysta l0xFA0102010xFFFFFFFF conf:psa 0xFA0102020xFFFFFFFF Data 0xFA0100000xFFFF0000 data:crystal 0xFA0101010xFFFFFFFF data:psa 0xFA0101020xFFFFFFFF event:data:psa 0xFA0101030xFFFFFFFF event:data 0xFA0101040xFFFFFFFFdata:tracked 0xFA0101050xFFFFFFFF##////ADF::AgataKeyFactory_end////#

# Current Frames going through the data flow###Frame: Agata agata 2 0 Agata agata 0 0Frame: Agata data:tracked 2 0 Agata data:tracked 65000 1Frame: Agata data:crystal 2 0 Agata data:crystal 65000 0

+

One in the distributionOne in the algo path

+ Full definition of the Keys(for the Keyfactory)