13
13-Novembre- 2000 L. Aphecetche ([email protected]) 1 L’analyse des DST La base de tout: PHOOL Phenix Object Oriented Library La méthode d’hier : « camDataCheck » La méthode d’aujourd’hui : pdst Ce que demain nous réserve lecture sélective accès simplifié aux tables (seul type de données dans les DSTs pour l’instant)

L’analyse des DST

  • Upload
    jethro

  • View
    30

  • Download
    0

Embed Size (px)

DESCRIPTION

L’analyse des DST. La base de tout: PHOOL P henix O bject O riented L ibrary La méthode d’hier : « camDataCheck  » La méthode d’aujourd’hui : pdst Ce que demain nous réserve lecture sélective accès simplifié aux tables (seul type de données dans les DSTs pour l’instant). TOP. - PowerPoint PPT Presentation

Citation preview

Page 1: L’analyse des DST

13-Novembre-2000 L. Aphecetche ([email protected]) 1

L’analyse des DST

La base de tout: PHOOLPhenix Object Oriented Library

La méthode d’hier : « camDataCheck  »

La méthode d’aujourd’hui : pdst

Ce que demain nous réserve lecture sélective accès simplifié aux tables (seul

type de données dans les DSTs pour l’instant)

Page 2: L’analyse des DST

13-Novembre-2000 L. Aphecetche ([email protected]) 2

PHOOL = données+modules

Des données organisées (en mémoire) sous forme d’arbre = ensemble de nœuds nommés

PHCompositeNode

PHCompositeNodePHCompositeNode

PHDataNode PHIODataNode

PHIODataNode

TOP

EMC DST

dEmcTempo dEmcCluster

dEmcCalibTower

Transient Persistent

Page 3: L’analyse des DST

13-Novembre-2000 L. Aphecetche ([email protected]) 3

Les modules PHOOL

Un module agit sur tout ou partie d’un « node-tree », grâce à sa fonction event: event(PHCompositeNode*)

Les modules eux-mêmes peuvent être mis dans des nœuds…

La navigation dans les nœuds se fait grâce à des itérateurs : PHNodeIterator

Page 4: L’analyse des DST

13-Novembre-2000 L. Aphecetche ([email protected]) 4

PHOOL et la persistance

Persistance est gérée par des PHxxxManager : PHNodeIOManager

pour lire/écrire les données dans les DSTs

PHRawOManager pour écrire les événements dans

les PRDF (Phenix Raw Data Format)

Types pouvant être persistants : PHTable (et dérivés) Event TObject (mais Reset pose pb)

Page 5: L’analyse des DST

13-Novembre-2000 L. Aphecetche ([email protected]) 5

PHOOL

Un framework simple, facile à faire évoluer

2 formats de persistance pour l’instant: PRDF (raw data) ROOT (dst)

Une syntaxe un peu complexe ?

En cours d’ évolution...

Page 6: L’analyse des DST

13-Novembre-2000 L. Aphecetche ([email protected]) 6

Évolution PHOOL

Contribution SUBATECH: lecture étiquetée des DSTs lecture sélective des DSTs (qq

tables seulement) Revient à ajouter qq

méthodes à 1 seule classe PHOOL: PHNodeIOManager::readSpecific(int evt, char* objectName)

PHNodeIOManager::selectObjectToRead(char* objectName)

Déjà dans CVS et dans la release actuelle.

Page 7: L’analyse des DST

13-Novembre-2000 L. Aphecetche ([email protected]) 7

Lecture DST : camDataCheck

Méthode actuelle pour lire les DSTs.

Utilisées lors des nightly rebuilds et reconstruction pour Q&A de base.

C’est (juste) une macro ROOT.

Page 8: L’analyse des DST

13-Novembre-2000 L. Aphecetche ([email protected]) 8

camDataCheck

Un PHNodeIOManager recrée en mémoire un node-tree à partir de la DST (TTree Root)

Faire un boucle sur les événements: pour chaque evt : accéder les différent nodes accéder les tables/object

contenus dans les nodes remplir des histogrammes

Page 9: L’analyse des DST

13-Novembre-2000 L. Aphecetche ([email protected]) 9

camDataCheck : exemple

PHCompositeNode* topNode =new PHCompositeNode("TOP");

PHCompositeNode* dstNode =new PHCompositeNode("DST");

topNode->addNode(dstNode);

PHNodeIterator mainIter(topNode);

PHNodeIOManager* dstIn = new PHNodeIOManager(« dstData.root »,PHReadOnly);

// Recrée le node-tree en memoire à partir de la DST

dstIn->read(dstNode);

int i;

for (i=0;i<nevent;i++) {

if (i>0) dstIn->read(dstNode[,i]) ;

// Trouver le nœud contenant la table

PHIODataNode<PHTable>* OneNodeTable = (PHIODataNode<PHTable>*)mainIter.findFirst(« PHIODataNode », »dEmcCalibTower »);

// Trouver la table dans le nœud

dEmcCalibTowerWrapper* dOneTable = (dEmcCalibTowerWrapper*)OneNodeTable->getData() ;

} pdst/process_eventà multiplier par le nombre de tables...

Page 10: L’analyse des DST

13-Novembre-2000 L. Aphecetche ([email protected]) 10

De camDataCheck à pdst

Il faut gérer la boucle sur les événements «  à la main »

Solution : pdst (équivalent de

pmonitor utilisé online) : on se connecte à la DST

dfileopen(« dstData.root »)

on lance la boucle sur tous les événements (ou une partie)

drun(); ou drun(Nevents);

à chaque evt, la fonction utilisateur process_event(PHCompositeNode* topNode) est exécutée

Page 11: L’analyse des DST

13-Novembre-2000 L. Aphecetche ([email protected]) 11

Évolution (possible) de pdst

Problème actuel de pdst : l’ écriture de process_event reste (syntaxiquement) complexe (accès aux nœuds, puis aux tables : beaucoup de casting…)

Proposition faite à phenix-off : nouvelle classe PHDstHelper

++ Son code peut être généré automatiquement à partir d’une DST

Page 12: L’analyse des DST

13-Novembre-2000 L. Aphecetche ([email protected]) 12

PHDstHelper

process_event(PHCompositeNode* topNode)

{

PHDstHelper d(topNode) ;

float zvertex = d.dEventHeader().get_zdcZVertex(0) ;

}

Toute la machinerie des nœuds est maintenant cachée à l’utilisateur qui accède plus directement aux tables.

Principe accepté par M. Purschke (le responsable de pdst). Devrait apparaître bientôt dans CVS.

Page 13: L’analyse des DST

13-Novembre-2000 L. Aphecetche ([email protected]) 13

D’autres idées ?

Les DSTs contiennent un

dRunHeader par événement…

Contribution à la base de

données des runs (PHRED) ?

Autre chose que des PHTable

dans les DSTs ?

Et si on rêvait d’une base de

données des événements ?

Et d’une reconstruction

entièrement compilée ?