TSkim Un outil pour dcouper les arbres ROOT
TSkim Un outil pour découper les arbres ROOT
Motivation l l l De nombreuses expériences de physique stockent leurs données sous forme d’arbres ROOT. Une activité récurrente des chercheurs consiste à établir des critères pour définir quels événements physiques sont intéressants, et à extraire des fichiers ROOT les données attachées à ces événements particuliers. TSkim a été développé pour les y aider. Initialement un simple couple de scripts PERL et ROOT pour l’expérience FERMI, l'outil est à présent devenu suffisamment élaboré pour s’ouvrir à d'autres expériences.
Plan l Présupposés sur l’organisation des données l Configuration et Entrées/Sorties de TSkim l Détails sur les variables d’environnement et les fichiers de configuration l Quelques détails d’implémentation. l Perspectives et conclusions
Organisation des données m_run. Id Evt. Run m_run. Id m_event. Id Evt. Event. Id m_event. Id 2 15
Config/Entrées/Sorties de TSkim Meta. Data. txt Library. List. txt Branch. List. txt File. List. txt Beam. Test_X. root Beam. Test_X. root lib. Beam. Test. Digi. so Event. List. txt Beam. Test_digi. root TSkim Beam. Test_merit. root Beam. Test_jobinfo. root
Exemple de job csh> setenv ROOTSYS /…/v 5. 18. 00 c/root csh> setenv TS_META_DATA. . . /Meta. Data. txt csh> setenv TS_INPUT_LIBRARY_LIST. . . /Library. List. txt csh> setenv TS_INPUT_FILE_LIST. . . /File. List. txt csh> setenv TS_INPUT_BRANCH_LIST. . . /Branch. List. txt csh> setenv TS_INPUT_EVENT_LIST. . . /Event. List. txt csh> setenv TS_DATA_TYPES "merit: jobinfo: digi" csh> setenv TS_OUT_DIR $PWD csh> tskim
Types de données #! SECTION Meta. Data (merit. tree. Name) Merit. Tuple (merit. run. Id. Branch. Name) Evt. Run (merit. event. Id. Branch. Name) Evt. Event. Id (jobinfo. tree. Name) jobinfo (digi. tree. Name) Digi (digi. run. Id. Branch. Name) m_run. Id (digi. event. Id. Branch. Name) m_event. Id (digi. top. Branch. Name) Digi. Event (digi. top. Branch. Type) Digi. Event (digi. lib. Name) libdigi. Root. Data. so Meta. Data. txt
Library. List. txt Bibliothèques C++ précompilées #! SECTION Libraries /nfs/u 09/builds/rh 9_gcc 32/Beamtest/v 3 r 0907 p 0/libcommon. so (mc)/nfs/u 09/builds/rh 9_gcc 32/Beamtest/v 3 r 0907 p 0/libmc. so TS_LIB_DIRS = /nfs/u 09/builds/rh 9_gcc 32/ : … (digi)/nfs/u 09/builds/rh 9_gcc 32/Beamtest/v 3 r 0907 p 0/libdigi. so (recon)/nfs/u 09/builds/rh 9_gcc 32/Beamtest/v 3 r 0907 p 0/librecon. so TS_LIB_DIR = Beamtest/v 3 r 0907 p 0 Pour Fermi, mécanisme de détection automatique de la version à partir d’un objet « entête » stocké dans tous les fichiers.
Fichiers ROOT d’entrée File. List. txt #! SECTION Files (merit: jobinfo)/nfs/u 35/MC-tasks/Beam. Test-10_0000_merit. root TS_DATA_DIRS = … : … (merit: jobinfo)/nfs/u 35/MC-tasks/Beam. Test-10_0001_merit. root (merit: jobinfo)… (merit: jobinfo)/nfs/u 35/MC-tasks/Beam. Test-10_0008_merit. root: //… (merit: jobinfo)/nfs/u 35/MC-tasks/Beam. Test-10_0009_merit. root (digi)/nfs/u 35/MC-tasks/Beam. Test-10_0000_digi. root (digi)/nfs/u 35/MC-tasks/Beam. Test-10_0001_digi. root (digi)… FERMI_TASK = Beam. Test-10 FERMI_RUN_MIN = 0 (digi)/nfs/u 35/MC-tasks/Beam. Test-10_0008_digi. root FERMI_RUN_MAX = 9 (digi)/nfs/u 35/MC-tasks/Beam. Test-10_0009_digi. root
Sélection des branches #! SECTION Branches (merit) -* (merit) +Pt. T* (merit) +Cal* (digi) +m_event. Id (digi) +m_run. Id (digi) +m_acd (digi) -m_cal (digi) … Branch. List. txt
Sélection des évènements #! SECTION Events #! 2000 entries in original dataset. #! 7 events after cut: 18 1 183 1 344 1 553 2 117 2 517 2 980 TS_TCUT = « Tkr. Energy>200 » TS_TCUT_DATA_TYPE = merit En l’absence de TCUT et de liste d’évènements, TSkim fusionne les données. Event. List. txt
Utilisation d’un fichier CEL Meta. Data. txt Library. List. txt Branch. List. txt File. List. txt Beam. Test_X. root Beam. Test_X. root lib. Beam. Test. Digi. so TCUT Beam. Test_digi. root TSkim Beam. Test_merit. root Beam. Test. cel. root Beam. Test_jobinfo. root
Implémentation l 1ère Couche en PERL : prépare les variables, attribue les valeurs par défaut, gère la rétrocompatibilité. l 2ème Couche en C++ compilé (pour chaque version de ROOT) l l Ne lit que les branches utiles. Sélection le « Fast Merge » quand c’est approprié. Vérifie que les valeurs de Run/Event IDs sont compatibles avec les indexes ROOT. Outillage : Eclipse, Subversion, Trac, gmake, Oval.
Perspectives l l l Appariemment des morçeaux d’événement en utilisant des “time-stamps”. Détection automatiquement des méta-données. Généraliser certaines fonctionnalités FERMI : l l Analyse automatique des fichiers de données pour établir la version des bibliothèques de description de données. Récupération des noms de fichiers d’entrée depuis une base de données. Gestion de l’évolution des méta-données. Amélioration du format CEL, fourniture d’une API et d’outils pour manipuler les fichiers CEL.
Conclusions l En production pour FERMI. l Très récemment ouvert aux autres expériences. l On recherche : l De nouveaux utilisateurs hors FERMI. l De nouveaux développeurs ?
Références l http: //llr. in 2 p 3. fr/trac/tskim l http: //root. cern. ch
- Slides: 16