LCIO A persistency framework for LC detector simulation studies - PowerPoint PPT Presentation

About This Presentation
Title:

LCIO A persistency framework for LC detector simulation studies

Description:

keep Java 'pure' i.e. machine independent. 11. Frank Gaede, DESY IT ... float: chi**2 of fit. float[10]: dEdx (weights and probabilities) TrackerHits: - optional ... – PowerPoint PPT presentation

Number of Views:45
Avg rating:3.0/5.0
Slides: 35
Provided by: DESY1
Category:

less

Transcript and Presenter's Notes

Title: LCIO A persistency framework for LC detector simulation studies


1
LCIO A persistency framework for LC detector
simulation studies
  • Frank Gaede, DESY, IT
  • Linear Collider Simulation Workshop SLAC May
    19-22 2003

2
People
  • Ties Behnke - DESY/SLAC
  • Frank Gaede - DESY
  • Norman Graf - SLAC
  • Tony Johnson - SLAC
  • Paulo Mora de Freitas - IN2P3

3
Outline
  • Introduction
  • Software design
  • API
  • Data model
  • Status
  • Summary

4
Motivation
Java, C, Fortran
Java, C, Fortran Geant3, Geant4
Java, C, Fortran
geometry
5
The Persistency Framework
LCIO
data model
contents
6
LCIO requirements
  • need Java, C and f77 (!) implementation
  • extendable data model for current and future
    simulation studies
  • user code separated from concrete data format
  • -gt need to be flexible for future decisions on
    persistency
  • three general use cases
  • writing data (simulation)
  • reading and updating data (reconstruction)
  • read only access to data (analysis)
  • needed a.s.a.p. -gt keep it simple !

7
API design simulation data
  • Interface for
  • writing data (simulation)
  • read only access (analysis)

tagging interface
untyped collections
user extensions
data entities
8
API implementation
abstract event
abstract io
concrete classes
persistency implementation
9
Extending the base API
minimal interface needed for writing data
decorator classes add convenient methods to data
objects
10
API definition for Java and C
  • use AID Abstract Interface Definition
  • tool from freehep.org (M. Dönzelsmann)
  • used successfully in the AIDA project
  • define interfaces in Java-like language with C
    extensions
  • -gt generates files with Java interfaces
  • -gt generates C header files with pure abstract
    base classes
  • use javadoc for documentation
  • independent implementations in Java and C
  • -gt keep Java pure i.e. machine independent

11
AID example
12
API documentation
API documentation created from java
implementation with javadoc
13
C developer documentation
documentation created from C
implementation with doxygen
14
Example reading data
  • LCReader lcReader
  • LCFactorygetInstance()-gtcreateLCReader(
    )
  • lcReader-gtopen( "myFile" )
  • LCEvent myEvt
  • while( ( myEvt lcReader-gtreadNextEvent() ) !
    0 )
  • cout ltlt " Evt " ltlt myEvt-gtgetEventNumber(
    )
  • ltlt " - " ltlt myEvt-gtgetRunNumber()
  • ltlt " " ltlt myEvt-gtgetDetectorNa
    me()
  • ltlt endl
  • cout ltlt endl
  • lcReader-gtclose()

independent of persistency implementation !
15
Example reading event collections
  • LCEvent evt
  • while( ( evt lcReader-gtreadNextEvent() ) ! 0
    )
  • const LCCollection col evt-gtgetCollection(
    EcalHits)
  • int nHits col-gtgetNumberOfElements()
  • for( int i0 ilt nHits i )
  • const CalorimeterHit hit
  • dynamic_castltconst CalorimeterHitgt

  • ( col-gtgetElementAt( i ) )
  • const float x hit-gtgetPosition()
  • cout ltlt x " ltlt x0 ltlt ", " ltlt x1 ltlt ",
    " ltlt x2
  • ltlt " energy " ltlt
    hit-gtgetEnergy() ltlt endl

untyped collections addressed via name
16
LCReader API
  • direct access via fast skip
  • read next event/run
  • callbacks for modules

17
Example writing data (events)
  • LCWriter lcWrt LCFactorygetInstance()-gtcreat
    eLCWriter()
  • lcWriter-gtopen( "myFile" )
  • for( int i0 iltNEVENT i )
  • LCEventImpl evt new LCEventImpl()
  • evt-gtsetRunNumber( rn )
  • evt-gtsetEventNumber( i )
  • // add collections ...
  • lcWrt-gtwriteEvent( evt )
  • delete evt // C only )
  • lcWriter-gtclose()

use LCIO implementation classes or own classes
for writing !
18
Example writing collections
  • LCCollectionVec trkVec
  • new LCCollectionVec(
    LCIOTRACKERHIT )
  • for(int j0jltNHITSj)
  • TrackerHitImpl hit new TrackerHitImpl
  • hit-gtsetdEdx( 30e-9 )
  • double pos3 1., 2., 3.
  • hit-gtsetPosition( pos )
  • trkVec-gtpush_back( hit )
  • evt-gtaddCollection( (LCCollection) trkVec ,
    TPCHits )
  • // write event

19
LCWriter API
20
LCIO Fortran interface
  • Fortran support for
  • legacy software (e.g. BRAHMS reconstruction)
  • non OO-analyses code (old guys)
  • not a third implementation of the library use
    C-wrapper functions and cfortran.h instead
  • one function for every class member function
  • use integers to store pointers !
  • have factory and delete functions
  • -gt OO-like code in fortran

