21
Geant4 Collaboration 1 Persistency Persistency M7 Unit 3

Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Embed Size (px)

Citation preview

Page 1: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 1

PersistencyPersistency

M7 Unit 3

Page 2: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 2

Category RequirementsCategory Requirements

Geant4 Persistency makes run, event, hits, digits and geometry information be persistent, to be read back later by user programs

Geant4 shall make use of industrial standard ODMG C++ binding and HepODBMS as persistency interface

Kernel part of Geant4 should not be affected by the choice of persistency mechanism (Geant4 should be able to run with or without persistency mechanism)

Page 3: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 3

What is “object persistency” ?What is “object persistency” ?

Persistent object lives beyond an application process, may be accessed by other processes.

When an object is “deactivated”, state of the object are stored into the database system. Once “activated”, the state information of the object is read back from the database.

Object Database

Constructor Destructor

Time

File

Application

ApplicationHeap

Application

Page 4: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 4

What is ODMG ?What is ODMG ?

Object Database Management Group

a non-profit consortium of vendors and interested parties who collaborate to develop and promote standards for object database management systems (ODBMS). http://www.odmg.org/

ODBMS Standard Documents ODMG 2.0 released in 1997 Object Model Object Definition Language Object Query Language Language Bindings to C++, SmallTalk, Java

Page 5: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 5

Declarations in ODL

Application Source

Declaration Preprocessor

Program Compiler

Linker

ODBMS Runtime

Application Binary

Running ApplicationDatabase

metadata

data access

C++ Binding of ODMGC++ Binding of ODMG

Design persistent class using ODL (Object Definition Language)

class G4PEvent : public HepPersObj

{ public: persistent-capable base class

G4PEvent(); :

private:

G4Pint eventID; persistent-capable type :

}

Compile ODL files (schema) to schema metadata, C++ header files, wrapper C++ source code.

ex. Objectivity/DB:ooddlx preprocessor processes *.ddl files into *.hh, *_ref.hh, *_ddl.cc files, and stores schema metadata into a federated database file.

Page 6: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 6

What is HepODBMS ?What is HepODBMS ?

C++ class library that provides a simplified and consistent interface to underlying ODMG-compliant Object Database Management System

Current implementation is based on Objectivity/DB Goals:

an insulation layer to minimize dependencies on a given database vendor or release.

high level base classes that encapsulate features such as clustering and locking strategies, database session

transaction control, event collections, selection predicates, tagDB access and calibration

whilst not introducing any significant performance or storage overhead.

See Also:http://wwwinfo.cern.ch/asd/lhc++/HepODBMS/user-guide/H1Introduction.html

Page 7: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 7

Persistency in Geant4Persistency in Geant4

“Parallel World” approachData members of transient and persistent objects are copied by Store( ) and Retrieve( )

G4 kernel objects have corresponding “P” objects in G4PersistencyG4Run G4PRunG4Event G4PEventG4Hit G4PHit : :

G4 kernel objects have corresponding “P” objects in G4PersistencyG4Run G4PRunG4Event G4PEventG4Hit G4PHit : :

Object Database

Constructor

Destructor

Time

File

G4Application

PersistentObject

G4Application

TransientObject

G4Persistency

G4Kernel

Store( )Retrieve( ) Inherits from HepPersObj

in HepODBMS

Page 8: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 8

Persistency in Geant4 (2)Persistency in Geant4 (2)

Top Level Class Diagram

G4RunManager

G4PersistencyMessenger

G4UImessenger

G4PersistencyManager

G4VPersistencyManager

G4TransactionManager

HepDbApplication

G4PersistentSubDbMan

G4PersistentSubMan

G4PersistentEventMan

Transient G4 objects are “stored” by G4RunManager thru abstract interface of G4VPersistencyManager.

Database file names are given via G4PerrsistencyMessenger.

Interface to HepODBMS transactions are “wrapped” at G4TransactionManager.

Data member copy of transient and persistent objects are handled by G4PersistentEventMan, G4PersistentHitMan, etc.

Transient G4 objects are “stored” by G4RunManager thru abstract interface of G4VPersistencyManager.

Database file names are given via G4PerrsistencyMessenger.

Interface to HepODBMS transactions are “wrapped” at G4TransactionManager.

Data member copy of transient and persistent objects are handled by G4PersistentEventMan, G4PersistentHitMan, etc.

Page 9: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 9

How to design your own persistent How to design your own persistent objects in ODBMSobjects in ODBMS

Design persistent-capable classes

Design the object clustering

Design the access patterns

Design the transaction scenario

Page 10: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 10

