1 / 25

Software & Computing

Software & Computing. Jochen Markert. Where are we now?. Full simulation chain Full DST chain New DST output format Successfully run without problems on huge statistics Calculation speed already better than estimated New tools

dmarlene
Download Presentation

Software & Computing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Software & Computing Jochen Markert

  2. Where are we now? • Full simulation chain • Full DST chain • New DST output format • Successfully run without problems on huge statistics • Calculation speed already better than estimated • New tools • New code for alignment and calibration (see Vladimir’s & Olga’s Talk) • ORACLE web interface restructured • Improved software environment: • fully 64bit approved Hydra2/HGeant2 • Improved installation procedures • Documentation: • Hydra.pdf (~70 pages), part of the hydra2 repository • Html documentation: ROOT + doxygen • WIKI • TODO: • Switch to ROOT 5.30.02 soon • Move remaining repositories to svn • Iterative track finding for off-vertex tracks, low momenta tracks • Global track fitting for the future: Kalman filter (see Erik’s Talk) • Speed optimization …. Yet another factor 2 ?

  3. Installation Procedure • The new installation procedure installs on 32 or 64 bit systems • 1 tar.gz file (150 Mb source code … needs some tiem to compile ) • From tarball • gsl • ROOT • Cernlib • Garfield • All admin scripts • All environment scripts • UrQmd • UrQmd converter • From SVN • Hydra2 • HGeant2 • hzip • Pluto (to be done) • ORACLE client has to be installed separately

  4. Installation Procedure Most problematic part: • Cernlib: • Cernlib official not supported anymore • Current version taken from a patched version http://www-zeuthen.desy.de/linear_collider/cernlib/new/cernlib_2005.html • Runs 64bit with new gfortran 4.4 compiler • Own install scripts makes the installation more strait forward • Some outdated tools needed , imake, gmake, ed • Future of this software is uncertain, but we should be save for the next future • Garfield: • Depending on cernlib • Runs 64bit with new gfortran 4.4 compiler • Own install scripts makes the installation more strait forward

  5. Working from zip files : HZip • A helper class to read/work with zip file containing many root files. • root files will not be compressed, directory names ignored. It's a flat files structure. • Purpose of the zipping of many root files into on zip archive is • to improve the handling of many small files • reduce the load on the file system • Increase the CPU usage efficiency • Keep still separated files instead of using hadd

  6. Working from zip files : HZip • To make the daily work more easy a command line executable hzip is provided to produce and work with those zip files: usage: hzip -o zipfile [-i filefilter] [-f filelist] [-u outputdir] [-msth] -f input ascii filelist (1 file per line) -h help -i input filefilter (like "be*.root") -l list file in zip files -m maxsize of file [bytes] (default = 2 Gbyte, will be splitted if larger) -o outputzip file name (required) -s save mode. do not override existing zip files (default is overwrite) -t test. show what would be done -u dir unzip zip files to dir -w print in which file membername is contained examples: test zip root files : hzip -t -o test.zip -i "/mydir/be*.root" zip root files : hzip -o test.zip -i "/mydir/be*.root" zip root files from list : hzip -o test.zip -f filelist unzip root files to dir : hzip -i "test_*.zip" -u /mydir list files in zip files : hzip -i "test_*.zip" -l from the terminal.

  7. Working from zip files : HZip • HZipprovides the functionality to access, list and files from a root macro. • Examples: • TChain* chain = new TChain("myTree"); HZip::makeChain("my.zip",chain); // add all root files to chain • add all root files of all matching zip files to chain HZip::makeChainGlob("my*.zip",chain); • add all root files of all zip files in filelist to chain HZip::makeChainList("filelist.txt",chain); • chain->GetEntries(); // access all files and get number of entries • chain->ls(); // list all files in chain with number of entries • is my.root contained in my.zip? Bool_t HZip::isInside("my.zip","my.root"); • list all files which match the pattern Int_t HZip::list("my.zip",".*"); • return to TList list all files which match the pattern Int_t HZip::getList("my.zip",list,".*"); • unzip file to directory Bool_t HZip::unzip("my.zip","mydir"); • add this root file to the zip file Bool_t HZip::addFile("my.zip","my.root"); • add all root files from TList list to the zip file Bool_t HZip::addFiles("my.zip",list);

  8. Fast looping tool : HLoop • HLoop is a helper class to allow for fast looping of HADES DSTs. • The categories are mapped directly from the Tree and allow partial reading to speed up. • If Hades object exists, the current event structure will be replaced by the one defined by HLoop • If Hades not exists, it can be created by HLoop constructor. • The Hades event structure is important if one wants to access the data via • gHades->getCurrentEvent()->getCategory(cattype) • or implicit by Classes like HParticleTrackSorter.

  9. void myLoop() { //---------------LOOP CONFIG---------------------------------------------------------------- Bool_t createHades = kTRUE; // kTRUE = create HADES new HLoop* loop = new HLoop(createHades); // create HADES if needed // add files : Input sources may be combined loop->addFile ("myFile1.root"); loop->addFile ("myFile2.root"); // .... loop->addFilesList("list.txt"); // add all files in ascii file list. list contains // 1 root file per line (including path) loop->addFiles("myFiles*.root"); // add all files matching this expression HZip::makeChain("all_files.zip",loop->getChain()); // add all root files contained // in zip file (this file has to // be produced by hzip) if(!loop->setInput("-*,+HParticleCand")) // global disable "-*" has to be first in the list { // read only one category from file (HEventHeader // is always on) exit(1); // Correct name for real data / sim data have to // be used here } loop->printCategories(); // print status from all categories in event //------------------------------------------------------------------------------------------

  10. TIterator* iterCand = 0; if(loop->getCategory("HParticleCand")) { iterCand = loop->getCategory("HParticleCand")->MakeIterator(); // standard HCategoryManager::getCategory(catParticleCand)->MakeIterator(); } HEventHeader* header = loop->getEventHeader(); // standard HEventHeader* header = gHades->getCurrentEvent()->getHeader(); //--------------------------CONFIGURATION------------------------------------- //At begin of the program (outside the event loop) HParticleTrackSorter sorter; //sorter.setDebug(); //sorter.setPrintLevel(3); //sorter.setRICHMatching(HParticleTrackSorter::kUseRKRICHWindow,4.); //sorter.setIgnoreInnerMDC(); //sorter.setIgnoreOuterMDC(); //sorter.setIgnoreMETA(); //sorter.setIgnorePreviousIndex(); sorter.init(); // get catgegory pointers etc... //----------------------------------------------------------------------------

  11. Int_t nFile = 0; for (Int_t i = 0; i < 10; i++) { if(loop->nextEvent(i) <= 0) break; // get next event. categories will be cleared before // if 0 (entry not found) or -1 (Io error) is // returned stop the loop TString filename; if(loop->isNewFile(filename)){ // new file opened from chain ? cout<<"new File found "<<filename.Data()<<endl; nFile++; } sorter.cleanUp(); sorter.resetFlags(kTRUE,kTRUE,kTRUE,kTRUE); // reset all flags Int_t nCandLep = sorter.fill(HParticleTrackSorter::selectLeptons); Int_t nCandLepBest = sorter.selectBest(HParticleTrackSorter::kIsBestRKRKMETA,HParticleTrackSorter::kIsLepton); Int_t nCandHad = sorter.fill(HParticleTrackSorter::selectHadrons); Int_t nCandHadBest = sorter.selectBest(HParticleTrackSorter::kIsBestRKRKMETA,HParticleTrackSorter::kIsHadron); if(iterCand){ iterCand->Reset(); HParticleCand* cand; while ( (cand = (HParticleCand*)iterCand->Next()) != 0 ){ // do some work .... } } } sorter.finalize(); // clean up stuff }

  12. HParticleCand HParticleCand HParticleCand HParticleDebug HParticleDebug HParticleDebug HParticleCal HParticleCal HParticleCal Flexible extension of DST output … 1st object 2nd object 3rd object • For special tasks additional objects can be stored in the same order in the DST output • Objects can be easily accessed by index • Even T->Draw(….) commands will work since objects are stored exactly parallel • DST output can be setup for example like: • Do 10% of files with Calibration info for monitoring • Parallel output files needed in Future ?

  13. Helper functions static TObjArray* HParticleTool::getMdcCal1Cluster(Int_t segind) static TObjArray* HParticleTool::getMdcCal1Seg(Int_t segind) static HMdcClus* HParticleTool::getMdcClus(Int_t segind) static HMdcClusFit* HParticleTool::getMdcClusFit(Int_t segind) static HMdcClusInf* HParticleTool::getMdcClusInf(Int_t segind, Int_t nhit = 0) static HMdcHit* HParticleTool::getMdcHit(Int_t segind, Int_t nhit = 0) static HMdcSeg* HParticleTool::getMdcSeg(Int_t segind) static HMdcTrkCand* HParticleTool::getMdcTrkCand(Int_t metaind) static TObjArray* HParticleTool::getMdcWireFitSeg(Int_t segind) static HMetaMatch2* HParticleTool::getMetaMatch(Int_t metaind) static HRichHit* HParticleTool::getRichHit(Int_t richind) static HRpcCluster* HParticleTool::getRpcCluster(Int_t rpcind) static HShowerHit* HParticleTool::getShowerHit(Int_t showerind) static HTofCluster* HParticleTool::getTofCluster(Int_t tofind) static HTofHit* HParticleTool::getTofHit(Int_t tofind)

  14. Things which are obvious how to use ... HMdcSeg HMdcHit HMdcClusInf HMdcClusFit HMdcWireFit TObjArray* HParticleTool::getMdcWireFitSeg(Int_t segind)

  15. Extended Event Display • Based on TEve of ROOT • OpenGL • Display Detector geometry taken from ROOT TGeomModeller • Helper classes implemented in libEventdisplay • User can easily modify displayed content by changing macros • Full event display for REAL and SIM Data • Display of HGEANT particles • Runge-Kutta tracking trough Detector using a magnetic Field map. Fit to reference points given by HGeant • TODO: • Pluto particles • ??? Requests welcome

  16. As easy as this …edit nextEvent.C HParticleCandSim* cand; Int_t size = particleCandCat->getEntries(); for(Int_t i = 0; i < size; i ++){ cand = HCategoryManager::getObject(cand,particleCandCat,i); if(cand){ HEDParticleCand* edcand = 0; Int_t s = cand->getSector(); // Fill all objects. Group them into different lists // Groups get different colors or line styles //--------------------------------------------------------- // Candidates accepted as leptons by HParticleTrackSorter // Full tracks with RICH and accepted after sorting if(cand->isFlagBit(kIsLepton)){ edcand = new HEDParticleCand(cand); edcand->SetLineColor(kRed); particlecandLep->AddElement(s,edcand); } //--------------------------------------------------------- //--------------------------------------------------------- // Ghost tracks get dashed lines if(edcand && cand->isGhostTrack()) edcand->SetLineStyle(7); //--------------------------------------------------------- } } // end loop particlecand

  17. Geometry display options can be modified via GUI • The event scene of the event display is defined inside a macro an be easily adopted to the user needs by non experts

  18. Thanks to the flexible event scene the user can easily modify the displayed contents

  19. New Batch farm • In spring 2012 a new batch farm will go into operation (see Walter’s talk) • The new farm will have new features • The operating system will be 64bit • 32bit execution is not supported any more • No user file systems will be mounted, only /lustre  stability reason • The user have to copy their scripts , parameter files etc to /lustre before submitting the job • The software will be distributed experiment specific using CVMFS  avoid bottle neck of parallel access • LSF will be replaced by Sun grid engine (SGE): batch scripts have to be adapted

  20. New Batch farm publish • Installation of the HADES software: • The software is build on lxbuild02.gsi.de and stored local /cvmfs/hades.gsi.de • After installation the software has to be published to enable the user access it • The publish command runs basically a rsync to the cvmfs server • From the server the software will be distributed to all hosts and seen as /cvmfs/hades.gsi.de lxbuild02.gsi.de /cvmfs/hades.gsi.de Cvmfs server lxb320.gsi.de lxb321.gsi.de distribute lxb322.gsi.de lxb323.gsi.de lxb324.gsi.de

  21. Old Batch farm • Debian etch (current system) • Very old • Out of support  security issue • Will be switched off at GSI January 2012 • Our situation: • Hydra2/HGeant2 will run on any new system • Old analyses of data taken 2005 and before requires old software versions • Solution: • Old batch farm will be switched to lenny64 • Old binaries (32bit compiled) will run without change • Programs can be recompiled under lenny32 (lennylust32.gsi.de) • Tests have been successful  we are ready to switch

  22. Replacement of Desktop machines • For the future the desktops should decoupled from the batch farm: the system installed does not any longer need to be the same • What about the machines which we use for our daily interactive work? • HADES needs interactive “batch type” machines which see the same software as the farm, but • Have the user file systems mounted • Standard ssh login with X support • Enough network IO capacity • Enough graphics power • Are not part of the batch queue • Are assigned to HADES exclusively • No desktop features like KDE etc • Our Desktops will become “X-terms” only • Last step: what about /misc user systems ? • Not needed to decide now

More Related