21
LCIO f77 example
22
Persistency Implementation
  • use SIO Simple Input Output
  • developed at SLAC for NLC simulation
  • already used in hep.lcd framework
  • features
  • on the fly data compression
  • some OO capabilities, e.g. pointers
  • C and Java implementation available

23
The Data Model - Overview
RunHeader
Event
ReconstructedObject
SimHeader
ReconstructedParticle
MCParticle
RecoHeader
Reco
SIM
TrackerHit
Track
CalorimeterHit
Cluster
for details see transperencies after summary
24
Status of LCIO
  • first Java and C implementation (simulation
    data!)
  • integrated into Mokka simulation framework
  • latest release mokka-01-05 writes Hits in
    LCIO
  • f77 prototype
  • demonstrating the design
  • complete integration into simulation software
    chains in the next months
  • US hep.lcd (Java) ? -gt to be discussed at
    this workshop
  • Europe Mokka (C)/BRAHMS-reco(f77)

25
Summary
  • LCIO is a persistency framework for linear
    collider simulation software
  • Java, C and f77 user interface
  • LCIO is currently implemented in simulation
    frameworks
  • hep.lcd
  • Mokka/BRAHMS-reco
  • -gt other groups are invited to join
  • see LCIO homepage for more details
  • http//www-it.desy.de/physics/projects/simsoft/lci
    o/index.html

26
Data model - LCRunHeader
  • block RunHeader
  • int runNumber
  • string detectorName
  • string description
  • string activeSubdetectors
  • gt describes the run setup

27
Data model - LCEventHeader
  • EventHeader
  • int runNumber
  • int evtNumber
  • string detectorName
  • String subdetectorName
  • blockNames
  • string blockName
  • string blockType

28
Data model LCEvent (sim)
  • MCParticle
  • pntr parent
  • pntr secondparent
  • pntr daughters
  • int pdgid
  • int hepevtStatus
  • (0,1,2,3 HepEvt)
  • (201, 202 sim. decay)
  • MCParticle cont.
  • double3 start
  • (production vertex)
  • float3 momentum
  • (at vertex)
  • float energy
  • float charge

29
Data model - LCEvent (sim)
  • TrackerHit
  • string subdetector
  • int hitFlags (detector specific Id, key, etc.)
  • double3 position
  • float dEdx
  • float time
  • pntr MCParticle

30
Data model - LCEvent (sim)
  • CalorimeterHit
  • string subdetector
  • int cellId0
  • int cellId1
  • float energy
  • float3 position optional (file size!)
  • particle contributions
  • pntr MCParticle
  • float energyContribution
  • float time
  • int PDG (of secondary) - optional

31
Data model - LCEvent (reco)
  • OutputHeader
  • int isrFlag
  • float colliderEnergy
  • int flag0 (to be defined)
  • int flag1 (to be defined)
  • int reconstructionProgramTag
  • float Bfield
  • -gt could be combined with global header

32
Data model - LCEvent (reco)
  • Track
  • int tracktype (full reconstr, TPC only, Muon
    only, etc.)
  • float momentum
  • float theta
  • float phi
  • float charge
  • float d0 (Impact Parameter in r-phi)
  • float z0 (Impact Parameter in r-z)
  • float15 cov.matrix
  • float reference point (x, y, z)
  • float chi2 of fit
  • float10 dEdx (weights and probabilities)
  • TrackerHits - optional
  • pntr TrackerHit

33
Data model - LCEvent (reco)
  • Cluster
  • int detector (type of cluster ECAL, HCAL,
    combined)
  • int clustertype (neutral, charged, undefined
    cluster)
  • float energy
  • float3 position (center of cluster x, y, z)
  • float6 errpos (cov. matrix of position)
  • float theta (intrinsic direction theta at
    position)
  • float phi (intrinsic direction phi at position)
  • float3 errdir (cov. matrix of direction)
  • float6 shapeParameters (definition needed)
  • float3 weights (compatible with em., had.,
    muon)
  • CalorimeterHits - optional
  • pntr CalorimeterHit
  • float contribution

34
Data model - LCEvent (reco)
  • ReconstructedParticle
  • int primaryFlag (0 secondary, 1 primary)
  • int ObjectType (charged/ neutral particle)
  • float3 3-Vec (px, py, pz)
  • float energy
  • float10 covariance matrix
  • float charge
  • float3 reference position for 4-vector
  • float5 PID_type (hypotheses for e, g, pi, K,
    p, ...)
  • ReconstructedParticle cont.
  • Tracks
  • pntr Track
  • floatweight
  • Clusters
  • pntr Cluster
  • floatweight
  • MCParticles
  • pntr MCParticle
  • floatweight

have separate MC-link object ?
35
Data model - LCEvent (reco)
  • ReconstructedObject
  • int ObjectType (jet, vertex, ... )
  • float5 4vec (4-vector of object (px, py, pz,
    E, M)
  • float3 reference (position)
  • float15 covariance matrix
  • reconstructedParticle
  • pntr ReconstructedParticle
  • float weight
  • gt generic reconstructed objects, linked to
    reconstructed particles
Write a Comment
User Comments (0)
About PowerShow.com