How to design your own persistent objects in ODBMS:How to design your own persistent objects in ODBMS:Design persistent-capable classesDesign persistent-capable classes

Create ODL (DDL) files (similar to C++ header files) Inherit “persistency” from HepPersObj Use ODMG persitent basic types such as d_Double, d_Float

In Geant4, basic types are casted into G4Pint, G4Pdoulbe etc in G4PersistentTypes.hh

Use HepRef() macro as smart pointers of persistent objects in run timeHepRef(G4PEvent) anEvt;

anEvt = new G4PEvent(….);

Use d_Ref<> template for embedded persistent association in ODLclass G4PEvent : public HepPersObj

{ …

d_Ref<G4PPrimaryVertex> thePrimaryVertex;

}

Use d_Varray<> template for variable length array

Page 11: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 11

How to design your own persistent objects in ODBMS:How to design your own persistent objects in ODBMS:Design persistent-capable classes - Design persistent-capable classes - G4PEvent.ddlG4PEvent.ddl

class G4PEvent

: public HepPersObj

{

public:

G4PEvent();

G4PEvent(const G4Event *evt);

G4PEvent(const G4Event *evt, HepRef(G4PHCofThisEvent) pHC, HepRef(G4PDCofThisEvent) pDC);

~G4PEvent();

private:

G4Pint eventID;

d_Ref<G4PPrimaryVertex> thePrimaryVertex;

G4Pint numberOfPrimaryVertex;

d_Ref<G4PHCofThisEvent> HC;

d_Ref<G4PDCofThisEvent> DC;

public:

void SetEventID(const G4Event *evt);

inline G4int GetEventID() const { return eventID; }

inline void AddPrimaryVertex(HepRef(G4PPrimaryVertex) aPrimaryVertex) {…}

inline G4int GetNumberOfPrimaryVertex() const { return numberOfPrimaryVertex; }

…<skipped>...

};

Inherit persistency frompersistent base class

Inherit persistency frompersistent base class

Smart pointers to other persistent

objects in run time

Smart pointers to other persistent

objects in run time

Persistentbase types

Persistentbase types

Embedded associationto other

persistent objects

Embedded associationto other

persistent objects

Page 12: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 12

How to design your own persistent objects in ODBMS:How to design your own persistent objects in ODBMS:Design the object clusteringDesign the object clustering

Organize a group of classes which will be accessed simultaneously Use “new” operator with clustering directive: eg. HepClusteringHint

Use “new” operator with neighboring object eg. In the constructor of G4PEvent::G4PEvent(...)

….aVertex = new (ooThis()) G4PPrimaryVertex(…);….

Runs

FDDB System

Events Geometry

Bootfile

exampleFD

G4PEventG4PEvent

G4PPrimaryVertexG4PPrimaryVertex

G4PPrimaryParticleG4PPrimaryParticle

G4PEventG4PEvent

G4PPrimaryVertexG4PPrimaryVertex

G4PPrimaryParticleG4PPrimaryParticle

G4PEventG4PEvent

G4PPrimaryVertexG4PPrimaryVertex

G4PPrimaryParticleG4PPrimaryParticle

aVertex will be stored nearthis G4PEvent object

aVertex will be stored nearthis G4PEvent object

Page 13: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 13

How to design your own persistent objects in ODBMS:How to design your own persistent objects in ODBMS:Design the access patternsDesign the access patterns

Decide the primary object(s) to be picked up from the database Make a loop of iteration for the primary object

ooItr(G4PEvent) pevent_iterator;

pevent_iterator.scan(container);

while (pevent_iterator.next())

{

// loop for all G4PEvent’s in this container…

int evt_id = pevent_iterator->GetEventID();

...

}

Follow the association for the related objectsfor ( int i = 0; i < n_pvertex; i++ ) // Loop for all primary vertex in this event

{

HepRef(G4PPrimaryVertex) pvertex = pevent_iterator->GetPrimaryVertex(i);

cout << " No. of particle in the primary vertex: "

<< pvertex->GetNumberOfParticle() << G4endl;

}

Iterator forG4PEvent

Iterator forG4PEvent

Using theIterator

Using theIterator

Using the(1st) G4PEvent

Using the(1st) G4PEvent

Returns a smart pointer ofthe G4PPrimaryVertex

Returns a smart pointer ofthe G4PPrimaryVertex

Page 14: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 14

How to design your own persistent objects in ODBMS:How to design your own persistent objects in ODBMS:Design the transaction scenarioDesign the transaction scenario

Access to any persistent objects should be a part of “transaction” HepDbApplication::Init() HepDbApplication::startRead() HepDbApplication::startUpdate() HepDbApplication::commit() HepDbApplication::abort()

