Package madgraph :: Package interface :: Module master_interface
[hide private]
[frames] | no frames]

Source Code for Module madgraph.interface.master_interface

  1  ################################################################################ 
  2  # 
  3  # Copyright (c) 2009 The MadGraph5_aMC@NLO Development team and Contributors 
  4  # 
  5  # This file is a part of the MadGraph5_aMC@NLO project, an application which  
  6  # automatically generates Feynman diagrams and matrix elements for arbitrary 
  7  # high-energy processes in the Standard Model and beyond. 
  8  # 
  9  # It is subject to the MadGraph5_aMC@NLO license which should accompany this  
 10  # distribution. 
 11  # 
 12  # For more information, visit madgraph.phys.ucl.ac.be and amcatnlo.web.cern.ch 
 13  # 
 14  ################################################################################ 
 15  """A user friendly command line interface to access all MadGraph5_aMC@NLO features. 
 16     Uses the cmd package for command interpretation and tab completion. 
 17  """ 
 18   
 19   
 20  from __future__ import absolute_import 
 21  import atexit 
 22  import logging 
 23  import optparse 
 24  import os 
 25  import pydoc 
 26  import re 
 27  import subprocess 
 28  import sys 
 29  import traceback 
 30  import time 
 31   
 32  root_path = os.path.split(os.path.dirname(os.path.realpath( __file__ )))[0] 
 33  root_path = os.path.split(root_path)[0] 
 34  sys.path.insert(0, root_path) 
 35   
 36  #usefull shortcut 
 37  pjoin = os.path.join 
 38   
 39  import madgraph 
 40  import madgraph.core.diagram_generation as diagram_generation 
 41  import madgraph.core.helas_objects as helas_objects 
 42  import madgraph.loop.loop_base_objects as loop_base_objects 
 43  import madgraph.interface.extended_cmd as cmd 
 44  import madgraph.interface.madgraph_interface as MGcmd 
 45  import madgraph.interface.loop_interface as LoopCmd 
 46  import madgraph.interface.amcatnlo_interface as amcatnloCmd 
 47  import madgraph.fks.fks_base as fks_base 
 48  import madgraph.iolibs.files as files 
 49  import madgraph.various.misc as misc 
 50   
 51  from madgraph import MG4DIR, MG5DIR, MadGraph5Error, InvalidCmd 
 52   
 53  logger = logging.getLogger('cmdprint') # -> stdout 
