Difference: GridAndDataManagement (1 vs. 13)

Revision 132013-06-04 - RobLambert

Line: 1 to 1
 
META TOPICPARENT name="LHCbSoftwareTutorials"

Grid and data management (Using ganga only)

What can you expect from the grid?
Line: 27 to 27
 If all of them failed, go back to testing locally, because it's probably a problem with your options or a mistake you made.

%SYNTAX{ syntax="python"}%

Added:
>
>
j=jobs(6)
 failjobs= [js for js in j.subjobs if js.status=="failed"]

#just resubmit

Deleted:
<
<
j=jobs(6)
 for js in failjobs: js.resubmit()

Revision 122012-09-07 - RobLambert

Line: 1 to 1
 
META TOPICPARENT name="LHCbSoftwareTutorials"

Grid and data management (Using ganga only)

What can you expect from the grid?
Line: 27 to 27
 If all of them failed, go back to testing locally, because it's probably a problem with your options or a mistake you made.

%SYNTAX{ syntax="python"}%

Added:
>
>
failjobs= [js for js in j.subjobs if js.status=="failed"]
 #just resubmit j=jobs(6)
Changed:
<
<
for js in j.subjobs:
>
>
for js in failjobs:
  js.resubmit()

#next try resubmitting with more CPU

Changed:
<
<
for js in j.subjobs:
>
>
for js in failjobs:
  js.backend.settings['CPUTime']=js.backend.settings['CPUTime']*2 js.resubmit()

#Next try resubmitting to a different site

Changed:
<
<
for js in j.subjobs:
>
>
for js in failjobs:
  js.backend.settings['BannedSites']=[js.backend.actualCE] js.resubmit()

#next try making a new job, resplitting and resubmitting j=j.copy()

Changed:
<
<
j.inputdata=jobs('6.1').inputdata
>
>
j.inputdata=jobs('6.1').inputdata #copy a single failed job output
 j.splitter.filesPerJob=1+len(j.inputdata)/10 j.submit() %ENDSYNTAX%
Changed:
<
<
Only if all the above doesn't work should you consider emailing the list.
>
>
Only if all the above doesn't work should you consider emailing the list. Ganga utilities (described below) can make this process much quicker.
 

2. Let's move some data

Revision 112011-05-30 - KazuyoshiAkiba

Line: 1 to 1
 
META TOPICPARENT name="LHCbSoftwareTutorials"
Changed:
<
<

Grid and data management

>
>

Grid and data management (Using ganga only)

 What can you expect from the grid?

Revision 102010-12-22 - RobLambert

Line: 1 to 1
 
META TOPICPARENT name="LHCbSoftwareTutorials"

Grid and data management

What can you expect from the grid?
Line: 34 to 34
  #next try resubmitting with more CPU for js in j.subjobs:
Changed:
<
<
js.backend.settings[‘CPUTime’]=js.backend.settings['CPUTime']*2
>
>
js.backend.settings['CPUTime']=js.backend.settings['CPUTime']*2
  js.resubmit()

#Next try resubmitting to a different site for js in j.subjobs:

Changed:
<
<
js.backend.settings[‘BannedSites’]=[js.backend.actualCE]
>
>
js.backend.settings['BannedSites']=[js.backend.actualCE]
  js.resubmit()

#next try making a new job, resplitting and resubmitting

Line: 62 to 62
 #Let's send some data to grid storage In [1]: j=jobs(7).copy() In [2]: j.outputsandbox
Changed:
<
<
Out[1]: [‘DVHistos.root’, ‘DVnTuples.root’] In [3]: j.outputsandbox= [‘DVHistos.root’] In [4]: j.outputdata=[‘DVnTuples.root’] In [5]: j.outputdata.location=‘GridTutorial’
>
>
Out[1]: ['DVHistos.root', 'DVnTuples.root'] In [3]: j.outputsandbox= ['DVHistos.root'] In [4]: j.outputdata=['DVnTuples.root'] In [5]: j.outputdata.location='GridTutorial'
 In [6]: j.submit() %ENDSYNTAX%
Line: 75 to 75
 #first we need the list of files created In [1]: ds=j.backend.getOutputDataLFNs() #copy to RAL-USER, for example... not everything needs to be copied to CERN!
Changed:
<
<
In [2]: ds.replicate(‘RAL-USER’)
>
>
In [2]: ds.replicate('RAL-USER')
 #download to your local hard disk
