Download Ganga: LHCb analysis on the grid(*)

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
I am assuming a basic knowledge of LHCb Gaudi applications. However, even if you do not know them, you'll be able to blindly try some exercises.... :) !
Ganga: LHCb analysis on the grid(*)
(*)For dummies.... like me!
A. Sarti
Outline
Ganga
❏ The Grid and user access
❏ Introduction to Python programming
❏ Using (debugging? :)!) Ganga
❏ LHCb specific use cases
❏ MC production : Dirac script example ❏ Documentation
❏ Tutorials
❏
28/11/07 A. Sarti Scuola per utenti INFN della grid
Ganga
❏
An interface that provides – Easy switch between batch and Grid resources
– Hiding of the complexity in configuring jobs
– Bookkeeping
❏
Everything I'll say for lxplus/CERN should be valid for ui01­lcg/CNAF!
– If not: file a bug report! :)
28/11/07 A. Sarti Scuola per utenti INFN della grid
Ganga Architecture
GUI
Scripts
CLIP
Client
j = Job(backend='LSF')
j.submit()
GPI
Athena
Gaudi
Job
Repository
Ganga.Core
Monitoring
Plugin Modules
LSF
localhost
gLite
LCG2
DIRAC
DIAL
AtlasPR
28/11/07 A. Sarti Scuola per utenti INFN della grid
File Workspace
IN/OUT SANDBOX
How to access distributed resources
❏
Grid certificate
– This is what gives you a unique identification on the Grid.
• subject : /C=IT/O=INFN/OU=Personal Certificate/L=LNF/CN=Alessio Sarti/
CN=proxy
– At the basic level just 2 files in your ~/.globus directory.
❏
Grid proxy
– By sending a Grid proxy along with a job you allow computers for a limited time to act on your behalf.
• Running jobs at Tier centres
• Reading/writing files to remote storage
– You obtain a proxy for a finite time
• When a proxy expires jobs will fail, write operations terminate etc.
• Make sure your proxy is valid for longer than your job will last.
28/11/07 A. Sarti Scuola per utenti INFN della grid
How to access distributed resources
❏
Getting a Grid proxy
– You can only do this from a machine which is a “LCG user interface”.
– You turn the lxplus machines at CERN into an LCG UI by typing
• [asarti@ui01­lcg]~% GridEnv
– By default you get a proxy which is valid for 12 hours. You can change this by adding an option.
• [asarti@ui01­lcg]~% grid­proxy­init
– Your identity: /C=IT/O=INFN/OU=Personal Certificate/L=LNF/CN=Alessio Sarti
– Enter GRID pass phrase for this identity:
– Your proxy is valid until: Thu Jan 5 23:48:46 2006
• [asarti@ui01­lcg]~% grid­proxy­init ­valid 24:00
– Your proxy is valid until: Fri Jan 6 11:48:59 2006
– In Ganga this is not needed!
• No need of GridEnv
• Proxy automatically created when starting up (you can change validity as an option as well) 28/11/07 A. Sarti Scuola per utenti INFN della grid
How to access distributed resources
❏
Information about a Grid proxy
– From command line
• [asarti@ui01­lcg]$grid­proxy­info
• subject : /C=IT/O=INFN/OU=Personal Certificate/L=LNF/CN=Alessio Sarti/CN=proxy
• issuer : /C=IT/O=INFN/OU=Personal Certificate/L=LNF/CN=Alessio Sarti
• identity : /C=IT/O=INFN/OU=Personal Certificate/L=LNF/CN=Alessio Sarti
• type : full legacy globus proxy
• strength : 512 bits
• path : /tmp/x509up_u13005
• timeleft : 299:49:24 (12.5 days)
– While in ganga (see later!) you can
• In [3]:gridProxy.info()
• Out[3]: subject : /C=IT/O=INFN/OU=Personal
Certificate/L=LNF/CN=Alessio Sarti/CN=proxy
• issuer
: /C=IT/O=INFN/OU=Personal
Certificate/L=LNF/CN=Alessio Sarti
• etc etc etc
28/11/07 A. Sarti Scuola per utenti INFN della grid
Running Ganga
❏
LHCb account on lxplus/ui01­lcg
– Avoid GridEnv : conflicting paths!
– % GangaEnv
• At the list pick the release 4.4.2
–
–
–
–
–
% ganga
*** Welcome to Ganga ***
Version: Ganga-4-1-0-beta4
Documentation and support: http:/cern.ch/ganga
Type help() or help('index') for online help.
You will be asked few questions. Answer “yes” by pressing ENTER.
❏ GRID certificate: type your password or press Control­D several times.
❏ To quit press Control­D at the interactive prompt
❏
– In[1]: ^D
– Do you really want to exit ([y]/n)?
28/11/07 A. Sarti Scuola per utenti INFN della grid
Ganga prompt
Ganga is based on python 2.2 and has an enhanced python prompt (Ipython):
❏ Python programming/scripting
❏
– myvariable = 5
– print myvariable*10
❏
Easy access to the shell commands
– !less ~/.gangarc
– !pwd
# personal config file
History <arrow up>
❏ TAB completion
❏
– works on keywords, variables, objects, try: my<TAB>
❏
Many more features
28/11/07 A. Sarti Scuola per utenti INFN della grid
.gangarc file
File kept in your $home
❏ Should be used to override the configuration defaults. Ex:
❏
– [FileWorkspace]
• topdir = /opt/exp_software/lhcb_user/asarti/scratch0/gangadir
– [GridProxy_Properties]
• # Proxy validity at creation (hh:mm): #validityAtCreation = 300:00
• # Minimum proxy validity (hh:mm), below which new proxy needs to be created: #minValidity = 75:00
• # Number of password attempts allowed when creating proxy: #maxTry = 1
– [ROOT]
• # configuration of where to find ROOT on the local system and which version to use by default.
• #location = /afs/cern.ch/sw/lcg/external/root/
• #version = 5.12.00
• #arch = slc3_ia32_gcc323
28/11/07 A. Sarti Scuola per utenti INFN della grid
Python: Statements, Variables









x = 2
print x*3 # This is a comment!
if x==2:
print "yes, x==2" # NOTE INITIAL SPACES!
Alist = [1,2,3]
for y in alist:
print y
print len(alist) # built-in function len
help(len)
I hope you have your favourite editor set up with proper configuration to help you with python editing / spacing!
28/11/07 A. Sarti Scuola per utenti INFN della grid
Python: Functions









print range(11)
help(range)
def square(v):
return v*v
print square(x)
alist = [1,2,3]
for i in range(len(alist)):
alist[i] = square(alist[i])
blist = [square(x) for x in alist]
28/11/07 A. Sarti Scuola per utenti INFN della grid
Python: Modules
import sys
print sys.argv
import os
print os.environ['HOME']
from os import environ
from os import *
import math, cmath
print math.cos(math.pi)
math.log(-1)
# exception
28/11/07 A. Sarti Scuola per utenti INFN della grid
Python: Modules
❏ Very large number of Python modules available.
❏ Check if somebody else has written it before you go ahead.
❏ Python documentation is excellent.
❏ http://www.python.org
use version 2.2 of documentation
28/11/07 A. Sarti Scuola per utenti INFN della grid
Python: Classes and Objects
# user defined classes
a = MyClass(2,3)
a.my_method(1)
#built-in classes: for example strings
s = "Hello Tutorial" # double quotes
s.split()
s.count('a')
s.upper()
dir(s)
if 'Tut' in s: print 'Tut is in ',s
print '-'*20 # single quotes
28/11/07 A. Sarti Scuola per utenti INFN della grid
Python: Files
# file objects
f = file('/etc/password')
lines = f.readlines()
print len(lines)
# writing files
f2 = file('testfile','w')
print >> f2, “This is a test”,20*'-'
f2.close()
dir(f)
28/11/07 A. Sarti Scuola per utenti INFN della grid
The components of Ganga
❏
Applications
– These are objects that know about the type of application you run
• Simple executable, Gauss job, ...
❏
Backends
– Objects that know about the places you can execute your job, data transfer, requirements etc
❏
Job
– This is the basic object you interact with.
– You create a “Job” by combining an application with a backend: “A DaVinci job to run on the LSF batch system”
❏
Most of them can be accessed by typing 'plugins' in the CLIP @ login...
28/11/07 A. Sarti Scuola per utenti INFN della grid
Ganga Scripting
Job Objects and Job Registry
j = Job()
print j
print j.application
print j.backend
# job registry: a list of all your jobs
jobs
jobs(1)
28/11/07 A. Sarti Scuola per utenti INFN della grid
Jobs
In [26]:J = Job()
In [27]:print J
Job ( status = 'new' , name = '' ,
inputdir = '/opt/exp_software/lhcb_user/asarti/scratch0/gangadir/Local/102/input/' ,
outputdir ='/opt/exp_software/lhcb_user/asarti/scratch0/gangadir/Local/102/output/' ,
outputsandbox = [] ,
id = 102 ,
info = JobInfo ( submit_counter = 0 ) ,
inputdata = None ,
merger = None ,
inputsandbox = [ ] ,
application = Executable ( exe = 'echo' , env = {} , args = ['Hello World'] ) ,
outputdata = None ,
splitter = None ,
subjobs = [ ] ,
backend = Local (actualCE = None , workdir = None , id = None , exitcode = None )
)
28/11/07 A. Sarti Scuola per utenti INFN della grid
Job creation and submission
[In:] j = Job()
[In:] j.application.exe = '/bin/hostname'
[In:] j.name = "MyTest"
[In:] print j
[In:] j.submit()
# wait until job is completed and look
# at the output directory
[In:] print j.status
[In:] print j.outputdir
[In:] !ls $j.outputdir
[In:] !cat $j.outputdir/stdout
# the ! and $ syntax is IPython – you cannot do it # in normal python it is useful for interactive work
# instead of mouse copy­paste
28/11/07 A. Sarti Scuola per utenti INFN della grid
More on job submission
# once a job is submitted you cannot modify
# it. if you want to submit a new job you
# should create a new job object
[In:] j2 = j.copy()
[In:] j2.backend = LSF()
[In:] j2.submit()
# if you have GRID certificate you can try
[In:] j3 = j.copy()
[In:] j3.backend = LCG()
[In:] j3.submit()
# try jobs to see all your jobs
28/11/07 A. Sarti Scuola per utenti INFN della grid
More on job submission (II)
# see predefined plugins
#
plugins("applications")
plugins("backends") help('index')
# submission in a loop
for i in range(5):
j = Job() j.application.exe="/bin/echo"
j.application.args=["hello ",str(i)])
print j.id, j.inputdir
print j.submit()
28/11/07 A. Sarti Scuola per utenti INFN della grid
Getting organised with many jobs
❏
Ganga has logical folders organised in the jobtree
– Very similar to symbolic links in a file system.
• A job can be in several places e.g:
– folder ‘FailedJobs’, folder ‘GaussJobs’, folder ‘TutorialJobs’
• Example:
– Create some Jobs (j = Job())
– Crate several jobtree directories : jobtree,mkdir(“a”); jobtree2,mkdir(“b”); etc etc
– Add the various jobs to different subdirs jobtree.cd(“a”) and jobtree.add(job)
# Available methods for dir(jobtree)
Out[85]: ['add', 'cd', 'cleanlinks', 'copy', 'exists', 'find', 'getjobs', 'isdir', 'listdirs', 'listjobs', 'ls', 'mkdir', 'name', 'printtree', 'pwd', 'rm']
28/11/07 A. Sarti Scuola per utenti INFN della grid
Templates
# For frequently used jobs – use templates!
t = JobTemplate(j3)
t.name = ‘MyTemplate’
# Persisted across sessions
print templates
j = Job(templates[1]) # By ID
j2 = Job(templates[‘MyTemplate’][0]) # By name
# Other useful methods
j.kill()
j.remove() # Removes the output as well!
for j in jobs: j.kill()
jobs.clean() # Faster! Deletes ALL jobs.
28/11/07 A. Sarti Scuola per utenti INFN della grid
Exporting and loading jobs
You can export jobs (and any other Ganga object) to simple text files.
# Export a job
export(j,'job.txt')
!cat job.txt
❏
#Ganga# File created by Ganga ­ Fri Jan 6 17:06:00 2006
#Ganga# Job object (category: jobs)
Job ( name = 'Tag' ,.... You can then keep, edit, distribute these files. – Not a replacement for the repository!
❏ Jobs are trivial to load again.
– Exporting a job and loading it again afterwards is equivalent to making a copy of the job.
❏ Load a job: load('job.txt'). To check the newly loaded job use jobs() command inside ganga
28/11/07 A. Sarti Scuola per utenti INFN della grid
ganga & LHCb jobs
For LHCb the main use of Ganga is for running Gaudi jobs. ❏ This includes:
❏
– Configuring Gaudi jobs
• Forget setenv CMTPATH, source setup.sh, etc.
– Specify the datasets
– Run the jobs locally, on batch systems and on the Grid via Dirac
– Managing the output data, Ntuples and histogram files.
❏
ROOT jobs are currently supported as well!
– Specify root version
– Specify input macros, libraries, ....
❏
Before creating/submitting jobs for a given Gaudi Project and AFTER having obtained the ganga environment setup remember from in(out)side ganga to obtain the proper configuration for your gaudi application (setenvXXX and source setup.csh...)
28/11/07 A. Sarti Scuola per utenti INFN della grid
Intresting backends for LHCb
❏
There are 3 backends of direct interest:
– Local : Jobs runs in the background on the client
– LSF : Jobs are submitted to the LSF batch system (if available)
– Dirac : Jobs are submitted to the Grid via Dirac
❏
LCG of course is available BUT not supported! ❏
Ex: Dirac backend
– # Define a Dirac backend object
– d = Dirac()
– print d
• Out[34]: Dirac (status = None , actualCE = None , id = None , CPUTime = 86400 )
28/11/07 A. Sarti Scuola per utenti INFN della grid
Putting together a Gaudi job
To put together and submit a job is simply matter of combining the three main different parts: options, application, backend.
❏ Example:
– # Put together an LHCb job and submit
– j = Job(name='MyJob',application=g, backend=d)
– print j
• Out[38]: Job (status = 'new' , name =
'MyJob' , application = Gauss (...), backend
= Dirac (...) ...)
– j.submit()
❏
28/11/07 A. Sarti Scuola per utenti INFN della grid
The Gaudi application handler
There is a specific application handler for each Gaudi application:
– ['Boole', 'Brunel', 'DaVinci', 'Gauss']
– Ex: Gauss job
• # Define a Gauss application object
• g = Gauss()
– Check with print g the default
• g.extraopts='ApplicationMgr.EvtMax = 10 ;'
• g.optsfile=g.cmt_user_path+ 'Sim/Gauss/v22r0/options/
myopts.opts'
– Check with print g the overwritten options
28/11/07 A. Sarti Scuola per utenti INFN della grid
Example: Gauss Job
• In case you want to run # Look at the object
several different Gauss print g
jobs it is possible to use Out[31]: Gauss (
the GaussSplitter:
– GaussSplitter( number
version = 'v22r0' ,
OfJobs = 50 , extraopts = 'ApplicationMgr.EvtMax = 10 ;' ,
eventsPerJob = package = 'Sim' ,
3000 )
cmt_user_path = '/afs/cern.ch/user/u/ – Jobs have all the same uegede/public/cmtTutorial' ,
runnumber (but masterpackage = 'Sim/Gauss/v22r0' ,
different Evt num)!
• Use the splitter with optsfile = File (name = backend != Dirac
'.../Gauss/v23r0/options/myopts.opts' ,
• In case you don't want to subdir = '.'
split the job put )
– mySplitter = None )
28/11/07 A. Sarti Scuola per utenti INFN della grid
Analysis job
❏
DaVinci job. Like in gauss you can specify:
– Software versions
– Private packages
• dv.getpack('Tutorial/Analysis v5')
– Options
– Datasets
• You can either provide your dataset in your option files (check the correct LFN syntax for the grid) or use the ganga utilities to handle the dataset (see later...)
DaVinci (
extraopts = None ,
package = 'Phys' ,
masterpackage = None ,
version = 'v19r8' ,
configured = 0 ,
cmt_user_path = '/opt/exp_software/lhcb_user
/asarti/software' ,
optsfile = File (
name = '' ,
subdir = '.'
)
)
28/11/07 A. Sarti Scuola per utenti INFN della grid
Do it all from Ganga
# Define application and get code
dv = DaVinci()
dv.cmt_user_path = '/afs/.../public/cmtTest'
dv.masterpackage='Tutorial/Analysis/v5'
dv.getpack('Tutorial/Analysis v5')
< edit your files and options >
dv.optionsfile='/afs/.../myAnalysis.opts'
dv.make() # Build code
# Create job and submit
j = Job(name='DaVinciTest', application=dv,
backend=Dirac())
j.submit()
28/11/07 A. Sarti Scuola per utenti INFN della grid
Data on the Grid: A Typical LFN
/lhcb/production/DC06/phys­v2­
lumi2/00001760/DST/0000/00001760_00000310_5.dst
❏ From the bookeeping page (http://lhcbbk.cern.ch/BkkWeb/Bkk/
welcome.htm) you typically get:
– EventSelector.Input = { "DATAFILE='LFN:/lhcb/production/DC06/phys­v2­lumi2/00001760/
DST/0000/00001760_00000001_5.dst' TYP='POOL_ROOTTREE' OPT='READ'" };
– Replicas should exist at least in 1 site(s):
❏
•
CNAF_Castor , Cambridge_DISK , PIC_Castor ,CERN_Castor
Should a user be concerned with how to use the same dataset at different sites?
– NO! ganga & Dirac can help the user specifying and getting the input data....
28/11/07 A. Sarti Scuola per utenti INFN della grid
33
Providing Access to Input Data
❏
Logical File Names (LFNs)
– Unique identifier on the Grid
– Namespace starts with /lhcb/
Physical File Names (PFNs)
Can have many PFNs per LFN
• Corresponding to replicas of file at different sites
To use data on the Grid it must be registered on the Grid
At least one replica must exist in the LCG File Catalogue ❏ DIRAC automatically translates LFNs into the appropriate PFNs for a given site and feeds this information to the application
– Grid (DIRAC) users need only know LFNs
– ganga uses LHCbDataFile and LHCbDataset to handle/check the data files and corresponding jobs.....
❏ How to get the LFNs ? Bookkeeping Page!

28/11/07 A. Sarti Scuola per utenti INFN della grid
34
Dataset Handling
❏
Check dataset replicas BEFORE submitting jobs (prevent loosing time waiting for dataset to be ready / job doomed)
– ds = LHCbDataset(files=list)
– ds.updateReplicaCache()
• LHCbDataFile (name = 'LFN:/lhcb/production/DC06/phys­v2­
lumi2/00001760/DST/0000/00001760_00000306_5.dst' ,replicas = ['NIKHEF­disk', 'GRIDKA­disk', 'RAL­disk', 'IN2P3­disk', 'CERN­
disk'] )
goodlist=[]
– If your datasets is large badlist=[]
• you can ask to split the main job in for df in ds.files:
subjobs defining the number of files for if len(df.replicas)==0:
each jobs and the maximum number of badlist.append(df)
files you want to run. else:
•mySplitter = SplitByFiles ( filesPerJob = 10, maxFiles = 1000 )
print df goodlist.append(df)
28/11/07 A. Sarti Scuola per utenti INFN della grid
Execution and finalisation
❏
The progress of a job is monitored by Ganga
– Looking at the overview (jobs) or the status field for the backend will show the current status.
– Inside ganga: jobs()
– Outside ganga, can use a 'script': ganga query
❏
When job is finished the outputdir will contain:
– The stdout and stderr of the job
– Any histogram files produced or output files requested!
❏
Ntuple and DST files are stored in a storage element on the Grid (as any other output files exceeding 10 MB dimension).
– At CERN/CNAF use the nsls command to inspect the content of your Castor area:
• nsls $CASTOR_HOME
28/11/07 A. Sarti Scuola per utenti INFN della grid
Few remarks about running DIRAC
❏
>90% of what you'd like to do can be safely done using ganga.
– 100% if you're a little bit smart with python
❏
Why using Dirac directly to submit jobs?
– You can find nice features if you want to run MC production [of small samples _of course_!!!! Otherwise go and ask for a general 'official' production]
• The Job object has an additional 'feature': possibility to have some 'Steps' attached.
• Sequential jobs is easily built and submitted. – Needs just python and 'DiracEnv' before.....
28/11/07 A. Sarti Scuola per utenti INFN della grid
Example Production Script
from DIRAC.Client.Dirac import *
dirac = Dirac()
job = Job()
step1 = Step()
step1.setApplication('Gauss', 'v19r4')
step1.setInputSandbox(['Application_Gauss_v19r4/Gauss.opts'])
step1.setOutputSandbox(['Gauss.hbook', 'Gauss_v19r4.log'])
step1.setOption(''' ApplicationMgr.OutStream += {''GaussTape''};
GaussTape.output = DATAFILE='PFN:Gauss.sim' TYP='POOL_ROOTTREE' OPT='RECREATE' ''; ''')
job.addStep(step1)
Can add multiple user defined
step2 = Step()
steps for Gauss, Boole, Brunel
step2.setApplication('Boole', 'v8r4')
and DaVinci
step2.setOption(''' EventSelector.Input={
'' DATAFILE='PFN:Gauss.sim' TYP='POOL_ROOTTREE' OPT='READ' ''}; ''')
job.addStep(step2)
jobid = dirac.submit(job,verbose=1)
print "Job ID = ",jobid
28/11/07 A. Sarti Scuola per utenti INFN della grid
38
Example Script for Output Retrieval
from DIRAC.Client.Dirac import *
import sys
dirac = Dirac()
jobid = sys.argv[1]
dirac.getOutput(jobid)
Note that all the DIRAC
API commands described
here may also be executed
directly from the Python
prompt.
 If additional software packages are required
 job.addPackage('XmlDDDB','v25r0')
 Output data to be placed in Grid storage can be specified
 job.setOutputData(['DataFile.dst'])
 This is automatically stored according to LHCb conventions in an LFN of the following form
 /lhcb/user/<INITIAL>/<USER>/<JOBID>/<FILE>
28/11/07 A. Sarti Scuola per utenti INFN della grid
39
More Additional Features
❏ Jobs can be rescheduled in the DIRAC WMS
– Triggers resubmission to LCG
dirac.reschedule(JobID)
❏ Can add multiple lines to be appended to the options file of the application directly, through the API
job.setOption('''''' ApplicationMgr.DLLs+={''DaVinciTest''}; ApplicationMgr.TopAlg+={''PrimVertAnalysis''};
ApplicationMgr.EvtMax = 10000; '''''')
28/11/07 A. Sarti Scuola per utenti INFN della grid
40
Ganga and DIRAC APIs
❏
Ganga and DIRAC both provide Application­Programmer Interfaces (APIs) in Python
– For users familiar with submitting jobs to a batch system using bsub myScript or similar, having to learn a new language to submit Grid jobs may seem excessive
– Even persistent users will quickly tire of having to type everything at the (I)Python prompt, and having to retype because of syntax errors
❏
One solution is to use scripts (see next slides)
❏
Another solution is a Graphical User Interface (GUI): point and click without worrying about syntax
28/11/07 A. Sarti Scuola per utenti INFN della grid
41
Ganga scripts (1)
From the command line, a Python script myScript.py can be executed in the Ganga environment using:
ganga myScript.py
❏ Ganga makes available simple scripts allowing submission of Grid jobs from the command line:
❏
# Create a job for submitting Gauss to DIRAC
ganga make_job Gauss DIRAC test.py
[ Edit test.py to set Gauss properties ]
# Submit job
ganga submit test.py
# Query status, triggering output retrieval if job is completed
ganga query
28/11/07 A. Sarti Scuola per utenti INFN della grid
42
Ganga scripts (2)
❏
Given Ganga job name or id, as returned by query, also have possibilities such as:
# Kill job
ganga kill id
# Remove job from Ganga repository and workspace
ganga remove id
Running jobs on the Grid no more complicated than running jobs on a local batch system(*)
(*) Maybe some day you'd like to comment about that statement
28/11/07 A. Sarti Scuola per utenti INFN della grid
43
Ganga GUI (1)
Ganga GUI is under development
❏ Built on top of Ganga’s Python API, so doesn’t always offer fully up­
to­date functionality
❏
– Synchronisation for public (non­beta) releases
– Current best version of GUI in Ganga 4.4.3
❏
GUI based on dockable windows:
–
–
–
–
Monitor: shows status of user jobs
Job builder: provides for job definition
Scriptor: allows execution of any Python/Ganga commands
Logger: displays messages from Ganga
Windows can be docked, floated or hidden
❏ Start the GUI with ­­gui option @ run time.....
❏
28/11/07 A. Sarti Scuola per utenti INFN della grid
44
Ganga GUI: default view
Logger
Scriptor
Job builder
28/11/07 A. Sarti Scuola per utenti INFN della grid
45
Hints
❏
Subscribe ASAP to distributed analysis mailing list!
❏
Try ganga ­h to see options
❏
Use help() and dir() inside ganga
❏
Get used to using scripts and templates.
– Will save lots of typing and errors in the future.
❏
Learn ASAP the splitters and LHCbData* utilities wonders
– Your life inside LHCb analysis world will be easier
❏
Have a look also in the config file: ~/.gangarc
– Many default settings can be changed if required.
28/11/07 A. Sarti Scuola per utenti INFN della grid
Documentation
❏
Ganga Web Site:
– http://cern.ch/ganga
❏
Ganga Tutorial
– General getting started guide
– LHCb specific documentation
❏
Python Website:
– http://www.python.org ­ use version 2.2 of documentation
❏
Excellent Python Tutorial:
– http://docs.python.org/tut/tut.html
❏
Other resources:
– IPython page:
• http://ipython.scipy.org/
❏
ganga mailing list:
– https://mmm.cern.ch/public/archive­list/l/lhcb­distributed­analysis/
– lhcb­distributed­[email protected]
28/11/07 A. Sarti Scuola per utenti INFN della grid