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
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)
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
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
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)
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...
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.
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.
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
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...
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
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
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.
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 ?