Changed:
<
<
In [3]: ds[0].download(‘/tmp/’) In [4]: afile=PhysicalFile(‘/tmp/DVnTuples.root’)
>
>
In [3]: ds[0].download('/tmp/') In [4]: afile=PhysicalFile('/tmp/DVnTuples.root')
 #upload it again
Changed:
<
<
In [5]: dscp=afile.upload(‘/lhcb/user///GridTutorial/DVnTuples.root’)
>
>
In [5]: dscp=afile.upload('/lhcb/user///GridTutorial/DVnTuples.root')
 #download the output into the job workspace, be sure you have enough space first! In [6]: j.backend.getOutputData() %ENDSYNTAX%
Line: 105 to 105
 %SYNTAX{ syntax="python"}% In [1]: ds=j.backend.getOutputDataLFNs() # syntax box.add(object, name_to_give_to_entry_in_box)
Changed:
<
<
In [2]: box.add(ds, j.id+' '+j.name+’ Output LFNs’)
>
>
In [2]: box.add(ds, j.id+' '+j.name+' Output LFNs')
 In [3]: j.remove() In [4]: box #print the content of the box, your output data LFNs are safe %ENDSYNTAX%
Line: 115 to 115
  Following GridStorageQuota.
Changed:
<
<
To see how much space you are using, you need to go to a new shell and start Dirac:
>
>
To see how much space you are using:

You can to go to a new shell and start Dirac:

  %SYNTAX{ syntax="sh"}% $ SetupProject LHCbDirac
Added:
>
>
$ lhcb-proxy-init
 $ dirac-dms-storage-usage-summary --Dir /lhcb/user// %ENDSYNTAX%
Added:
>
>
Or get the same in ganga:
<!-- SyntaxHighlightingPlugin -->
In [1]: gridProxy.renew()
In [2]: diracAPI('import commands; result=commands.getoutput(dirac-dms-storage-usage-summary --Dir /lhcb/user/<u>/<username>)')
<!-- end SyntaxHighlightingPlugin -->
 You can remove all copies of files from a given dataset within Ganga: %SYNTAX{ syntax="python"}% In [1]: ds=j.backend.getOutputDataLFNs()
Line: 130 to 140
 %ENDSYNTAX%

And finally find out what's left over from Dirac, and exterminate it:

Added:
>
>
You can to go to a new shell and start Dirac:
 
<!-- SyntaxHighlightingPlugin -->
$ SetupProject LHCbDirac
$ dirac-dms-user-lfns  
$ dirac-dms-remove-files <a-list-of-lfns>
<!-- end SyntaxHighlightingPlugin -->
Added:
>
>
You could also run those commands through the diracAPI in ganga, but since they take a very long time, probably it's not the best idea.
 Now it probably takes some time to sync the corresponding DB, containing the storage space used. So please wait a bit.

6. Advanced cleanup

Revision 92010-12-21 - RobLambert

Line: 1 to 1
 
META TOPICPARENT name="LHCbSoftwareTutorials"

Grid and data management

What can you expect from the grid?
Line: 22 to 22
  I assume you have a previous successful job called jobs(6), with a number of subjobs which we will copy and mess with below
Changed:
<
<
Often, when you have submitted some jobs, a small number of them fails. The first thing to do is resubmit them, and see what that does.
>
>
Often, when you have submitted some jobs, a small number of them fails. The usual sucess rate of user grid jobs is 80%. The first thing to do is resubmit them, and see what that does.
  If all of them failed, go back to testing locally, because it's probably a problem with your options or a mistake you made.
Line: 74 to 74
 %SYNTAX{ syntax="python"}% #first we need the list of files created In [1]: ds=j.backend.getOutputDataLFNs()
Changed:
<
<
#copy to CERN-USER, for example... not everything needs to be copied to CERN though! In [2]: ds.replicate(‘CERN-USER’)
>
>
#copy to RAL-USER, for example... not everything needs to be copied to CERN! In [2]: ds.replicate(‘RAL-USER’)
 #download to your local hard disk In [3]: ds[0].download(‘/tmp/’) In [4]: afile=PhysicalFile(‘/tmp/DVnTuples.root’)

Revision 82010-12-21 - RobLambert

Line: 1 to 1
 
META TOPICPARENT name="LHCbSoftwareTutorials"

Grid and data management

What can you expect from the grid?
Line: 136 to 136
 $ dirac-dms-remove-files <a-list-of-lfns> %ENDSYNTAX%
Added:
>
>
Now it probably takes some time to sync the corresponding DB, containing the storage space used. So please wait a bit.
 

6. Advanced cleanup

Load the dirac-dms-user-lfns into an LHCbDataset:

Revision 72010-12-17 - RobLambert

Line: 1 to 1
 
META TOPICPARENT name="LHCbSoftwareTutorials"

Grid and data management

What can you expect from the grid?

Prerequisites:

Changed:
<
<
You will need to be familiar with python. After that you will need to do AT LEAST the following tutorials before starting the DaVinci tutorial.
>
>
You will need to be familiar with python. After that you will need to do AT LEAST the following tutorials before starting this Ganga and Grid tutorial.
 
Line: 16 to 16
 

Slides:

Changed:
<
<
This tutorial corresponds to the slides last shown at the LHCb week here
>
>
This tutorial corresponds to the slides last shown at the LHCb week here
 

1. Let's resubmit with changing things

I assume you have a previous successful job called jobs(6), with a number of subjobs which we will copy and mess with below

Added:
>
>
Often, when you have submitted some jobs, a small number of them fails. The first thing to do is resubmit them, and see what that does.

If all of them failed, go back to testing locally, because it's probably a problem with your options or a mistake you made.

 %SYNTAX{ syntax="python"}%
Added:
>
>
#just resubmit
 j=jobs(6) for js in j.subjobs: js.resubmit()
Added:
>
>
#next try resubmitting with more CPU
 for js in j.subjobs: js.backend.settings[‘CPUTime’]=js.backend.settings['CPUTime']*2 js.resubmit()
Added:
>
>
#Next try resubmitting to a different site
 for js in j.subjobs: js.backend.settings[‘BannedSites’]=[js.backend.actualCE] js.resubmit()
Added:
>
>
#next try making a new job, resplitting and resubmitting
 j=j.copy() j.inputdata=jobs('6.1').inputdata j.splitter.filesPerJob=1+len(j.inputdata)/10 j.submit() %ENDSYNTAX%
Added:
>
>
Only if all the above doesn't work should you consider emailing the list.
 

2. Let's move some data

I assume you have a previous successful job called jobs(7) which we will copy and mess with below. I assume it makes a file called DVnTuples.root.

Added:
>
>
Often you will want to copy the data around, but think carefully before you do it. Most probably you can live with having files on the grid, and if you have to copy them somewhere, that doesn't have to be CERN.
 %SYNTAX{ syntax="python"}%
Added:
>
>
#Let's send some data to grid storage
 In [1]: j=jobs(7).copy() In [2]: j.outputsandbox Out[1]: [‘DVHistos.root’, ‘DVnTuples.root’]
Line: 59 to 72
 Then copy that data around

%SYNTAX{ syntax="python"}%

Added:
>
>
#first we need the list of files created
 In [1]: ds=j.backend.getOutputDataLFNs()
Added:
>
>
#copy to CERN-USER, for example... not everything needs to be copied to CERN though!
 In [2]: ds.replicate(‘CERN-USER’)
Added:
>
>
#download to your local hard disk
 In [3]: ds[0].download(‘/tmp/’) In [4]: afile=PhysicalFile(‘/tmp/DVnTuples.root’)
Added:
>
>
#upload it again
 In [5]: dscp=afile.upload(‘/lhcb/user///GridTutorial/DVnTuples.root’)
Added:
>
>
#download the output into the job workspace, be sure you have enough space first!
 In [6]: j.backend.getOutputData() %ENDSYNTAX%

3. Where are the data?

%SYNTAX{ syntax="python"}%

Added:
>
>
#the outputsandbox is stored in the outputdir
 In [1]: j.outputdir
Added:
>
>
#you can look at it like this
 In [2]: j.peek()
Added:
>
>
#the outputdata may be anywhere on the grid
 In [3]: ds=j.backend.getOutputDataLFNs() In [4]: reps=ds.getReplicas() In [5]: reps[ds[0].name]
Added:
>
>
#file 0 is replicated at these places
 %ENDSYNTAX%

4. Using the Ganga Box

Line: 82 to 104
 Before you delete the job, and if you want to keep the output for some time, why not put the LFNs in your Ganga Box? %SYNTAX{ syntax="python"}% In [1]: ds=j.backend.getOutputDataLFNs()
Added:
>
>
# syntax box.add(object, name_to_give_to_entry_in_box)
 In [2]: box.add(ds, j.id+' '+j.name+’ Output LFNs’) In [3]: j.remove()
Changed:
<
<
In [4]: box #print the content of the box
>
>
In [4]: box #print the content of the box, your output data LFNs are safe
 %ENDSYNTAX%
Line: 106 to 129
  ....: d.remove() %ENDSYNTAX%
Changed:
<
<
And find out what's left over from Dirac, and exterminate it:
>
>
And finally find out what's left over from Dirac, and exterminate it:
 %SYNTAX{ syntax="sh"}% $ SetupProject LHCbDirac $ dirac-dms-user-lfns
Line: 145 to 168
 

Tips

Changed:
<
<
As with the above example, most things can be reduced to a line or two using Ganga Utilities. It's simple to get working and can save you a lot of time.
>
>
Most things can be reduced to a line or two using Ganga Utilities. It's simple to get working and can save you a lot of time.
  (1) is just gu.subjob_resubmit(j), to resubmit with changing the settings automatically, and j=gu.resplit(j) to make a new job with the failed subjob inputdata

Revision 62010-12-03 - AndreasJaeger

Line: 1 to 1
 
META TOPICPARENT name="LHCbSoftwareTutorials"

Grid and data management

What can you expect from the grid?
Line: 70 to 70
 

3. Where are the data?

%SYNTAX{ syntax="python"}%

Changed:
<
<
In [1]: j.application.outputdir
>
>
In [1]: j.outputdir
 In [2]: j.peek() In [3]: ds=j.backend.getOutputDataLFNs() In [4]: reps=ds.getReplicas()

Revision 52010-12-02 - RobLambert

Line: 1 to 1
 
META TOPICPARENT name="LHCbSoftwareTutorials"

Grid and data management

What can you expect from the grid?
Line: 28 to 28
  js.resubmit()

for js in j.subjobs:

Changed:
<
<
js.backend.settings={‘CPUTime’:js.backend.settings['CPUTime']*2}
>
>
js.backend.settings[‘CPUTime’]=js.backend.settings['CPUTime']*2
  js.resubmit()

for js in j.subjobs:

Changed:
<
<
js.backend.settings={‘BannedSites’:[js.backend.actualCE]}
>
>
js.backend.settings[‘BannedSites’]=[js.backend.actualCE]
  js.resubmit()

j=j.copy()

Line: 115 to 115
 

6. Advanced cleanup

Changed:
<
<
Load the dirac-dms-user-lfns into a LHCbDataset:
>
>
Load the dirac-dms-user-lfns into an LHCbDataset:
  %SYNTAX{ syntax="python"}% f=open('<a-list-of-lfns>')
Line: 131 to 131
 Then go through the datasets you want to keep, subtracting from this list:

%SYNTAX{ syntax="python"}%

Changed:
<
<
ds_diff=LHCbDataset()
>
>
ds_diff=ds
 for ds2 in box:
Changed:
<
<
ds_diff=ds.difference(ds2)
>
>
ds_diff=ds_diff.difference(ds2)
 %ENDSYNTAX%

Then remove them:

Revision 42010-12-01 - RobLambert

Line: 1 to 1
 
META TOPICPARENT name="LHCbSoftwareTutorials"

Grid and data management

What can you expect from the grid?
Line: 99 to 99
 $ dirac-dms-storage-usage-summary --Dir /lhcb/user// %ENDSYNTAX%
Changed:
<
<
You can remove all copies of these files from within Ganga:
>
>
You can remove all copies of files from a given dataset within Ganga:
 %SYNTAX{ syntax="python"}% In [1]: ds=j.backend.getOutputDataLFNs() In [2]: for d in ds

Revision 32010-12-01 - RobLambert

Line: 1 to 1
 
META TOPICPARENT name="LHCbSoftwareTutorials"

Grid and data management

What can you expect from the grid?
Line: 82 to 82
 Before you delete the job, and if you want to keep the output for some time, why not put the LFNs in your Ganga Box? %SYNTAX{ syntax="python"}% In [1]: ds=j.backend.getOutputDataLFNs()
Changed:
<
<
In [2]: box.add(ds, j.name+’ Output LFNs’)
>
>
In [2]: box.add(ds, j.id+' '+j.name+’ Output LFNs’)
 In [3]: j.remove() In [4]: box #print the content of the box %ENDSYNTAX%
Line: 90 to 90
 

5. Cleanup

Added:
>
>
Following GridStorageQuota.
 To see how much space you are using, you need to go to a new shell and start Dirac:

%SYNTAX{ syntax="sh"}%

Line: 145 to 147
  As with the above example, most things can be reduced to a line or two using Ganga Utilities. It's simple to get working and can save you a lot of time.
Changed:
<
<
(1) is just gu.subjob_resubmit(j), to resubmit with changing the settings, and j=gu.resplit(j) to make a new job with the failed subjob inputdata
>
>
(1) is just gu.subjob_resubmit(j), to resubmit with changing the settings automatically, and j=gu.resplit(j) to make a new job with the failed subjob inputdata
  (6) is ds=gu.dataset_from_file('<a-list-of-lfns>'); keep=gu.boxLFNs(); ds_diff=ds.difference(keep); to get the list files to remove.

Revision 22010-11-30 - RobLambert

Line: 1 to 1
 
META TOPICPARENT name="LHCbSoftwareTutorials"

Grid and data management

What can you expect from the grid?
Line: 11 to 11
 
Changed:
<
<
You need at least one DaVinci job which works on teh grid and makes some output files
>
>
You need at least one DaVinci job which works on the grid and makes some output files
 

Slides:

This tutorial corresponds to the slides last shown at the LHCb week here

Changed:
<
<

Let's resubmit with changing things

>
>

1. Let's resubmit with changing things

  I assume you have a previous successful job called jobs(6), with a number of subjobs which we will copy and mess with below
Line: 32 to 32
  js.resubmit()

for js in j.subjobs:

Changed:
<
<
js.backend.settings={‘BannedSites’:['LCG.CERN.CH']}
>
>
js.backend.settings={‘BannedSites’:[js.backend.actualCE]}
  js.resubmit()

j=j.copy()

Line: 41 to 41
 j.submit() %ENDSYNTAX%
Changed:
<
<

Let's move some data

>
>

2. Let's move some data

  I assume you have a previous successful job called jobs(7) which we will copy and mess with below. I assume it makes a file called DVnTuples.root.
Line: 67 to 67
 In [6]: j.backend.getOutputData() %ENDSYNTAX%
Changed:
<
<

Where are the data?

>
>

3. Where are the data?

  %SYNTAX{ syntax="python"}% In [1]: j.application.outputdir
Line: 77 to 77
 In [5]: reps[ds[0].name] %ENDSYNTAX%
Changed:
<
<

Using the Ganga Box

>
>

4. Using the Ganga Box

  Before you delete the job, and if you want to keep the output for some time, why not put the LFNs in your Ganga Box? %SYNTAX{ syntax="python"}%
Line: 88 to 88
 %ENDSYNTAX%
Changed:
<
<

Cleanup

>
>

5. Cleanup

  To see how much space you are using, you need to go to a new shell and start Dirac:
Line: 111 to 111
 $ dirac-dms-remove-files <a-list-of-lfns> %ENDSYNTAX%
Added:
>
>

6. Advanced cleanup

 
Added:
>
>
Load the dirac-dms-user-lfns into a LHCbDataset:

<!-- SyntaxHighlightingPlugin -->
f=open('<a-list-of-lfns>')
files=f.read().strip().split('\n')
f.close()
for i in range(len(files)):
  while('//') in files[i]:
    files[i]=files[i].replace('//','/')
files=['LFN:'+f for f in files]
ds=LHCbDataset(files)
<!-- end SyntaxHighlightingPlugin -->

Then go through the datasets you want to keep, subtracting from this list:

<!-- SyntaxHighlightingPlugin -->
ds_diff=LHCbDataset()
for ds2 in box:
  ds_diff=ds.difference(ds2)
<!-- end SyntaxHighlightingPlugin -->

Then remove them:

<!-- SyntaxHighlightingPlugin -->
for df in ds_diff:
  df.remove()
<!-- end SyntaxHighlightingPlugin -->

Tips

As with the above example, most things can be reduced to a line or two using Ganga Utilities. It's simple to get working and can save you a lot of time.

(1) is just gu.subjob_resubmit(j), to resubmit with changing the settings, and j=gu.resplit(j) to make a new job with the failed subjob inputdata

(6) is ds=gu.dataset_from_file('<a-list-of-lfns>'); keep=gu.boxLFNs(); ds_diff=ds.difference(keep); to get the list files to remove.

  -- RobLambert - 25-Nov-2010 \ No newline at end of file

Revision 12010-11-25 - RobLambert

Line: 1 to 1
Added:
>
>
META TOPICPARENT name="LHCbSoftwareTutorials"

Grid and data management

What can you expect from the grid?

Prerequisites:

You will need to be familiar with python. After that you will need to do AT LEAST the following tutorials before starting the DaVinci tutorial.

You need at least one DaVinci job which works on teh grid and makes some output files

Slides:

This tutorial corresponds to the slides last shown at the LHCb week here

Let's resubmit with changing things

I assume you have a previous successful job called jobs(6), with a number of subjobs which we will copy and mess with below

<!-- SyntaxHighlightingPlugin -->
j=jobs(6)
for js in j.subjobs:
    js.resubmit()

for js in j.subjobs:
    js.backend.settings={‘CPUTime’:js.backend.settings['CPUTime']*2}
    js.resubmit()

for js in j.subjobs:
    js.backend.settings={‘BannedSites’:['LCG.CERN.CH']}
    js.resubmit()

j=j.copy()
j.inputdata=jobs('6.1').inputdata
j.splitter.filesPerJob=1+len(j.inputdata)/10
j.submit()
<!-- end SyntaxHighlightingPlugin -->

Let's move some data

I assume you have a previous successful job called jobs(7) which we will copy and mess with below. I assume it makes a file called DVnTuples.root.

<!-- SyntaxHighlightingPlugin -->
In [1]: j=jobs(7).copy()
In [2]: j.outputsandbox
Out[1]: [‘DVHistos.root’, ‘DVnTuples.root’]
In [3]: j.outputsandbox= [‘DVHistos.root’]
In [4]: j.outputdata=[‘DVnTuples.root’]
In [5]: j.outputdata.location=‘GridTutorial’
In [6]: j.submit()
<!-- end SyntaxHighlightingPlugin -->

Then copy that data around

<!-- SyntaxHighlightingPlugin -->
In [1]: ds=j.backend.getOutputDataLFNs()
In [2]: ds.replicate(‘CERN-USER’)
In [3]: ds[0].download(‘/tmp/’)
In [4]: afile=PhysicalFile(‘/tmp/DVnTuples.root’)
In [5]: dscp=afile.upload(‘/lhcb/user/<u>/<uname>/GridTutorial/DVnTuples.root’)
In [6]: j.backend.getOutputData()
<!-- end SyntaxHighlightingPlugin -->

Where are the data?

<!-- SyntaxHighlightingPlugin -->
In [1]: j.application.outputdir
In [2]: j.peek()
In [3]: ds=j.backend.getOutputDataLFNs() 
In [4]: reps=ds.getReplicas()
In [5]: reps[ds[0].name]
<!-- end SyntaxHighlightingPlugin -->

Using the Ganga Box

Before you delete the job, and if you want to keep the output for some time, why not put the LFNs in your Ganga Box?

<!-- SyntaxHighlightingPlugin -->
In [1]: ds=j.backend.getOutputDataLFNs()
In [2]: box.add(ds, j.name+’ Output LFNs’)
In [3]: j.remove()
In [4]: box #print the content of the box
<!-- end SyntaxHighlightingPlugin -->

Cleanup

To see how much space you are using, you need to go to a new shell and start Dirac:

<!-- SyntaxHighlightingPlugin -->
$ SetupProject LHCbDirac
$ dirac-dms-storage-usage-summary --Dir /lhcb/user/<u>/<username> 
<!-- end SyntaxHighlightingPlugin -->

You can remove all copies of these files from within Ganga:

<!-- SyntaxHighlightingPlugin -->
In [1]: ds=j.backend.getOutputDataLFNs()
In [2]: for d in ds
  ....:    d.remove()
<!-- end SyntaxHighlightingPlugin -->

And find out what's left over from Dirac, and exterminate it:

<!-- SyntaxHighlightingPlugin -->
$ SetupProject LHCbDirac
$ dirac-dms-user-lfns  
$ dirac-dms-remove-files <a-list-of-lfns>
<!-- end SyntaxHighlightingPlugin -->

-- RobLambert - 25-Nov-2010

 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright &© 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback