Merge lp:~maddevelopers/mg5amcnlo/1.5.8 into lp:~madteam/mg5amcnlo/trunk

Proposed by Olivier Mattelaer
Status: Merged
Merged at revision: 240
Proposed branch: lp:~maddevelopers/mg5amcnlo/1.5.8
Merge into: lp:~madteam/mg5amcnlo/trunk
Diff against target: 7090 lines (+3695/-1280)
50 files modified
Template/Cards/delphes_card_ATLAS.dat (+498/-134)
Template/Cards/delphes_card_CMS.dat (+511/-134)
Template/Cards/delphes_card_default.dat (+69/-53)
Template/Cards/delphes_trigger_ATLAS.dat (+0/-16)
Template/Cards/delphes_trigger_CMS.dat (+0/-20)
Template/Cards/delphes_trigger_default.dat (+0/-20)
Template/Source/PDF/pdf_lhapdf.f (+9/-2)
Template/Source/PDF/pdg2pdf.f (+52/-17)
Template/Source/PDF/pdg2pdf_lhapdf.f (+90/-14)
Template/SubProcesses/cuts.f (+16/-0)
Template/SubProcesses/myamp.f (+3/-1)
Template/bin/internal/run_delphes3 (+38/-0)
UpdateNotes.txt (+46/-0)
aloha/aloha_lib.py (+1/-1)
aloha/aloha_parsers.py (+5/-1)
aloha/aloha_writers.py (+1/-0)
madgraph/VERSION (+1/-1)
madgraph/core/base_objects.py (+30/-10)
madgraph/core/diagram_generation.py (+9/-3)
madgraph/core/helas_objects.py (+74/-45)
madgraph/interface/madevent_interface.py (+178/-27)
madgraph/interface/madgraph_interface.py (+23/-4)
madgraph/iolibs/export_cpp.py (+30/-8)
madgraph/iolibs/export_v4.py (+16/-6)
madgraph/iolibs/template_files/auto_dsig_v4.inc (+4/-1)
madgraph/iolibs/template_files/super_auto_dsig_group_v4.inc (+5/-0)
madgraph/various/cluster.py (+24/-17)
madgraph/various/lhe_parser.py (+246/-0)
models/EWdim6/EWdim6.log (+20/-10)
models/EWdim6/__init__.py (+23/-7)
models/EWdim6/build_restrict.py (+20/-16)
models/EWdim6/coupling_orders.py (+3/-3)
models/EWdim6/couplings.py (+46/-70)
models/EWdim6/function_library.py (+9/-1)
models/EWdim6/lorentz.py (+128/-113)
models/EWdim6/object_library.py (+22/-10)
models/EWdim6/parameters.py (+70/-170)
models/EWdim6/particles.py (+52/-52)
models/EWdim6/vertices.py (+215/-251)
models/EWdim6/write_param_card.py (+2/-2)
models/check_param_card.py (+1/-2)
models/import_ufo.py (+45/-33)
models/write_param_card.py (+2/-2)
tests/acceptance_tests/test_cmd_madevent.py (+60/-1)
tests/unit_tests/core/test_base_objects.py (+3/-1)
tests/unit_tests/core/test_helas_objects.py (+503/-0)
tests/unit_tests/iolibs/test_export_cpp.py (+283/-0)
tests/unit_tests/iolibs/test_export_v4.py (+12/-1)
tests/unit_tests/various/test_aloha.py (+63/-0)
tests/unit_tests/various/test_lhe_parser.py (+134/-0)
To merge this branch: bzr merge lp:~maddevelopers/mg5amcnlo/1.5.8
Reviewer Review Type Date Requested Status
Johan Alwall (community) Approve
Olivier Mattelaer Approve
Review via email: mp+150437@code.launchpad.net

Description of the change

1.5.8 (xx/xx/13) OM: Fix critical bug introduce in 1.5.0. ALOHA was wrongly written
                      HELAS routine for expression containing expression square.
                      (like P(-1,1)**2). None of the default model of MG5 (like sm/mssm)
                      have such type of expression. More information in bug report #1132996
                      (Thanks Gezim)
                  OM+JA: install Delphes install now Delphes3 [install Delphes2 is available]
                  OM: Add one command in MadEvent interface: add_time_of_flight
                      This command modify the lhe events file by adding the time of
                      flight information in the lhe events.
                  OM: Fix bug in pythia8 output for process using decay chains syntax.
                      See bug #1099790.
                  CDe+OM: Update Dim6 model
                  OM: Fix a bug preventing model customized via the "customize_model"
                      command to be able to use the automatic width computation.
                  OM: Fix a bug in model restriction when a width was equals to one.
                      In such case, the width is not fixed to this value anymore.
                  OM: correct bug #1107603 (problem with condor cluster for submission
                      associated to a large number of jobs). Thanks Sanjay
                  JA: Fix one part of the problem in bug #1123974: take into
                      account invariant mass cuts mmXX above the peak range in
                      s-channel resonances in the phase space integration,
                      to make sure such channels find events even for narrow
                      invariant mass cut ranges. Please note the discussion in
                      that bug report for other types of channels however.
                  JA: Fixed bug #1139303: matrix elements for identical
                      decay chain processes with different propagators (such as
                      p p > w+, w+ > e+ ve and p p > w-, w- > vm~ mu-)
                      are now no longer combined, to ensure that resonances are
                      correctly represented in event file.
                  OM: Support lhapdf set which contains photon (See bug #1131995)
                  RF+JA: Reuse last two PDF calls also for LHAPDF PDFs, clarify code
                      for reuse of PDFs in pdg2pdf.f and pdg2pdf_lhapdf.f
                  OM: Update the default delphes card to the latest version. This
                      default card is automatically overwritten by the default Delphes
                      card when running "install Delphes".
                  JA: Make sure cuts are only checked once per event - this can save
                      a lot of time for multiparton events.
                  OM: Fix Bug #1142042 (crash in gridpack)

To post a comment you must log in.
Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote :

Hi Johan,

I think this is more than time to release this version.
This is even more True since the bug fix in ALOHA.
Even if this bug is not THAT critical (most of the model are not impacted),
I would like to have this bug fix release asap.

I also give a tutorial tomorrow and they need to use the model modification (for EWDIM6) present in this version. Of course those changes are not needed for my tutorial, but it will be good to have those fix.

I just review your changes in this branch, and those are fine with me :-)

Thanks,

Olivier

review: Approve
Revision history for this message
Johan Alwall (johan-alwall) wrote :

Hello Olivier,

> OM: Fix a bug in model restriction when a width was equals to one.
> In such case, the width is not fixed to this value anymore.

Regarding the model restrictions, I just realized that at some point a very serious bug has been introduced. If two particles have identical masses and widths, both masses and widths should be identified (whereas, if only widths are identical but not masses, we could discuss that they should not since this can only be a coincidence). This used to be the case for the default restriction card of the mssm, but it doesn't work anymore.

In fact, this is the reason why there was a problem with huge numbers of matrix elements for an MSSM decay process. So this is a very serious bug for mssm. I'm pretty sure I haven't reviewed such a change, so I don't know when it was introduced.

I'll continue looking at the code now.

Cheers,
Johan

review: Needs Fixing
Revision history for this message
Johan Alwall (johan-alwall) wrote :

> OM: Fix a bug in model restriction when a width was equals to one.
> In such case, the width is not fixed to this value anymore.

In fact I don't understand what you mean. Did you change the behavior so that the width is no longer fixed if it's set to 1 in the restriction card? That would make sense, since 1 is not a "special value" for masses and widths, so it doesn't make sense to fix it in this case (but if two values are both 1, they still need to be identified of course).

Cheers,
Johan

review: Abstain
Revision history for this message
Johan Alwall (johan-alwall) wrote :

Sorry, don't know how it became "Abstain", I meant "needs information".

review: Needs Information
Revision history for this message
Johan Alwall (johan-alwall) wrote :
Download full text (4.5 KiB)

Hello again Olivier,

I forgot to say, thanks a lot for all the fixes in this version! Great job as always!

Just some further comments. (Please take note about the critical comment above about identifying masses and widths, I am not repeating it here):

+ def help_add_time_of_flight(self):
401 + logger.info("syntax: add_secondary_vertex [run_name|path_to_file]")
402 + logger.info('-- Add in the unweighted_events.lhe the information')
403 + logger.info(' related to secondary vertex.')

It seems there is a naming confusion, you probably changed name from secondary_vertex to time_of_flight at some point.

However, I don't like the way it's done. To begin with, this should only be added for particles that have a decay length > (say) some fraction of a mm or perhaps a micrometer to be safe, since otherwise it's not detectable anyway. Also, this should not be a command but rather a setting: "set add_time_of_flight True". It should then be done automatically on the unweighted_events.lhe file before running plots or Pythia. We can also imagine the threshold to be set using the set command, although I don't think that really matters (if the user wants this, there is probably some particle with a considerable decay length, and usually all other particles will have very short decay lengths anyway).

317 === modified file 'aloha/aloha_lib.py'
...
324 + print type(expression)
...
332 + #if fct_tag == 'pow':
333 + # expr = args[0]**args[1]
334 + # argument = [expr]
335 + # fct_tag = ''

I think these lines should be removed ;-)

369 === modified file 'madgraph/core/diagram_generation.py'
...
386 + "This error usually means that you forgot parentheses in presence of

Should be "this warning".

433 @@ -896,11 +920,18 @@
...
444 + restrict_file = None
445 + if os.path.exists(pjoin(ufo_path, 'restrict_default.dat')):
446 + restrict_file = pjoin(ufo_path, 'restrict_default.dat')
447 + model = import_ufo.import_model(modelname, decay=True,
448 + restrict_file=restrict_file)

I'm not so clear about this change. What happens if some other restriction is used? The modelname will be (say) sm-lepton_masses, but if restrict_file is set to restrict_default, will that take precedence?

=== modified file 'madgraph/interface/madgraph_interface.py'
...
578 +
579 + if args[0] == 'Delphes':
580 + data = open(pjoin(MG5DIR, 'Delphes','data','DetectorCard.dat')).read()
581 + data = data.replace('data/', 'DELPHESDIR/data/')
582 + out = open(pjoin('Template', 'Cards', 'delphes_card_default.dat'), 'w')
583 + out.write(data)
584 +

What happened to the trigger card?

Note that this will NOT work with Delphes 3, where the card is called examples/delphes_card_CMS.tcl (and there is no trigger_card). I would suggest that you implement the copy for Delphes 3, as well as the change from run_delphes to run_delphes3 in that case, already now, so we don't forget it later.

=== modified file 'madgraph/iolibs/export_c...

Read more...

review: Needs Fixing
lp:~maddevelopers/mg5amcnlo/1.5.8 updated
258. By Olivier Mattelaer

merge with delphes3 branch

Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote :
Download full text (9.9 KiB)

Hi Johan,

Thanks a lot for this review.
I skip all the points that you have raised and which didn't require discussion.

> However, I don't like the way it's done. To begin with, this should only be added for particles that have a decay length > (say) some fraction of a mm or perhaps a micrometer to be safe, since otherwise it's not detectable anyway. Also, this should not be a command but rather a setting: "set add_time_of_flight True". It should then be done automatically on the unweighted_events.lhe file before running plots or Pythia. We can also imagine the threshold to be set using the set command, although I don't think that really matters (if the user wants this, there is probably some particle with a considerable decay length, and usually all other particles will have very short decay lengths anyway).

In fact, I don't really care about this function, the only point to have add is
1) this is times to times ask to have it.
2) One user had a lot of trouble to implement a simple code for doing this and was sending me mail after mail. So I figure that it will
be faster for me to implement a simple command that answering all his question.

This is why, I didn't put too much effort to fully interface it with the rest of the code and things like that.
But if you want to do it, feel free to do so.

The idea of having a command allows to be able to run it on external lhe files (assuming that this is the same model).
(and that it was faster to implement)

> 433 @@ -896,11 +920,18 @@
> ...
> 444 + restrict_file = None
> 445 + if os.path.exists(pjoin(ufo_path, 'restrict_default.dat')):
> 446 + restrict_file = pjoin(ufo_path, 'restrict_default.dat')
> 447 + model = import_ufo.import_model(modelname, decay=True,
> 448 + restrict_file=restrict_file)
>
> I'm not so clear about this change. What happens if some other restriction is used? The modelname will be (say) sm-lepton_masses, but if restrict_file is set to restrict_default, will that take precedence?

In such case, they shouldn't have conflicts, but it happens that the name of the model is simply sm while a restriction is suppose to be used.
This is the point of those lines. This happens for examples when you are using the customize_model options.

> === modified file 'madgraph/interface/madgraph_interface.py'
> ...
> 578 +
> 579 + if args[0] == 'Delphes':
> 580 + data = open(pjoin(MG5DIR, 'Delphes','data','DetectorCard.dat')).read()
> 581 + data = data.replace('data/', 'DELPHESDIR/data/')
> 582 + out = open(pjoin('Template', 'Cards', 'delphes_card_default.dat'), 'w')
> 583 + out.write(data)
> 584 +
>
> What happened to the trigger card?

Since this one is not modified and that Delphes2 is not develop anymore, I don't think that this is a problem.

> Note that this will NOT work with Delphes 3, where the card is called examples/delphes_card_CMS.tcl (and there is no trigger_card). I would suggest that you implement the copy for Delphes 3, as well as the change from run_delphes to run_delphes3 in that case, already now, ...

Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote :

Sorry i forget to answer this part:

> > OM: Fix a bug in model restriction when a width was equals to one.
> > In such case, the width is not fixed to this value anymore.
>
> In fact I don't understand what you mean. Did you change the behavior so that
> the width is no longer fixed if it's set to 1 in the restriction card? That
> would make sense, since 1 is not a "special value" for masses and widths, so
> it doesn't make sense to fix it in this case (but if two values are both 1,
> they still need to be identified of course).

Yes this is exactly what I meant.
I didn't look yet at the restriction problem that you point. I'm doing that now.

Cheers,

Olivier

lp:~maddevelopers/mg5amcnlo/1.5.8 updated
259. By Olivier Mattelaer

Make the modification asked by Johan review.

260. By Olivier Mattelaer

1) All the Delphes 3 Card in the list of recognized input file.
2) re-allow merging of parameter for the mssm model.

Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote :

pushed :-)

Revision history for this message
Johan Alwall (johan-alwall) wrote :

Hello Olivier,

What does this mean? Why is there a special case for mssm? Does this have to do with the masses and widths that were not properly merged? This behavior should always be the same, no matter the model name. Also, I don't understand what "keep_external" means - can you please explain?

Thanks!

=== modified file 'madgraph/interface/madgraph_interface.py'
--- madgraph/interface/madgraph_interface.py 2013-02-27 19:46:53 +0000
+++ madgraph/interface/madgraph_interface.py 2013-02-28 23:52:38 +0000
@@ -3661,7 +3661,12 @@
         logger.info('Loading the resulting model')
         # Applying the restriction
         self._curr_model = import_ufo.RestrictModel(self._curr_model)
- self._curr_model.restrict_model(param_card)
+ model_name = self._curr_model.get('name')
+ if model_name == 'mssm':
+ keep_external=True
+ else:
+ keep_external=False
+ self._curr_model.restrict_model(param_card,keep_external=keep_external)

         if args:
             name = args[0].split('=',1)[1]

review: Needs Information
Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote :

Hi Johan,

This is due to slha1/slha2 convention and translator.
We cann't modify the param_card due to that.

Cheers,

Olivier

On Feb 28, 2013, at 9:49 PM, Johan Alwall <email address hidden> wrote:

> Review: Needs Information
>
> Hello Olivier,
>
> What does this mean? Why is there a special case for mssm? Does this have to do with the masses and widths that were not properly merged? This behavior should always be the same, no matter the model name. Also, I don't understand what "keep_external" means - can you please explain?
>
> Thanks!
>
> === modified file 'madgraph/interface/madgraph_interface.py'
> --- madgraph/interface/madgraph_interface.py 2013-02-27 19:46:53 +0000
> +++ madgraph/interface/madgraph_interface.py 2013-02-28 23:52:38 +0000
> @@ -3661,7 +3661,12 @@
> logger.info('Loading the resulting model')
> # Applying the restriction
> self._curr_model = import_ufo.RestrictModel(self._curr_model)
> - self._curr_model.restrict_model(param_card)
> + model_name = self._curr_model.get('name')
> + if model_name == 'mssm':
> + keep_external=True
> + else:
> + keep_external=False
> + self._curr_model.restrict_model(param_card,keep_external=keep_external)
>
> if args:
> name = args[0].split('=',1)[1]
>
> --
> https://code.launchpad.net/~maddevelopers/madgraph5/1.5.8/+merge/150437
> You proposed lp:~maddevelopers/madgraph5/1.5.8 for merging.

Revision history for this message
Johan Alwall (johan-alwall) wrote :

Hello Olivier,

> This is due to slha1/slha2 convention and translator.
> We cann't modify the param_card due to that.

I don't agree. We know which parameters are identified, fixed or removed, so just write a warning (or an error, if you prefer) when the param_card is converted if the user has done something against the model. To reduce the model simplification because of the SLHAI/II conversion is not the right solution.

Cheers,
Johan

review: Needs Fixing
Revision history for this message
Johan Alwall (johan-alwall) wrote :

Olivier,

Thanks a lot by the way for fixing the mssm issue. Now it's working again (but please see my comment above - this is no different than using a standard SM card for sm_no_masses, which also shouldn't crash but simply generate a warning).

Can you also please update the UpdateNotes? As I noted above, the comment about
 OM: Fix a bug in model restriction when a width was equals to one.
     In such case, the width is not fixed to this value anymore.
is completely unclear and needs to be rewritten. Also please add the fixed bug in the mssm restriction to this item.

Another issue: You have made a number of bug fixes and other changes to the core code without any unit tests. Could you please include unit tests? You definitely need one for the lhe reader, and for the Pythia 8 output. You also need acceptance tests for add_time_of_flight and customize_model, as well as the model restriction stuff. And perhaps for Delphes, although that's less of a priority. Sorry to nag about tests, just following your example! ;-)

Finally, I understand your argument for having add_time_of_flight as a command instead of an option. However, you still absolutely need to include a minimum width to add the time_of_flight, and perhaps make clear in the UpdateNotes that the correct way to do generation including this is
generate_events --laststep=parton ; add_time_of_flight ; pythia --laststep=delphes (or whatever)

Cheers,
Johan

review: Needs Fixing
Revision history for this message
Johan Alwall (johan-alwall) wrote :

Hey Olivier,

I'm very confused - where did the revision where I merged with the check_cuts_once branch go? I don't see the revision message or number anymore, although the actual changes to the code are there... If you miss to pull before you commit a revision, please do uncommit until you can pull, and then commit your changes. That way we minimize confusion.

Cheers,
Johan

lp:~maddevelopers/mg5amcnlo/1.5.8 updated
261. By Olivier Mattelaer

remove pointless print

262. By Olivier Mattelaer

Fix Bug #1142042

263. By Johan Alwall

Merged with branch 1.5.8_fix_combine: Fix bug #1139303 by ensuring that processes with different propagators are split into different matrix elements even if the MEs are in fact identical also for decay chains. Also fixed order of FS particles in process definition for combination of decay chain matrix element.

Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote :

Hi Johan,

Looks like I don't receive email notification for this thread. (Don't ask me why).
So could you try to answer to this also via a direct email.

So I just see now your latest email here.
Will do this as soon as possible.

Can I assume that I have your green light as soon as this is done?

Cheers,

Olivier

Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote :

I Johan,

> I'm very confused - where did the revision where I merged with the check_cuts_once branch go? I don't see the revision message or number anymore, although the actual changes to the code are there... If you miss to pull before you commit a revision, please do uncommit until you can pull, and then commit your changes. That way we minimize confusion.

I suppose that this was due to the branch with the Delphes merge.
I should have made a merge with the trunk at a point on that branch and that's why your branch disappear ( I suppose)

Cheers,

Olivier

On Mar 1, 2013, at 4:10 AM, Johan Alwall <email address hidden> wrote:

> Hey Olivier,
>
> I'm very confused - where did the revision where I merged with the check_cuts_once branch go? I don't see the revision message or number anymore, although the actual changes to the code are there... If you miss to pull before you commit a revision, please do uncommit until you can pull, and then commit your changes. That way we minimize confusion.
>
> Cheers,
> Johan
> --
> https://code.launchpad.net/~maddevelopers/madgraph5/1.5.8/+merge/150437
> You proposed lp:~maddevelopers/madgraph5/1.5.8 for merging.

Revision history for this message
Johan Alwall (johan-alwall) wrote :

Hello Olivier,

Almost done! Just fix the points below, then I'll be happy. :-)

1. Regarding madevent_interface.py:

Please include the threshold for add_time_of_flight. This is necessary to avoid ridiculous (and potentially malformed) event files. Also please include the mention about how to run it in the UpdateNotes (as I suggested earlier).

2. Regarding the UpdateNotes:

The following bugs (and the corresponding fixes) are not mentioned. Please include *everything* that's done in the UpdateNotes, since this makes it much easier to track potential newly introduced bugs and features in the future!

Bug #1101291: Decay set an auto didn't work with generate_events -f
Bug #1131871: Compiler Error for SUSY decay to leptonic final states

You also still haven't fixed the formulation about the width=1 entry.
Finally: The model name is not Dim6; please write the full model name to avoid confusion.

Thanks!
Johan

review: Needs Fixing
lp:~maddevelopers/mg5amcnlo/1.5.8 updated
264. By Olivier Mattelaer

adding a threshold for the add_time_of_flight + tests

265. By Olivier Mattelaer

adding unit test for the lhe parser.
Some acceptance test are in place vie that add_time_of_flight

Revision history for this message
Johan Alwall (johan-alwall) wrote :

Hello Olivier,

Thanks a lot for adding the tests! I just have a question: Looking at your test for the .lhe parser, I don't understand the following:
> + nb_event = 0
> + for event in input:
> + nb_event +=1
> + new = lhe_parser.Event(text=str(event))
> + for part1,part2 in zip(event, new):
> + self.assertEqual(part1, part2)
> + self.assertEqual(new, event, '%s \n !=\n %s' % (new, event))
> + self.assertEqual(nb_event, 3)

Doesn't this just check that the parser parses the same values both times it reads? I don't see that you are checking that the values are in fact correct.

Cheers,
Johan

review: Needs Information
Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote :

Hi Johan,

> Doesn't this just check that the parser parses the same values both times it reads?

A bit more than that since the first time we parse the input and the second the string which is the output of the str(event).
So we test that writing routine is coherent with the reading routine.

> I don't see that you are checking that the values are in fact correct.

Not sure to see which type to check you want.

Cheers,

Olivier

On Mar 4, 2013, at 5:48 AM, Johan Alwall <email address hidden> wrote:

> Review: Needs Information
>
> Hello Olivier,
>
> Thanks a lot for adding the tests! I just have a question: Looking at your test for the .lhe parser, I don't understand the following:
>> + nb_event = 0
>> + for event in input:
>> + nb_event +=1
>> + new = lhe_parser.Event(text=str(event))
>> + for part1,part2 in zip(event, new):
>> + self.assertEqual(part1, part2)
>> + self.assertEqual(new, event, '%s \n !=\n %s' % (new, event))
>> + self.assertEqual(nb_event, 3)
>
> Doesn't this just check that the parser parses the same values both times it reads? I don't see that you are checking that the values are in fact correct.
>
> Cheers,
> Johan
> --
> https://code.launchpad.net/~maddevelopers/madgraph5/1.5.8/+merge/150437
> You proposed lp:~maddevelopers/madgraph5/1.5.8 for merging.

Revision history for this message
Johan Alwall (johan-alwall) wrote :

Hi Olivier,

> > Doesn't this just check that the parser parses the same values both times it
> reads?
>
> A bit more than that since the first time we parse the input and the second
> the string which is the output of the str(event).
> So we test that writing routine is coherent with the reading routine.
>
> > I don't see that you are checking that the values are in fact correct.
>
> Not sure to see which type to check you want.

I would prefer if you write explicitly the result string and check against that, so it's obvious from the test that all parts are being read, processed and output correctly. For example, if the comments are not being read at all, this test won't show it.

Cheers,
Johan

review: Needs Fixing
lp:~maddevelopers/mg5amcnlo/1.5.8 updated
266. By Johan Alwall

Fixed grammar in UpdateNotes

Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote :

Hi Johan,

> I would prefer if you write explicitly the result string and check against that, so it's obvious from the test that all parts are being read, processed and output correctly. For example, if the comments are not being read at all, this test won't show it.

Ok I did it. (and indeed they were a small error on the comment)
In general, I prefer to limit the comparison of large text, mainly because
1) they can fail much too often
2) If the text is long, most of the time we simply copy the new result (so the test is weak, since we may miss unwanted changes)
But combining both kind of test is probably the best.

Concerning the cpp, this is still not working.
(it says no matrix element generated).

Cheers,

Olivier

On Mar 4, 2013, at 6:16 AM, Johan Alwall <email address hidden> wrote:

> Review: Needs Fixing
>
> Hi Olivier,
>
>>> Doesn't this just check that the parser parses the same values both times it
>> reads?
>>
>> A bit more than that since the first time we parse the input and the second
>> the string which is the output of the str(event).
>> So we test that writing routine is coherent with the reading routine.
>>
>>> I don't see that you are checking that the values are in fact correct.
>>
>> Not sure to see which type to check you want.
>
> I would prefer if you write explicitly the result string and check against that, so it's obvious from the test that all parts are being read, processed and output correctly. For example, if the comments are not being read at all, this test won't show it.
>
> Cheers,
> Johan
> --
> https://code.launchpad.net/~maddevelopers/madgraph5/1.5.8/+merge/150437
> You proposed lp:~maddevelopers/madgraph5/1.5.8 for merging.

lp:~maddevelopers/mg5amcnlo/1.5.8 updated
267. By Olivier Mattelaer

add string comparison for lhe parser (and fix the missing end of line for the comment)

Revision history for this message
Valentin Hirschi (valentin-hirschi) wrote :

Hi Johan, Olivier,

I don't know the details of the nature of the checks for the lhe parser but
it seems like having a two-fold test is indeed the best option.
A) "Direct" tests targeting specific parts of the lhe parsing, so that when
they fail the problem is easy to pin-point.
B) Incusive test which compare the "whole" read information with the target
so that one is sure not to miss anything.

Tests B) are usually inconvenient because of their typical
over-sensitivity, as underlined by Olivier.
I had developed the IO tests framework (see
https://cp3.irmp.ucl.ac.be/projects/madgraph/wiki/DevelopmentPage/CodeTesting)
specifically for this. And I believe that my implementation (thanks to the
useful comments of Olivier) allows to update the tests of kind B) quickly
and with very little chance of overlooking something so that the test
remains useful.

I therefore suggest to maybe use this framework for implementing the tests
of kind B) of the lhe parser (unless I missed the point, in which case I
apologize for the bother.)

Cheers,

On Mon, Mar 4, 2013 at 1:58 PM, Olivier Mattelaer <
<email address hidden>> wrote:

> Hi Johan,
>
> > I would prefer if you write explicitly the result string and check
> against that, so it's obvious from the test that all parts are being read,
> processed and output correctly. For example, if the comments are not being
> read at all, this test won't show it.
>
> Ok I did it. (and indeed they were a small error on the comment)
> In general, I prefer to limit the comparison of large text, mainly because
> 1) they can fail much too often
> 2) If the text is long, most of the time we simply copy the new result (so
> the test is weak, since we may miss unwanted changes)
> But combining both kind of test is probably the best.
>
> Concerning the cpp, this is still not working.
> (it says no matrix element generated).
>
> Cheers,
>
> Olivier
>
>
> On Mar 4, 2013, at 6:16 AM, Johan Alwall <email address hidden> wrote:
>
> > Review: Needs Fixing
> >
> > Hi Olivier,
> >
> >>> Doesn't this just check that the parser parses the same values both
> times it
> >> reads?
> >>
> >> A bit more than that since the first time we parse the input and the
> second
> >> the string which is the output of the str(event).
> >> So we test that writing routine is coherent with the reading routine.
> >>
> >>> I don't see that you are checking that the values are in fact correct.
> >>
> >> Not sure to see which type to check you want.
> >
> > I would prefer if you write explicitly the result string and check
> against that, so it's obvious from the test that all parts are being read,
> processed and output correctly. For example, if the comments are not being
> read at all, this test won't show it.
> >
> > Cheers,
> > Johan
> > --
> > https://code.launchpad.net/~maddevelopers/madgraph5/1.5.8/+merge/150437
> > You proposed lp:~maddevelopers/madgraph5/1.5.8 for merging.
>
>
> --
> https://code.launchpad.net/~maddevelopers/madgraph5/1.5.8/+merge/150437
> Your team MadDevelopers is subscribed to branch
> lp:~maddevelopers/madgraph5/1.5.8.
>

--
Valentin

Revision history for this message
Johan Alwall (johan-alwall) wrote :

Hello Olivier,

Thanks a lot for the clearer test. In fact, this was very important, since it immediately shows a problem:

+ target = """<event>
+ 4 0 +1.7208000e-01 1.00890300e+02 7.95774700e-02 1.27947900e-01
+ -1 -1 0 0 0 501 +0.0000000e+00 +0.0000000e+00 +1.1943355e+01 1.19433546e+01 0.00000000e+00 0.0000e+00 1.0000e+00
+ 2 -1 0 0 501 0 +0.0000000e+00 +0.0000000e+00 -1.0679326e+03 1.06793262e+03 0.00000000e+00 0.0000e+00 -1.0000e+00
+ 24 1 1 2 0 0 +6.0417155e+00 +4.2744556e+01 -7.9238049e+02 7.97619997e+02 8.04190073e+01 3.4933e-25 -1.0000e+00
+ 23 1 1 2 0 0 -6.0417155e+00 -4.2744556e+01 -2.6360878e+02 2.82255979e+02 9.11880035e+01 1.8975e-26 1.0000e+00
+
+</event>

There is an empty line before the </event>. This is *not* part of the LHE accord. So that line should not be there.

Cheers,
Johan

review: Needs Fixing
Revision history for this message
Johan Alwall (johan-alwall) wrote :

Hello Valentin, Olivier,

Indeed IOTest looks like the best solution for this test. Thanks a lot for the reminder Valentin!

Johan

Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote :

Hi Johan,

An Empty line should ALWAYS be allowed!
(even if this might not be optimal for the size of the file)

Cheers,

Olivier

On Mar 4, 2013, at 7:08 AM, Johan Alwall <email address hidden> wrote:

> Review: Needs Fixing
>
> Hello Olivier,
>
> Thanks a lot for the clearer test. In fact, this was very important, since it immediately shows a problem:
>
> + target = """<event>
> + 4 0 +1.7208000e-01 1.00890300e+02 7.95774700e-02 1.27947900e-01
> + -1 -1 0 0 0 501 +0.0000000e+00 +0.0000000e+00 +1.1943355e+01 1.19433546e+01 0.00000000e+00 0.0000e+00 1.0000e+00
> + 2 -1 0 0 501 0 +0.0000000e+00 +0.0000000e+00 -1.0679326e+03 1.06793262e+03 0.00000000e+00 0.0000e+00 -1.0000e+00
> + 24 1 1 2 0 0 +6.0417155e+00 +4.2744556e+01 -7.9238049e+02 7.97619997e+02 8.04190073e+01 3.4933e-25 -1.0000e+00
> + 23 1 1 2 0 0 -6.0417155e+00 -4.2744556e+01 -2.6360878e+02 2.82255979e+02 9.11880035e+01 1.8975e-26 1.0000e+00
> +
> +</event>
>
> There is an empty line before the </event>. This is *not* part of the LHE accord. So that line should not be there.
>
> Cheers,
> Johan
> --
> https://code.launchpad.net/~maddevelopers/madgraph5/1.5.8/+merge/150437
> You proposed lp:~maddevelopers/madgraph5/1.5.8 for merging.

lp:~maddevelopers/mg5amcnlo/1.5.8 updated
268. By Olivier Mattelaer

remove the empty line in the lhe file

269. By Olivier Mattelaer

add unittest for the Cpp modifications

Revision history for this message
Johan Alwall (johan-alwall) wrote :

Hi Olivier,

> An Empty line should ALWAYS be allowed!
> (even if this might not be optimal for the size of the file)

Hey, don't shoot the pianist! Remember that we have dozens of lhe file
readers in as many programs, so you can't expect all of them to work on
*anything* outside of the standard. I'm pretty sure an empty line is not
among the things described in the standard to be allowed. So it needs to go.

Cheers,
Johan

Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote :

I pushed it right after sending the message (This is not efficient so why keep those ;-) )

Cheers,

Olivier
On Mar 4, 2013, at 8:10 AM, Johan Alwall <email address hidden> wrote:

> Hi Olivier,
>
>> An Empty line should ALWAYS be allowed!
>> (even if this might not be optimal for the size of the file)
>
> Hey, don't shoot the pianist! Remember that we have dozens of lhe file
> readers in as many programs, so you can't expect all of them to work on
> *anything* outside of the standard. I'm pretty sure an empty line is not
> among the things described in the standard to be allowed. So it needs to go.
>
> Cheers,
> Johan
>
> --
> https://code.launchpad.net/~maddevelopers/madgraph5/1.5.8/+merge/150437
> You proposed lp:~maddevelopers/madgraph5/1.5.8 for merging.

lp:~maddevelopers/mg5amcnlo/1.5.8 updated
270. By Johan Alwall

Changed delphes card in Delphes 2 version to latest Delphes version in UpdateNotes. Sorry about that.

Revision history for this message
Johan Alwall (johan-alwall) wrote :

Thanks a lot for this version Olivier, there are really a lot of fixes done, and it is now well-tested. Great job!

Cheers,
Johan

review: Approve
Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote :

Thanks Johan,
I'll make the release tomorrow then.

Could you finalize the merge for 2.0.0? (In fact we need it urgently)

Cheers,

Olivier

On Mar 4, 2013, at 5:38 PM, Johan Alwall <email address hidden> wrote:

> Review: Approve
>
> Thanks a lot for this version Olivier, there are really a lot of fixes done, and it is now well-tested. Great job!
>
> Cheers,
> Johan
> --
> https://code.launchpad.net/~maddevelopers/madgraph5/1.5.8/+merge/150437
> You proposed lp:~maddevelopers/madgraph5/1.5.8 for merging.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Template/Cards/delphes_card_ATLAS.dat'
2--- Template/Cards/delphes_card_ATLAS.dat 2010-10-30 03:26:37 +0000
3+++ Template/Cards/delphes_card_ATLAS.dat 2013-03-04 23:37:19 +0000
4@@ -1,135 +1,499 @@
5-DETECTOR CARD # DO NOT REMOVE THIS IS A TAG!
6-
7-# Detector extension, in pseudorapidity units
8-CEN_max_tracker 2.5 // Maximum tracker coverage
9-CEN_max_calo_cen 3.2 // central calorimeter coverage
10-CEN_max_calo_fwd 4.9 // forward calorimeter pseudorapidity coverage
11-CEN_max_mu 2.7 // muon chambers pseudorapidity coverage
12-
13-# Energy resolution for electron/photon
14-# \sigma/E = C + N/E + S/\sqrt{E}, E in GeV
15-ELG_Scen 0.10 // S term for central ECAL #http://arxiv.org/pdf/physics/0608012v1
16-ELG_Ncen 0.0 // N term for central ECAL #http://arxiv.org/pdf/physics/0608012v1
17-ELG_Ccen 0.0017 // C term for central ECAL #http://arxiv.org/pdf/physics/0608012v1
18-ELG_Sfwd 0.30407 // S term for forward FCAL #http://villaolmo.mib.infn.it/ICATPP9th_2005/Calorimetry/Schram.p.pdf
19-ELG_Nfwd 1.1533 // N term for central FCAL #http://villaolmo.mib.infn.it/ICATPP9th_2005/Calorimetry/Schram.p.pdf
20-ELG_Cfwd 0.0313 // C term for forward FCAL #http://villaolmo.mib.infn.it/ICATPP9th_2005/Calorimetry/Schram.p.pdf
21-ELG_Szdc 0.70 // S term for ZDC
22-ELG_Nzdc 0.0 // N term for ZDC
23-ELG_Czdc 0.08 // C term for ZDC
24-
25-
26-# Energy resolution for hadrons in ecal/hcal/hf
27-# \sigma/E = C + N/E + S/\sqrt{E}, E in GeV
28-HAD_Shcal 0.58 // S term for central HCAL #http://arxiv.org/pdf/hep-ex/0004009v1
29-HAD_Nhcal 1.7 // N term for central HCAL #http://arxiv.org/pdf/hep-ex/0004009v1
30-HAD_Chcal 0.025 // C term for central HCAL #http://arxiv.org/pdf/hep-ex/0004009v1
31-HAD_Shf 0.9681 // S term for FCAL #http://villaolmo.mib.infn.it/ICATPP9th_2005/Calorimetry/Schram.p.pdf
32-HAD_Nhf 0. // N term for FCAL #http://villaolmo.mib.infn.it/ICATPP9th_2005/Calorimetry/Schram.p.pdf
33-HAD_Chf 0.0524 // C term for FCAL #http://villaolmo.mib.infn.it/ICATPP9th_2005/Calorimetry/Schram.p.pdf
34-HAD_Szdc 1.38 // S term for ZDC
35-HAD_Nzdc 0. // N term for ZDC
36-HAD_Czdc 0.13 // C term for ZDC
37-
38-# Time resolution for ZDC/RP220/RP420
39-ZDC_T_resolution 0 // in s
40-RP220_T_resolution 0 // in s
41-RP420_T_resolution 0 // in s
42-
43-# Muon smearing
44-MU_SmearPt 0.01 // transverse momentum Pt in GeV
45-
46-# Tracking efficiencies
47-TRACK_ptmin 0.9 // minimal pt needed to reach the calorimeter in GeV
48-TRACK_eff 90 // efficiency associated to the tracking (%)
49-
50-# Calorimetric towers
51-TOWER_number 38
52-TOWER_eta_edges 0.0 0.10 0.20 0.30 0.40 0.50 0.60 0.70 0.80 0.90 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.0 2.10 2.20 2.30 2.40 2.50 2.60 2.80 3.00 3.20 3.30 3.50 3.70 3.90 4.10 4.30 4.50 4.70 4.90
53-## list of the edges of each tower in eta for eta>0 assuming a symmetric detector in eta<0
54-### the list starts with the lower edge of the most central tower
55-### the list ends with the higher edged of the most forward tower
56-### there should be NTOWER+1 values
57-TOWER_dphi 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 20 20 20 10 20 20 20 20 20 20 20 20
58-### list of the tower size in phi (in degrees), assuming that all towers are similar in phi for a given eta value
59-### the list starts with the phi-size of the most central tower (eta=0)
60-### the list ends with the phi-size of the most forward tower
61-### there should be NTOWER values
62-##
63-#
64-
65-# Thresholds for reconstructed objetcs, Pt in GeV
66-PTCUT_elec 10.0
67-PTCUT_muon 10.0
68-PTCUT_jet 20.0
69-PTCUT_gamma 10.0
70-PTCUT_taujet 10.0
71-
72-# Thresholds for reconstructed objects in ZDC, E in GeV
73-ZDC_gamma_E 20
74-ZDC_n_E 50
75-
76-# Charged lepton isolation. Pt and Et in GeV
77-ISOL_PT 2.0 //minimal pt of tracks for isolation criteria
78-ISOL_Cone 0.5 //Cone for isolation criteria
79-ISOL_Calo_ET 1E99 //minimal tower transverse energy for isolation criteria. 1E99 means "off"
80-ISOL_Calo_Cone 0.4 //Cone for calorimetric isolation
81-ISOL_Calo_Grid 3 //Grid size (N x N) for calorimetric isolation
82-
83-# General jet variable
84-JET_coneradius 0.7 // generic jet radius ; not for tau's !!!
85-JET_jetalgo 1 // 1 for Cone algorithm, 2 for MidPoint algorithm, 3 for SIScone algorithm, 4 for kt algorithm
86-JET_seed 1.0 // minimum seed to start jet reconstruction, in GeV
87-JET_Eflow 0 // Perfect energy assumed in the tracker coverage
88-
89-# Tagging definition
90-BTAG_b 50 // b-tag efficiency (%)
91-BTAG_mistag_c 10 // mistagging (%)
92-BTAG_mistag_l 1 // mistagging (%)
93-
94-# FLAGS
95-FLAG_bfield 1 // 1 to run the bfield propagation else 0
96-FLAG_vfd 1 // 1 to run the very forward detectors else 0
97-FLAG_RP 1 // 1 to run the very forward detectors else 0
98-FLAG_trigger 1 // 1 to run the trigger selection else 0
99-FLAG_frog 0 // 1 to run the FROG event display
100-FLAG_lhco 0 //1 to run the LHCO
101-
102-# In case BField propagation allowed
103-TRACK_radius 115 // radius of the BField coverage, in cm #chapter 1 you gave me
104-TRACK_length 351 // length of the BField coverage, in cm #also
105-TRACK_bfield_x 0 // X component of the BField, in T
106-TRACK_bfield_y 0 // Y component of the BField, in T
107-TRACK_bfield_z 2.0 // Z component of the BField, in T #also
108-
109-# Very forward detector extension, in pseudorapidity
110-# if allowed (WARNING: not expected for ATLAS!)
111-VFD_min_calo_vfd 5.2 // very forward calorimeter (if any) like CASTOR
112-VFD_max_calo_vfd 6.6
113-VFD_min_zdc 8.3 // zero-degree neutral calorimeter
114-VFD_s_zdc 140 // distance of the Zero Degree Calorimeter, from the IP, in [m]
115-
116-RP_220_s 220 // distance of the RP to the IP, in meters
117-RP_220_x 0.002 // distance of the RP to the beam, in meters
118-RP_420_s 420 // distance of the RP to the IP, in meters
119-RP_420_x 0.004 // distance of the RP to the beam, in meters
120-RP_beam1Card DELPHESDIR/data/LHCB1IR1.tfs
121-RP_beam2Card DELPHESDIR/data/LHCB2IR1.tfs
122-RP_IP_name IP1
123-RP_offsetEl_x 0.097 // horizontal separation between both beam, in meters
124-RP_offsetEl_y 0 // vertical separation between both beam, in meters
125-RP_offsetEl_s 120 // distance of beam separation point, from IP
126-RP_cross_x 0 // IP offset in horizontal plane, in micrometers
127-RP_cross_y +500 // IP offset in vertical plane, in micrometers
128-RP_cross_ang_x 142.5 // half-crossing angle in horizontal plane, in microrad
129-RP_cross_ang_y 0 // half-crossing angle in vertical plane, in microrad
130-
131-
132-# In case FROG event display allowed
133-NEvents_Frog 100
134-# Number of events to process
135-NEvents -1 // -1 means 'all'
136-
137-# input PDG tables
138-PdgTableFilename DELPHESDIR/data/particle.tbl // table with particle pid,mass,charge,...
139+#######################################
140+# Order of execution of various modules
141+#######################################
142+
143+set ExecutionPath {
144+ ParticlePropagator
145+
146+ ChargedHadronTrackingEfficiency
147+ ElectronTrackingEfficiency
148+ MuonTrackingEfficiency
149+
150+ ChargedHadronMomentumSmearing
151+ ElectronEnergySmearing
152+ MuonMomentumSmearing
153+
154+ TrackMerger
155+ Calorimeter
156+ EFlowMerger
157+
158+ PhotonEfficiency
159+ PhotonIsolation
160+
161+ ElectronEfficiency
162+ ElectronIsolation
163+
164+ MuonEfficiency
165+ MuonIsolation
166+
167+ MissingET
168+
169+ FastJetFinder
170+ BTagging
171+ TauTagging
172+
173+ UniqueObjectFinder
174+
175+ ScalarHT
176+
177+ TreeWriter
178+}
179+
180+#################################
181+# Propagate particles in cylinder
182+#################################
183+
184+module ParticlePropagator ParticlePropagator {
185+ set InputArray Delphes/stableParticles
186+
187+ set OutputArray stableParticles
188+ set ChargedHadronOutputArray chargedHadrons
189+ set ElectronOutputArray electrons
190+ set MuonOutputArray muons
191+
192+ # radius of the magnetic field coverage, in m
193+ set Radius 1.15
194+ # half-length of the magnetic field coverage, in m
195+ set HalfLength 3.51
196+
197+ # magnetic field
198+ set Bz 2.0
199+}
200+
201+####################################
202+# Charged hadron tracking efficiency
203+####################################
204+
205+module Efficiency ChargedHadronTrackingEfficiency {
206+ set InputArray ParticlePropagator/chargedHadrons
207+ set OutputArray chargedHadrons
208+
209+ # add EfficiencyFormula {efficiency formula as a function of eta and pt}
210+
211+ # tracking efficiency formula for charged hadrons
212+ set EfficiencyFormula { (pt <= 0.1) * (0.00) + \
213+ (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.70) + \
214+ (abs(eta) <= 1.5) * (pt > 1.0) * (0.95) + \
215+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.60) + \
216+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0) * (0.85) + \
217+ (abs(eta) > 2.5) * (0.00)}
218+}
219+
220+##############################
221+# Electron tracking efficiency
222+##############################
223+
224+module Efficiency ElectronTrackingEfficiency {
225+ set InputArray ParticlePropagator/electrons
226+ set OutputArray electrons
227+
228+ # set EfficiencyFormula {efficiency formula as a function of eta and pt}
229+
230+ # tracking efficiency formula for electrons
231+ set EfficiencyFormula { (pt <= 0.1) * (0.00) + \
232+ (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.73) + \
233+ (abs(eta) <= 1.5) * (pt > 1.0 && pt <= 1.0e2) * (0.95) + \
234+ (abs(eta) <= 1.5) * (pt > 1.0e2) * (0.99) + \
235+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.50) + \
236+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0 && pt <= 1.0e2) * (0.83) + \
237+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0e2) * (0.90) + \
238+ (abs(eta) > 2.5) * (0.00)}
239+}
240+
241+##############################
242+# Muon tracking efficiency
243+##############################
244+
245+module Efficiency MuonTrackingEfficiency {
246+ set InputArray ParticlePropagator/muons
247+ set OutputArray muons
248+
249+ # set EfficiencyFormula {efficiency formula as a function of eta and pt}
250+
251+ # tracking efficiency formula for muons
252+ set EfficiencyFormula { (pt <= 0.1) * (0.00) + \
253+ (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.75) + \
254+ (abs(eta) <= 1.5) * (pt > 1.0) * (0.99) + \
255+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.70) + \
256+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0) * (0.98) + \
257+ (abs(eta) > 2.5) * (0.00)}
258+}
259+
260+########################################
261+# Momentum resolution for charged tracks
262+########################################
263+
264+module MomentumSmearing ChargedHadronMomentumSmearing {
265+ set InputArray ChargedHadronTrackingEfficiency/chargedHadrons
266+ set OutputArray chargedHadrons
267+
268+ # set ResolutionFormula {resolution formula as a function of eta and pt}
269+
270+ # resolution formula for charged hadrons
271+ set ResolutionFormula { (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.02) + \
272+ (abs(eta) <= 1.5) * (pt > 1.0 && pt <= 1.0e1) * (0.01) + \
273+ (abs(eta) <= 1.5) * (pt > 1.0e1 && pt <= 2.0e2) * (0.03) + \
274+ (abs(eta) <= 1.5) * (pt > 2.0e2) * (0.05) + \
275+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.03) + \
276+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0 && pt <= 1.0e1) * (0.02) + \
277+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0e1 && pt <= 2.0e2) * (0.04) + \
278+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 2.0e2) * (0.05)}
279+}
280+
281+#################################
282+# Energy resolution for electrons
283+#################################
284+
285+module EnergySmearing ElectronEnergySmearing {
286+ set InputArray ElectronTrackingEfficiency/electrons
287+ set OutputArray electrons
288+
289+ # set ResolutionFormula {resolution formula as a function of eta and energy}
290+
291+ set ResolutionFormula { (abs(eta) <= 2.5) * (energy > 0.1 && energy <= 2.5e1) * (energy*0.015) + \
292+ (abs(eta) <= 2.5) * (energy > 2.5e1) * sqrt(energy^2*0.005^2 + energy*0.05^2 + 0.25^2) + \
293+ (abs(eta) > 2.5 && abs(eta) <= 3.0) * sqrt(energy^2*0.005^2 + energy*0.05^2 + 0.25^2) + \
294+ (abs(eta) > 3.0 && abs(eta) <= 5.0) * sqrt(energy^2*0.107^2 + energy*2.08^2)}
295+
296+}
297+
298+###############################
299+# Momentum resolution for muons
300+###############################
301+
302+module MomentumSmearing MuonMomentumSmearing {
303+ set InputArray MuonTrackingEfficiency/muons
304+ set OutputArray muons
305+
306+ # set ResolutionFormula {resolution formula as a function of eta and pt}
307+
308+ # resolution formula for muons
309+ set ResolutionFormula { (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.03) + \
310+ (abs(eta) <= 1.5) * (pt > 1.0 && pt <= 1.0e1) * (0.02) + \
311+ (abs(eta) <= 1.5) * (pt > 1.0e1 && pt <= 2.0e2) * (0.03) + \
312+ (abs(eta) <= 1.5) * (pt > 2.0e2) * (0.05) + \
313+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.04) + \
314+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0 && pt <= 1.0e1) * (0.03) + \
315+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0e1 && pt <= 2.0e2) * (0.04) + \
316+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 2.0e2) * (0.05)}
317+}
318+
319+##############
320+# Track merger
321+##############
322+
323+module Merger TrackMerger {
324+# add InputArray InputArray
325+ add InputArray ChargedHadronMomentumSmearing/chargedHadrons
326+ add InputArray ElectronEnergySmearing/electrons
327+ set OutputArray tracks
328+}
329+
330+#############
331+# Calorimeter
332+#############
333+
334+module Calorimeter Calorimeter {
335+ set ParticleInputArray ParticlePropagator/stableParticles
336+ set TrackInputArray TrackMerger/tracks
337+
338+ set TowerOutputArray towers
339+ set PhotonOutputArray photons
340+
341+ set EFlowTrackOutputArray eflowTracks
342+ set EFlowTowerOutputArray eflowTowers
343+
344+ set pi [expr {acos(-1)}]
345+
346+ # lists of the edges of each tower in eta and phi
347+ # each list starts with the lower edge of the first tower
348+ # the list ends with the higher edged of the last tower
349+
350+ # 10 degrees towers
351+ set PhiBins {}
352+ for {set i -18} {$i <= 18} {incr i} {
353+ add PhiBins [expr {$i * $pi/18.0}]
354+ }
355+ foreach eta {-3.2 -2.5 -2.4 -2.3 -2.2 -2.1 -2 -1.9 -1.8 -1.7 -1.6 -1.5 -1.4 -1.3 -1.2 -1.1 -1 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.1 2.2 2.3 2.4 2.5 2.6 3.3} {
356+ add EtaPhiBins $eta $PhiBins
357+ }
358+
359+ # 20 degrees towers
360+ set PhiBins {}
361+ for {set i -9} {$i <= 9} {incr i} {
362+ add PhiBins [expr {$i * $pi/9.0}]
363+ }
364+ foreach eta {-4.9 -4.7 -4.5 -4.3 -4.1 -3.9 -3.7 -3.5 -3.3 -3 -2.8 -2.6 2.8 3 3.2 3.3 3.5 3.7 3.9 4.1 4.3 4.5 4.7 4.9} {
365+ add EtaPhiBins $eta $PhiBins
366+ }
367+
368+ # default energy fractions {abs(PDG code)} {Fecal Fhcal}
369+ add EnergyFraction {0} {0.0 1.0}
370+ # energy fractions for e, gamma and pi0
371+ add EnergyFraction {11} {1.0 0.0}
372+ add EnergyFraction {22} {1.0 0.0}
373+ add EnergyFraction {111} {1.0 0.0}
374+ # energy fractions for muon and neutrinos
375+ add EnergyFraction {12} {0.0 0.0}
376+ add EnergyFraction {13} {0.0 0.0}
377+ add EnergyFraction {14} {0.0 0.0}
378+ add EnergyFraction {16} {0.0 0.0}
379+ # energy fractions for K0short and Lambda
380+ add EnergyFraction {310} {0.3 0.7}
381+ add EnergyFraction {3122} {0.3 0.7}
382+
383+ # set ECalResolutionFormula {resolution formula as a function of eta and energy}
384+ # http://arxiv.org/pdf/physics/0608012v1 jinst8_08_s08003
385+ # http://villaolmo.mib.infn.it/ICATPP9th_2005/Calorimetry/Schram.p.pdf
386+ set ECalResolutionFormula { (abs(eta) <= 3.2) * sqrt(energy^2*0.0017^2 + energy*0.101^2) + \
387+ (abs(eta) > 3.2 && abs(eta) <= 4.9) * sqrt(energy^2*0.0350^2 + energy*2.085^2)}
388+
389+ # set HCalResolutionFormula {resolution formula as a function of eta and energy}
390+ # http://arxiv.org/pdf/hep-ex/0004009v1
391+ # http://villaolmo.mib.infn.it/ICATPP9th_2005/Calorimetry/Schram.p.pdf
392+ set HCalResolutionFormula { (abs(eta) <= 1.7) * sqrt(energy^2*0.0302^2 + energy*0.5205^2 + 1.59^2) + \
393+ (abs(eta) > 1.7 && abs(eta) <= 3.2) * sqrt(energy^2*0.0500^2 + energy*0.706^2) + \
394+ (abs(eta) > 3.2 && abs(eta) <= 4.9) * sqrt(energy^2*0.9420^2 + energy*0.075^2)}
395+}
396+
397+####################
398+# Energy flow merger
399+####################
400+
401+module Merger EFlowMerger {
402+# add InputArray InputArray
403+ add InputArray Calorimeter/eflowTracks
404+ add InputArray Calorimeter/eflowTowers
405+ add InputArray MuonMomentumSmearing/muons
406+ set OutputArray eflow
407+}
408+
409+###################
410+# Photon efficiency
411+###################
412+
413+module Efficiency PhotonEfficiency {
414+ set InputArray Calorimeter/photons
415+ set OutputArray photons
416+
417+ # set EfficiencyFormula {efficiency formula as a function of eta and pt}
418+
419+ # efficiency formula for photons
420+ set EfficiencyFormula { (pt <= 10.0) * (0.00) + \
421+ (abs(eta) <= 1.5) * (pt > 10.0) * (0.95) + \
422+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 10.0) * (0.85) + \
423+ (abs(eta) > 2.5) * (0.00)}
424+}
425+
426+##################
427+# Photon isolation
428+##################
429+
430+module Isolation PhotonIsolation {
431+ set CandidateInputArray PhotonEfficiency/photons
432+ set IsolationInputArray EFlowMerger/eflow
433+
434+ set OutputArray photons
435+
436+ set DeltaRMax 0.5
437+
438+ set PTMin 0.5
439+
440+ set PTRatioMax 0.1
441+}
442+
443+#####################
444+# Electron efficiency
445+#####################
446+
447+module Efficiency ElectronEfficiency {
448+ set InputArray ElectronEnergySmearing/electrons
449+ set OutputArray electrons
450+
451+ # set EfficiencyFormula {efficiency formula as a function of eta and pt}
452+
453+ # efficiency formula for electrons
454+ set EfficiencyFormula { (pt <= 10.0) * (0.00) + \
455+ (abs(eta) <= 1.5) * (pt > 10.0) * (0.95) + \
456+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 10.0) * (0.85) + \
457+ (abs(eta) > 2.5) * (0.00)}
458+}
459+
460+####################
461+# Electron isolation
462+####################
463+
464+module Isolation ElectronIsolation {
465+ set CandidateInputArray ElectronEfficiency/electrons
466+ set IsolationInputArray EFlowMerger/eflow
467+
468+ set OutputArray electrons
469+
470+ set DeltaRMax 0.5
471+
472+ set PTMin 0.5
473+
474+ set PTRatioMax 0.1
475+}
476+
477+#################
478+# Muon efficiency
479+#################
480+
481+module Efficiency MuonEfficiency {
482+ set InputArray MuonMomentumSmearing/muons
483+ set OutputArray muons
484+
485+ # set EfficiencyFormula {efficiency as a function of eta and pt}
486+
487+ # efficiency formula for muons
488+ set EfficiencyFormula { (pt <= 10.0) * (0.00) + \
489+ (abs(eta) <= 1.5) * (pt > 10.0) * (0.95) + \
490+ (abs(eta) > 1.5 && abs(eta) <= 2.7) * (pt > 10.0) * (0.85) + \
491+ (abs(eta) > 2.7) * (0.00)}
492+}
493+
494+################
495+# Muon isolation
496+################
497+
498+module Isolation MuonIsolation {
499+ set CandidateInputArray MuonEfficiency/muons
500+ set IsolationInputArray EFlowMerger/eflow
501+
502+ set OutputArray muons
503+
504+ set DeltaRMax 0.5
505+
506+ set PTMin 0.5
507+
508+ set PTRatioMax 0.1
509+}
510+
511+###################
512+# Missing ET merger
513+###################
514+
515+module Merger MissingET {
516+# add InputArray InputArray
517+ add InputArray EFlowMerger/eflow
518+ set MomentumOutputArray momentum
519+}
520+
521+##################
522+# Scalar HT merger
523+##################
524+
525+module Merger ScalarHT {
526+# add InputArray InputArray
527+ add InputArray UniqueObjectFinder/jets
528+ add InputArray UniqueObjectFinder/electrons
529+ add InputArray UniqueObjectFinder/photons
530+ add InputArray MuonIsolation/muons
531+ set EnergyOutputArray energy
532+}
533+
534+############
535+# Jet finder
536+############
537+
538+module FastJetFinder FastJetFinder {
539+# set InputArray Calorimeter/towers
540+ set InputArray EFlowMerger/eflow
541+
542+ set OutputArray jets
543+
544+ # algorithm: 1 CDFJetClu, 2 MidPoint, 3 SIScone, 4 kt, 5 Cambridge/Aachen, 6 antikt
545+ set JetAlgorithm 6
546+ set ParameterR 0.7
547+
548+ set ConeRadius 0.5
549+ set SeedThreshold 1.0
550+ set ConeAreaFraction 1.0
551+ set AdjacencyCut 2.0
552+ set OverlapThreshold 0.75
553+
554+ set MaxIterations 100
555+ set MaxPairSize 2
556+ set Iratch 1
557+
558+ set JetPTMin 20.0
559+}
560+
561+###########
562+# b-tagging
563+###########
564+
565+module BTagging BTagging {
566+ set PartonInputArray Delphes/partons
567+ set JetInputArray FastJetFinder/jets
568+
569+ set DeltaR 0.5
570+
571+ set PartonPTMin 1.0
572+
573+ set PartonEtaMax 2.5
574+
575+ # add EfficiencyFormula {abs(PDG code)} {efficiency formula as a function of eta and pt}
576+ # PDG code = the highest PDG code of a quark or gluon inside DeltaR cone around jet axis
577+ # gluon's PDG code has the lowest priority
578+
579+ # default efficiency formula (misidentification rate)
580+ add EfficiencyFormula {0} {0.001}
581+ # efficiency formula for c-jets (misidentification rate)
582+ add EfficiencyFormula {4} {0.1}
583+ # efficiency formula for b-jets
584+ add EfficiencyFormula {5} {0.4}
585+}
586+
587+module TauTagging TauTagging {
588+ set ParticleInputArray Delphes/allParticles
589+ set PartonInputArray Delphes/partons
590+ set JetInputArray FastJetFinder/jets
591+
592+ set DeltaR 0.5
593+
594+ set TauPTMin 1.0
595+
596+ set TauEtaMax 2.5
597+
598+ # add EfficiencyFormula {abs(PDG code)} {efficiency formula as a function of eta and pt}
599+
600+ # default efficiency formula (misidentification rate)
601+ add EfficiencyFormula {0} {0.001}
602+ # efficiency formula for tau-jets
603+ add EfficiencyFormula {15} {0.4}
604+}
605+
606+#####################################################
607+# Find uniquely identified photons/electrons/tau/jets
608+#####################################################
609+
610+module UniqueObjectFinder UniqueObjectFinder {
611+# earlier arrays take precedence over later ones
612+# add InputArray InputArray OutputArray
613+ add InputArray PhotonIsolation/photons photons
614+ add InputArray ElectronIsolation/electrons electrons
615+ add InputArray FastJetFinder/jets jets
616+}
617+
618+##################
619+# ROOT tree writer
620+##################
621+
622+module TreeWriter TreeWriter {
623+# add Branch InputArray BranchName BranchClass
624+ add Branch Delphes/allParticles Particle GenParticle
625+ add Branch TrackMerger/tracks Track Track
626+ add Branch Calorimeter/towers Tower Tower
627+ add Branch Calorimeter/eflowTracks EFlowTrack Track
628+ add Branch Calorimeter/eflowTowers EFlowTower Tower
629+ add Branch MuonMomentumSmearing/muons EFlowMuon Muon
630+ add Branch UniqueObjectFinder/jets Jet Jet
631+ add Branch UniqueObjectFinder/electrons Electron Electron
632+ add Branch UniqueObjectFinder/photons Photon Photon
633+ add Branch MuonIsolation/muons Muon Muon
634+ add Branch MissingET/momentum MissingET MissingET
635+ add Branch ScalarHT/energy ScalarHT ScalarHT
636+}
637
638
639=== modified file 'Template/Cards/delphes_card_CMS.dat'
640--- Template/Cards/delphes_card_CMS.dat 2010-10-30 03:26:37 +0000
641+++ Template/Cards/delphes_card_CMS.dat 2013-03-04 23:37:19 +0000
642@@ -1,135 +1,512 @@
643-DETECTOR CARD # DO NOT REMOVE THIS IS A TAG!
644-
645-# Detector extension, in pseudorapidity units
646-CEN_max_tracker 2.5 // Maximum tracker coverage
647-CEN_max_calo_cen 3.0 // central calorimeter coverage
648-CEN_max_calo_fwd 5.0 // forward calorimeter pseudorapidity coverage
649-CEN_max_mu 2.4 // muon chambers pseudorapidity coverage
650-
651-# Energy resolution for electron/photon
652-# \sigma/E = C + N/E + S/\sqrt{E}, E in GeV
653-ELG_Scen 0.05 // S term for central ECAL
654-ELG_Ncen 0.25 // N term for central ECAL
655-ELG_Ccen 0.005 // C term for central ECAL
656-ELG_Sfwd 2.084 // S term for FCAL
657-ELG_Nfwd 0.0 // N term for FCAL
658-ELG_Cfwd 0.107 // C term for FCAL
659-ELG_Szdc 0.70 // S term for ZDC
660-ELG_Nzdc 0.0 // N term for ZDC
661-ELG_Czdc 0.08 // C term for ZDC
662-
663-
664-# Energy resolution for hadrons in ecal/hcal/hf
665-# \sigma/E = C + N/E + S/\sqrt{E}, E in GeV
666-HAD_Shcal 1.5 // S term for central HCAL
667-HAD_Nhcal 0. // N term for central HCAL
668-HAD_Chcal 0.05 // C term for central HCAL
669-HAD_Shf 2.7 // S term for FCAL
670-HAD_Nhf 0. // N term for FCAL
671-HAD_Chf 0.13 // C term for FCAL
672-HAD_Szdc 1.38 // S term for ZDC
673-HAD_Nzdc 0. // N term for ZDC
674-HAD_Czdc 0.13 // C term for ZDC
675-
676-# Time resolution for ZDC/RP220/RP420
677-ZDC_T_resolution 0 // in s
678-RP220_T_resolution 0 // in s
679-RP420_T_resolution 0 // in s
680-
681-# Muon smearing
682-MU_SmearPt 0.01 // transverse momentum Pt in GeV
683-
684-# Tracking efficiencies
685-TRACK_ptmin 0.9 // minimal pt needed to reach the calorimeter in GeV
686-TRACK_eff 90 // efficiency associated to the tracking (%)
687-
688-# Calorimetric towers
689-TOWER_number 40
690-TOWER_eta_edges 0. 0.087 0.174 0.261 0.348 0.435 0.522 0.609 0.696 0.783 0.870 0.957 1.044 1.131 1.218 1.305 1.392 1.479 1.566 1.653 1.740 1.830 1.930 2.043 2.172 2.322 2.500 2.650 2.868 2.950 3.125 3.300 3.475 3.650 3.825 4.000 4.175 4.350 4.525 4.700 5.000
691-## list of the edges of each tower in eta for eta>0 assuming a symmetric detector in eta<0
692-### the list starts with the lower edge of the most central tower
693-### the list ends with the higher edged of the most forward tower
694-### there should be NTOWER+1 values
695-TOWER_dphi 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 20 20
696-### list of the tower size in phi (in degrees), assuming that all towers are similar in phi for a given eta value
697-### the list starts with the phi-size of the most central tower (eta=0)
698-### the list ends with the phi-size of the most forward tower
699-### there should be NTOWER values
700-##
701-#
702-
703-# Thresholds for reconstructed objetcs, Pt in GeV
704-PTCUT_elec 10.0
705-PTCUT_muon 10.0
706-PTCUT_jet 20.0
707-PTCUT_gamma 10.0
708-PTCUT_taujet 10.0
709-
710-# Thresholds for reconstructed objects in ZDC, E in GeV
711-ZDC_gamma_E 20
712-ZDC_n_E 50
713-
714-# Charged lepton isolation. Pt and Et in GeV
715-ISOL_PT 2.0 //minimal pt of tracks for isolation criteria
716-ISOL_Cone 0.5 //Cone for isolation criteria
717-ISOL_Calo_ET 1E99 //minimal tower transverse energy for isolation criteria. 1E99 means "off"
718-ISOL_Calo_Cone 0.4 //Cone for calorimetric isolation
719-ISOL_Calo_Grid 3 //Grid size (N x N) for calorimetric isolation
720-
721-# General jet variable
722-JET_coneradius 0.7 // generic jet radius ; not for tau's !!!
723-JET_jetalgo 1 // 1 for Cone algorithm, 2 for MidPoint algorithm, 3 for SIScone algorithm, 4 for kt algorithm
724-JET_seed 1.0 // minimum seed to start jet reconstruction, in GeV
725-JET_Eflow 0 // Perfect energy assumed in the tracker coverage
726-
727-# Tagging definition
728-BTAG_b 40 // b-tag efficiency (%)
729-BTAG_mistag_c 10 // mistagging (%)
730-BTAG_mistag_l 1 // mistagging (%)
731-
732-# FLAGS
733-FLAG_bfield 1 //1 to run the bfield propagation else 0
734-FLAG_vfd 1 //1 to run the very forward detectors else 0
735-FLAG_RP 1 //1 to run the very forward detectors else 0
736-FLAG_trigger 1 //1 to run the trigger selection else 0
737-FLAG_frog 0 //1 to run the FROG event display
738-FLAG_lhco 0 //1 to run the LHCO
739-
740-# In case BField propagation allowed
741-TRACK_radius 129 //radius of the BField coverage, in cm
742-TRACK_length 300 //length of the BField coverage, in cm
743-TRACK_bfield_x 0 //X component of the BField, in T
744-TRACK_bfield_y 0 //Y component of the BField, in T
745-TRACK_bfield_z 3.8 //Z component of the BField, in T
746-
747-# Very forward detector extension, in pseudorapidity
748-# if allowed
749-VFD_min_calo_vfd 5.2 // very forward calorimeter (if any) like CASTOR
750-VFD_max_calo_vfd 6.6
751-VFD_min_zdc 8.3 // zero-degree neutral calorimeter
752-VFD_s_zdc 140 // distance of the Zero Degree Calorimeter, from the IP, in [m]
753-
754-RP_220_s 220 // distance of the RP to the IP, in meters
755-RP_220_x 0.002 // distance of the RP to the beam, in meters
756-RP_420_s 420 // distance of the RP to the IP, in meters
757-RP_420_x 0.004 // distance of the RP to the beam, in meters
758-RP_beam1Card DELPHESDIR/data/LHCB1IR5_v6.500.tfs
759-RP_beam2Card DELPHESDIR/data/LHCB2IR5_v6.500.tfs
760-RP_IP_name IP5
761-RP_offsetEl_x 0.097 // horizontal separation between both beam, in meters
762-RP_offsetEl_y 0 // vertical separation between both beam, in meters
763-RP_offsetEl_s 120 // distance of beam separation point, from IP
764-RP_cross_x -500 // IP offset in horizontal plane, in micrometers
765-RP_cross_y 0 // IP offset in vertical plane, in micrometers
766-RP_cross_ang_x 142.5 // half-crossing angle in horizontal plane, in microrad
767-RP_cross_ang_y 0 // half-crossing angle in vertical plane, in microrad
768-
769-
770-# In case FROG event display allowed
771-NEvents_Frog 100
772-# Number of events to process
773-NEvents -1 // -1 means 'all'
774-
775-# input PDG tables
776-PdgTableFilename DELPHESDIR/data/particle.tbl // table with particle pid,mass,charge,...
777+#######################################
778+# Order of execution of various modules
779+#######################################
780+
781+set ExecutionPath {
782+ ParticlePropagator
783+
784+ ChargedHadronTrackingEfficiency
785+ ElectronTrackingEfficiency
786+ MuonTrackingEfficiency
787+
788+ ChargedHadronMomentumSmearing
789+ ElectronEnergySmearing
790+ MuonMomentumSmearing
791+
792+ TrackMerger
793+ Calorimeter
794+ EFlowMerger
795+
796+ PhotonEfficiency
797+ PhotonIsolation
798+
799+ ElectronEfficiency
800+ ElectronIsolation
801+
802+ MuonEfficiency
803+ MuonIsolation
804+
805+ MissingET
806+
807+ FastJetFinder
808+ BTagging
809+ TauTagging
810+
811+ UniqueObjectFinder
812+
813+ ScalarHT
814+
815+ TreeWriter
816+}
817+
818+#################################
819+# Propagate particles in cylinder
820+#################################
821+
822+module ParticlePropagator ParticlePropagator {
823+ set InputArray Delphes/stableParticles
824+
825+ set OutputArray stableParticles
826+ set ChargedHadronOutputArray chargedHadrons
827+ set ElectronOutputArray electrons
828+ set MuonOutputArray muons
829+
830+ # radius of the magnetic field coverage, in m
831+ set Radius 1.29
832+ # half-length of the magnetic field coverage, in m
833+ set HalfLength 3.00
834+
835+ # magnetic field
836+ set Bz 3.8
837+}
838+
839+####################################
840+# Charged hadron tracking efficiency
841+####################################
842+
843+module Efficiency ChargedHadronTrackingEfficiency {
844+ set InputArray ParticlePropagator/chargedHadrons
845+ set OutputArray chargedHadrons
846+
847+ # add EfficiencyFormula {efficiency formula as a function of eta and pt}
848+
849+ # tracking efficiency formula for charged hadrons
850+ set EfficiencyFormula { (pt <= 0.1) * (0.00) + \
851+ (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.70) + \
852+ (abs(eta) <= 1.5) * (pt > 1.0) * (0.95) + \
853+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.60) + \
854+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0) * (0.85) + \
855+ (abs(eta) > 2.5) * (0.00)}
856+}
857+
858+##############################
859+# Electron tracking efficiency
860+##############################
861+
862+module Efficiency ElectronTrackingEfficiency {
863+ set InputArray ParticlePropagator/electrons
864+ set OutputArray electrons
865+
866+ # set EfficiencyFormula {efficiency formula as a function of eta and pt}
867+
868+ # tracking efficiency formula for electrons
869+ set EfficiencyFormula { (pt <= 0.1) * (0.00) + \
870+ (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.73) + \
871+ (abs(eta) <= 1.5) * (pt > 1.0 && pt <= 1.0e2) * (0.95) + \
872+ (abs(eta) <= 1.5) * (pt > 1.0e2) * (0.99) + \
873+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.50) + \
874+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0 && pt <= 1.0e2) * (0.83) + \
875+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0e2) * (0.90) + \
876+ (abs(eta) > 2.5) * (0.00)}
877+}
878+
879+##############################
880+# Muon tracking efficiency
881+##############################
882+
883+module Efficiency MuonTrackingEfficiency {
884+ set InputArray ParticlePropagator/muons
885+ set OutputArray muons
886+
887+ # set EfficiencyFormula {efficiency formula as a function of eta and pt}
888+
889+ # tracking efficiency formula for muons
890+ set EfficiencyFormula { (pt <= 0.1) * (0.00) + \
891+ (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.75) + \
892+ (abs(eta) <= 1.5) * (pt > 1.0) * (0.99) + \
893+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.70) + \
894+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0) * (0.98) + \
895+ (abs(eta) > 2.5) * (0.00)}
896+}
897+
898+########################################
899+# Momentum resolution for charged tracks
900+########################################
901+
902+module MomentumSmearing ChargedHadronMomentumSmearing {
903+ set InputArray ChargedHadronTrackingEfficiency/chargedHadrons
904+ set OutputArray chargedHadrons
905+
906+ # set ResolutionFormula {resolution formula as a function of eta and pt}
907+
908+ # resolution formula for charged hadrons
909+ set ResolutionFormula { (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.02) + \
910+ (abs(eta) <= 1.5) * (pt > 1.0 && pt <= 1.0e1) * (0.01) + \
911+ (abs(eta) <= 1.5) * (pt > 1.0e1 && pt <= 2.0e2) * (0.03) + \
912+ (abs(eta) <= 1.5) * (pt > 2.0e2) * (0.05) + \
913+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.03) + \
914+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0 && pt <= 1.0e1) * (0.02) + \
915+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0e1 && pt <= 2.0e2) * (0.04) + \
916+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 2.0e2) * (0.05)}
917+}
918+
919+#################################
920+# Energy resolution for electrons
921+#################################
922+
923+module EnergySmearing ElectronEnergySmearing {
924+ set InputArray ElectronTrackingEfficiency/electrons
925+ set OutputArray electrons
926+
927+ # set ResolutionFormula {resolution formula as a function of eta and energy}
928+
929+ set ResolutionFormula { (abs(eta) <= 2.5) * (energy > 0.1 && energy <= 2.5e1) * (energy*0.015) + \
930+ (abs(eta) <= 2.5) * (energy > 2.5e1) * sqrt(energy^2*0.005^2 + energy*0.05^2 + 0.25^2) + \
931+ (abs(eta) > 2.5 && abs(eta) <= 3.0) * sqrt(energy^2*0.005^2 + energy*0.05^2 + 0.25^2) + \
932+ (abs(eta) > 3.0 && abs(eta) <= 5.0) * sqrt(energy^2*0.107^2 + energy*2.08^2)}
933+
934+}
935+
936+###############################
937+# Momentum resolution for muons
938+###############################
939+
940+module MomentumSmearing MuonMomentumSmearing {
941+ set InputArray MuonTrackingEfficiency/muons
942+ set OutputArray muons
943+
944+ # set ResolutionFormula {resolution formula as a function of eta and pt}
945+
946+ # resolution formula for muons
947+ set ResolutionFormula { (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.03) + \
948+ (abs(eta) <= 1.5) * (pt > 1.0 && pt <= 1.0e1) * (0.02) + \
949+ (abs(eta) <= 1.5) * (pt > 1.0e1 && pt <= 2.0e2) * (0.03) + \
950+ (abs(eta) <= 1.5) * (pt > 2.0e2) * (0.05) + \
951+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.04) + \
952+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0 && pt <= 1.0e1) * (0.03) + \
953+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0e1 && pt <= 2.0e2) * (0.04) + \
954+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 2.0e2) * (0.05)}
955+}
956+
957+##############
958+# Track merger
959+##############
960+
961+module Merger TrackMerger {
962+# add InputArray InputArray
963+ add InputArray ChargedHadronMomentumSmearing/chargedHadrons
964+ add InputArray ElectronEnergySmearing/electrons
965+ set OutputArray tracks
966+}
967+
968+#############
969+# Calorimeter
970+#############
971+
972+module Calorimeter Calorimeter {
973+ set ParticleInputArray ParticlePropagator/stableParticles
974+ set TrackInputArray TrackMerger/tracks
975+
976+ set TowerOutputArray towers
977+ set PhotonOutputArray photons
978+
979+ set EFlowTrackOutputArray eflowTracks
980+ set EFlowTowerOutputArray eflowTowers
981+
982+ set pi [expr {acos(-1)}]
983+
984+ # lists of the edges of each tower in eta and phi
985+ # each list starts with the lower edge of the first tower
986+ # the list ends with the higher edged of the last tower
987+
988+ # 5 degrees towers
989+ set PhiBins {}
990+ for {set i -36} {$i <= 36} {incr i} {
991+ add PhiBins [expr {$i * $pi/36.0}]
992+ }
993+ foreach eta {-1.566 -1.479 -1.392 -1.305 -1.218 -1.131 -1.044 -0.957 -0.87 -0.783 -0.696 -0.609 -0.522 -0.435 -0.348 -0.261 -0.174 -0.087 0 0.087 0.174 0.261 0.348 0.435 0.522 0.609 0.696 0.783 0.87 0.957 1.044 1.131 1.218 1.305 1.392 1.479 1.566 1.653} {
994+ add EtaPhiBins $eta $PhiBins
995+ }
996+
997+ # 10 degrees towers
998+ set PhiBins {}
999+ for {set i -18} {$i <= 18} {incr i} {
1000+ add PhiBins [expr {$i * $pi/18.0}]
1001+ }
1002+ foreach eta {-4.35 -4.175 -4 -3.825 -3.65 -3.475 -3.3 -3.125 -2.95 -2.868 -2.65 -2.5 -2.322 -2.172 -2.043 -1.93 -1.83 -1.74 -1.653 1.74 1.83 1.93 2.043 2.172 2.322 2.5 2.65 2.868 2.95 3.125 3.3 3.475 3.65 3.825 4 4.175 4.35 4.525} {
1003+ add EtaPhiBins $eta $PhiBins
1004+ }
1005+
1006+ # 20 degrees towers
1007+ set PhiBins {}
1008+ for {set i -9} {$i <= 9} {incr i} {
1009+ add PhiBins [expr {$i * $pi/9.0}]
1010+ }
1011+ foreach eta {-5 -4.7 -4.525 4.7 5} {
1012+ add EtaPhiBins $eta $PhiBins
1013+ }
1014+
1015+ # default energy fractions {abs(PDG code)} {Fecal Fhcal}
1016+ add EnergyFraction {0} {0.0 1.0}
1017+ # energy fractions for e, gamma and pi0
1018+ add EnergyFraction {11} {1.0 0.0}
1019+ add EnergyFraction {22} {1.0 0.0}
1020+ add EnergyFraction {111} {1.0 0.0}
1021+ # energy fractions for muon and neutrinos
1022+ add EnergyFraction {12} {0.0 0.0}
1023+ add EnergyFraction {13} {0.0 0.0}
1024+ add EnergyFraction {14} {0.0 0.0}
1025+ add EnergyFraction {16} {0.0 0.0}
1026+ # energy fractions for K0short and Lambda
1027+ add EnergyFraction {310} {0.3 0.7}
1028+ add EnergyFraction {3122} {0.3 0.7}
1029+
1030+ # set ECalResolutionFormula {resolution formula as a function of eta and energy}
1031+ set ECalResolutionFormula { (abs(eta) <= 3.0) * sqrt(energy^2*0.005^2 + energy*0.05^2 + 0.25^2) + \
1032+ (abs(eta) > 3.0 && abs(eta) <= 5.0) * sqrt(energy^2*0.107^2 + energy*2.08^2)}
1033+
1034+ # set HCalResolutionFormula {resolution formula as a function of eta and energy}
1035+ set HCalResolutionFormula { (abs(eta) <= 3.0) * sqrt(energy^2*0.050^2 + energy*1.50^2) + \
1036+ (abs(eta) > 3.0 && abs(eta) <= 5.0) * sqrt(energy^2*0.130^2 + energy*2.70^2)}
1037+}
1038+
1039+####################
1040+# Energy flow merger
1041+####################
1042+
1043+module Merger EFlowMerger {
1044+# add InputArray InputArray
1045+ add InputArray Calorimeter/eflowTracks
1046+ add InputArray Calorimeter/eflowTowers
1047+ add InputArray MuonMomentumSmearing/muons
1048+ set OutputArray eflow
1049+}
1050+
1051+###################
1052+# Photon efficiency
1053+###################
1054+
1055+module Efficiency PhotonEfficiency {
1056+ set InputArray Calorimeter/photons
1057+ set OutputArray photons
1058+
1059+ # set EfficiencyFormula {efficiency formula as a function of eta and pt}
1060+
1061+ # efficiency formula for photons
1062+ set EfficiencyFormula { (pt <= 10.0) * (0.00) + \
1063+ (abs(eta) <= 1.5) * (pt > 10.0) * (0.95) + \
1064+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 10.0) * (0.85) + \
1065+ (abs(eta) > 2.5) * (0.00)}
1066+}
1067+
1068+##################
1069+# Photon isolation
1070+##################
1071+
1072+module Isolation PhotonIsolation {
1073+ set CandidateInputArray PhotonEfficiency/photons
1074+ set IsolationInputArray EFlowMerger/eflow
1075+
1076+ set OutputArray photons
1077+
1078+ set DeltaRMax 0.5
1079+
1080+ set PTMin 0.5
1081+
1082+ set PTRatioMax 0.1
1083+}
1084+
1085+#####################
1086+# Electron efficiency
1087+#####################
1088+
1089+module Efficiency ElectronEfficiency {
1090+ set InputArray ElectronEnergySmearing/electrons
1091+ set OutputArray electrons
1092+
1093+ # set EfficiencyFormula {efficiency formula as a function of eta and pt}
1094+
1095+ # efficiency formula for electrons
1096+ set EfficiencyFormula { (pt <= 10.0) * (0.00) + \
1097+ (abs(eta) <= 1.5) * (pt > 10.0) * (0.95) + \
1098+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 10.0) * (0.85) + \
1099+ (abs(eta) > 2.5) * (0.00)}
1100+}
1101+
1102+####################
1103+# Electron isolation
1104+####################
1105+
1106+module Isolation ElectronIsolation {
1107+ set CandidateInputArray ElectronEfficiency/electrons
1108+ set IsolationInputArray EFlowMerger/eflow
1109+
1110+ set OutputArray electrons
1111+
1112+ set DeltaRMax 0.5
1113+
1114+ set PTMin 0.5
1115+
1116+ set PTRatioMax 0.1
1117+}
1118+
1119+#################
1120+# Muon efficiency
1121+#################
1122+
1123+module Efficiency MuonEfficiency {
1124+ set InputArray MuonMomentumSmearing/muons
1125+ set OutputArray muons
1126+
1127+ # set EfficiencyFormula {efficiency as a function of eta and pt}
1128+
1129+ # efficiency formula for muons
1130+ set EfficiencyFormula { (pt <= 10.0) * (0.00) + \
1131+ (abs(eta) <= 1.5) * (pt > 10.0) * (0.95) + \
1132+ (abs(eta) > 1.5 && abs(eta) <= 2.4) * (pt > 10.0) * (0.85) + \
1133+ (abs(eta) > 2.4) * (0.00)}
1134+}
1135+
1136+################
1137+# Muon isolation
1138+################
1139+
1140+module Isolation MuonIsolation {
1141+ set CandidateInputArray MuonEfficiency/muons
1142+ set IsolationInputArray EFlowMerger/eflow
1143+
1144+ set OutputArray muons
1145+
1146+ set DeltaRMax 0.5
1147+
1148+ set PTMin 0.5
1149+
1150+ set PTRatioMax 0.1
1151+}
1152+
1153+###################
1154+# Missing ET merger
1155+###################
1156+
1157+module Merger MissingET {
1158+# add InputArray InputArray
1159+ add InputArray EFlowMerger/eflow
1160+ set MomentumOutputArray momentum
1161+}
1162+
1163+##################
1164+# Scalar HT merger
1165+##################
1166+
1167+module Merger ScalarHT {
1168+# add InputArray InputArray
1169+ add InputArray UniqueObjectFinder/jets
1170+ add InputArray UniqueObjectFinder/electrons
1171+ add InputArray UniqueObjectFinder/photons
1172+ add InputArray MuonIsolation/muons
1173+ set EnergyOutputArray energy
1174+}
1175+
1176+############
1177+# Jet finder
1178+############
1179+
1180+module FastJetFinder FastJetFinder {
1181+# set InputArray Calorimeter/towers
1182+ set InputArray EFlowMerger/eflow
1183+
1184+ set OutputArray jets
1185+
1186+ # algorithm: 1 CDFJetClu, 2 MidPoint, 3 SIScone, 4 kt, 5 Cambridge/Aachen, 6 antikt
1187+ set JetAlgorithm 6
1188+ set ParameterR 0.7
1189+
1190+ set ConeRadius 0.5
1191+ set SeedThreshold 1.0
1192+ set ConeAreaFraction 1.0
1193+ set AdjacencyCut 2.0
1194+ set OverlapThreshold 0.75
1195+
1196+ set MaxIterations 100
1197+ set MaxPairSize 2
1198+ set Iratch 1
1199+
1200+ set JetPTMin 20.0
1201+}
1202+
1203+###########
1204+# b-tagging
1205+###########
1206+
1207+module BTagging BTagging {
1208+ set PartonInputArray Delphes/partons
1209+ set JetInputArray FastJetFinder/jets
1210+
1211+ set DeltaR 0.5
1212+
1213+ set PartonPTMin 1.0
1214+
1215+ set PartonEtaMax 2.5
1216+
1217+ # add EfficiencyFormula {abs(PDG code)} {efficiency formula as a function of eta and pt}
1218+ # PDG code = the highest PDG code of a quark or gluon inside DeltaR cone around jet axis
1219+ # gluon's PDG code has the lowest priority
1220+
1221+ # https://twiki.cern.ch/twiki/bin/view/CMSPublic/PhysicsResultsBTV
1222+ # default efficiency formula (misidentification rate)
1223+ add EfficiencyFormula {0} {0.001}
1224+
1225+ # efficiency formula for c-jets (misidentification rate)
1226+ add EfficiencyFormula {4} { (pt <= 15.0) * (0.000) + \
1227+ (abs(eta) <= 1.2) * (pt > 15.0) * (0.2*tanh(pt*0.03 - 0.4)) + \
1228+ (abs(eta) > 1.2 && abs(eta) <= 2.5) * (pt > 15.0) * (0.1*tanh(pt*0.03 - 0.4)) + \
1229+ (abs(eta) > 2.5) * (0.000)}
1230+
1231+ # efficiency formula for b-jets
1232+ add EfficiencyFormula {5} { (pt <= 15.0) * (0.000) + \
1233+ (abs(eta) <= 1.2) * (pt > 15.0) * (0.5*tanh(pt*0.03 - 0.4)) + \
1234+ (abs(eta) > 1.2 && abs(eta) <= 2.5) * (pt > 15.0) * (0.4*tanh(pt*0.03 - 0.4)) + \
1235+ (abs(eta) > 2.5) * (0.000)}
1236+}
1237+
1238+module TauTagging TauTagging {
1239+ set ParticleInputArray Delphes/allParticles
1240+ set PartonInputArray Delphes/partons
1241+ set JetInputArray FastJetFinder/jets
1242+
1243+ set DeltaR 0.5
1244+
1245+ set TauPTMin 1.0
1246+
1247+ set TauEtaMax 2.5
1248+
1249+ # add EfficiencyFormula {abs(PDG code)} {efficiency formula as a function of eta and pt}
1250+
1251+ # default efficiency formula (misidentification rate)
1252+ add EfficiencyFormula {0} {0.001}
1253+ # efficiency formula for tau-jets
1254+ add EfficiencyFormula {15} {0.4}
1255+}
1256+
1257+#####################################################
1258+# Find uniquely identified photons/electrons/tau/jets
1259+#####################################################
1260+
1261+module UniqueObjectFinder UniqueObjectFinder {
1262+# earlier arrays take precedence over later ones
1263+# add InputArray InputArray OutputArray
1264+ add InputArray PhotonIsolation/photons photons
1265+ add InputArray ElectronIsolation/electrons electrons
1266+ add InputArray FastJetFinder/jets jets
1267+}
1268+
1269+##################
1270+# ROOT tree writer
1271+##################
1272+
1273+module TreeWriter TreeWriter {
1274+# add Branch InputArray BranchName BranchClass
1275+ add Branch Delphes/allParticles Particle GenParticle
1276+ add Branch TrackMerger/tracks Track Track
1277+ add Branch Calorimeter/towers Tower Tower
1278+ add Branch Calorimeter/eflowTracks EFlowTrack Track
1279+ add Branch Calorimeter/eflowTowers EFlowTower Tower
1280+ add Branch MuonMomentumSmearing/muons EFlowMuon Muon
1281+ add Branch UniqueObjectFinder/jets Jet Jet
1282+ add Branch UniqueObjectFinder/electrons Electron Electron
1283+ add Branch UniqueObjectFinder/photons Photon Photon
1284+ add Branch MuonIsolation/muons Muon Muon
1285+ add Branch MissingET/momentum MissingET MissingET
1286+ add Branch ScalarHT/energy ScalarHT ScalarHT
1287+}
1288
1289
1290=== modified file 'Template/Cards/delphes_card_default.dat'
1291--- Template/Cards/delphes_card_default.dat 2010-10-30 03:26:37 +0000
1292+++ Template/Cards/delphes_card_default.dat 2013-03-04 23:37:19 +0000
1293@@ -1,47 +1,54 @@
1294-DETECTOR CARD # DO NOT REMOVE THIS IS A TAG!
1295+DETECTOR CARD // DO NOT REMOVE THIS IS A TAG!
1296+# any line containing a dash symbol (#) will be completely ignored, whatever the position of this symbol
1297
1298 # Detector extension, in pseudorapidity units
1299-CEN_max_tracker 2.5 // Maximum tracker coverage
1300-CEN_max_calo_cen 3.0 // central calorimeter coverage
1301-CEN_max_calo_fwd 5.0 // forward calorimeter pseudorapidity coverage
1302-CEN_max_mu 2.4 // muon chambers pseudorapidity coverage
1303+CEN_max_tracker 2.5 // Maximum tracker coverage
1304+CEN_max_calo_cen 1.7 // central calorimeter coverage
1305+CEN_max_calo_ec 3.0 // calorimeter endcap coverage
1306+CEN_max_calo_fwd 5.0 // forward calorimeter pseudorapidity coverage
1307+CEN_max_mu 2.4 // muon chambers pseudorapidity coverage
1308
1309-# Energy resolution for electron/photon
1310+# Energy resolution for electron/photon in central/endcap/fwd/zdc calos
1311 # \sigma/E = C + N/E + S/\sqrt{E}, E in GeV
1312 ELG_Scen 0.05 // S term for central ECAL
1313-ELG_Ncen 0.25 // N term for central ECAL
1314-ELG_Ccen 0.005 // C term for central ECAL
1315+ELG_Ncen 0.25 // N term
1316+ELG_Ccen 0.005 // C term
1317+ELG_Sec 0.05 // S term for ECAL endcap
1318+ELG_Nec 0.25 // N term
1319+ELG_Cec 0.005 // C term
1320 ELG_Sfwd 2.084 // S term for FCAL
1321-ELG_Nfwd 0.0 // N term for FCAL
1322-ELG_Cfwd 0.107 // C term for FCAL
1323+ELG_Nfwd 0.0 // N term
1324+ELG_Cfwd 0.107 // C term
1325 ELG_Szdc 0.70 // S term for ZDC
1326-ELG_Nzdc 0.0 // N term for ZDC
1327-ELG_Czdc 0.08 // C term for ZDC
1328-
1329-
1330-# Energy resolution for hadrons in ecal/hcal/hf
1331+ELG_Nzdc 0.0 // N term
1332+ELG_Czdc 0.08 // C term
1333+
1334+# Energy resolution for hadrons in central/endcap/fwd/zdc calos
1335 # \sigma/E = C + N/E + S/\sqrt{E}, E in GeV
1336-HAD_Shcal 1.5 // S term for central HCAL
1337-HAD_Nhcal 0. // N term for central HCAL
1338-HAD_Chcal 0.05 // C term for central HCAL
1339-HAD_Shf 2.7 // S term for FCAL
1340-HAD_Nhf 0. // N term for FCAL
1341-HAD_Chf 0.13 // C term for FCAL
1342+HAD_Scen 1.5 // S term for central HCAL
1343+HAD_Ncen 0. // N term
1344+HAD_Ccen 0.05 // C term
1345+HAD_Sec 1.5 // S term for HCAL endcap
1346+HAD_Nec 0. // N term
1347+HAD_Cec 0.05 // C term
1348+HAD_Sfwd 2.7 // S term for FCAL
1349+HAD_Nfwd 0. // N term
1350+HAD_Cfwd 0.13 // C term
1351 HAD_Szdc 1.38 // S term for ZDC
1352-HAD_Nzdc 0. // N term for ZDC
1353-HAD_Czdc 0.13 // C term for ZDC
1354+HAD_Nzdc 0. // N term
1355+HAD_Czdc 0.13 // C term
1356
1357 # Time resolution for ZDC/RP220/RP420
1358-ZDC_T_resolution 0 // in s
1359-RP220_T_resolution 0 // in s
1360-RP420_T_resolution 0 // in s
1361+ZDC_T_resolution 0 // in s
1362+RP220_T_resolution 0 // in s
1363+RP420_T_resolution 0 // in s
1364
1365 # Muon smearing
1366 MU_SmearPt 0.01 // transverse momentum Pt in GeV
1367
1368 # Tracking efficiencies
1369-TRACK_ptmin 0.9 // minimal pt needed to reach the calorimeter in GeV
1370-TRACK_eff 90 // efficiency associated to the tracking (%)
1371+TRACK_ptmin 0.0 // minimal pt needed to reach the calorimeter in GeV
1372+TRACK_eff 100 // efficiency associated to the tracking (%)
1373
1374 # Calorimetric towers
1375 TOWER_number 40
1376@@ -58,7 +65,7 @@
1377 ##
1378 #
1379
1380-# Thresholds for reconstructed objetcs, Pt in GeV
1381+# Thresholds for reconstructed objects, Pt in GeV
1382 PTCUT_elec 10.0
1383 PTCUT_muon 10.0
1384 PTCUT_jet 20.0
1385@@ -70,34 +77,43 @@
1386 ZDC_n_E 50
1387
1388 # Charged lepton isolation. Pt and Et in GeV
1389-ISOL_PT 2.0 //minimal pt of tracks for isolation criteria
1390-ISOL_Cone 0.5 //Cone for isolation criteria
1391-ISOL_Calo_ET 1E99 //minimal tower transverse energy for isolation criteria. 1E99 means "off"
1392-ISOL_Calo_Cone 0.4 //Cone for calorimetric isolation
1393-ISOL_Calo_Grid 3 //Grid size (N x N) for calorimetric isolation
1394+ISOL_trk_PT 2.0 //minimal pt of tracks for isolation criteria
1395+ISOL_trk_Cone 0.5 //Cone for isolation criteria
1396+ISOL_calo_Cone 0.5 //Cone for isolation criteria
1397+ISOL_calo_ET 0 //minimal tower transverse energy for isolation criteria.
1398+ISOL_calo_Grid 3 //Grid size (N x N) for calorimetric isolation
1399
1400 # General jet variable
1401 JET_coneradius 0.7 // generic jet radius ; not for tau's !!!
1402-JET_jetalgo 1 // 1 for Cone algorithm, 2 for MidPoint algorithm, 3 for SIScone algorithm, 4 for kt algorithm
1403+JET_jetalgo 2 // Jet algorithms: 1 CDFJetClu, 2 MidPoint, 3 SIScone, 4 kt, 5 Cambridge/Aachen, 6 antikt
1404 JET_seed 1.0 // minimum seed to start jet reconstruction, in GeV
1405 JET_Eflow 0 // Perfect energy assumed in the tracker coverage
1406
1407-# Tagging definition
1408-BTAG_b 40 // b-tag efficiency (%)
1409-BTAG_mistag_c 10 // mistagging (%)
1410-BTAG_mistag_l 1 // mistagging (%)
1411+# b-(mis)tagging efficiencies
1412+# pt dependence for b-tagging and mistag
1413+# see http://root.cern.ch/root/html/TFormula.html for syntax
1414+# e.g. BTAG_func_b 0.4*(1-exp(-x))
1415+# in case of no explicit dependence, on x (=PT) or y (=eta), you MUST add "+0*x" and/or "+0*y"
1416+# e.g. BTAG_func_g 0.01 + 0*x + 0*y
1417+# put 'x' for pt ; range: [0, 9E6 GeV/c]
1418+# put 'y' for eta ; range [-CEN_max_tracker ; CEN_max_tracker ]
1419+# e.g. (x<300)?(0.2+0*x+0*y):(0.6+0*x+y*0)
1420+BTAG_func_b 0.4+0*x+0*y // formula for Pt dependence of the b-tag efficiency (b-jets)
1421+BTAG_func_c 0.1+0*x+0*y // formula for Pt dependence of the mistag efficiency (c-jets)
1422+BTAG_func_g 0.01+0*x+0*y // (gluon-jets)
1423+BTAG_func_l 0.01+0*x+0*y // (light-jets)
1424
1425 # FLAGS
1426 FLAG_bfield 1 //1 to run the bfield propagation else 0
1427 FLAG_vfd 1 //1 to run the very forward detectors else 0
1428 FLAG_RP 1 //1 to run the very forward detectors else 0
1429 FLAG_trigger 1 //1 to run the trigger selection else 0
1430-FLAG_frog 0 //1 to run the FROG event display
1431+FLAG_frog 1 //1 to run the FROG event display
1432 FLAG_lhco 0 //1 to run the LHCO
1433
1434 # In case BField propagation allowed
1435 TRACK_radius 129 //radius of the BField coverage, in cm
1436-TRACK_length 300 //length of the BField coverage, in cm
1437+TRACK_length 300 //half-length of the BField coverage, in cm
1438 TRACK_bfield_x 0 //X component of the BField, in T
1439 TRACK_bfield_y 0 //Y component of the BField, in T
1440 TRACK_bfield_z 3.8 //Z component of the BField, in T
1441@@ -109,26 +125,26 @@
1442 VFD_min_zdc 8.3 // zero-degree neutral calorimeter
1443 VFD_s_zdc 140 // distance of the Zero Degree Calorimeter, from the IP, in [m]
1444
1445+#Hector parameters
1446 RP_220_s 220 // distance of the RP to the IP, in meters
1447 RP_220_x 0.002 // distance of the RP to the beam, in meters
1448 RP_420_s 420 // distance of the RP to the IP, in meters
1449 RP_420_x 0.004 // distance of the RP to the beam, in meters
1450-RP_beam1Card DELPHESDIR/data/LHCB1IR5_v6.500.tfs
1451-RP_beam2Card DELPHESDIR/data/LHCB2IR5_v6.500.tfs
1452-RP_IP_name IP5
1453-RP_offsetEl_x 0.097 // horizontal separation between both beam, in meters
1454+RP_beam1Card DELPHESDIR/data/LHCB1IR5_v6.500.tfs // beam optics file, beam 1
1455+RP_beam2Card DELPHESDIR/data/LHCB2IR5_v6.500.tfs // beam optics file, beam 2
1456+RP_IP_name IP5 // tag for IP in Hector ; 'IP1' for ATLAS
1457+RP_offsetEl_x 0.097 // horizontal separation between both beam, in meters
1458 RP_offsetEl_y 0 // vertical separation between both beam, in meters
1459-RP_offsetEl_s 120 // distance of beam separation point, from IP
1460-RP_cross_x -500 // IP offset in horizontal plane, in micrometers
1461-RP_cross_y 0 // IP offset in vertical plane, in micrometers
1462-RP_cross_ang_x 142.5 // half-crossing angle in horizontal plane, in microrad
1463-RP_cross_ang_y 0 // half-crossing angle in vertical plane, in microrad
1464-
1465+RP_offsetEl_s 120 // distance of beam separation point, from IP
1466+RP_cross_x -500 // IP offset in horizontal plane, in micrometers
1467+RP_cross_y 0 // IP offset in vertical plane, in micrometers
1468+RP_cross_ang_x 142.5 // half-crossing angle in horizontal plane, in microrad
1469+RP_cross_ang_y 0 // half-crossing angle in vertical plane, in microrad
1470
1471 # In case FROG event display allowed
1472 NEvents_Frog 100
1473-# Number of events to process
1474-NEvents -1 // -1 means 'all'
1475+# Number of events to process
1476+NEvents -1 // -1 means 'all'
1477
1478 # input PDG tables
1479 PdgTableFilename DELPHESDIR/data/particle.tbl // table with particle pid,mass,charge,...
1480
1481=== added file 'Template/Cards/delphes_trigger_ATLAS.dat'
1482--- Template/Cards/delphes_trigger_ATLAS.dat 1970-01-01 00:00:00 +0000
1483+++ Template/Cards/delphes_trigger_ATLAS.dat 2013-03-04 23:37:19 +0000
1484@@ -0,0 +1,16 @@
1485+#TRIGGER CARD # DO NOT REMOVE THIS IS A TAG!
1486+
1487+# list of trigger algorithms
1488+# trigger_name >> algorithm #comments
1489+Inclusive Isol electron >> IElec1_PT: '25'
1490+di-electron Isol >> IELEC1_PT: '15' && IELEC2_PT: '15'
1491+Inclusive Photon >> GAMMA1_PT: '60'
1492+di-Photon >> GAMMA1_PT: '20' && GAMMA2_PT: '20'
1493+Inclusive Isol muon >> IMuon1_PT: '20'
1494+di-muon >> MUON1_PT: '10' && MUON2_PT: '10'
1495+Taujet and ETmis >> TAU1_PT: '35' && ETMIS_PT: '45'
1496+Jet and ETmis >> JET1_PT: '70' && ETMIS_PT: '70'
1497+Inclusive 1 jet >> JET1_PT: '400'
1498+Inclusive 3 jets >> JET1_PT: '165' && JET2_PT: '165' && JET3_PT: '165'
1499+Inclusive 4 jets >> JET1_PT: '110' && JET2_PT: '110' && JET3_PT: '110' && JET4_PT: '110'
1500+
1501
1502=== removed file 'Template/Cards/delphes_trigger_ATLAS.dat'
1503--- Template/Cards/delphes_trigger_ATLAS.dat 2010-10-30 03:26:37 +0000
1504+++ Template/Cards/delphes_trigger_ATLAS.dat 1970-01-01 00:00:00 +0000
1505@@ -1,16 +0,0 @@
1506-#TRIGGER CARD # DO NOT REMOVE THIS IS A TAG!
1507-
1508-# list of trigger algorithms
1509-# trigger_name >> algorithm #comments
1510-Inclusive Isol electron >> IElec1_PT: '25'
1511-di-electron Isol >> IELEC1_PT: '15' && IELEC2_PT: '15'
1512-Inclusive Photon >> GAMMA1_PT: '60'
1513-di-Photon >> GAMMA1_PT: '20' && GAMMA2_PT: '20'
1514-Inclusive Isol muon >> IMuon1_PT: '20'
1515-di-muon >> MUON1_PT: '10' && MUON2_PT: '10'
1516-Taujet and ETmis >> TAU1_PT: '35' && ETMIS_PT: '45'
1517-Jet and ETmis >> JET1_PT: '70' && ETMIS_PT: '70'
1518-Inclusive 1 jet >> JET1_PT: '400'
1519-Inclusive 3 jets >> JET1_PT: '165' && JET2_PT: '165' && JET3_PT: '165'
1520-Inclusive 4 jets >> JET1_PT: '110' && JET2_PT: '110' && JET3_PT: '110' && JET4_PT: '110'
1521-
1522
1523=== added file 'Template/Cards/delphes_trigger_CMS.dat'
1524--- Template/Cards/delphes_trigger_CMS.dat 1970-01-01 00:00:00 +0000
1525+++ Template/Cards/delphes_trigger_CMS.dat 2013-03-04 23:37:19 +0000
1526@@ -0,0 +1,20 @@
1527+#TRIGGER CARD # DO NOT REMOVE THIS IS A TAG!
1528+
1529+# list of trigger algorithms
1530+# trigger_name >> algorithm #comments
1531+Inclusive electron >> ELEC1_PT: '29'
1532+di-electron >> ELEC1_PT: '17' && ELEC2_PT: '17'
1533+Inclusive Photon >> GAMMA1_PT: '80'
1534+di-Photon >> GAMMA1_PT: '40' && GAMMA2_PT: '25'
1535+Inclusive muon >> MUON1_PT: '19'
1536+di-muon >> MUON1_PT: '7' && MUON2_PT: '7'
1537+Taujet and ETmis >> TAU1_PT: '86' && ETMIS_PT: '65'
1538+di-Taujets >> TAU1_PT: '59' && TAU2_PT: '59'
1539+Jet and ETmis >> JET1_PT: '180' && ETMIS_PT: '123'
1540+Taujet and electron >> TAU1_PT: '45' && ELEC1_PT: '19'
1541+Taujet and muon >> TAU1_PT: '40' && ELEC1_PT: '15'
1542+Inclusive b-jet >> Bjet1_PT: '237'
1543+Inclusive 1 jet >> JET1_PT: '657'
1544+Inclusive 3 jets >> JET1_PT: '247' && JET2_PT: '247' && JET3_PT: '247'
1545+Inclusive 4 jets >> JET1_PT: '113' && JET2_PT: '113' && JET3_PT: '113' && JET4_PT: '113'
1546+
1547
1548=== removed file 'Template/Cards/delphes_trigger_CMS.dat'
1549--- Template/Cards/delphes_trigger_CMS.dat 2010-10-30 03:26:37 +0000
1550+++ Template/Cards/delphes_trigger_CMS.dat 1970-01-01 00:00:00 +0000
1551@@ -1,20 +0,0 @@
1552-#TRIGGER CARD # DO NOT REMOVE THIS IS A TAG!
1553-
1554-# list of trigger algorithms
1555-# trigger_name >> algorithm #comments
1556-Inclusive electron >> ELEC1_PT: '29'
1557-di-electron >> ELEC1_PT: '17' && ELEC2_PT: '17'
1558-Inclusive Photon >> GAMMA1_PT: '80'
1559-di-Photon >> GAMMA1_PT: '40' && GAMMA2_PT: '25'
1560-Inclusive muon >> MUON1_PT: '19'
1561-di-muon >> MUON1_PT: '7' && MUON2_PT: '7'
1562-Taujet and ETmis >> TAU1_PT: '86' && ETMIS_PT: '65'
1563-di-Taujets >> TAU1_PT: '59' && TAU2_PT: '59'
1564-Jet and ETmis >> JET1_PT: '180' && ETMIS_PT: '123'
1565-Taujet and electron >> TAU1_PT: '45' && ELEC1_PT: '19'
1566-Taujet and muon >> TAU1_PT: '40' && ELEC1_PT: '15'
1567-Inclusive b-jet >> Bjet1_PT: '237'
1568-Inclusive 1 jet >> JET1_PT: '657'
1569-Inclusive 3 jets >> JET1_PT: '247' && JET2_PT: '247' && JET3_PT: '247'
1570-Inclusive 4 jets >> JET1_PT: '113' && JET2_PT: '113' && JET3_PT: '113' && JET4_PT: '113'
1571-
1572
1573=== added file 'Template/Cards/delphes_trigger_default.dat'
1574--- Template/Cards/delphes_trigger_default.dat 1970-01-01 00:00:00 +0000
1575+++ Template/Cards/delphes_trigger_default.dat 2013-03-04 23:37:19 +0000
1576@@ -0,0 +1,20 @@
1577+#TRIGGER CARD # DO NOT REMOVE THIS IS A TAG!
1578+
1579+# list of trigger algorithms
1580+# trigger_name >> algorithm #comments
1581+Inclusive electron >> ELEC1_PT: '29'
1582+di-electron >> ELEC1_PT: '17' && ELEC2_PT: '17'
1583+Inclusive Photon >> GAMMA1_PT: '80'
1584+di-Photon >> GAMMA1_PT: '40' && GAMMA2_PT: '25'
1585+Inclusive muon >> MUON1_PT: '19'
1586+di-muon >> MUON1_PT: '7' && MUON2_PT: '7'
1587+Taujet and ETmis >> TAU1_PT: '86' && ETMIS_PT: '65'
1588+di-Taujets >> TAU1_PT: '59' && TAU2_PT: '59'
1589+Jet and ETmis >> JET1_PT: '180' && ETMIS_PT: '123'
1590+Taujet and electron >> TAU1_PT: '45' && ELEC1_PT: '19'
1591+Taujet and muon >> TAU1_PT: '40' && ELEC1_PT: '15'
1592+Inclusive b-jet >> Bjet1_PT: '237'
1593+Inclusive 1 jet >> JET1_PT: '657'
1594+Inclusive 3 jets >> JET1_PT: '247' && JET2_PT: '247' && JET3_PT: '247'
1595+Inclusive 4 jets >> JET1_PT: '113' && JET2_PT: '113' && JET3_PT: '113' && JET4_PT: '113'
1596+
1597
1598=== removed file 'Template/Cards/delphes_trigger_default.dat'
1599--- Template/Cards/delphes_trigger_default.dat 2012-02-17 21:52:21 +0000
1600+++ Template/Cards/delphes_trigger_default.dat 1970-01-01 00:00:00 +0000
1601@@ -1,20 +0,0 @@
1602-#TRIGGER CARD # DO NOT REMOVE THIS IS A TAG!
1603-
1604-# list of trigger algorithms
1605-# trigger_name >> algorithm #comments
1606-Inclusive electron >> ELEC1_PT: '29'
1607-di-electron >> ELEC1_PT: '17' && ELEC2_PT: '17'
1608-Inclusive Photon >> GAMMA1_PT: '80'
1609-di-Photon >> GAMMA1_PT: '40' && GAMMA2_PT: '25'
1610-Inclusive muon >> MUON1_PT: '19'
1611-di-muon >> MUON1_PT: '7' && MUON2_PT: '7'
1612-Taujet and ETmis >> TAU1_PT: '86' && ETMIS_PT: '65'
1613-di-Taujets >> TAU1_PT: '59' && TAU2_PT: '59'
1614-Jet and ETmis >> JET1_PT: '180' && ETMIS_PT: '123'
1615-Taujet and electron >> TAU1_PT: '45' && ELEC1_PT: '19'
1616-Taujet and muon >> TAU1_PT: '40' && ELEC1_PT: '15'
1617-Inclusive b-jet >> Bjet1_PT: '237'
1618-Inclusive 1 jet >> JET1_PT: '657'
1619-Inclusive 3 jets >> JET1_PT: '247' && JET2_PT: '247' && JET3_PT: '247'
1620-Inclusive 4 jets >> JET1_PT: '113' && JET2_PT: '113' && JET3_PT: '113' && JET4_PT: '113'
1621-
1622
1623=== modified file 'Template/Source/PDF/pdf_lhapdf.f'
1624--- Template/Source/PDF/pdf_lhapdf.f 2010-10-30 03:26:37 +0000
1625+++ Template/Source/PDF/pdf_lhapdf.f 2013-03-04 23:37:19 +0000
1626@@ -9,6 +9,8 @@
1627 DOUBLE PRECISION x,q,pdf(-7:7)
1628 DOUBLE PRECISION f(-6:6)
1629 INTEGER IH,I
1630+ double precision photon
1631+ LOGICAL has_photon
1632 C
1633 C Include
1634 C
1635@@ -16,8 +18,13 @@
1636 C
1637 if(abs(ih).eq.1) then
1638 pdf(-7)=0d0
1639- pdf(7)=0d0
1640- call evolvePDF(x, q, f)
1641+ if(has_photon())then
1642+ call evolvePDFphoton(x, q, f, photon)
1643+ pdf(7)= photon
1644+ else
1645+ pdf(7) = 0d0
1646+ call evolvePDF(x, q, f)
1647+ endif
1648 do i=-6,6
1649 pdf(i)=f(i)/x
1650 enddo
1651
1652=== modified file 'Template/Source/PDF/pdg2pdf.f'
1653--- Template/Source/PDF/pdg2pdf.f 2012-11-11 08:52:35 +0000
1654+++ Template/Source/PDF/pdg2pdf.f 2013-03-04 23:37:19 +0000
1655@@ -16,11 +16,28 @@
1656 double precision Ctq3df,Ctq4Fn,Ctq5Pdf,Ctq6Pdf,Ctq5L
1657 integer mode,Irt,i,j
1658 double precision xlast(2),xmulast(2),pdflast(-7:7,2),q2max
1659+ character*7 pdlabellast(2)
1660 double precision epa_electron,epa_proton
1661- integer ipart,ireuse,iporg
1662- save xlast,xmulast,pdflast
1663- data xlast/2*0d0/
1664- data pdflast/30*0d0/
1665+ integer ipart,ireuse,iporg,ihlast(2)
1666+ save xlast,xmulast,pdflast,pdlabellast,ihlast
1667+ data xlast/2*-99d9/
1668+ data xmulast/2*-99d9/
1669+ data pdflast/30*-99d9/
1670+ data pdlabellast/2*'abcdefg'/
1671+ data ihlast/2*-99/
1672+
1673+c Make sure we have a reasonable Bjorken x. Note that even though
1674+c x=0 is not reasonable, we prefer to simply return pdg2pdf=0
1675+c instead of stopping the code, as this might accidentally happen.
1676+ if (x.eq.0d0) then
1677+ pdg2pdf=0d0
1678+ return
1679+ elseif (x.lt.0d0 .or. x.gt.1d0) then
1680+ write (*,*) 'PDF not supported for Bjorken x ', x
1681+ open(unit=26,file='../../../error',status='unknown')
1682+ write(26,*) 'Error: PDF not supported for Bjorken x ',x
1683+ stop 1
1684+ endif
1685
1686 ipart=ipdg
1687 if(iabs(ipart).eq.21) ipart=0
1688@@ -38,35 +55,53 @@
1689 ireuse = 0
1690 do i=1,2
1691 c Check if result can be reused since any of last two calls
1692- if (x.eq.xlast(i).and.xmu.eq.xmulast(i)) then
1693+ if (x.eq.xlast(i) .and. xmu.eq.xmulast(i) .and.
1694+ $ pdlabel.eq.pdlabellast(i) .and. ih.eq.ihlast(i)) then
1695 ireuse = i
1696 endif
1697 enddo
1698
1699-c If both x non-zero and not ireuse, then zero x
1700- if (ireuse.eq.0.and.xlast(1).ne.0d0.and.xlast(2).ne.0d0)then
1701+c Reuse previous result, if possible
1702+ if (ireuse.gt.0.and.pdflast(iporg,ireuse).ne.-99d9) then
1703+ pdg2pdf=pdflast(iporg,ireuse)
1704+ return
1705+ endif
1706+
1707+c Bjorken x and/or facrorization scale and/or PDF set are not
1708+c identical to the saved values: this means a new event and we
1709+c should reset everything to compute new PDF values. Also, determine
1710+c if we should fill ireuse=1 or ireuse=2.
1711+ if (ireuse.eq.0.and.xlast(1).ne.-99d9.and.xlast(2).ne.-99d9)then
1712 do i=1,2
1713- xlast(i)=0d0
1714- xmulast(i)=0d0
1715+ xlast(i)=-99d9
1716+ xmulast(i)=-99d9
1717 do j=-7,7
1718- pdflast(j,i)=0d0
1719+ pdflast(j,i)=-99d9
1720 enddo
1721+ pdlabellast(i)='abcdefg'
1722+ ihlast(i)=-99
1723 enddo
1724+c everything has been reset. Now set ireuse=1 to fill the first
1725+c arrays of saved values below
1726 ireuse=1
1727- else if(ireuse.eq.0.and.xlast(1).ne.0d0)then
1728+ else if(ireuse.eq.0.and.xlast(1).ne.-99d9)then
1729+c This is first call after everything has been reset, so the first
1730+c arrays are already filled with the saved values (hence
1731+c xlast(1).ne.-99d9). Fill the second arrays of saved values (done
1732+c below) by setting ireuse=2
1733 ireuse=2
1734 else if(ireuse.eq.0)then
1735+c Special: only used for the very first call to this function:
1736+c xlast(i) are initialized as data statements to be equal to -99d9
1737 ireuse=1
1738 endif
1739
1740-c Reuse previous result, if possible
1741- if (ireuse.gt.0.and.pdflast(iporg,ireuse).ne.0d0) then
1742- pdg2pdf=pdflast(iporg,ireuse)
1743- return
1744- endif
1745-
1746+c Give the current values to the arrays that should be
1747+c saved. 'pdflast' is filled below.
1748 xlast(ireuse)=x
1749 xmulast(ireuse)=xmu
1750+ pdlabellast(ireuse)=pdlabel
1751+ ihlast(ireuse)=ih
1752
1753 if(iabs(ipart).eq.7.and.ih.gt.1) then
1754 q2max=xmu*xmu
1755
1756=== modified file 'Template/Source/PDF/pdg2pdf_lhapdf.f'
1757--- Template/Source/PDF/pdg2pdf_lhapdf.f 2011-11-22 13:37:54 +0000
1758+++ Template/Source/PDF/pdg2pdf_lhapdf.f 2013-03-04 23:37:19 +0000
1759@@ -7,36 +7,112 @@
1760 c Arguments
1761 c
1762 DOUBLE PRECISION x,xmu
1763- INTEGER IH,ipdg,ipart
1764+ INTEGER IH,ipdg
1765 C
1766 C Include
1767 C
1768 include 'pdf.inc'
1769 C
1770- double precision Ctq3df,Ctq4Fn,Ctq5Pdf,Ctq6Pdf,Ctq5L
1771- integer mode,Irt,ihlast
1772- double precision xlast,xmulast,pdflast(-7:7)
1773- save ihlast,xlast,xmulast,pdflast
1774+ integer i,j,ihlast(2),ipart,iporg,ireuse,imemlast(2),iset,imem
1775+ double precision xlast(2),xmulast(2),pdflast(-7:7,2)
1776+ save ihlast,xlast,xmulast,pdflast,imemlast
1777+ data ihlast/2*-99/
1778+ data xlast/2*-99d9/
1779+ data xmulast/2*-99d9/
1780+ data pdflast/30*-99d9/
1781+ data imemlast/2*-99/
1782+
1783+c Make sure we have a reasonable Bjorken x. Note that even though
1784+c x=0 is not reasonable, we prefer to simply return pdg2pdf=0
1785+c instead of stopping the code, as this might accidentally happen.
1786+ if (x.eq.0d0) then
1787+ pdg2pdf=0d0
1788+ return
1789+ elseif (x.lt.0d0 .or. x.gt.1d0) then
1790+ write (*,*) 'PDF not supported for Bjorken x ', x
1791+ open(unit=26,file='../../../error',status='unknown')
1792+ write(26,*) 'Error: PDF not supported for Bjorken x ',x
1793+ stop 1
1794+ endif
1795
1796 ipart=ipdg
1797 if(ipart.eq.21) ipart=0
1798 if(iabs(ipart).eq.22) ipart=7
1799+ iporg=ipart
1800
1801 c This will be called for any PDG code, but we only support up to 7
1802 if(iabs(ipart).gt.7)then
1803- pdg2pdf=0d0
1804+ write(*,*) 'PDF not supported for pdg ',ipdg
1805+ open(unit=26,file='../../../error',status='unknown')
1806+ write(26,*) 'Error: PDF not supported for pdg ',ipdg
1807+ stop 1
1808+ endif
1809+
1810+c Determine the iset used in lhapdf
1811+ call getnset(iset)
1812+ if (iset.ne.1) then
1813+ write (*,*) 'PDF not supported for Bjorken x ', x
1814+ open(unit=26,file='../../../error',status='unknown')
1815+ write(26,*) 'Error: PDF not supported for Bjorken x ',x
1816+ stop 1
1817+ endif
1818+
1819+c Determine the member of the set (function of lhapdf)
1820+ call getnmem(iset,imem)
1821+
1822+ ireuse = 0
1823+ do i=1,2
1824+c Check if result can be reused since any of last two calls
1825+ if (x.eq.xlast(i) .and. xmu.eq.xmulast(i) .and.
1826+ $ imem.eq.imemlast(i) .and. ih.eq.ihlast(i)) then
1827+ ireuse = i
1828+ endif
1829+ enddo
1830+
1831+c Reuse previous result, if possible
1832+ if (ireuse.gt.0.and.pdflast(iporg,ireuse).ne.-99d9) then
1833+ pdg2pdf=pdflast(iporg,ireuse)
1834 return
1835 endif
1836
1837- if(ih.eq.ihlast.and.x.eq.xlast.and.xmu.eq.xmulast)then
1838- pdg2pdf=pdflast(ipart);
1839- else
1840- call pftopdglha(ih,x,xmu,pdflast)
1841- ihlast=ih
1842- xlast=x
1843- xmulast=xmu
1844- pdg2pdf=pdflast(ipart);
1845+c Bjorken x and/or facrorization scale and/or PDF set are not
1846+c identical to the saved values: this means a new event and we
1847+c should reset everything to compute new PDF values. Also, determine
1848+c if we should fill ireuse=1 or ireuse=2.
1849+ if (ireuse.eq.0.and.xlast(1).ne.-99d9.and.xlast(2).ne.-99d9)then
1850+ do i=1,2
1851+ xlast(i)=-99d9
1852+ xmulast(i)=-99d9
1853+ do j=-7,7
1854+ pdflast(j,i)=-99d9
1855+ enddo
1856+ imemlast(i)=-99
1857+ ihlast(i)=-99
1858+ enddo
1859+c everything has been reset. Now set ireuse=1 to fill the first
1860+c arrays of saved values below
1861+ ireuse=1
1862+ else if(ireuse.eq.0.and.xlast(1).ne.-99d9)then
1863+c This is first call after everything has been reset, so the first
1864+c arrays are already filled with the saved values (hence
1865+c xlast(1).ne.-99d9). Fill the second arrays of saved values (done
1866+c below) by setting ireuse=2
1867+ ireuse=2
1868+ else if(ireuse.eq.0)then
1869+c Special: only used for the very first call to this function:
1870+c xlast(i) are initialized as data statements to be equal to -99d9
1871+ ireuse=1
1872 endif
1873
1874+c Call lhapdf and give the current values to the arrays that should
1875+c be saved
1876+ call pftopdglha(ih,x,xmu,pdflast(-7,ireuse))
1877+ xlast(ireuse)=x
1878+ xmulast(ireuse)=xmu
1879+ ihlast(ireuse)=ih
1880+ imemlast(ireuse)=imem
1881+c
1882+ pdg2pdf=pdflast(ipart,ireuse);
1883+ return
1884 end
1885
1886
1887=== modified file 'Template/SubProcesses/cuts.f'
1888--- Template/SubProcesses/cuts.f 2012-11-07 06:36:14 +0000
1889+++ Template/SubProcesses/cuts.f 2013-03-04 23:37:19 +0000
1890@@ -111,6 +111,12 @@
1891 LOGICAL IS_A_NU(NEXTERNAL),IS_HEAVY(NEXTERNAL)
1892 COMMON /TO_SPECISA/IS_A_J,IS_A_A,IS_A_L,IS_A_B,IS_A_NU,IS_HEAVY,
1893 . IS_A_ONIUM
1894+C
1895+C Keep track of whether cuts already calculated for this event
1896+C
1897+ LOGICAL CUTSDONE,CUTSPASSED
1898+ COMMON/TO_CUTSDONE/CUTSDONE,CUTSPASSED
1899+ DATA CUTSDONE,CUTSPASSED/.FALSE.,.FALSE./
1900
1901 C $B$ MW_NEW_DEF $E$ !this is a tag for MadWeight
1902
1903@@ -221,7 +227,15 @@
1904 enddo
1905 enddo
1906
1907+ ENDIF ! IF FIRSTTIME
1908+
1909+ IF (CUTSDONE) THEN
1910+ PASSCUTS=CUTSPASSED
1911+ RETURN
1912 ENDIF
1913+ CUTSDONE=.TRUE.
1914+ CUTSPASSED=.FALSE.
1915+
1916 c
1917 c Make sure have reasonable 4-momenta
1918 c
1919@@ -239,6 +253,7 @@
1920 endif
1921 enddo
1922 enddo
1923+
1924 c
1925 c Limit S_hat
1926 c
1927@@ -784,6 +799,7 @@
1928 if(debug) write (*,*) ' EVENT PASSED THE CUTS '
1929 if(debug) write (*,*) '============================='
1930
1931+ CUTSPASSED=.TRUE.
1932
1933 RETURN
1934 END
1935
1936=== modified file 'Template/SubProcesses/myamp.f'
1937--- Template/SubProcesses/myamp.f 2012-11-10 07:06:45 +0000
1938+++ Template/SubProcesses/myamp.f 2013-03-04 23:37:19 +0000
1939@@ -466,7 +466,9 @@
1940 spole(j)=prmass(i,iconfig)*prmass(i,iconfig)/stot
1941 swidth(j) = prwidth(i,iconfig)*prmass(i,iconfig)/stot
1942 endif
1943- else if(iden_part(i).eq.0 .or. lbw(nbw).eq.1) then
1944+ else if((prmass(i,iconfig)+5d0*prwidth(i,iconfig)).ge.xm(i)
1945+ $ .and. iden_part(i).eq.0 .or. lbw(nbw).eq.1) then
1946+c JA 02/13 Only allow BW if xm below M+5*Gamma
1947 write(*,*) 'Setting BW',i,nbw,prmass(i,iconfig)
1948 spole(-i)=prmass(i,iconfig)*prmass(i,iconfig)/stot
1949 swidth(-i) = prwidth(i,iconfig)*prmass(i,iconfig)/stot
1950
1951=== added file 'Template/bin/internal/run_delphes3'
1952--- Template/bin/internal/run_delphes3 1970-01-01 00:00:00 +0000
1953+++ Template/bin/internal/run_delphes3 2013-03-04 23:37:19 +0000
1954@@ -0,0 +1,38 @@
1955+#!/bin/bash
1956+#
1957+# This runs Delphes 3 on the pythia_events.hep
1958+#
1959+# Usage: run_delphes3 [delphes3dir [para/serial [run_name]]]
1960+# where delphes3dir is the path to the delphes3 executable
1961+
1962+delphesdir=$1
1963+run=$2
1964+tag=$3
1965+cross=$4
1966+
1967+main=`pwd`
1968+
1969+if [ ! -e ../Cards/delphes_card.dat ]; then
1970+ echo "No delphes_card.dat found. Quitting..."
1971+ exit
1972+fi
1973+
1974+if [ ! -e $delphesdir/DelphesSTDHEP ]; then
1975+ echo "No Delphes executable found at $delphesdir/DelphesSTDHEP. Quitting..."
1976+ exit
1977+fi
1978+
1979+echo $$ >> ../myprocid
1980+
1981+# Set delphes path in delphes_card.dat
1982+
1983+$delphesdir/DelphesSTDHEP ../Cards/delphes_card.dat delphes.root pythia_events.hep
1984+$delphesdir/root2lhco delphes.root delphes_events.lhco
1985+
1986+if [ -e delphes_events.lhco ]; then
1987+# write the delphes banner
1988+ sed -e "s/^/#/g" ${run}/${run}_${tag}_banner.txt > ${run}/${tag}_delphes_events.lhco
1989+ echo "## Integrated weight (pb) : ${cross}" >> ${run}/${tag}_delphes_events.lhco
1990+ cat delphes_events.lhco >> ${run}/${tag}_delphes_events.lhco
1991+ rm -f delphes_events.lhco
1992+fi
1993
1994=== modified file 'UpdateNotes.txt'
1995--- UpdateNotes.txt 2013-01-15 18:59:13 +0000
1996+++ UpdateNotes.txt 2013-03-04 23:37:19 +0000
1997@@ -1,5 +1,51 @@
1998 Update notes for MadGraph 5 (in reverse time order)
1999
2000+1.5.8 (xx/xx/13) OM: Fix critical bug introduce in 1.5.0. ALOHA was wrongly written
2001+ HELAS routine for expression containing expression square.
2002+ (like P(-1,1)**2). None of the default model of MG5 (like sm/mssm)
2003+ have such type of expression. More information in bug report #1132996
2004+ (Thanks Gezim)
2005+ OM+JA: install Delphes now installs Delphes 3
2006+ [added command install Delphes2 to install Delphes 2]
2007+ OM: Add command in MadEvent interface: add_time_of_flight
2008+ This command modifies the lhe events file by adding the time of
2009+ flight information in the lhe events. To run this you need to do
2010+ $> ./bin/madevent
2011+ MGME> generate_events --laststep=parton -f
2012+ MGME> add_time_of_flight
2013+ MGME> pythia [if needed]
2014+ OM: Fix bug in pythia8 output for process using decay chains syntax.
2015+ See bug #1099790.
2016+ CDe+OM: Update EWdim6 model
2017+ OM: Fix a bug preventing model customized via the "customize_model"
2018+ command to use the automatic width computation.
2019+ OM: Change model restriction behavior: a value of 1 for a width is
2020+ not treated as a restriction rule.
2021+ OM: Fix incomplete restriction of the MSSM model leading to inefficient
2022+ process merging (and larger-than-necessary files) for the MSSM.
2023+ OM: Correct bug #1107603 (problem with condor cluster for submission
2024+ associated to a large number of jobs). Thanks Sanjay.
2025+ JA: Fix one part of the problem in bug #1123974: take into
2026+ account invariant mass cuts mmXX above the peak range in
2027+ s-channel resonances in the phase space integration,
2028+ to make sure such channels find events even for narrow
2029+ invariant mass cut ranges. Please note the discussion in
2030+ that bug report for other types of channels however.
2031+ JA: Fixed bug #1139303: matrix elements for identical
2032+ decay chain processes with different propagators (such as
2033+ p p > w+, w+ > e+ ve and p p > w-, w- > vm~ mu-)
2034+ are now no longer combined, to ensure that resonances are
2035+ correctly represented in event file.
2036+ OM: Support lhapdf set which contains photon (See bug #1131995).
2037+ RF+JA: Reuse last two PDF calls also for LHAPDF PDFs, clarify code
2038+ for reuse of PDFs in pdg2pdf.f and pdg2pdf_lhapdf.f
2039+ OM: Update the default delphes card to latest Delphes version. This
2040+ default card is automatically overwritten by the default Delphes
2041+ card when running "install Delphes".
2042+ JA: Make sure cuts are only checked once per event - this can save
2043+ a lot of time for multiparton event generation.
2044+ OM: Fix Bug #1142042 (crash in gridpack).
2045+
2046 1.5.7 (15/01/13) OM+JA: Fixed crash linked to model_v4 for processes containing wwww or
2047 zzww interactions. (See bug #1095603. Thanks to Tim Lu)
2048 OM: Fix a bug affecting 2>1 process when the final states particles is
2049
2050=== modified file 'aloha/aloha_lib.py'
2051--- aloha/aloha_lib.py 2012-11-16 07:00:46 +0000
2052+++ aloha/aloha_lib.py 2013-03-04 23:37:19 +0000
2053@@ -134,7 +134,7 @@
2054 argument.append(expression)
2055 if str(fct_tag)+str(argument) in self.inverted_fct:
2056 return self.inverted_fct[str(fct_tag)+str(argument)]
2057- else:
2058+ else:
2059 self.fct_expr[tag] = (fct_tag, argument)
2060 self.reduced_expr2[tag] = (fct_tag, argument)
2061 self.add_tag((tag,))
2062
2063=== modified file 'aloha/aloha_parsers.py'
2064--- aloha/aloha_parsers.py 2012-09-28 07:37:00 +0000
2065+++ aloha/aloha_parsers.py 2013-03-04 23:37:19 +0000
2066@@ -208,7 +208,11 @@
2067 def p_expression_power(self, p):
2068 'expression : expression POWER expression'
2069
2070- if p[1] in self.aloha_object:
2071+ obj = p[1]
2072+ if '(' in p[1]:
2073+ obj = p[1].split('(',1)[0]
2074+
2075+ if obj in self.aloha_object:
2076 p[0] = ''.join(p[1:])
2077 else:
2078 new = aloha_lib.KERNEL.add_function_expression('pow', eval(p[1]), eval(p[3]))
2079
2080=== modified file 'aloha/aloha_writers.py'
2081--- aloha/aloha_writers.py 2012-11-06 19:34:27 +0000
2082+++ aloha/aloha_writers.py 2013-03-04 23:37:19 +0000
2083@@ -446,6 +446,7 @@
2084 'log': 'log(dble(%s))',
2085 'asin': 'asin(dble(%s))',
2086 'acos': 'acos(dble(%s))',
2087+ '':'(%s)'
2088 }
2089
2090 if fct in self.fct_format:
2091
2092=== modified file 'madgraph/VERSION'
2093--- madgraph/VERSION 2013-01-15 18:59:13 +0000
2094+++ madgraph/VERSION 2013-03-04 23:37:19 +0000
2095@@ -1,3 +1,3 @@
2096-version = 1.5.7
2097+version = 1.5.8.beta
2098 date = 2013-01-15
2099
2100
2101=== modified file 'madgraph/core/base_objects.py'
2102--- madgraph/core/base_objects.py 2013-01-11 23:40:35 +0000
2103+++ madgraph/core/base_objects.py 2013-03-04 23:37:19 +0000
2104@@ -1772,11 +1772,13 @@
2105 self['overall_orders'] = {}
2106 # Decay chain processes associated with this process
2107 self['decay_chains'] = ProcessList()
2108+ # Legs with decay chains substituted in
2109+ self['legs_with_decays'] = LegList()
2110
2111 def filter(self, name, value):
2112 """Filter for valid process property values."""
2113
2114- if name == 'legs':
2115+ if name in ['legs', 'legs_with_decays'] :
2116 if not isinstance(value, LegList):
2117 raise self.PhysicsObjectError, \
2118 "%s is not a valid LegList object" % str(value)
2119@@ -1862,13 +1864,21 @@
2120
2121 return super(Process, self).set(name, value) # call the mother routine
2122
2123+ def get(self, name):
2124+ """Special get for legs_with_decays"""
2125+
2126+ if name == 'legs_with_decays':
2127+ self.get_legs_with_decays()
2128+
2129+ return super(Process, self).get(name) # call the mother routine
2130+
2131 def get_sorted_keys(self):
2132 """Return process property names as a nicely sorted list."""
2133
2134 return ['legs', 'orders', 'overall_orders', 'model', 'id',
2135 'required_s_channels', 'forbidden_onsh_s_channels',
2136- 'forbidden_s_channels',
2137- 'forbidden_particles', 'is_decay_chain', 'decay_chains']
2138+ 'forbidden_s_channels', 'forbidden_particles',
2139+ 'is_decay_chain', 'decay_chains', 'legs_with_decays']
2140
2141 def nice_string(self, indent=0):
2142 """Returns a nicely formated string about current process
2143@@ -1880,7 +1890,7 @@
2144 mypart = self['model'].get('particle_dict')[leg['id']]
2145 if prevleg and prevleg['state'] == False \
2146 and leg['state'] == True:
2147- # Separate initial and final legs by ">"
2148+ # Separate initial and final legs by >
2149 mystr = mystr + '> '
2150 # Add required s-channels
2151 if self['required_s_channels'] and \
2152@@ -2152,9 +2162,10 @@
2153 def get_legs_with_decays(self):
2154 """Return process with all decay chains substituted in."""
2155
2156+ if self['legs_with_decays']:
2157+ return self['legs_with_decays']
2158+
2159 legs = copy.deepcopy(self.get('legs'))
2160- if self.get('is_decay_chain'):
2161- legs.pop(0)
2162 org_decay_chains = copy.copy(self.get('decay_chains'))
2163 sorted_decay_chains = []
2164 # Sort decay chains according to leg order
2165@@ -2172,13 +2183,18 @@
2166 legs[ileg].get('id') != decay.get('legs')[0].get('id'):
2167 ileg = ileg + 1
2168 decay_legs = decay.get_legs_with_decays()
2169- legs = legs[:ileg] + decay_legs + legs[ileg+1:]
2170- ileg = ileg + len(decay_legs)
2171+ legs = legs[:ileg] + decay_legs[1:] + legs[ileg+1:]
2172+ ileg = ileg + len(decay_legs) - 1
2173+
2174+ # Replace legs with copies
2175+ legs = [copy.copy(l) for l in legs]
2176
2177 for ileg, leg in enumerate(legs):
2178 leg.set('number', ileg + 1)
2179
2180- return LegList(legs)
2181+ self['legs_with_decays'] = LegList(legs)
2182+
2183+ return self['legs_with_decays']
2184
2185 def list_for_sort(self):
2186 """Output a list that can be compared to other processes as:
2187@@ -2290,6 +2306,7 @@
2188 self['legs'] = MultiLegList()
2189 # Decay chain processes associated with this process
2190 self['decay_chains'] = ProcessDefinitionList()
2191+ if 'legs_with_decays' in self: del self['legs_with_decays']
2192
2193 def filter(self, name, value):
2194 """Filter for valid process property values."""
2195@@ -2311,7 +2328,10 @@
2196 def get_sorted_keys(self):
2197 """Return process property names as a nicely sorted list."""
2198
2199- return super(ProcessDefinition, self).get_sorted_keys()
2200+ keys = super(ProcessDefinition, self).get_sorted_keys()
2201+ keys.remove('legs_with_decays')
2202+
2203+ return keys
2204
2205 def get_minimum_WEIGHTED(self):
2206 """Retrieve the minimum starting guess for WEIGHTED order, to
2207
2208=== modified file 'madgraph/core/diagram_generation.py'
2209--- madgraph/core/diagram_generation.py 2012-12-06 05:57:21 +0000
2210+++ madgraph/core/diagram_generation.py 2013-03-04 23:37:19 +0000
2211@@ -1038,9 +1038,15 @@
2212 decay_ids.remove(l.get('id'))
2213
2214 if decay_ids:
2215- logger.warning("Warning: " + \
2216- "Decay without corresponding particle in core process found. " + \
2217- "Please check your process definition carefully.")
2218+ model = amp.get('process').get('model')
2219+ names = [model.get_particle(id).get('name') for id in decay_ids]
2220+
2221+ logger.warning(
2222+ "$RED Decay without corresponding particle in core process found.\n" + \
2223+ "Decay information for particle(s) %s is discarded.\n" % ','.join(names) + \
2224+ "Please check your process definition carefully. \n" + \
2225+ "This warning usually means that you forgot parentheses in presence of subdecay.\n" + \
2226+ "Example of correct syntax: p p > t t~, ( t > w+ b, w+ > l+ vl)")
2227
2228 # Remove unused decays from the process list
2229 for dc in reversed(self['decay_chains']):
2230
2231=== modified file 'madgraph/core/helas_objects.py'
2232--- madgraph/core/helas_objects.py 2013-01-13 10:50:01 +0000
2233+++ madgraph/core/helas_objects.py 2013-03-04 23:37:19 +0000
2234@@ -202,6 +202,7 @@
2235 # We should not get here
2236 assert(False)
2237
2238+
2239 #===============================================================================
2240 # HelasWavefunction
2241 #===============================================================================
2242@@ -2814,6 +2815,10 @@
2243 to decay matrix element.
2244 """
2245
2246+ # First need to reset all legs_with_decays
2247+ for proc in self.get('processes'):
2248+ proc.set('legs_with_decays', base_objects.LegList())
2249+
2250 # We need to keep track of how the
2251 # wavefunction numbers change
2252 replace_dict = {}
2253@@ -4085,6 +4090,8 @@
2254 matrix_elements = HelasMatrixElementList()
2255 # Store matrix element tags in me_tags, for precise comparison
2256 me_tags = []
2257+ # Store external id permutations
2258+ permutations = []
2259
2260 # List of list of ids for the initial state legs in all decay
2261 # processes
2262@@ -4217,11 +4224,7 @@
2263 # If an identical matrix element is already in the list,
2264 # then simply add this process to the list of
2265 # processes for that matrix element
2266- other_processes = matrix_elements[\
2267- me_tags.index(me_tag)].get('processes')
2268- logger.info("Combining process with %s" % \
2269- other_processes[0].nice_string().replace('Process: ', ''))
2270- other_processes.extend(matrix_element.get('processes'))
2271+ me_index = me_tags.index(me_tag)
2272 except ValueError:
2273 # Otherwise, if the matrix element has any diagrams,
2274 # add this matrix element.
2275@@ -4229,8 +4232,17 @@
2276 matrix_element.get('diagrams'):
2277 matrix_elements.append(matrix_element)
2278 me_tags.append(me_tag)
2279-
2280-
2281+ permutations.append(me_tag[-1][0].\
2282+ get_external_numbers())
2283+ else: # try
2284+ other_processes = matrix_elements[me_index].get('processes')
2285+ logger.info("Combining process with %s" % \
2286+ other_processes[0].nice_string().replace('Process: ', ''))
2287+ for proc in matrix_element.get('processes'):
2288+ other_processes.append(HelasMultiProcess.\
2289+ reorder_process(proc,
2290+ permutations[me_index],
2291+ me_tag[-1][0].get_external_numbers()))
2292
2293 return matrix_elements
2294
2295@@ -4366,9 +4378,53 @@
2296 amplitude = amplitudes.pop(0)
2297 if isinstance(amplitude, diagram_generation.DecayChainAmplitude):
2298 # Might get multiple matrix elements from this amplitude
2299- matrix_element_list = HelasDecayChainProcess(amplitude).\
2300- combine_decay_chain_processes()
2301- else:
2302+ tmp_matrix_element_list = HelasDecayChainProcess(amplitude).\
2303+ combine_decay_chain_processes()
2304+ # Use IdentifyMETag to check if matrix elements present
2305+ matrix_element_list = []
2306+ for matrix_element in tmp_matrix_element_list:
2307+ assert isinstance(matrix_element, HelasMatrixElement), \
2308+ "Not a HelasMatrixElement: %s" % matrix_element
2309+
2310+ # If the matrix element has no diagrams,
2311+ # remove this matrix element.
2312+ if not matrix_element.get('processes') or \
2313+ not matrix_element.get('diagrams'):
2314+ continue
2315+
2316+ # Create IdentifyMETag
2317+ amplitude_tag = IdentifyMETag.create_tag(\
2318+ matrix_element.get_base_amplitude())
2319+ try:
2320+ me_index = amplitude_tags.index(amplitude_tag)
2321+ except ValueError:
2322+ # Create matrix element for this amplitude
2323+ matrix_element_list.append(matrix_element)
2324+ if combine_matrix_elements:
2325+ amplitude_tags.append(amplitude_tag)
2326+ identified_matrix_elements.append(matrix_element)
2327+ permutations.append(amplitude_tag[-1][0].\
2328+ get_external_numbers())
2329+ else: # try
2330+ # Identical matrix element found
2331+ other_processes = identified_matrix_elements[me_index].\
2332+ get('processes')
2333+ # Reorder each of the processes
2334+ # Since decay chain, only reorder legs_with_decays
2335+ for proc in matrix_element.get('processes'):
2336+ other_processes.append(cls.reorder_process(\
2337+ proc,
2338+ permutations[me_index],
2339+ amplitude_tag[-1][0].get_external_numbers()))
2340+ logger.info("Combined %s with %s" % \
2341+ (matrix_element.get('processes')[0].\
2342+ nice_string().\
2343+ replace('Process: ', 'process '),
2344+ other_processes[0].nice_string().\
2345+ replace('Process: ', 'process ')))
2346+ # Go on to next matrix element
2347+ continue
2348+ else: # not DecayChainAmplitude
2349 # Create tag identifying the matrix element using
2350 # IdentifyMETag. If two amplitudes have the same tag,
2351 # they have the same matrix element
2352@@ -4391,6 +4447,8 @@
2353 identified_matrix_elements.append(me)
2354 permutations.append(amplitude_tag[-1][0].\
2355 get_external_numbers())
2356+ else:
2357+ matrix_element_list = []
2358 else:
2359 # Identical matrix element found
2360 other_processes = identified_matrix_elements[me_index].\
2361@@ -4412,39 +4470,6 @@
2362 assert isinstance(matrix_element, HelasMatrixElement), \
2363 "Not a HelasMatrixElement: %s" % matrix_element
2364
2365- # If the matrix element has no diagrams,
2366- # remove this matrix element.
2367- if not matrix_element.get('processes') or \
2368- not matrix_element.get('diagrams'):
2369- continue
2370-
2371- # Check if identical matrix element already present
2372- if matrix_element in matrix_elements:
2373- me = matrix_elements[matrix_elements.index(matrix_element)]
2374- me_procs = me.get('processes')
2375- procs = matrix_element.get('processes')
2376- if me_procs[0].get_ninitial() > 1 or \
2377- procs[0].get_initial_ids() == \
2378- me_procs[0].get_initial_ids():
2379- logger.info("Combining process %s with %s" % \
2380- (procs[0].nice_string().\
2381- replace('Process: ', ''),
2382- me_procs[0].nice_string().\
2383- replace('Process: ', '')))
2384- for proc in procs:
2385- if proc not in me_procs:
2386- me_procs.append(proc)
2387- else:
2388- raise InvalidCmd,("Duplicate process %s found."\
2389- +" Please check your processes.") % \
2390- proc.nice_string().replace('Process: ', '')
2391- # Remove this matrix element from the lists
2392- if combine_matrix_elements and amplitude_tags:
2393- amplitude_tags.pop(-1)
2394- identified_matrix_elements.pop(-1)
2395- permutations.pop(-1)
2396- continue
2397-
2398 # Otherwise, add this matrix element to list
2399 matrix_elements.append(matrix_element)
2400
2401@@ -4500,9 +4525,13 @@
2402 between org_perm and proc_perm"""
2403
2404 leglist = base_objects.LegList(\
2405- [copy.copy(process.get('legs')[i]) for i in \
2406+ [copy.copy(process.get('legs_with_decays')[i]) for i in \
2407 diagram_generation.DiagramTag.reorder_permutation(\
2408 proc_perm, org_perm)])
2409 new_proc = copy.copy(process)
2410- new_proc.set('legs', leglist)
2411+ new_proc.set('legs_with_decays', leglist)
2412+
2413+ if not new_proc.get('decay_chains'):
2414+ new_proc.set('legs', leglist)
2415+
2416 return new_proc
2417
2418=== modified file 'madgraph/interface/madevent_interface.py'
2419--- madgraph/interface/madevent_interface.py 2013-01-12 16:41:27 +0000
2420+++ madgraph/interface/madevent_interface.py 2013-03-04 23:37:19 +0000
2421@@ -382,6 +382,14 @@
2422 self.run_options_help([('-f', 'Use default for all questions.'),
2423 ('--laststep=', 'argument might be parton/pythia/pgs/delphes and indicate the last level to be run.')])
2424
2425+
2426+ def help_add_time_of_flight(self):
2427+ logger.info("syntax: add_time_of_flight [run_name|path_to_file] [--treshold=]")
2428+ logger.info('-- Add in the lhe files the information')
2429+ logger.info(' of how long it takes to a particle to decay.')
2430+ logger.info(' threshold option allows to change the minimal value required to')
2431+ logger.info(' a non zero value for the particle (default:1e-12s)')
2432+
2433 def help_calculate_decay_widths(self):
2434
2435 if self.ninitial != 1:
2436@@ -791,6 +799,43 @@
2437
2438 return run
2439
2440+ def check_add_time_of_flight(self, args):
2441+ """check that the argument are correct"""
2442+
2443+
2444+ if len(args) >2:
2445+ self.help_time_of_flight()
2446+ raise self.InvalidCmd('Too many arguments')
2447+
2448+ # check if the threshold is define. and keep it's value
2449+ if args and args[-1].startswith('--threshold='):
2450+ try:
2451+ threshold = float(args[-1].split('=')[1])
2452+ except ValueError:
2453+ raise self.InvalidCmd('threshold options require a number.')
2454+ args.remove(args[-1])
2455+ else:
2456+ threshold = 1e-12
2457+
2458+ if len(args) == 1 and os.path.exists(args[0]):
2459+ event_path = args[0]
2460+ else:
2461+ if len(args) and self.run_name != args[0]:
2462+ self.set_run_name(args.pop(0))
2463+ elif not self.run_name:
2464+ self.help_add_secondary_vertex()
2465+ raise self.InvalidCmd('Need a run_name to process')
2466+ event_path = pjoin(self.me_dir, 'Events', self.run_name, 'unweighted_events.lhe.gz')
2467+ if not os.path.exists(event_path):
2468+ event_path = event_path[:-3]
2469+ if not os.path.exists(event_path):
2470+ raise self.InvalidCmd('No unweighted events associate to this run.')
2471+
2472+
2473+
2474+ #reformat the data
2475+ args[:] = [event_path, threshold]
2476+
2477 def check_calculate_decay_widths(self, args):
2478 """check that the argument for calculate_decay_widths are valid"""
2479
2480@@ -896,11 +941,18 @@
2481 except:
2482 raise self.ConfigurationError, '''Can\'t load MG5.
2483 The variable mg5_path should not be correctly configure.'''
2484-
2485+
2486+ ufo_path = pjoin(self.me_dir,'bin','internal', 'ufomodel')
2487 # Import model
2488 if not MADEVENT:
2489 modelname = self.find_model_name()
2490- model = import_ufo.import_model(modelname, decay=True)
2491+ restrict_file = None
2492+ if os.path.exists(pjoin(ufo_path, 'restrict_default.dat')):
2493+ restrict_file = pjoin(ufo_path, 'restrict_default.dat')
2494+ model = import_ufo.import_model(modelname, decay=True,
2495+ restrict_file=restrict_file)
2496+
2497+
2498 else:
2499 model = import_ufo.import_model(pjoin(self.me_dir,'bin','internal', 'ufomodel'),
2500 decay=True)
2501@@ -1256,6 +1308,24 @@
2502 class CompleteForCmd(CheckValidForCmd):
2503 """ The Series of help routine for the MadGraphCmd"""
2504
2505+
2506+ def complete_add_time_of_flight(self, text, line, begidx, endidx):
2507+ "Complete command"
2508+
2509+ args = self.split_arg(line[0:begidx], error=False)
2510+
2511+ if len(args) == 1:
2512+ #return valid run_name
2513+ data = glob.glob(pjoin(self.me_dir, 'Events', '*','unweighted_events.lhe.gz'))
2514+ data = [n.rsplit('/',2)[1] for n in data]
2515+ return self.list_completion(text, data + ['--threshold='], line)
2516+ elif args[-1].endswith(os.path.sep):
2517+ return self.path_completion(text,
2518+ os.path.join('.',*[a for a in args \
2519+ if a.endswith(os.path.sep)]))
2520+ else:
2521+ return self.list_completion(text, ['--threshold='], line)
2522+
2523 def complete_banner_run(self, text, line, begidx, endidx):
2524 "Complete the banner run command"
2525 try:
2526@@ -1587,7 +1657,7 @@
2527 'nb_core': None,
2528 'cluster_temp_path':None}
2529
2530- helporder = ['Main Command', 'Documented commands', 'Require MG5 directory',
2531+ helporder = ['Main commands', 'Documented commands', 'Require MG5 directory',
2532 'Advanced commands']
2533
2534 ############################################################################
2535@@ -1822,6 +1892,59 @@
2536 return self.options
2537
2538 ############################################################################
2539+ def do_add_time_of_flight(self, line):
2540+
2541+ args = self.split_arg(line)
2542+ #check the validity of the arguments and reformat args
2543+ self.check_add_time_of_flight(args)
2544+
2545+ event_path, threshold = args
2546+ #gunzip the file
2547+ if event_path.endswith('.gz'):
2548+ need_zip = True
2549+ subprocess.call(['gunzip', event_path])
2550+ event_path = event_path[:-3]
2551+ else:
2552+ need_zip = False
2553+
2554+ import random
2555+ try:
2556+ import madgraph.various.lhe_parser as lhe_parser
2557+ except:
2558+ import internal.lhe_parser as lhe_parser
2559+
2560+ lhe = lhe_parser.EventFile(event_path)
2561+ output = open('%s_2vertex.lhe' % event_path, 'w')
2562+ #write the banner to the output file
2563+ output.write(lhe.banner)
2564+
2565+ # get the associate param_card
2566+ begin_param = lhe.banner.find('<slha>')
2567+ end_param = lhe.banner.find('</slha>')
2568+ param_card = lhe.banner[begin_param+6:end_param].split('\n')
2569+ param_card = check_param_card.ParamCard(param_card)
2570+
2571+ cst = 6.58211915e-25
2572+ # Loop over all events
2573+ for event in lhe:
2574+ for particle in event:
2575+ id = particle.pid
2576+ width = param_card['decay'].get((abs(id),)).value
2577+ if width:
2578+ vtim = random.expovariate(width/cst)
2579+ if vtim > threshold:
2580+ particle.vtim = vtim
2581+ #write this modify event
2582+ output.write(str(event))
2583+ output.write('</LesHouchesEvents>\n')
2584+ output.close()
2585+
2586+ files.mv('%s_2vertex.lhe' % event_path, event_path)
2587+
2588+ if need_zip:
2589+ subprocess.call(['gzip', event_path])
2590+
2591+ ############################################################################
2592 def do_banner_run(self, line):
2593 """Make a run from the banner file"""
2594
2595@@ -2685,7 +2808,7 @@
2596 self.ask_edit_cards(['param'], [], plot=False)
2597
2598 model = args['model']
2599-
2600+
2601 data = model.set_parameters_and_couplings(pjoin(self.me_dir,'Cards',
2602 'param_card.dat'))
2603
2604@@ -3353,6 +3476,9 @@
2605 def do_delphes(self, line):
2606 """ run delphes and make associate root file/plot """
2607
2608+
2609+
2610+
2611 args = self.split_arg(line)
2612 # Check argument's validity
2613 if '--no_default' in args:
2614@@ -3362,6 +3488,15 @@
2615 no_default = False
2616 self.check_delphes(args)
2617 self.update_status('prepare delphes run', level=None)
2618+
2619+ delphes_dir = self.options['delphes_path']
2620+ if os.path.exists(pjoin(delphes_dir, 'data')):
2621+ delphes3 = False
2622+ prog = '../bin/internal/run_delphes'
2623+ else:
2624+ delphes3 = True
2625+ prog = '../bin/internal/run_delphes3'
2626+
2627
2628 # Check that the delphes_card exists. If not copy the default and
2629 # ask for edition of the card.
2630@@ -3373,36 +3508,38 @@
2631 files.cp(pjoin(self.me_dir, 'Cards', 'delphes_card_default.dat'),
2632 pjoin(self.me_dir, 'Cards', 'delphes_card.dat'))
2633 logger.info('No delphes card found. Take the default one.')
2634- if not os.path.exists(pjoin(self.me_dir, 'Cards', 'delphes_trigger.dat')):
2635+ if not delphes3 and not os.path.exists(pjoin(self.me_dir, 'Cards', 'delphes_trigger.dat')):
2636 files.cp(pjoin(self.me_dir, 'Cards', 'delphes_trigger_default.dat'),
2637 pjoin(self.me_dir, 'Cards', 'delphes_trigger.dat'))
2638 if not (no_default or self.force):
2639- self.ask_edit_cards(['delphes', 'trigger'], args)
2640-
2641+ if delphes3:
2642+ self.ask_edit_cards(['delphes'], args)
2643+ else:
2644+ self.ask_edit_cards(['delphes', 'trigger'], args)
2645+
2646 self.update_status('Running Delphes', level=None)
2647 # Wait that the gunzip of the files is finished (if any)
2648 if hasattr(self, 'control_thread') and self.control_thread[0]:
2649 self.monitor(mode=2)
2650
2651
2652-
2653- delphes_dir = self.options['delphes_path']
2654 tag = self.run_tag
2655 self.banner.add(pjoin(self.me_dir, 'Cards','delphes_card.dat'))
2656- self.banner.add(pjoin(self.me_dir, 'Cards','delphes_trigger.dat'))
2657+ if not delphes3:
2658+ self.banner.add(pjoin(self.me_dir, 'Cards','delphes_trigger.dat'))
2659 self.banner.write(pjoin(self.me_dir, 'Events', self.run_name, '%s_%s_banner.txt' % (self.run_name, tag)))
2660
2661 cross = self.results[self.run_name].get_current_info()['cross']
2662
2663 if self.cluster_mode == 1:
2664 delphes_log = pjoin(self.me_dir, 'Events', self.run_name, "%s_delphes.log" % tag)
2665- self.cluster.launch_and_wait('../bin/internal/run_delphes',
2666+ self.cluster.launch_and_wait(prog,
2667 argument= [delphes_dir, self.run_name, tag, str(cross)],
2668 stdout=delphes_log, stderr=subprocess.STDOUT,
2669 cwd=pjoin(self.me_dir,'Events'))
2670 else:
2671 delphes_log = open(pjoin(self.me_dir, 'Events', self.run_name, "%s_delphes.log" % tag),'w')
2672- misc.call(['../bin/internal/run_delphes', delphes_dir,
2673+ misc.call([prog, delphes_dir,
2674 self.run_name, tag, str(cross)],
2675 stdout= delphes_log, stderr=subprocess.STDOUT,
2676 cwd=pjoin(self.me_dir,'Events'))
2677@@ -3588,7 +3725,7 @@
2678 logger.info(error)
2679 if not self.force:
2680 ans = self.ask('Cluster Error detected. Do you want to clean the queue?',
2681- default = 'y', answers=['y','n'])
2682+ default = 'y', choices=['y','n'])
2683 else:
2684 ans = 'y'
2685 if ans:
2686@@ -3999,11 +4136,12 @@
2687 pjoin(self.me_dir,'Events','xsecs.tree'))
2688
2689 # Generate the matching plots
2690+ devnull = open(os.devnull, 'w')
2691 misc.call([self.dirbin+'/create_matching_plots.sh',
2692 self.run_name, tag, madir],
2693- stdout = os.open(os.devnull, os.O_RDWR),
2694+ stdout = devnull,
2695 cwd=pjoin(self.me_dir,'Events'))
2696-
2697+ devnull.close()
2698 #Clean output
2699 misc.call(['gzip','-f','events.tree'],
2700 cwd=pjoin(self.me_dir,'Events'))
2701@@ -4162,10 +4300,14 @@
2702 cards.append('pgs_card.dat')
2703 elif mode == 'delphes':
2704 self.add_card_to_run('delphes')
2705- self.add_card_to_run('trigger')
2706+ delphes3 = True
2707+ if os.path.exists(pjoin(self.options['delphes_path'], 'data')):
2708+ delphes3 = False
2709+ self.add_card_to_run('trigger')
2710 cards.append('delphes_card.dat')
2711
2712 if self.force:
2713+ self.check_param_card(pjoin(self.me_dir,'Cards','param_card.dat' ))
2714 return
2715
2716 def get_question(mode):
2717@@ -4185,11 +4327,12 @@
2718 possible_answer.append('pgs')
2719 elif mode == 'delphes':
2720 question += ' 5 / delphes : delphes_card.dat\n'
2721- question += ' 6 / trigger : delphes_trigger.dat\n'
2722 possible_answer.append(5)
2723 possible_answer.append('delphes')
2724- possible_answer.append(6)
2725- possible_answer.append('trigger')
2726+ if not delphes3:
2727+ question += ' 6 / trigger : delphes_trigger.dat\n'
2728+ possible_answer.append(6)
2729+ possible_answer.append('trigger')
2730 if self.options['madanalysis_path']:
2731 question += ' 9 / plot : plot_card.dat\n'
2732 possible_answer.append(9)
2733@@ -4263,7 +4406,7 @@
2734 1 / pythia : Pythia
2735 2 / pgs : Pythia + PGS\n"""
2736 if '3' in available_mode:
2737- question += """ 3 / delphes : Pythia + Delphes.\n"""
2738+ question += """ 3 / delphes : Pythia + Delphes.\n"""
2739
2740 if not self.force:
2741 if not mode:
2742@@ -4295,7 +4438,11 @@
2743 cards.append('pgs_card.dat')
2744 if mode == 'delphes':
2745 self.add_card_to_run('delphes')
2746- self.add_card_to_run('trigger')
2747+ delphes3 = True
2748+ if os.path.exists(pjoin(self.options['delphes_path'], 'data')):
2749+ delphes3 = False
2750+ self.add_card_to_run('trigger')
2751+
2752 cards.append('delphes_card.dat')
2753
2754 if self.force:
2755@@ -4314,13 +4461,15 @@
2756 card[2] = 'pgs'
2757 if mode == 'delphes':
2758 question += ' 2 / delphes : delphes_card.dat\n'
2759- question += ' 3 / trigger : delphes_trigger.dat\n'
2760 possible_answer.append(2)
2761 possible_answer.append('delphes')
2762- possible_answer.append(3)
2763- possible_answer.append('trigger')
2764 card[2] = 'delphes'
2765- card[3] = 'trigger'
2766+ if not delphes3:
2767+ question += ' 3 / trigger : delphes_trigger.dat\n'
2768+ possible_answer.append(3)
2769+ possible_answer.append('trigger')
2770+ card[3] = 'trigger'
2771+
2772 if self.options['madanalysis_path']:
2773 question += ' 9 / plot : plot_card.dat\n'
2774 possible_answer.append(9)
2775@@ -4458,10 +4607,12 @@
2776 """
2777
2778 text = open(path).read()
2779- text = re.findall('(<MGVersion>|CEN_max_tracker|#TRIGGER CARD|parameter set name|muon eta coverage|MSTP|MSTU|Begin Minpts|gridpack|ebeam1|BLOCK|DECAY)', text, re.I)
2780+ text = re.findall('(<MGVersion>|CEN_max_tracker|ParticlePropagator|#TRIGGER CARD|parameter set name|muon eta coverage|MSTP|MSTU|Begin Minpts|gridpack|ebeam1|BLOCK|DECAY)', text, re.I)
2781 text = [t.lower() for t in text]
2782 if '<mgversion>' in text:
2783 return 'banner'
2784+ elif 'particlepropagator' in text:
2785+ return 'delphes_card.dat'
2786 elif 'cen_max_tracker' in text:
2787 return 'delphes_card.dat'
2788 elif '#trigger card' in text:
2789@@ -4653,7 +4804,7 @@
2790 self.total_jobs = 0
2791 subproc = [P for P in os.listdir(pjoin(self.me_dir,'SubProcesses')) if
2792 P.startswith('P') and os.path.isdir(pjoin(self.me_dir,'SubProcesses', P))]
2793- devnull = os.open(os.devnull, os.O_RDWR)
2794+ devnull = open(os.devnull, 'w')
2795 for nb_proc,subdir in enumerate(subproc):
2796 subdir = subdir.strip()
2797 Pdir = pjoin(self.me_dir, 'SubProcesses',subdir)
2798
2799=== modified file 'madgraph/interface/madgraph_interface.py'
2800--- madgraph/interface/madgraph_interface.py 2013-01-13 10:35:41 +0000
2801+++ madgraph/interface/madgraph_interface.py 2013-03-04 23:37:19 +0000
2802@@ -1763,7 +1763,7 @@
2803 _check_opts = ['full', 'permutation', 'gauge', 'lorentz_invariance']
2804 _import_formats = ['model_v4', 'model', 'proc_v4', 'command', 'banner']
2805 _install_opts = ['pythia-pgs', 'Delphes', 'MadAnalysis', 'ExRootAnalysis',
2806- 'update']
2807+ 'update', 'Delphes2']
2808 _v4_export_formats = ['madevent', 'standalone', 'matrix']
2809 _export_formats = _v4_export_formats + ['standalone_cpp', 'pythia8', 'aloha']
2810 _set_options = ['group_subprocesses',
2811@@ -3053,9 +3053,12 @@
2812 split = line.split()
2813 path[split[0]] = split[1]
2814
2815- name = {'td_mac': 'td', 'td_linux':'td', 'Delphes':'Delphes',
2816+ if args[0] == 'Delphes':
2817+ args[0] = 'Delphes3'
2818+
2819+ name = {'td_mac': 'td', 'td_linux':'td', 'Delphes3':'Delphes',
2820 'pythia-pgs':'pythia-pgs', 'ExRootAnalysis': 'ExRootAnalysis',
2821- 'MadAnalysis':'MadAnalysis'}
2822+ 'MadAnalysis':'MadAnalysis', 'Delphes2': 'Delphes'}
2823 name = name[args[0]]
2824
2825 try:
2826@@ -3075,6 +3078,7 @@
2827 if returncode:
2828 raise MadGraph5Error, 'Fail to download correctly the File. Stop'
2829
2830+
2831 # Check that the directory has the correct name
2832 if not os.path.exists(pjoin(MG5DIR, name)):
2833 created_name = [n for n in os.listdir(MG5DIR) if n.startswith(name)
2834@@ -3160,6 +3164,16 @@
2835 if sys.platform == "darwin":
2836 logger.warning('''You can download this program at the following link:
2837 http://www.macupdate.com/app/mac/9980/gpl-ghostscript''')
2838+
2839+ if args[0] == 'Delphes2':
2840+ data = open(pjoin(MG5DIR, 'Delphes','data','DetectorCard.dat')).read()
2841+ data = data.replace('data/', 'DELPHESDIR/data/')
2842+ out = open(pjoin(MG5DIR, 'Template', 'Cards', 'delphes_card_default.dat'), 'w')
2843+ out.write(data)
2844+ if args[0] == 'Delphes3':
2845+ files.cp(pjoin(MG5DIR, 'Delphes','examples','delphes_card_CMS.tcl'),
2846+ pjoin(MG5DIR,'Template', 'Cards', 'delphes_card_default.dat'))
2847+
2848
2849 def install_update(self, args, wget):
2850 """ check if the current version of mg5 is up-to-date.
2851@@ -3647,7 +3661,12 @@
2852 logger.info('Loading the resulting model')
2853 # Applying the restriction
2854 self._curr_model = import_ufo.RestrictModel(self._curr_model)
2855- self._curr_model.restrict_model(param_card)
2856+ model_name = self._curr_model.get('name')
2857+ if model_name == 'mssm':
2858+ keep_external=True
2859+ else:
2860+ keep_external=False
2861+ self._curr_model.restrict_model(param_card,keep_external=keep_external)
2862
2863 if args:
2864 name = args[0].split('=',1)[1]
2865
2866=== modified file 'madgraph/iolibs/export_cpp.py'
2867--- madgraph/iolibs/export_cpp.py 2012-08-02 16:39:09 +0000
2868+++ madgraph/iolibs/export_cpp.py 2013-03-04 23:37:19 +0000
2869@@ -1291,12 +1291,22 @@
2870 final_id_list = []
2871 final_mirror_id_list = []
2872 for (i, me) in beam_processes:
2873- final_id_list.extend([tuple([l.get('id') for l in \
2874- proc.get('legs') if l.get('state')]) \
2875- for proc in me.get('processes') \
2876+ valid_proc = [proc for proc in me.get('processes') \
2877 if beam_parts == \
2878 (proc.get('legs')[0].get('id'),
2879- proc.get('legs')[1].get('id'))])
2880+ proc.get('legs')[1].get('id'))]
2881+ for proc in valid_proc:
2882+ # decaying id
2883+ decay_id = [d.get('legs')[0].get('id') for d in proc.get('decay_chains')]
2884+ curr_final_id = [l.get('id') for l in proc.get('legs')
2885+ if l.get('state') and l.get('id') not in decay_id]
2886+ # extend with the decay final state
2887+ curr_final_id += [l.get('id') for dec in \
2888+ proc.get('decay_chains') for l in \
2889+ dec.get('legs') if l.get('state')]
2890+ final_id_list.append(tuple(curr_final_id))
2891+
2892+
2893 for (i, me) in beam_mirror_processes:
2894 final_mirror_id_list.extend([tuple([l.get('id') for l in \
2895 proc.get('legs') if l.get('state')]) \
2896@@ -1390,12 +1400,24 @@
2897
2898
2899 for ime, me in enumerate(self.matrix_elements):
2900-
2901+ id_list = []
2902+ for proc in me.get('processes'):
2903+ # decaying id
2904+ decay_id = [d.get('legs')[0].get('id') for d in proc.get('decay_chains')]
2905+ curr_id = [l.get('id') for l in proc.get('legs')
2906+ if l.get('state') and l.get('id') not in decay_id]
2907+ # extend with the decay final state
2908+ curr_id += [l.get('id') for dec in proc.get('decay_chains')
2909+ for l in dec.get('legs') if l.get('state')]
2910+ curr_id = [l.get('id') for l in \
2911+ proc.get('legs') if not l.get('state')] + curr_id
2912+ id_list.append(tuple(curr_id))
2913+
2914 res_lines.append("if(%s){" % \
2915 "||".join(["&&".join(["id%d == %d" % \
2916- (i+1, l.get('id')) for (i, l) in \
2917- enumerate(p.get('legs'))])\
2918- for p in me.get('processes')]))
2919+ (i+1, id) for (i, id) in \
2920+ enumerate(p)])\
2921+ for p in id_list]))
2922 if ime > 0:
2923 res_lines[-1] = "else " + res_lines[-1]
2924
2925
2926=== modified file 'madgraph/iolibs/export_v4.py'
2927--- madgraph/iolibs/export_v4.py 2012-11-07 06:36:14 +0000
2928+++ madgraph/iolibs/export_v4.py 2013-03-04 23:37:19 +0000
2929@@ -1130,6 +1130,8 @@
2930
2931 #madevent file
2932 cp(_file_path+'/__init__.py', self.dir_path+'/bin/internal/__init__.py')
2933+ cp(_file_path+'/various/lhe_parser.py',
2934+ self.dir_path+'/bin/internal/lhe_parser.py')
2935 cp(_file_path+'/various/gen_crossxhtml.py',
2936 self.dir_path+'/bin/internal/gen_crossxhtml.py')
2937 cp(_file_path+'/various/banner.py',
2938@@ -1666,10 +1668,12 @@
2939 replace_dict['define_subdiag_lines'] = \
2940 """\nINTEGER SUBDIAG(MAXSPROC),IB(2)
2941 COMMON/TO_SUB_DIAG/SUBDIAG,IB"""
2942+ replace_dict['cutsdone'] = ""
2943 else:
2944 replace_dict['passcuts_begin'] = "IF (PASSCUTS(PP)) THEN"
2945 replace_dict['passcuts_end'] = "ENDIF"
2946 replace_dict['define_subdiag_lines'] = ""
2947+ replace_dict['cutsdone'] = " cutsdone=.false."
2948
2949 file = open(pjoin(_file_path, \
2950 'iolibs/template_files/auto_dsig_v4.inc')).read()
2951@@ -2294,9 +2298,9 @@
2952 if me.get('has_mirror_process'):
2953 mirror_procs = [copy.copy(p) for p in me.get('processes')]
2954 for proc in mirror_procs:
2955- legs = copy.copy(proc.get('legs'))
2956+ legs = copy.copy(proc.get('legs_with_decays'))
2957 legs.insert(0, legs.pop(1))
2958- proc.set("legs", legs)
2959+ proc.set("legs_with_decays", legs)
2960 lines.append("mirror %s" % ",".join(p.base_string() for p in \
2961 mirror_procs))
2962 else:
2963@@ -2849,6 +2853,8 @@
2964 for key in keys:
2965 for param in self.model['parameters'][key]:
2966 lower_name = param.name.lower()
2967+ if not lower_name:
2968+ continue
2969 try:
2970 lower_dict[lower_name].append(param)
2971 except KeyError:
2972@@ -2900,18 +2906,20 @@
2973 keys = self.model['parameters'].keys()
2974 keys.sort(key=len)
2975 for key in keys:
2976+ to_add = [o for o in self.model['parameters'][key] if o.name]
2977+
2978 if key == ('external',):
2979- self.params_ext += self.model['parameters'][key]
2980+ self.params_ext += to_add
2981 elif 'aS' in key:
2982- self.params_dep += self.model['parameters'][key]
2983+ self.params_dep += to_add
2984 else:
2985- self.params_indep += self.model['parameters'][key]
2986+ self.params_indep += to_add
2987 # same for couplings
2988 keys = self.model['couplings'].keys()
2989 keys.sort(key=len)
2990 for key, coup_list in self.model['couplings'].items():
2991 if 'aS' in key:
2992- self.coups_dep += [c for c in coup_list if
2993+ self.coups_dep += [c for c in coup_list if
2994 (not wanted_couplings or c.name in \
2995 wanted_couplings)]
2996 else:
2997@@ -3294,6 +3302,8 @@
2998 colum = [parameter.lhablock.lower()] + \
2999 [str(value) for value in parameter.lhacode] + \
3000 [parameter.name]
3001+ if not parameter.name:
3002+ return ''
3003 return ' '.join(colum)+'\n'
3004
3005 fsock = self.open('ident_card.dat')
3006
3007=== modified file 'madgraph/iolibs/template_files/auto_dsig_v4.inc'
3008--- madgraph/iolibs/template_files/auto_dsig_v4.inc 2012-12-12 03:55:41 +0000
3009+++ madgraph/iolibs/template_files/auto_dsig_v4.inc 2013-03-04 23:37:19 +0000
3010@@ -57,6 +57,9 @@
3011 common/to_configs/mincfig, maxcfig
3012 INTEGER MAPCONFIG(0:LMAXCONFIGS), ICONFIG
3013 COMMON/TO_MCONFIGS/MAPCONFIG, ICONFIG
3014+C Keep track of whether cuts already calculated for this event
3015+ LOGICAL cutsdone,cutspassed
3016+ COMMON/TO_CUTSDONE/cutsdone,cutspassed
3017 %(define_subdiag_lines)s
3018 include 'coupl.inc'
3019 include 'run.inc'
3020@@ -68,7 +71,7 @@
3021 C BEGIN CODE
3022 C ----------
3023 DSIG%(proc_id)s=0D0
3024-
3025+ %(cutsdone)s
3026 IF(IMODE.EQ.1)THEN
3027 C Set up process information from file symfact
3028 LUN=NEXTUNOPEN()
3029
3030=== modified file 'madgraph/iolibs/template_files/super_auto_dsig_group_v4.inc'
3031--- madgraph/iolibs/template_files/super_auto_dsig_group_v4.inc 2012-09-06 10:17:42 +0000
3032+++ madgraph/iolibs/template_files/super_auto_dsig_group_v4.inc 2013-03-04 23:37:19 +0000
3033@@ -77,11 +77,16 @@
3034 DOUBLE PRECISION CM_RAP
3035 LOGICAL SET_CM_RAP
3036 COMMON/TO_CM_RAP/SET_CM_RAP,CM_RAP
3037+C Keep track of whether cuts already calculated for this event
3038+ LOGICAL CUTSDONE,CUTSPASSED
3039+ COMMON/TO_CUTSDONE/CUTSDONE,CUTSPASSED
3040 C ----------
3041 C BEGIN CODE
3042 C ----------
3043 DSIG=0D0
3044
3045+ CUTSDONE=.FALSE.
3046+
3047 IF(IMODE.EQ.1)THEN
3048 C Set up process information from file symfact
3049 LUN=NEXTUNOPEN()
3050
3051=== modified file 'madgraph/various/cluster.py'
3052--- madgraph/various/cluster.py 2013-01-10 16:18:49 +0000
3053+++ madgraph/various/cluster.py 2013-03-04 23:37:19 +0000
3054@@ -362,23 +362,30 @@
3055 if not self.submitted_ids:
3056 return 0, 0, 0, 0
3057
3058- cmd = "condor_q " + ' '.join(self.submitted_ids) + " -format \'%-2s \\n\' \'ifThenElse(JobStatus==0,\"U\",ifThenElse(JobStatus==1,\"I\",ifThenElse(JobStatus==2,\"R\",ifThenElse(JobStatus==3,\"X\",ifThenElse(JobStatus==4,\"C\",ifThenElse(JobStatus==5,\"H\",ifThenElse(JobStatus==6,\"E\",string(JobStatus))))))))\'"
3059- status = misc.Popen([cmd], shell=True, stdout=subprocess.PIPE,
3060- stderr=subprocess.PIPE)
3061- error = status.stderr.read()
3062- if status.returncode or error:
3063- raise ClusterManagmentError, 'condor_q returns error: %s' % error
3064-
3065-
3066- idle, run, fail = 0, 0, 0
3067- for line in status.stdout:
3068- status = line.strip()
3069- if status in ['I','U']:
3070- idle += 1
3071- elif status == 'R':
3072- run += 1
3073- elif status != 'C':
3074- fail += 1
3075+ packet = 15000
3076+ for i in range(1+(len(self.submitted_ids)-1)//packet):
3077+ start = i * packet
3078+ stop = (i+1) * packet
3079+ cmd = "condor_q " + ' '.join(self.submitted_ids[start:stop]) + " -format \'%-2s \\n\' \'ifThenElse(JobStatus==0,\"U\",ifThenElse(JobStatus==1,\"I\",ifThenElse(JobStatus==2,\"R\",ifThenElse(JobStatus==3,\"X\",ifThenElse(JobStatus==4,\"C\",ifThenElse(JobStatus==5,\"H\",ifThenElse(JobStatus==6,\"E\",string(JobStatus))))))))\'"
3080+
3081+
3082+
3083+ status = misc.Popen([cmd], shell=True, stdout=subprocess.PIPE,
3084+ stderr=subprocess.PIPE)
3085+ error = status.stderr.read()
3086+ if status.returncode or error:
3087+ raise ClusterManagmentError, 'condor_q returns error: %s' % error
3088+
3089+
3090+ idle, run, fail = 0, 0, 0
3091+ for line in status.stdout:
3092+ status = line.strip()
3093+ if status in ['I','U']:
3094+ idle += 1
3095+ elif status == 'R':
3096+ run += 1
3097+ elif status != 'C':
3098+ fail += 1
3099
3100 return idle, run, self.submitted - (idle+run+fail), fail
3101
3102
3103=== added file 'madgraph/various/lhe_parser.py'
3104--- madgraph/various/lhe_parser.py 1970-01-01 00:00:00 +0000
3105+++ madgraph/various/lhe_parser.py 2013-03-04 23:37:19 +0000
3106@@ -0,0 +1,246 @@
3107+import re
3108+
3109+class Particle(object):
3110+ """ """
3111+ pattern=re.compile(r'''^\s*
3112+ (?P<pid>-?\d+)\s+ #PID
3113+ (?P<status>-?\d+)\s+ #status (1 for output particle)
3114+ (?P<mother1>-?\d+)\s+ #mother
3115+ (?P<mother2>-?\d+)\s+ #mother
3116+ (?P<color1>[+-e.\d]*)\s+ #color1
3117+ (?P<color2>[+-e.\d]*)\s+ #color2
3118+ (?P<px>[+-e.\d]*)\s+ #px
3119+ (?P<py>[+-e.\d]*)\s+ #py
3120+ (?P<pz>[+-e.\d]*)\s+ #pz
3121+ (?P<E>[+-e.\d]*)\s+ #E
3122+ (?P<mass>[+-e.\d]*)\s+ #mass
3123+ (?P<vtim>[+-e.\d]*)\s+ #displace vertex
3124+ (?P<helicity>[+-e.\d]*)\s* #helicity
3125+ ($|(?P<comment>\#[\d|D]*)) #comment/end of string
3126+ ''',66) #verbose+ignore case
3127+
3128+
3129+
3130+ def __init__(self, line=None, event=None):
3131+ """ """
3132+
3133+ self.event = event
3134+ self.event_id = len(event) #not yet in the event
3135+ # LHE information
3136+ self.pid = 0
3137+ self.status = 0
3138+ self.mother1 = None
3139+ self.mother2 = None
3140+ self.color1 = 0
3141+ self.color2 = None
3142+ self.px = 0
3143+ self.py = 0
3144+ self.pz = 0
3145+ self.E = 0
3146+ self.mass = 0
3147+ self.vtim = 0
3148+ self.helicity = 9
3149+ self.comment = ''
3150+
3151+ if line:
3152+ self.parse(line)
3153+
3154+ def parse(self, line):
3155+ """parse the line"""
3156+
3157+ obj = self.pattern.search(line)
3158+ if not obj:
3159+ raise Exception, 'the line\n%s\n is not a valid format for LHE particle' % line
3160+ for key, value in obj.groupdict().items():
3161+ if key != 'comment':
3162+ setattr(self, key, float(value))
3163+ else:
3164+ self.comment = value
3165+ # assign the mother:
3166+ if self.mother1:
3167+ try:
3168+ self.mother1 = self.event[int(self.mother1) -1]
3169+ except KeyError:
3170+ raise Exception, 'Wrong Events format: a daughter appears before it\'s mother'
3171+ if self.mother2:
3172+ try:
3173+ self.mother2 = self.event[int(self.mother2) -1]
3174+ except KeyError:
3175+ raise Exception, 'Wrong Events format: a daughter appears before it\'s mother'
3176+
3177+
3178+
3179+
3180+ def __str__(self):
3181+ """string representing the particles"""
3182+ return " %8d %2d %4d %4d %4d %4d %+13.7e %+13.7e %+13.7e %14.8e %14.8e %10.4e %10.4e" \
3183+ % (self.pid,
3184+ self.status,
3185+ self.mother1.event_id+1 if self.mother1 else 0,
3186+ self.mother2.event_id+1 if self.mother2 else 0,
3187+ self.color1,
3188+ self.color2,
3189+ self.px,
3190+ self.py,
3191+ self.pz,
3192+ self.E,
3193+ self.mass,
3194+ self.vtim,
3195+ self.helicity)
3196+
3197+ def __eq__(self, other):
3198+
3199+ if self.pid == other.pid and \
3200+ self.status == other.status and \
3201+ self.mother1 == other.mother1 and \
3202+ self.mother2 == other.mother2 and \
3203+ self.color1 == other.color1 and \
3204+ self.color2 == other.color2 and \
3205+ self.px == other.px and \
3206+ self.py == other.py and \
3207+ self.pz == other.pz and \
3208+ self.E == other.E and \
3209+ self.mass == other.mass and \
3210+ self.vtim == other.vtim and \
3211+ self.helicity == other.helicity:
3212+ return True
3213+ return False
3214+
3215+
3216+
3217+
3218+ def __repr__(self):
3219+ return 'Particle("%s", event=%s)' % (str(self), self.event)
3220+
3221+class EventFile(file):
3222+ """ """
3223+
3224+ def __init__(self, path, mode='r', *args, **opt):
3225+ """open file and read the banner [if in read mode]"""
3226+
3227+ file.__init__(self, path, mode, *args, **opt)
3228+ self.banner = ''
3229+ if mode == 'r':
3230+ line = ''
3231+ while '</init>' not in line.lower():
3232+ line = file.next(self)
3233+ self.banner += line
3234+
3235+
3236+ def next(self):
3237+ """get next event"""
3238+ text = ''
3239+ line = ''
3240+ mode = 0
3241+ while '</event>' not in line:
3242+ line = file.next(self).lower()
3243+ if '<event>' in line:
3244+ mode = 1
3245+ if mode:
3246+ text += line
3247+ return Event(text)
3248+
3249+
3250+class Event(list):
3251+ """Class storing a single event information (list of particles + global information)"""
3252+
3253+ def __init__(self, text=None):
3254+ """The initialization of an empty Event (or one associate to a text file)"""
3255+ list.__init__(self)
3256+
3257+ # First line information
3258+ self.nexternal = 0
3259+ self.ievent = 0
3260+ self.wgt = 0
3261+ self.aqcd = 0
3262+ self.scale = 0
3263+ self.aqed = 0
3264+ self.aqcd = 0
3265+ # Weight information
3266+ self.rwgt = ''
3267+ self.comment = ''
3268+
3269+ if text:
3270+ self.parse(text)
3271+
3272+ def parse(self, text):
3273+ """Take the input file and create the structured information"""
3274+
3275+ text = re.sub(r'</?event>', '', text) # remove pointless tag
3276+ status = 'first'
3277+ for line in text.split('\n'):
3278+ line = line.strip()
3279+ if not line:
3280+ continue
3281+ if line.startswith('#'):
3282+ self.comment += '%s\n' % line
3283+ continue
3284+ if 'first' == status:
3285+ self.assign_scale_line(line)
3286+ status = 'part'
3287+ continue
3288+
3289+ if '<' in line:
3290+ status = 'rwgt'
3291+
3292+ if 'part' == status:
3293+ self.append(Particle(line, event=self))
3294+ else:
3295+ self.rwgt += '%s\n' % line
3296+
3297+ def assign_scale_line(self, line):
3298+ """read the line corresponding to global event line
3299+ format of the line is:
3300+ Nexternal IEVENT WEIGHT SCALE AEW AS
3301+ """
3302+ inputs = line.split()
3303+ assert len(inputs) == 6
3304+ self.nexternal=int(inputs[0])
3305+ self.ievent=int(inputs[1])
3306+ self.wgt=float(inputs[2])
3307+ self.scale=float(inputs[3])
3308+ self.aqed=float(inputs[4])
3309+ self.aqcd=float(inputs[5])
3310+
3311+
3312+
3313+ def __str__(self):
3314+ """return a correctly formatted LHE event"""
3315+
3316+ out="""<event>
3317+%(scale)s
3318+%(particles)s
3319+%(comments)s%(reweight)s</event>
3320+"""
3321+
3322+ scale_str = "%2d %6d %+13.7e %14.8e %14.8e %14.8e" % \
3323+ (self.nexternal,self.ievent,self.wgt,self.scale,self.aqed,self.aqcd)
3324+
3325+ return out % {'scale': scale_str,
3326+ 'particles': '\n'.join([str(p) for p in self]),
3327+ 'reweight': self.rwgt,
3328+ 'comments': self.comment}
3329+
3330+
3331+
3332+
3333+
3334+if '__main__' == __name__:
3335+ lhe = EventFile('unweighted_events.lhe')
3336+ output = open('output_events.lhe', 'w')
3337+ #write the banner to the output file
3338+ output.write(lhe.banner)
3339+ # Loop over all events
3340+ for event in lhe:
3341+ for particle in event:
3342+ # modify particle attribute: here remove the mass
3343+ particle.mass = 0
3344+ particle.vtim = 2 # The one associate to distance travelled by the particle.
3345+
3346+ #write this modify event
3347+ output.write(str(event))
3348+
3349+
3350+
3351+
3352+
3353
3354=== modified file 'models/EWdim6/EWdim6.log'
3355--- models/EWdim6/EWdim6.log 2012-06-14 15:45:15 +0000
3356+++ models/EWdim6/EWdim6.log 2013-03-04 23:37:19 +0000
3357@@ -1,6 +1,6 @@
3358-# This file was automatically created by FeynRules 1.7.9
3359-# Mathematica version: 8.0 for Linux x86 (64-bit) (February 23, 2011)
3360-# Date: Fri 18 May 2012 14:33:51
3361+# This file was automatically created by FeynRules 1.7.127
3362+# Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010)
3363+# Date: Tue 22 Jan 2013 16:06:42
3364
3365
3366 #
3367@@ -35,14 +35,18 @@
3368 # Parameter definitions
3369 #
3370
3371- * All parameters are ok.
3372+ * Parameter CWWWL2 has no value. Default value 1 assigned.
3373+ * Parameter CWL2 has no value. Default value 1 assigned.
3374+ * Parameter CBL2 has no value. Default value 1 assigned.
3375+ * Parameter CPWWWL2 has no value. Default value 1 assigned.
3376+ * Parameter CPWL2 has no value. Default value 1 assigned.
3377
3378
3379 # Vertices
3380 * Calling FeynmanRules for 1 Lagrangians.
3381 * Number of classes vertices: 58
3382- * Number of flavored vertices: 102
3383- * Saved vertices in InterfaceRun[ 2 ].
3384+ * Number of flavored vertices: 96
3385+ * Saved vertices in InterfaceRun[ 1 ].
3386 * Checked QNumber conservation.
3387 - Quantum number GhostNumber conserved in all vertices.
3388 - Quantum number LeptonNumber conserved in all vertices.
3389@@ -53,19 +57,19 @@
3390 # Vertex definitions
3391 #
3392
3393- * 102 vertices written.
3394+ * 96 vertices written.
3395 * vertices.py written.
3396 #
3397 # Lorentz structure definitions
3398 #
3399
3400- * 78 lorentz structures written.
3401+ * 81 lorentz structures written.
3402 * lorentz.py written.
3403 #
3404 # Coupling definitions
3405 #
3406
3407- * 146 couplings written.
3408+ * 140 couplings written.
3409 * couplings.py written.
3410 #
3411 # Coupling order definitions
3412@@ -77,5 +81,11 @@
3413 # Decay definitions
3414 #
3415
3416- * 0 decays written.
3417+ * 6 decays written.
3418 * decay.py not written
3419+#
3420+# CTCoupling definitions
3421+#
3422+
3423+ * 0 CTcouplings written.
3424+ * CT_couplings.py written.
3425
3426=== modified file 'models/EWdim6/__init__.py'
3427--- models/EWdim6/__init__.py 2012-11-16 23:03:30 +0000
3428+++ models/EWdim6/__init__.py 2013-03-04 23:37:19 +0000
3429@@ -6,11 +6,7 @@
3430 import vertices
3431 import coupling_orders
3432 import write_param_card
3433-try:
3434- import build_restrict
3435-except ImportError, error:
3436- print error
3437-
3438+
3439
3440 all_particles = particles.all_particles
3441 all_vertices = vertices.all_vertices
3442@@ -19,8 +15,28 @@
3443 all_parameters = parameters.all_parameters
3444 all_orders = coupling_orders.all_orders
3445 all_functions = function_library.all_functions
3446+
3447+try:
3448+ import build_restrict
3449+except ImportError:
3450+ pass
3451+try:
3452+ import decays
3453+except ImportError:
3454+ pass
3455+else:
3456+ all_decays = decays.all_decays
3457+try:
3458+ import form_factors
3459+except ImportError:
3460+ pass
3461+else:
3462+ all_form_factors = form_factors.all_form_factors
3463+
3464+
3465 gauge = [0]
3466
3467+
3468 __author__ = "C. Degrande"
3469-__version__ = "1.0"
3470-__email__ = "celine.degrande@uclouvain.be"
3471+__date__ = "05.03. 2012"
3472+__version__= "1.0"
3473
3474=== modified file 'models/EWdim6/build_restrict.py'
3475--- models/EWdim6/build_restrict.py 2012-09-07 02:24:48 +0000
3476+++ models/EWdim6/build_restrict.py 2013-03-04 23:37:19 +0000
3477@@ -29,16 +29,20 @@
3478 first_category = build_restrict_lib.Category('sm customization')
3479 all_categories.append(first_category)
3480
3481+
3482 first_category.add_options(name='diagonal ckm', # name
3483 default=True, # default
3484- rules=[('CKMBLOCK',[1], 0.0)],
3485+ rules=[('WOLFENSTEIN',[1], 0.0),
3486+ ('WOLFENSTEIN',[2], 0.0),
3487+ ('WOLFENSTEIN',[3], 0.0),
3488+ ('WOLFENSTEIN',[4], 0.0)]
3489 )
3490
3491-first_category.add_options(name='c mass = 0', # name
3492- default=True, # default
3493- rules=[('MASS',[4], 0.0),
3494- ('YUKAWA',[4], 0.0)]
3495- )
3496+#first_category.add_options(name='c mass = 0', # name
3497+# default=True, # default
3498+# rules=[('MASS',[4], 0.0),
3499+# ('YUKAWA',[4], 0.0)]
3500+# )
3501
3502 first_category.add_options(name='b mass = 0',
3503 default=False,
3504@@ -52,17 +56,17 @@
3505 ('YUKAWA',[15], 0.0)]
3506 )
3507
3508-first_category.add_options(name='muon mass = 0',
3509- default=True,
3510- rules=[('MASS',[13], 0.0),
3511- ('YUKAWA',[13], 0.0)]
3512- )
3513+#first_category.add_options(name='muon mass = 0',
3514+# default=True,
3515+# rules=[('MASS',[13], 0.0),
3516+# ('YUKAWA',[13], 0.0)]
3517+# )
3518
3519-first_category.add_options(name='electron mass = 0',
3520- default=True,
3521- rules=[('MASS',[11], 0.0),
3522- ('YUKAWA',[11], 0.0)]
3523- )
3524+#first_category.add_options(name='electron mass = 0',
3525+# default=True,
3526+# rules=[('MASS',[11], 0.0),
3527+# ('YUKAWA',[11], 0.0)]
3528+# )
3529
3530 dim6_category = build_restrict_lib.Category('Adding Dim6 Operator')
3531 all_categories.append(dim6_category)
3532
3533=== modified file 'models/EWdim6/coupling_orders.py'
3534--- models/EWdim6/coupling_orders.py 2012-06-14 15:45:15 +0000
3535+++ models/EWdim6/coupling_orders.py 2013-03-04 23:37:19 +0000
3536@@ -1,6 +1,6 @@
3537-# This file was automatically created by FeynRules 1.7.9
3538-# Mathematica version: 8.0 for Linux x86 (64-bit) (February 23, 2011)
3539-# Date: Fri 18 May 2012 14:43:25
3540+# This file was automatically created by FeynRules 1.7.127
3541+# Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010)
3542+# Date: Tue 22 Jan 2013 16:20:55
3543
3544
3545 from object_library import all_orders, CouplingOrder
3546
3547=== modified file 'models/EWdim6/couplings.py'
3548--- models/EWdim6/couplings.py 2012-06-14 15:45:15 +0000
3549+++ models/EWdim6/couplings.py 2013-03-04 23:37:19 +0000
3550@@ -1,11 +1,11 @@
3551-# This file was automatically created by FeynRules 1.7.9
3552-# Mathematica version: 8.0 for Linux x86 (64-bit) (February 23, 2011)
3553-# Date: Fri 18 May 2012 14:43:25
3554+# This file was automatically created by FeynRules 1.7.127
3555+# Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010)
3556+# Date: Tue 22 Jan 2013 16:20:55
3557
3558
3559 from object_library import all_couplings, Coupling
3560
3561-from function_library import complexconjugate, re, im, csc, sec, acsc, asec
3562+from function_library import complexconjugate, re, im, csc, sec, acsc, asec, cot
3563
3564
3565
3566@@ -38,11 +38,11 @@
3567 order = {'QED':1})
3568
3569 GC_8 = Coupling(name = 'GC_8',
3570- value = '(CPWL2*cw*complex(0,1)*gw)/2.e6',
3571+ value = '(CPWL2*cw*complex(0,1)*gw)/4.e6',
3572 order = {'NP':2})
3573
3574 GC_9 = Coupling(name = 'GC_9',
3575- value = '-(CPWL2*cw**2*complex(0,1)*g1*gw)/2.e6',
3576+ value = '-(CPWL2*cw**2*complex(0,1)*g1*gw)/8.e6',
3577 order = {'NP':2,'QED':1})
3578
3579 GC_10 = Coupling(name = 'GC_10',
3580@@ -50,7 +50,7 @@
3581 order = {'QED':2})
3582
3583 GC_11 = Coupling(name = 'GC_11',
3584- value = '-(CPWL2*complex(0,1)*gw**2)/2.e6',
3585+ value = '(CPWL2*complex(0,1)*gw**2)/4.e6',
3586 order = {'NP':2,'QED':1})
3587
3588 GC_12 = Coupling(name = 'GC_12',
3589@@ -66,7 +66,7 @@
3590 order = {'NP':2,'QED':2})
3591
3592 GC_15 = Coupling(name = 'GC_15',
3593- value = '(CPWL2*cw*complex(0,1)*g1*gw**2)/2.e6',
3594+ value = '(CPWL2*cw*complex(0,1)*g1*gw**2)/4.e6',
3595 order = {'NP':2,'QED':2})
3596
3597 GC_16 = Coupling(name = 'GC_16',
3598@@ -74,11 +74,11 @@
3599 order = {'NP':2,'QED':2})
3600
3601 GC_17 = Coupling(name = 'GC_17',
3602- value = '-(CPWL2*cw*complex(0,1)*gw**3)/2.e6',
3603+ value = '-(CPWL2*cw*complex(0,1)*gw**3)/4.e6',
3604 order = {'NP':2,'QED':2})
3605
3606 GC_18 = Coupling(name = 'GC_18',
3607- value = '(CPWWWL2*cw*complex(0,1)*gw**3)/2.e6',
3608+ value = '(CPWWWL2*cw*complex(0,1)*gw**3)/4.e6',
3609 order = {'NP':2})
3610
3611 GC_19 = Coupling(name = 'GC_19',
3612@@ -90,11 +90,11 @@
3613 order = {'NP':2})
3614
3615 GC_21 = Coupling(name = 'GC_21',
3616- value = '-(CPWWWL2*complex(0,1)*gw**4)/1.e6',
3617+ value = '-(CPWWWL2*complex(0,1)*gw**4)/2.e6',
3618 order = {'NP':2,'QED':1})
3619
3620 GC_22 = Coupling(name = 'GC_22',
3621- value = '(CPWWWL2*cw**2*complex(0,1)*gw**4)/1.e6',
3622+ value = '(CPWWWL2*cw**2*complex(0,1)*gw**4)/2.e6',
3623 order = {'NP':2,'QED':1})
3624
3625 GC_23 = Coupling(name = 'GC_23',
3626@@ -198,7 +198,7 @@
3627 order = {'QED':1})
3628
3629 GC_48 = Coupling(name = 'GC_48',
3630- value = '(CPWL2*complex(0,1)*gw*sw)/2.e6',
3631+ value = '(CPWL2*complex(0,1)*gw*sw)/4.e6',
3632 order = {'NP':2})
3633
3634 GC_49 = Coupling(name = 'GC_49',
3635@@ -206,7 +206,7 @@
3636 order = {'QED':2})
3637
3638 GC_50 = Coupling(name = 'GC_50',
3639- value = '-(CPWL2*cw*complex(0,1)*gw**2*sw)/2.e6',
3640+ value = '-(CPWL2*cw*complex(0,1)*gw**2*sw)/8.e6',
3641 order = {'NP':2,'QED':1})
3642
3643 GC_51 = Coupling(name = 'GC_51',
3644@@ -214,7 +214,7 @@
3645 order = {'NP':2,'QED':2})
3646
3647 GC_52 = Coupling(name = 'GC_52',
3648- value = '-(CPWL2*complex(0,1)*g1*gw**2*sw)/2.e6',
3649+ value = '-(CPWL2*complex(0,1)*g1*gw**2*sw)/4.e6',
3650 order = {'NP':2,'QED':2})
3651
3652 GC_53 = Coupling(name = 'GC_53',
3653@@ -222,11 +222,11 @@
3654 order = {'NP':2,'QED':2})
3655
3656 GC_54 = Coupling(name = 'GC_54',
3657- value = '-(CPWL2*complex(0,1)*gw**3*sw)/2.e6',
3658+ value = '-(CPWL2*complex(0,1)*gw**3*sw)/4.e6',
3659 order = {'NP':2,'QED':2})
3660
3661 GC_55 = Coupling(name = 'GC_55',
3662- value = '(CPWWWL2*complex(0,1)*gw**3*sw)/2.e6',
3663+ value = '(CPWWWL2*complex(0,1)*gw**3*sw)/4.e6',
3664 order = {'NP':2})
3665
3666 GC_56 = Coupling(name = 'GC_56',
3667@@ -238,7 +238,7 @@
3668 order = {'NP':2})
3669
3670 GC_58 = Coupling(name = 'GC_58',
3671- value = '(CPWWWL2*cw*complex(0,1)*gw**4*sw)/1.e6',
3672+ value = '(CPWWWL2*cw*complex(0,1)*gw**4*sw)/2.e6',
3673 order = {'NP':2,'QED':1})
3674
3675 GC_59 = Coupling(name = 'GC_59',
3676@@ -266,7 +266,7 @@
3677 order = {'NP':2,'QED':3})
3678
3679 GC_65 = Coupling(name = 'GC_65',
3680- value = '-(CPWL2*complex(0,1)*g1*gw*sw**2)/2.e6',
3681+ value = '-(CPWL2*complex(0,1)*g1*gw*sw**2)/8.e6',
3682 order = {'NP':2,'QED':1})
3683
3684 GC_66 = Coupling(name = 'GC_66',
3685@@ -274,7 +274,7 @@
3686 order = {'QED':2})
3687
3688 GC_67 = Coupling(name = 'GC_67',
3689- value = '(CPWWWL2*complex(0,1)*gw**4*sw**2)/1.e6',
3690+ value = '(CPWWWL2*complex(0,1)*gw**4*sw**2)/2.e6',
3691 order = {'NP':2,'QED':1})
3692
3693 GC_68 = Coupling(name = 'GC_68',
3694@@ -306,7 +306,7 @@
3695 order = {'QED':1})
3696
3697 GC_75 = Coupling(name = 'GC_75',
3698- value = '-(CPWL2*cw**2*complex(0,1)*gw**2)/2.e6 - (CPWL2*cw*complex(0,1)*g1*gw*sw)/2.e6',
3699+ value = '-(CPWL2*cw**2*complex(0,1)*gw**2)/8.e6 - (CPWL2*cw*complex(0,1)*g1*gw*sw)/8.e6',
3700 order = {'NP':2,'QED':1})
3701
3702 GC_76 = Coupling(name = 'GC_76',
3703@@ -334,7 +334,7 @@
3704 order = {'NP':2,'QED':1})
3705
3706 GC_82 = Coupling(name = 'GC_82',
3707- value = '(CPWL2*cw*complex(0,1)*g1*gw*sw)/2.e6 - (CPWL2*complex(0,1)*gw**2*sw**2)/2.e6',
3708+ value = '(CPWL2*cw*complex(0,1)*g1*gw*sw)/8.e6 - (CPWL2*complex(0,1)*gw**2*sw**2)/8.e6',
3709 order = {'NP':2,'QED':1})
3710
3711 GC_83 = Coupling(name = 'GC_83',
3712@@ -350,11 +350,11 @@
3713 order = {'NP':2,'QED':3})
3714
3715 GC_86 = Coupling(name = 'GC_86',
3716- value = '-(CPWL2*cw**2*complex(0,1)*g1*gw*v)/2.e6',
3717+ value = '-(CPWL2*cw**2*complex(0,1)*g1*gw*v)/8.e6',
3718 order = {'NP':2})
3719
3720 GC_87 = Coupling(name = 'GC_87',
3721- value = '-(CPWL2*complex(0,1)*gw**2*v)/2.e6',
3722+ value = '(CPWL2*complex(0,1)*gw**2*v)/4.e6',
3723 order = {'NP':2})
3724
3725 GC_88 = Coupling(name = 'GC_88',
3726@@ -366,7 +366,7 @@
3727 order = {'NP':2,'QED':1})
3728
3729 GC_90 = Coupling(name = 'GC_90',
3730- value = '(CPWL2*cw*complex(0,1)*g1*gw**2*v)/2.e6',
3731+ value = '(CPWL2*cw*complex(0,1)*g1*gw**2*v)/4.e6',
3732 order = {'NP':2,'QED':1})
3733
3734 GC_91 = Coupling(name = 'GC_91',
3735@@ -374,7 +374,7 @@
3736 order = {'NP':2,'QED':1})
3737
3738 GC_92 = Coupling(name = 'GC_92',
3739- value = '-(CPWL2*cw*complex(0,1)*gw**3*v)/2.e6',
3740+ value = '-(CPWL2*cw*complex(0,1)*gw**3*v)/4.e6',
3741 order = {'NP':2,'QED':1})
3742
3743 GC_93 = Coupling(name = 'GC_93',
3744@@ -394,7 +394,7 @@
3745 order = {'QED':1})
3746
3747 GC_97 = Coupling(name = 'GC_97',
3748- value = '-(CPWL2*cw*complex(0,1)*gw**2*sw*v)/2.e6',
3749+ value = '-(CPWL2*cw*complex(0,1)*gw**2*sw*v)/8.e6',
3750 order = {'NP':2})
3751
3752 GC_98 = Coupling(name = 'GC_98',
3753@@ -402,7 +402,7 @@
3754 order = {'NP':2,'QED':1})
3755
3756 GC_99 = Coupling(name = 'GC_99',
3757- value = '-(CPWL2*complex(0,1)*g1*gw**2*sw*v)/2.e6',
3758+ value = '-(CPWL2*complex(0,1)*g1*gw**2*sw*v)/4.e6',
3759 order = {'NP':2,'QED':1})
3760
3761 GC_100 = Coupling(name = 'GC_100',
3762@@ -410,7 +410,7 @@
3763 order = {'NP':2,'QED':1})
3764
3765 GC_101 = Coupling(name = 'GC_101',
3766- value = '-(CPWL2*complex(0,1)*gw**3*sw*v)/2.e6',
3767+ value = '-(CPWL2*complex(0,1)*gw**3*sw*v)/4.e6',
3768 order = {'NP':2,'QED':1})
3769
3770 GC_102 = Coupling(name = 'GC_102',
3771@@ -418,7 +418,7 @@
3772 order = {'NP':2,'QED':1})
3773
3774 GC_103 = Coupling(name = 'GC_103',
3775- value = '-(CPWL2*complex(0,1)*g1*gw*sw**2*v)/2.e6',
3776+ value = '-(CPWL2*complex(0,1)*g1*gw*sw**2*v)/8.e6',
3777 order = {'NP':2})
3778
3779 GC_104 = Coupling(name = 'GC_104',
3780@@ -426,7 +426,7 @@
3781 order = {'NP':2})
3782
3783 GC_105 = Coupling(name = 'GC_105',
3784- value = '(CPWL2*cw*complex(0,1)*g1*gw**2*v**2)/4.e6',
3785+ value = '(CPWL2*cw*complex(0,1)*g1*gw**2*v**2)/8.e6',
3786 order = {'NP':2})
3787
3788 GC_106 = Coupling(name = 'GC_106',
3789@@ -434,7 +434,7 @@
3790 order = {'NP':2})
3791
3792 GC_107 = Coupling(name = 'GC_107',
3793- value = '-(CPWL2*cw*complex(0,1)*gw**3*v**2)/4.e6',
3794+ value = '-(CPWL2*cw*complex(0,1)*gw**3*v**2)/8.e6',
3795 order = {'NP':2})
3796
3797 GC_108 = Coupling(name = 'GC_108',
3798@@ -450,7 +450,7 @@
3799 order = {'NP':2})
3800
3801 GC_111 = Coupling(name = 'GC_111',
3802- value = '-(CPWL2*complex(0,1)*g1*gw**2*sw*v**2)/4.e6',
3803+ value = '-(CPWL2*complex(0,1)*g1*gw**2*sw*v**2)/8.e6',
3804 order = {'NP':2})
3805
3806 GC_112 = Coupling(name = 'GC_112',
3807@@ -458,7 +458,7 @@
3808 order = {'NP':2})
3809
3810 GC_113 = Coupling(name = 'GC_113',
3811- value = '-(CPWL2*complex(0,1)*gw**3*sw*v**2)/4.e6',
3812+ value = '-(CPWL2*complex(0,1)*gw**3*sw*v**2)/8.e6',
3813 order = {'NP':2})
3814
3815 GC_114 = Coupling(name = 'GC_114',
3816@@ -466,7 +466,7 @@
3817 order = {'NP':2})
3818
3819 GC_115 = Coupling(name = 'GC_115',
3820- value = '-(CPWL2*cw**2*complex(0,1)*gw**2*v)/2.e6 - (CPWL2*cw*complex(0,1)*g1*gw*sw*v)/2.e6',
3821+ value = '-(CPWL2*cw**2*complex(0,1)*gw**2*v)/8.e6 - (CPWL2*cw*complex(0,1)*g1*gw*sw*v)/8.e6',
3822 order = {'NP':2})
3823
3824 GC_116 = Coupling(name = 'GC_116',
3825@@ -494,7 +494,7 @@
3826 order = {'NP':2})
3827
3828 GC_122 = Coupling(name = 'GC_122',
3829- value = '(CPWL2*cw*complex(0,1)*g1*gw*sw*v)/2.e6 - (CPWL2*complex(0,1)*gw**2*sw**2*v)/2.e6',
3830+ value = '(CPWL2*cw*complex(0,1)*g1*gw*sw*v)/8.e6 - (CPWL2*complex(0,1)*gw**2*sw**2*v)/8.e6',
3831 order = {'NP':2})
3832
3833 GC_123 = Coupling(name = 'GC_123',
3834@@ -526,70 +526,46 @@
3835 order = {'QED':1})
3836
3837 GC_130 = Coupling(name = 'GC_130',
3838- value = '-((complex(0,1)*yc)/cmath.sqrt(2))',
3839+ value = '-((complex(0,1)*yt)/cmath.sqrt(2))',
3840 order = {'QED':1})
3841
3842 GC_131 = Coupling(name = 'GC_131',
3843- value = '-((complex(0,1)*ydo)/cmath.sqrt(2))',
3844+ value = '-((complex(0,1)*ytau)/cmath.sqrt(2))',
3845 order = {'QED':1})
3846
3847 GC_132 = Coupling(name = 'GC_132',
3848- value = '-((complex(0,1)*ye)/cmath.sqrt(2))',
3849+ value = '(ee*complex(0,1)*complexconjugate(CKM1x1))/(sw*cmath.sqrt(2))',
3850 order = {'QED':1})
3851
3852 GC_133 = Coupling(name = 'GC_133',
3853- value = '-((complex(0,1)*ym)/cmath.sqrt(2))',
3854+ value = '(ee*complex(0,1)*complexconjugate(CKM1x2))/(sw*cmath.sqrt(2))',
3855 order = {'QED':1})
3856
3857 GC_134 = Coupling(name = 'GC_134',
3858- value = '-((complex(0,1)*ys)/cmath.sqrt(2))',
3859+ value = '(ee*complex(0,1)*complexconjugate(CKM1x3))/(sw*cmath.sqrt(2))',
3860 order = {'QED':1})
3861
3862 GC_135 = Coupling(name = 'GC_135',
3863- value = '-((complex(0,1)*yt)/cmath.sqrt(2))',
3864+ value = '(ee*complex(0,1)*complexconjugate(CKM2x1))/(sw*cmath.sqrt(2))',
3865 order = {'QED':1})
3866
3867 GC_136 = Coupling(name = 'GC_136',
3868- value = '-((complex(0,1)*ytau)/cmath.sqrt(2))',
3869+ value = '(ee*complex(0,1)*complexconjugate(CKM2x2))/(sw*cmath.sqrt(2))',
3870 order = {'QED':1})
3871
3872 GC_137 = Coupling(name = 'GC_137',
3873- value = '-((complex(0,1)*yup)/cmath.sqrt(2))',
3874+ value = '(ee*complex(0,1)*complexconjugate(CKM2x3))/(sw*cmath.sqrt(2))',
3875 order = {'QED':1})
3876
3877 GC_138 = Coupling(name = 'GC_138',
3878- value = '(ee*complex(0,1)*complexconjugate(CKM1x1))/(sw*cmath.sqrt(2))',
3879+ value = '(ee*complex(0,1)*complexconjugate(CKM3x1))/(sw*cmath.sqrt(2))',
3880 order = {'QED':1})
3881
3882 GC_139 = Coupling(name = 'GC_139',
3883- value = '(ee*complex(0,1)*complexconjugate(CKM1x2))/(sw*cmath.sqrt(2))',
3884+ value = '(ee*complex(0,1)*complexconjugate(CKM3x2))/(sw*cmath.sqrt(2))',
3885 order = {'QED':1})
3886
3887 GC_140 = Coupling(name = 'GC_140',
3888- value = '(ee*complex(0,1)*complexconjugate(CKM1x3))/(sw*cmath.sqrt(2))',
3889- order = {'QED':1})
3890-
3891-GC_141 = Coupling(name = 'GC_141',
3892- value = '(ee*complex(0,1)*complexconjugate(CKM2x1))/(sw*cmath.sqrt(2))',
3893- order = {'QED':1})
3894-
3895-GC_142 = Coupling(name = 'GC_142',
3896- value = '(ee*complex(0,1)*complexconjugate(CKM2x2))/(sw*cmath.sqrt(2))',
3897- order = {'QED':1})
3898-
3899-GC_143 = Coupling(name = 'GC_143',
3900- value = '(ee*complex(0,1)*complexconjugate(CKM2x3))/(sw*cmath.sqrt(2))',
3901- order = {'QED':1})
3902-
3903-GC_144 = Coupling(name = 'GC_144',
3904- value = '(ee*complex(0,1)*complexconjugate(CKM3x1))/(sw*cmath.sqrt(2))',
3905- order = {'QED':1})
3906-
3907-GC_145 = Coupling(name = 'GC_145',
3908- value = '(ee*complex(0,1)*complexconjugate(CKM3x2))/(sw*cmath.sqrt(2))',
3909- order = {'QED':1})
3910-
3911-GC_146 = Coupling(name = 'GC_146',
3912 value = '(ee*complex(0,1)*complexconjugate(CKM3x3))/(sw*cmath.sqrt(2))',
3913 order = {'QED':1})
3914
3915
3916=== modified file 'models/EWdim6/function_library.py'
3917--- models/EWdim6/function_library.py 2012-05-05 16:56:46 +0000
3918+++ models/EWdim6/function_library.py 2013-03-04 23:37:19 +0000
3919@@ -49,6 +49,14 @@
3920 arguments = ('z',),
3921 expression = 'cmath.asin(1./z)')
3922
3923-
3924+cot = Function(name = 'cot',
3925+ arguments = ('z',),
3926+ expression = '1./cmath.tan(z)')
3927+
3928+# Heaviside theta function
3929+
3930+theta_function = Function(name = 'theta_function',
3931+ arguments = ('x','y','z'),
3932+ expression = 'y if x else z')
3933
3934
3935
3936=== modified file 'models/EWdim6/lorentz.py'
3937--- models/EWdim6/lorentz.py 2012-06-14 15:45:15 +0000
3938+++ models/EWdim6/lorentz.py 2013-03-04 23:37:19 +0000
3939@@ -1,233 +1,248 @@
3940-# This file was automatically created by FeynRules 1.7.9
3941-# Mathematica version: 8.0 for Linux x86 (64-bit) (February 23, 2011)
3942-# Date: Fri 18 May 2012 14:43:24
3943+# This file was automatically created by FeynRules 1.7.127
3944+# Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010)
3945+# Date: Tue 22 Jan 2013 16:20:54
3946
3947
3948 from object_library import all_lorentz, Lorentz
3949
3950-from function_library import complexconjugate, re, im, csc, sec, acsc, asec
3951-
3952-
3953-
3954-UUV2 = Lorentz(name = 'UUV2',
3955+from function_library import complexconjugate, re, im, csc, sec, acsc, asec, cot
3956+try:
3957+ import form_factors as ForFac
3958+except ImportError:
3959+ pass
3960+
3961+
3962+UUV1 = Lorentz(name = 'UUV1',
3963 spins = [ -1, -1, 3 ],
3964 structure = 'P(3,2) + P(3,3)')
3965
3966-SSS2 = Lorentz(name = 'SSS2',
3967+SSS1 = Lorentz(name = 'SSS1',
3968 spins = [ 1, 1, 1 ],
3969 structure = '1')
3970
3971-FFS2 = Lorentz(name = 'FFS2',
3972+FFS1 = Lorentz(name = 'FFS1',
3973 spins = [ 2, 2, 1 ],
3974 structure = 'Identity(2,1)')
3975
3976-FFV6 = Lorentz(name = 'FFV6',
3977+FFV1 = Lorentz(name = 'FFV1',
3978 spins = [ 2, 2, 3 ],
3979 structure = 'Gamma(3,2,1)')
3980
3981-FFV7 = Lorentz(name = 'FFV7',
3982+FFV2 = Lorentz(name = 'FFV2',
3983 spins = [ 2, 2, 3 ],
3984 structure = 'Gamma(3,2,-1)*ProjM(-1,1)')
3985
3986-FFV8 = Lorentz(name = 'FFV8',
3987+FFV3 = Lorentz(name = 'FFV3',
3988 spins = [ 2, 2, 3 ],
3989 structure = 'Gamma(3,2,-1)*ProjM(-1,1) - 2*Gamma(3,2,-1)*ProjP(-1,1)')
3990
3991-FFV9 = Lorentz(name = 'FFV9',
3992+FFV4 = Lorentz(name = 'FFV4',
3993 spins = [ 2, 2, 3 ],
3994 structure = 'Gamma(3,2,-1)*ProjM(-1,1) + 2*Gamma(3,2,-1)*ProjP(-1,1)')
3995
3996-FFV10 = Lorentz(name = 'FFV10',
3997- spins = [ 2, 2, 3 ],
3998- structure = 'Gamma(3,2,-1)*ProjM(-1,1) + 4*Gamma(3,2,-1)*ProjP(-1,1)')
3999+FFV5 = Lorentz(name = 'FFV5',
4000+ spins = [ 2, 2, 3 ],
4001+ structure = 'Gamma(3,2,-1)*ProjM(-1,1) + 4*Gamma(3,2,-1)*ProjP(-1,1)')
4002
4003 VSS1 = Lorentz(name = 'VSS1',
4004 spins = [ 3, 1, 1 ],
4005- structure = 'Epsilon(1,-1,-2,-3)*P(-3,1)*P(-2,3)*P(-1,2) + Epsilon(1,-1,-2,-3)*P(-3,1)*P(-2,2)*P(-1,3)')
4006+ structure = '2*Epsilon(1,-1,-2,-3)*P(-3,1)*P(-2,3)*P(-1,2) + 2*Epsilon(1,-1,-2,-3)*P(-3,1)*P(-2,2)*P(-1,3)')
4007+
4008+VVS1 = Lorentz(name = 'VVS1',
4009+ spins = [ 3, 3, 1 ],
4010+ structure = '-(Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,1)) + 3*Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3)')
4011+
4012+VVS2 = Lorentz(name = 'VVS2',
4013+ spins = [ 3, 3, 1 ],
4014+ structure = '2*Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,1) + 2*Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3)')
4015+
4016+VVS3 = Lorentz(name = 'VVS3',
4017+ spins = [ 3, 3, 1 ],
4018+ structure = '-(Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,2)) + 3*Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3)')
4019+
4020+VVS4 = Lorentz(name = 'VVS4',
4021+ spins = [ 3, 3, 1 ],
4022+ structure = '-(Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,1)) + Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,2) + 3*Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3) - 3*Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3)')
4023
4024 VVS5 = Lorentz(name = 'VVS5',
4025 spins = [ 3, 3, 1 ],
4026- structure = 'Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3)')
4027+ structure = '-2*Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,1) + 2*Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,2) + 2*Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3) - 2*Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3)')
4028
4029 VVS6 = Lorentz(name = 'VVS6',
4030 spins = [ 3, 3, 1 ],
4031- structure = 'Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3)')
4032+ structure = 'Metric(1,2)')
4033
4034 VVS7 = Lorentz(name = 'VVS7',
4035 spins = [ 3, 3, 1 ],
4036- structure = 'Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3) - Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3)')
4037+ structure = 'P(1,3)*P(2,1) - P(-1,1)*P(-1,3)*Metric(1,2)')
4038
4039 VVS8 = Lorentz(name = 'VVS8',
4040 spins = [ 3, 3, 1 ],
4041- structure = 'Metric(1,2)')
4042+ structure = 'P(1,2)*P(2,3) - P(-1,2)*P(-1,3)*Metric(1,2)')
4043
4044 VVS9 = Lorentz(name = 'VVS9',
4045 spins = [ 3, 3, 1 ],
4046- structure = 'P(1,3)*P(2,1) - P(-1,1)*P(-1,3)*Metric(1,2)')
4047-
4048-VVS10 = Lorentz(name = 'VVS10',
4049- spins = [ 3, 3, 1 ],
4050- structure = 'P(1,2)*P(2,3) - P(-1,2)*P(-1,3)*Metric(1,2)')
4051-
4052-VVS11 = Lorentz(name = 'VVS11',
4053- spins = [ 3, 3, 1 ],
4054- structure = 'P(1,3)*P(2,1) + P(1,2)*P(2,3) - P(-1,1)*P(-1,3)*Metric(1,2) - P(-1,2)*P(-1,3)*Metric(1,2)')
4055+ structure = 'P(1,3)*P(2,1) + P(1,2)*P(2,3) - P(-1,1)*P(-1,3)*Metric(1,2) - P(-1,2)*P(-1,3)*Metric(1,2)')
4056+
4057+VVV1 = Lorentz(name = 'VVV1',
4058+ spins = [ 3, 3, 3 ],
4059+ structure = '2*Epsilon(1,2,3,-1)*P(-1,1) + 2*Epsilon(1,2,3,-1)*P(-1,2)')
4060+
4061+VVV2 = Lorentz(name = 'VVV2',
4062+ spins = [ 3, 3, 3 ],
4063+ structure = '2*Epsilon(1,2,3,-1)*P(-1,2) + 2*Epsilon(1,2,3,-1)*P(-1,3)')
4064+
4065+VVV3 = Lorentz(name = 'VVV3',
4066+ spins = [ 3, 3, 3 ],
4067+ structure = '2*Epsilon(1,2,3,-1)*P(-1,1) + 2*Epsilon(1,2,3,-1)*P(-1,2) + 2*Epsilon(1,2,3,-1)*P(-1,3)')
4068
4069 VVV4 = Lorentz(name = 'VVV4',
4070 spins = [ 3, 3, 3 ],
4071- structure = 'Epsilon(1,2,3,-1)*P(-1,1) + Epsilon(1,2,3,-1)*P(-1,2)')
4072+ structure = 'P(3,1)*Metric(1,2) - P(2,1)*Metric(1,3)')
4073
4074 VVV5 = Lorentz(name = 'VVV5',
4075 spins = [ 3, 3, 3 ],
4076- structure = 'Epsilon(1,2,3,-1)*P(-1,2) + Epsilon(1,2,3,-1)*P(-1,3)')
4077+ structure = 'P(3,1)*Metric(1,2) - P(3,2)*Metric(1,2) - P(2,1)*Metric(1,3) + P(1,2)*Metric(2,3)')
4078
4079 VVV6 = Lorentz(name = 'VVV6',
4080 spins = [ 3, 3, 3 ],
4081- structure = 'Epsilon(1,2,3,-1)*P(-1,1) + Epsilon(1,2,3,-1)*P(-1,2) + Epsilon(1,2,3,-1)*P(-1,3)')
4082+ structure = 'P(2,3)*Metric(1,3) - P(1,3)*Metric(2,3)')
4083
4084 VVV7 = Lorentz(name = 'VVV7',
4085 spins = [ 3, 3, 3 ],
4086- structure = 'P(3,1)*Metric(1,2) - P(2,1)*Metric(1,3)')
4087+ structure = 'P(3,1)*Metric(1,2) - P(3,2)*Metric(1,2) - P(2,1)*Metric(1,3) + P(2,3)*Metric(1,3) + P(1,2)*Metric(2,3) - P(1,3)*Metric(2,3)')
4088
4089 VVV8 = Lorentz(name = 'VVV8',
4090 spins = [ 3, 3, 3 ],
4091- structure = 'P(3,1)*Metric(1,2) - P(3,2)*Metric(1,2) - P(2,1)*Metric(1,3) + P(1,2)*Metric(2,3)')
4092+ structure = 'P(3,2)*Metric(1,2) - P(2,3)*Metric(1,3) - P(1,2)*Metric(2,3) + P(1,3)*Metric(2,3)')
4093
4094 VVV9 = Lorentz(name = 'VVV9',
4095 spins = [ 3, 3, 3 ],
4096- structure = 'P(2,3)*Metric(1,3) - P(1,3)*Metric(2,3)')
4097+ structure = '-(P(1,2)*P(2,3)*P(3,1)) + P(1,3)*P(2,1)*P(3,2) + P(-1,2)*P(-1,3)*P(3,1)*Metric(1,2) - P(-1,1)*P(-1,3)*P(3,2)*Metric(1,2) - P(-1,2)*P(-1,3)*P(2,1)*Metric(1,3) + P(-1,1)*P(-1,2)*P(2,3)*Metric(1,3) + P(-1,1)*P(-1,3)*P(1,2)*Metric(2,3) - P(-1,1)*P(-1,2)*P(1,3)*Metric(2,3)')
4098
4099 VVV10 = Lorentz(name = 'VVV10',
4100 spins = [ 3, 3, 3 ],
4101- structure = 'P(3,1)*Metric(1,2) - P(3,2)*Metric(1,2) - P(2,1)*Metric(1,3) + P(2,3)*Metric(1,3) + P(1,2)*Metric(2,3) - P(1,3)*Metric(2,3)')
4102-
4103-VVV11 = Lorentz(name = 'VVV11',
4104- spins = [ 3, 3, 3 ],
4105- structure = 'P(3,2)*Metric(1,2) - P(2,3)*Metric(1,3) - P(1,2)*Metric(2,3) + P(1,3)*Metric(2,3)')
4106-
4107-VVV12 = Lorentz(name = 'VVV12',
4108- spins = [ 3, 3, 3 ],
4109- structure = '-(P(1,2)*P(2,3)*P(3,1)) + P(1,3)*P(2,1)*P(3,2) + P(-1,2)*P(-1,3)*P(3,1)*Metric(1,2) - P(-1,1)*P(-1,3)*P(3,2)*Metric(1,2) - P(-1,2)*P(-1,3)*P(2,1)*Metric(1,3) + P(-1,1)*P(-1,2)*P(2,3)*Metric(1,3) + P(-1,1)*P(-1,3)*P(1,2)*Metric(2,3) - P(-1,1)*P(-1,2)*P(1,3)*Metric(2,3)')
4110-
4111-VVV13 = Lorentz(name = 'VVV13',
4112- spins = [ 3, 3, 3 ],
4113- structure = '2*Epsilon(1,2,3,-2)*P(-2,3)*P(-1,1)*P(-1,2) + 2*Epsilon(1,2,3,-2)*P(-2,2)*P(-1,1)*P(-1,3) + 2*Epsilon(1,2,3,-2)*P(-2,1)*P(-1,2)*P(-1,3) - Epsilon(2,3,-1,-2)*P(-2,3)*P(-1,1)*P(1,2) + Epsilon(2,3,-1,-2)*P(-2,1)*P(-1,3)*P(1,2) - Epsilon(2,3,-1,-2)*P(-2,2)*P(-1,1)*P(1,3) + Epsilon(2,3,-1,-2)*P(-2,1)*P(-1,2)*P(1,3) + Epsilon(1,3,-1,-2)*P(-2,3)*P(-1,2)*P(2,1) - Epsilon(1,3,-1,-2)*P(-2,2)*P(-1,3)*P(2,1) - Epsilon(1,3,-1,-2)*P(-2,2)*P(-1,1)*P(2,3) + Epsilon(1,3,-1,-2)*P(-2,1)*P(-1,2)*P(2,3) + Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,2)*P(3,1) - Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3)*P(3,1) + Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,1)*P(3,2) - Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3)*P(3,2) + (Epsilon(3,-1,-2,-3)*P(-3,3)*P(-2,2)*P(-1,1)*Metric(1,2))/2. - (Epsilon(3,-1,-2,-3)*P(-3,3)*P(-2,1)*P(-1,2)*Metric(1,2))/2. + (Epsilon(3,-1,-2,-3)*P(-3,2)*P(-2,1)*P(-1,3)*Metric(1,2))/2. - (Epsilon(3,-1,-2,-3)*P(-3,1)*P(-2,2)*P(-1,3)*Metric(1,2))/2. - (Epsilon(2,-1,-2,-3)*P(-3,2)*P(-2,3)*P(-1,1)*Metric(1,3))/2. - (Epsilon(2,-1,-2,-3)*P(-3,3)*P(-2,1)*P(-1,2)*Metric(1,3))/2. + (Epsilon(2,-1,-2,-3)*P(-3,1)*P(-2,3)*P(-1,2)*Metric(1,3))/2. + (Epsilon(2,-1,-2,-3)*P(-3,2)*P(-2,1)*P(-1,3)*Metric(1,3))/2. + (Epsilon(1,-1,-2,-3)*P(-3,3)*P(-2,2)*P(-1,1)*Metric(2,3))/2. - (Epsilon(1,-1,-2,-3)*P(-3,2)*P(-2,3)*P(-1,1)*Metric(2,3))/2. + (Epsilon(1,-1,-2,-3)*P(-3,1)*P(-2,3)*P(-1,2)*Metric(2,3))/2. - (Epsilon(1,-1,-2,-3)*P(-3,1)*P(-2,2)*P(-1,3)*Metric(2,3))/2.')
4114-
4115-SSSS2 = Lorentz(name = 'SSSS2',
4116+ structure = '4*Epsilon(1,2,3,-2)*P(-2,3)*P(-1,1)*P(-1,2) + 4*Epsilon(1,2,3,-2)*P(-2,2)*P(-1,1)*P(-1,3) + 4*Epsilon(1,2,3,-2)*P(-2,1)*P(-1,2)*P(-1,3) - 2*Epsilon(2,3,-1,-2)*P(-2,3)*P(-1,1)*P(1,2) + 2*Epsilon(2,3,-1,-2)*P(-2,1)*P(-1,3)*P(1,2) - 2*Epsilon(2,3,-1,-2)*P(-2,2)*P(-1,1)*P(1,3) + 2*Epsilon(2,3,-1,-2)*P(-2,1)*P(-1,2)*P(1,3) + 2*Epsilon(1,3,-1,-2)*P(-2,3)*P(-1,2)*P(2,1) - 2*Epsilon(1,3,-1,-2)*P(-2,2)*P(-1,3)*P(2,1) - 2*Epsilon(1,3,-1,-2)*P(-2,2)*P(-1,1)*P(2,3) + 2*Epsilon(1,3,-1,-2)*P(-2,1)*P(-1,2)*P(2,3) + 2*Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,2)*P(3,1) - 2*Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3)*P(3,1) + 2*Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,1)*P(3,2) - 2*Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3)*P(3,2) + Epsilon(3,-1,-2,-3)*P(-3,3)*P(-2,2)*P(-1,1)*Metric(1,2) - Epsilon(3,-1,-2,-3)*P(-3,3)*P(-2,1)*P(-1,2)*Metric(1,2) + Epsilon(3,-1,-2,-3)*P(-3,2)*P(-2,1)*P(-1,3)*Metric(1,2) - Epsilon(3,-1,-2,-3)*P(-3,1)*P(-2,2)*P(-1,3)*Metric(1,2) - Epsilon(2,-1,-2,-3)*P(-3,2)*P(-2,3)*P(-1,1)*Metric(1,3) - Epsilon(2,-1,-2,-3)*P(-3,3)*P(-2,1)*P(-1,2)*Metric(1,3) + Epsilon(2,-1,-2,-3)*P(-3,1)*P(-2,3)*P(-1,2)*Metric(1,3) + Epsilon(2,-1,-2,-3)*P(-3,2)*P(-2,1)*P(-1,3)*Metric(1,3) + Epsilon(1,-1,-2,-3)*P(-3,3)*P(-2,2)*P(-1,1)*Metric(2,3) - Epsilon(1,-1,-2,-3)*P(-3,2)*P(-2,3)*P(-1,1)*Metric(2,3) + Epsilon(1,-1,-2,-3)*P(-3,1)*P(-2,3)*P(-1,2)*Metric(2,3) - Epsilon(1,-1,-2,-3)*P(-3,1)*P(-2,2)*P(-1,3)*Metric(2,3)')
4117+
4118+SSSS1 = Lorentz(name = 'SSSS1',
4119 spins = [ 1, 1, 1, 1 ],
4120 structure = '1')
4121
4122+VVSS1 = Lorentz(name = 'VVSS1',
4123+ spins = [ 3, 3, 1, 1 ],
4124+ structure = '-(Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,1)) - Epsilon(1,2,-1,-2)*P(-2,4)*P(-1,1) + 3*Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3) + 3*Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,4)')
4125+
4126+VVSS2 = Lorentz(name = 'VVSS2',
4127+ spins = [ 3, 3, 1, 1 ],
4128+ structure = '-(Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,2)) - Epsilon(1,2,-1,-2)*P(-2,4)*P(-1,2) + 3*Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3) + 3*Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,4)')
4129+
4130+VVSS3 = Lorentz(name = 'VVSS3',
4131+ spins = [ 3, 3, 1, 1 ],
4132+ structure = '-(Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,1)) - Epsilon(1,2,-1,-2)*P(-2,4)*P(-1,1) + Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,2) + Epsilon(1,2,-1,-2)*P(-2,4)*P(-1,2) + 3*Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3) - 3*Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3) + 3*Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,4) - 3*Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,4)')
4133+
4134+VVSS4 = Lorentz(name = 'VVSS4',
4135+ spins = [ 3, 3, 1, 1 ],
4136+ structure = '-2*Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,1) - 2*Epsilon(1,2,-1,-2)*P(-2,4)*P(-1,1) + 2*Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,2) + 2*Epsilon(1,2,-1,-2)*P(-2,4)*P(-1,2) + 2*Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3) - 2*Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3) + 2*Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,4) - 2*Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,4)')
4137+
4138 VVSS5 = Lorentz(name = 'VVSS5',
4139 spins = [ 3, 3, 1, 1 ],
4140- structure = 'Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3) + Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,4)')
4141+ structure = '2*Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,1) + 2*Epsilon(1,2,-1,-2)*P(-2,4)*P(-1,1) + 2*Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3) + 2*Epsilon(1,2,-1,-2)*P(-2,4)*P(-1,3) + 2*Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,4) + 2*Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,4)')
4142
4143 VVSS6 = Lorentz(name = 'VVSS6',
4144 spins = [ 3, 3, 1, 1 ],
4145- structure = 'Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3) - Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3) + Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,4) - Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,4)')
4146+ structure = 'Metric(1,2)')
4147
4148 VVSS7 = Lorentz(name = 'VVSS7',
4149 spins = [ 3, 3, 1, 1 ],
4150- structure = 'Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3) + Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,4)')
4151+ structure = 'P(1,3)*P(2,1) + P(1,4)*P(2,1) - P(-1,1)*P(-1,3)*Metric(1,2) - P(-1,1)*P(-1,4)*Metric(1,2)')
4152
4153 VVSS8 = Lorentz(name = 'VVSS8',
4154 spins = [ 3, 3, 1, 1 ],
4155- structure = 'Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3) - Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3) - Epsilon(1,2,-1,-2)*P(-2,4)*P(-1,3) + Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,4) - Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,4) - Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,4)')
4156+ structure = 'P(1,2)*P(2,3) + P(1,2)*P(2,4) - P(-1,2)*P(-1,3)*Metric(1,2) - P(-1,2)*P(-1,4)*Metric(1,2)')
4157
4158 VVSS9 = Lorentz(name = 'VVSS9',
4159 spins = [ 3, 3, 1, 1 ],
4160- structure = 'Metric(1,2)')
4161-
4162-VVSS10 = Lorentz(name = 'VVSS10',
4163- spins = [ 3, 3, 1, 1 ],
4164- structure = 'P(1,3)*P(2,1) + P(1,4)*P(2,1) - P(-1,1)*P(-1,3)*Metric(1,2) - P(-1,1)*P(-1,4)*Metric(1,2)')
4165-
4166-VVSS11 = Lorentz(name = 'VVSS11',
4167- spins = [ 3, 3, 1, 1 ],
4168- structure = 'P(1,2)*P(2,3) + P(1,2)*P(2,4) - P(-1,2)*P(-1,3)*Metric(1,2) - P(-1,2)*P(-1,4)*Metric(1,2)')
4169-
4170-VVSS12 = Lorentz(name = 'VVSS12',
4171- spins = [ 3, 3, 1, 1 ],
4172- structure = 'P(1,3)*P(2,1) + P(1,4)*P(2,1) + P(1,2)*P(2,3) + P(1,2)*P(2,4) - P(-1,1)*P(-1,3)*Metric(1,2) - P(-1,2)*P(-1,3)*Metric(1,2) - P(-1,1)*P(-1,4)*Metric(1,2) - P(-1,2)*P(-1,4)*Metric(1,2)')
4173+ structure = 'P(1,3)*P(2,1) + P(1,4)*P(2,1) + P(1,2)*P(2,3) + P(1,2)*P(2,4) - P(-1,1)*P(-1,3)*Metric(1,2) - P(-1,2)*P(-1,3)*Metric(1,2) - P(-1,1)*P(-1,4)*Metric(1,2) - P(-1,2)*P(-1,4)*Metric(1,2)')
4174+
4175+VVVS1 = Lorentz(name = 'VVVS1',
4176+ spins = [ 3, 3, 3, 1 ],
4177+ structure = '2*Epsilon(1,2,3,-1)*P(-1,1) + 2*Epsilon(1,2,3,-1)*P(-1,2) + 2*Epsilon(1,2,3,-1)*P(-1,4)')
4178+
4179+VVVS2 = Lorentz(name = 'VVVS2',
4180+ spins = [ 3, 3, 3, 1 ],
4181+ structure = '2*Epsilon(1,2,3,-1)*P(-1,2) + 2*Epsilon(1,2,3,-1)*P(-1,3) + 2*Epsilon(1,2,3,-1)*P(-1,4)')
4182+
4183+VVVS3 = Lorentz(name = 'VVVS3',
4184+ spins = [ 3, 3, 3, 1 ],
4185+ structure = '2*Epsilon(1,2,3,-1)*P(-1,1) + 2*Epsilon(1,2,3,-1)*P(-1,2) + 2*Epsilon(1,2,3,-1)*P(-1,3) + 6*Epsilon(1,2,3,-1)*P(-1,4)')
4186
4187 VVVS4 = Lorentz(name = 'VVVS4',
4188 spins = [ 3, 3, 3, 1 ],
4189- structure = 'Epsilon(1,2,3,-1)*P(-1,1) + Epsilon(1,2,3,-1)*P(-1,2) + Epsilon(1,2,3,-1)*P(-1,4)')
4190+ structure = 'P(3,1)*Metric(1,2) - P(2,1)*Metric(1,3)')
4191
4192 VVVS5 = Lorentz(name = 'VVVS5',
4193 spins = [ 3, 3, 3, 1 ],
4194- structure = 'Epsilon(1,2,3,-1)*P(-1,2) + Epsilon(1,2,3,-1)*P(-1,3) + Epsilon(1,2,3,-1)*P(-1,4)')
4195+ structure = 'P(2,3)*Metric(1,3) - P(1,3)*Metric(2,3)')
4196
4197 VVVS6 = Lorentz(name = 'VVVS6',
4198 spins = [ 3, 3, 3, 1 ],
4199- structure = 'Epsilon(1,2,3,-1)*P(-1,1) + Epsilon(1,2,3,-1)*P(-1,2) + Epsilon(1,2,3,-1)*P(-1,3) + 3*Epsilon(1,2,3,-1)*P(-1,4)')
4200+ structure = 'P(3,1)*Metric(1,2) - P(3,2)*Metric(1,2) - P(2,1)*Metric(1,3) + P(2,3)*Metric(1,3) + P(1,2)*Metric(2,3) - P(1,3)*Metric(2,3)')
4201
4202 VVVS7 = Lorentz(name = 'VVVS7',
4203 spins = [ 3, 3, 3, 1 ],
4204- structure = 'P(3,1)*Metric(1,2) - P(2,1)*Metric(1,3)')
4205+ structure = 'P(3,2)*Metric(1,2) - P(3,4)*Metric(1,2) - P(2,3)*Metric(1,3) + P(2,4)*Metric(1,3) - P(1,2)*Metric(2,3) + P(1,3)*Metric(2,3)')
4206
4207 VVVS8 = Lorentz(name = 'VVVS8',
4208 spins = [ 3, 3, 3, 1 ],
4209- structure = 'P(2,3)*Metric(1,3) - P(1,3)*Metric(2,3)')
4210-
4211-VVVS9 = Lorentz(name = 'VVVS9',
4212- spins = [ 3, 3, 3, 1 ],
4213- structure = 'P(3,1)*Metric(1,2) - P(3,2)*Metric(1,2) - P(2,1)*Metric(1,3) + P(2,3)*Metric(1,3) + P(1,2)*Metric(2,3) - P(1,3)*Metric(2,3)')
4214-
4215-VVVS10 = Lorentz(name = 'VVVS10',
4216- spins = [ 3, 3, 3, 1 ],
4217- structure = 'P(3,2)*Metric(1,2) - P(3,4)*Metric(1,2) - P(2,3)*Metric(1,3) + P(2,4)*Metric(1,3) - P(1,2)*Metric(2,3) + P(1,3)*Metric(2,3)')
4218-
4219-VVVS11 = Lorentz(name = 'VVVS11',
4220- spins = [ 3, 3, 3, 1 ],
4221- structure = 'P(3,1)*Metric(1,2) - P(3,2)*Metric(1,2) - P(2,1)*Metric(1,3) + P(2,4)*Metric(1,3) + P(1,2)*Metric(2,3) - P(1,4)*Metric(2,3)')
4222+ structure = 'P(3,1)*Metric(1,2) - P(3,2)*Metric(1,2) - P(2,1)*Metric(1,3) + P(2,4)*Metric(1,3) + P(1,2)*Metric(2,3) - P(1,4)*Metric(2,3)')
4223+
4224+VVVV1 = Lorentz(name = 'VVVV1',
4225+ spins = [ 3, 3, 3, 3 ],
4226+ structure = 'Metric(1,4)*Metric(2,3) - Metric(1,3)*Metric(2,4)')
4227+
4228+VVVV2 = Lorentz(name = 'VVVV2',
4229+ spins = [ 3, 3, 3, 3 ],
4230+ structure = '2*Epsilon(1,2,3,4)*P(-1,1)*P(-1,3) - 2*Epsilon(1,2,3,4)*P(-1,2)*P(-1,3) - 2*Epsilon(1,2,3,4)*P(-1,1)*P(-1,4) + 2*Epsilon(1,2,3,4)*P(-1,2)*P(-1,4) + 2*Epsilon(2,3,4,-1)*P(-1,3)*P(1,2) - 2*Epsilon(2,3,4,-1)*P(-1,4)*P(1,2) + 2*Epsilon(2,3,4,-1)*P(-1,1)*P(1,3) + 2*Epsilon(2,3,4,-1)*P(-1,2)*P(1,3) - 2*Epsilon(2,3,4,-1)*P(-1,1)*P(1,4) - 2*Epsilon(2,3,4,-1)*P(-1,2)*P(1,4) + 2*Epsilon(1,3,4,-1)*P(-1,3)*P(2,1) - 2*Epsilon(1,3,4,-1)*P(-1,4)*P(2,1) + 2*Epsilon(1,3,4,-1)*P(-1,1)*P(2,3) + 2*Epsilon(1,3,4,-1)*P(-1,2)*P(2,3) - 2*Epsilon(1,3,4,-1)*P(-1,1)*P(2,4) - 2*Epsilon(1,3,4,-1)*P(-1,2)*P(2,4) + 2*Epsilon(1,2,4,-1)*P(-1,3)*P(3,1) + 2*Epsilon(1,2,4,-1)*P(-1,4)*P(3,1) - 2*Epsilon(1,2,4,-1)*P(-1,3)*P(3,2) - 2*Epsilon(1,2,4,-1)*P(-1,4)*P(3,2) + 2*Epsilon(1,2,4,-1)*P(-1,1)*P(3,4) - 2*Epsilon(1,2,4,-1)*P(-1,2)*P(3,4) + 2*Epsilon(1,2,3,-1)*P(-1,3)*P(4,1) + 2*Epsilon(1,2,3,-1)*P(-1,4)*P(4,1) - 2*Epsilon(1,2,3,-1)*P(-1,3)*P(4,2) - 2*Epsilon(1,2,3,-1)*P(-1,4)*P(4,2) + 2*Epsilon(1,2,3,-1)*P(-1,1)*P(4,3) - 2*Epsilon(1,2,3,-1)*P(-1,2)*P(4,3) - 2*Epsilon(3,4,-1,-2)*P(-2,3)*P(-1,1)*Metric(1,2) + 2*Epsilon(3,4,-1,-2)*P(-2,4)*P(-1,1)*Metric(1,2) - 2*Epsilon(3,4,-1,-2)*P(-2,3)*P(-1,2)*Metric(1,2) + 2*Epsilon(3,4,-1,-2)*P(-2,4)*P(-1,2)*Metric(1,2) - Epsilon(2,4,-1,-2)*P(-2,3)*P(-1,1)*Metric(1,3) - 2*Epsilon(2,4,-1,-2)*P(-2,4)*P(-1,1)*Metric(1,3) + Epsilon(2,4,-1,-2)*P(-2,1)*P(-1,3)*Metric(1,3) + 2*Epsilon(2,4,-1,-2)*P(-2,2)*P(-1,3)*Metric(1,3) - 2*Epsilon(2,3,-1,-2)*P(-2,3)*P(-1,1)*Metric(1,4) - Epsilon(2,3,-1,-2)*P(-2,4)*P(-1,1)*Metric(1,4) + Epsilon(2,3,-1,-2)*P(-2,1)*P(-1,4)*Metric(1,4) + 2*Epsilon(2,3,-1,-2)*P(-2,2)*P(-1,4)*Metric(1,4) - Epsilon(1,4,-1,-2)*P(-2,3)*P(-1,2)*Metric(2,3) - 2*Epsilon(1,4,-1,-2)*P(-2,4)*P(-1,2)*Metric(2,3) + 2*Epsilon(1,4,-1,-2)*P(-2,1)*P(-1,3)*Metric(2,3) + Epsilon(1,4,-1,-2)*P(-2,2)*P(-1,3)*Metric(2,3) - 2*Epsilon(1,3,-1,-2)*P(-2,3)*P(-1,2)*Metric(2,4) - Epsilon(1,3,-1,-2)*P(-2,4)*P(-1,2)*Metric(2,4) + 2*Epsilon(1,3,-1,-2)*P(-2,1)*P(-1,4)*Metric(2,4) + Epsilon(1,3,-1,-2)*P(-2,2)*P(-1,4)*Metric(2,4) - 2*Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3)*Metric(3,4) + 2*Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3)*Metric(3,4) - 2*Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,4)*Metric(3,4) + 2*Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,4)*Metric(3,4)')
4231+
4232+VVVV3 = Lorentz(name = 'VVVV3',
4233+ spins = [ 3, 3, 3, 3 ],
4234+ structure = '2*Epsilon(1,2,3,4)*P(-1,1)*P(-1,2) - 2*Epsilon(1,2,3,4)*P(-1,1)*P(-1,3) - 2*Epsilon(1,2,3,4)*P(-1,2)*P(-1,4) + 2*Epsilon(1,2,3,4)*P(-1,3)*P(-1,4) + 2*Epsilon(2,3,4,-1)*P(-1,1)*P(1,2) + 2*Epsilon(2,3,4,-1)*P(-1,4)*P(1,2) - 2*Epsilon(2,3,4,-1)*P(-1,1)*P(1,3) - 2*Epsilon(2,3,4,-1)*P(-1,4)*P(1,3) + 2*Epsilon(2,3,4,-1)*P(-1,2)*P(1,4) - 2*Epsilon(2,3,4,-1)*P(-1,3)*P(1,4) - 2*Epsilon(1,3,4,-1)*P(-1,2)*P(2,1) - 2*Epsilon(1,3,4,-1)*P(-1,3)*P(2,1) - 2*Epsilon(1,3,4,-1)*P(-1,1)*P(2,3) + 2*Epsilon(1,3,4,-1)*P(-1,4)*P(2,3) + 2*Epsilon(1,3,4,-1)*P(-1,2)*P(2,4) + 2*Epsilon(1,3,4,-1)*P(-1,3)*P(2,4) - 2*Epsilon(1,2,4,-1)*P(-1,2)*P(3,1) - 2*Epsilon(1,2,4,-1)*P(-1,3)*P(3,1) - 2*Epsilon(1,2,4,-1)*P(-1,1)*P(3,2) + 2*Epsilon(1,2,4,-1)*P(-1,4)*P(3,2) + 2*Epsilon(1,2,4,-1)*P(-1,2)*P(3,4) + 2*Epsilon(1,2,4,-1)*P(-1,3)*P(3,4) + 2*Epsilon(1,2,3,-1)*P(-1,2)*P(4,1) - 2*Epsilon(1,2,3,-1)*P(-1,3)*P(4,1) + 2*Epsilon(1,2,3,-1)*P(-1,1)*P(4,2) + 2*Epsilon(1,2,3,-1)*P(-1,4)*P(4,2) - 2*Epsilon(1,2,3,-1)*P(-1,1)*P(4,3) - 2*Epsilon(1,2,3,-1)*P(-1,4)*P(4,3) + Epsilon(3,4,-1,-2)*P(-2,2)*P(-1,1)*Metric(1,2) + 2*Epsilon(3,4,-1,-2)*P(-2,3)*P(-1,1)*Metric(1,2) - Epsilon(3,4,-1,-2)*P(-2,1)*P(-1,2)*Metric(1,2) - 2*Epsilon(3,4,-1,-2)*P(-2,4)*P(-1,2)*Metric(1,2) + 2*Epsilon(2,4,-1,-2)*P(-2,2)*P(-1,1)*Metric(1,3) + Epsilon(2,4,-1,-2)*P(-2,3)*P(-1,1)*Metric(1,3) - Epsilon(2,4,-1,-2)*P(-2,1)*P(-1,3)*Metric(1,3) - 2*Epsilon(2,4,-1,-2)*P(-2,4)*P(-1,3)*Metric(1,3) - 2*Epsilon(2,3,-1,-2)*P(-2,2)*P(-1,1)*Metric(1,4) + 2*Epsilon(2,3,-1,-2)*P(-2,3)*P(-1,1)*Metric(1,4) - 2*Epsilon(2,3,-1,-2)*P(-2,2)*P(-1,4)*Metric(1,4) + 2*Epsilon(2,3,-1,-2)*P(-2,3)*P(-1,4)*Metric(1,4) - 2*Epsilon(1,4,-1,-2)*P(-2,1)*P(-1,2)*Metric(2,3) + 2*Epsilon(1,4,-1,-2)*P(-2,4)*P(-1,2)*Metric(2,3) - 2*Epsilon(1,4,-1,-2)*P(-2,1)*P(-1,3)*Metric(2,3) + 2*Epsilon(1,4,-1,-2)*P(-2,4)*P(-1,3)*Metric(2,3) + 2*Epsilon(1,3,-1,-2)*P(-2,1)*P(-1,2)*Metric(2,4) + Epsilon(1,3,-1,-2)*P(-2,4)*P(-1,2)*Metric(2,4) - Epsilon(1,3,-1,-2)*P(-2,2)*P(-1,4)*Metric(2,4) - 2*Epsilon(1,3,-1,-2)*P(-2,3)*P(-1,4)*Metric(2,4) + 2*Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3)*Metric(3,4) + Epsilon(1,2,-1,-2)*P(-2,4)*P(-1,3)*Metric(3,4) - 2*Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,4)*Metric(3,4) - Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,4)*Metric(3,4)')
4235+
4236+VVVV4 = Lorentz(name = 'VVVV4',
4237+ spins = [ 3, 3, 3, 3 ],
4238+ structure = 'Metric(1,4)*Metric(2,3) + Metric(1,3)*Metric(2,4) - 2*Metric(1,2)*Metric(3,4)')
4239+
4240+VVVV5 = Lorentz(name = 'VVVV5',
4241+ spins = [ 3, 3, 3, 3 ],
4242+ structure = 'Metric(1,4)*Metric(2,3) - Metric(1,2)*Metric(3,4)')
4243
4244 VVVV6 = Lorentz(name = 'VVVV6',
4245 spins = [ 3, 3, 3, 3 ],
4246- structure = 'Metric(1,4)*Metric(2,3) - Metric(1,3)*Metric(2,4)')
4247+ structure = 'Metric(1,3)*Metric(2,4) - Metric(1,2)*Metric(3,4)')
4248
4249 VVVV7 = Lorentz(name = 'VVVV7',
4250 spins = [ 3, 3, 3, 3 ],
4251- structure = 'Epsilon(1,2,3,4)*P(-1,1)*P(-1,3) - Epsilon(1,2,3,4)*P(-1,2)*P(-1,3) - Epsilon(1,2,3,4)*P(-1,1)*P(-1,4) + Epsilon(1,2,3,4)*P(-1,2)*P(-1,4) + Epsilon(2,3,4,-1)*P(-1,3)*P(1,2) - Epsilon(2,3,4,-1)*P(-1,4)*P(1,2) + Epsilon(2,3,4,-1)*P(-1,1)*P(1,3) + Epsilon(2,3,4,-1)*P(-1,2)*P(1,3) - Epsilon(2,3,4,-1)*P(-1,1)*P(1,4) - Epsilon(2,3,4,-1)*P(-1,2)*P(1,4) + Epsilon(1,3,4,-1)*P(-1,3)*P(2,1) - Epsilon(1,3,4,-1)*P(-1,4)*P(2,1) + Epsilon(1,3,4,-1)*P(-1,1)*P(2,3) + Epsilon(1,3,4,-1)*P(-1,2)*P(2,3) - Epsilon(1,3,4,-1)*P(-1,1)*P(2,4) - Epsilon(1,3,4,-1)*P(-1,2)*P(2,4) + Epsilon(1,2,4,-1)*P(-1,3)*P(3,1) + Epsilon(1,2,4,-1)*P(-1,4)*P(3,1) - Epsilon(1,2,4,-1)*P(-1,3)*P(3,2) - Epsilon(1,2,4,-1)*P(-1,4)*P(3,2) + Epsilon(1,2,4,-1)*P(-1,1)*P(3,4) - Epsilon(1,2,4,-1)*P(-1,2)*P(3,4) + Epsilon(1,2,3,-1)*P(-1,3)*P(4,1) + Epsilon(1,2,3,-1)*P(-1,4)*P(4,1) - Epsilon(1,2,3,-1)*P(-1,3)*P(4,2) - Epsilon(1,2,3,-1)*P(-1,4)*P(4,2) + Epsilon(1,2,3,-1)*P(-1,1)*P(4,3) - Epsilon(1,2,3,-1)*P(-1,2)*P(4,3) - (Epsilon(3,4,-1,-2)*P(-2,3)*P(-1,1)*Metric(1,2))/2. + (Epsilon(3,4,-1,-2)*P(-2,4)*P(-1,1)*Metric(1,2))/2. - (Epsilon(3,4,-1,-2)*P(-2,3)*P(-1,2)*Metric(1,2))/2. + (Epsilon(3,4,-1,-2)*P(-2,4)*P(-1,2)*Metric(1,2))/2. + (Epsilon(3,4,-1,-2)*P(-2,1)*P(-1,3)*Metric(1,2))/2. + (Epsilon(3,4,-1,-2)*P(-2,2)*P(-1,3)*Metric(1,2))/2. - (Epsilon(3,4,-1,-2)*P(-2,1)*P(-1,4)*Metric(1,2))/2. - (Epsilon(3,4,-1,-2)*P(-2,2)*P(-1,4)*Metric(1,2))/2. - (Epsilon(2,4,-1,-2)*P(-2,3)*P(-1,1)*Metric(1,3))/2. - (Epsilon(2,4,-1,-2)*P(-2,4)*P(-1,1)*Metric(1,3))/2. - (Epsilon(2,4,-1,-2)*P(-2,3)*P(-1,2)*Metric(1,3))/2. + (Epsilon(2,4,-1,-2)*P(-2,1)*P(-1,3)*Metric(1,3))/2. + (Epsilon(2,4,-1,-2)*P(-2,2)*P(-1,3)*Metric(1,3))/2. + (Epsilon(2,4,-1,-2)*P(-2,1)*P(-1,4)*Metric(1,3))/2. - (Epsilon(2,3,-1,-2)*P(-2,3)*P(-1,1)*Metric(1,4))/2. - (Epsilon(2,3,-1,-2)*P(-2,4)*P(-1,1)*Metric(1,4))/2. - (Epsilon(2,3,-1,-2)*P(-2,4)*P(-1,2)*Metric(1,4))/2. + (Epsilon(2,3,-1,-2)*P(-2,1)*P(-1,3)*Metric(1,4))/2. + (Epsilon(2,3,-1,-2)*P(-2,1)*P(-1,4)*Metric(1,4))/2. + (Epsilon(2,3,-1,-2)*P(-2,2)*P(-1,4)*Metric(1,4))/2. - (Epsilon(1,4,-1,-2)*P(-2,3)*P(-1,1)*Metric(2,3))/2. - (Epsilon(1,4,-1,-2)*P(-2,3)*P(-1,2)*Metric(2,3))/2. - (Epsilon(1,4,-1,-2)*P(-2,4)*P(-1,2)*Metric(2,3))/2. + (Epsilon(1,4,-1,-2)*P(-2,1)*P(-1,3)*Metric(2,3))/2. + (Epsilon(1,4,-1,-2)*P(-2,2)*P(-1,3)*Metric(2,3))/2. + (Epsilon(1,4,-1,-2)*P(-2,2)*P(-1,4)*Metric(2,3))/2. - (Epsilon(1,3,-1,-2)*P(-2,4)*P(-1,1)*Metric(2,4))/2. - (Epsilon(1,3,-1,-2)*P(-2,3)*P(-1,2)*Metric(2,4))/2. - (Epsilon(1,3,-1,-2)*P(-2,4)*P(-1,2)*Metric(2,4))/2. + (Epsilon(1,3,-1,-2)*P(-2,2)*P(-1,3)*Metric(2,4))/2. + (Epsilon(1,3,-1,-2)*P(-2,1)*P(-1,4)*Metric(2,4))/2. + (Epsilon(1,3,-1,-2)*P(-2,2)*P(-1,4)*Metric(2,4))/2. + (Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,1)*Metric(3,4))/2. + (Epsilon(1,2,-1,-2)*P(-2,4)*P(-1,1)*Metric(3,4))/2. - (Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,2)*Metric(3,4))/2. - (Epsilon(1,2,-1,-2)*P(-2,4)*P(-1,2)*Metric(3,4))/2. - (Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3)*Metric(3,4))/2. + (Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3)*Metric(3,4))/2. - (Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,4)*Metric(3,4))/2. + (Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,4)*Metric(3,4))/2.')
4252+ structure = 'Metric(1,4)*Metric(2,3) - (Metric(1,3)*Metric(2,4))/2. - (Metric(1,2)*Metric(3,4))/2.')
4253
4254 VVVV8 = Lorentz(name = 'VVVV8',
4255 spins = [ 3, 3, 3, 3 ],
4256- structure = 'Epsilon(1,2,3,4)*P(-1,1)*P(-1,2) - Epsilon(1,2,3,4)*P(-1,1)*P(-1,3) - Epsilon(1,2,3,4)*P(-1,2)*P(-1,4) + Epsilon(1,2,3,4)*P(-1,3)*P(-1,4) + Epsilon(2,3,4,-1)*P(-1,1)*P(1,2) + Epsilon(2,3,4,-1)*P(-1,4)*P(1,2) - Epsilon(2,3,4,-1)*P(-1,1)*P(1,3) - Epsilon(2,3,4,-1)*P(-1,4)*P(1,3) + Epsilon(2,3,4,-1)*P(-1,2)*P(1,4) - Epsilon(2,3,4,-1)*P(-1,3)*P(1,4) - Epsilon(1,3,4,-1)*P(-1,2)*P(2,1) - Epsilon(1,3,4,-1)*P(-1,3)*P(2,1) - Epsilon(1,3,4,-1)*P(-1,1)*P(2,3) + Epsilon(1,3,4,-1)*P(-1,4)*P(2,3) + Epsilon(1,3,4,-1)*P(-1,2)*P(2,4) + Epsilon(1,3,4,-1)*P(-1,3)*P(2,4) - Epsilon(1,2,4,-1)*P(-1,2)*P(3,1) - Epsilon(1,2,4,-1)*P(-1,3)*P(3,1) - Epsilon(1,2,4,-1)*P(-1,1)*P(3,2) + Epsilon(1,2,4,-1)*P(-1,4)*P(3,2) + Epsilon(1,2,4,-1)*P(-1,2)*P(3,4) + Epsilon(1,2,4,-1)*P(-1,3)*P(3,4) + Epsilon(1,2,3,-1)*P(-1,2)*P(4,1) - Epsilon(1,2,3,-1)*P(-1,3)*P(4,1) + Epsilon(1,2,3,-1)*P(-1,1)*P(4,2) + Epsilon(1,2,3,-1)*P(-1,4)*P(4,2) - Epsilon(1,2,3,-1)*P(-1,1)*P(4,3) - Epsilon(1,2,3,-1)*P(-1,4)*P(4,3) + (Epsilon(3,4,-1,-2)*P(-2,2)*P(-1,1)*Metric(1,2))/2. + (Epsilon(3,4,-1,-2)*P(-2,3)*P(-1,1)*Metric(1,2))/2. - (Epsilon(3,4,-1,-2)*P(-2,1)*P(-1,2)*Metric(1,2))/2. - (Epsilon(3,4,-1,-2)*P(-2,4)*P(-1,2)*Metric(1,2))/2. - (Epsilon(3,4,-1,-2)*P(-2,1)*P(-1,3)*Metric(1,2))/2. + (Epsilon(3,4,-1,-2)*P(-2,2)*P(-1,4)*Metric(1,2))/2. + (Epsilon(2,4,-1,-2)*P(-2,2)*P(-1,1)*Metric(1,3))/2. + (Epsilon(2,4,-1,-2)*P(-2,3)*P(-1,1)*Metric(1,3))/2. - (Epsilon(2,4,-1,-2)*P(-2,1)*P(-1,2)*Metric(1,3))/2. - (Epsilon(2,4,-1,-2)*P(-2,1)*P(-1,3)*Metric(1,3))/2. - (Epsilon(2,4,-1,-2)*P(-2,4)*P(-1,3)*Metric(1,3))/2. + (Epsilon(2,4,-1,-2)*P(-2,3)*P(-1,4)*Metric(1,3))/2. - (Epsilon(2,3,-1,-2)*P(-2,2)*P(-1,1)*Metric(1,4))/2. + (Epsilon(2,3,-1,-2)*P(-2,3)*P(-1,1)*Metric(1,4))/2. + (Epsilon(2,3,-1,-2)*P(-2,1)*P(-1,2)*Metric(1,4))/2. + (Epsilon(2,3,-1,-2)*P(-2,4)*P(-1,2)*Metric(1,4))/2. - (Epsilon(2,3,-1,-2)*P(-2,1)*P(-1,3)*Metric(1,4))/2. - (Epsilon(2,3,-1,-2)*P(-2,4)*P(-1,3)*Metric(1,4))/2. - (Epsilon(2,3,-1,-2)*P(-2,2)*P(-1,4)*Metric(1,4))/2. + (Epsilon(2,3,-1,-2)*P(-2,3)*P(-1,4)*Metric(1,4))/2. + (Epsilon(1,4,-1,-2)*P(-2,2)*P(-1,1)*Metric(2,3))/2. + (Epsilon(1,4,-1,-2)*P(-2,3)*P(-1,1)*Metric(2,3))/2. - (Epsilon(1,4,-1,-2)*P(-2,1)*P(-1,2)*Metric(2,3))/2. + (Epsilon(1,4,-1,-2)*P(-2,4)*P(-1,2)*Metric(2,3))/2. - (Epsilon(1,4,-1,-2)*P(-2,1)*P(-1,3)*Metric(2,3))/2. + (Epsilon(1,4,-1,-2)*P(-2,4)*P(-1,3)*Metric(2,3))/2. - (Epsilon(1,4,-1,-2)*P(-2,2)*P(-1,4)*Metric(2,3))/2. - (Epsilon(1,4,-1,-2)*P(-2,3)*P(-1,4)*Metric(2,3))/2. - (Epsilon(1,3,-1,-2)*P(-2,2)*P(-1,1)*Metric(2,4))/2. + (Epsilon(1,3,-1,-2)*P(-2,1)*P(-1,2)*Metric(2,4))/2. + (Epsilon(1,3,-1,-2)*P(-2,4)*P(-1,2)*Metric(2,4))/2. + (Epsilon(1,3,-1,-2)*P(-2,4)*P(-1,3)*Metric(2,4))/2. - (Epsilon(1,3,-1,-2)*P(-2,2)*P(-1,4)*Metric(2,4))/2. - (Epsilon(1,3,-1,-2)*P(-2,3)*P(-1,4)*Metric(2,4))/2. - (Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,1)*Metric(3,4))/2. + (Epsilon(1,2,-1,-2)*P(-2,4)*P(-1,2)*Metric(3,4))/2. + (Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3)*Metric(3,4))/2. + (Epsilon(1,2,-1,-2)*P(-2,4)*P(-1,3)*Metric(3,4))/2. - (Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,4)*Metric(3,4))/2. - (Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,4)*Metric(3,4))/2.')
4257+ structure = 'P(3,2)*P(4,1)*Metric(1,2) - P(3,1)*P(4,2)*Metric(1,2) + P(3,4)*P(4,2)*Metric(1,2) + P(3,1)*P(4,3)*Metric(1,2) + P(2,3)*P(4,1)*Metric(1,3) + P(2,1)*P(4,2)*Metric(1,3) - P(2,1)*P(4,3)*Metric(1,3) + P(2,4)*P(4,3)*Metric(1,3) - P(2,3)*P(3,1)*Metric(1,4) - P(2,1)*P(3,2)*Metric(1,4) - P(2,4)*P(3,2)*Metric(1,4) - P(2,3)*P(3,4)*Metric(1,4) - P(1,2)*P(4,1)*Metric(2,3) - P(1,3)*P(4,1)*Metric(2,3) - P(1,4)*P(4,2)*Metric(2,3) - P(1,4)*P(4,3)*Metric(2,3) + P(-1,1)*P(-1,2)*Metric(1,4)*Metric(2,3) + P(-1,1)*P(-1,3)*Metric(1,4)*Metric(2,3) + P(-1,2)*P(-1,4)*Metric(1,4)*Metric(2,3) + P(-1,3)*P(-1,4)*Metric(1,4)*Metric(2,3) + P(1,2)*P(3,1)*Metric(2,4) + P(1,4)*P(3,2)*Metric(2,4) - P(1,2)*P(3,4)*Metric(2,4) + P(1,3)*P(3,4)*Metric(2,4) - P(-1,1)*P(-1,2)*Metric(1,3)*Metric(2,4) - P(-1,3)*P(-1,4)*Metric(1,3)*Metric(2,4) + P(1,3)*P(2,1)*Metric(3,4) + P(1,4)*P(2,3)*Metric(3,4) + P(1,2)*P(2,4)*Metric(3,4) - P(1,3)*P(2,4)*Metric(3,4) - P(-1,1)*P(-1,3)*Metric(1,2)*Metric(3,4) - P(-1,2)*P(-1,4)*Metric(1,2)*Metric(3,4)')
4258
4259 VVVV9 = Lorentz(name = 'VVVV9',
4260 spins = [ 3, 3, 3, 3 ],
4261- structure = 'Metric(1,4)*Metric(2,3) + Metric(1,3)*Metric(2,4) - 2*Metric(1,2)*Metric(3,4)')
4262-
4263-VVVV10 = Lorentz(name = 'VVVV10',
4264- spins = [ 3, 3, 3, 3 ],
4265- structure = 'Metric(1,4)*Metric(2,3) - Metric(1,2)*Metric(3,4)')
4266-
4267-VVVV11 = Lorentz(name = 'VVVV11',
4268- spins = [ 3, 3, 3, 3 ],
4269- structure = 'Metric(1,3)*Metric(2,4) - Metric(1,2)*Metric(3,4)')
4270-
4271-VVVV12 = Lorentz(name = 'VVVV12',
4272- spins = [ 3, 3, 3, 3 ],
4273- structure = 'Metric(1,4)*Metric(2,3) - (Metric(1,3)*Metric(2,4))/2. - (Metric(1,2)*Metric(3,4))/2.')
4274-
4275-VVVV13 = Lorentz(name = 'VVVV13',
4276- spins = [ 3, 3, 3, 3 ],
4277- structure = 'P(3,2)*P(4,1)*Metric(1,2) - P(3,1)*P(4,2)*Metric(1,2) + P(3,4)*P(4,2)*Metric(1,2) + P(3,1)*P(4,3)*Metric(1,2) + P(2,3)*P(4,1)*Metric(1,3) + P(2,1)*P(4,2)*Metric(1,3) - P(2,1)*P(4,3)*Metric(1,3) + P(2,4)*P(4,3)*Metric(1,3) - P(2,3)*P(3,1)*Metric(1,4) - P(2,1)*P(3,2)*Metric(1,4) - P(2,4)*P(3,2)*Metric(1,4) - P(2,3)*P(3,4)*Metric(1,4) - P(1,2)*P(4,1)*Metric(2,3) - P(1,3)*P(4,1)*Metric(2,3) - P(1,4)*P(4,2)*Metric(2,3) - P(1,4)*P(4,3)*Metric(2,3) + P(-1,1)*P(-1,2)*Metric(1,4)*Metric(2,3) + P(-1,1)*P(-1,3)*Metric(1,4)*Metric(2,3) + P(-1,2)*P(-1,4)*Metric(1,4)*Metric(2,3) + P(-1,3)*P(-1,4)*Metric(1,4)*Metric(2,3) + P(1,2)*P(3,1)*Metric(2,4) + P(1,4)*P(3,2)*Metric(2,4) - P(1,2)*P(3,4)*Metric(2,4) + P(1,3)*P(3,4)*Metric(2,4) - P(-1,1)*P(-1,2)*Metric(1,3)*Metric(2,4) - P(-1,3)*P(-1,4)*Metric(1,3)*Metric(2,4) + P(1,3)*P(2,1)*Metric(3,4) + P(1,4)*P(2,3)*Metric(3,4) + P(1,2)*P(2,4)*Metric(3,4) - P(1,3)*P(2,4)*Metric(3,4) - P(-1,1)*P(-1,3)*Metric(1,2)*Metric(3,4) - P(-1,2)*P(-1,4)*Metric(1,2)*Metric(3,4)')
4278-
4279-VVVV14 = Lorentz(name = 'VVVV14',
4280- spins = [ 3, 3, 3, 3 ],
4281- structure = 'P(3,4)*P(4,1)*Metric(1,2) + P(3,4)*P(4,2)*Metric(1,2) + P(3,1)*P(4,3)*Metric(1,2) + P(3,2)*P(4,3)*Metric(1,2) + P(2,3)*P(4,1)*Metric(1,3) - P(2,4)*P(4,1)*Metric(1,3) - P(2,3)*P(4,2)*Metric(1,3) - P(2,1)*P(4,3)*Metric(1,3) - P(2,3)*P(3,1)*Metric(1,4) + P(2,4)*P(3,1)*Metric(1,4) - P(2,4)*P(3,2)*Metric(1,4) - P(2,1)*P(3,4)*Metric(1,4) - P(1,3)*P(4,1)*Metric(2,3) + P(1,3)*P(4,2)*Metric(2,3) - P(1,4)*P(4,2)*Metric(2,3) - P(1,2)*P(4,3)*Metric(2,3) + P(-1,1)*P(-1,3)*Metric(1,4)*Metric(2,3) + P(-1,2)*P(-1,4)*Metric(1,4)*Metric(2,3) - P(1,4)*P(3,1)*Metric(2,4) - P(1,3)*P(3,2)*Metric(2,4) + P(1,4)*P(3,2)*Metric(2,4) - P(1,2)*P(3,4)*Metric(2,4) + P(-1,2)*P(-1,3)*Metric(1,3)*Metric(2,4) + P(-1,1)*P(-1,4)*Metric(1,3)*Metric(2,4) + P(1,3)*P(2,1)*Metric(3,4) + P(1,4)*P(2,1)*Metric(3,4) + P(1,2)*P(2,3)*Metric(3,4) + P(1,2)*P(2,4)*Metric(3,4) - P(-1,1)*P(-1,3)*Metric(1,2)*Metric(3,4) - P(-1,2)*P(-1,3)*Metric(1,2)*Metric(3,4) - P(-1,1)*P(-1,4)*Metric(1,2)*Metric(3,4) - P(-1,2)*P(-1,4)*Metric(1,2)*Metric(3,4)')
4282+ structure = 'P(3,4)*P(4,1)*Metric(1,2) + P(3,4)*P(4,2)*Metric(1,2) + P(3,1)*P(4,3)*Metric(1,2) + P(3,2)*P(4,3)*Metric(1,2) + P(2,3)*P(4,1)*Metric(1,3) - P(2,4)*P(4,1)*Metric(1,3) - P(2,3)*P(4,2)*Metric(1,3) - P(2,1)*P(4,3)*Metric(1,3) - P(2,3)*P(3,1)*Metric(1,4) + P(2,4)*P(3,1)*Metric(1,4) - P(2,4)*P(3,2)*Metric(1,4) - P(2,1)*P(3,4)*Metric(1,4) - P(1,3)*P(4,1)*Metric(2,3) + P(1,3)*P(4,2)*Metric(2,3) - P(1,4)*P(4,2)*Metric(2,3) - P(1,2)*P(4,3)*Metric(2,3) + P(-1,1)*P(-1,3)*Metric(1,4)*Metric(2,3) + P(-1,2)*P(-1,4)*Metric(1,4)*Metric(2,3) - P(1,4)*P(3,1)*Metric(2,4) - P(1,3)*P(3,2)*Metric(2,4) + P(1,4)*P(3,2)*Metric(2,4) - P(1,2)*P(3,4)*Metric(2,4) + P(-1,2)*P(-1,3)*Metric(1,3)*Metric(2,4) + P(-1,1)*P(-1,4)*Metric(1,3)*Metric(2,4) + P(1,3)*P(2,1)*Metric(3,4) + P(1,4)*P(2,1)*Metric(3,4) + P(1,2)*P(2,3)*Metric(3,4) + P(1,2)*P(2,4)*Metric(3,4) - P(-1,1)*P(-1,3)*Metric(1,2)*Metric(3,4) - P(-1,2)*P(-1,3)*Metric(1,2)*Metric(3,4) - P(-1,1)*P(-1,4)*Metric(1,2)*Metric(3,4) - P(-1,2)*P(-1,4)*Metric(1,2)*Metric(3,4)')
4283
4284 VVVSS1 = Lorentz(name = 'VVVSS1',
4285 spins = [ 3, 3, 3, 1, 1 ],
4286- structure = 'Epsilon(1,2,3,-1)*P(-1,1) + Epsilon(1,2,3,-1)*P(-1,2) + Epsilon(1,2,3,-1)*P(-1,4) + Epsilon(1,2,3,-1)*P(-1,5)')
4287+ structure = '2*Epsilon(1,2,3,-1)*P(-1,1) + 2*Epsilon(1,2,3,-1)*P(-1,2) + 2*Epsilon(1,2,3,-1)*P(-1,4) + 2*Epsilon(1,2,3,-1)*P(-1,5)')
4288
4289 VVVSS2 = Lorentz(name = 'VVVSS2',
4290 spins = [ 3, 3, 3, 1, 1 ],
4291- structure = 'Epsilon(1,2,3,-1)*P(-1,2) + Epsilon(1,2,3,-1)*P(-1,3) + Epsilon(1,2,3,-1)*P(-1,4) + Epsilon(1,2,3,-1)*P(-1,5)')
4292+ structure = '2*Epsilon(1,2,3,-1)*P(-1,2) + 2*Epsilon(1,2,3,-1)*P(-1,3) + 2*Epsilon(1,2,3,-1)*P(-1,4) + 2*Epsilon(1,2,3,-1)*P(-1,5)')
4293
4294 VVVSS3 = Lorentz(name = 'VVVSS3',
4295 spins = [ 3, 3, 3, 1, 1 ],
4296- structure = 'Epsilon(1,2,3,-1)*P(-1,1) + Epsilon(1,2,3,-1)*P(-1,2) + Epsilon(1,2,3,-1)*P(-1,3) + 3*Epsilon(1,2,3,-1)*P(-1,4) + 3*Epsilon(1,2,3,-1)*P(-1,5)')
4297+ structure = '2*Epsilon(1,2,3,-1)*P(-1,1) + 2*Epsilon(1,2,3,-1)*P(-1,2) + 2*Epsilon(1,2,3,-1)*P(-1,3) + 6*Epsilon(1,2,3,-1)*P(-1,4) + 6*Epsilon(1,2,3,-1)*P(-1,5)')
4298
4299 VVVSS4 = Lorentz(name = 'VVVSS4',
4300 spins = [ 3, 3, 3, 1, 1 ],
4301
4302=== modified file 'models/EWdim6/object_library.py'
4303--- models/EWdim6/object_library.py 2012-06-14 15:45:15 +0000
4304+++ models/EWdim6/object_library.py 2013-03-04 23:37:19 +0000
4305@@ -241,19 +241,31 @@
4306 self.expansion_order = expansion_order
4307 self.hierarchy = hierarchy
4308
4309-
4310 all_decays = []
4311
4312-class Decay(object):
4313-
4314- def __init__(self, name, particle, partial_widths):
4315-
4316+class Decay(UFOBaseClass):
4317+ require_args = ['particle','partial_widths']
4318+
4319+ def __init__(self, particle, partial_widths, **opt):
4320+ args = (particle, partial_widths)
4321+ UFOBaseClass.__init__(self, *args, **opt)
4322+
4323 global all_decays
4324 all_decays.append(self)
4325-
4326- self.name = name
4327- self.particle = particle
4328- self.partial_width = partial_widths
4329-
4330+
4331+ # Add the information directly to the particle
4332+ particle.partial_widths = partial_widths
4333+
4334+all_form_factors = []
4335+
4336+class FormFactor(UFOBaseClass):
4337+ require_args = ['name','type','value']
4338+
4339+ def __init__(self, name, type, value, **opt):
4340+ args = (name, type, value)
4341+ UFOBaseClass.__init__(self, *args, **opt)
4342+
4343+ global all_form_factors
4344+ all_form_factors.append(self)
4345
4346
4347
4348=== modified file 'models/EWdim6/parameters.py'
4349--- models/EWdim6/parameters.py 2012-06-14 15:45:15 +0000
4350+++ models/EWdim6/parameters.py 2013-03-04 23:37:19 +0000
4351@@ -1,13 +1,13 @@
4352-# This file was automatically created by FeynRules 1.7.9
4353-# Mathematica version: 8.0 for Linux x86 (64-bit) (February 23, 2011)
4354-# Date: Fri 18 May 2012 14:43:24
4355+# This file was automatically created by FeynRules 1.7.127
4356+# Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010)
4357+# Date: Tue 22 Jan 2013 16:20:54
4358
4359
4360
4361 from object_library import all_parameters, Parameter
4362
4363
4364-from function_library import complexconjugate, re, im, csc, sec, acsc, asec
4365+from function_library import complexconjugate, re, im, csc, sec, acsc, asec, cot
4366
4367 # This is a default parameter object representing 0.
4368 ZERO = Parameter(name = 'ZERO',
4369@@ -17,14 +17,6 @@
4370 texname = '0')
4371
4372 # User-defined parameters.
4373-cabi = Parameter(name = 'cabi',
4374- nature = 'external',
4375- type = 'real',
4376- value = 0.227736,
4377- texname = '\\theta _c',
4378- lhablock = 'CKMBLOCK',
4379- lhacode = [ 1 ])
4380-
4381 CWWWL2 = Parameter(name = 'CWWWL2',
4382 nature = 'external',
4383 type = 'real',
4384@@ -89,37 +81,37 @@
4385 lhablock = 'SMINPUTS',
4386 lhacode = [ 3 ])
4387
4388-ymdo = Parameter(name = 'ymdo',
4389- nature = 'external',
4390- type = 'real',
4391- value = 0.00504,
4392- texname = '\\text{ymdo}',
4393- lhablock = 'YUKAWA',
4394- lhacode = [ 1 ])
4395-
4396-ymup = Parameter(name = 'ymup',
4397- nature = 'external',
4398- type = 'real',
4399- value = 0.0025499999999999997,
4400- texname = '\\text{ymup}',
4401- lhablock = 'YUKAWA',
4402- lhacode = [ 2 ])
4403-
4404-yms = Parameter(name = 'yms',
4405- nature = 'external',
4406- type = 'real',
4407- value = 0.101,
4408- texname = '\\text{yms}',
4409- lhablock = 'YUKAWA',
4410- lhacode = [ 3 ])
4411-
4412-ymc = Parameter(name = 'ymc',
4413- nature = 'external',
4414- type = 'real',
4415- value = 1.27,
4416- texname = '\\text{ymc}',
4417- lhablock = 'YUKAWA',
4418- lhacode = [ 4 ])
4419+lamWS = Parameter(name = 'lamWS',
4420+ nature = 'external',
4421+ type = 'real',
4422+ value = 0,
4423+ texname = '\\text{lamWS}',
4424+ lhablock = 'Wolfenstein',
4425+ lhacode = [ 1 ])
4426+
4427+AWS = Parameter(name = 'AWS',
4428+ nature = 'external',
4429+ type = 'real',
4430+ value = 0,
4431+ texname = '\\text{AWS}',
4432+ lhablock = 'Wolfenstein',
4433+ lhacode = [ 2 ])
4434+
4435+rhoWS = Parameter(name = 'rhoWS',
4436+ nature = 'external',
4437+ type = 'real',
4438+ value = 0,
4439+ texname = '\\text{rhoWS}',
4440+ lhablock = 'Wolfenstein',
4441+ lhacode = [ 3 ])
4442+
4443+etaWS = Parameter(name = 'etaWS',
4444+ nature = 'external',
4445+ type = 'real',
4446+ value = 0,
4447+ texname = '\\text{etaWS}',
4448+ lhablock = 'Wolfenstein',
4449+ lhacode = [ 4 ])
4450
4451 ymb = Parameter(name = 'ymb',
4452 nature = 'external',
4453@@ -137,22 +129,6 @@
4454 lhablock = 'YUKAWA',
4455 lhacode = [ 6 ])
4456
4457-yme = Parameter(name = 'yme',
4458- nature = 'external',
4459- type = 'real',
4460- value = 0.0005110000000000001,
4461- texname = '\\text{yme}',
4462- lhablock = 'YUKAWA',
4463- lhacode = [ 11 ])
4464-
4465-ymm = Parameter(name = 'ymm',
4466- nature = 'external',
4467- type = 'real',
4468- value = 0.10566,
4469- texname = '\\text{ymm}',
4470- lhablock = 'YUKAWA',
4471- lhacode = [ 13 ])
4472-
4473 ymtau = Parameter(name = 'ymtau',
4474 nature = 'external',
4475 type = 'real',
4476@@ -161,46 +137,6 @@
4477 lhablock = 'YUKAWA',
4478 lhacode = [ 15 ])
4479
4480-Me = Parameter(name = 'Me',
4481- nature = 'external',
4482- type = 'real',
4483- value = 0.0005110000000000001,
4484- texname = '\\text{Me}',
4485- lhablock = 'MASS',
4486- lhacode = [ 11 ])
4487-
4488-MM = Parameter(name = 'MM',
4489- nature = 'external',
4490- type = 'real',
4491- value = 0.10566,
4492- texname = '\\text{MM}',
4493- lhablock = 'MASS',
4494- lhacode = [ 13 ])
4495-
4496-MTA = Parameter(name = 'MTA',
4497- nature = 'external',
4498- type = 'real',
4499- value = 1.777,
4500- texname = '\\text{MTA}',
4501- lhablock = 'MASS',
4502- lhacode = [ 15 ])
4503-
4504-MU = Parameter(name = 'MU',
4505- nature = 'external',
4506- type = 'real',
4507- value = 0.0025499999999999997,
4508- texname = 'M',
4509- lhablock = 'MASS',
4510- lhacode = [ 2 ])
4511-
4512-MC = Parameter(name = 'MC',
4513- nature = 'external',
4514- type = 'real',
4515- value = 1.42,
4516- texname = '\\text{MC}',
4517- lhablock = 'MASS',
4518- lhacode = [ 4 ])
4519-
4520 MT = Parameter(name = 'MT',
4521 nature = 'external',
4522 type = 'real',
4523@@ -209,22 +145,6 @@
4524 lhablock = 'MASS',
4525 lhacode = [ 6 ])
4526
4527-MD = Parameter(name = 'MD',
4528- nature = 'external',
4529- type = 'real',
4530- value = 0.00504,
4531- texname = '\\text{MD}',
4532- lhablock = 'MASS',
4533- lhacode = [ 1 ])
4534-
4535-MS = Parameter(name = 'MS',
4536- nature = 'external',
4537- type = 'real',
4538- value = 0.101,
4539- texname = '\\text{MS}',
4540- lhablock = 'MASS',
4541- lhacode = [ 3 ])
4542-
4543 MB = Parameter(name = 'MB',
4544 nature = 'external',
4545 type = 'real',
4546@@ -249,6 +169,14 @@
4547 lhablock = 'MASS',
4548 lhacode = [ 25 ])
4549
4550+MTA = Parameter(name = 'MTA',
4551+ nature = 'external',
4552+ type = 'real',
4553+ value = 1.777,
4554+ texname = '\\text{MTA}',
4555+ lhablock = 'MASS',
4556+ lhacode = [ 15 ])
4557+
4558 WT = Parameter(name = 'WT',
4559 nature = 'external',
4560 type = 'real',
4561@@ -281,64 +209,60 @@
4562 lhablock = 'DECAY',
4563 lhacode = [ 25 ])
4564
4565-aEW = Parameter(name = 'aEW',
4566- nature = 'internal',
4567- type = 'real',
4568- value = '1/aEWM1',
4569- texname = '\\text{aEW}')
4570-
4571-G = Parameter(name = 'G',
4572- nature = 'internal',
4573- type = 'real',
4574- value = '2*cmath.sqrt(aS)*cmath.sqrt(cmath.pi)',
4575- texname = 'G')
4576+WTau = Parameter(name = 'WTau',
4577+ nature = 'external',
4578+ type = 'real',
4579+ value = 2.27e-12,
4580+ texname = '\\text{WTau}',
4581+ lhablock = 'DECAY',
4582+ lhacode = [ 15 ])
4583
4584 CKM1x1 = Parameter(name = 'CKM1x1',
4585 nature = 'internal',
4586 type = 'complex',
4587- value = 'cmath.cos(cabi)',
4588+ value = '1 - lamWS**2/2.',
4589 texname = '\\text{CKM1x1}')
4590
4591 CKM1x2 = Parameter(name = 'CKM1x2',
4592 nature = 'internal',
4593 type = 'complex',
4594- value = 'cmath.sin(cabi)',
4595+ value = 'lamWS',
4596 texname = '\\text{CKM1x2}')
4597
4598 CKM1x3 = Parameter(name = 'CKM1x3',
4599 nature = 'internal',
4600 type = 'complex',
4601- value = '0',
4602+ value = 'AWS*lamWS**3*(-(etaWS*complex(0,1)) + rhoWS)',
4603 texname = '\\text{CKM1x3}')
4604
4605 CKM2x1 = Parameter(name = 'CKM2x1',
4606 nature = 'internal',
4607 type = 'complex',
4608- value = '-cmath.sin(cabi)',
4609+ value = '-lamWS',
4610 texname = '\\text{CKM2x1}')
4611
4612 CKM2x2 = Parameter(name = 'CKM2x2',
4613 nature = 'internal',
4614 type = 'complex',
4615- value = 'cmath.cos(cabi)',
4616+ value = '1 - lamWS**2/2.',
4617 texname = '\\text{CKM2x2}')
4618
4619 CKM2x3 = Parameter(name = 'CKM2x3',
4620 nature = 'internal',
4621 type = 'complex',
4622- value = '0',
4623+ value = 'AWS*lamWS**2',
4624 texname = '\\text{CKM2x3}')
4625
4626 CKM3x1 = Parameter(name = 'CKM3x1',
4627 nature = 'internal',
4628 type = 'complex',
4629- value = '0',
4630+ value = 'AWS*lamWS**3*(1 - etaWS*complex(0,1) - rhoWS)',
4631 texname = '\\text{CKM3x1}')
4632
4633 CKM3x2 = Parameter(name = 'CKM3x2',
4634 nature = 'internal',
4635 type = 'complex',
4636- value = '0',
4637+ value = '-(AWS*lamWS**2)',
4638 texname = '\\text{CKM3x2}')
4639
4640 CKM3x3 = Parameter(name = 'CKM3x3',
4641@@ -347,6 +271,18 @@
4642 value = '1',
4643 texname = '\\text{CKM3x3}')
4644
4645+aEW = Parameter(name = 'aEW',
4646+ nature = 'internal',
4647+ type = 'real',
4648+ value = '1/aEWM1',
4649+ texname = '\\text{aEW}')
4650+
4651+G = Parameter(name = 'G',
4652+ nature = 'internal',
4653+ type = 'real',
4654+ value = '2*cmath.sqrt(aS)*cmath.sqrt(cmath.pi)',
4655+ texname = 'G')
4656+
4657 MW = Parameter(name = 'MW',
4658 nature = 'internal',
4659 type = 'real',
4660@@ -407,36 +343,6 @@
4661 value = '(ymb*cmath.sqrt(2))/v',
4662 texname = '\\text{yb}')
4663
4664-yc = Parameter(name = 'yc',
4665- nature = 'internal',
4666- type = 'real',
4667- value = '(ymc*cmath.sqrt(2))/v',
4668- texname = '\\text{yc}')
4669-
4670-ydo = Parameter(name = 'ydo',
4671- nature = 'internal',
4672- type = 'real',
4673- value = '(ymdo*cmath.sqrt(2))/v',
4674- texname = '\\text{ydo}')
4675-
4676-ye = Parameter(name = 'ye',
4677- nature = 'internal',
4678- type = 'real',
4679- value = '(yme*cmath.sqrt(2))/v',
4680- texname = '\\text{ye}')
4681-
4682-ym = Parameter(name = 'ym',
4683- nature = 'internal',
4684- type = 'real',
4685- value = '(ymm*cmath.sqrt(2))/v',
4686- texname = '\\text{ym}')
4687-
4688-ys = Parameter(name = 'ys',
4689- nature = 'internal',
4690- type = 'real',
4691- value = '(yms*cmath.sqrt(2))/v',
4692- texname = '\\text{ys}')
4693-
4694 yt = Parameter(name = 'yt',
4695 nature = 'internal',
4696 type = 'real',
4697@@ -449,12 +355,6 @@
4698 value = '(ymtau*cmath.sqrt(2))/v',
4699 texname = '\\text{ytau}')
4700
4701-yup = Parameter(name = 'yup',
4702- nature = 'internal',
4703- type = 'real',
4704- value = '(ymup*cmath.sqrt(2))/v',
4705- texname = '\\text{yup}')
4706-
4707 muH = Parameter(name = 'muH',
4708 nature = 'internal',
4709 type = 'real',
4710
4711=== modified file 'models/EWdim6/particles.py'
4712--- models/EWdim6/particles.py 2012-06-14 15:45:15 +0000
4713+++ models/EWdim6/particles.py 2013-03-04 23:37:19 +0000
4714@@ -1,6 +1,6 @@
4715-# This file was automatically created by FeynRules 1.7.9
4716-# Mathematica version: 8.0 for Linux x86 (64-bit) (February 23, 2011)
4717-# Date: Fri 18 May 2012 14:43:24
4718+# This file was automatically created by FeynRules 1.7.127
4719+# Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010)
4720+# Date: Tue 22 Jan 2013 16:20:54
4721
4722
4723 from __future__ import division
4724@@ -52,57 +52,12 @@
4725
4726 vt__tilde__ = vt.anti()
4727
4728-e__minus__ = Particle(pdg_code = 11,
4729- name = 'e-',
4730- antiname = 'e+',
4731- spin = 2,
4732- color = 1,
4733- mass = Param.Me,
4734- width = Param.ZERO,
4735- texname = 'e-',
4736- antitexname = 'e+',
4737- charge = -1,
4738- GhostNumber = 0,
4739- LeptonNumber = 1)
4740-
4741-e__plus__ = e__minus__.anti()
4742-
4743-m__minus__ = Particle(pdg_code = 13,
4744- name = 'm-',
4745- antiname = 'm+',
4746- spin = 2,
4747- color = 1,
4748- mass = Param.MM,
4749- width = Param.ZERO,
4750- texname = 'm-',
4751- antitexname = 'm+',
4752- charge = -1,
4753- GhostNumber = 0,
4754- LeptonNumber = 1)
4755-
4756-m__plus__ = m__minus__.anti()
4757-
4758-tt__minus__ = Particle(pdg_code = 15,
4759- name = 'tt-',
4760- antiname = 'tt+',
4761- spin = 2,
4762- color = 1,
4763- mass = Param.MTA,
4764- width = Param.ZERO,
4765- texname = 'tt-',
4766- antitexname = 'tt+',
4767- charge = -1,
4768- GhostNumber = 0,
4769- LeptonNumber = 1)
4770-
4771-tt__plus__ = tt__minus__.anti()
4772-
4773 u = Particle(pdg_code = 2,
4774 name = 'u',
4775 antiname = 'u~',
4776 spin = 2,
4777 color = 3,
4778- mass = Param.MU,
4779+ mass = Param.ZERO,
4780 width = Param.ZERO,
4781 texname = 'u',
4782 antitexname = 'u~',
4783@@ -117,7 +72,7 @@
4784 antiname = 'c~',
4785 spin = 2,
4786 color = 3,
4787- mass = Param.MC,
4788+ mass = Param.ZERO,
4789 width = Param.ZERO,
4790 texname = 'c',
4791 antitexname = 'c~',
4792@@ -147,7 +102,7 @@
4793 antiname = 'd~',
4794 spin = 2,
4795 color = 3,
4796- mass = Param.MD,
4797+ mass = Param.ZERO,
4798 width = Param.ZERO,
4799 texname = 'd',
4800 antitexname = 'd~',
4801@@ -162,7 +117,7 @@
4802 antiname = 's~',
4803 spin = 2,
4804 color = 3,
4805- mass = Param.MS,
4806+ mass = Param.ZERO,
4807 width = Param.ZERO,
4808 texname = 's',
4809 antitexname = 's~',
4810@@ -359,3 +314,48 @@
4811
4812 phi__minus__ = phi__plus__.anti()
4813
4814+e__minus__ = Particle(pdg_code = 11,
4815+ name = 'e-',
4816+ antiname = 'e+',
4817+ spin = 2,
4818+ color = 1,
4819+ mass = Param.ZERO,
4820+ width = Param.ZERO,
4821+ texname = 'e-',
4822+ antitexname = 'e+',
4823+ charge = -1,
4824+ GhostNumber = 0,
4825+ LeptonNumber = 1)
4826+
4827+e__plus__ = e__minus__.anti()
4828+
4829+m__minus__ = Particle(pdg_code = 13,
4830+ name = 'm-',
4831+ antiname = 'm+',
4832+ spin = 2,
4833+ color = 1,
4834+ mass = Param.ZERO,
4835+ width = Param.ZERO,
4836+ texname = 'm-',
4837+ antitexname = 'm+',
4838+ charge = -1,
4839+ GhostNumber = 0,
4840+ LeptonNumber = 1)
4841+
4842+m__plus__ = m__minus__.anti()
4843+
4844+tt__minus__ = Particle(pdg_code = 15,
4845+ name = 'tt-',
4846+ antiname = 'tt+',
4847+ spin = 2,
4848+ color = 1,
4849+ mass = Param.MTA,
4850+ width = Param.WTau,
4851+ texname = 'tt-',
4852+ antitexname = 'tt+',
4853+ charge = -1,
4854+ GhostNumber = 0,
4855+ LeptonNumber = 1)
4856+
4857+tt__plus__ = tt__minus__.anti()
4858+
4859
4860=== modified file 'models/EWdim6/vertices.py'
4861--- models/EWdim6/vertices.py 2012-06-14 15:45:15 +0000
4862+++ models/EWdim6/vertices.py 2013-03-04 23:37:19 +0000
4863@@ -1,6 +1,6 @@
4864-# This file was automatically created by FeynRules 1.7.9
4865-# Mathematica version: 8.0 for Linux x86 (64-bit) (February 23, 2011)
4866-# Date: Fri 18 May 2012 14:43:24
4867+# This file was automatically created by FeynRules 1.7.127
4868+# Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010)
4869+# Date: Tue 22 Jan 2013 16:20:54
4870
4871
4872 from object_library import all_vertices, Vertex
4873@@ -12,26 +12,26 @@
4874 V_1 = Vertex(name = 'V_1',
4875 particles = [ P.H, P.H, P.H, P.H ],
4876 color = [ '1' ],
4877- lorentz = [ L.SSSS2 ],
4878+ lorentz = [ L.SSSS1 ],
4879 couplings = {(0,0):C.GC_31})
4880
4881 V_2 = Vertex(name = 'V_2',
4882 particles = [ P.H, P.H, P.H ],
4883 color = [ '1' ],
4884- lorentz = [ L.SSS2 ],
4885+ lorentz = [ L.SSS1 ],
4886 couplings = {(0,0):C.GC_95})
4887
4888 V_3 = Vertex(name = 'V_3',
4889 particles = [ P.A, P.A, P.H, P.H ],
4890 color = [ '1' ],
4891- lorentz = [ L.VVSS12, L.VVSS6 ],
4892- couplings = {(0,0):C.GC_83,(0,1):C.GC_82})
4893+ lorentz = [ L.VVSS3, L.VVSS9 ],
4894+ couplings = {(0,1):C.GC_83,(0,0):C.GC_82})
4895
4896 V_4 = Vertex(name = 'V_4',
4897 particles = [ P.A, P.A, P.H ],
4898 color = [ '1' ],
4899- lorentz = [ L.VVS11, L.VVS7 ],
4900- couplings = {(0,0):C.GC_123,(0,1):C.GC_122})
4901+ lorentz = [ L.VVS4, L.VVS9 ],
4902+ couplings = {(0,1):C.GC_123,(0,0):C.GC_122})
4903
4904 V_5 = Vertex(name = 'V_5',
4905 particles = [ P.A, P.H, P.H ],
4906@@ -42,62 +42,62 @@
4907 V_6 = Vertex(name = 'V_6',
4908 particles = [ P.A, P.W__minus__, P.W__plus__ ],
4909 color = [ '1' ],
4910- lorentz = [ L.VVV10, L.VVV11, L.VVV12, L.VVV13, L.VVV5, L.VVV6, L.VVV7 ],
4911- couplings = {(0,5):C.GC_113,(0,4):C.GC_105,(0,2):C.GC_57,(0,3):C.GC_55,(0,0):[ C.GC_47, C.GC_114 ],(0,6):C.GC_104,(0,1):C.GC_106})
4912+ lorentz = [ L.VVV10, L.VVV2, L.VVV3, L.VVV4, L.VVV7, L.VVV8, L.VVV9 ],
4913+ couplings = {(0,2):C.GC_113,(0,1):C.GC_105,(0,6):C.GC_57,(0,0):C.GC_55,(0,4):[ C.GC_47, C.GC_114 ],(0,3):C.GC_104,(0,5):C.GC_106})
4914
4915 V_7 = Vertex(name = 'V_7',
4916- particles = [ P.W__minus__, P.W__plus__, P.Z ],
4917+ particles = [ P.A, P.Z, P.H, P.H ],
4918 color = [ '1' ],
4919- lorentz = [ L.VVV10, L.VVV12, L.VVV13, L.VVV4, L.VVV6, L.VVV8, L.VVV9 ],
4920- couplings = {(0,4):C.GC_107,(0,3):C.GC_111,(0,1):C.GC_20,(0,2):C.GC_18,(0,0):[ C.GC_7, C.GC_108 ],(0,5):C.GC_112,(0,6):C.GC_110})
4921+ lorentz = [ L.VVSS1, L.VVSS2, L.VVSS3, L.VVSS7, L.VVSS8, L.VVSS9 ],
4922+ couplings = {(0,3):C.GC_81,(0,5):C.GC_76,(0,4):C.GC_80,(0,2):C.GC_50,(0,0):C.GC_65,(0,1):C.GC_9})
4923
4924 V_8 = Vertex(name = 'V_8',
4925- particles = [ P.A, P.Z, P.H, P.H ],
4926+ particles = [ P.A, P.Z, P.H ],
4927 color = [ '1' ],
4928- lorentz = [ L.VVSS10, L.VVSS11, L.VVSS12, L.VVSS5, L.VVSS6, L.VVSS7 ],
4929- couplings = {(0,0):C.GC_81,(0,2):C.GC_76,(0,1):C.GC_80,(0,4):C.GC_50,(0,3):C.GC_65,(0,5):C.GC_9})
4930+ lorentz = [ L.VVS1, L.VVS3, L.VVS4, L.VVS7, L.VVS8, L.VVS9 ],
4931+ couplings = {(0,3):C.GC_121,(0,5):C.GC_116,(0,4):C.GC_120,(0,2):C.GC_97,(0,0):C.GC_103,(0,1):C.GC_86})
4932
4933 V_9 = Vertex(name = 'V_9',
4934- particles = [ P.A, P.Z, P.H ],
4935+ particles = [ P.Z, P.H, P.H ],
4936 color = [ '1' ],
4937- lorentz = [ L.VVS10, L.VVS11, L.VVS5, L.VVS6, L.VVS7, L.VVS9 ],
4938- couplings = {(0,5):C.GC_121,(0,1):C.GC_116,(0,0):C.GC_120,(0,4):C.GC_97,(0,2):C.GC_103,(0,3):C.GC_86})
4939+ lorentz = [ L.VSS1 ],
4940+ couplings = {(0,0):C.GC_8})
4941
4942 V_10 = Vertex(name = 'V_10',
4943- particles = [ P.Z, P.H, P.H ],
4944+ particles = [ P.W__minus__, P.W__plus__, P.Z ],
4945 color = [ '1' ],
4946- lorentz = [ L.VSS1 ],
4947- couplings = {(0,0):C.GC_8})
4948+ lorentz = [ L.VVV1, L.VVV10, L.VVV3, L.VVV5, L.VVV6, L.VVV7, L.VVV9 ],
4949+ couplings = {(0,2):C.GC_107,(0,0):C.GC_111,(0,6):C.GC_20,(0,1):C.GC_18,(0,5):[ C.GC_7, C.GC_108 ],(0,3):C.GC_112,(0,4):C.GC_110})
4950
4951 V_11 = Vertex(name = 'V_11',
4952 particles = [ P.ghG, P.ghG__tilde__, P.G ],
4953- color = [ 'f(3,1,2)' ],
4954- lorentz = [ L.UUV2 ],
4955+ color = [ 'f(1,2,3)' ],
4956+ lorentz = [ L.UUV1 ],
4957 couplings = {(0,0):C.GC_4})
4958
4959 V_12 = Vertex(name = 'V_12',
4960 particles = [ P.G, P.G, P.G ],
4961 color = [ 'f(1,2,3)' ],
4962- lorentz = [ L.VVV10 ],
4963+ lorentz = [ L.VVV7 ],
4964 couplings = {(0,0):C.GC_4})
4965
4966 V_13 = Vertex(name = 'V_13',
4967 particles = [ P.G, P.G, P.G, P.G ],
4968 color = [ 'f(-1,1,2)*f(3,4,-1)', 'f(-1,1,3)*f(2,4,-1)', 'f(-1,1,4)*f(2,3,-1)' ],
4969- lorentz = [ L.VVVV10, L.VVVV11, L.VVVV6 ],
4970- couplings = {(1,0):C.GC_6,(0,2):C.GC_6,(2,1):C.GC_6})
4971+ lorentz = [ L.VVVV1, L.VVVV5, L.VVVV6 ],
4972+ couplings = {(1,1):C.GC_6,(0,0):C.GC_6,(2,2):C.GC_6})
4973
4974 V_14 = Vertex(name = 'V_14',
4975 particles = [ P.A, P.A, P.W__minus__, P.W__plus__ ],
4976 color = [ '1' ],
4977- lorentz = [ L.VVVV14, L.VVVV7, L.VVVV9 ],
4978- couplings = {(0,1):C.GC_67,(0,0):C.GC_68,(0,2):[ C.GC_66, C.GC_128 ]})
4979+ lorentz = [ L.VVVV2, L.VVVV4, L.VVVV9 ],
4980+ couplings = {(0,0):C.GC_67,(0,2):C.GC_68,(0,1):[ C.GC_66, C.GC_128 ]})
4981
4982 V_15 = Vertex(name = 'V_15',
4983 particles = [ P.A, P.W__minus__, P.W__plus__, P.Z ],
4984 color = [ '1' ],
4985- lorentz = [ L.VVVV12, L.VVVV13, L.VVVV8 ],
4986- couplings = {(0,2):C.GC_58,(0,1):C.GC_59,(0,0):[ C.GC_49, C.GC_127 ]})
4987+ lorentz = [ L.VVVV3, L.VVVV7, L.VVVV8 ],
4988+ couplings = {(0,0):C.GC_58,(0,2):C.GC_59,(0,1):[ C.GC_49, C.GC_127 ]})
4989
4990 V_16 = Vertex(name = 'V_16',
4991 particles = [ P.A, P.W__minus__, P.W__plus__, P.H, P.H ],
4992@@ -108,20 +108,20 @@
4993 V_17 = Vertex(name = 'V_17',
4994 particles = [ P.A, P.W__minus__, P.W__plus__, P.H ],
4995 color = [ '1' ],
4996- lorentz = [ L.VVVS10, L.VVVS5, L.VVVS6, L.VVVS7, L.VVVS9 ],
4997- couplings = {(0,2):C.GC_101,(0,1):C.GC_90,(0,3):C.GC_89,(0,4):C.GC_102,(0,0):C.GC_91})
4998+ lorentz = [ L.VVVS2, L.VVVS3, L.VVVS4, L.VVVS6, L.VVVS7 ],
4999+ couplings = {(0,1):C.GC_101,(0,0):C.GC_90,(0,2):C.GC_89,(0,3):C.GC_102,(0,4):C.GC_91})
5000
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches