CMS Software:
The Basic Tools
Nicola Amapane
Tommaso Boccali (SNS Pisa)
Torino, 14-16 Aprile 2003
Outline
• Dove è il codice?
• Come compilo?
• Come eseguo?
• Come trovo la documentazione?
• Come scrivo ntuple, o ROOT files?
Parleremo di ORCA,
ma lo stesso vale anche per gli altri progetti!
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
2
SCRAM è la chiave di tutto
Software Configuration, Release And Management
Gestisce:
– Ambiente
• Configurazione di tool e librerie esterne
• Inizializzazione variabili di ambiente
• Path di eseguibili e librerie a runtime
– Compilazione e link
• Opzioni di compilazione, compilatori
• Dipendenze e ricompilazione parziale
• Link delle librerie corrette
Documentazione: da
http://cmsdoc.cern.ch/cmsoo/cmsoo.html
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
3
SCRAM: i primi passi
• Aiuto:
scram help
• Elencare i progetti e le versioni diponibili:
scram list
scram list [project]
• Creare l’ambiente impostando tutte le dipendenze ed i tool
per una versione di un certo progetto (ORCA, OSCAR…):
scram project <project> <version>
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
4
Creare un’area ORCA
• Esempio: usare il più recente prerelease di ORCA:
scram project ORCA ORCA_7_2_0_pre13
Viene creata la directory “ORCA_7_2_0_pre13” con alcune
sottodirectory:
.SCRAM/, config/
tmp/
lib/
bin/
src/
mantengono la configurazione di SCRAM
directory di lavoro di SCRAM
conterrà le librerie compilate
conterrà gli eseguibili
conterrà il codice
• Voi utilizzerete solo src/
– Il resto è gestito automaticamente!
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
5
src/, lib/, bin/
…inizialmente sono vuote!
• Esiste una “release area” centrale con tutto il codice e le
librerie precompilate per una data versione.
• Dovete scaricare solo il codice che volete modificare
– Durante la compilazione, gli header vengono presi dalla repository
se non sono presenti sotto src/
– Durante il link ed a runtime, le librerie vengono prese dalla
repository se non sono presenti sotto lib/
– Quando compilate, le librerie sono create automaticamenrte sotto
lib/ e gli eseguibili sotto bin/
Don’t worry - SCRAM si occupa di questo per voi!
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
6
Struttura del codice
• ORCA è strutturato a SubSystems e Packages, a tre livelli
– E’ necessario per gestire le dipendenze fra pacchetti
– A questa struttura corrisponde 1:1 una struttura di directory
– Per ogni package viene creata una libreria!
ORCA
SubSystem 1
Package 2
Package 1
Package 3
N. Amapane, T. Boccali
SubSystem 1
SubSystem 1
Package 1
Package 2
Package 3
Torino, 14-16 Aprile 2003
Package 1
Package 2
7
I Subsystem di ORCA
http://cmsdoc.cern.ch/cmsoo/cmsoo.html
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
8
All’ interno di ogni pacchetto c’è un’ulteriore struttura:
• interface/
contiene l’interfaccia delle classi, è la sola informazione
importante per un developer che debba utilizzarle.
• src/
Contiene l’implementazione delle classi, (da guardare per
modificare o per capire meglio l’algoritmo usato)
• test/
contiene codice utile per testare il package, esempi, ecc.
• doc/
documentazione del pacchetto (!)
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
9
Scaricare il codice
• CVS (Concurrent Versions System) è un tool che permette
lo sviluppo parallelo del codice da parte di più persone
– Ognuno lavora su una copia personale
– Si possono recuperare le modifiche fatte da altri e rendere
disponibili le proprie
– Mentre il software è in continua evoluzione, è possibile “congelare”
una versione funzionante e stabile e darle un nome (TAG)
• Per iniziare: indicare dove è la “repository”
– In CMS abbiamo due facili script per fare questo, a seconda che voi
siate registrati come developer oppure no:
• Developers (read/write access): project ORCA
• non developers: cmscvsroot ORCA; cvs login
la password è “98passwd”
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
10
CVS checkout
Per scaricare il pacchetto XXX/YYY
cvs co –r <tag> <file o directory>
– Viene scaricato nella directory corrente!
• Dovete assicurarvi di mettere i pacchetti nel posto giusto
– Esistono delle convenzioni sui nomi dei tag
• e.g. “ORCA_7_1_1” o “ORCA_7_2_0_pre13”
– Se non si specifica –r <tag> viene presa la versione più recente di
ogni file
• Che tipicamente non funziona!
Provate con il tag ORCA_7_2_0_pre13 di MuonAnalysis/MuonTutorial
– Attenzione a rispettare la struttura delle directory: dovete avere
ORCA_7_2_0_pre13/src/MuonAnalysis/MuonTutorial
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
11
CVS
Altre funzionalità:
• cvs diff
– Diff fra la propria versione e la repository
• cvs log
– Storia delle modifiche nella repository
• cvscheck
– Quali file sono cambiati?
• cvs commit
– Inserire le proprie modifiche nella repository
http://www.cvshome.org/docs/
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
12
Compilazione
• Molto complicato!
–
–
–
–
Diversi sistemi (SUN, Linux RH6, Linux RH7)
Quali opzioni di compilazione?
Dove prendo i pacchetti che non ho scaricato?
Tool esterni: dove? quale versione?
• CLHEP, GEANT, ROOT, Objectivity, COBRA, IGUANA...
Meno male che ci pensa SCRAM!
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
13
Ad-interim!
In questo momento sono in corso due importanti transizioni:
– RedHat 6  RedHat 7
• ORCA dalla versione 7 in poi è sviluppata solo su RedHat 7
– gcc 2.95.2  gcc 3.2
• La prima è ancora default ma verrà abbandonata presto
• Noi stiamo guardando ORCA_7_2_0_pre13 e vogliamo gcc3:
setenv SCRAM_ARCH Linux__2.4/gcc3
eval `scram runtime –csh`
– Quest’ ultimo comando imposta tutte le variabili di ambiente
necessarie anche per la corretta esecuzione di un job!
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
14
Compilazione
• Per compilare si usa semplicemente:
scram build (oppure scram b)
– Compila tutti i pacchetti che trova nella directory corrente e sue
sottodirectory:
ORCA_7_2_0_pre13/src/MuonAnalysis/MuonTutorial/src
Da qui compila tutto
quello che avete scaricato
Da qui tutti i pacchetti
di MuonAnalysis
Da qui solo
MuonAnalysis
– In ogni pacchetto, viene creata una libreria usando tutti i file src/*.cc
– Provate a compilare MuonTutorial!
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
15
Compilazione
Beh, non succede nulla!
– SCRAM si è accorto che non avete cambiato nulla rispetto alla
release area, e allora perché ricompilare?
• Facciamo touch di un file .cc in src/, e riproviamo.
touch MuonTrackPrinter.cc
scram b
• Ora questo file viene ricompilato e la libreria ricreata!
– Andando a vedere in lib/, dovrebbe essere apparsa la libreria!
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
16
Pulizia!
• Se volete eliminare tutto quello che avete compilato
scram b clean
– Cancella tutti gli oggetti intermedi (.o)
– E’ utile se si fanno grossi pasticci…
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
17
Eseguibili
• Ok, la libreria è compilata. Ma come creo un programma
eseguibile?
• Il main ci è fornito da COBRA (il framework).
– Noi non creeremo (quasi) mai un main() alla C++, che abbia il
controllo flusso del programma
– Il nostro codice è in una libreria che viene caricata a runtime
• Dobbiamo chiedere a COBRA:
– Di istanziare le nostre classi: usando PKBuilder<class>
– Di chiamare alcuni metodi quando appropriato: usando il
meccanismo di Dispatcher/Observer
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
18
Linking
• Per creare un eseguibile devo fare il “link” della mie classi
con:
–
–
–
–
–
–
–
il framework
l’API dei database
la geometria
la ricostruzione
il sistema grafico
le librerie matematiche
Ecc. ecc.
• Anche qui ci aiuta SCRAM, ma ha bisogno di istruzioni:
il BuildFile
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
19
Il BuildFile
Serve ad “aiutare”
scram specificando
quali librerie devono
essere linkate.
<environment>
<group name=G3>
<group name=RecReader>
<External ref=COBRA Use=CARF>
<group name=MuonReconstruction>
<use name=MuonReco>
<group name=L1GlobalMuon>
<use name=Trigger>
<group name=MuonTrackFinder>
<use name=Muon>
<use name=CommonReco>
<use name=CommonDet>
<External ref=COBRA Use=Utilities>
<External ref=COBRA Use=MagneticField>
<lib name=MuonTutorial>
<bin file=printMuonTracks.cpp></bin>
</environment>
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
20
Il BuildFile
Un environment definisce le
librerie per un eseguibile, in
questo caso quello creato a
partire da printMuonTracks.cpp,
specificato nella direttiva <bin>
<environment>
<group name=G3>
<group name=RecReader>
<External ref=COBRA Use=CARF>
<group name=MuonReconstruction>
<use name=MuonReco>
<group name=L1GlobalMuon>
<use name=Trigger>
<group name=MuonTrackFinder>
<use name=Muon>
<use name=CommonReco>
<use name=CommonDet>
<External ref=COBRA Use=Utilities>
<External ref=COBRA Use=MagneticField>
<lib name=MuonTutorial>
<bin file=printMuonTracks.cpp></bin>
</environment>
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
21
Il BuildFile
Le direttive <External>
specificano che abbiamo
bisogno di librerie non
appartenti a ORCA
<environment>
<group name=G3>
<group name=RecReader>
<External ref=COBRA Use=CARF>
<group name=MuonReconstruction>
<use name=MuonReco>
<group name=L1GlobalMuon>
<use name=Trigger>
<group name=MuonTrackFinder>
<use name=Muon>
<use name=CommonReco>
<use name=CommonDet>
<External ref=COBRA Use=Utilities>
<External ref=COBRA Use=MagneticField>
<lib name=MuonTutorial>
<bin file=printMuonTracks.cpp></bin>
</environment>
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
22
Il BuildFile
<lib> e <group>
specificano di linkare
librerie o gruppi di librerie
<use> specifica di
cercare le definizioni dei
gruppi in altri subsystem
<environment>
<environment>
<group
name=G3>
<External ref=Objectivity>
<group name=RecReader>
<External ref=HepODBMS>
<External ref=COBRA Use=CARF>
<Group name=G3>
<group name=MuonReconstruction>
<External ref=COBRA
<use
name=MuonReco>
Use=GeneratorInterface>
<group
name=L1GlobalMuon>
<group name=TkTrackWriter>
<use
name=Trigger>
<group
name=TrackAnalysis>
<lib name=TkRecoDebugTools> </lib>
<group
<use name=MuonTrackFinder>
name=TrackerReco>
<use name=Muon>
<use
name=CommonReco>
<External
ref=COBRA Use=MagneticField>
<use name=CommonDet>
<External
ref=COBRA Use=Utilities>
<group name=RecReader>
<External
ref=COBRA
<External
ref=COBRA Use=MagneticField>
Use=CARF>
<lib
name=MuonTutorial>
<External
ref=COBRA Use=Utilities>
<bin
file=TrackPersistentTest.cpp></bin>
<bin
file=printMuonTracks.cpp></bin>
</environment>
</environment>
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
23
Linking
• Normalmente gli eseguibili ed i relativi BuildFile sono messi
nella directory test/ di ogni pacchetto.
• Per crearli basta andare in questa directory e fare
scram b
• L’eseguibile viene messo in bin/, che scram ha aggiunto al
vostro path!
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
24
Pacchetti “speciali”
Alcune importanti eccezioni alla struttura che ho descritto:
• Examples
– Questo subsystem contiene molti esempi e programmi di uso
comune per la produzione di eventi (ExProduction)
– I pacchetti di Examples non hanno le sottodirectory interface/, src/,
test/
– Li useremo anche noi!
• Workspace
– Questo “subsystem” non ha pacchetti nè sottodirectory. Contiene
una struttura semplice che potete usare per dei test veloci
– Provate a scaricarlo e compilarlo!
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
25
Esecuzione
• Coraggio, mancano solo 2 passi:
• configurare l’ambiente runtime (path, variabili d’ambiente)
eval `scram runtime –csh` (lo avete già fatto!)
rehash (se il vostro eseguibile è stato creato dopo il comando
precedente)
• Fornire opzioni all’eseguibile e al framework
– con il file .orcarc nella directory di esecuzione
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
26
.orcarc
Verbose:test = 0
opzioni che controllano la
“verbosita’” del codice; abilitano
dei printout di debug/info etc.
CMSRandom:Seeds = 40 3
Numero random iniziale
(importante per la riproducibilita’)
Verbose:info = 1
FirstEvent = 0
MaxEvents
= 20
Da quale evento cominciare
quanti eventi processare
FilePath = suncmsc:/data/valid/ORCA_7_2_0_pre13
FileProtocol = rfio
InputCollections =
/System/NoPileUpTk/single_muminus_pt50/single_muminus_pt50/
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
27
Come si specificano i campioni?
• FilePath
– Se non specificato, usa la directory corrente
– Può essere una directory locale, eg.
FilePath = /data/ORCA_7_2_0
– o remota a cui si accede via RFIO
FileProtocol = rfio
FilePath = suncmsc:/data/valid/ORCA_7_2_0_pre13
oppure
FilePath = /castor/cern.ch/user/U/USERNAME/tutorial
• InputCollections
InputCollections =
/System/NoPileUpTk/single_muminus_pt50/single_muminus_pt50/
OWNER
(e.g. per diverse
luminosità)
N. Amapane, T. Boccali
DATASET
Torino, 14-16 Aprile 2003
Tutto il dataset
(oppure un solo run,
una collezione)
28
Sì ma dove li trovo?
• A regime, su:
http://cmsdoc.cern.ch/cms/production/www/html/general/index.html
• Attualmente, ci sono solo campioni scritti su Objectivity/DB
– I campioni usati per il DAQ TDR
– Usabili sono con ORCA 6 
• Esistono dei campioni di prova per ogni (pre)release di
ORCA 7
FilePath = suncmsc:/data/valid/<ORCA_VERSION>
– Potete accederci con RFIO (rfdir, rfcp)
– Esiste uno script per fare la lista dei dataset (rfdumpcatalog)
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
29
Workspace: ExRunEvent
• Esempio elementare: contiamo gli eventi!
– In realtà meno di quanto sembri, dato che analizzaremo eventi con
pile-up.
– per ogni evento di segnale, quanti eventi di pile up ci sono?
• Guardiamo l’esempio in Workspace
– La nostra classe è un Observer<G3EventProxy*>, cerchiamo
G3EventProxy nella documentazione di COBRA:
http://cobra.web.cern.ch/cobra/COBRA_7_2_0/doc/ReferenceManual/html/classes.html
– Troviamo, fra l’altro, il metodo G3EventProxy::pileups()
– Ad ogni evento di pile-up (SimPU) possiamo chiedere
id().eventInRun() e id().runNumber()
– Lo stesso possiamo chiedere all’evento di trigger (SimSignal)
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
30
Proviamo!
• Avete gia’compilato Workspace!
• Guardate/modificate il .orcarc
– Scegliete un campione a bassa luminosità
• Eseguite!
ExRunEvent
• Su 100 eventi dovreste avere ~3150 eventi di Pile up
– Considerando che a bassa luminosità 3.5 eventi sono attesi per
Bunch-Crossing, e consideriamo i bunch crossing [-5,+3] (sono 9),
ci aspettiamo 3.5 x 100 x 9 = 3150 eventi
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
31
Giochiamo!
• Esercizi (Cercate sulla documentazione di COBRA)
– Stampate l’evento di trigger
• Hint: SimSignal()::Print()
– Modificate il codice in modo da stampare l’elenco delle paricelle
generate per l’evento di trigger
• Hint: SimSignal()::genparts()
– Stampate solamente il pile-up in-time
• Hint: G3EventProxy::pileups(int minb, int maxb)
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
32
Ntuple, Trees, etc.
• Esempio di scrittura di un’ntupla:
– Examples/HBook
• Esempio di scrittura di ROOT files:
– Examples/Root
– Per la scrittura di Tree: MuonAnalysis/MuonHLTSelection
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
33
Bugs!
• Savannah!
https://lcgappdev.cern.ch/savannah/projects/orca/
N. Amapane, T. Boccali
Torino, 14-16 Aprile 2003
34
Scarica

ppt