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