HepODBMS with Objectivity/DB has a choice of selecting “database” and “container”

HepDbApplication::db(dbName) HepDbApplication::container(containerName)

Page 15: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 15

How to design your own persistent objects in ODBMS:How to design your own persistent objects in ODBMS:Design the transaction scenario - Design the transaction scenario - readDB.cppreadDB.cpp

HepDbApplication* dbApp = new HepDbApplication(name);

…...

dbApp->Init(); // initialise the db session

dbApp->startRead(); // start a read transaction

HepDatabaseRef myDb = dbApp->db("Events"); // select “Events” database

HepContainerRef cont = dbApp->container("EventContainer"); // select “EventContainer” container

ooItr(G4PEvent) pevent_iterator; // initialize iterator for G4PEvent

pevent_iterator.scan(cont);

while (pevent_iterator.next()) // Loop for all G4PEvent

{

int evt_id = pevent_iterator->GetEventID(); // access this G4PEvent

int n_pvertex = pevent_iterator->GetNumberOfPrimaryVertex();

…...

} // End of loop over events

dbApp->commit(); // finish this read transaction

Page 16: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 16

G4PEvent

G4PHCofThisEvent

G4PPrimaryVertexG4PPrimaryParticle

G4PVHitsCollection

G4PVHit

userCalorHitsCollectionuserCalorHit

G4PDCofThisEvent

G4PVDigitsCollection

G4PVDigit

userCalorDigitsCollectionuserCalorDigit

Persistent ObjectsPersistent Objects in “Events” Database in “Events” Database

Page 17: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 17

Example Database ConfigurationExample Database Configuration

Runs

FDDB System

Events Geometry

Bootfile

exampleFD

PersistentEx01/02 readDB hits2digits

Lock Server

FDDB SystemBootfile

exampleSchema

“gmake newfd”

oochecklsoolockserverookilllsoodump

$OO_FD_BOOT

Page 18: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 18

How to build G4 Persistent LibrariesHow to build G4 Persistent Libraries Define variables

$G4USE_HEPODBMS = 1 $G4EXAMPLE_FDID

Define HepODBMS variables $HEP_ODBMS_DIR $HEP_ODBMS_INCLUDES

Include HepODBMS and Objectivity library path into $LD_LIBRARY_PATH

Setup Objectivity variables (eg. on CERN AFS) source /afs/cern.ch/rd45/objectivity/objyenv.csh (csh) . /afs/cern.ch/rd45/objectivity/objyenv.sh (bsh)

Check and start “Lock Server” Type “gmake” in $G4INSTALL/source See $G4INSTALL/examples/extended/persistency/PersistentEx01/README

for more detail (see also the release note for version information)

Page 19: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 19

Geant4 examples illustrating Geant4 examples illustrating persistency features persistency features

Extended examplesExtended examples

PersistentEx01: Make persistent Run/Event/Geometry objects

readDB: standalone HepODBMS example to read objects createTag: standalone example to create HepODBMS tag readTag: standalone example to read HepODBMS tag

PersistentEx02: Make user defined persistent Hits objects readDB: standalone HepODBMS example to read objects createTag: standalone example to create HepODBMS tag readTag: standalone example to read HepODBMS tag

Page 20: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 20

If you want to learn more...If you want to learn more...

User's Guide: For Application Developers http://wwwinfo.cern.ch/asd/geant4/G4UsersDocuments/

UsersGuides/ForApplicationDeveloper/html/index.html HepODBMS User Guide

http://wwwinfo.cern.ch/asd/lhc++/HepODBMS/user-guide/ho.html Objectivity/DB Support at CERN

http://wwwinfo.cern.ch/asd/lhc++/Objectivity/index.html CERN/IT DataBase Group

http://wwwinfo.cern.ch/db/ The Object Database Standard: ODMG 2.0

Edited by R.G.G. Cattell, D.K. Barry, Morgan Kaufmann Publishers, Inc.ISBN 1-55860-463-4

Page 21: Geant4 Collaboration 1 Persistency M7 Unit 3. Geant4 Collaboration 2 Category Requirements oGeant4 Persistency makes run, event, hits, digits and geometry

Geant4 Collaboration 21

Whom to contact about Geant4 Whom to contact about Geant4 PersistencyPersistency

Geant4 Persistency Category CoordinatorGeant4 Persistency Category Coordinator

Youhei Morita (KEK) - [email protected]

HepODBMS and Objectivity/DB issuesHepODBMS and Objectivity/DB issues

CERN/IT DataBase Group - [email protected]