54 55 56 -class Switcher(object):
57 """ Helping class containing all the switching routine """ 58
59 - def __init__(self, main='MadGraph', *args, **opt):
60 61 # define the interface 62 self.change_principal_cmd(main) 63 self.cmd.__init__(self, *args, **opt)
64 65 interface_names= {'MadGraph':('MG5_aMC',MGcmd.MadGraphCmd), 66 'MadLoop':('MG5_aMC',LoopCmd.LoopInterface), 67 'aMC@NLO':('MG5_aMC',amcatnloCmd.aMCatNLOInterface)} 68 69 _switch_opts = list(interface_names.keys()) 70 current_interface = None 71 72 # Helper functions 73
74 - def setup(self, *args, **opts):
75 """ Function to initialize the interface when switched to it. It is not 76 the same as __init__ as this latter functions would call its mother 77 from madgraph_interface and this is only desirable for the first 78 initialization when launching MG5 """ 79 return self.cmd.setup(self, *args, **opts)
80 158 159 160 161 @staticmethod
162 - def extract_process_type(line):
163 """Extract from a string what is the type of the computation. This 164 returns a tuple (mode, option, pert_orders) where mode can be either 'NLO' or 'tree' 165 and option 'all', 'real' or 'virt'.""" 166 167 # Perform sanity modifications on the lines: 168 # Add a space before and after any > , $ / | [ ] 169 space_before = re.compile(r"(?P<carac>\S)(?P<tag>[\\[\\]/\,\\$\\>|])(?P<carac2>\S)") 170 line2 = space_before.sub(r'\g<carac> \g<tag> \g<carac2>', line) 171 172 # Use regular expressions to extract the loop mode (if present) and its 173 # option, specified in the line with format [ option = loop_orders ] or 174 # [ loop_orders ] which implicitly select the 'all' option. 175 loopRE = re.compile(r"^(.*)(?P<loop>\[(\s*(?P<option>\w+)\s*=)?(?P<orders>.+)?\])(.*)$") 176 # Make sure that the content of options following '--' are not considered. 177 res=loopRE.search(re.split('%s\-\-', line,1)[0]) 178 if res: 179 orders=res.group('orders').split() if res.group('orders') else [] 180 if res.group('option') and len(res.group('option').split())==1: 181 if res.group('option').split()[0]=='tree': 182 return ('tree',res.group('option').split()[0],orders) 183 else: 184 return ('NLO',res.group('option').split()[0],orders) 185 else: 186 # If not option is set the convention is that the mode is 'all' 187 # unless no perturbation orders is defined. 188 # if order is set to LOonly assume LOonly=QCD 189 if orders == ['LOonly']: 190 return ('NLO', 'LOonly', ['QCD']) 191 elif len(orders)>0: 192 return ('NLO','all',orders) 193 else: 194 return ('tree',None,[]) 195 else: 196 return ('tree',None,[])
197 198 # Wrapping functions possibly switching to new interfaces 199
200 - def do_add(self, line, *args, **opts):
201 202 allow_switch = True 203 if self._curr_amps: 204 allow_switch = False 205 206 argss = cmd.Cmd.split_arg(line) 207 if len(argss)>=1 and argss[0] in ['process','timing','profile']: 208 proc_line = ' '.join(argss[1:]) 209 (type,nlo_mode,orders)=self.extract_process_type(proc_line) 210 if type=='NLO': 211 if not nlo_mode in self._valid_nlo_modes: raise self.InvalidCMD( \ 212 'The NLO mode %s is not valid. Please choose one among: %s' \ 213 % (nlo_mode, ' '.join(self._valid_nlo_modes))) 214 elif nlo_mode in ['all', 'real', 'LOonly']: 215 self.change_principal_cmd('aMC@NLO', allow_switch) 216 elif nlo_mode in ['virt', 'sqrvirt']: 217 self.change_principal_cmd('MadLoop', allow_switch) 218 elif nlo_mode == 'noborn': 219 if self.current_interface == "MadGraph": 220 allow_switch = True 221 self.change_principal_cmd('MadLoop', allow_switch) 222 self.cmd.validate_model(self, loop_type=nlo_mode, 223 coupling_type=orders) 224 self.change_principal_cmd('MadGraph', allow_switch) 225 return self.cmd.create_loop_induced(self, line, *args, **opts) 226 else: 227 self.change_principal_cmd('MadGraph', allow_switch) 228 try: 229 return self.cmd.do_add(self, line, *args, **opts) 230 except fks_base.NoBornException: 231 logger.info("---------------------------------------------------------------------------", '$MG:BOLD') 232 logger.info(" No Born diagrams found. Now switching to the loop-induced mode. ", '$MG:BOLD') 233 logger.info(" Please also cite ref. 'arXiv:1507.00020' when using results from this mode. ", '$MG:BOLD') 234 logger.info("---------------------------------------------------------------------------", '$MG:BOLD') 235 self.change_principal_cmd('MadGraph',allow_switch) 236 return self.cmd.create_loop_induced(self, line, *args, **opts)
237 238
239 - def do_check(self, line, *args, **opts):
240 241 argss = self.split_arg(line) 242 proc_line = " ".join(argss[1:]) 243 (type,nlo_mode,orders)=self.extract_process_type(proc_line) 244 if type=='NLO': 245 if not nlo_mode in self._valid_nlo_modes: raise self.InvalidCMD(\ 246 'The NLO mode %s is not valid. Please chose one among: %s' \ 247 % (nlo_mode, ' '.join(self._valid_nlo_modes))) 248 elif nlo_mode in ['all']: 249 self.change_principal_cmd('MadLoop') 250 elif nlo_mode == 'real': 251 raise self.InvalidCMD('Mode [real=...] not valid for checking processes.') 252 self.change_principal_cmd('aMC@NLO') 253 elif nlo_mode == 'virt' or nlo_mode == 'sqrvirt': 254 self.change_principal_cmd('MadLoop') 255 else: 256 self.change_principal_cmd('MadGraph') 257 258 return self.cmd.do_check(self, line, *args, **opts)
259
260 - def do_generate(self, line, *args, **opts):
261 262 argss = cmd.Cmd.split_arg(line) 263 # Make sure to switch to the right interface. 264 if len(argss)>=1: 265 proc_line = ' '.join(argss[1:]) 266 (type,nlo_mode,orders)=self.extract_process_type(proc_line) 267 if type=='NLO': 268 if not nlo_mode in self._valid_nlo_modes: raise self.InvalidCmd( \ 269 'The NLO mode %s is not valid. Please chose one among: %s' \ 270 % (nlo_mode, ' '.join(self._valid_nlo_modes))) 271 elif nlo_mode in ['all', 'real', 'LOonly']: 272 self._fks_multi_proc = fks_base.FKSMultiProcess() 273 self.change_principal_cmd('aMC@NLO') 274 elif nlo_mode == 'virt' or nlo_mode == 'virtsqr': 275 self.change_principal_cmd('MadLoop') 276 else: 277 self.change_principal_cmd('MadGraph') 278 return self.cmd.do_generate(self, line, *args, **opts)
279
280 - def do_import(self, *args, **opts):
281 self.cmd.do_import(self, *args, **opts) 282 if self._curr_model: 283 if isinstance(self._curr_model, loop_base_objects.LoopModel) and \ 284 self._curr_model['perturbation_couplings']!=[] and \ 285 self.current_interface not in ['aMC@NLO','MadLoop']: 286 self.change_principal_cmd('aMC@NLO') 287 if (not isinstance(self._curr_model, loop_base_objects.LoopModel) or \ 288 self._curr_model['perturbation_couplings']==[]) and \ 289 self.current_interface in ['MadLoop']: 290 self.change_principal_cmd('MadGraph') 291 import madgraph.various.misc as misc 292 return
293
294 - def do_output(self, line, *args, **opts):
295 """ treat output aloha in order to use always the one in MG5 """ 296 if line.strip().startswith('aloha'): 297 MGcmd.MadGraphCmd.do_output(self, line, *args, **opts) 298 else: 299 self.cmd.do_output(self, line, *args, **opts)
300
301 - def check_output(self, arg, *args, **opts):
302 if arg and arg[0] == 'aloha': 303 MGcmd.MadGraphCmd.check_output(self, arg, *args, **opts) 304 else: 305 self.cmd.check_output(self, arg, *args, **opts)
306 307 308 309 310 # Dummy functions, not triggering any switch of interfaces 311
312 - def export(self, *args, **opts):
313 return self.cmd.export(self, *args, **opts)
314
315 - def check_add(self, *args, **opts):
316 return self.cmd.check_add(self, *args, **opts)
317
318 - def check_answer_in_input_file(self, *args, **opts):
319 return self.cmd.check_answer_in_input_file(self, *args, **opts)
320
321 - def check_check(self, *args, **opts):
322 return self.cmd.check_check(self, *args, **opts)
323
324 - def check_define(self, *args, **opts):
325 return self.cmd.check_define(self, *args, **opts)
326
327 - def check_decay_diagram(self, *args, **opts):
328 return self.cmd.check_decay_diagram(self, *args, **opts)
329
330 - def complete_decay_diagram(self, *args, **opts):
331 return self.cmd.complete_decay_diagram(self, *args, **opts)
332
333 - def do_decay_diagram(self, *args, **opts):
334 return self.cmd.do_decay_diagram(self, *args, **opts)
335
336 - def help_decay_diagram(self, *args, **opts):
337 return self.cmd.help_decay_diagram(self, *args, **opts)
338
339 - def check_compute_widths(self, *args, **opts):
340 return self.cmd.check_compute_widths(self, *args, **opts)
341
342 - def complete_compute_widths(self, *args, **opts):
343 return self.cmd.complete_compute_widths(self, *args, **opts)
344
345 - def do_compute_widths(self, *args, **opts):
346 return self.cmd.do_compute_widths(self, *args, **opts)
347
348 - def help_compute_widths(self, *args, **opts):
349 return self.cmd.help_compute_widths(self, *args, **opts)
350
351 - def check_display(self, *args, **opts):
352 return self.cmd.check_display(self, *args, **opts)
353
354 - def check_draw(self, *args, **opts):
355 return self.cmd.check_draw(self, *args, **opts)
356
357 - def check_for_export_dir(self, *args, **opts):
358 return self.cmd.check_for_export_dir(self, *args, **opts)
359
360 - def check_generate(self, *args, **opts):
361 return self.cmd.check_generate(self, *args, **opts)
362
363 - def check_tutorial(self, *args, **opts):
364 return self.cmd.check_tutorial(self, *args, **opts)
365
366 - def check_history(self, *args, **opts):
367 return self.cmd.check_history(self, *args, **opts)
368
369 - def check_import(self, *args, **opts):
370 return self.cmd.check_import(self, *args, **opts)
371
372 - def check_install(self, *args, **opts):
373 return self.cmd.check_install(self, *args, **opts)
374
375 - def check_launch(self, *args, **opts):
376 return self.cmd.check_launch(self, *args, **opts)
377
378 - def check_load(self, *args, **opts):
379 return self.cmd.check_load(self, *args, **opts)
380
381 - def check_open(self, *args, **opts):
382 return self.cmd.check_open(self, *args, **opts)
383
384 - def check_process_format(self, *args, **opts):
385 return self.cmd.check_process_format(self, *args, **opts)
386
387 - def check_save(self, *args, **opts):
388 return self.cmd.check_save(self, *args, **opts)
389
390 - def check_set(self, *args, **opts):
391 return self.cmd.check_set(self, *args, **opts)
392
393 - def get_stored_line(self, *args, **opts):
394 return self.cmd.get_stored_line(self, *args, **opts)
395
396 - def complete_add(self, *args, **opts):
397 return self.cmd.complete_add(self, *args, **opts)
398
399 - def complete_switch(self, *args, **opts):
400 return self.cmd.complete_switch(self, *args, **opts)
401
402 - def complete_check(self, *args, **opts):
403 return self.cmd.complete_check(self, *args, **opts)
404
405 - def help_convert(self, *args, **opts):
406 return self.cmd.help_convert(self, *args, **opts)
407
408 - def complete_convert(self, *args, **opts):
409 return self.cmd.complete_convert(self, *args, **opts)
410
411 - def complete_define(self, *args, **opts):
412 return self.cmd.complete_define(self, *args, **opts)
413
414 - def complete_display(self, *args, **opts):
415 return self.cmd.complete_display(self, *args, **opts)
416
417 - def complete_draw(self, *args, **opts):
418 return self.cmd.complete_draw(self, *args, **opts)
419
420 - def complete_generate(self, *args, **opts):
421 return self.cmd.complete_generate(self, *args, **opts)
422
423 - def complete_help(self, *args, **opts):
424 return self.cmd.complete_help(self, *args, **opts)
425
426 - def complete_history(self, *args, **opts):
427 return self.cmd.complete_history(self, *args, **opts)
428
429 - def complete_import(self, *args, **opts):
430 return self.cmd.complete_import(self, *args, **opts)
431
432 - def complete_install(self, *args, **opts):
433 return self.cmd.complete_install(self, *args, **opts)
434
435 - def complete_launch(self, *args, **opts):
436 return self.cmd.complete_launch(self, *args, **opts)
437
438 - def complete_load(self, *args, **opts):
439 return self.cmd.complete_load(self, *args, **opts)
440
441 - def complete_open(self, *args, **opts):
442 return self.cmd.complete_open(self, *args, **opts)
443
444 - def complete_output(self, *args, **opts):
445 return self.cmd.complete_output(self, *args, **opts)
446
447 - def complete_save(self, *args, **opts):
448 return self.cmd.complete_save(self, *args, **opts)
449
450 - def complete_set(self, *args, **opts):
451 return self.cmd.complete_set(self, *args, **opts)
452
453 - def complete_tutorial(self, *args, **opts):
454 return self.cmd.complete_tutorial(self, *args, **opts)
455
456 - def do_switch(self, *args, **opts):
457 """Not in help """ 458 return self.cmd.do_switch(self, *args, **opts)
459
460 - def do_EOF(self, *args, **opts):
461 return self.cmd.do_EOF(self, *args, **opts)
462
463 - def do_define(self, *args, **opts):
464 return self.cmd.do_define(self, *args, **opts)
465
466 - def do_display(self, *args, **opts):
467 return self.cmd.do_display(self, *args, **opts)
468
469 - def do_exit(self, *args, **opts):
470 return self.cmd.do_exit(self, *args, **opts)
471
472 - def do_help(self, *args, **opts):
473 return self.cmd.do_help(self, *args, **opts)
474
475 - def do_convert(self, *args, **opts):
476 return self.cmd.do_convert(self, *args, **opts)
477
478 - def do_convert_model(self, *args, **opts):
479 return self.cmd.do_convert_model(self, *args, **opts)
480
481 - def do_history(self, *args, **opts):
482 return self.cmd.do_history(self, *args, **opts)
483
484 - def do_install(self, *args, **opts):
485 self.cmd.do_install(self, *args, **opts)
486
487 - def do_launch(self, line, *argss, **opts):
488 args = cmd.Cmd.split_arg(line) 489 # check if a path is given 490 if len(args) >=1: 491 if os.path.isdir(args[0]): 492 path = os.path.realpath(args[0]) 493 elif os.path.isdir(pjoin(MG5DIR,args[0])): 494 path = pjoin(MG5DIR,args[0]) 495 elif MG4DIR and os.path.isdir(pjoin(MG4DIR,args[0])): 496 path = pjoin(MG4DIR,args[0]) 497 else: 498 path=None 499 # if there is a path, find what output has been done 500 if path: 501 type = self.cmd.find_output_type(self, path) 502 if type in ['standalone', 'standalone_cpp', 'pythia8', 'madevent']: 503 self.change_principal_cmd('MadGraph') 504 elif type == 'aMC@NLO': 505 self.change_principal_cmd('aMC@NLO') 506 elif type == 'MadLoop': 507 self.change_principal_cmd('MadLoop') 508 509 return self.cmd.do_launch(self, line, *argss, **opts)
510
511 - def do_load(self, *args, **opts):
512 return self.cmd.do_load(self, *args, **opts)
513
514 - def do_open(self, *args, **opts):
515 return self.cmd.do_open(self, *args, **opts)
516
517 - def do_quit(self, *args, **opts):
518 return self.cmd.do_quit(self, *args, **opts)
519
520 - def do_save(self, *args, **opts):
521 return self.cmd.do_save(self, *args, **opts)
522
523 - def do_set(self, *args, **opts):
524 return self.cmd.do_set(self, *args, **opts)
525
526 - def do_tutorial(self, *args, **opts):
527 return self.cmd.do_tutorial(self, *args, **opts)
528
529 - def help_EOF(self, *args, **opts):
530 return self.cmd.help_EOF(self, *args, **opts)
531
532 - def help_add(self, *args, **opts):
533 return self.cmd.help_add(self, *args, **opts)
534
535 - def help_check(self, *args, **opts):
536 return self.cmd.help_check(self, *args, **opts)
537
538 - def help_define(self, *args, **opts):
539 return self.cmd.help_define(self, *args, **opts)
540
541 - def help_display(self, *args, **opts):
542 return self.cmd.help_display(self, *args, **opts)
543
544 - def help_generate(self, *args, **opts):
545 return self.cmd.help_generate(self, *args, **opts)
546
547 - def help_help(self, *args, **opts):
548 return self.cmd.help_help(self, *args, **opts)
549
550 - def help_history(self, *args, **opts):
551 return self.cmd.help_history(self, *args, **opts)
552
553 - def help_import(self, *args, **opts):
554 return self.cmd.help_import(self, *args, **opts)
555
556 - def help_install(self, *args, **opts):
557 return self.cmd.help_install(self, *args, **opts)
558
559 - def help_launch(self, *args, **opts):
560 return self.cmd.help_launch(self, *args, **opts)
561
562 - def help_load(self, *args, **opts):
563 return self.cmd.help_load(self, *args, **opts)
564
565 - def help_open(self, *args, **opts):
566 return self.cmd.help_open(self, *args, **opts)
567
568 - def help_output(self, *args, **opts):
569 return self.cmd.help_output(self, *args, **opts)
570
571 - def help_quit(self, *args, **opts):
572 return self.cmd.help_quit(self, *args, **opts)
573
574 - def help_save(self, *args, **opts):
575 return self.cmd.help_save(self, *args, **opts)
576
577 - def help_set(self, *args, **opts):
578 return self.cmd.help_set(self, *args, **opts)
579
580 - def help_tutorial(self, *args, **opts):
581 return self.cmd.help_tutorial(self, *args, **opts)
582
583 - def test_interface(self, *args, **opts):
584 return self.cmd.test_interface(self, *args, **opts)
585
586 - def set_configuration(self, *args, **opts):
587 return self.cmd.set_configuration(self, *args, **opts)
588
589 - def check_customize_model(self, *args, **opts):
590 return self.cmd.check_customize_model(self, *args, **opts)
591
592 - def complete_customize_model(self, *args, **opts):
593 return self.cmd.complete_customize_model(self, *args, **opts)
594
595 - def do_customize_model(self, *args, **opts):
596 return self.cmd.do_customize_model(self, *args, **opts)
597
598 - def help_customize_model(self, *args, **opts):
599 return self.cmd.help_customize_model(self, *args, **opts)
600
601 -class MasterCmd(Switcher, LoopCmd.LoopInterface, amcatnloCmd.aMCatNLOInterface, cmd.CmdShell):
602
603 - def __init__(self, main='MadGraph', *args, **opt):
604 605 # define the interface 606 if main in list(self.interface_names.keys()): 607 self.prompt= self.interface_names[main][0]+'>' 608 self.cmd= self.interface_names[main][1] 609 self.current_interface=main 610 else: 611 raise MadGraph5Error('Type of interface not valid: %s' % main) 612 self.cmd.__init__(self, *args, **opt) 613 self.current_interface = main
614
615 - def complete_switch(self, text, line, begidx, endidx):
616 """Complete the switch command""" 617 return self.list_completion(text,self._switch_opts)
618
619 - def do_switch(self, line):
620 """Not in help: Allow to switch to any given interface from command line """ 621 622 args = cmd.Cmd.split_arg(line) 623 if len(args)==1 and args[0] in list(self.interface_names.keys()): 624 self.change_principal_cmd(args[0]) 625 else: 626 raise self.InvalidCmd("Invalid switch command or non existing interface %s."\ 627 %args[0]+" Valid interfaces are %s"\ 628 %','.join(list(interface_quick_name.keys())))
629
630 - def change_principal_cmd(self, name, allow_switch=True):
631 632 633 old_cmd=self.current_interface 634 if old_cmd == name: 635 return 636 elif not allow_switch: 637 raise InvalidCmd("Command not compatible with previous command: Can not combine LO/NLO feature.") 638 639 if name in list(self.interface_names.keys()): 640 self.prompt= self.interface_names[name][0]+'>' 641 self.cmd= self.interface_names[name][1] 642 self.current_interface=name 643 else: 644 raise MadGraph5Error('Type of interface not valid: %s' % name) 645 646 if self.interface_names[old_cmd][0]!=self.interface_names[name][0]: 647 logger.info("Switching from interface %s to %s"\ 648 %(self.interface_names[old_cmd][0],\ 649 self.interface_names[name][0])) 650 # Setup the interface 651 self.cmd.setup(self) 652 653 if __debug__: 654 self.debug_link_to_command()
655
656 657 -class MasterCmdWeb(MGcmd.MadGraphCmdWeb, Switcher, LoopCmd.LoopInterfaceWeb):
658
659 - def __init__(self, *arg, **opt):
660 661 if '_CONDOR_SCRATCH_DIR' in os.environ: 662 self.writing_dir = pjoin(os.environ['_CONDOR_SCRATCH_DIR'], \ 663 os.path.pardir) 664 else: 665 self.writing_dir = pjoin(os.environ['MADGRAPH_DATA'], 666 os.environ['REMOTE_USER']) 667 668 669 #standard initialization 670 Switcher.__init__(self, mgme_dir = '', *arg, **opt) 671 672 self.options['timeout'] = 1 # time authorize to answer question [0 is no time limit]
673
674 - def change_principal_cmd(self, name):
675 if name == 'MadGraph': 676 self.cmd = MGcmd.MadGraphCmdWeb 677 elif name == 'Loop': 678 self.cmd = LoopCmd.LoopInterfaceWeb 679 else: 680 raise MadGraph5Error('Type of interface not valid') 681 682 if __debug__: 683 self.debug_link_to_command()
684
685 - def do_shell(self, *args):
686 raise Exception
687
688 - def finalize(self, nojpeg, flaglist=[]):
689 """Finalize web generation""" 690 691 if flaglist != []: 692 raise Exception 693 self.cmd.finalize(self, nojpeg, online = True)
694
695 - def finalize(self, nojpeg, **opts):
696 """Finalize web generation""" 697 698 opts['online'] = True 699 self.cmd.finalize(self, nojpeg, opts)
700 701 # Generate a new amplitude
702 - def do_generate(self, line):
703 """Generate an amplitude for a given process""" 704 705 try: 706 Switcher.do_generate(self, line) 707 except: 708 # put the stop logo on the web 709 files.cp(self._export_dir+'/HTML/stop.jpg',self._export_dir+'/HTML/card.jpg') 710 raise
711 712 # Add a process to the existing multiprocess definition
713 - def do_add(self, line):
714 """Generate an amplitude for a given process and add to 715 existing amplitudes 716 syntax: 717 """ 718 try: 719 Switcher.do_add(self, line) 720 except: 721 # put the stop logo on the web 722 files.cp(self._export_dir+'/HTML/stop.jpg',self._export_dir+'/HTML/card.jpg') 723 raise
724 725 # Use the cluster file for the configuration
726 - def set_configuration(self, config_path=None, final=False):
727 728 """Force to use the web configuration file only""" 729 config_path = pjoin(os.environ['MADGRAPH_BASE'], 'mg5_configuration.txt') 730 return Switcher.set_configuration(self, config_path=config_path, final=final)
731
732 - def do_save(self, line, check=True, **opt):
733 """Save information to file""" 734 735 if check: 736 self.check_save([]) 737 raise #useless but full security 738 739 args = self.split_arg(line) 740 if args[0] != 'options': 741 Switcher.do_save(self, line,check, opt) 742 else: 743 # put default options since 744 # in the web the local file is not used 745 # in download the default file is more usefull 746 files.cp(pjoin(MG5DIR,'input','mg5_configuration.txt'), args[1])
747
748 - def do_install(self, line):
749 """block all install""" 750 return
751