ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/crab_help.py
Revision: 1.30
Committed: Thu May 10 14:34:00 2007 UTC (17 years, 11 months ago) by slacapra
Content type: text/x-python
Branch: MAIN
CVS Tags: CRAB_2_0_0_pre2, CRAB_2_0_0_pre1, CRAB_1_5_1, CRAB_1_5_1_pre4, CRAB_1_5_1_pre3, CRAB_1_5_1_pre2
Changes since 1.29: +33 -5 lines
Log Message:
update documentation

File Contents

# Content
1
2 ###########################################################################
3 #
4 # H E L P F U N C T I O N S
5 #
6 ###########################################################################
7
8 import common
9
10 import sys, os, string
11 import tempfile
12
13 ###########################################################################
14 def usage():
15 usa_string = common.prog_name + """ [options]
16
17 The most useful general options (use '-h' to get complete help):
18
19 -create -- Create all the jobs.
20 -submit n -- Submit the first n available jobs. Default is all.
21 -status -- check status of all jobs.
22 -getoutput|-get [range] -- get back the output of all jobs: if range is defined, only of selected jobs
23 -kill [range] -- kill submitted jobs
24 -cancelAndResubmit [range] -- kill and resubmit submitted jobs
25 -clean -- gracefully cleanup the idrectory of a task
26 -testJdl [range] -- check if resources exist which are compatible with jdl
27 -list [range] -- show technical job details
28 -postMortem [range] -- provide a file with information useful for post-mortem analysis of the jobs
29 -printId [range] -- print the job SID
30 -continue|-c [dir] -- Apply command to task stored in [dir].
31 -h [format] -- Detailed help. Formats: man (default), tex, html.
32 -cfg fname -- Configuration file name. Default is 'crab.cfg'.
33 -debug N -- set the verbosity level to N
34 -v -- Print version and exit.
35
36 "range" has syntax "n,m,l-p" which correspond to [n,m,l,l+1,...,p-1,p] and all possible combination
37
38 Example:
39 crab -create -submit 1
40 """
41 print
42 sys.exit(2)
43
44 ###########################################################################
45 def help(option='man'):
46 help_string = """
47 =pod
48
49 =head1 NAME
50
51 B<CRAB>: B<C>ms B<R>emote B<A>nalysis B<B>uilder
52
53 """+common.prog_name+""" version: """+common.prog_version_str+"""
54
55 This tool B<must> be used from an User Interface and the user is supposed to
56 have a valid GRID certificate.
57
58 =head1 SYNOPSIS
59
60 B<"""+common.prog_name+"""> [I<options>] [I<command>]
61
62 =head1 DESCRIPTION
63
64 CRAB is a Python program intended to simplify the process of creation and submission into grid environment of CMS analysis jobs.
65
66 Parameters for CRAB usage and configuration are provided by the user changing the configuration file B<crab.cfg>.
67
68 CRAB generates scripts and additional data files for each job. The produced scripts are submitted directly to the Grid. CRAB makes use of BOSS to interface to the grid scheduler, as well as for logging and bookkeeping and eventually real time monitoring.
69
70 CRAB support any CMSSW based executable, with any modules/libraries, including the user provided one, and deals with the output produced by the executable. Up to version 1_2_1, also ORCA (and FAMOS) based executable were supported. CRAB provides an interface with CMS data discovery services (DBS and DLS), which are completely hidden to the final user. It also splits a task (such as analyzing a whole dataset) into smaller jobs, according with user requirements.
71
72 CRAB web page is available at
73
74 I<http://cmsdoc.cern.ch/cms/ccs/wm/www/Crab/>
75
76 =head1 HOW TO RUN CRAB FOR THE IMPATIENT USER
77
78 Please, read all anyway!
79
80 Source B<crab.(c)sh> from the CRAB installation area, which have been setup either by you or by someone else for you.
81
82 Modify the CRAB configuration file B<crab.cfg> according to your need: see below for a complete list: in particular set your jobtype (orca or famos) and fill the corresponding section. A template and commented B<crab.cfg> can be found on B<$CRABDIR/python/crab.cfg>
83
84 ~>crab -create
85 create all jobs (no submission!)
86
87 ~>crab -submit 2 -continue [ui_working_dir]
88 submit 2 jobs, the ones already created (-continue)
89
90 ~>crab -create -submit 2
91 create _and_ submit 2 jobs
92
93 ~>crab -status
94 check the status of all jobs
95
96 ~>crab -getoutput
97 get back the output of all jobs
98
99 =head1 RUNNING CMSSW WITH CRAB
100
101 =over 4
102
103 =item B<A)>
104
105 Develop your code in your CMSSW working area. Do anything which is needed to run interactively your executable, including the setup of run time environment (I<eval `scramv1 runtime -sh|csh`>), a suitable I<ParameterSet>, etc. It seems silly, but B<be extra sure that you actaully did compile your code> I<scramv1 b>.
106
107 =item B<B)>
108
109 Source B<crab.(c)sh> from the CRAB installation area, which have been setup either by you or by someone else for you. Modify the CRAB configuration file B<crab.cfg> according to your need: see below for a complete list.
110
111 The most important parameters are the following (see below for complete description of each parameter):
112
113 =item B<Mandatory!>
114
115 =over 6
116
117 =item B<[CMSSW]> section: datasetpath, pset, splitting parameters, output_file
118
119 =item B<[USER]> section: output handling parameters, such as return_data, copy_data etc...
120
121 =back
122
123 =item B<Run it!>
124
125 You must have a valid voms-enabled grid proxy. See CRAB web page for details.
126
127 =back
128
129 =head1 HOW TO RUN ON CONDOR-G
130
131 The B<Condor-G> mode for B<CRAB> is a special submission mode next to the standard Resource Broker submission. It is designed to submit jobs directly to a site and not using the Resource Broker.
132
133 Due to the nature of this submission possibility, the B<Condor-G> mode is restricted to OSG sites within the CMS grid, currently the 7 US T2: Florida(ufl.edu), Nebraska(unl.edu), San Diego(ucsd.edu), Purdue(purdue.edu), Wisconsin(wisc.edu), Caltech(ultralight.org), MIT(mit.edu).
134
135 =head2 B<Requirements:>
136
137 =over 2
138
139 =item installed and running local Condor scheduler
140
141 (either installed by the local Sysadmin or self-installed using the VDT user interface: http://www.uscms.org/SoftwareComputing/UserComputing/Tutorials/vdt.html)
142
143 =item locally available LCG or OSG UI installation
144
145 for authentication via grid certificate proxies ("voms-proxy-init -voms cms" should result in valid proxy)
146
147 =item set of the environment variable EDG_WL_LOCATION to the edg directory of the local LCG or OSG UI installation
148
149 =back
150
151 =head2 B<What the Condor-G mode can do:>
152
153 =over 2
154
155 =item submission directly to a single OSG site,
156
157 the requested dataset has to be published correctly by the site in the local and global services
158
159 =back
160
161 =head2 B<What the Condor-G mode cannot do:>
162
163 =over 2
164
165 =item submit jobs if no condor scheduler is running on the submission machine
166
167 =item submit jobs if the local condor installation does not provide Condor-G capabilities
168
169 =item submit jobs to more than one site in parallel
170
171 =item submit jobs to a LCG site
172
173 =item support grid certificate proxy renewal via the myproxy service
174
175 =back
176
177 =head2 B<CRAB configuration for Condor-G mode:>
178
179 The CRAB configuration for the Condor-G mode only requires changes in crab.cfg:
180
181 =over 2
182
183 =item select condor_g Scheduler:
184
185 scheduler = condor_g
186
187 =item select the domain for a single OSG site:
188
189 CE_white_list = "one of unl.edu,ufl.edu,ucsd.edu,wisc.edu,purdue.edu,ultralight.org,mit.edu"
190
191 =back
192
193 =head1 COMMAND
194
195 =over 4
196
197 =item B<-create>
198
199 Create the jobs: from version 1_3_0 it is only possible to create all jobs.
200 The maximum number of jobs depens on dataset and splittig directives. This set of identical jobs accessing the same dataset are defined as a task.
201 This command create a directory with default name is I<crab_0_date_time> (can be changed via ui_working_dir parameter, see below). Inside this directory it is placed whatever is needed to submit your jobs. Also the output of your jobs (once finished) will be place there (see after). Do not cancel by hand this directory: rather use -clean (see).
202 See also I<-continue>.
203
204 =item B<-submit n>
205
206 Submit n jobs: 'n' is either a positive integer or 'all'. Default is all.
207 The first 'n' suitable jobs will be submitted. This option must be used in conjunction with -create (to create and submit immediately) or with -continue, to submit previously created jobs. Failure to do so will stop CRAB and generate an error message.
208 See also I<-continue>.
209
210 =item B<-continue [dir] | -c [dir]>
211
212 Apply the action on the task stored on directory [dir]. If the task directory is the standard one (crab_0_date_time), the more recent in time is taken. Any other directory must be specified.
213 Basically all commands (but -create) need -continue, so it is automatically assumed, with exception of -submit, where it must be explicitly used. Of course, the standard task directory is used in this case.
214
215 =item B<-status>
216
217 Check the status of the jobs, in all states. If BOSS real time monitor is enabled, also some real time information are available, otherwise all the info will be available only after the output retrieval.
218
219 =item B<-getoutput|-get [range]>
220
221 Retrieve the output declared by the user via the output sandbox. By default the output will be put in task working dir under I<res> subdirectory. This can be changed via config parameters. B<Be extra sure that you have enough free space>. See I<range> below for syntax.
222
223 =item B<-resubmit [range]>
224
225 Resubmit jobs which have been previously submitted and have been either I<killed> or are I<aborted>. See I<range> below for syntax.
226
227 =item B<-kill [range]>
228
229 Kill (cancel) jobs which have been submitted to the scheduler. A range B<must> be used in all cases, no default value is set.
230
231 =item B<-testJdl [range]>
232
233 Check if the job can find compatible resources. It's equivalent of doing I<edg-job-list-match> on edg.
234
235 =item B<-printId [range]>
236
237 Just print the SID (grid job identifier) of the job(s).
238
239 =item B<-postMortem [range]>
240
241 Produce a file (via I<edg-job-logging-info -v 2>) which might help in understanding grid related problem for a job.
242
243 =item B<-list [range]>
244
245 Dump technical informations about jobs: for developers only.
246
247 =item B<-clean [dir]>
248
249 Clean up (i.e. erase) the task working directory after a check whether there are still running jobs. In case, you are notified and asked to kill them or retrieve their output. B<Warning> this will possibly delete also the output produced by the task (if any)!
250
251 =item B<-help [format] | -h [format]>
252
253 This help. It can be produced in three different I<format>: I<man> (default), I<tex> and I<html>.
254
255 =item B<-v>
256
257 Print the version and exit.
258
259 =item B<range>
260
261 The range to be used in many of the above commands has the following syntax. It is a comma separated list of jobs ranges, each of which may be a job number, or a job range of the form first-last.
262 Example: 1,3-5,8 = {1,3,4,5,8}
263
264 =back
265
266 =head1 OPTION
267
268 =over 4
269
270 =item B<-cfg [file]>
271
272 Configuration file name. Default is B<crab.cfg>.
273
274 =item B<-debug [level]>
275
276 Set the debug level: high number for high verbosity.
277
278 =back
279
280 =head1 CONFIGURATION PARAMETERS
281
282 All the parameter describe in this section can be defined in the CRAB configuration file. The configuration file has different sections: [CRAB], [USER], etc. Each parameter must be defined in its proper section. An alternative way to pass a config parameter to CRAB is via command line interface; the syntax is: crab -SECTION.key value . For example I<crab -USER.outputdir MyDirWithFullPath> .
283 The parameters passed to CRAB at the creation step are stored, so they cannot be changed by changing the original crab.cfg . On the other hand the task is protected from any accidental change. If you want to change any parameters, this require the creation of a new task.
284 Mandatory parameters are flagged with a *.
285
286 B<[CRAB]>
287
288 =over 4
289
290 =item B<jobtype *>
291
292 The type of the job to be executed: I<cmssw> jobtypes are supported
293
294 =item B<scheduler *>
295
296 The scheduler to be used: I<edg> is the standard grid one. Other choice are I<glite> or I<glitecoll> for bulk submission or I<condor_g> (see specific paragraph)
297
298 =back
299
300 B<[CMSSW]>
301
302 =over 4
303
304 =item B<datasetpath *>
305
306 the path of processed dataset as defined on the DBS. It comes with the format I</PrimaryDataset/DataTier/Process> . In case no input is needed I<None> must be specified.
307
308 =item B<pset *>
309
310 the ParameterSet to be used
311
312 =item I<Of the following three parameter exactly two must be used, otherwise CRAB will complain.>
313
314 =item B<total_number_of_events *>
315
316 the number of events to be processed. To access all available events, use I<-1>. Of course, the latter option is not viable in case of no input. In this case, the total number of events will be used to split the task in jobs, together with I<event_per_job>.
317
318 =item B<events_per_job*>
319
320 number of events to be accessed by each job. Since a job cannot cross the boundary of a fileblock it might be that the actual number of events per job is not exactly what you asked for. It can be used also with No input.
321
322 =item B<number_of_jobs *>
323
324 Define the number of job to be run for the task. The number of event for each job is computed taking into account the total number of events required as well as the granularity of EventCollections. Can be used also with No input.
325
326 =item B<output_file *>
327
328 the output files produced by your application (comma separated list).
329
330 =item B<pythia_seed>
331
332 If the job is pythia based, and has I<untracked uint32 sourceSeed = x> in the ParameterSet, the seed value can be changed using this parameter. Each job will have a different seed, of the type I<pythia_seed>I<$job_number> .
333
334 =item B<vtx_seed>
335
336 Seed for random number generation used for vertex smearing: to be used only if PSet has I<untracked uint32 VtxSmeared = x>. It is modified if and only if also I<pythia_seed> is set. As for I<pythia_seed> the actual seed will be of the type I<vtx_seed>I<$job_number>.
337
338 =item B<g4_seed>
339
340 Seed for randome generation of Geant4 SimHits I<untracked uint32 g4SimHits = x>. The treatment is that of I<vtx_seed> above
341
342 =item B<mix_seed>
343
344 Seed for randome generation of mixing module I<untracked uint32 mix = x>. The treatment is that of I<vtx_seed> above
345
346 =item B<first_run>
347
348 First run to be generated in a generation jobs. Relevant only for no-input workflow.
349
350 =item B<script_exe>
351
352 A user executable that will be run on WN instead of cmsrun. It's up to the user to setup properly the script itself to run on WN enviroment. CRAB guarantees that the modified pset.cfg will be placed in the working directory, with name CMSSW.cfg . The script itself will be added automatically to the input sandbox.
353
354 =item I<DBS and DLS parameters:>
355
356 =item B<use_dbs_1>
357
358 To use DBS1 instead of default DBS2
359
360 =item B<dbs_url>
361
362 The URL of the DBS query page. For expert only. (both DBS1 and DBS2)
363
364 =item B<dbs_version>
365
366 Version of DBS2 to use: relevant only for DBS2
367
368 =item B<dbs_instance>
369
370 The instance of DBS to be accessed at a given URL. For expert only. For DBS1 only.
371
372 =item B<dls_type>
373
374 Type of DLS: can be DLI or mysql. For expert only. For DBS1 only
375
376 =item B<dls_endpoint>
377
378 Access point for DLS. For expert only. For DBS1 only
379
380 =back
381
382 B<[USER]>
383
384 =over 4
385
386 =item B<additional_input_files>
387
388 Any additional input file you want to ship to WN: comma separated list. These are the files which might be needed by your executable: they will be placed in the WN working dir. You don't need to specify the I<ParameterSet> you are using, which will be included automatically. Wildcards are allowed.
389
390 =item B<ui_working_dir>
391
392 Name of the working directory for the current task. By default, a name I<crab_0_(date)_(time)> will be used. If this card is set, any CRAB command which require I<-continue> need to specify also the name of the working directory. A special syntax is also possible, to reuse the name of the dataset provided before: I<ui_working_dir : %(dataset)s> . In this case, if eg the dataset is SingleMuon, the ui_working_dir will be set to SingleMuon as well.
393
394 =item B<return_data *>
395
396 The output produced by the ORCA executable on WN is returned (via output sandbox) to the UI, by issuing the I<-getoutput> command. B<Warning>: this option should be used only for I<small> output, say less than 10MB, since the sandbox cannot accomodate big files. Depending on Resource Broker used, a size limit on output sandbox can be applied: bigger files will be truncated. To be used in alternative to I<copy_data>.
397
398 =item B<outputdir>
399
400 To be used together with I<return_data>. Directory on user interface where to store the ORCA output. Full path is mandatory, "~/" is not allowed: the defaul location of returned output is ui_working_dir/res .
401
402 =item B<logdir>
403
404 To be used together with I<return_data>. Directory on user interface where to store the ORCA standard output and error. Full path is mandatory, "~/" is not allowed: the defaul location of returned output is ui_working_dir/res .
405
406 =item B<copy_data *>
407
408 The output (only the ORCA one, not the std-out and err) is copied to a Storage Element of your choice (see below). To be used as an alternative to I<return_data> and recomended in case of large output.
409
410 =item B<storage_element>
411
412 To be used together with I<copy_data>. Storage Element name.
413
414 =item B<storage_path>
415
416 To be used together with I<copy_data>. Path where to put output files on Storage Element. Full path is needed, and the directory must be writeable by all.
417
418 =item B<register_data>
419
420 To be used together with I<copy_data>. Register output files to RLS catalog: for advanced LCG users.
421
422 =item B<lfn_dir>
423
424 To be used together with I<register_data>. Path for the Logical File Name.
425
426 =item B<use_central_bossDB>
427
428 Use central BOSS DB instead of one for each task: the DB must be already been setup. See installation istruction for more details.
429
430 =item B<use_boss_rt>
431
432 Use BOSS real time monitoring.
433
434 =back
435
436 B<[EDG]>
437
438 =over 4
439
440 =item B<lcg_version>
441
442 Version of LCG middleware to be used.
443
444 =item B<RB>
445
446 Which RB you want to use instead of the default one, as defined in the configuration of your UI. The ones available for CMS are I<CERN> and I<CNAF>: the configuration files needed to change the broker will be automatically downloaded from CRAB web page and used. If the files are already present on the working directory they will be used.
447 You can use any other RB which is available, if you provide the proper configuration files. Eg, for RB XYZ, you should provide I<edg_wl_ui.conf.CMS_XYZ> and I<edg_wl_ui_cmd_var.conf.CMS_XYZ> for EDG RB, or I<glite.conf.CMS_XYZ> for glite WMS. These files are searched for in the current working directory, and, if not found, on crab web page. So, if you put your private configuration files in the working directory, they will be used, even if they are not available on crab web page.
448 Please get in contact with crab team if you wish to provide your RB or WMS as a service to the CMS community.
449
450 =item B<proxy_server>
451
452 The proxy server to which you delegate the responsibility to renew your proxy once expired. The default is I<myproxy.cern.ch> : change only if you B<really> know what you are doing.
453
454 =item B<role>
455
456 The role to be set in the VOMS. See VOMS documentation for more info.
457
458 =item B<group>
459
460 The group to be set in the VOMS, See VOMS documentation for more info.
461
462 =item B<dont_check_proxy>
463
464 If you do not want CRAB to check your proxy. The creation of the proxy (with proper lenght), its delegation to a myproxyserver is your responsability.
465
466 =item B<requirements>
467
468 Any other requirements to be add to JDL. Must be written in compliance with JDL syntax (see LCG user manual for further info). No requirement on Computing element must be set.
469
470 =item B<additional_jdl_parameters:>
471
472 Any other parameters you want to add to jdl file: comma separated list, each
473 item B<must> be complete, including the closing ";"
474
475 =item B<max_cpu_time>
476
477 Maximum CPU time needed to finish one job. It will be used to select a suitable queue on the CE. Time in minutes.
478
479 =item B<max_wall_clock_time>
480
481 Same as previous, but with real time, and not CPU one.
482
483 =item B<CE_black_list>
484
485 All the CE (Computing Element) whose name contains the following strings (comma separated list) will not be considered for submission. Use the dns domain (eg fnal, cern, ifae, fzk, cnaf, lnl,....)
486
487 =item B<CE_white_list>
488
489 Only the CE (Computing Element) whose name contains the following strings (comma separated list) will be considered for submission. Use the dns domain (eg fnal, cern, ifae, fzk, cnaf, lnl,....)
490
491 =item B<SE_black_list>
492
493 All the SE (Storage Element) whose name contains the following strings (comma separated list) will not be considered for submission.
494
495 =item B<SE_white_list>
496
497 Only the SE (Storage Element) whose name contains the following strings (comma separated list) will be considered for submission.
498
499 =item B<virtual_organization>
500
501 You don't want to change this: it's cms!
502
503 =item B<retry_count>
504
505 Number of time the grid will try to resubmit your job in case of grid related problem.
506
507 =item B<shallow_retry_count>
508
509 Number of time shallow resubmission the grid will try: resubmissions are tried B<only> if the job aborted B<before> start. So you are guaranteed that your jobs run strictly once.
510
511 =item B<maxtarballsize>
512
513 Maximum size of tar-ball in Mb. If bigger, an error will be generated. The actual limit is that on the RB input sandbox. Default is 9.5 Mb (sandbox limit is 10 Mb)
514
515 =back
516
517 =head1 FILES
518
519 I<crab> uses a configuration file I<crab.cfg> which contains configuration parameters. This file is written in the INI-style. The default filename can be changed by the I<-cfg> option.
520
521 I<crab> creates by default a working directory 'crab_0_E<lt>dateE<gt>_E<lt>timeE<gt>'
522
523 I<crab> saves all command lines in the file I<crab.history>.
524
525 =head1 HISTORY
526
527 B<CRAB> is a tool for the CMS analysis on the grid environment. It is based on the ideas from CMSprod, a production tools implemented originally by Nikolai Smirnov.
528
529 =head1 AUTHORS
530
531 """
532 author_string = '\n'
533 for auth in common.prog_authors:
534 #author = auth[0] + ' (' + auth[2] + ')' + ' E<lt>'+auth[1]+'E<gt>,\n'
535 author = auth[0] + ' E<lt>' + auth[1] +'E<gt>,\n'
536 author_string = author_string + author
537 pass
538 help_string = help_string + author_string[:-2] + '.'\
539 """
540
541 =cut
542 """
543
544 pod = tempfile.mktemp()+'.pod'
545 pod_file = open(pod, 'w')
546 pod_file.write(help_string)
547 pod_file.close()
548
549 if option == 'man':
550 man = tempfile.mktemp()
551 pod2man = 'pod2man --center=" " --release=" " '+pod+' >'+man
552 os.system(pod2man)
553 os.system('man '+man)
554 pass
555 elif option == 'tex':
556 fname = common.prog_name+'-v'+common.prog_version_str
557 tex0 = tempfile.mktemp()+'.tex'
558 pod2tex = 'pod2latex -full -out '+tex0+' '+pod
559 os.system(pod2tex)
560 tex = fname+'.tex'
561 tex_old = open(tex0, 'r')
562 tex_new = open(tex, 'w')
563 for s in tex_old.readlines():
564 if string.find(s, '\\begin{document}') >= 0:
565 tex_new.write('\\title{'+common.prog_name+'\\\\'+
566 '(Version '+common.prog_version_str+')}\n')
567 tex_new.write('\\author{\n')
568 for auth in common.prog_authors:
569 tex_new.write(' '+auth[0]+
570 '\\thanks{'+auth[1]+'} \\\\\n')
571 tex_new.write('}\n')
572 tex_new.write('\\date{}\n')
573 elif string.find(s, '\\tableofcontents') >= 0:
574 tex_new.write('\\maketitle\n')
575 continue
576 elif string.find(s, '\\clearpage') >= 0:
577 continue
578 tex_new.write(s)
579 tex_old.close()
580 tex_new.close()
581 print 'See '+tex
582 pass
583 elif option == 'html':
584 fname = common.prog_name+'-v'+common.prog_version_str+'.html'
585 pod2html = 'pod2html --title='+common.prog_name+\
586 ' --infile='+pod+' --outfile='+fname
587 os.system(pod2html)
588 print 'See '+fname
589 pass
590
591 sys.exit(0)