== MadWeight Analyzer Class ==
=== Particle ===
==== Particle ====
===== !! variable =====
||'''name'''||'''object'''||'''default'''||'''fonction'''||
||'''pid'''||int||asked|| pid number||
||'''MG'''||int||asked|| MadGraph intern number||
||'''mass'''||float||0|| mass of the particle||
||'''mother'''||Particle||0|| mother of the particle||
||'''neutrino'''||int||0|| 1 if this particle is a neutrino||
||'''external'''||int||automatic|| 1 if this is an external particle||
||'''twin'''||Particle||0|| Particle comming from the same propagator||
Optional variable:
||'''name'''||'''object'''||'''fonction'''||
||'''all_mother'''||list of Particle||||list of all mother of the particle||
||'''level'''||int|||| number a propa before himself (with himself include)||
===== !! routine =====
||'''name'''||'''input'''||'''output'''||'''fonction'''||
||'''add_mother'''||Particle||None|| define particle as the mother of this particle||
||'''def_all_mother'''||None||list|| define the list of all the mother of teh particle (and store the info)||
||'''def_mass'''||Dict_card||None||define the mass of the particle||
||'''detect_neut_in_decay'''||None||Particle,int||detect the nearest neutrino in the decay branch. return this neutrino and its level compare to this particle||
==== Propagator ====
===== !! variable =====
||'''name'''||'''object'''||'''default'''||'''fonction'''||
||'''channel'''||str||input|| say if it is a S or T channel||
||'''width'''||float||0|| width of the propagator||
===== !! routine =====
||'''name'''||'''input'''||'''output'''||'''fonction'''||
||'''def_desintegation'''|| 2 Particle ||None|| define this two particle like child and define in this two who are the mother||
==== external_part ====
===== !! variable =====
||'''name'''||'''object'''||'''default'''||'''fonction'''||
||'''neutrino'''||int||automatic|| 1 if this particle is a neutrino||
||'''external'''||int||1|| 1 if this is an external particle||
||'''width'''||int||-1|| width of the particle (-1 if external particle)||
||Optional variable||
||'''tf_level'''||int||Error|| 0-1 particle cann't enter in change of variable,
2 can and 3 must (for invisible particle)||
===== !! routine =====
||'''name'''||'''input'''||'''output'''||'''fonction'''||
||'''is_invisible'''||None||None||detect if the external particle is visible in the detector or not||
||'''unaligned_propa'''||Particle+(int)||int or 3 int||compute the number of propa in common. Return the total number of propagator before the two particle (default) in addtion it can give the number of uncorelated propagator for the two particle (put total=0) ||
=== diagram ===
==== diagram ====
===== !! variable =====
||'''name'''||'''object'''||'''default'''||'''utility'''||
||'''content'''||dict||void||link from MG number to the particle object associated||
||'''prop_content'''||listof Propagator||void||list of all propagator in th diagram||
||'''ext_content'''||list of Ext_particle||void||list of all external particle in the diagram||
||'''neut_content'''||list of Ext_particle||void||list of all neutrino in the diagram||
||'''num_propa'''||int||0||number of propa in the diagram||
||'''ext_part'''||int||0||number of external particle in the diagram||
||'''num_neut'''||int||0||number of neutrino in the diagram||
||'''config'''||int||input||number of the feynman diagram consider||
===== !! routine =====
||'''name'''||'''input'''||'''output'''||'''fonction'''||
||'''add_content'''||MG_id(int),Particle||None|| add particle with MG number in the diagram||
||'''contains_particle'''||Particle||logic||chek if the particle belongs to this diagram||
||'''define_level'''||None||None|| define for all the content the level: number a propa before himself (with himself include)||
||'''define_neut_content'''||None||None|| define neutrino content of the diagram||
||'''order_in_level'''||None||None|| reordering the ext_content in level order||
==== MG_diagram ====
===== !! variable =====
||'''name'''||'''object'''||'''default'''||'''utility'''||
||'''ECS_sol'''||list of ECS||void||list of possible ECS||
||'''blob_content'''||list of BLob||void||list of blob present in (at least) one ECS sector||
||'''num_init'''||int||2||number of initial particle||
||'''directory'''||str||''||directory in which we read the Feynman diagram||
===== !! routine =====
||'''charge diagram'''||||||||
||'''name'''||'''input'''||'''output'''||'''fonction'''||
||'''import_process'''||dir_file(str),config(int)||None||charge the information coming from configs.inc and leshouches.inc||
||'''define_neutrino_stuff'''||None||None||put uptodate all neutrino dependent variable||
||'''define_parameter'''||param_card(str)||None||define mass-width for all Particle (from param card)||
||'''define_tf_width'''||file(str)||None|| associate the TF-level at each particle||
||'''detect_invisible_propa'''||None||None||detect propagator decaying in fully invisible particle and treat this case||
||'''creation of ECS'''||||||||
||'''name'''||'''input'''||'''output'''||'''fonction'''||
||'''define_Constraint_sector'''||None||None||define the constraint sector and the different blob (directing routine)||
||'''select_ECS'''||ECS_list,(define_solution=1)||None|| select the best(s) ECS in the list (minimizing unfactorized propagator) and define solution if define==1||
||'''define_ECS_as_solution'''||ECS_list||NONE||define ECS for a new (or a list) of new solution(s) for the ECS change of variable||
||'''find_ECS_0neut'''||(force=0)||ECS_list|| find ECS containing no neutrino. force authorizes some level 1 to be choose||
||'''find_ECS_1neut'''||None||ECS_list||find the lowest(s) neutrino and define ECS||
||'''find_ECS_2neut'''||None||ECS_list||return best 2 neutrino ECS||
||'''creation of blob'''||||||||
||'''name'''||'''input'''||'''output'''||'''fonction'''||
||'''solve_blob_sector'''||None||None||resolve the change of variable for blob (scheduler)||
||* write Solution*||||||||
||'''name'''||'''input'''||'''output'''||'''fonction'''||
||'''create_fortran_code'''||None||None|| create the code(sceduler)||
||'''create_MadWeight_data'''||object,i(int)||None||create the data_$i.inc for solution||
||'''create_MadWeight_main'''||object,i(int)||None||create the main_code_$i.inc for solution||
||'''create_pmass2'''||object,i(int)||None||create the pmass2_$i.inc for solution||
||'''already_generated_in_decay'''||particle,generated_propa||generated_propa||give (recurently) all the first particle already generated in the branchs of desintegration||
||check_invisible_decay||None||text||check if one of the invisible particle decay in 2 invisible particle.
\
return 0 if not
\
return a text with the call of the equivalent subroutine
||
||'''collect_generated_propa'''||ECS,blob_sol_list||propa_list||return all the propagator that must be generated following BW distibution||
||'''return_propa_generation'''||list,pos||line(str)||return the line for the definition of how to generate the mass||
||* Other function*||||||||
||'''name'''||'''input'''||'''output'''||'''fonction'''||
||'''find_lowest_particle'''||(3 options)||Particle_list||find the one/two lowest (lower level) neutrino/particle, if the are ambiguity return more than two||
||'''find_num_neut_decay'''||None||None||find the number of neutrino in the decay of each particle||
||'''set_option'''||info(str,dict,void)||None||store the different option linked to the generation of this MG_diagram||
==== ECS_sector ====
ECS sector have multiple heritage. See in The Level_generation heritage class to find all this specific caracteristic
==== blob_sector ====
===== !! variable =====
||'''name'''||'''object'''||'''default'''||'''utility'''||
||main|| Particle||define||gives the Particle wich generates all the blob||
||sol||list||void||list of the different solution of this blob||
===== !! routine =====
||'''name'''||'''input'''||'''output'''||'''fonction'''||
||find_solutions||None||None||find a first solution to resolve the blob.
\
The idea is to take the more local possibility in all case
\
this is perhaps not the best solution but it's only the beginning of the resolution
||
||generate_content||None||None||import all the information for the blog||
||put_in_ecs||ECS||None|| put this blob in the blob content of ECS||
||supress_identical_solution||None||None|| supress identical solution ||
=== Level_generation ===
==== Level_generation ====
===== !! variable =====
||'''name'''||'''object'''||'''default'''||'''utility'''||
||num_fuse||int||0|| number of fuse particle in the solution||
||sol_tag||str||def|| type of solution description||
||step||list_Block||void||list of the block to use for the generation (must be most of the time in the correct order)||
===== !! routine =====
||'''name'''||'''input'''||'''output'''||'''fonction'''||
||define_fuse_region||fuse_list||fuse_Particle||define a fuse part(Block '2' but with new particle) for the particle in the list ||
||order_block||Block||None||(re)ordrer so that the new order follow the generation order||
==== ECS_sector ====
May Attention this object have multi heritage-> from Diagram (number 1) and secondly from Level_generation
===== !! variable =====
||'''name'''||'''object'''||'''default'''||'''utility'''||
||MG_sec||MG_diagram||def||link to the Feynam object||
||chgt_var||str||def||a letter (lowercase) describe a change of variable in the ECS, and a 2 describe a fuse||
||main_content||list_Particle||def||central particle of the ECS||
||unaligned||int||def||number of propagator in the black box plus the number of neutrinos quantity generated.||
||num_neut||int||auto|| number of neutrion in the ECS||
||intrinsec||int||auto|| number of fondamental particle in ECS||
===== !! routine =====
||'''name'''||'''input'''||'''output'''||'''fonction'''||
||define_blob||MG_diag||None|| define the blob associated to this Enlarged constraint sector( in MG_diag and in ECS) ||
||equivalent_ECS||None||None||1) define completly the change of variable for the enlarged ECS
\
-find which propagator aligned,...
\
2) define equivalent solution if any (B->C)||
||equivalent_ECS_1neut||None||None||^||
||equivalent_ECS_2neut||None||None||^||
||info||None||str||return some information about the ECS and the associated blob for write in output||
||order_block||None||none|| order the block of step||
||update_unaligned_with_blob||None||None||take care of the position of the other neutrino in order to have a more
\
serious definition of the number of un-aligned variable
\
this routine is designed for update the 1 neutrino case||
==== Blob_solution ====
===== !! variable =====
||'''name'''||'''object'''||'''default'''||'''utility'''||
||blob_sec||Blob_sector||def|| to with blob this solution is linked||
||how_gen||dict||special||Particle-> linked block for generation (if not ''): initial value is "" for all particle in the blob||
===== !! routine =====
||'''name'''||'''input'''||'''output'''||'''fonction'''||
||copy_solution||Blob_sol||None||duplicate solution (no alias use) in order to modify it later||
||debug||None||None||print information||
|| Find Solution||||||||
||find_all_solutions||blob||None|| complete blob.sol => find tree solutions:
\
1. this solutions maximize the number of propagator generated following BW
\
2. this solutions maximize the number of external particle generated following tf (i.e. all execpt neutrino)
\
3. this solutions try to be an intermediate solution between the two ||
||find_beta_solution||blob||None|| find a first solution to resolve the blob\
The idea is to take the more local possibility in all case.\
this is perhaps not the best solution but it's only the beginning of the resolution.\
Secondly we will not defined 'final' block but some more generic one (like E*: restriction at one level of E)||
||resolve_piece||Blob,Particle||None||find the 'first' solution for the blok taht will be linked to Particle||
||treat_conflicting_block||block||None|| if a 'C' block is block by a 'A' block it's sometimes more powerful to degrade the 'A' in 'B'\
if the 'C' can be upgrated to 'A' ||
||Modify Solution||||||||
||pass_in_solution||tag||None||tag -> upgrate solution in order to fullfill taged criteria \
upgrate 'beta' solution following some criteria(tagged with tag)||
||extend_block||chgt_var||none|| put the A/D/E propagator in place to minize problem with thin transfer function||
||convert_DE_in_1||None||None||convert all 'E*' and all 'd' in '1' block ||
||convert_E_in_D||None||None||convert all 'E*' in 'd'||
||del_ext1_in||None||None|| delete blok '1' but only if the particle is an external one!||
=== Block_sector ===
define:store information on a Block.
==== Block_sector ====
===== !! variable =====
||'''name'''||'''object'''||'''default'''||'''utility'''||
||sol_sec||solution_sector||def|| this blob is linked to one solution||
||chgt_var||str||def|| which type of chgt_var||
||in_part||list_Particle||def||particle that must be define before-in the same time that the block||
||out_part||list_Particle||def||Particle which can be generated by the block||
||neut_content||list_Particle||auto||neutrino particle||
||num_neut||int||auto||number of neutrino||
||stop||str||void||reason why we don't choose an other block||
||order_content||list_Block||auto||organize particle in order to have the correct ordrer in F77 program||
===== !! routine =====
||'''name'''||'''input'''||'''output'''||'''fonction'''||
||def_order_content||None||None|| define (in the corect order) the particle used in fuse sector (routine overwirtted in other case) ||
||give_stop_reason||log||None||store log end message||
==== Block_ECS ====
===== !! routine =====
def_order_content
||'''name'''||'''input'''||'''output'''||'''fonction'''||
||def_order_content||None||None|| define (in the corect order) the particle used in ECS ||
==== Block_b ====
===== !! routine =====
||'''name'''||'''input'''||'''output'''||'''fonction'''||
||change_chgt_var||new||None|| change the changement of variable associated ||
||def_order_content||None||None|| define (in the corect order) the particle used in this blob ||
||del_from_sol||None||None||supress corectly the block of the solutions||
||put_B_sol_uptodate||Sol_sec||None||put the solution status uptodate with this block definition||
||redefine_block||Init_entry||None||redifine block||
=== Other ===
==== !! Mod_file ====
Sort of Template in order to write correctly output file
==== !! Option ====
Store all the option for the Program MadAnalyzer
file: diagram_class.py
|| Options ||||||||
|| '''Block_name''' || '''TAG''' || * default value* || '''utility''' ||
|| MW_Gen || 1. || 1 || In ECS, choice which propagator to allign 1: thiner 2: nearest of the neutrino||
|| MW_Gen || 2. || 1 || In Blob, choice which propagator to allign 1: thiner 2: nearest ||
|| MW_Gen || 3. || 4 || Maximal number of ECS consider||
|| MW_Gen || 4. || T || Use type 1 solution for blob||
|| MW_Gen || 5. || T || Use type 2 solution for blob||
|| MW_Gen || 6. || T || Use type 3 solution for blob||
|| MW_Gen || 11. || T || Authorize ECS type A ||
|| MW_Gen || 12. || T || Authorize ECS type B ||
|| MW_Gen || 13. || T || Authorize ECS type C ||
|| MW_Gen || 14. || T || Authorize ECS type D ||
|| MW_Gen || 15. || T || Authorize ECS type E||
|| MW_Gen || 16. || T || Authorize ECS type F||
|| '''MW_Run''' || 3. || T ||control the efficiency of each block||
==== !! Multi_list ====
Special list with two level of list.
-- Main.OlivierMattelaer - 07 Feb 2008