Download - L’analyse des DST
![Page 1: L’analyse des DST](https://reader036.vdocuments.fr/reader036/viewer/2022083008/568146b3550346895db3cf70/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.fr/reader036/viewer/2022083008/568146b3550346895db3cf70/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.fr/reader036/viewer/2022083008/568146b3550346895db3cf70/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.fr/reader036/viewer/2022083008/568146b3550346895db3cf70/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.fr/reader036/viewer/2022083008/568146b3550346895db3cf70/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.fr/reader036/viewer/2022083008/568146b3550346895db3cf70/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.fr/reader036/viewer/2022083008/568146b3550346895db3cf70/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.fr/reader036/viewer/2022083008/568146b3550346895db3cf70/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.fr/reader036/viewer/2022083008/568146b3550346895db3cf70/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.fr/reader036/viewer/2022083008/568146b3550346895db3cf70/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.fr/reader036/viewer/2022083008/568146b3550346895db3cf70/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.fr/reader036/viewer/2022083008/568146b3550346895db3cf70/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.fr/reader036/viewer/2022083008/568146b3550346895db3cf70/html5/thumbnails/13.jpg)
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 ?