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