Introduction à l'analyse dans D0 au CC-IN2P3


Ces quelques pages visent à permettre à des personnes n'ayant aucune (enfin presqu'aucune) expérience du CC-IN2P3 et/ou du soft D0 de commencer à faire de l'analyse. Elles essayent d'aller à l'essentiel et sont donc par nature sommaires et incomplètes. En outre, elles recèlent peut-être des erreurs ou des imprécisions. Ces pages ne demandent donc qu'à être étendues, améliorées et corrigées, si besoin est, grâce à vos commentaires et suggestions. A noter que vous pouvez également trouver des informations utiles sur la page développée par Smain.

Avant de commencer à lire ce qui suit, il est recommandé, si vous ne l'avez déjà fait, de consulter quelques références disponibles sur le web:
- pour le CC-IN2P3, il est vivement conseillé de lire ou au moins parcourir les pages d'introduction et les différents manuels disponibles à partir de la page manuel, en particulier les manuels Unix et afs.
- pour le soft D0, à ma connaissance, la meilleure introduction aux principes de base est la présentation donnée par Laurent. Pour une introduction détaillée à l'analyse proprement dite, on peut se reporter à la présentation donnée par Marco Verzocchi. Enfin la page D0-France: Software recense assez complètement l'information disponible sur le web.
 
 

  1. Aide-mémoire à l'utilisation du CC-IN2P3: espace(s) disque, bandes (HPSS), transferts (bbftp), batch (bqs)...


  2. Remarque préliminaire (triviale?): le code D0 n'étant disponible que sous Linux, il faut travailler sur ccali.
     
    1. Espaces disque: $HOME, $THRONG_DIR, $GROUP_DIR, /scratch


    2. Espace personnel ($HOME):
      Chaque utilisateur dispose sur afs d'un espace disque limité, en général 200 Mo. La commande:
      fs listquota $HOME
      permet de voir l'espace disponible et son utilisation. Tout ce qui est écrit sur cet espace est sauvegardé.

      Espace commun ($THRONG_DIR):
      De l'espace disque commun, sauvegardé journalièrement, est également alloué aux divers utilisateurs d'une même expérience. C'est là qu'est stocké le software D0. La commande:
      fs la $THRONG_DIR
      permet de voir les droits d'accès à cet espace. Pour D0, le droit d'écriture est restreint aux administrateurs de groupe -appelés czars dans le jargon CC-IN2P3- et administrateurs système.

      Espace groupe ($GROUP_DIR):
      De l'espace disque en quantité plus importante, mais non sauvegardé, est également alloué à chaque expérience et, dans le cas de D0, divisé entre les laboratoires. La commande:
      qspace
      permet de voir la répartition de cet espace par laboratoire et son utilisation, ainsi que les noms des czars. Même si l'espérance de vie des fichiers écrits dans cet espace est assez élevée, il est fortement conseillé de sauvegarder manuellement tout ce qui a besoin de l'être.

      Espace temporaire (/scratch):
      Chaque utilisateur peut également disposer de façon temporaire d'un espace assez important (plusieurs Go) spécifique à la machine à laquelle il est connecté et dont le nom est visible par echo $HOST ou echo $HOSTNAME. Il suffit pour cela de se placer dans le répertoire /scratch et d'y créer un sous-répertoire (par exemple à son nom, mais ce n'est pas obligatoire). La durée de vie de cet espace est limitée et aléatoire: il est donc fortement conseillé de n'y mettre que des fichiers que l'on peut recréer assez vite.
       
       

    3. Utilisation des bandes (HPSS), transfert de données (bbftp), batch (bqs)


    4. Les bandes magnétiques (HPSS):
      HPSS est le système de stockage de fichiers sur bandes magnétiques du CC-IN2P3, prévu pour écrire/relire de gros fichiers (au moins 100 Mo) grâce au logiciel RFIO. Pour des fichiers de taille inférieure à 100 (20) Mo, il est recommandé (obligatoire) de contacter le CC-IN2P3. Les fichiers sur HPSS sont rangés sous l'arborescence /hpss/in2p3.fr, separée de afs et de l'espace local. Le nom complet (nécessaire dans certaines applications, voir ci-dessous) est obtenu en faisant précéder le nom de l'arborescence par un nom de serveur (en pratique un alias fourni par le CC-IN2P3) qui est pour D0:
      cchpssd0.in2p3.fr:

      Chaque utilisateur a accès à son répertoire propre (en lecture/écriture, espace normalement limité à 200 Go?):
      /hpss/in2p3.fr/home/$U/$USER$U est la première lettre de $USER
      et au répertoire du groupe (en lecture seulement pour la plupart des utilisateurs), qui est pour D0:
      /hpss/in2p3.fr/group/d0
      Les TMB importées régulièrement depuis Fermilab sont disponibles sur le répertoire:
      /hpss/in2p3.fr/group/d0/data/import_rtp

      A chaque fichier HPSS est attachée une valeur appelée COS (Class Of Service), qui sert à optimiser la gestion des fichiers, et qui peut être choisie avant l'écriture sur HPSS par la commande:
      setenv RFC_HPSSCOS numcos
      La valeur de la COS doit obéir aux règles simples qui suivent, faute de quoi l'écriture sur HPSS peut être refusée:
      - répertoire utilisateur: numcos=0 (c'est la valeur par défaut)
      - répertoire groupe, fichiers de taille INFÉRIEURE (SUPÉRIEURE) à 64 Mo: numcos=21 (22)
      Un utilitaire python de Patrice setCos.py donne la bonne valeur à la variable d'environnement RFC_HPSSCOS pour un fichier, par exemple setCos.py filename.

      Pour simplifier l'écriture, on définit une nouvelle variable d'environnement HPSS qui pointe vers le répertoire utilisateur dans HPSS par la commande:
      setenv HPSS /hpss/in2p3.fr/home/$U/$USER
      Les fichiers sur HPSS sont accessibles grâce aux commandes RFIO indiquées ci-dessous suivies de leur équivalents Unix:
      rfdir $HPSS/                               | ~ ls -l (Voir remarque plus bas)
      rfcp $HPSS/filename ./filename             | ~ cp    (Pour copier de/vers HPSS)
      rfrm $HPSS/filename                        | ~ rm
      rfmkdir $HPSS/newdir                       | ~ mkdir
      rfrename $HPSS/filename $HPSS/newfilename  | ~ mv
      rfstat $HPSS/filename                      | ~ stat

      ATTENTION à rfdir: cette commande ne DOIT être utilisée QUE sur des répertoires où le nombre de fichiers est limité. Par exemple, il est, en principe, INTERDIT de faire:
      rfdir /hpss/in2p3.fr/group/d0/data/import_rtp

      Pour avoir la liste des TMB à Lyon, il faut utiliser sam (c'est possible depuis Lyon, mais c'est moins rapide que sur d0mino). Après setup sam, la commande:

      sam list files --dim="data_tier thumbnail and (file_name like %raw% and (version like p13% and (full_path like %/hpss/in2p3.fr%)))"
      permet d'avoir la liste des TMB p13 disponibles à Lyon. Si vous importez beaucoup de fichiers sur votre espace personnel HPSS, il est recommandé de maintenir séparément une liste à jour de ces fichiers et d'éviter au maximum d'utiliser rfdir à cette fin.

      Un petit utilitaire python écrit par Patrice getSize.py donne la taille d'un fichier HPSS en octets.

      Enfin, avant d'utiliser HPSS, il est conseillé de lire les FAQ.

      Le transfert de données (bbftp):
      bbftp est le logiciel de transfert de données développé au CC-IN2P3 pour Babar. Il est interfacé avec RFIO et permet donc de transférer directement entre clued0/d0mino et HPSS. Pour l'utiliser, se référer aux instructions écrites par Laurent, paragraphe 3. On peut éventuellement consulter le guide complet d'utilisation de bbftp en particulier pour connaître toutes les commandes bbftp du type put, get, lcd, etc.. similaires aux commandes ftp.

      Le transfert officiel des données de FNAL vers Lyon peut être suivi sur cette page web .

      Dernière chose à propos des transferts: pour essayer d'éviter les doublons, je vais mettre en place une page web qui recensera, sous une forme à déterminer, les fichiers transférés de facon privée (hors TMB officiels), par exemple des skims de physique, des fichiers Monte-Carlo, des données RAW ou DST, etc... Si vous transférez (ou avez déjà transféré) des fichiers de ce type, susceptibles d'intéresser d'autres personnes de D0-France, merci de m'envoyer une liste de vos fichiers pour que je l'inclue dans cette page web.

      Le système batch (bqs):
      bqs est le gestionnaire de batch dévelopé au CC-IN2P3, similaire à celui de clued0. Les pages web correspondantes au CC-IN2P3 étant plutôt bien faites, je préfère vous inviter à les lire, en particulier la page d'introduction, la définition des classes, la liste des commandes bqs et la liste des options de soumission d'un job batch.


     
  3. Quelques remarques utiles sur le software D0


  4. Il y a plusieurs possibilités pour savoir quelles versions du software D0 sont disponibles à Lyon:
     
    • Consulter la page web D0-France sur les releases

    •  
    • Regarder directement sur le disque où sont installées les releases:


    • ls $THRONG_DIR/dist/releases/                | Pour voir les numéros de version disponibles.
      ls $THRONG_DIR/dist/releases/p13.08.00/bin   | Pour voir quelles options de compilation
                                                   | (debug, maxopt ou maxopt-strip) sont disponibles
                                                   | pour une release particulière (ici p13.08.00).
                                                   |
      setup D0RunII p13.08.00                      | On peut aussi utiliser la variable d'environnement
      ls $SRT_PUBLIC_CONTEXT/bin                   | SRT_PUBLIC_CONTEXT disponible après setup pour
                                                   | obtenir le même résultat.
       
    • Utiliser ups:


    • ups list -aK+ D0RunII-bin

      ups/upd est un logiciel permettant de gérer de façon standardisée l'installation du code D0 proprement dit ainsi que des différents programmes nécessaires à son bon fonctionnement. On peut utiliser upd pour voir quelles versions du code D0 sont disponibles à FNAL:

      setup upd
      upd list -aK+ -h www-d0.fnal.gov D0RunII-bin | grep -i linux
       


    Une fois qu'on a choisi la release avec laquelle on veut travailler, par exemple p13.08.00, on fait, comme à FNAL:
    setup D0RunII p13.08.00

    Si on veut récupérer le code source d'un package, par exemple jetanalyze, pour recréer des executables, on peut, dans un premier temps, utiliser la commande:
    getpkg jetanalyze
    C'est un script écrit par Laurent qui permet de récuperer, pour un package donné, la version correspondant à la release pour laquelle le setup a été fait.

    Pour savoir quelle version d'un package correspond à une release donnée (exemple: quelle est la version de jetanalyze utilisée dans p13.08.00?) faire (après setup de la version en question):
    less $SRT_PUBLIC_CONTEXT/D0reldb/inventory | grep jetanalyze

    On peut également récupérer d'autres versions d'un package donné (qui peut même être absent de la release utilisée). Il faut pour cela utiliser la commande usuelle addpkg, mais comme le CC-IN2P3 n'est pas reconnu comme kerberisé par FNAL, ça demande un petit effort préliminaire:

    cd $HOME     | Ça marche peut-être ailleurs, mais bon...
    ssh-keygen   | Répondre par la touche ENTER à la 1ère question puis donner deux fois un mot de passe,
                 | qui doit être différent de votre mot de passe Linux.

    Ensuite, il faut envoyer un mail à d0-release-mgr@fnal.gov avec en fichier joint (in English: attached):
    $HOME/.ssh/identity.pub

    Vous pouvez donner comme sujet du mail:
    Public key for D0 CVS access
    et dans le texte du message, par exemple:
    Please find attached my public key for CVS access through ssh.
    Dès que vous recevez confirmation de d0-release-mgr@fnal.gov, vous avez accès à cvs par:
    setup d0sshcvs

    La 1ere fois, vous aurez probablement la question:
    Are you sure you want to continue connecting (yes/no)?
    Après avoir répondu yes, puis donné le mot de passe que vous avez choisi au moment du ssh-keygen, vous pourrez alors utiliser addpkg comme à FNAL. Par exemple, la commande:
    addpkg package_name
    créera un nouveau répertoire package_name contenant le code source de ce package.

    Dernière chose: ce mode d'accès aux packages est valable à partir de n'importe quelle machine. Il suffit de copier dans son $HOME le répertoire .ssh.
     
     

  5. Instructions pour une première analyse de données D0 à Lyon

  6.  
    1. En interactif


    2. On a besoin d'espace disque pour recréer l'exécutable (environ 200 Mo) et pour stocker les données que l'on va rapatrier depuis HPSS (environ 100 Mo), soit au total environ 300 Mo, c'est-à-dire plus que l'espace utilisateur sur afs. En même temps, on voudrait sauvegarder d'éventuelles modifications du code et/ou des paramètres de contrôle (RCP). On va donc utiliser un répertoire de travail dans le $HOME, dont les sous-répertoires destinés à occuper beaucoup d'espace disque seront en fait des liens vers des répertoires disposant de l'espace nécessaire. Comme on tourne en interactif, on peut utiliser le scratch.

      cd /scratch
      mkdir $USER
      cd $USER
      mkdir bin lib tmp data
      cd $HOME
      setup D0RunII p13.08.00
      newrel -t p13.08.00 newdir
      cd newdir
      rmdir bin lib tmp
      ln -sf  /scratch/$USER/bin bin
      ln -sf  /scratch/$USER/lib lib
      ln -sf  /scratch/$USER/tmp tmp
      gmake clean

      On rapatrie le code source du package analysis_example.

      getpkg analysis_example > & install_analysis_example.log

      On peut maintenant compiler et linker: ça prend environ 10 minutes, patience...

      gmake all >> & install_analysis_example.log

      Encore des setups...

      d0setwa
      setup d0tools -t

      On utilise D0rfcp (version D0 de rfcp, voir commentaire plus bas) pour copier (environ 30s en temps normal) un fichier TMB (choisi pour cet exemple car il fait environ 100 Mo) sur le disque /scratch . Pour simplifier l'écriture, on définit une nouvelle variable d'environnement HPSS_TMB

      setenv HPSS_TMB /hpss/in2p3.fr/group/d0/data/import_rtp
      D0rfcp $HPSS_TMB/recoT_all_0000172596_mrg_002-003.raw_p13.06.01 /scratch/$USER/data

      Création de la liste des fichiers à analyser (ici limitée à 1 fichier)

      ls /scratch/$USER/data/* > diskdata.dat
      Utilisation de runchunkanalyze pour lancer l'executable. Faire runchunkanalyze -h pour voir toutes les options.
      runchunkanalyze -mode=TMB -filelist=diskdata.dat -num=10
       
    3. En batch


    4. Cette fois, on a besoin que les binaires soient visibles par la machine batch. On va donc utiliser, au lieu de l'espace scratch, l'espace afs disponible dans le GROUP_DIR pour y créer les répertoires bin lib tmp. Le reste est similaire à l'exemple précédent, hormis l'utilisation de runchunkanalyze.

      ATTENTION: L'utilisation de runchunkanakyze pour lancer un job en batch sans avoir à ecrire de scripts n'est disponible qu'à partir de la version p14.03.00.

      Pour commencer, il vous faut trouver de la place sur labdisk, un disque parmi ceux alloués à votre labo dans GROUP_DIR. Si vous n'avez pas déjà l'autorisation d'écriture sur ce disque, demandez-la à votre czar.

      qspace
      cd $GROUP_DIR/labdisk/$USER
      mkdir bin lib tmp
      cd $HOME
      setup D0RunII p14.03.00
      newrel -t p14.03.00 newdir
      cd newdir
      rmdir bin lib tmp
      ln -sf  $GROUP_DIR/labdisk/$USER/bin bin
      ln -sf  $GROUP_DIR/labdisk/$USER/lib lib
      ln -sf  $GROUP_DIR/labdisk/$USER/tmp tmp
      gmake clean
      getpkg analysis_example > & install_analysis_example.log

      En option: pour se débarrasser des 3 lignes remplies de ^@^@^@^@ au debut du .log

      getpkg framework >> & install_analysis_example.log
      cp ~andrieu/public/src/Main.cpp framework/src/Main.cpp

      On utilise de préférence la version maxopt (disponible pour p14.03.00 à Lyon)

      srt_setup SRT_QUAL=maxopt

      Encore un peu de patience...

      gmake all >> & install_analysis_example.log
      d0setwa
      setup d0tools -t

      On est finalement prêt à lancer runchunkanalyze en batch.
      
      runchunkanalyze -mode=TMB -filelist=hpssdata.dat -num=1000 -userpostscript=user_jobend -maxopt -mem=512MB -batch -q=A -batchopts='-l%t=500,hpss,platform=LINUX,scratch=1GB' -fwkparams -stager D0rfcp
      • hpssdata.dat contient la liste des fichiers HPSS (avec l'arborescence complète), par exemple ici, où il n'y a qu'un fichier: cchpssd0.in2p3.fr:/hpss/in2p3.fr/group/d0/data/import_rtp/recoT_all_0000172596_mrg_002-003.raw_p13.06.01

      •  
      • user_jobend contient la liste des commandes à exécuter en fin de job, par exemple ici, pour sauver les résultats du job:

      • cp D0ChunkAnalyze.root $HOME
        cp D0ChunkAnalyze_x.* $HOME
         
      • L'option -q donne la classe du job (ici A, c'est-à-dire celle des jobs les plus courts).

      •  
      • Les options qui seraient normalement envoyées à la machine batch par l'option -l dans qsub, à savoir:


      • -l t=500,hpss,platform=LINUX,scratch=1GB

        sont ici transmises par l'option -batchopts entre '' et en remplacant le caractère blanc par %
         

      • Finalement, l'option -stager D0rfcp, qui doit être nécessairement après -fwkparams, dit au programme d'utiliser D0rfcp pour récupérer le fichier qui se trouve sur bande. D0rfcp est un script qui relance rfcp automatiquement tant que le fichier n'est pas transféré correctement.


      A la fin du job, vous devriez avoir un fichier D0ChunkAnalyze.root dans votre $HOME. Si tout a bien marché, les commandes suivantes:

      root -l D0ChunkAnalyze.root
      jetPt->Draw()
      devraient faire apparaître la figure ci-dessous.


     
     
  7. Comment skimmer des thumbnails/tmb_tree's à Lyon


  8. Vous trouverez une section sur les skims des thumbnails/tmb_tree's sur la page web développée par Smain et Marie-Claude.
     
Page maintenue par: Bernard Andrieu