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
=== modified file 'Template/Cards/delphes_card_ATLAS.dat'
--- Template/Cards/delphes_card_ATLAS.dat 2010-10-30 03:26:37 +0000
+++ Template/Cards/delphes_card_ATLAS.dat 2013-03-04 23:37:19 +0000
@@ -1,135 +1,499 @@
1DETECTOR CARD # DO NOT REMOVE THIS IS A TAG!1#######################################
22# Order of execution of various modules
3# Detector extension, in pseudorapidity units3#######################################
4CEN_max_tracker 2.5 // Maximum tracker coverage 4
5CEN_max_calo_cen 3.2 // central calorimeter coverage5set ExecutionPath {
6CEN_max_calo_fwd 4.9 // forward calorimeter pseudorapidity coverage6 ParticlePropagator
7CEN_max_mu 2.7 // muon chambers pseudorapidity coverage7
8 8 ChargedHadronTrackingEfficiency
9# Energy resolution for electron/photon9 ElectronTrackingEfficiency
10# \sigma/E = C + N/E + S/\sqrt{E}, E in GeV10 MuonTrackingEfficiency
11ELG_Scen 0.10 // S term for central ECAL #http://arxiv.org/pdf/physics/0608012v111
12ELG_Ncen 0.0 // N term for central ECAL #http://arxiv.org/pdf/physics/0608012v112 ChargedHadronMomentumSmearing
13ELG_Ccen 0.0017 // C term for central ECAL #http://arxiv.org/pdf/physics/0608012v113 ElectronEnergySmearing
14ELG_Sfwd 0.30407 // S term for forward FCAL #http://villaolmo.mib.infn.it/ICATPP9th_2005/Calorimetry/Schram.p.pdf14 MuonMomentumSmearing
15ELG_Nfwd 1.1533 // N term for central FCAL #http://villaolmo.mib.infn.it/ICATPP9th_2005/Calorimetry/Schram.p.pdf15
16ELG_Cfwd 0.0313 // C term for forward FCAL #http://villaolmo.mib.infn.it/ICATPP9th_2005/Calorimetry/Schram.p.pdf16 TrackMerger
17ELG_Szdc 0.70 // S term for ZDC17 Calorimeter
18ELG_Nzdc 0.0 // N term for ZDC18 EFlowMerger
19ELG_Czdc 0.08 // C term for ZDC19
2020 PhotonEfficiency
2121 PhotonIsolation
22# Energy resolution for hadrons in ecal/hcal/hf22
23# \sigma/E = C + N/E + S/\sqrt{E}, E in GeV23 ElectronEfficiency
24HAD_Shcal 0.58 // S term for central HCAL #http://arxiv.org/pdf/hep-ex/0004009v124 ElectronIsolation
25HAD_Nhcal 1.7 // N term for central HCAL #http://arxiv.org/pdf/hep-ex/0004009v125
26HAD_Chcal 0.025 // C term for central HCAL #http://arxiv.org/pdf/hep-ex/0004009v126 MuonEfficiency
27HAD_Shf 0.9681 // S term for FCAL #http://villaolmo.mib.infn.it/ICATPP9th_2005/Calorimetry/Schram.p.pdf27 MuonIsolation
28HAD_Nhf 0. // N term for FCAL #http://villaolmo.mib.infn.it/ICATPP9th_2005/Calorimetry/Schram.p.pdf28
29HAD_Chf 0.0524 // C term for FCAL #http://villaolmo.mib.infn.it/ICATPP9th_2005/Calorimetry/Schram.p.pdf29 MissingET
30HAD_Szdc 1.38 // S term for ZDC30
31HAD_Nzdc 0. // N term for ZDC31 FastJetFinder
32HAD_Czdc 0.13 // C term for ZDC32 BTagging
3333 TauTagging
34# Time resolution for ZDC/RP220/RP42034
35ZDC_T_resolution 0 // in s35 UniqueObjectFinder
36RP220_T_resolution 0 // in s36
37RP420_T_resolution 0 // in s37 ScalarHT
3838
39# Muon smearing39 TreeWriter
40MU_SmearPt 0.01 // transverse momentum Pt in GeV40}
4141
42# Tracking efficiencies42#################################
43TRACK_ptmin 0.9 // minimal pt needed to reach the calorimeter in GeV43# Propagate particles in cylinder
44TRACK_eff 90 // efficiency associated to the tracking (%)44#################################
4545
46# Calorimetric towers46module ParticlePropagator ParticlePropagator {
47TOWER_number 3847 set InputArray Delphes/stableParticles
48TOWER_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 48
49## list of the edges of each tower in eta for eta>0 assuming a symmetric detector in eta<049 set OutputArray stableParticles
50### the list starts with the lower edge of the most central tower50 set ChargedHadronOutputArray chargedHadrons
51### the list ends with the higher edged of the most forward tower51 set ElectronOutputArray electrons
52### there should be NTOWER+1 values52 set MuonOutputArray muons
53TOWER_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 2053
54### list of the tower size in phi (in degrees), assuming that all towers are similar in phi for a given eta value54 # radius of the magnetic field coverage, in m
55### the list starts with the phi-size of the most central tower (eta=0)55 set Radius 1.15
56### the list ends with the phi-size of the most forward tower56 # half-length of the magnetic field coverage, in m
57### there should be NTOWER values57 set HalfLength 3.51
58##58
59#59 # magnetic field
6060 set Bz 2.0
61# Thresholds for reconstructed objetcs, Pt in GeV61}
62PTCUT_elec 10.062
63PTCUT_muon 10.063####################################
64PTCUT_jet 20.064# Charged hadron tracking efficiency
65PTCUT_gamma 10.065####################################
66PTCUT_taujet 10.066
6767module Efficiency ChargedHadronTrackingEfficiency {
68# Thresholds for reconstructed objects in ZDC, E in GeV68 set InputArray ParticlePropagator/chargedHadrons
69ZDC_gamma_E 2069 set OutputArray chargedHadrons
70ZDC_n_E 5070
7171 # add EfficiencyFormula {efficiency formula as a function of eta and pt}
72# Charged lepton isolation. Pt and Et in GeV72
73ISOL_PT 2.0 //minimal pt of tracks for isolation criteria73 # tracking efficiency formula for charged hadrons
74ISOL_Cone 0.5 //Cone for isolation criteria74 set EfficiencyFormula { (pt <= 0.1) * (0.00) + \
75ISOL_Calo_ET 1E99 //minimal tower transverse energy for isolation criteria. 1E99 means "off"75 (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.70) + \
76ISOL_Calo_Cone 0.4 //Cone for calorimetric isolation76 (abs(eta) <= 1.5) * (pt > 1.0) * (0.95) + \
77ISOL_Calo_Grid 3 //Grid size (N x N) for calorimetric isolation77 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.60) + \
7878 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0) * (0.85) + \
79# General jet variable79 (abs(eta) > 2.5) * (0.00)}
80JET_coneradius 0.7 // generic jet radius ; not for tau's !!!80}
81JET_jetalgo 1 // 1 for Cone algorithm, 2 for MidPoint algorithm, 3 for SIScone algorithm, 4 for kt algorithm81
82JET_seed 1.0 // minimum seed to start jet reconstruction, in GeV82##############################
83JET_Eflow 0 // Perfect energy assumed in the tracker coverage83# Electron tracking efficiency
8484##############################
85# Tagging definition85
86BTAG_b 50 // b-tag efficiency (%)86module Efficiency ElectronTrackingEfficiency {
87BTAG_mistag_c 10 // mistagging (%)87 set InputArray ParticlePropagator/electrons
88BTAG_mistag_l 1 // mistagging (%)88 set OutputArray electrons
8989
90# FLAGS90 # set EfficiencyFormula {efficiency formula as a function of eta and pt}
91FLAG_bfield 1 // 1 to run the bfield propagation else 091
92FLAG_vfd 1 // 1 to run the very forward detectors else 092 # tracking efficiency formula for electrons
93FLAG_RP 1 // 1 to run the very forward detectors else 093 set EfficiencyFormula { (pt <= 0.1) * (0.00) + \
94FLAG_trigger 1 // 1 to run the trigger selection else 094 (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.73) + \
95FLAG_frog 0 // 1 to run the FROG event display95 (abs(eta) <= 1.5) * (pt > 1.0 && pt <= 1.0e2) * (0.95) + \
96FLAG_lhco 0 //1 to run the LHCO96 (abs(eta) <= 1.5) * (pt > 1.0e2) * (0.99) + \
9797 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.50) + \
98# In case BField propagation allowed98 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0 && pt <= 1.0e2) * (0.83) + \
99TRACK_radius 115 // radius of the BField coverage, in cm #chapter 1 you gave me99 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0e2) * (0.90) + \
100TRACK_length 351 // length of the BField coverage, in cm #also100 (abs(eta) > 2.5) * (0.00)}
101TRACK_bfield_x 0 // X component of the BField, in T101}
102TRACK_bfield_y 0 // Y component of the BField, in T102
103TRACK_bfield_z 2.0 // Z component of the BField, in T #also103##############################
104104# Muon tracking efficiency
105# Very forward detector extension, in pseudorapidity105##############################
106# if allowed (WARNING: not expected for ATLAS!)106
107VFD_min_calo_vfd 5.2 // very forward calorimeter (if any) like CASTOR107module Efficiency MuonTrackingEfficiency {
108VFD_max_calo_vfd 6.6108 set InputArray ParticlePropagator/muons
109VFD_min_zdc 8.3 // zero-degree neutral calorimeter109 set OutputArray muons
110VFD_s_zdc 140 // distance of the Zero Degree Calorimeter, from the IP, in [m]110
111111 # set EfficiencyFormula {efficiency formula as a function of eta and pt}
112RP_220_s 220 // distance of the RP to the IP, in meters112
113RP_220_x 0.002 // distance of the RP to the beam, in meters113 # tracking efficiency formula for muons
114RP_420_s 420 // distance of the RP to the IP, in meters114 set EfficiencyFormula { (pt <= 0.1) * (0.00) + \
115RP_420_x 0.004 // distance of the RP to the beam, in meters115 (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.75) + \
116RP_beam1Card DELPHESDIR/data/LHCB1IR1.tfs116 (abs(eta) <= 1.5) * (pt > 1.0) * (0.99) + \
117RP_beam2Card DELPHESDIR/data/LHCB2IR1.tfs117 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.70) + \
118RP_IP_name IP1118 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0) * (0.98) + \
119RP_offsetEl_x 0.097 // horizontal separation between both beam, in meters119 (abs(eta) > 2.5) * (0.00)}
120RP_offsetEl_y 0 // vertical separation between both beam, in meters120}
121RP_offsetEl_s 120 // distance of beam separation point, from IP121
122RP_cross_x 0 // IP offset in horizontal plane, in micrometers122########################################
123RP_cross_y +500 // IP offset in vertical plane, in micrometers123# Momentum resolution for charged tracks
124RP_cross_ang_x 142.5 // half-crossing angle in horizontal plane, in microrad124########################################
125RP_cross_ang_y 0 // half-crossing angle in vertical plane, in microrad125
126126module MomentumSmearing ChargedHadronMomentumSmearing {
127127 set InputArray ChargedHadronTrackingEfficiency/chargedHadrons
128# In case FROG event display allowed128 set OutputArray chargedHadrons
129NEvents_Frog 100129
130# Number of events to process130 # set ResolutionFormula {resolution formula as a function of eta and pt}
131NEvents -1 // -1 means 'all'131
132132 # resolution formula for charged hadrons
133# input PDG tables133 set ResolutionFormula { (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.02) + \
134PdgTableFilename DELPHESDIR/data/particle.tbl // table with particle pid,mass,charge,...134 (abs(eta) <= 1.5) * (pt > 1.0 && pt <= 1.0e1) * (0.01) + \
135 (abs(eta) <= 1.5) * (pt > 1.0e1 && pt <= 2.0e2) * (0.03) + \
136 (abs(eta) <= 1.5) * (pt > 2.0e2) * (0.05) + \
137 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.03) + \
138 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0 && pt <= 1.0e1) * (0.02) + \
139 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0e1 && pt <= 2.0e2) * (0.04) + \
140 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 2.0e2) * (0.05)}
141}
142
143#################################
144# Energy resolution for electrons
145#################################
146
147module EnergySmearing ElectronEnergySmearing {
148 set InputArray ElectronTrackingEfficiency/electrons
149 set OutputArray electrons
150
151 # set ResolutionFormula {resolution formula as a function of eta and energy}
152
153 set ResolutionFormula { (abs(eta) <= 2.5) * (energy > 0.1 && energy <= 2.5e1) * (energy*0.015) + \
154 (abs(eta) <= 2.5) * (energy > 2.5e1) * sqrt(energy^2*0.005^2 + energy*0.05^2 + 0.25^2) + \
155 (abs(eta) > 2.5 && abs(eta) <= 3.0) * sqrt(energy^2*0.005^2 + energy*0.05^2 + 0.25^2) + \
156 (abs(eta) > 3.0 && abs(eta) <= 5.0) * sqrt(energy^2*0.107^2 + energy*2.08^2)}
157
158}
159
160###############################
161# Momentum resolution for muons
162###############################
163
164module MomentumSmearing MuonMomentumSmearing {
165 set InputArray MuonTrackingEfficiency/muons
166 set OutputArray muons
167
168 # set ResolutionFormula {resolution formula as a function of eta and pt}
169
170 # resolution formula for muons
171 set ResolutionFormula { (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.03) + \
172 (abs(eta) <= 1.5) * (pt > 1.0 && pt <= 1.0e1) * (0.02) + \
173 (abs(eta) <= 1.5) * (pt > 1.0e1 && pt <= 2.0e2) * (0.03) + \
174 (abs(eta) <= 1.5) * (pt > 2.0e2) * (0.05) + \
175 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.04) + \
176 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0 && pt <= 1.0e1) * (0.03) + \
177 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0e1 && pt <= 2.0e2) * (0.04) + \
178 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 2.0e2) * (0.05)}
179}
180
181##############
182# Track merger
183##############
184
185module Merger TrackMerger {
186# add InputArray InputArray
187 add InputArray ChargedHadronMomentumSmearing/chargedHadrons
188 add InputArray ElectronEnergySmearing/electrons
189 set OutputArray tracks
190}
191
192#############
193# Calorimeter
194#############
195
196module Calorimeter Calorimeter {
197 set ParticleInputArray ParticlePropagator/stableParticles
198 set TrackInputArray TrackMerger/tracks
199
200 set TowerOutputArray towers
201 set PhotonOutputArray photons
202
203 set EFlowTrackOutputArray eflowTracks
204 set EFlowTowerOutputArray eflowTowers
205
206 set pi [expr {acos(-1)}]
207
208 # lists of the edges of each tower in eta and phi
209 # each list starts with the lower edge of the first tower
210 # the list ends with the higher edged of the last tower
211
212 # 10 degrees towers
213 set PhiBins {}
214 for {set i -18} {$i <= 18} {incr i} {
215 add PhiBins [expr {$i * $pi/18.0}]
216 }
217 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} {
218 add EtaPhiBins $eta $PhiBins
219 }
220
221 # 20 degrees towers
222 set PhiBins {}
223 for {set i -9} {$i <= 9} {incr i} {
224 add PhiBins [expr {$i * $pi/9.0}]
225 }
226 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} {
227 add EtaPhiBins $eta $PhiBins
228 }
229
230 # default energy fractions {abs(PDG code)} {Fecal Fhcal}
231 add EnergyFraction {0} {0.0 1.0}
232 # energy fractions for e, gamma and pi0
233 add EnergyFraction {11} {1.0 0.0}
234 add EnergyFraction {22} {1.0 0.0}
235 add EnergyFraction {111} {1.0 0.0}
236 # energy fractions for muon and neutrinos
237 add EnergyFraction {12} {0.0 0.0}
238 add EnergyFraction {13} {0.0 0.0}
239 add EnergyFraction {14} {0.0 0.0}
240 add EnergyFraction {16} {0.0 0.0}
241 # energy fractions for K0short and Lambda
242 add EnergyFraction {310} {0.3 0.7}
243 add EnergyFraction {3122} {0.3 0.7}
244
245 # set ECalResolutionFormula {resolution formula as a function of eta and energy}
246 # http://arxiv.org/pdf/physics/0608012v1 jinst8_08_s08003
247 # http://villaolmo.mib.infn.it/ICATPP9th_2005/Calorimetry/Schram.p.pdf
248 set ECalResolutionFormula { (abs(eta) <= 3.2) * sqrt(energy^2*0.0017^2 + energy*0.101^2) + \
249 (abs(eta) > 3.2 && abs(eta) <= 4.9) * sqrt(energy^2*0.0350^2 + energy*2.085^2)}
250
251 # set HCalResolutionFormula {resolution formula as a function of eta and energy}
252 # http://arxiv.org/pdf/hep-ex/0004009v1
253 # http://villaolmo.mib.infn.it/ICATPP9th_2005/Calorimetry/Schram.p.pdf
254 set HCalResolutionFormula { (abs(eta) <= 1.7) * sqrt(energy^2*0.0302^2 + energy*0.5205^2 + 1.59^2) + \
255 (abs(eta) > 1.7 && abs(eta) <= 3.2) * sqrt(energy^2*0.0500^2 + energy*0.706^2) + \
256 (abs(eta) > 3.2 && abs(eta) <= 4.9) * sqrt(energy^2*0.9420^2 + energy*0.075^2)}
257}
258
259####################
260# Energy flow merger
261####################
262
263module Merger EFlowMerger {
264# add InputArray InputArray
265 add InputArray Calorimeter/eflowTracks
266 add InputArray Calorimeter/eflowTowers
267 add InputArray MuonMomentumSmearing/muons
268 set OutputArray eflow
269}
270
271###################
272# Photon efficiency
273###################
274
275module Efficiency PhotonEfficiency {
276 set InputArray Calorimeter/photons
277 set OutputArray photons
278
279 # set EfficiencyFormula {efficiency formula as a function of eta and pt}
280
281 # efficiency formula for photons
282 set EfficiencyFormula { (pt <= 10.0) * (0.00) + \
283 (abs(eta) <= 1.5) * (pt > 10.0) * (0.95) + \
284 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 10.0) * (0.85) + \
285 (abs(eta) > 2.5) * (0.00)}
286}
287
288##################
289# Photon isolation
290##################
291
292module Isolation PhotonIsolation {
293 set CandidateInputArray PhotonEfficiency/photons
294 set IsolationInputArray EFlowMerger/eflow
295
296 set OutputArray photons
297
298 set DeltaRMax 0.5
299
300 set PTMin 0.5
301
302 set PTRatioMax 0.1
303}
304
305#####################
306# Electron efficiency
307#####################
308
309module Efficiency ElectronEfficiency {
310 set InputArray ElectronEnergySmearing/electrons
311 set OutputArray electrons
312
313 # set EfficiencyFormula {efficiency formula as a function of eta and pt}
314
315 # efficiency formula for electrons
316 set EfficiencyFormula { (pt <= 10.0) * (0.00) + \
317 (abs(eta) <= 1.5) * (pt > 10.0) * (0.95) + \
318 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 10.0) * (0.85) + \
319 (abs(eta) > 2.5) * (0.00)}
320}
321
322####################
323# Electron isolation
324####################
325
326module Isolation ElectronIsolation {
327 set CandidateInputArray ElectronEfficiency/electrons
328 set IsolationInputArray EFlowMerger/eflow
329
330 set OutputArray electrons
331
332 set DeltaRMax 0.5
333
334 set PTMin 0.5
335
336 set PTRatioMax 0.1
337}
338
339#################
340# Muon efficiency
341#################
342
343module Efficiency MuonEfficiency {
344 set InputArray MuonMomentumSmearing/muons
345 set OutputArray muons
346
347 # set EfficiencyFormula {efficiency as a function of eta and pt}
348
349 # efficiency formula for muons
350 set EfficiencyFormula { (pt <= 10.0) * (0.00) + \
351 (abs(eta) <= 1.5) * (pt > 10.0) * (0.95) + \
352 (abs(eta) > 1.5 && abs(eta) <= 2.7) * (pt > 10.0) * (0.85) + \
353 (abs(eta) > 2.7) * (0.00)}
354}
355
356################
357# Muon isolation
358################
359
360module Isolation MuonIsolation {
361 set CandidateInputArray MuonEfficiency/muons
362 set IsolationInputArray EFlowMerger/eflow
363
364 set OutputArray muons
365
366 set DeltaRMax 0.5
367
368 set PTMin 0.5
369
370 set PTRatioMax 0.1
371}
372
373###################
374# Missing ET merger
375###################
376
377module Merger MissingET {
378# add InputArray InputArray
379 add InputArray EFlowMerger/eflow
380 set MomentumOutputArray momentum
381}
382
383##################
384# Scalar HT merger
385##################
386
387module Merger ScalarHT {
388# add InputArray InputArray
389 add InputArray UniqueObjectFinder/jets
390 add InputArray UniqueObjectFinder/electrons
391 add InputArray UniqueObjectFinder/photons
392 add InputArray MuonIsolation/muons
393 set EnergyOutputArray energy
394}
395
396############
397# Jet finder
398############
399
400module FastJetFinder FastJetFinder {
401# set InputArray Calorimeter/towers
402 set InputArray EFlowMerger/eflow
403
404 set OutputArray jets
405
406 # algorithm: 1 CDFJetClu, 2 MidPoint, 3 SIScone, 4 kt, 5 Cambridge/Aachen, 6 antikt
407 set JetAlgorithm 6
408 set ParameterR 0.7
409
410 set ConeRadius 0.5
411 set SeedThreshold 1.0
412 set ConeAreaFraction 1.0
413 set AdjacencyCut 2.0
414 set OverlapThreshold 0.75
415
416 set MaxIterations 100
417 set MaxPairSize 2
418 set Iratch 1
419
420 set JetPTMin 20.0
421}
422
423###########
424# b-tagging
425###########
426
427module BTagging BTagging {
428 set PartonInputArray Delphes/partons
429 set JetInputArray FastJetFinder/jets
430
431 set DeltaR 0.5
432
433 set PartonPTMin 1.0
434
435 set PartonEtaMax 2.5
436
437 # add EfficiencyFormula {abs(PDG code)} {efficiency formula as a function of eta and pt}
438 # PDG code = the highest PDG code of a quark or gluon inside DeltaR cone around jet axis
439 # gluon's PDG code has the lowest priority
440
441 # default efficiency formula (misidentification rate)
442 add EfficiencyFormula {0} {0.001}
443 # efficiency formula for c-jets (misidentification rate)
444 add EfficiencyFormula {4} {0.1}
445 # efficiency formula for b-jets
446 add EfficiencyFormula {5} {0.4}
447}
448
449module TauTagging TauTagging {
450 set ParticleInputArray Delphes/allParticles
451 set PartonInputArray Delphes/partons
452 set JetInputArray FastJetFinder/jets
453
454 set DeltaR 0.5
455
456 set TauPTMin 1.0
457
458 set TauEtaMax 2.5
459
460 # add EfficiencyFormula {abs(PDG code)} {efficiency formula as a function of eta and pt}
461
462 # default efficiency formula (misidentification rate)
463 add EfficiencyFormula {0} {0.001}
464 # efficiency formula for tau-jets
465 add EfficiencyFormula {15} {0.4}
466}
467
468#####################################################
469# Find uniquely identified photons/electrons/tau/jets
470#####################################################
471
472module UniqueObjectFinder UniqueObjectFinder {
473# earlier arrays take precedence over later ones
474# add InputArray InputArray OutputArray
475 add InputArray PhotonIsolation/photons photons
476 add InputArray ElectronIsolation/electrons electrons
477 add InputArray FastJetFinder/jets jets
478}
479
480##################
481# ROOT tree writer
482##################
483
484module TreeWriter TreeWriter {
485# add Branch InputArray BranchName BranchClass
486 add Branch Delphes/allParticles Particle GenParticle
487 add Branch TrackMerger/tracks Track Track
488 add Branch Calorimeter/towers Tower Tower
489 add Branch Calorimeter/eflowTracks EFlowTrack Track
490 add Branch Calorimeter/eflowTowers EFlowTower Tower
491 add Branch MuonMomentumSmearing/muons EFlowMuon Muon
492 add Branch UniqueObjectFinder/jets Jet Jet
493 add Branch UniqueObjectFinder/electrons Electron Electron
494 add Branch UniqueObjectFinder/photons Photon Photon
495 add Branch MuonIsolation/muons Muon Muon
496 add Branch MissingET/momentum MissingET MissingET
497 add Branch ScalarHT/energy ScalarHT ScalarHT
498}
135499
136500
=== modified file 'Template/Cards/delphes_card_CMS.dat'
--- Template/Cards/delphes_card_CMS.dat 2010-10-30 03:26:37 +0000
+++ Template/Cards/delphes_card_CMS.dat 2013-03-04 23:37:19 +0000
@@ -1,135 +1,512 @@
1DETECTOR CARD # DO NOT REMOVE THIS IS A TAG!1#######################################
22# Order of execution of various modules
3# Detector extension, in pseudorapidity units3#######################################
4CEN_max_tracker 2.5 // Maximum tracker coverage 4
5CEN_max_calo_cen 3.0 // central calorimeter coverage5set ExecutionPath {
6CEN_max_calo_fwd 5.0 // forward calorimeter pseudorapidity coverage6 ParticlePropagator
7CEN_max_mu 2.4 // muon chambers pseudorapidity coverage7
8 8 ChargedHadronTrackingEfficiency
9# Energy resolution for electron/photon9 ElectronTrackingEfficiency
10# \sigma/E = C + N/E + S/\sqrt{E}, E in GeV10 MuonTrackingEfficiency
11ELG_Scen 0.05 // S term for central ECAL11
12ELG_Ncen 0.25 // N term for central ECAL12 ChargedHadronMomentumSmearing
13ELG_Ccen 0.005 // C term for central ECAL13 ElectronEnergySmearing
14ELG_Sfwd 2.084 // S term for FCAL14 MuonMomentumSmearing
15ELG_Nfwd 0.0 // N term for FCAL15
16ELG_Cfwd 0.107 // C term for FCAL16 TrackMerger
17ELG_Szdc 0.70 // S term for ZDC17 Calorimeter
18ELG_Nzdc 0.0 // N term for ZDC18 EFlowMerger
19ELG_Czdc 0.08 // C term for ZDC19
2020 PhotonEfficiency
2121 PhotonIsolation
22# Energy resolution for hadrons in ecal/hcal/hf22
23# \sigma/E = C + N/E + S/\sqrt{E}, E in GeV23 ElectronEfficiency
24HAD_Shcal 1.5 // S term for central HCAL 24 ElectronIsolation
25HAD_Nhcal 0. // N term for central HCAL25
26HAD_Chcal 0.05 // C term for central HCAL26 MuonEfficiency
27HAD_Shf 2.7 // S term for FCAL27 MuonIsolation
28HAD_Nhf 0. // N term for FCAL28
29HAD_Chf 0.13 // C term for FCAL29 MissingET
30HAD_Szdc 1.38 // S term for ZDC30
31HAD_Nzdc 0. // N term for ZDC31 FastJetFinder
32HAD_Czdc 0.13 // C term for ZDC32 BTagging
3333 TauTagging
34# Time resolution for ZDC/RP220/RP42034
35ZDC_T_resolution 0 // in s35 UniqueObjectFinder
36RP220_T_resolution 0 // in s36
37RP420_T_resolution 0 // in s37 ScalarHT
3838
39# Muon smearing39 TreeWriter
40MU_SmearPt 0.01 // transverse momentum Pt in GeV40}
4141
42# Tracking efficiencies42#################################
43TRACK_ptmin 0.9 // minimal pt needed to reach the calorimeter in GeV43# Propagate particles in cylinder
44TRACK_eff 90 // efficiency associated to the tracking (%)44#################################
4545
46# Calorimetric towers46module ParticlePropagator ParticlePropagator {
47TOWER_number 4047 set InputArray Delphes/stableParticles
48TOWER_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.00048
49## list of the edges of each tower in eta for eta>0 assuming a symmetric detector in eta<049 set OutputArray stableParticles
50### the list starts with the lower edge of the most central tower50 set ChargedHadronOutputArray chargedHadrons
51### the list ends with the higher edged of the most forward tower51 set ElectronOutputArray electrons
52### there should be NTOWER+1 values52 set MuonOutputArray muons
53TOWER_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 2053
54### list of the tower size in phi (in degrees), assuming that all towers are similar in phi for a given eta value54 # radius of the magnetic field coverage, in m
55### the list starts with the phi-size of the most central tower (eta=0)55 set Radius 1.29
56### the list ends with the phi-size of the most forward tower56 # half-length of the magnetic field coverage, in m
57### there should be NTOWER values57 set HalfLength 3.00
58##58
59#59 # magnetic field
6060 set Bz 3.8
61# Thresholds for reconstructed objetcs, Pt in GeV61}
62PTCUT_elec 10.062
63PTCUT_muon 10.063####################################
64PTCUT_jet 20.064# Charged hadron tracking efficiency
65PTCUT_gamma 10.065####################################
66PTCUT_taujet 10.066
6767module Efficiency ChargedHadronTrackingEfficiency {
68# Thresholds for reconstructed objects in ZDC, E in GeV68 set InputArray ParticlePropagator/chargedHadrons
69ZDC_gamma_E 2069 set OutputArray chargedHadrons
70ZDC_n_E 5070
7171 # add EfficiencyFormula {efficiency formula as a function of eta and pt}
72# Charged lepton isolation. Pt and Et in GeV72
73ISOL_PT 2.0 //minimal pt of tracks for isolation criteria73 # tracking efficiency formula for charged hadrons
74ISOL_Cone 0.5 //Cone for isolation criteria74 set EfficiencyFormula { (pt <= 0.1) * (0.00) + \
75ISOL_Calo_ET 1E99 //minimal tower transverse energy for isolation criteria. 1E99 means "off"75 (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.70) + \
76ISOL_Calo_Cone 0.4 //Cone for calorimetric isolation76 (abs(eta) <= 1.5) * (pt > 1.0) * (0.95) + \
77ISOL_Calo_Grid 3 //Grid size (N x N) for calorimetric isolation77 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.60) + \
7878 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0) * (0.85) + \
79# General jet variable79 (abs(eta) > 2.5) * (0.00)}
80JET_coneradius 0.7 // generic jet radius ; not for tau's !!!80}
81JET_jetalgo 1 // 1 for Cone algorithm, 2 for MidPoint algorithm, 3 for SIScone algorithm, 4 for kt algorithm81
82JET_seed 1.0 // minimum seed to start jet reconstruction, in GeV82##############################
83JET_Eflow 0 // Perfect energy assumed in the tracker coverage83# Electron tracking efficiency
8484##############################
85# Tagging definition85
86BTAG_b 40 // b-tag efficiency (%)86module Efficiency ElectronTrackingEfficiency {
87BTAG_mistag_c 10 // mistagging (%)87 set InputArray ParticlePropagator/electrons
88BTAG_mistag_l 1 // mistagging (%)88 set OutputArray electrons
8989
90# FLAGS90 # set EfficiencyFormula {efficiency formula as a function of eta and pt}
91FLAG_bfield 1 //1 to run the bfield propagation else 091
92FLAG_vfd 1 //1 to run the very forward detectors else 092 # tracking efficiency formula for electrons
93FLAG_RP 1 //1 to run the very forward detectors else 093 set EfficiencyFormula { (pt <= 0.1) * (0.00) + \
94FLAG_trigger 1 //1 to run the trigger selection else 094 (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.73) + \
95FLAG_frog 0 //1 to run the FROG event display95 (abs(eta) <= 1.5) * (pt > 1.0 && pt <= 1.0e2) * (0.95) + \
96FLAG_lhco 0 //1 to run the LHCO96 (abs(eta) <= 1.5) * (pt > 1.0e2) * (0.99) + \
9797 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.50) + \
98# In case BField propagation allowed98 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0 && pt <= 1.0e2) * (0.83) + \
99TRACK_radius 129 //radius of the BField coverage, in cm99 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0e2) * (0.90) + \
100TRACK_length 300 //length of the BField coverage, in cm100 (abs(eta) > 2.5) * (0.00)}
101TRACK_bfield_x 0 //X component of the BField, in T101}
102TRACK_bfield_y 0 //Y component of the BField, in T102
103TRACK_bfield_z 3.8 //Z component of the BField, in T103##############################
104104# Muon tracking efficiency
105# Very forward detector extension, in pseudorapidity105##############################
106# if allowed106
107VFD_min_calo_vfd 5.2 // very forward calorimeter (if any) like CASTOR107module Efficiency MuonTrackingEfficiency {
108VFD_max_calo_vfd 6.6108 set InputArray ParticlePropagator/muons
109VFD_min_zdc 8.3 // zero-degree neutral calorimeter109 set OutputArray muons
110VFD_s_zdc 140 // distance of the Zero Degree Calorimeter, from the IP, in [m]110
111111 # set EfficiencyFormula {efficiency formula as a function of eta and pt}
112RP_220_s 220 // distance of the RP to the IP, in meters112
113RP_220_x 0.002 // distance of the RP to the beam, in meters113 # tracking efficiency formula for muons
114RP_420_s 420 // distance of the RP to the IP, in meters114 set EfficiencyFormula { (pt <= 0.1) * (0.00) + \
115RP_420_x 0.004 // distance of the RP to the beam, in meters115 (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.75) + \
116RP_beam1Card DELPHESDIR/data/LHCB1IR5_v6.500.tfs116 (abs(eta) <= 1.5) * (pt > 1.0) * (0.99) + \
117RP_beam2Card DELPHESDIR/data/LHCB2IR5_v6.500.tfs117 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.70) + \
118RP_IP_name IP5118 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0) * (0.98) + \
119RP_offsetEl_x 0.097 // horizontal separation between both beam, in meters119 (abs(eta) > 2.5) * (0.00)}
120RP_offsetEl_y 0 // vertical separation between both beam, in meters120}
121RP_offsetEl_s 120 // distance of beam separation point, from IP121
122RP_cross_x -500 // IP offset in horizontal plane, in micrometers122########################################
123RP_cross_y 0 // IP offset in vertical plane, in micrometers123# Momentum resolution for charged tracks
124RP_cross_ang_x 142.5 // half-crossing angle in horizontal plane, in microrad124########################################
125RP_cross_ang_y 0 // half-crossing angle in vertical plane, in microrad125
126126module MomentumSmearing ChargedHadronMomentumSmearing {
127127 set InputArray ChargedHadronTrackingEfficiency/chargedHadrons
128# In case FROG event display allowed128 set OutputArray chargedHadrons
129NEvents_Frog 100129
130# Number of events to process130 # set ResolutionFormula {resolution formula as a function of eta and pt}
131NEvents -1 // -1 means 'all'131
132132 # resolution formula for charged hadrons
133# input PDG tables133 set ResolutionFormula { (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.02) + \
134PdgTableFilename DELPHESDIR/data/particle.tbl // table with particle pid,mass,charge,...134 (abs(eta) <= 1.5) * (pt > 1.0 && pt <= 1.0e1) * (0.01) + \
135 (abs(eta) <= 1.5) * (pt > 1.0e1 && pt <= 2.0e2) * (0.03) + \
136 (abs(eta) <= 1.5) * (pt > 2.0e2) * (0.05) + \
137 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.03) + \
138 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0 && pt <= 1.0e1) * (0.02) + \
139 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0e1 && pt <= 2.0e2) * (0.04) + \
140 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 2.0e2) * (0.05)}
141}
142
143#################################
144# Energy resolution for electrons
145#################################
146
147module EnergySmearing ElectronEnergySmearing {
148 set InputArray ElectronTrackingEfficiency/electrons
149 set OutputArray electrons
150
151 # set ResolutionFormula {resolution formula as a function of eta and energy}
152
153 set ResolutionFormula { (abs(eta) <= 2.5) * (energy > 0.1 && energy <= 2.5e1) * (energy*0.015) + \
154 (abs(eta) <= 2.5) * (energy > 2.5e1) * sqrt(energy^2*0.005^2 + energy*0.05^2 + 0.25^2) + \
155 (abs(eta) > 2.5 && abs(eta) <= 3.0) * sqrt(energy^2*0.005^2 + energy*0.05^2 + 0.25^2) + \
156 (abs(eta) > 3.0 && abs(eta) <= 5.0) * sqrt(energy^2*0.107^2 + energy*2.08^2)}
157
158}
159
160###############################
161# Momentum resolution for muons
162###############################
163
164module MomentumSmearing MuonMomentumSmearing {
165 set InputArray MuonTrackingEfficiency/muons
166 set OutputArray muons
167
168 # set ResolutionFormula {resolution formula as a function of eta and pt}
169
170 # resolution formula for muons
171 set ResolutionFormula { (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.03) + \
172 (abs(eta) <= 1.5) * (pt > 1.0 && pt <= 1.0e1) * (0.02) + \
173 (abs(eta) <= 1.5) * (pt > 1.0e1 && pt <= 2.0e2) * (0.03) + \
174 (abs(eta) <= 1.5) * (pt > 2.0e2) * (0.05) + \
175 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.04) + \
176 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0 && pt <= 1.0e1) * (0.03) + \
177 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0e1 && pt <= 2.0e2) * (0.04) + \
178 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 2.0e2) * (0.05)}
179}
180
181##############
182# Track merger
183##############
184
185module Merger TrackMerger {
186# add InputArray InputArray
187 add InputArray ChargedHadronMomentumSmearing/chargedHadrons
188 add InputArray ElectronEnergySmearing/electrons
189 set OutputArray tracks
190}
191
192#############
193# Calorimeter
194#############
195
196module Calorimeter Calorimeter {
197 set ParticleInputArray ParticlePropagator/stableParticles
198 set TrackInputArray TrackMerger/tracks
199
200 set TowerOutputArray towers
201 set PhotonOutputArray photons
202
203 set EFlowTrackOutputArray eflowTracks
204 set EFlowTowerOutputArray eflowTowers
205
206 set pi [expr {acos(-1)}]
207
208 # lists of the edges of each tower in eta and phi
209 # each list starts with the lower edge of the first tower
210 # the list ends with the higher edged of the last tower
211
212 # 5 degrees towers
213 set PhiBins {}
214 for {set i -36} {$i <= 36} {incr i} {
215 add PhiBins [expr {$i * $pi/36.0}]
216 }
217 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} {
218 add EtaPhiBins $eta $PhiBins
219 }
220
221 # 10 degrees towers
222 set PhiBins {}
223 for {set i -18} {$i <= 18} {incr i} {
224 add PhiBins [expr {$i * $pi/18.0}]
225 }
226 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} {
227 add EtaPhiBins $eta $PhiBins
228 }
229
230 # 20 degrees towers
231 set PhiBins {}
232 for {set i -9} {$i <= 9} {incr i} {
233 add PhiBins [expr {$i * $pi/9.0}]
234 }
235 foreach eta {-5 -4.7 -4.525 4.7 5} {
236 add EtaPhiBins $eta $PhiBins
237 }
238
239 # default energy fractions {abs(PDG code)} {Fecal Fhcal}
240 add EnergyFraction {0} {0.0 1.0}
241 # energy fractions for e, gamma and pi0
242 add EnergyFraction {11} {1.0 0.0}
243 add EnergyFraction {22} {1.0 0.0}
244 add EnergyFraction {111} {1.0 0.0}
245 # energy fractions for muon and neutrinos
246 add EnergyFraction {12} {0.0 0.0}
247 add EnergyFraction {13} {0.0 0.0}
248 add EnergyFraction {14} {0.0 0.0}
249 add EnergyFraction {16} {0.0 0.0}
250 # energy fractions for K0short and Lambda
251 add EnergyFraction {310} {0.3 0.7}
252 add EnergyFraction {3122} {0.3 0.7}
253
254 # set ECalResolutionFormula {resolution formula as a function of eta and energy}
255 set ECalResolutionFormula { (abs(eta) <= 3.0) * sqrt(energy^2*0.005^2 + energy*0.05^2 + 0.25^2) + \
256 (abs(eta) > 3.0 && abs(eta) <= 5.0) * sqrt(energy^2*0.107^2 + energy*2.08^2)}
257
258 # set HCalResolutionFormula {resolution formula as a function of eta and energy}
259 set HCalResolutionFormula { (abs(eta) <= 3.0) * sqrt(energy^2*0.050^2 + energy*1.50^2) + \
260 (abs(eta) > 3.0 && abs(eta) <= 5.0) * sqrt(energy^2*0.130^2 + energy*2.70^2)}
261}
262
263####################
264# Energy flow merger
265####################
266
267module Merger EFlowMerger {
268# add InputArray InputArray
269 add InputArray Calorimeter/eflowTracks
270 add InputArray Calorimeter/eflowTowers
271 add InputArray MuonMomentumSmearing/muons
272 set OutputArray eflow
273}
274
275###################
276# Photon efficiency
277###################
278
279module Efficiency PhotonEfficiency {
280 set InputArray Calorimeter/photons
281 set OutputArray photons
282
283 # set EfficiencyFormula {efficiency formula as a function of eta and pt}
284
285 # efficiency formula for photons
286 set EfficiencyFormula { (pt <= 10.0) * (0.00) + \
287 (abs(eta) <= 1.5) * (pt > 10.0) * (0.95) + \
288 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 10.0) * (0.85) + \
289 (abs(eta) > 2.5) * (0.00)}
290}
291
292##################
293# Photon isolation
294##################
295
296module Isolation PhotonIsolation {
297 set CandidateInputArray PhotonEfficiency/photons
298 set IsolationInputArray EFlowMerger/eflow
299
300 set OutputArray photons
301
302 set DeltaRMax 0.5
303
304 set PTMin 0.5
305
306 set PTRatioMax 0.1
307}
308
309#####################
310# Electron efficiency
311#####################
312
313module Efficiency ElectronEfficiency {
314 set InputArray ElectronEnergySmearing/electrons
315 set OutputArray electrons
316
317 # set EfficiencyFormula {efficiency formula as a function of eta and pt}
318
319 # efficiency formula for electrons
320 set EfficiencyFormula { (pt <= 10.0) * (0.00) + \
321 (abs(eta) <= 1.5) * (pt > 10.0) * (0.95) + \
322 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 10.0) * (0.85) + \
323 (abs(eta) > 2.5) * (0.00)}
324}
325
326####################
327# Electron isolation
328####################
329
330module Isolation ElectronIsolation {
331 set CandidateInputArray ElectronEfficiency/electrons
332 set IsolationInputArray EFlowMerger/eflow
333
334 set OutputArray electrons
335
336 set DeltaRMax 0.5
337
338 set PTMin 0.5
339
340 set PTRatioMax 0.1
341}
342
343#################
344# Muon efficiency
345#################
346
347module Efficiency MuonEfficiency {
348 set InputArray MuonMomentumSmearing/muons
349 set OutputArray muons
350
351 # set EfficiencyFormula {efficiency as a function of eta and pt}
352
353 # efficiency formula for muons
354 set EfficiencyFormula { (pt <= 10.0) * (0.00) + \
355 (abs(eta) <= 1.5) * (pt > 10.0) * (0.95) + \
356 (abs(eta) > 1.5 && abs(eta) <= 2.4) * (pt > 10.0) * (0.85) + \
357 (abs(eta) > 2.4) * (0.00)}
358}
359
360################
361# Muon isolation
362################
363
364module Isolation MuonIsolation {
365 set CandidateInputArray MuonEfficiency/muons
366 set IsolationInputArray EFlowMerger/eflow
367
368 set OutputArray muons
369
370 set DeltaRMax 0.5
371
372 set PTMin 0.5
373
374 set PTRatioMax 0.1
375}
376
377###################
378# Missing ET merger
379###################
380
381module Merger MissingET {
382# add InputArray InputArray
383 add InputArray EFlowMerger/eflow
384 set MomentumOutputArray momentum
385}
386
387##################
388# Scalar HT merger
389##################
390
391module Merger ScalarHT {
392# add InputArray InputArray
393 add InputArray UniqueObjectFinder/jets
394 add InputArray UniqueObjectFinder/electrons
395 add InputArray UniqueObjectFinder/photons
396 add InputArray MuonIsolation/muons
397 set EnergyOutputArray energy
398}
399
400############
401# Jet finder
402############
403
404module FastJetFinder FastJetFinder {
405# set InputArray Calorimeter/towers
406 set InputArray EFlowMerger/eflow
407
408 set OutputArray jets
409
410 # algorithm: 1 CDFJetClu, 2 MidPoint, 3 SIScone, 4 kt, 5 Cambridge/Aachen, 6 antikt
411 set JetAlgorithm 6
412 set ParameterR 0.7
413
414 set ConeRadius 0.5
415 set SeedThreshold 1.0
416 set ConeAreaFraction 1.0
417 set AdjacencyCut 2.0
418 set OverlapThreshold 0.75
419
420 set MaxIterations 100
421 set MaxPairSize 2
422 set Iratch 1
423
424 set JetPTMin 20.0
425}
426
427###########
428# b-tagging
429###########
430
431module BTagging BTagging {
432 set PartonInputArray Delphes/partons
433 set JetInputArray FastJetFinder/jets
434
435 set DeltaR 0.5
436
437 set PartonPTMin 1.0
438
439 set PartonEtaMax 2.5
440
441 # add EfficiencyFormula {abs(PDG code)} {efficiency formula as a function of eta and pt}
442 # PDG code = the highest PDG code of a quark or gluon inside DeltaR cone around jet axis
443 # gluon's PDG code has the lowest priority
444
445 # https://twiki.cern.ch/twiki/bin/view/CMSPublic/PhysicsResultsBTV
446 # default efficiency formula (misidentification rate)
447 add EfficiencyFormula {0} {0.001}
448
449 # efficiency formula for c-jets (misidentification rate)
450 add EfficiencyFormula {4} { (pt <= 15.0) * (0.000) + \
451 (abs(eta) <= 1.2) * (pt > 15.0) * (0.2*tanh(pt*0.03 - 0.4)) + \
452 (abs(eta) > 1.2 && abs(eta) <= 2.5) * (pt > 15.0) * (0.1*tanh(pt*0.03 - 0.4)) + \
453 (abs(eta) > 2.5) * (0.000)}
454
455 # efficiency formula for b-jets
456 add EfficiencyFormula {5} { (pt <= 15.0) * (0.000) + \
457 (abs(eta) <= 1.2) * (pt > 15.0) * (0.5*tanh(pt*0.03 - 0.4)) + \
458 (abs(eta) > 1.2 && abs(eta) <= 2.5) * (pt > 15.0) * (0.4*tanh(pt*0.03 - 0.4)) + \
459 (abs(eta) > 2.5) * (0.000)}
460}
461
462module TauTagging TauTagging {
463 set ParticleInputArray Delphes/allParticles
464 set PartonInputArray Delphes/partons
465 set JetInputArray FastJetFinder/jets
466
467 set DeltaR 0.5
468
469 set TauPTMin 1.0
470
471 set TauEtaMax 2.5
472
473 # add EfficiencyFormula {abs(PDG code)} {efficiency formula as a function of eta and pt}
474
475 # default efficiency formula (misidentification rate)
476 add EfficiencyFormula {0} {0.001}
477 # efficiency formula for tau-jets
478 add EfficiencyFormula {15} {0.4}
479}
480
481#####################################################
482# Find uniquely identified photons/electrons/tau/jets
483#####################################################
484
485module UniqueObjectFinder UniqueObjectFinder {
486# earlier arrays take precedence over later ones
487# add InputArray InputArray OutputArray
488 add InputArray PhotonIsolation/photons photons
489 add InputArray ElectronIsolation/electrons electrons
490 add InputArray FastJetFinder/jets jets
491}
492
493##################
494# ROOT tree writer
495##################
496
497module TreeWriter TreeWriter {
498# add Branch InputArray BranchName BranchClass
499 add Branch Delphes/allParticles Particle GenParticle
500 add Branch TrackMerger/tracks Track Track
501 add Branch Calorimeter/towers Tower Tower
502 add Branch Calorimeter/eflowTracks EFlowTrack Track
503 add Branch Calorimeter/eflowTowers EFlowTower Tower
504 add Branch MuonMomentumSmearing/muons EFlowMuon Muon
505 add Branch UniqueObjectFinder/jets Jet Jet
506 add Branch UniqueObjectFinder/electrons Electron Electron
507 add Branch UniqueObjectFinder/photons Photon Photon
508 add Branch MuonIsolation/muons Muon Muon
509 add Branch MissingET/momentum MissingET MissingET
510 add Branch ScalarHT/energy ScalarHT ScalarHT
511}
135512
136513
=== modified file 'Template/Cards/delphes_card_default.dat'
--- Template/Cards/delphes_card_default.dat 2010-10-30 03:26:37 +0000
+++ Template/Cards/delphes_card_default.dat 2013-03-04 23:37:19 +0000
@@ -1,47 +1,54 @@
1DETECTOR CARD # DO NOT REMOVE THIS IS A TAG!1DETECTOR CARD // DO NOT REMOVE THIS IS A TAG!
2# any line containing a dash symbol (#) will be completely ignored, whatever the position of this symbol
23
3# Detector extension, in pseudorapidity units4# Detector extension, in pseudorapidity units
4CEN_max_tracker 2.5 // Maximum tracker coverage 5CEN_max_tracker 2.5 // Maximum tracker coverage
5CEN_max_calo_cen 3.0 // central calorimeter coverage6CEN_max_calo_cen 1.7 // central calorimeter coverage
6CEN_max_calo_fwd 5.0 // forward calorimeter pseudorapidity coverage7CEN_max_calo_ec 3.0 // calorimeter endcap coverage
7CEN_max_mu 2.4 // muon chambers pseudorapidity coverage8CEN_max_calo_fwd 5.0 // forward calorimeter pseudorapidity coverage
9CEN_max_mu 2.4 // muon chambers pseudorapidity coverage
8 10
9# Energy resolution for electron/photon11# Energy resolution for electron/photon in central/endcap/fwd/zdc calos
10# \sigma/E = C + N/E + S/\sqrt{E}, E in GeV12# \sigma/E = C + N/E + S/\sqrt{E}, E in GeV
11ELG_Scen 0.05 // S term for central ECAL13ELG_Scen 0.05 // S term for central ECAL
12ELG_Ncen 0.25 // N term for central ECAL14ELG_Ncen 0.25 // N term
13ELG_Ccen 0.005 // C term for central ECAL15ELG_Ccen 0.005 // C term
16ELG_Sec 0.05 // S term for ECAL endcap
17ELG_Nec 0.25 // N term
18ELG_Cec 0.005 // C term
14ELG_Sfwd 2.084 // S term for FCAL19ELG_Sfwd 2.084 // S term for FCAL
15ELG_Nfwd 0.0 // N term for FCAL20ELG_Nfwd 0.0 // N term
16ELG_Cfwd 0.107 // C term for FCAL21ELG_Cfwd 0.107 // C term
17ELG_Szdc 0.70 // S term for ZDC22ELG_Szdc 0.70 // S term for ZDC
18ELG_Nzdc 0.0 // N term for ZDC23ELG_Nzdc 0.0 // N term
19ELG_Czdc 0.08 // C term for ZDC24ELG_Czdc 0.08 // C term
2025
2126# Energy resolution for hadrons in central/endcap/fwd/zdc calos
22# Energy resolution for hadrons in ecal/hcal/hf
23# \sigma/E = C + N/E + S/\sqrt{E}, E in GeV27# \sigma/E = C + N/E + S/\sqrt{E}, E in GeV
24HAD_Shcal 1.5 // S term for central HCAL 28HAD_Scen 1.5 // S term for central HCAL
25HAD_Nhcal 0. // N term for central HCAL29HAD_Ncen 0. // N term
26HAD_Chcal 0.05 // C term for central HCAL30HAD_Ccen 0.05 // C term
27HAD_Shf 2.7 // S term for FCAL31HAD_Sec 1.5 // S term for HCAL endcap
28HAD_Nhf 0. // N term for FCAL32HAD_Nec 0. // N term
29HAD_Chf 0.13 // C term for FCAL33HAD_Cec 0.05 // C term
34HAD_Sfwd 2.7 // S term for FCAL
35HAD_Nfwd 0. // N term
36HAD_Cfwd 0.13 // C term
30HAD_Szdc 1.38 // S term for ZDC37HAD_Szdc 1.38 // S term for ZDC
31HAD_Nzdc 0. // N term for ZDC38HAD_Nzdc 0. // N term
32HAD_Czdc 0.13 // C term for ZDC39HAD_Czdc 0.13 // C term
3340
34# Time resolution for ZDC/RP220/RP42041# Time resolution for ZDC/RP220/RP420
35ZDC_T_resolution 0 // in s42ZDC_T_resolution 0 // in s
36RP220_T_resolution 0 // in s43RP220_T_resolution 0 // in s
37RP420_T_resolution 0 // in s44RP420_T_resolution 0 // in s
3845
39# Muon smearing46# Muon smearing
40MU_SmearPt 0.01 // transverse momentum Pt in GeV47MU_SmearPt 0.01 // transverse momentum Pt in GeV
4148
42# Tracking efficiencies49# Tracking efficiencies
43TRACK_ptmin 0.9 // minimal pt needed to reach the calorimeter in GeV50TRACK_ptmin 0.0 // minimal pt needed to reach the calorimeter in GeV
44TRACK_eff 90 // efficiency associated to the tracking (%)51TRACK_eff 100 // efficiency associated to the tracking (%)
4552
46# Calorimetric towers53# Calorimetric towers
47TOWER_number 4054TOWER_number 40
@@ -58,7 +65,7 @@
58##65##
59#66#
6067
61# Thresholds for reconstructed objetcs, Pt in GeV68# Thresholds for reconstructed objects, Pt in GeV
62PTCUT_elec 10.069PTCUT_elec 10.0
63PTCUT_muon 10.070PTCUT_muon 10.0
64PTCUT_jet 20.071PTCUT_jet 20.0
@@ -70,34 +77,43 @@
70ZDC_n_E 5077ZDC_n_E 50
7178
72# Charged lepton isolation. Pt and Et in GeV79# Charged lepton isolation. Pt and Et in GeV
73ISOL_PT 2.0 //minimal pt of tracks for isolation criteria80ISOL_trk_PT 2.0 //minimal pt of tracks for isolation criteria
74ISOL_Cone 0.5 //Cone for isolation criteria81ISOL_trk_Cone 0.5 //Cone for isolation criteria
75ISOL_Calo_ET 1E99 //minimal tower transverse energy for isolation criteria. 1E99 means "off"82ISOL_calo_Cone 0.5 //Cone for isolation criteria
76ISOL_Calo_Cone 0.4 //Cone for calorimetric isolation83ISOL_calo_ET 0 //minimal tower transverse energy for isolation criteria.
77ISOL_Calo_Grid 3 //Grid size (N x N) for calorimetric isolation84ISOL_calo_Grid 3 //Grid size (N x N) for calorimetric isolation
7885
79# General jet variable86# General jet variable
80JET_coneradius 0.7 // generic jet radius ; not for tau's !!!87JET_coneradius 0.7 // generic jet radius ; not for tau's !!!
81JET_jetalgo 1 // 1 for Cone algorithm, 2 for MidPoint algorithm, 3 for SIScone algorithm, 4 for kt algorithm88JET_jetalgo 2 // Jet algorithms: 1 CDFJetClu, 2 MidPoint, 3 SIScone, 4 kt, 5 Cambridge/Aachen, 6 antikt
82JET_seed 1.0 // minimum seed to start jet reconstruction, in GeV89JET_seed 1.0 // minimum seed to start jet reconstruction, in GeV
83JET_Eflow 0 // Perfect energy assumed in the tracker coverage90JET_Eflow 0 // Perfect energy assumed in the tracker coverage
8491
85# Tagging definition92# b-(mis)tagging efficiencies
86BTAG_b 40 // b-tag efficiency (%)93# pt dependence for b-tagging and mistag
87BTAG_mistag_c 10 // mistagging (%)94# see http://root.cern.ch/root/html/TFormula.html for syntax
88BTAG_mistag_l 1 // mistagging (%)95# e.g. BTAG_func_b 0.4*(1-exp(-x))
96# in case of no explicit dependence, on x (=PT) or y (=eta), you MUST add "+0*x" and/or "+0*y"
97# e.g. BTAG_func_g 0.01 + 0*x + 0*y
98# put 'x' for pt ; range: [0, 9E6 GeV/c]
99# put 'y' for eta ; range [-CEN_max_tracker ; CEN_max_tracker ]
100# e.g. (x<300)?(0.2+0*x+0*y):(0.6+0*x+y*0)
101BTAG_func_b 0.4+0*x+0*y // formula for Pt dependence of the b-tag efficiency (b-jets)
102BTAG_func_c 0.1+0*x+0*y // formula for Pt dependence of the mistag efficiency (c-jets)
103BTAG_func_g 0.01+0*x+0*y // (gluon-jets)
104BTAG_func_l 0.01+0*x+0*y // (light-jets)
89105
90# FLAGS106# FLAGS
91FLAG_bfield 1 //1 to run the bfield propagation else 0107FLAG_bfield 1 //1 to run the bfield propagation else 0
92FLAG_vfd 1 //1 to run the very forward detectors else 0108FLAG_vfd 1 //1 to run the very forward detectors else 0
93FLAG_RP 1 //1 to run the very forward detectors else 0109FLAG_RP 1 //1 to run the very forward detectors else 0
94FLAG_trigger 1 //1 to run the trigger selection else 0110FLAG_trigger 1 //1 to run the trigger selection else 0
95FLAG_frog 0 //1 to run the FROG event display111FLAG_frog 1 //1 to run the FROG event display
96FLAG_lhco 0 //1 to run the LHCO112FLAG_lhco 0 //1 to run the LHCO
97113
98# In case BField propagation allowed114# In case BField propagation allowed
99TRACK_radius 129 //radius of the BField coverage, in cm115TRACK_radius 129 //radius of the BField coverage, in cm
100TRACK_length 300 //length of the BField coverage, in cm116TRACK_length 300 //half-length of the BField coverage, in cm
101TRACK_bfield_x 0 //X component of the BField, in T117TRACK_bfield_x 0 //X component of the BField, in T
102TRACK_bfield_y 0 //Y component of the BField, in T118TRACK_bfield_y 0 //Y component of the BField, in T
103TRACK_bfield_z 3.8 //Z component of the BField, in T119TRACK_bfield_z 3.8 //Z component of the BField, in T
@@ -109,26 +125,26 @@
109VFD_min_zdc 8.3 // zero-degree neutral calorimeter125VFD_min_zdc 8.3 // zero-degree neutral calorimeter
110VFD_s_zdc 140 // distance of the Zero Degree Calorimeter, from the IP, in [m]126VFD_s_zdc 140 // distance of the Zero Degree Calorimeter, from the IP, in [m]
111127
128#Hector parameters
112RP_220_s 220 // distance of the RP to the IP, in meters129RP_220_s 220 // distance of the RP to the IP, in meters
113RP_220_x 0.002 // distance of the RP to the beam, in meters130RP_220_x 0.002 // distance of the RP to the beam, in meters
114RP_420_s 420 // distance of the RP to the IP, in meters131RP_420_s 420 // distance of the RP to the IP, in meters
115RP_420_x 0.004 // distance of the RP to the beam, in meters132RP_420_x 0.004 // distance of the RP to the beam, in meters
116RP_beam1Card DELPHESDIR/data/LHCB1IR5_v6.500.tfs133RP_beam1Card DELPHESDIR/data/LHCB1IR5_v6.500.tfs // beam optics file, beam 1
117RP_beam2Card DELPHESDIR/data/LHCB2IR5_v6.500.tfs134RP_beam2Card DELPHESDIR/data/LHCB2IR5_v6.500.tfs // beam optics file, beam 2
118RP_IP_name IP5135RP_IP_name IP5 // tag for IP in Hector ; 'IP1' for ATLAS
119RP_offsetEl_x 0.097 // horizontal separation between both beam, in meters136RP_offsetEl_x 0.097 // horizontal separation between both beam, in meters
120RP_offsetEl_y 0 // vertical separation between both beam, in meters137RP_offsetEl_y 0 // vertical separation between both beam, in meters
121RP_offsetEl_s 120 // distance of beam separation point, from IP138RP_offsetEl_s 120 // distance of beam separation point, from IP
122RP_cross_x -500 // IP offset in horizontal plane, in micrometers139RP_cross_x -500 // IP offset in horizontal plane, in micrometers
123RP_cross_y 0 // IP offset in vertical plane, in micrometers140RP_cross_y 0 // IP offset in vertical plane, in micrometers
124RP_cross_ang_x 142.5 // half-crossing angle in horizontal plane, in microrad141RP_cross_ang_x 142.5 // half-crossing angle in horizontal plane, in microrad
125RP_cross_ang_y 0 // half-crossing angle in vertical plane, in microrad142RP_cross_ang_y 0 // half-crossing angle in vertical plane, in microrad
126
127143
128# In case FROG event display allowed144# In case FROG event display allowed
129NEvents_Frog 100145NEvents_Frog 100
130# Number of events to process146# Number of events to process
131NEvents -1 // -1 means 'all'147NEvents -1 // -1 means 'all'
132148
133# input PDG tables149# input PDG tables
134PdgTableFilename DELPHESDIR/data/particle.tbl // table with particle pid,mass,charge,...150PdgTableFilename DELPHESDIR/data/particle.tbl // table with particle pid,mass,charge,...
135151
=== added file 'Template/Cards/delphes_trigger_ATLAS.dat'
--- Template/Cards/delphes_trigger_ATLAS.dat 1970-01-01 00:00:00 +0000
+++ Template/Cards/delphes_trigger_ATLAS.dat 2013-03-04 23:37:19 +0000
@@ -0,0 +1,16 @@
1#TRIGGER CARD # DO NOT REMOVE THIS IS A TAG!
2
3# list of trigger algorithms
4# trigger_name >> algorithm #comments
5Inclusive Isol electron >> IElec1_PT: '25'
6di-electron Isol >> IELEC1_PT: '15' && IELEC2_PT: '15'
7Inclusive Photon >> GAMMA1_PT: '60'
8di-Photon >> GAMMA1_PT: '20' && GAMMA2_PT: '20'
9Inclusive Isol muon >> IMuon1_PT: '20'
10di-muon >> MUON1_PT: '10' && MUON2_PT: '10'
11Taujet and ETmis >> TAU1_PT: '35' && ETMIS_PT: '45'
12Jet and ETmis >> JET1_PT: '70' && ETMIS_PT: '70'
13Inclusive 1 jet >> JET1_PT: '400'
14Inclusive 3 jets >> JET1_PT: '165' && JET2_PT: '165' && JET3_PT: '165'
15Inclusive 4 jets >> JET1_PT: '110' && JET2_PT: '110' && JET3_PT: '110' && JET4_PT: '110'
16
017
=== removed file 'Template/Cards/delphes_trigger_ATLAS.dat'
--- Template/Cards/delphes_trigger_ATLAS.dat 2010-10-30 03:26:37 +0000
+++ Template/Cards/delphes_trigger_ATLAS.dat 1970-01-01 00:00:00 +0000
@@ -1,16 +0,0 @@
1#TRIGGER CARD # DO NOT REMOVE THIS IS A TAG!
2
3# list of trigger algorithms
4# trigger_name >> algorithm #comments
5Inclusive Isol electron >> IElec1_PT: '25'
6di-electron Isol >> IELEC1_PT: '15' && IELEC2_PT: '15'
7Inclusive Photon >> GAMMA1_PT: '60'
8di-Photon >> GAMMA1_PT: '20' && GAMMA2_PT: '20'
9Inclusive Isol muon >> IMuon1_PT: '20'
10di-muon >> MUON1_PT: '10' && MUON2_PT: '10'
11Taujet and ETmis >> TAU1_PT: '35' && ETMIS_PT: '45'
12Jet and ETmis >> JET1_PT: '70' && ETMIS_PT: '70'
13Inclusive 1 jet >> JET1_PT: '400'
14Inclusive 3 jets >> JET1_PT: '165' && JET2_PT: '165' && JET3_PT: '165'
15Inclusive 4 jets >> JET1_PT: '110' && JET2_PT: '110' && JET3_PT: '110' && JET4_PT: '110'
16
170
=== added file 'Template/Cards/delphes_trigger_CMS.dat'
--- Template/Cards/delphes_trigger_CMS.dat 1970-01-01 00:00:00 +0000
+++ Template/Cards/delphes_trigger_CMS.dat 2013-03-04 23:37:19 +0000
@@ -0,0 +1,20 @@
1#TRIGGER CARD # DO NOT REMOVE THIS IS A TAG!
2
3# list of trigger algorithms
4# trigger_name >> algorithm #comments
5Inclusive electron >> ELEC1_PT: '29'
6di-electron >> ELEC1_PT: '17' && ELEC2_PT: '17'
7Inclusive Photon >> GAMMA1_PT: '80'
8di-Photon >> GAMMA1_PT: '40' && GAMMA2_PT: '25'
9Inclusive muon >> MUON1_PT: '19'
10di-muon >> MUON1_PT: '7' && MUON2_PT: '7'
11Taujet and ETmis >> TAU1_PT: '86' && ETMIS_PT: '65'
12di-Taujets >> TAU1_PT: '59' && TAU2_PT: '59'
13Jet and ETmis >> JET1_PT: '180' && ETMIS_PT: '123'
14Taujet and electron >> TAU1_PT: '45' && ELEC1_PT: '19'
15Taujet and muon >> TAU1_PT: '40' && ELEC1_PT: '15'
16Inclusive b-jet >> Bjet1_PT: '237'
17Inclusive 1 jet >> JET1_PT: '657'
18Inclusive 3 jets >> JET1_PT: '247' && JET2_PT: '247' && JET3_PT: '247'
19Inclusive 4 jets >> JET1_PT: '113' && JET2_PT: '113' && JET3_PT: '113' && JET4_PT: '113'
20
021
=== removed file 'Template/Cards/delphes_trigger_CMS.dat'
--- Template/Cards/delphes_trigger_CMS.dat 2010-10-30 03:26:37 +0000
+++ Template/Cards/delphes_trigger_CMS.dat 1970-01-01 00:00:00 +0000
@@ -1,20 +0,0 @@
1#TRIGGER CARD # DO NOT REMOVE THIS IS A TAG!
2
3# list of trigger algorithms
4# trigger_name >> algorithm #comments
5Inclusive electron >> ELEC1_PT: '29'
6di-electron >> ELEC1_PT: '17' && ELEC2_PT: '17'
7Inclusive Photon >> GAMMA1_PT: '80'
8di-Photon >> GAMMA1_PT: '40' && GAMMA2_PT: '25'
9Inclusive muon >> MUON1_PT: '19'
10di-muon >> MUON1_PT: '7' && MUON2_PT: '7'
11Taujet and ETmis >> TAU1_PT: '86' && ETMIS_PT: '65'
12di-Taujets >> TAU1_PT: '59' && TAU2_PT: '59'
13Jet and ETmis >> JET1_PT: '180' && ETMIS_PT: '123'
14Taujet and electron >> TAU1_PT: '45' && ELEC1_PT: '19'
15Taujet and muon >> TAU1_PT: '40' && ELEC1_PT: '15'
16Inclusive b-jet >> Bjet1_PT: '237'
17Inclusive 1 jet >> JET1_PT: '657'
18Inclusive 3 jets >> JET1_PT: '247' && JET2_PT: '247' && JET3_PT: '247'
19Inclusive 4 jets >> JET1_PT: '113' && JET2_PT: '113' && JET3_PT: '113' && JET4_PT: '113'
20
210
=== added file 'Template/Cards/delphes_trigger_default.dat'
--- Template/Cards/delphes_trigger_default.dat 1970-01-01 00:00:00 +0000
+++ Template/Cards/delphes_trigger_default.dat 2013-03-04 23:37:19 +0000
@@ -0,0 +1,20 @@
1#TRIGGER CARD # DO NOT REMOVE THIS IS A TAG!
2
3# list of trigger algorithms
4# trigger_name >> algorithm #comments
5Inclusive electron >> ELEC1_PT: '29'
6di-electron >> ELEC1_PT: '17' && ELEC2_PT: '17'
7Inclusive Photon >> GAMMA1_PT: '80'
8di-Photon >> GAMMA1_PT: '40' && GAMMA2_PT: '25'
9Inclusive muon >> MUON1_PT: '19'
10di-muon >> MUON1_PT: '7' && MUON2_PT: '7'
11Taujet and ETmis >> TAU1_PT: '86' && ETMIS_PT: '65'
12di-Taujets >> TAU1_PT: '59' && TAU2_PT: '59'
13Jet and ETmis >> JET1_PT: '180' && ETMIS_PT: '123'
14Taujet and electron >> TAU1_PT: '45' && ELEC1_PT: '19'
15Taujet and muon >> TAU1_PT: '40' && ELEC1_PT: '15'
16Inclusive b-jet >> Bjet1_PT: '237'
17Inclusive 1 jet >> JET1_PT: '657'
18Inclusive 3 jets >> JET1_PT: '247' && JET2_PT: '247' && JET3_PT: '247'
19Inclusive 4 jets >> JET1_PT: '113' && JET2_PT: '113' && JET3_PT: '113' && JET4_PT: '113'
20
021
=== removed file 'Template/Cards/delphes_trigger_default.dat'
--- Template/Cards/delphes_trigger_default.dat 2012-02-17 21:52:21 +0000
+++ Template/Cards/delphes_trigger_default.dat 1970-01-01 00:00:00 +0000
@@ -1,20 +0,0 @@
1#TRIGGER CARD # DO NOT REMOVE THIS IS A TAG!
2
3# list of trigger algorithms
4# trigger_name >> algorithm #comments
5Inclusive electron >> ELEC1_PT: '29'
6di-electron >> ELEC1_PT: '17' && ELEC2_PT: '17'
7Inclusive Photon >> GAMMA1_PT: '80'
8di-Photon >> GAMMA1_PT: '40' && GAMMA2_PT: '25'
9Inclusive muon >> MUON1_PT: '19'
10di-muon >> MUON1_PT: '7' && MUON2_PT: '7'
11Taujet and ETmis >> TAU1_PT: '86' && ETMIS_PT: '65'
12di-Taujets >> TAU1_PT: '59' && TAU2_PT: '59'
13Jet and ETmis >> JET1_PT: '180' && ETMIS_PT: '123'
14Taujet and electron >> TAU1_PT: '45' && ELEC1_PT: '19'
15Taujet and muon >> TAU1_PT: '40' && ELEC1_PT: '15'
16Inclusive b-jet >> Bjet1_PT: '237'
17Inclusive 1 jet >> JET1_PT: '657'
18Inclusive 3 jets >> JET1_PT: '247' && JET2_PT: '247' && JET3_PT: '247'
19Inclusive 4 jets >> JET1_PT: '113' && JET2_PT: '113' && JET3_PT: '113' && JET4_PT: '113'
20
210
=== modified file 'Template/Source/PDF/pdf_lhapdf.f'
--- Template/Source/PDF/pdf_lhapdf.f 2010-10-30 03:26:37 +0000
+++ Template/Source/PDF/pdf_lhapdf.f 2013-03-04 23:37:19 +0000
@@ -9,6 +9,8 @@
9 DOUBLE PRECISION x,q,pdf(-7:7)9 DOUBLE PRECISION x,q,pdf(-7:7)
10 DOUBLE PRECISION f(-6:6)10 DOUBLE PRECISION f(-6:6)
11 INTEGER IH,I11 INTEGER IH,I
12 double precision photon
13 LOGICAL has_photon
12C14C
13C Include15C Include
14C16C
@@ -16,8 +18,13 @@
16C 18C
17 if(abs(ih).eq.1) then19 if(abs(ih).eq.1) then
18 pdf(-7)=0d020 pdf(-7)=0d0
19 pdf(7)=0d021 if(has_photon())then
20 call evolvePDF(x, q, f)22 call evolvePDFphoton(x, q, f, photon)
23 pdf(7)= photon
24 else
25 pdf(7) = 0d0
26 call evolvePDF(x, q, f)
27 endif
21 do i=-6,628 do i=-6,6
22 pdf(i)=f(i)/x29 pdf(i)=f(i)/x
23 enddo30 enddo
2431
=== modified file 'Template/Source/PDF/pdg2pdf.f'
--- Template/Source/PDF/pdg2pdf.f 2012-11-11 08:52:35 +0000
+++ Template/Source/PDF/pdg2pdf.f 2013-03-04 23:37:19 +0000
@@ -16,11 +16,28 @@
16 double precision Ctq3df,Ctq4Fn,Ctq5Pdf,Ctq6Pdf,Ctq5L16 double precision Ctq3df,Ctq4Fn,Ctq5Pdf,Ctq6Pdf,Ctq5L
17 integer mode,Irt,i,j17 integer mode,Irt,i,j
18 double precision xlast(2),xmulast(2),pdflast(-7:7,2),q2max18 double precision xlast(2),xmulast(2),pdflast(-7:7,2),q2max
19 character*7 pdlabellast(2)
19 double precision epa_electron,epa_proton20 double precision epa_electron,epa_proton
20 integer ipart,ireuse,iporg21 integer ipart,ireuse,iporg,ihlast(2)
21 save xlast,xmulast,pdflast22 save xlast,xmulast,pdflast,pdlabellast,ihlast
22 data xlast/2*0d0/23 data xlast/2*-99d9/
23 data pdflast/30*0d0/24 data xmulast/2*-99d9/
25 data pdflast/30*-99d9/
26 data pdlabellast/2*'abcdefg'/
27 data ihlast/2*-99/
28
29c Make sure we have a reasonable Bjorken x. Note that even though
30c x=0 is not reasonable, we prefer to simply return pdg2pdf=0
31c instead of stopping the code, as this might accidentally happen.
32 if (x.eq.0d0) then
33 pdg2pdf=0d0
34 return
35 elseif (x.lt.0d0 .or. x.gt.1d0) then
36 write (*,*) 'PDF not supported for Bjorken x ', x
37 open(unit=26,file='../../../error',status='unknown')
38 write(26,*) 'Error: PDF not supported for Bjorken x ',x
39 stop 1
40 endif
2441
25 ipart=ipdg42 ipart=ipdg
26 if(iabs(ipart).eq.21) ipart=043 if(iabs(ipart).eq.21) ipart=0
@@ -38,35 +55,53 @@
38 ireuse = 055 ireuse = 0
39 do i=1,256 do i=1,2
40c Check if result can be reused since any of last two calls57c Check if result can be reused since any of last two calls
41 if (x.eq.xlast(i).and.xmu.eq.xmulast(i)) then58 if (x.eq.xlast(i) .and. xmu.eq.xmulast(i) .and.
59 $ pdlabel.eq.pdlabellast(i) .and. ih.eq.ihlast(i)) then
42 ireuse = i60 ireuse = i
43 endif61 endif
44 enddo62 enddo
4563
46c If both x non-zero and not ireuse, then zero x64c Reuse previous result, if possible
47 if (ireuse.eq.0.and.xlast(1).ne.0d0.and.xlast(2).ne.0d0)then65 if (ireuse.gt.0.and.pdflast(iporg,ireuse).ne.-99d9) then
66 pdg2pdf=pdflast(iporg,ireuse)
67 return
68 endif
69
70c Bjorken x and/or facrorization scale and/or PDF set are not
71c identical to the saved values: this means a new event and we
72c should reset everything to compute new PDF values. Also, determine
73c if we should fill ireuse=1 or ireuse=2.
74 if (ireuse.eq.0.and.xlast(1).ne.-99d9.and.xlast(2).ne.-99d9)then
48 do i=1,275 do i=1,2
49 xlast(i)=0d076 xlast(i)=-99d9
50 xmulast(i)=0d077 xmulast(i)=-99d9
51 do j=-7,778 do j=-7,7
52 pdflast(j,i)=0d079 pdflast(j,i)=-99d9
53 enddo80 enddo
81 pdlabellast(i)='abcdefg'
82 ihlast(i)=-99
54 enddo83 enddo
84c everything has been reset. Now set ireuse=1 to fill the first
85c arrays of saved values below
55 ireuse=186 ireuse=1
56 else if(ireuse.eq.0.and.xlast(1).ne.0d0)then87 else if(ireuse.eq.0.and.xlast(1).ne.-99d9)then
88c This is first call after everything has been reset, so the first
89c arrays are already filled with the saved values (hence
90c xlast(1).ne.-99d9). Fill the second arrays of saved values (done
91c below) by setting ireuse=2
57 ireuse=292 ireuse=2
58 else if(ireuse.eq.0)then93 else if(ireuse.eq.0)then
94c Special: only used for the very first call to this function:
95c xlast(i) are initialized as data statements to be equal to -99d9
59 ireuse=196 ireuse=1
60 endif97 endif
6198
62c Reuse previous result, if possible99c Give the current values to the arrays that should be
63 if (ireuse.gt.0.and.pdflast(iporg,ireuse).ne.0d0) then100c saved. 'pdflast' is filled below.
64 pdg2pdf=pdflast(iporg,ireuse)
65 return
66 endif
67
68 xlast(ireuse)=x101 xlast(ireuse)=x
69 xmulast(ireuse)=xmu102 xmulast(ireuse)=xmu
103 pdlabellast(ireuse)=pdlabel
104 ihlast(ireuse)=ih
70105
71 if(iabs(ipart).eq.7.and.ih.gt.1) then106 if(iabs(ipart).eq.7.and.ih.gt.1) then
72 q2max=xmu*xmu107 q2max=xmu*xmu
73108
=== modified file 'Template/Source/PDF/pdg2pdf_lhapdf.f'
--- Template/Source/PDF/pdg2pdf_lhapdf.f 2011-11-22 13:37:54 +0000
+++ Template/Source/PDF/pdg2pdf_lhapdf.f 2013-03-04 23:37:19 +0000
@@ -7,36 +7,112 @@
7c Arguments7c Arguments
8c8c
9 DOUBLE PRECISION x,xmu9 DOUBLE PRECISION x,xmu
10 INTEGER IH,ipdg,ipart10 INTEGER IH,ipdg
11C11C
12C Include12C Include
13C13C
14 include 'pdf.inc'14 include 'pdf.inc'
15C 15C
16 double precision Ctq3df,Ctq4Fn,Ctq5Pdf,Ctq6Pdf,Ctq5L16 integer i,j,ihlast(2),ipart,iporg,ireuse,imemlast(2),iset,imem
17 integer mode,Irt,ihlast17 double precision xlast(2),xmulast(2),pdflast(-7:7,2)
18 double precision xlast,xmulast,pdflast(-7:7)18 save ihlast,xlast,xmulast,pdflast,imemlast
19 save ihlast,xlast,xmulast,pdflast19 data ihlast/2*-99/
20 data xlast/2*-99d9/
21 data xmulast/2*-99d9/
22 data pdflast/30*-99d9/
23 data imemlast/2*-99/
24
25c Make sure we have a reasonable Bjorken x. Note that even though
26c x=0 is not reasonable, we prefer to simply return pdg2pdf=0
27c instead of stopping the code, as this might accidentally happen.
28 if (x.eq.0d0) then
29 pdg2pdf=0d0
30 return
31 elseif (x.lt.0d0 .or. x.gt.1d0) then
32 write (*,*) 'PDF not supported for Bjorken x ', x
33 open(unit=26,file='../../../error',status='unknown')
34 write(26,*) 'Error: PDF not supported for Bjorken x ',x
35 stop 1
36 endif
2037
21 ipart=ipdg38 ipart=ipdg
22 if(ipart.eq.21) ipart=039 if(ipart.eq.21) ipart=0
23 if(iabs(ipart).eq.22) ipart=740 if(iabs(ipart).eq.22) ipart=7
41 iporg=ipart
2442
25c This will be called for any PDG code, but we only support up to 743c This will be called for any PDG code, but we only support up to 7
26 if(iabs(ipart).gt.7)then44 if(iabs(ipart).gt.7)then
27 pdg2pdf=0d045 write(*,*) 'PDF not supported for pdg ',ipdg
46 open(unit=26,file='../../../error',status='unknown')
47 write(26,*) 'Error: PDF not supported for pdg ',ipdg
48 stop 1
49 endif
50
51c Determine the iset used in lhapdf
52 call getnset(iset)
53 if (iset.ne.1) then
54 write (*,*) 'PDF not supported for Bjorken x ', x
55 open(unit=26,file='../../../error',status='unknown')
56 write(26,*) 'Error: PDF not supported for Bjorken x ',x
57 stop 1
58 endif
59
60c Determine the member of the set (function of lhapdf)
61 call getnmem(iset,imem)
62
63 ireuse = 0
64 do i=1,2
65c Check if result can be reused since any of last two calls
66 if (x.eq.xlast(i) .and. xmu.eq.xmulast(i) .and.
67 $ imem.eq.imemlast(i) .and. ih.eq.ihlast(i)) then
68 ireuse = i
69 endif
70 enddo
71
72c Reuse previous result, if possible
73 if (ireuse.gt.0.and.pdflast(iporg,ireuse).ne.-99d9) then
74 pdg2pdf=pdflast(iporg,ireuse)
28 return 75 return
29 endif76 endif
3077
31 if(ih.eq.ihlast.and.x.eq.xlast.and.xmu.eq.xmulast)then78c Bjorken x and/or facrorization scale and/or PDF set are not
32 pdg2pdf=pdflast(ipart);79c identical to the saved values: this means a new event and we
33 else80c should reset everything to compute new PDF values. Also, determine
34 call pftopdglha(ih,x,xmu,pdflast)81c if we should fill ireuse=1 or ireuse=2.
35 ihlast=ih82 if (ireuse.eq.0.and.xlast(1).ne.-99d9.and.xlast(2).ne.-99d9)then
36 xlast=x83 do i=1,2
37 xmulast=xmu84 xlast(i)=-99d9
38 pdg2pdf=pdflast(ipart);85 xmulast(i)=-99d9
86 do j=-7,7
87 pdflast(j,i)=-99d9
88 enddo
89 imemlast(i)=-99
90 ihlast(i)=-99
91 enddo
92c everything has been reset. Now set ireuse=1 to fill the first
93c arrays of saved values below
94 ireuse=1
95 else if(ireuse.eq.0.and.xlast(1).ne.-99d9)then
96c This is first call after everything has been reset, so the first
97c arrays are already filled with the saved values (hence
98c xlast(1).ne.-99d9). Fill the second arrays of saved values (done
99c below) by setting ireuse=2
100 ireuse=2
101 else if(ireuse.eq.0)then
102c Special: only used for the very first call to this function:
103c xlast(i) are initialized as data statements to be equal to -99d9
104 ireuse=1
39 endif105 endif
40106
107c Call lhapdf and give the current values to the arrays that should
108c be saved
109 call pftopdglha(ih,x,xmu,pdflast(-7,ireuse))
110 xlast(ireuse)=x
111 xmulast(ireuse)=xmu
112 ihlast(ireuse)=ih
113 imemlast(ireuse)=imem
114c
115 pdg2pdf=pdflast(ipart,ireuse);
116 return
41 end117 end
42118
43119
=== modified file 'Template/SubProcesses/cuts.f'
--- Template/SubProcesses/cuts.f 2012-11-07 06:36:14 +0000
+++ Template/SubProcesses/cuts.f 2013-03-04 23:37:19 +0000
@@ -111,6 +111,12 @@
111 LOGICAL IS_A_NU(NEXTERNAL),IS_HEAVY(NEXTERNAL)111 LOGICAL IS_A_NU(NEXTERNAL),IS_HEAVY(NEXTERNAL)
112 COMMON /TO_SPECISA/IS_A_J,IS_A_A,IS_A_L,IS_A_B,IS_A_NU,IS_HEAVY,112 COMMON /TO_SPECISA/IS_A_J,IS_A_A,IS_A_L,IS_A_B,IS_A_NU,IS_HEAVY,
113 . IS_A_ONIUM113 . IS_A_ONIUM
114C
115C Keep track of whether cuts already calculated for this event
116C
117 LOGICAL CUTSDONE,CUTSPASSED
118 COMMON/TO_CUTSDONE/CUTSDONE,CUTSPASSED
119 DATA CUTSDONE,CUTSPASSED/.FALSE.,.FALSE./
114120
115C $B$ MW_NEW_DEF $E$ !this is a tag for MadWeight121C $B$ MW_NEW_DEF $E$ !this is a tag for MadWeight
116122
@@ -221,7 +227,15 @@
221 enddo227 enddo
222 enddo228 enddo
223 229
230 ENDIF ! IF FIRSTTIME
231
232 IF (CUTSDONE) THEN
233 PASSCUTS=CUTSPASSED
234 RETURN
224 ENDIF235 ENDIF
236 CUTSDONE=.TRUE.
237 CUTSPASSED=.FALSE.
238
225c239c
226c Make sure have reasonable 4-momenta240c Make sure have reasonable 4-momenta
227c241c
@@ -239,6 +253,7 @@
239 endif253 endif
240 enddo254 enddo
241 enddo255 enddo
256
242c257c
243c Limit S_hat258c Limit S_hat
244c259c
@@ -784,6 +799,7 @@
784 if(debug) write (*,*) ' EVENT PASSED THE CUTS '799 if(debug) write (*,*) ' EVENT PASSED THE CUTS '
785 if(debug) write (*,*) '============================='800 if(debug) write (*,*) '============================='
786801
802 CUTSPASSED=.TRUE.
787803
788 RETURN804 RETURN
789 END805 END
790806
=== modified file 'Template/SubProcesses/myamp.f'
--- Template/SubProcesses/myamp.f 2012-11-10 07:06:45 +0000
+++ Template/SubProcesses/myamp.f 2013-03-04 23:37:19 +0000
@@ -466,7 +466,9 @@
466 spole(j)=prmass(i,iconfig)*prmass(i,iconfig)/stot466 spole(j)=prmass(i,iconfig)*prmass(i,iconfig)/stot
467 swidth(j) = prwidth(i,iconfig)*prmass(i,iconfig)/stot467 swidth(j) = prwidth(i,iconfig)*prmass(i,iconfig)/stot
468 endif468 endif
469 else if(iden_part(i).eq.0 .or. lbw(nbw).eq.1) then469 else if((prmass(i,iconfig)+5d0*prwidth(i,iconfig)).ge.xm(i)
470 $ .and. iden_part(i).eq.0 .or. lbw(nbw).eq.1) then
471c JA 02/13 Only allow BW if xm below M+5*Gamma
470 write(*,*) 'Setting BW',i,nbw,prmass(i,iconfig)472 write(*,*) 'Setting BW',i,nbw,prmass(i,iconfig)
471 spole(-i)=prmass(i,iconfig)*prmass(i,iconfig)/stot473 spole(-i)=prmass(i,iconfig)*prmass(i,iconfig)/stot
472 swidth(-i) = prwidth(i,iconfig)*prmass(i,iconfig)/stot474 swidth(-i) = prwidth(i,iconfig)*prmass(i,iconfig)/stot
473475
=== added file 'Template/bin/internal/run_delphes3'
--- Template/bin/internal/run_delphes3 1970-01-01 00:00:00 +0000
+++ Template/bin/internal/run_delphes3 2013-03-04 23:37:19 +0000
@@ -0,0 +1,38 @@
1#!/bin/bash
2#
3# This runs Delphes 3 on the pythia_events.hep
4#
5# Usage: run_delphes3 [delphes3dir [para/serial [run_name]]]
6# where delphes3dir is the path to the delphes3 executable
7
8delphesdir=$1
9run=$2
10tag=$3
11cross=$4
12
13main=`pwd`
14
15if [ ! -e ../Cards/delphes_card.dat ]; then
16 echo "No delphes_card.dat found. Quitting..."
17 exit
18fi
19
20if [ ! -e $delphesdir/DelphesSTDHEP ]; then
21 echo "No Delphes executable found at $delphesdir/DelphesSTDHEP. Quitting..."
22 exit
23fi
24
25echo $$ >> ../myprocid
26
27# Set delphes path in delphes_card.dat
28
29$delphesdir/DelphesSTDHEP ../Cards/delphes_card.dat delphes.root pythia_events.hep
30$delphesdir/root2lhco delphes.root delphes_events.lhco
31
32if [ -e delphes_events.lhco ]; then
33# write the delphes banner
34 sed -e "s/^/#/g" ${run}/${run}_${tag}_banner.txt > ${run}/${tag}_delphes_events.lhco
35 echo "## Integrated weight (pb) : ${cross}" >> ${run}/${tag}_delphes_events.lhco
36 cat delphes_events.lhco >> ${run}/${tag}_delphes_events.lhco
37 rm -f delphes_events.lhco
38fi
039
=== modified file 'UpdateNotes.txt'
--- UpdateNotes.txt 2013-01-15 18:59:13 +0000
+++ UpdateNotes.txt 2013-03-04 23:37:19 +0000
@@ -1,5 +1,51 @@
1Update notes for MadGraph 5 (in reverse time order)1Update notes for MadGraph 5 (in reverse time order)
22
31.5.8 (xx/xx/13) OM: Fix critical bug introduce in 1.5.0. ALOHA was wrongly written
4 HELAS routine for expression containing expression square.
5 (like P(-1,1)**2). None of the default model of MG5 (like sm/mssm)
6 have such type of expression. More information in bug report #1132996
7 (Thanks Gezim)
8 OM+JA: install Delphes now installs Delphes 3
9 [added command install Delphes2 to install Delphes 2]
10 OM: Add command in MadEvent interface: add_time_of_flight
11 This command modifies the lhe events file by adding the time of
12 flight information in the lhe events. To run this you need to do
13 $> ./bin/madevent
14 MGME> generate_events --laststep=parton -f
15 MGME> add_time_of_flight
16 MGME> pythia [if needed]
17 OM: Fix bug in pythia8 output for process using decay chains syntax.
18 See bug #1099790.
19 CDe+OM: Update EWdim6 model
20 OM: Fix a bug preventing model customized via the "customize_model"
21 command to use the automatic width computation.
22 OM: Change model restriction behavior: a value of 1 for a width is
23 not treated as a restriction rule.
24 OM: Fix incomplete restriction of the MSSM model leading to inefficient
25 process merging (and larger-than-necessary files) for the MSSM.
26 OM: Correct bug #1107603 (problem with condor cluster for submission
27 associated to a large number of jobs). Thanks Sanjay.
28 JA: Fix one part of the problem in bug #1123974: take into
29 account invariant mass cuts mmXX above the peak range in
30 s-channel resonances in the phase space integration,
31 to make sure such channels find events even for narrow
32 invariant mass cut ranges. Please note the discussion in
33 that bug report for other types of channels however.
34 JA: Fixed bug #1139303: matrix elements for identical
35 decay chain processes with different propagators (such as
36 p p > w+, w+ > e+ ve and p p > w-, w- > vm~ mu-)
37 are now no longer combined, to ensure that resonances are
38 correctly represented in event file.
39 OM: Support lhapdf set which contains photon (See bug #1131995).
40 RF+JA: Reuse last two PDF calls also for LHAPDF PDFs, clarify code
41 for reuse of PDFs in pdg2pdf.f and pdg2pdf_lhapdf.f
42 OM: Update the default delphes card to latest Delphes version. This
43 default card is automatically overwritten by the default Delphes
44 card when running "install Delphes".
45 JA: Make sure cuts are only checked once per event - this can save
46 a lot of time for multiparton event generation.
47 OM: Fix Bug #1142042 (crash in gridpack).
48
31.5.7 (15/01/13) OM+JA: Fixed crash linked to model_v4 for processes containing wwww or491.5.7 (15/01/13) OM+JA: Fixed crash linked to model_v4 for processes containing wwww or
4 zzww interactions. (See bug #1095603. Thanks to Tim Lu) 50 zzww interactions. (See bug #1095603. Thanks to Tim Lu)
5 OM: Fix a bug affecting 2>1 process when the final states particles is 51 OM: Fix a bug affecting 2>1 process when the final states particles is
652
=== modified file 'aloha/aloha_lib.py'
--- aloha/aloha_lib.py 2012-11-16 07:00:46 +0000
+++ aloha/aloha_lib.py 2013-03-04 23:37:19 +0000
@@ -134,7 +134,7 @@
134 argument.append(expression)134 argument.append(expression)
135 if str(fct_tag)+str(argument) in self.inverted_fct:135 if str(fct_tag)+str(argument) in self.inverted_fct:
136 return self.inverted_fct[str(fct_tag)+str(argument)]136 return self.inverted_fct[str(fct_tag)+str(argument)]
137 else:137 else:
138 self.fct_expr[tag] = (fct_tag, argument) 138 self.fct_expr[tag] = (fct_tag, argument)
139 self.reduced_expr2[tag] = (fct_tag, argument)139 self.reduced_expr2[tag] = (fct_tag, argument)
140 self.add_tag((tag,))140 self.add_tag((tag,))
141141
=== modified file 'aloha/aloha_parsers.py'
--- aloha/aloha_parsers.py 2012-09-28 07:37:00 +0000
+++ aloha/aloha_parsers.py 2013-03-04 23:37:19 +0000
@@ -208,7 +208,11 @@
208 def p_expression_power(self, p):208 def p_expression_power(self, p):
209 'expression : expression POWER expression'209 'expression : expression POWER expression'
210 210
211 if p[1] in self.aloha_object:211 obj = p[1]
212 if '(' in p[1]:
213 obj = p[1].split('(',1)[0]
214
215 if obj in self.aloha_object:
212 p[0] = ''.join(p[1:])216 p[0] = ''.join(p[1:])
213 else:217 else:
214 new = aloha_lib.KERNEL.add_function_expression('pow', eval(p[1]), eval(p[3]))218 new = aloha_lib.KERNEL.add_function_expression('pow', eval(p[1]), eval(p[3]))
215219
=== modified file 'aloha/aloha_writers.py'
--- aloha/aloha_writers.py 2012-11-06 19:34:27 +0000
+++ aloha/aloha_writers.py 2013-03-04 23:37:19 +0000
@@ -446,6 +446,7 @@
446 'log': 'log(dble(%s))',446 'log': 'log(dble(%s))',
447 'asin': 'asin(dble(%s))',447 'asin': 'asin(dble(%s))',
448 'acos': 'acos(dble(%s))',448 'acos': 'acos(dble(%s))',
449 '':'(%s)'
449 }450 }
450 451
451 if fct in self.fct_format:452 if fct in self.fct_format:
452453
=== modified file 'madgraph/VERSION'
--- madgraph/VERSION 2013-01-15 18:59:13 +0000
+++ madgraph/VERSION 2013-03-04 23:37:19 +0000
@@ -1,3 +1,3 @@
1version = 1.5.71version = 1.5.8.beta
2date = 2013-01-152date = 2013-01-15
33
44
=== modified file 'madgraph/core/base_objects.py'
--- madgraph/core/base_objects.py 2013-01-11 23:40:35 +0000
+++ madgraph/core/base_objects.py 2013-03-04 23:37:19 +0000
@@ -1772,11 +1772,13 @@
1772 self['overall_orders'] = {}1772 self['overall_orders'] = {}
1773 # Decay chain processes associated with this process1773 # Decay chain processes associated with this process
1774 self['decay_chains'] = ProcessList()1774 self['decay_chains'] = ProcessList()
1775 # Legs with decay chains substituted in
1776 self['legs_with_decays'] = LegList()
17751777
1776 def filter(self, name, value):1778 def filter(self, name, value):
1777 """Filter for valid process property values."""1779 """Filter for valid process property values."""
17781780
1779 if name == 'legs':1781 if name in ['legs', 'legs_with_decays'] :
1780 if not isinstance(value, LegList):1782 if not isinstance(value, LegList):
1781 raise self.PhysicsObjectError, \1783 raise self.PhysicsObjectError, \
1782 "%s is not a valid LegList object" % str(value)1784 "%s is not a valid LegList object" % str(value)
@@ -1862,13 +1864,21 @@
18621864
1863 return super(Process, self).set(name, value) # call the mother routine1865 return super(Process, self).set(name, value) # call the mother routine
18641866
1867 def get(self, name):
1868 """Special get for legs_with_decays"""
1869
1870 if name == 'legs_with_decays':
1871 self.get_legs_with_decays()
1872
1873 return super(Process, self).get(name) # call the mother routine
1874
1865 def get_sorted_keys(self):1875 def get_sorted_keys(self):
1866 """Return process property names as a nicely sorted list."""1876 """Return process property names as a nicely sorted list."""
18671877
1868 return ['legs', 'orders', 'overall_orders', 'model', 'id',1878 return ['legs', 'orders', 'overall_orders', 'model', 'id',
1869 'required_s_channels', 'forbidden_onsh_s_channels',1879 'required_s_channels', 'forbidden_onsh_s_channels',
1870 'forbidden_s_channels',1880 'forbidden_s_channels', 'forbidden_particles',
1871 'forbidden_particles', 'is_decay_chain', 'decay_chains']1881 'is_decay_chain', 'decay_chains', 'legs_with_decays']
18721882
1873 def nice_string(self, indent=0):1883 def nice_string(self, indent=0):
1874 """Returns a nicely formated string about current process1884 """Returns a nicely formated string about current process
@@ -1880,7 +1890,7 @@
1880 mypart = self['model'].get('particle_dict')[leg['id']]1890 mypart = self['model'].get('particle_dict')[leg['id']]
1881 if prevleg and prevleg['state'] == False \1891 if prevleg and prevleg['state'] == False \
1882 and leg['state'] == True:1892 and leg['state'] == True:
1883 # Separate initial and final legs by ">"1893 # Separate initial and final legs by >
1884 mystr = mystr + '> '1894 mystr = mystr + '> '
1885 # Add required s-channels1895 # Add required s-channels
1886 if self['required_s_channels'] and \1896 if self['required_s_channels'] and \
@@ -2152,9 +2162,10 @@
2152 def get_legs_with_decays(self):2162 def get_legs_with_decays(self):
2153 """Return process with all decay chains substituted in."""2163 """Return process with all decay chains substituted in."""
21542164
2165 if self['legs_with_decays']:
2166 return self['legs_with_decays']
2167
2155 legs = copy.deepcopy(self.get('legs'))2168 legs = copy.deepcopy(self.get('legs'))
2156 if self.get('is_decay_chain'):
2157 legs.pop(0)
2158 org_decay_chains = copy.copy(self.get('decay_chains'))2169 org_decay_chains = copy.copy(self.get('decay_chains'))
2159 sorted_decay_chains = []2170 sorted_decay_chains = []
2160 # Sort decay chains according to leg order2171 # Sort decay chains according to leg order
@@ -2172,13 +2183,18 @@
2172 legs[ileg].get('id') != decay.get('legs')[0].get('id'):2183 legs[ileg].get('id') != decay.get('legs')[0].get('id'):
2173 ileg = ileg + 12184 ileg = ileg + 1
2174 decay_legs = decay.get_legs_with_decays()2185 decay_legs = decay.get_legs_with_decays()
2175 legs = legs[:ileg] + decay_legs + legs[ileg+1:]2186 legs = legs[:ileg] + decay_legs[1:] + legs[ileg+1:]
2176 ileg = ileg + len(decay_legs)2187 ileg = ileg + len(decay_legs) - 1
2188
2189 # Replace legs with copies
2190 legs = [copy.copy(l) for l in legs]
21772191
2178 for ileg, leg in enumerate(legs):2192 for ileg, leg in enumerate(legs):
2179 leg.set('number', ileg + 1)2193 leg.set('number', ileg + 1)
2180 2194
2181 return LegList(legs)2195 self['legs_with_decays'] = LegList(legs)
2196
2197 return self['legs_with_decays']
21822198
2183 def list_for_sort(self):2199 def list_for_sort(self):
2184 """Output a list that can be compared to other processes as:2200 """Output a list that can be compared to other processes as:
@@ -2290,6 +2306,7 @@
2290 self['legs'] = MultiLegList()2306 self['legs'] = MultiLegList()
2291 # Decay chain processes associated with this process2307 # Decay chain processes associated with this process
2292 self['decay_chains'] = ProcessDefinitionList()2308 self['decay_chains'] = ProcessDefinitionList()
2309 if 'legs_with_decays' in self: del self['legs_with_decays']
22932310
2294 def filter(self, name, value):2311 def filter(self, name, value):
2295 """Filter for valid process property values."""2312 """Filter for valid process property values."""
@@ -2311,7 +2328,10 @@
2311 def get_sorted_keys(self):2328 def get_sorted_keys(self):
2312 """Return process property names as a nicely sorted list."""2329 """Return process property names as a nicely sorted list."""
23132330
2314 return super(ProcessDefinition, self).get_sorted_keys()2331 keys = super(ProcessDefinition, self).get_sorted_keys()
2332 keys.remove('legs_with_decays')
2333
2334 return keys
23152335
2316 def get_minimum_WEIGHTED(self):2336 def get_minimum_WEIGHTED(self):
2317 """Retrieve the minimum starting guess for WEIGHTED order, to2337 """Retrieve the minimum starting guess for WEIGHTED order, to
23182338
=== modified file 'madgraph/core/diagram_generation.py'
--- madgraph/core/diagram_generation.py 2012-12-06 05:57:21 +0000
+++ madgraph/core/diagram_generation.py 2013-03-04 23:37:19 +0000
@@ -1038,9 +1038,15 @@
1038 decay_ids.remove(l.get('id'))1038 decay_ids.remove(l.get('id'))
1039 1039
1040 if decay_ids:1040 if decay_ids:
1041 logger.warning("Warning: " + \1041 model = amp.get('process').get('model')
1042 "Decay without corresponding particle in core process found. " + \1042 names = [model.get_particle(id).get('name') for id in decay_ids]
1043 "Please check your process definition carefully.")1043
1044 logger.warning(
1045 "$RED Decay without corresponding particle in core process found.\n" + \
1046 "Decay information for particle(s) %s is discarded.\n" % ','.join(names) + \
1047 "Please check your process definition carefully. \n" + \
1048 "This warning usually means that you forgot parentheses in presence of subdecay.\n" + \
1049 "Example of correct syntax: p p > t t~, ( t > w+ b, w+ > l+ vl)")
10441050
1045 # Remove unused decays from the process list1051 # Remove unused decays from the process list
1046 for dc in reversed(self['decay_chains']):1052 for dc in reversed(self['decay_chains']):
10471053
=== modified file 'madgraph/core/helas_objects.py'
--- madgraph/core/helas_objects.py 2013-01-13 10:50:01 +0000
+++ madgraph/core/helas_objects.py 2013-03-04 23:37:19 +0000
@@ -202,6 +202,7 @@
202 # We should not get here202 # We should not get here
203 assert(False)203 assert(False)
204 204
205
205#===============================================================================206#===============================================================================
206# HelasWavefunction207# HelasWavefunction
207#===============================================================================208#===============================================================================
@@ -2814,6 +2815,10 @@
2814 to decay matrix element.2815 to decay matrix element.
2815 """2816 """
28162817
2818 # First need to reset all legs_with_decays
2819 for proc in self.get('processes'):
2820 proc.set('legs_with_decays', base_objects.LegList())
2821
2817 # We need to keep track of how the2822 # We need to keep track of how the
2818 # wavefunction numbers change2823 # wavefunction numbers change
2819 replace_dict = {}2824 replace_dict = {}
@@ -4085,6 +4090,8 @@
4085 matrix_elements = HelasMatrixElementList()4090 matrix_elements = HelasMatrixElementList()
4086 # Store matrix element tags in me_tags, for precise comparison4091 # Store matrix element tags in me_tags, for precise comparison
4087 me_tags = []4092 me_tags = []
4093 # Store external id permutations
4094 permutations = []
4088 4095
4089 # List of list of ids for the initial state legs in all decay4096 # List of list of ids for the initial state legs in all decay
4090 # processes4097 # processes
@@ -4217,11 +4224,7 @@
4217 # If an identical matrix element is already in the list,4224 # If an identical matrix element is already in the list,
4218 # then simply add this process to the list of4225 # then simply add this process to the list of
4219 # processes for that matrix element4226 # processes for that matrix element
4220 other_processes = matrix_elements[\4227 me_index = me_tags.index(me_tag)
4221 me_tags.index(me_tag)].get('processes')
4222 logger.info("Combining process with %s" % \
4223 other_processes[0].nice_string().replace('Process: ', ''))
4224 other_processes.extend(matrix_element.get('processes'))
4225 except ValueError:4228 except ValueError:
4226 # Otherwise, if the matrix element has any diagrams,4229 # Otherwise, if the matrix element has any diagrams,
4227 # add this matrix element.4230 # add this matrix element.
@@ -4229,8 +4232,17 @@
4229 matrix_element.get('diagrams'):4232 matrix_element.get('diagrams'):
4230 matrix_elements.append(matrix_element)4233 matrix_elements.append(matrix_element)
4231 me_tags.append(me_tag)4234 me_tags.append(me_tag)
42324235 permutations.append(me_tag[-1][0].\
42334236 get_external_numbers())
4237 else: # try
4238 other_processes = matrix_elements[me_index].get('processes')
4239 logger.info("Combining process with %s" % \
4240 other_processes[0].nice_string().replace('Process: ', ''))
4241 for proc in matrix_element.get('processes'):
4242 other_processes.append(HelasMultiProcess.\
4243 reorder_process(proc,
4244 permutations[me_index],
4245 me_tag[-1][0].get_external_numbers()))
42344246
4235 return matrix_elements4247 return matrix_elements
42364248
@@ -4366,9 +4378,53 @@
4366 amplitude = amplitudes.pop(0)4378 amplitude = amplitudes.pop(0)
4367 if isinstance(amplitude, diagram_generation.DecayChainAmplitude):4379 if isinstance(amplitude, diagram_generation.DecayChainAmplitude):
4368 # Might get multiple matrix elements from this amplitude4380 # Might get multiple matrix elements from this amplitude
4369 matrix_element_list = HelasDecayChainProcess(amplitude).\4381 tmp_matrix_element_list = HelasDecayChainProcess(amplitude).\
4370 combine_decay_chain_processes()4382 combine_decay_chain_processes()
4371 else:4383 # Use IdentifyMETag to check if matrix elements present
4384 matrix_element_list = []
4385 for matrix_element in tmp_matrix_element_list:
4386 assert isinstance(matrix_element, HelasMatrixElement), \
4387 "Not a HelasMatrixElement: %s" % matrix_element
4388
4389 # If the matrix element has no diagrams,
4390 # remove this matrix element.
4391 if not matrix_element.get('processes') or \
4392 not matrix_element.get('diagrams'):
4393 continue
4394
4395 # Create IdentifyMETag
4396 amplitude_tag = IdentifyMETag.create_tag(\
4397 matrix_element.get_base_amplitude())
4398 try:
4399 me_index = amplitude_tags.index(amplitude_tag)
4400 except ValueError:
4401 # Create matrix element for this amplitude
4402 matrix_element_list.append(matrix_element)
4403 if combine_matrix_elements:
4404 amplitude_tags.append(amplitude_tag)
4405 identified_matrix_elements.append(matrix_element)
4406 permutations.append(amplitude_tag[-1][0].\
4407 get_external_numbers())
4408 else: # try
4409 # Identical matrix element found
4410 other_processes = identified_matrix_elements[me_index].\
4411 get('processes')
4412 # Reorder each of the processes
4413 # Since decay chain, only reorder legs_with_decays
4414 for proc in matrix_element.get('processes'):
4415 other_processes.append(cls.reorder_process(\
4416 proc,
4417 permutations[me_index],
4418 amplitude_tag[-1][0].get_external_numbers()))
4419 logger.info("Combined %s with %s" % \
4420 (matrix_element.get('processes')[0].\
4421 nice_string().\
4422 replace('Process: ', 'process '),
4423 other_processes[0].nice_string().\
4424 replace('Process: ', 'process ')))
4425 # Go on to next matrix element
4426 continue
4427 else: # not DecayChainAmplitude
4372 # Create tag identifying the matrix element using4428 # Create tag identifying the matrix element using
4373 # IdentifyMETag. If two amplitudes have the same tag,4429 # IdentifyMETag. If two amplitudes have the same tag,
4374 # they have the same matrix element4430 # they have the same matrix element
@@ -4391,6 +4447,8 @@
4391 identified_matrix_elements.append(me)4447 identified_matrix_elements.append(me)
4392 permutations.append(amplitude_tag[-1][0].\4448 permutations.append(amplitude_tag[-1][0].\
4393 get_external_numbers())4449 get_external_numbers())
4450 else:
4451 matrix_element_list = []
4394 else:4452 else:
4395 # Identical matrix element found4453 # Identical matrix element found
4396 other_processes = identified_matrix_elements[me_index].\4454 other_processes = identified_matrix_elements[me_index].\
@@ -4412,39 +4470,6 @@
4412 assert isinstance(matrix_element, HelasMatrixElement), \4470 assert isinstance(matrix_element, HelasMatrixElement), \
4413 "Not a HelasMatrixElement: %s" % matrix_element4471 "Not a HelasMatrixElement: %s" % matrix_element
44144472
4415 # If the matrix element has no diagrams,
4416 # remove this matrix element.
4417 if not matrix_element.get('processes') or \
4418 not matrix_element.get('diagrams'):
4419 continue
4420
4421 # Check if identical matrix element already present
4422 if matrix_element in matrix_elements:
4423 me = matrix_elements[matrix_elements.index(matrix_element)]
4424 me_procs = me.get('processes')
4425 procs = matrix_element.get('processes')
4426 if me_procs[0].get_ninitial() > 1 or \
4427 procs[0].get_initial_ids() == \
4428 me_procs[0].get_initial_ids():
4429 logger.info("Combining process %s with %s" % \
4430 (procs[0].nice_string().\
4431 replace('Process: ', ''),
4432 me_procs[0].nice_string().\
4433 replace('Process: ', '')))
4434 for proc in procs:
4435 if proc not in me_procs:
4436 me_procs.append(proc)
4437 else:
4438 raise InvalidCmd,("Duplicate process %s found."\
4439 +" Please check your processes.") % \
4440 proc.nice_string().replace('Process: ', '')
4441 # Remove this matrix element from the lists
4442 if combine_matrix_elements and amplitude_tags:
4443 amplitude_tags.pop(-1)
4444 identified_matrix_elements.pop(-1)
4445 permutations.pop(-1)
4446 continue
4447
4448 # Otherwise, add this matrix element to list4473 # Otherwise, add this matrix element to list
4449 matrix_elements.append(matrix_element)4474 matrix_elements.append(matrix_element)
44504475
@@ -4500,9 +4525,13 @@
4500 between org_perm and proc_perm"""4525 between org_perm and proc_perm"""
45014526
4502 leglist = base_objects.LegList(\4527 leglist = base_objects.LegList(\
4503 [copy.copy(process.get('legs')[i]) for i in \4528 [copy.copy(process.get('legs_with_decays')[i]) for i in \
4504 diagram_generation.DiagramTag.reorder_permutation(\4529 diagram_generation.DiagramTag.reorder_permutation(\
4505 proc_perm, org_perm)])4530 proc_perm, org_perm)])
4506 new_proc = copy.copy(process)4531 new_proc = copy.copy(process)
4507 new_proc.set('legs', leglist)4532 new_proc.set('legs_with_decays', leglist)
4533
4534 if not new_proc.get('decay_chains'):
4535 new_proc.set('legs', leglist)
4536
4508 return new_proc4537 return new_proc
45094538
=== modified file 'madgraph/interface/madevent_interface.py'
--- madgraph/interface/madevent_interface.py 2013-01-12 16:41:27 +0000
+++ madgraph/interface/madevent_interface.py 2013-03-04 23:37:19 +0000
@@ -382,6 +382,14 @@
382 self.run_options_help([('-f', 'Use default for all questions.'),382 self.run_options_help([('-f', 'Use default for all questions.'),
383 ('--laststep=', 'argument might be parton/pythia/pgs/delphes and indicate the last level to be run.')])383 ('--laststep=', 'argument might be parton/pythia/pgs/delphes and indicate the last level to be run.')])
384384
385
386 def help_add_time_of_flight(self):
387 logger.info("syntax: add_time_of_flight [run_name|path_to_file] [--treshold=]")
388 logger.info('-- Add in the lhe files the information')
389 logger.info(' of how long it takes to a particle to decay.')
390 logger.info(' threshold option allows to change the minimal value required to')
391 logger.info(' a non zero value for the particle (default:1e-12s)')
392
385 def help_calculate_decay_widths(self):393 def help_calculate_decay_widths(self):
386 394
387 if self.ninitial != 1:395 if self.ninitial != 1:
@@ -791,6 +799,43 @@
791 799
792 return run800 return run
793801
802 def check_add_time_of_flight(self, args):
803 """check that the argument are correct"""
804
805
806 if len(args) >2:
807 self.help_time_of_flight()
808 raise self.InvalidCmd('Too many arguments')
809
810 # check if the threshold is define. and keep it's value
811 if args and args[-1].startswith('--threshold='):
812 try:
813 threshold = float(args[-1].split('=')[1])
814 except ValueError:
815 raise self.InvalidCmd('threshold options require a number.')
816 args.remove(args[-1])
817 else:
818 threshold = 1e-12
819
820 if len(args) == 1 and os.path.exists(args[0]):
821 event_path = args[0]
822 else:
823 if len(args) and self.run_name != args[0]:
824 self.set_run_name(args.pop(0))
825 elif not self.run_name:
826 self.help_add_secondary_vertex()
827 raise self.InvalidCmd('Need a run_name to process')
828 event_path = pjoin(self.me_dir, 'Events', self.run_name, 'unweighted_events.lhe.gz')
829 if not os.path.exists(event_path):
830 event_path = event_path[:-3]
831 if not os.path.exists(event_path):
832 raise self.InvalidCmd('No unweighted events associate to this run.')
833
834
835
836 #reformat the data
837 args[:] = [event_path, threshold]
838
794 def check_calculate_decay_widths(self, args):839 def check_calculate_decay_widths(self, args):
795 """check that the argument for calculate_decay_widths are valid"""840 """check that the argument for calculate_decay_widths are valid"""
796 841
@@ -896,11 +941,18 @@
896 except:941 except:
897 raise self.ConfigurationError, '''Can\'t load MG5.942 raise self.ConfigurationError, '''Can\'t load MG5.
898 The variable mg5_path should not be correctly configure.'''943 The variable mg5_path should not be correctly configure.'''
899 944
945 ufo_path = pjoin(self.me_dir,'bin','internal', 'ufomodel')
900 # Import model946 # Import model
901 if not MADEVENT:947 if not MADEVENT:
902 modelname = self.find_model_name()948 modelname = self.find_model_name()
903 model = import_ufo.import_model(modelname, decay=True)949 restrict_file = None
950 if os.path.exists(pjoin(ufo_path, 'restrict_default.dat')):
951 restrict_file = pjoin(ufo_path, 'restrict_default.dat')
952 model = import_ufo.import_model(modelname, decay=True,
953 restrict_file=restrict_file)
954
955
904 else:956 else:
905 model = import_ufo.import_model(pjoin(self.me_dir,'bin','internal', 'ufomodel'),957 model = import_ufo.import_model(pjoin(self.me_dir,'bin','internal', 'ufomodel'),
906 decay=True)958 decay=True)
@@ -1256,6 +1308,24 @@
1256class CompleteForCmd(CheckValidForCmd):1308class CompleteForCmd(CheckValidForCmd):
1257 """ The Series of help routine for the MadGraphCmd"""1309 """ The Series of help routine for the MadGraphCmd"""
1258 1310
1311
1312 def complete_add_time_of_flight(self, text, line, begidx, endidx):
1313 "Complete command"
1314
1315 args = self.split_arg(line[0:begidx], error=False)
1316
1317 if len(args) == 1:
1318 #return valid run_name
1319 data = glob.glob(pjoin(self.me_dir, 'Events', '*','unweighted_events.lhe.gz'))
1320 data = [n.rsplit('/',2)[1] for n in data]
1321 return self.list_completion(text, data + ['--threshold='], line)
1322 elif args[-1].endswith(os.path.sep):
1323 return self.path_completion(text,
1324 os.path.join('.',*[a for a in args \
1325 if a.endswith(os.path.sep)]))
1326 else:
1327 return self.list_completion(text, ['--threshold='], line)
1328
1259 def complete_banner_run(self, text, line, begidx, endidx):1329 def complete_banner_run(self, text, line, begidx, endidx):
1260 "Complete the banner run command"1330 "Complete the banner run command"
1261 try:1331 try:
@@ -1587,7 +1657,7 @@
1587 'nb_core': None,1657 'nb_core': None,
1588 'cluster_temp_path':None}1658 'cluster_temp_path':None}
1589 1659
1590 helporder = ['Main Command', 'Documented commands', 'Require MG5 directory',1660 helporder = ['Main commands', 'Documented commands', 'Require MG5 directory',
1591 'Advanced commands']1661 'Advanced commands']
1592 1662
1593 ############################################################################1663 ############################################################################
@@ -1822,6 +1892,59 @@
1822 return self.options1892 return self.options
18231893
1824 ############################################################################1894 ############################################################################
1895 def do_add_time_of_flight(self, line):
1896
1897 args = self.split_arg(line)
1898 #check the validity of the arguments and reformat args
1899 self.check_add_time_of_flight(args)
1900
1901 event_path, threshold = args
1902 #gunzip the file
1903 if event_path.endswith('.gz'):
1904 need_zip = True
1905 subprocess.call(['gunzip', event_path])
1906 event_path = event_path[:-3]
1907 else:
1908 need_zip = False
1909
1910 import random
1911 try:
1912 import madgraph.various.lhe_parser as lhe_parser
1913 except:
1914 import internal.lhe_parser as lhe_parser
1915
1916 lhe = lhe_parser.EventFile(event_path)
1917 output = open('%s_2vertex.lhe' % event_path, 'w')
1918 #write the banner to the output file
1919 output.write(lhe.banner)
1920
1921 # get the associate param_card
1922 begin_param = lhe.banner.find('<slha>')
1923 end_param = lhe.banner.find('</slha>')
1924 param_card = lhe.banner[begin_param+6:end_param].split('\n')
1925 param_card = check_param_card.ParamCard(param_card)
1926
1927 cst = 6.58211915e-25
1928 # Loop over all events
1929 for event in lhe:
1930 for particle in event:
1931 id = particle.pid
1932 width = param_card['decay'].get((abs(id),)).value
1933 if width:
1934 vtim = random.expovariate(width/cst)
1935 if vtim > threshold:
1936 particle.vtim = vtim
1937 #write this modify event
1938 output.write(str(event))
1939 output.write('</LesHouchesEvents>\n')
1940 output.close()
1941
1942 files.mv('%s_2vertex.lhe' % event_path, event_path)
1943
1944 if need_zip:
1945 subprocess.call(['gzip', event_path])
1946
1947 ############################################################################
1825 def do_banner_run(self, line): 1948 def do_banner_run(self, line):
1826 """Make a run from the banner file"""1949 """Make a run from the banner file"""
1827 1950
@@ -2685,7 +2808,7 @@
2685 self.ask_edit_cards(['param'], [], plot=False)2808 self.ask_edit_cards(['param'], [], plot=False)
2686 2809
2687 model = args['model']2810 model = args['model']
2688 2811
2689 data = model.set_parameters_and_couplings(pjoin(self.me_dir,'Cards', 2812 data = model.set_parameters_and_couplings(pjoin(self.me_dir,'Cards',
2690 'param_card.dat'))2813 'param_card.dat'))
2691 2814
@@ -3353,6 +3476,9 @@
3353 def do_delphes(self, line):3476 def do_delphes(self, line):
3354 """ run delphes and make associate root file/plot """3477 """ run delphes and make associate root file/plot """
3355 3478
3479
3480
3481
3356 args = self.split_arg(line)3482 args = self.split_arg(line)
3357 # Check argument's validity3483 # Check argument's validity
3358 if '--no_default' in args:3484 if '--no_default' in args:
@@ -3362,6 +3488,15 @@
3362 no_default = False3488 no_default = False
3363 self.check_delphes(args) 3489 self.check_delphes(args)
3364 self.update_status('prepare delphes run', level=None)3490 self.update_status('prepare delphes run', level=None)
3491
3492 delphes_dir = self.options['delphes_path']
3493 if os.path.exists(pjoin(delphes_dir, 'data')):
3494 delphes3 = False
3495 prog = '../bin/internal/run_delphes'
3496 else:
3497 delphes3 = True
3498 prog = '../bin/internal/run_delphes3'
3499
3365 3500
3366 # Check that the delphes_card exists. If not copy the default and3501 # Check that the delphes_card exists. If not copy the default and
3367 # ask for edition of the card.3502 # ask for edition of the card.
@@ -3373,36 +3508,38 @@
3373 files.cp(pjoin(self.me_dir, 'Cards', 'delphes_card_default.dat'),3508 files.cp(pjoin(self.me_dir, 'Cards', 'delphes_card_default.dat'),
3374 pjoin(self.me_dir, 'Cards', 'delphes_card.dat'))3509 pjoin(self.me_dir, 'Cards', 'delphes_card.dat'))
3375 logger.info('No delphes card found. Take the default one.')3510 logger.info('No delphes card found. Take the default one.')
3376 if not os.path.exists(pjoin(self.me_dir, 'Cards', 'delphes_trigger.dat')): 3511 if not delphes3 and not os.path.exists(pjoin(self.me_dir, 'Cards', 'delphes_trigger.dat')):
3377 files.cp(pjoin(self.me_dir, 'Cards', 'delphes_trigger_default.dat'),3512 files.cp(pjoin(self.me_dir, 'Cards', 'delphes_trigger_default.dat'),
3378 pjoin(self.me_dir, 'Cards', 'delphes_trigger.dat'))3513 pjoin(self.me_dir, 'Cards', 'delphes_trigger.dat'))
3379 if not (no_default or self.force):3514 if not (no_default or self.force):
3380 self.ask_edit_cards(['delphes', 'trigger'], args)3515 if delphes3:
3381 3516 self.ask_edit_cards(['delphes'], args)
3517 else:
3518 self.ask_edit_cards(['delphes', 'trigger'], args)
3519
3382 self.update_status('Running Delphes', level=None) 3520 self.update_status('Running Delphes', level=None)
3383 # Wait that the gunzip of the files is finished (if any)3521 # Wait that the gunzip of the files is finished (if any)
3384 if hasattr(self, 'control_thread') and self.control_thread[0]:3522 if hasattr(self, 'control_thread') and self.control_thread[0]:
3385 self.monitor(mode=2) 3523 self.monitor(mode=2)
33863524
33873525
3388
3389 delphes_dir = self.options['delphes_path']
3390 tag = self.run_tag3526 tag = self.run_tag
3391 self.banner.add(pjoin(self.me_dir, 'Cards','delphes_card.dat'))3527 self.banner.add(pjoin(self.me_dir, 'Cards','delphes_card.dat'))
3392 self.banner.add(pjoin(self.me_dir, 'Cards','delphes_trigger.dat'))3528 if not delphes3:
3529 self.banner.add(pjoin(self.me_dir, 'Cards','delphes_trigger.dat'))
3393 self.banner.write(pjoin(self.me_dir, 'Events', self.run_name, '%s_%s_banner.txt' % (self.run_name, tag)))3530 self.banner.write(pjoin(self.me_dir, 'Events', self.run_name, '%s_%s_banner.txt' % (self.run_name, tag)))
3394 3531
3395 cross = self.results[self.run_name].get_current_info()['cross']3532 cross = self.results[self.run_name].get_current_info()['cross']
3396 3533
3397 if self.cluster_mode == 1:3534 if self.cluster_mode == 1:
3398 delphes_log = pjoin(self.me_dir, 'Events', self.run_name, "%s_delphes.log" % tag)3535 delphes_log = pjoin(self.me_dir, 'Events', self.run_name, "%s_delphes.log" % tag)
3399 self.cluster.launch_and_wait('../bin/internal/run_delphes', 3536 self.cluster.launch_and_wait(prog,
3400 argument= [delphes_dir, self.run_name, tag, str(cross)],3537 argument= [delphes_dir, self.run_name, tag, str(cross)],
3401 stdout=delphes_log, stderr=subprocess.STDOUT,3538 stdout=delphes_log, stderr=subprocess.STDOUT,
3402 cwd=pjoin(self.me_dir,'Events'))3539 cwd=pjoin(self.me_dir,'Events'))
3403 else:3540 else:
3404 delphes_log = open(pjoin(self.me_dir, 'Events', self.run_name, "%s_delphes.log" % tag),'w')3541 delphes_log = open(pjoin(self.me_dir, 'Events', self.run_name, "%s_delphes.log" % tag),'w')
3405 misc.call(['../bin/internal/run_delphes', delphes_dir, 3542 misc.call([prog, delphes_dir,
3406 self.run_name, tag, str(cross)],3543 self.run_name, tag, str(cross)],
3407 stdout= delphes_log, stderr=subprocess.STDOUT,3544 stdout= delphes_log, stderr=subprocess.STDOUT,
3408 cwd=pjoin(self.me_dir,'Events'))3545 cwd=pjoin(self.me_dir,'Events'))
@@ -3588,7 +3725,7 @@
3588 logger.info(error)3725 logger.info(error)
3589 if not self.force:3726 if not self.force:
3590 ans = self.ask('Cluster Error detected. Do you want to clean the queue?',3727 ans = self.ask('Cluster Error detected. Do you want to clean the queue?',
3591 default = 'y', answers=['y','n'])3728 default = 'y', choices=['y','n'])
3592 else:3729 else:
3593 ans = 'y'3730 ans = 'y'
3594 if ans:3731 if ans:
@@ -3999,11 +4136,12 @@
3999 pjoin(self.me_dir,'Events','xsecs.tree'))4136 pjoin(self.me_dir,'Events','xsecs.tree'))
4000 4137
4001 # Generate the matching plots4138 # Generate the matching plots
4139 devnull = open(os.devnull, 'w')
4002 misc.call([self.dirbin+'/create_matching_plots.sh', 4140 misc.call([self.dirbin+'/create_matching_plots.sh',
4003 self.run_name, tag, madir],4141 self.run_name, tag, madir],
4004 stdout = os.open(os.devnull, os.O_RDWR),4142 stdout = devnull,
4005 cwd=pjoin(self.me_dir,'Events'))4143 cwd=pjoin(self.me_dir,'Events'))
40064144 devnull.close()
4007 #Clean output4145 #Clean output
4008 misc.call(['gzip','-f','events.tree'], 4146 misc.call(['gzip','-f','events.tree'],
4009 cwd=pjoin(self.me_dir,'Events')) 4147 cwd=pjoin(self.me_dir,'Events'))
@@ -4162,10 +4300,14 @@
4162 cards.append('pgs_card.dat')4300 cards.append('pgs_card.dat')
4163 elif mode == 'delphes':4301 elif mode == 'delphes':
4164 self.add_card_to_run('delphes')4302 self.add_card_to_run('delphes')
4165 self.add_card_to_run('trigger')4303 delphes3 = True
4304 if os.path.exists(pjoin(self.options['delphes_path'], 'data')):
4305 delphes3 = False
4306 self.add_card_to_run('trigger')
4166 cards.append('delphes_card.dat')4307 cards.append('delphes_card.dat')
41674308
4168 if self.force:4309 if self.force:
4310 self.check_param_card(pjoin(self.me_dir,'Cards','param_card.dat' ))
4169 return4311 return
41704312
4171 def get_question(mode):4313 def get_question(mode):
@@ -4185,11 +4327,12 @@
4185 possible_answer.append('pgs') 4327 possible_answer.append('pgs')
4186 elif mode == 'delphes':4328 elif mode == 'delphes':
4187 question += ' 5 / delphes : delphes_card.dat\n'4329 question += ' 5 / delphes : delphes_card.dat\n'
4188 question += ' 6 / trigger : delphes_trigger.dat\n'
4189 possible_answer.append(5)4330 possible_answer.append(5)
4190 possible_answer.append('delphes')4331 possible_answer.append('delphes')
4191 possible_answer.append(6)4332 if not delphes3:
4192 possible_answer.append('trigger')4333 question += ' 6 / trigger : delphes_trigger.dat\n'
4334 possible_answer.append(6)
4335 possible_answer.append('trigger')
4193 if self.options['madanalysis_path']:4336 if self.options['madanalysis_path']:
4194 question += ' 9 / plot : plot_card.dat\n'4337 question += ' 9 / plot : plot_card.dat\n'
4195 possible_answer.append(9)4338 possible_answer.append(9)
@@ -4263,7 +4406,7 @@
4263 1 / pythia : Pythia 4406 1 / pythia : Pythia
4264 2 / pgs : Pythia + PGS\n"""4407 2 / pgs : Pythia + PGS\n"""
4265 if '3' in available_mode:4408 if '3' in available_mode:
4266 question += """ 3 / delphes : Pythia + Delphes.\n"""4409 question += """ 3 / delphes : Pythia + Delphes.\n"""
42674410
4268 if not self.force:4411 if not self.force:
4269 if not mode:4412 if not mode:
@@ -4295,7 +4438,11 @@
4295 cards.append('pgs_card.dat')4438 cards.append('pgs_card.dat')
4296 if mode == 'delphes':4439 if mode == 'delphes':
4297 self.add_card_to_run('delphes')4440 self.add_card_to_run('delphes')
4298 self.add_card_to_run('trigger')4441 delphes3 = True
4442 if os.path.exists(pjoin(self.options['delphes_path'], 'data')):
4443 delphes3 = False
4444 self.add_card_to_run('trigger')
4445
4299 cards.append('delphes_card.dat')4446 cards.append('delphes_card.dat')
4300 4447
4301 if self.force:4448 if self.force:
@@ -4314,13 +4461,15 @@
4314 card[2] = 'pgs' 4461 card[2] = 'pgs'
4315 if mode == 'delphes':4462 if mode == 'delphes':
4316 question += ' 2 / delphes : delphes_card.dat\n'4463 question += ' 2 / delphes : delphes_card.dat\n'
4317 question += ' 3 / trigger : delphes_trigger.dat\n'
4318 possible_answer.append(2)4464 possible_answer.append(2)
4319 possible_answer.append('delphes')4465 possible_answer.append('delphes')
4320 possible_answer.append(3)
4321 possible_answer.append('trigger')
4322 card[2] = 'delphes'4466 card[2] = 'delphes'
4323 card[3] = 'trigger'4467 if not delphes3:
4468 question += ' 3 / trigger : delphes_trigger.dat\n'
4469 possible_answer.append(3)
4470 possible_answer.append('trigger')
4471 card[3] = 'trigger'
4472
4324 if self.options['madanalysis_path']:4473 if self.options['madanalysis_path']:
4325 question += ' 9 / plot : plot_card.dat\n'4474 question += ' 9 / plot : plot_card.dat\n'
4326 possible_answer.append(9)4475 possible_answer.append(9)
@@ -4458,10 +4607,12 @@
4458 """4607 """
4459 4608
4460 text = open(path).read()4609 text = open(path).read()
4461 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)4610 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)
4462 text = [t.lower() for t in text]4611 text = [t.lower() for t in text]
4463 if '<mgversion>' in text:4612 if '<mgversion>' in text:
4464 return 'banner'4613 return 'banner'
4614 elif 'particlepropagator' in text:
4615 return 'delphes_card.dat'
4465 elif 'cen_max_tracker' in text:4616 elif 'cen_max_tracker' in text:
4466 return 'delphes_card.dat'4617 return 'delphes_card.dat'
4467 elif '#trigger card' in text:4618 elif '#trigger card' in text:
@@ -4653,7 +4804,7 @@
4653 self.total_jobs = 04804 self.total_jobs = 0
4654 subproc = [P for P in os.listdir(pjoin(self.me_dir,'SubProcesses')) if 4805 subproc = [P for P in os.listdir(pjoin(self.me_dir,'SubProcesses')) if
4655 P.startswith('P') and os.path.isdir(pjoin(self.me_dir,'SubProcesses', P))]4806 P.startswith('P') and os.path.isdir(pjoin(self.me_dir,'SubProcesses', P))]
4656 devnull = os.open(os.devnull, os.O_RDWR)4807 devnull = open(os.devnull, 'w')
4657 for nb_proc,subdir in enumerate(subproc):4808 for nb_proc,subdir in enumerate(subproc):
4658 subdir = subdir.strip()4809 subdir = subdir.strip()
4659 Pdir = pjoin(self.me_dir, 'SubProcesses',subdir)4810 Pdir = pjoin(self.me_dir, 'SubProcesses',subdir)
46604811
=== modified file 'madgraph/interface/madgraph_interface.py'
--- madgraph/interface/madgraph_interface.py 2013-01-13 10:35:41 +0000
+++ madgraph/interface/madgraph_interface.py 2013-03-04 23:37:19 +0000
@@ -1763,7 +1763,7 @@
1763 _check_opts = ['full', 'permutation', 'gauge', 'lorentz_invariance']1763 _check_opts = ['full', 'permutation', 'gauge', 'lorentz_invariance']
1764 _import_formats = ['model_v4', 'model', 'proc_v4', 'command', 'banner']1764 _import_formats = ['model_v4', 'model', 'proc_v4', 'command', 'banner']
1765 _install_opts = ['pythia-pgs', 'Delphes', 'MadAnalysis', 'ExRootAnalysis', 1765 _install_opts = ['pythia-pgs', 'Delphes', 'MadAnalysis', 'ExRootAnalysis',
1766 'update']1766 'update', 'Delphes2']
1767 _v4_export_formats = ['madevent', 'standalone', 'matrix'] 1767 _v4_export_formats = ['madevent', 'standalone', 'matrix']
1768 _export_formats = _v4_export_formats + ['standalone_cpp', 'pythia8', 'aloha']1768 _export_formats = _v4_export_formats + ['standalone_cpp', 'pythia8', 'aloha']
1769 _set_options = ['group_subprocesses',1769 _set_options = ['group_subprocesses',
@@ -3053,9 +3053,12 @@
3053 split = line.split() 3053 split = line.split()
3054 path[split[0]] = split[1]3054 path[split[0]] = split[1]
3055 3055
3056 name = {'td_mac': 'td', 'td_linux':'td', 'Delphes':'Delphes', 3056 if args[0] == 'Delphes':
3057 args[0] = 'Delphes3'
3058
3059 name = {'td_mac': 'td', 'td_linux':'td', 'Delphes3':'Delphes',
3057 'pythia-pgs':'pythia-pgs', 'ExRootAnalysis': 'ExRootAnalysis',3060 'pythia-pgs':'pythia-pgs', 'ExRootAnalysis': 'ExRootAnalysis',
3058 'MadAnalysis':'MadAnalysis'}3061 'MadAnalysis':'MadAnalysis', 'Delphes2': 'Delphes'}
3059 name = name[args[0]]3062 name = name[args[0]]
3060 3063
3061 try:3064 try:
@@ -3075,6 +3078,7 @@
3075 if returncode:3078 if returncode:
3076 raise MadGraph5Error, 'Fail to download correctly the File. Stop'3079 raise MadGraph5Error, 'Fail to download correctly the File. Stop'
3077 3080
3081
3078 # Check that the directory has the correct name3082 # Check that the directory has the correct name
3079 if not os.path.exists(pjoin(MG5DIR, name)):3083 if not os.path.exists(pjoin(MG5DIR, name)):
3080 created_name = [n for n in os.listdir(MG5DIR) if n.startswith(name) 3084 created_name = [n for n in os.listdir(MG5DIR) if n.startswith(name)
@@ -3160,6 +3164,16 @@
3160 if sys.platform == "darwin":3164 if sys.platform == "darwin":
3161 logger.warning('''You can download this program at the following link: 3165 logger.warning('''You can download this program at the following link:
3162 http://www.macupdate.com/app/mac/9980/gpl-ghostscript''')3166 http://www.macupdate.com/app/mac/9980/gpl-ghostscript''')
3167
3168 if args[0] == 'Delphes2':
3169 data = open(pjoin(MG5DIR, 'Delphes','data','DetectorCard.dat')).read()
3170 data = data.replace('data/', 'DELPHESDIR/data/')
3171 out = open(pjoin(MG5DIR, 'Template', 'Cards', 'delphes_card_default.dat'), 'w')
3172 out.write(data)
3173 if args[0] == 'Delphes3':
3174 files.cp(pjoin(MG5DIR, 'Delphes','examples','delphes_card_CMS.tcl'),
3175 pjoin(MG5DIR,'Template', 'Cards', 'delphes_card_default.dat'))
3176
31633177
3164 def install_update(self, args, wget):3178 def install_update(self, args, wget):
3165 """ check if the current version of mg5 is up-to-date. 3179 """ check if the current version of mg5 is up-to-date.
@@ -3647,7 +3661,12 @@
3647 logger.info('Loading the resulting model')3661 logger.info('Loading the resulting model')
3648 # Applying the restriction 3662 # Applying the restriction
3649 self._curr_model = import_ufo.RestrictModel(self._curr_model)3663 self._curr_model = import_ufo.RestrictModel(self._curr_model)
3650 self._curr_model.restrict_model(param_card)3664 model_name = self._curr_model.get('name')
3665 if model_name == 'mssm':
3666 keep_external=True
3667 else:
3668 keep_external=False
3669 self._curr_model.restrict_model(param_card,keep_external=keep_external)
3651 3670
3652 if args:3671 if args:
3653 name = args[0].split('=',1)[1]3672 name = args[0].split('=',1)[1]
36543673
=== modified file 'madgraph/iolibs/export_cpp.py'
--- madgraph/iolibs/export_cpp.py 2012-08-02 16:39:09 +0000
+++ madgraph/iolibs/export_cpp.py 2013-03-04 23:37:19 +0000
@@ -1291,12 +1291,22 @@
1291 final_id_list = []1291 final_id_list = []
1292 final_mirror_id_list = []1292 final_mirror_id_list = []
1293 for (i, me) in beam_processes:1293 for (i, me) in beam_processes:
1294 final_id_list.extend([tuple([l.get('id') for l in \1294 valid_proc = [proc for proc in me.get('processes') \
1295 proc.get('legs') if l.get('state')]) \
1296 for proc in me.get('processes') \
1297 if beam_parts == \1295 if beam_parts == \
1298 (proc.get('legs')[0].get('id'),1296 (proc.get('legs')[0].get('id'),
1299 proc.get('legs')[1].get('id'))])1297 proc.get('legs')[1].get('id'))]
1298 for proc in valid_proc:
1299 # decaying id
1300 decay_id = [d.get('legs')[0].get('id') for d in proc.get('decay_chains')]
1301 curr_final_id = [l.get('id') for l in proc.get('legs')
1302 if l.get('state') and l.get('id') not in decay_id]
1303 # extend with the decay final state
1304 curr_final_id += [l.get('id') for dec in \
1305 proc.get('decay_chains') for l in \
1306 dec.get('legs') if l.get('state')]
1307 final_id_list.append(tuple(curr_final_id))
1308
1309
1300 for (i, me) in beam_mirror_processes:1310 for (i, me) in beam_mirror_processes:
1301 final_mirror_id_list.extend([tuple([l.get('id') for l in \1311 final_mirror_id_list.extend([tuple([l.get('id') for l in \
1302 proc.get('legs') if l.get('state')]) \1312 proc.get('legs') if l.get('state')]) \
@@ -1390,12 +1400,24 @@
1390 1400
13911401
1392 for ime, me in enumerate(self.matrix_elements):1402 for ime, me in enumerate(self.matrix_elements):
13931403 id_list = []
1404 for proc in me.get('processes'):
1405 # decaying id
1406 decay_id = [d.get('legs')[0].get('id') for d in proc.get('decay_chains')]
1407 curr_id = [l.get('id') for l in proc.get('legs')
1408 if l.get('state') and l.get('id') not in decay_id]
1409 # extend with the decay final state
1410 curr_id += [l.get('id') for dec in proc.get('decay_chains')
1411 for l in dec.get('legs') if l.get('state')]
1412 curr_id = [l.get('id') for l in \
1413 proc.get('legs') if not l.get('state')] + curr_id
1414 id_list.append(tuple(curr_id))
1415
1394 res_lines.append("if(%s){" % \1416 res_lines.append("if(%s){" % \
1395 "||".join(["&&".join(["id%d == %d" % \1417 "||".join(["&&".join(["id%d == %d" % \
1396 (i+1, l.get('id')) for (i, l) in \1418 (i+1, id) for (i, id) in \
1397 enumerate(p.get('legs'))])\1419 enumerate(p)])\
1398 for p in me.get('processes')]))1420 for p in id_list]))
1399 if ime > 0:1421 if ime > 0:
1400 res_lines[-1] = "else " + res_lines[-1]1422 res_lines[-1] = "else " + res_lines[-1]
14011423
14021424
=== modified file 'madgraph/iolibs/export_v4.py'
--- madgraph/iolibs/export_v4.py 2012-11-07 06:36:14 +0000
+++ madgraph/iolibs/export_v4.py 2013-03-04 23:37:19 +0000
@@ -1130,6 +1130,8 @@
1130 1130
1131 #madevent file1131 #madevent file
1132 cp(_file_path+'/__init__.py', self.dir_path+'/bin/internal/__init__.py')1132 cp(_file_path+'/__init__.py', self.dir_path+'/bin/internal/__init__.py')
1133 cp(_file_path+'/various/lhe_parser.py',
1134 self.dir_path+'/bin/internal/lhe_parser.py')
1133 cp(_file_path+'/various/gen_crossxhtml.py', 1135 cp(_file_path+'/various/gen_crossxhtml.py',
1134 self.dir_path+'/bin/internal/gen_crossxhtml.py') 1136 self.dir_path+'/bin/internal/gen_crossxhtml.py')
1135 cp(_file_path+'/various/banner.py', 1137 cp(_file_path+'/various/banner.py',
@@ -1666,10 +1668,12 @@
1666 replace_dict['define_subdiag_lines'] = \1668 replace_dict['define_subdiag_lines'] = \
1667 """\nINTEGER SUBDIAG(MAXSPROC),IB(2)1669 """\nINTEGER SUBDIAG(MAXSPROC),IB(2)
1668 COMMON/TO_SUB_DIAG/SUBDIAG,IB""" 1670 COMMON/TO_SUB_DIAG/SUBDIAG,IB"""
1671 replace_dict['cutsdone'] = ""
1669 else:1672 else:
1670 replace_dict['passcuts_begin'] = "IF (PASSCUTS(PP)) THEN"1673 replace_dict['passcuts_begin'] = "IF (PASSCUTS(PP)) THEN"
1671 replace_dict['passcuts_end'] = "ENDIF"1674 replace_dict['passcuts_end'] = "ENDIF"
1672 replace_dict['define_subdiag_lines'] = ""1675 replace_dict['define_subdiag_lines'] = ""
1676 replace_dict['cutsdone'] = " cutsdone=.false."
16731677
1674 file = open(pjoin(_file_path, \1678 file = open(pjoin(_file_path, \
1675 'iolibs/template_files/auto_dsig_v4.inc')).read()1679 'iolibs/template_files/auto_dsig_v4.inc')).read()
@@ -2294,9 +2298,9 @@
2294 if me.get('has_mirror_process'):2298 if me.get('has_mirror_process'):
2295 mirror_procs = [copy.copy(p) for p in me.get('processes')]2299 mirror_procs = [copy.copy(p) for p in me.get('processes')]
2296 for proc in mirror_procs:2300 for proc in mirror_procs:
2297 legs = copy.copy(proc.get('legs'))2301 legs = copy.copy(proc.get('legs_with_decays'))
2298 legs.insert(0, legs.pop(1))2302 legs.insert(0, legs.pop(1))
2299 proc.set("legs", legs)2303 proc.set("legs_with_decays", legs)
2300 lines.append("mirror %s" % ",".join(p.base_string() for p in \2304 lines.append("mirror %s" % ",".join(p.base_string() for p in \
2301 mirror_procs))2305 mirror_procs))
2302 else:2306 else:
@@ -2849,6 +2853,8 @@
2849 for key in keys:2853 for key in keys:
2850 for param in self.model['parameters'][key]:2854 for param in self.model['parameters'][key]:
2851 lower_name = param.name.lower()2855 lower_name = param.name.lower()
2856 if not lower_name:
2857 continue
2852 try:2858 try:
2853 lower_dict[lower_name].append(param)2859 lower_dict[lower_name].append(param)
2854 except KeyError:2860 except KeyError:
@@ -2900,18 +2906,20 @@
2900 keys = self.model['parameters'].keys()2906 keys = self.model['parameters'].keys()
2901 keys.sort(key=len)2907 keys.sort(key=len)
2902 for key in keys:2908 for key in keys:
2909 to_add = [o for o in self.model['parameters'][key] if o.name]
2910
2903 if key == ('external',):2911 if key == ('external',):
2904 self.params_ext += self.model['parameters'][key]2912 self.params_ext += to_add
2905 elif 'aS' in key:2913 elif 'aS' in key:
2906 self.params_dep += self.model['parameters'][key]2914 self.params_dep += to_add
2907 else:2915 else:
2908 self.params_indep += self.model['parameters'][key]2916 self.params_indep += to_add
2909 # same for couplings2917 # same for couplings
2910 keys = self.model['couplings'].keys()2918 keys = self.model['couplings'].keys()
2911 keys.sort(key=len)2919 keys.sort(key=len)
2912 for key, coup_list in self.model['couplings'].items():2920 for key, coup_list in self.model['couplings'].items():
2913 if 'aS' in key:2921 if 'aS' in key:
2914 self.coups_dep += [c for c in coup_list if2922 self.coups_dep += [c for c in coup_list if
2915 (not wanted_couplings or c.name in \2923 (not wanted_couplings or c.name in \
2916 wanted_couplings)]2924 wanted_couplings)]
2917 else:2925 else:
@@ -3294,6 +3302,8 @@
3294 colum = [parameter.lhablock.lower()] + \3302 colum = [parameter.lhablock.lower()] + \
3295 [str(value) for value in parameter.lhacode] + \3303 [str(value) for value in parameter.lhacode] + \
3296 [parameter.name]3304 [parameter.name]
3305 if not parameter.name:
3306 return ''
3297 return ' '.join(colum)+'\n'3307 return ' '.join(colum)+'\n'
3298 3308
3299 fsock = self.open('ident_card.dat')3309 fsock = self.open('ident_card.dat')
33003310
=== modified file 'madgraph/iolibs/template_files/auto_dsig_v4.inc'
--- madgraph/iolibs/template_files/auto_dsig_v4.inc 2012-12-12 03:55:41 +0000
+++ madgraph/iolibs/template_files/auto_dsig_v4.inc 2013-03-04 23:37:19 +0000
@@ -57,6 +57,9 @@
57 common/to_configs/mincfig, maxcfig57 common/to_configs/mincfig, maxcfig
58 INTEGER MAPCONFIG(0:LMAXCONFIGS), ICONFIG58 INTEGER MAPCONFIG(0:LMAXCONFIGS), ICONFIG
59 COMMON/TO_MCONFIGS/MAPCONFIG, ICONFIG59 COMMON/TO_MCONFIGS/MAPCONFIG, ICONFIG
60C Keep track of whether cuts already calculated for this event
61 LOGICAL cutsdone,cutspassed
62 COMMON/TO_CUTSDONE/cutsdone,cutspassed
60%(define_subdiag_lines)s63%(define_subdiag_lines)s
61 include 'coupl.inc'64 include 'coupl.inc'
62 include 'run.inc'65 include 'run.inc'
@@ -68,7 +71,7 @@
68C BEGIN CODE71C BEGIN CODE
69C ----------72C ----------
70 DSIG%(proc_id)s=0D073 DSIG%(proc_id)s=0D0
7174 %(cutsdone)s
72 IF(IMODE.EQ.1)THEN75 IF(IMODE.EQ.1)THEN
73C Set up process information from file symfact76C Set up process information from file symfact
74 LUN=NEXTUNOPEN()77 LUN=NEXTUNOPEN()
7578
=== modified file 'madgraph/iolibs/template_files/super_auto_dsig_group_v4.inc'
--- madgraph/iolibs/template_files/super_auto_dsig_group_v4.inc 2012-09-06 10:17:42 +0000
+++ madgraph/iolibs/template_files/super_auto_dsig_group_v4.inc 2013-03-04 23:37:19 +0000
@@ -77,11 +77,16 @@
77 DOUBLE PRECISION CM_RAP77 DOUBLE PRECISION CM_RAP
78 LOGICAL SET_CM_RAP78 LOGICAL SET_CM_RAP
79 COMMON/TO_CM_RAP/SET_CM_RAP,CM_RAP79 COMMON/TO_CM_RAP/SET_CM_RAP,CM_RAP
80C Keep track of whether cuts already calculated for this event
81 LOGICAL CUTSDONE,CUTSPASSED
82 COMMON/TO_CUTSDONE/CUTSDONE,CUTSPASSED
80C ----------83C ----------
81C BEGIN CODE84C BEGIN CODE
82C ----------85C ----------
83 DSIG=0D086 DSIG=0D0
8487
88 CUTSDONE=.FALSE.
89
85 IF(IMODE.EQ.1)THEN90 IF(IMODE.EQ.1)THEN
86C Set up process information from file symfact91C Set up process information from file symfact
87 LUN=NEXTUNOPEN()92 LUN=NEXTUNOPEN()
8893
=== modified file 'madgraph/various/cluster.py'
--- madgraph/various/cluster.py 2013-01-10 16:18:49 +0000
+++ madgraph/various/cluster.py 2013-03-04 23:37:19 +0000
@@ -362,23 +362,30 @@
362 if not self.submitted_ids:362 if not self.submitted_ids:
363 return 0, 0, 0, 0363 return 0, 0, 0, 0
364 364
365 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))))))))\'"365 packet = 15000
366 status = misc.Popen([cmd], shell=True, stdout=subprocess.PIPE, 366 for i in range(1+(len(self.submitted_ids)-1)//packet):
367 stderr=subprocess.PIPE)367 start = i * packet
368 error = status.stderr.read()368 stop = (i+1) * packet
369 if status.returncode or error:369 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))))))))\'"
370 raise ClusterManagmentError, 'condor_q returns error: %s' % error370
371 371
372 372
373 idle, run, fail = 0, 0, 0373 status = misc.Popen([cmd], shell=True, stdout=subprocess.PIPE,
374 for line in status.stdout:374 stderr=subprocess.PIPE)
375 status = line.strip()375 error = status.stderr.read()
376 if status in ['I','U']:376 if status.returncode or error:
377 idle += 1377 raise ClusterManagmentError, 'condor_q returns error: %s' % error
378 elif status == 'R':378
379 run += 1379
380 elif status != 'C':380 idle, run, fail = 0, 0, 0
381 fail += 1381 for line in status.stdout:
382 status = line.strip()
383 if status in ['I','U']:
384 idle += 1
385 elif status == 'R':
386 run += 1
387 elif status != 'C':
388 fail += 1
382389
383 return idle, run, self.submitted - (idle+run+fail), fail390 return idle, run, self.submitted - (idle+run+fail), fail
384 391
385392
=== added file 'madgraph/various/lhe_parser.py'
--- madgraph/various/lhe_parser.py 1970-01-01 00:00:00 +0000
+++ madgraph/various/lhe_parser.py 2013-03-04 23:37:19 +0000
@@ -0,0 +1,246 @@
1import re
2
3class Particle(object):
4 """ """
5 pattern=re.compile(r'''^\s*
6 (?P<pid>-?\d+)\s+ #PID
7 (?P<status>-?\d+)\s+ #status (1 for output particle)
8 (?P<mother1>-?\d+)\s+ #mother
9 (?P<mother2>-?\d+)\s+ #mother
10 (?P<color1>[+-e.\d]*)\s+ #color1
11 (?P<color2>[+-e.\d]*)\s+ #color2
12 (?P<px>[+-e.\d]*)\s+ #px
13 (?P<py>[+-e.\d]*)\s+ #py
14 (?P<pz>[+-e.\d]*)\s+ #pz
15 (?P<E>[+-e.\d]*)\s+ #E
16 (?P<mass>[+-e.\d]*)\s+ #mass
17 (?P<vtim>[+-e.\d]*)\s+ #displace vertex
18 (?P<helicity>[+-e.\d]*)\s* #helicity
19 ($|(?P<comment>\#[\d|D]*)) #comment/end of string
20 ''',66) #verbose+ignore case
21
22
23
24 def __init__(self, line=None, event=None):
25 """ """
26
27 self.event = event
28 self.event_id = len(event) #not yet in the event
29 # LHE information
30 self.pid = 0
31 self.status = 0
32 self.mother1 = None
33 self.mother2 = None
34 self.color1 = 0
35 self.color2 = None
36 self.px = 0
37 self.py = 0
38 self.pz = 0
39 self.E = 0
40 self.mass = 0
41 self.vtim = 0
42 self.helicity = 9
43 self.comment = ''
44
45 if line:
46 self.parse(line)
47
48 def parse(self, line):
49 """parse the line"""
50
51 obj = self.pattern.search(line)
52 if not obj:
53 raise Exception, 'the line\n%s\n is not a valid format for LHE particle' % line
54 for key, value in obj.groupdict().items():
55 if key != 'comment':
56 setattr(self, key, float(value))
57 else:
58 self.comment = value
59 # assign the mother:
60 if self.mother1:
61 try:
62 self.mother1 = self.event[int(self.mother1) -1]
63 except KeyError:
64 raise Exception, 'Wrong Events format: a daughter appears before it\'s mother'
65 if self.mother2:
66 try:
67 self.mother2 = self.event[int(self.mother2) -1]
68 except KeyError:
69 raise Exception, 'Wrong Events format: a daughter appears before it\'s mother'
70
71
72
73
74 def __str__(self):
75 """string representing the particles"""
76 return " %8d %2d %4d %4d %4d %4d %+13.7e %+13.7e %+13.7e %14.8e %14.8e %10.4e %10.4e" \
77 % (self.pid,
78 self.status,
79 self.mother1.event_id+1 if self.mother1 else 0,
80 self.mother2.event_id+1 if self.mother2 else 0,
81 self.color1,
82 self.color2,
83 self.px,
84 self.py,
85 self.pz,
86 self.E,
87 self.mass,
88 self.vtim,
89 self.helicity)
90
91 def __eq__(self, other):
92
93 if self.pid == other.pid and \
94 self.status == other.status and \
95 self.mother1 == other.mother1 and \
96 self.mother2 == other.mother2 and \
97 self.color1 == other.color1 and \
98 self.color2 == other.color2 and \
99 self.px == other.px and \
100 self.py == other.py and \
101 self.pz == other.pz and \
102 self.E == other.E and \
103 self.mass == other.mass and \
104 self.vtim == other.vtim and \
105 self.helicity == other.helicity:
106 return True
107 return False
108
109
110
111
112 def __repr__(self):
113 return 'Particle("%s", event=%s)' % (str(self), self.event)
114
115class EventFile(file):
116 """ """
117
118 def __init__(self, path, mode='r', *args, **opt):
119 """open file and read the banner [if in read mode]"""
120
121 file.__init__(self, path, mode, *args, **opt)
122 self.banner = ''
123 if mode == 'r':
124 line = ''
125 while '</init>' not in line.lower():
126 line = file.next(self)
127 self.banner += line
128
129
130 def next(self):
131 """get next event"""
132 text = ''
133 line = ''
134 mode = 0
135 while '</event>' not in line:
136 line = file.next(self).lower()
137 if '<event>' in line:
138 mode = 1
139 if mode:
140 text += line
141 return Event(text)
142
143
144class Event(list):
145 """Class storing a single event information (list of particles + global information)"""
146
147 def __init__(self, text=None):
148 """The initialization of an empty Event (or one associate to a text file)"""
149 list.__init__(self)
150
151 # First line information
152 self.nexternal = 0
153 self.ievent = 0
154 self.wgt = 0
155 self.aqcd = 0
156 self.scale = 0
157 self.aqed = 0
158 self.aqcd = 0
159 # Weight information
160 self.rwgt = ''
161 self.comment = ''
162
163 if text:
164 self.parse(text)
165
166 def parse(self, text):
167 """Take the input file and create the structured information"""
168
169 text = re.sub(r'</?event>', '', text) # remove pointless tag
170 status = 'first'
171 for line in text.split('\n'):
172 line = line.strip()
173 if not line:
174 continue
175 if line.startswith('#'):
176 self.comment += '%s\n' % line
177 continue
178 if 'first' == status:
179 self.assign_scale_line(line)
180 status = 'part'
181 continue
182
183 if '<' in line:
184 status = 'rwgt'
185
186 if 'part' == status:
187 self.append(Particle(line, event=self))
188 else:
189 self.rwgt += '%s\n' % line
190
191 def assign_scale_line(self, line):
192 """read the line corresponding to global event line
193 format of the line is:
194 Nexternal IEVENT WEIGHT SCALE AEW AS
195 """
196 inputs = line.split()
197 assert len(inputs) == 6
198 self.nexternal=int(inputs[0])
199 self.ievent=int(inputs[1])
200 self.wgt=float(inputs[2])
201 self.scale=float(inputs[3])
202 self.aqed=float(inputs[4])
203 self.aqcd=float(inputs[5])
204
205
206
207 def __str__(self):
208 """return a correctly formatted LHE event"""
209
210 out="""<event>
211%(scale)s
212%(particles)s
213%(comments)s%(reweight)s</event>
214"""
215
216 scale_str = "%2d %6d %+13.7e %14.8e %14.8e %14.8e" % \
217 (self.nexternal,self.ievent,self.wgt,self.scale,self.aqed,self.aqcd)
218
219 return out % {'scale': scale_str,
220 'particles': '\n'.join([str(p) for p in self]),
221 'reweight': self.rwgt,
222 'comments': self.comment}
223
224
225
226
227
228if '__main__' == __name__:
229 lhe = EventFile('unweighted_events.lhe')
230 output = open('output_events.lhe', 'w')
231 #write the banner to the output file
232 output.write(lhe.banner)
233 # Loop over all events
234 for event in lhe:
235 for particle in event:
236 # modify particle attribute: here remove the mass
237 particle.mass = 0
238 particle.vtim = 2 # The one associate to distance travelled by the particle.
239
240 #write this modify event
241 output.write(str(event))
242
243
244
245
246
0247
=== modified file 'models/EWdim6/EWdim6.log'
--- models/EWdim6/EWdim6.log 2012-06-14 15:45:15 +0000
+++ models/EWdim6/EWdim6.log 2013-03-04 23:37:19 +0000
@@ -1,6 +1,6 @@
1# This file was automatically created by FeynRules 1.7.91# This file was automatically created by FeynRules 1.7.127
2# Mathematica version: 8.0 for Linux x86 (64-bit) (February 23, 2011)2# Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010)
3# Date: Fri 18 May 2012 14:33:513# Date: Tue 22 Jan 2013 16:06:42
44
55
6# 6#
@@ -35,14 +35,18 @@
35# Parameter definitions35# Parameter definitions
36#36#
3737
38 * All parameters are ok.38 * Parameter CWWWL2 has no value. Default value 1 assigned.
39 * Parameter CWL2 has no value. Default value 1 assigned.
40 * Parameter CBL2 has no value. Default value 1 assigned.
41 * Parameter CPWWWL2 has no value. Default value 1 assigned.
42 * Parameter CPWL2 has no value. Default value 1 assigned.
3943
4044
41# Vertices45# Vertices
42 * Calling FeynmanRules for 1 Lagrangians.46 * Calling FeynmanRules for 1 Lagrangians.
43 * Number of classes vertices: 5847 * Number of classes vertices: 58
44 * Number of flavored vertices: 10248 * Number of flavored vertices: 96
45 * Saved vertices in InterfaceRun[ 2 ].49 * Saved vertices in InterfaceRun[ 1 ].
46 * Checked QNumber conservation.50 * Checked QNumber conservation.
47 - Quantum number GhostNumber conserved in all vertices.51 - Quantum number GhostNumber conserved in all vertices.
48 - Quantum number LeptonNumber conserved in all vertices.52 - Quantum number LeptonNumber conserved in all vertices.
@@ -53,19 +57,19 @@
53# Vertex definitions57# Vertex definitions
54#58#
5559
56 * 102 vertices written.60 * 96 vertices written.
57 * vertices.py written.61 * vertices.py written.
58#62#
59# Lorentz structure definitions63# Lorentz structure definitions
60#64#
6165
62 * 78 lorentz structures written.66 * 81 lorentz structures written.
63 * lorentz.py written.67 * lorentz.py written.
64#68#
65# Coupling definitions69# Coupling definitions
66#70#
6771
68 * 146 couplings written.72 * 140 couplings written.
69 * couplings.py written.73 * couplings.py written.
70#74#
71# Coupling order definitions75# Coupling order definitions
@@ -77,5 +81,11 @@
77# Decay definitions81# Decay definitions
78#82#
7983
80 * 0 decays written.84 * 6 decays written.
81 * decay.py not written85 * decay.py not written
86#
87# CTCoupling definitions
88#
89
90 * 0 CTcouplings written.
91 * CT_couplings.py written.
8292
=== modified file 'models/EWdim6/__init__.py'
--- models/EWdim6/__init__.py 2012-11-16 23:03:30 +0000
+++ models/EWdim6/__init__.py 2013-03-04 23:37:19 +0000
@@ -6,11 +6,7 @@
6import vertices6import vertices
7import coupling_orders7import coupling_orders
8import write_param_card8import write_param_card
9try:9
10 import build_restrict
11except ImportError, error:
12 print error
13
1410
15all_particles = particles.all_particles11all_particles = particles.all_particles
16all_vertices = vertices.all_vertices12all_vertices = vertices.all_vertices
@@ -19,8 +15,28 @@
19all_parameters = parameters.all_parameters15all_parameters = parameters.all_parameters
20all_orders = coupling_orders.all_orders16all_orders = coupling_orders.all_orders
21all_functions = function_library.all_functions17all_functions = function_library.all_functions
18
19try:
20 import build_restrict
21except ImportError:
22 pass
23try:
24 import decays
25except ImportError:
26 pass
27else:
28 all_decays = decays.all_decays
29try:
30 import form_factors
31except ImportError:
32 pass
33else:
34 all_form_factors = form_factors.all_form_factors
35
36
22gauge = [0]37gauge = [0]
2338
39
24__author__ = "C. Degrande"40__author__ = "C. Degrande"
25__version__ = "1.0"41__date__ = "05.03. 2012"
26__email__ = "celine.degrande@uclouvain.be"42__version__= "1.0"
2743
=== modified file 'models/EWdim6/build_restrict.py'
--- models/EWdim6/build_restrict.py 2012-09-07 02:24:48 +0000
+++ models/EWdim6/build_restrict.py 2013-03-04 23:37:19 +0000
@@ -29,16 +29,20 @@
29first_category = build_restrict_lib.Category('sm customization')29first_category = build_restrict_lib.Category('sm customization')
30all_categories.append(first_category)30all_categories.append(first_category)
3131
32
32first_category.add_options(name='diagonal ckm', # name33first_category.add_options(name='diagonal ckm', # name
33 default=True, # default34 default=True, # default
34 rules=[('CKMBLOCK',[1], 0.0)],35 rules=[('WOLFENSTEIN',[1], 0.0),
36 ('WOLFENSTEIN',[2], 0.0),
37 ('WOLFENSTEIN',[3], 0.0),
38 ('WOLFENSTEIN',[4], 0.0)]
35 )39 )
3640
37first_category.add_options(name='c mass = 0', # name41#first_category.add_options(name='c mass = 0', # name
38 default=True, # default42# default=True, # default
39 rules=[('MASS',[4], 0.0),43# rules=[('MASS',[4], 0.0),
40 ('YUKAWA',[4], 0.0)]44# ('YUKAWA',[4], 0.0)]
41 )45# )
4246
43first_category.add_options(name='b mass = 0',47first_category.add_options(name='b mass = 0',
44 default=False,48 default=False,
@@ -52,17 +56,17 @@
52 ('YUKAWA',[15], 0.0)]56 ('YUKAWA',[15], 0.0)]
53 )57 )
5458
55first_category.add_options(name='muon mass = 0',59#first_category.add_options(name='muon mass = 0',
56 default=True,60# default=True,
57 rules=[('MASS',[13], 0.0),61# rules=[('MASS',[13], 0.0),
58 ('YUKAWA',[13], 0.0)]62# ('YUKAWA',[13], 0.0)]
59 )63# )
6064
61first_category.add_options(name='electron mass = 0',65#first_category.add_options(name='electron mass = 0',
62 default=True,66# default=True,
63 rules=[('MASS',[11], 0.0),67# rules=[('MASS',[11], 0.0),
64 ('YUKAWA',[11], 0.0)]68# ('YUKAWA',[11], 0.0)]
65 )69# )
6670
67dim6_category = build_restrict_lib.Category('Adding Dim6 Operator')71dim6_category = build_restrict_lib.Category('Adding Dim6 Operator')
68all_categories.append(dim6_category)72all_categories.append(dim6_category)
6973
=== modified file 'models/EWdim6/coupling_orders.py'
--- models/EWdim6/coupling_orders.py 2012-06-14 15:45:15 +0000
+++ models/EWdim6/coupling_orders.py 2013-03-04 23:37:19 +0000
@@ -1,6 +1,6 @@
1# This file was automatically created by FeynRules 1.7.91# This file was automatically created by FeynRules 1.7.127
2# Mathematica version: 8.0 for Linux x86 (64-bit) (February 23, 2011)2# Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010)
3# Date: Fri 18 May 2012 14:43:253# Date: Tue 22 Jan 2013 16:20:55
44
55
6from object_library import all_orders, CouplingOrder6from object_library import all_orders, CouplingOrder
77
=== modified file 'models/EWdim6/couplings.py'
--- models/EWdim6/couplings.py 2012-06-14 15:45:15 +0000
+++ models/EWdim6/couplings.py 2013-03-04 23:37:19 +0000
@@ -1,11 +1,11 @@
1# This file was automatically created by FeynRules 1.7.91# This file was automatically created by FeynRules 1.7.127
2# Mathematica version: 8.0 for Linux x86 (64-bit) (February 23, 2011)2# Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010)
3# Date: Fri 18 May 2012 14:43:253# Date: Tue 22 Jan 2013 16:20:55
44
55
6from object_library import all_couplings, Coupling6from object_library import all_couplings, Coupling
77
8from function_library import complexconjugate, re, im, csc, sec, acsc, asec8from function_library import complexconjugate, re, im, csc, sec, acsc, asec, cot
99
1010
1111
@@ -38,11 +38,11 @@
38 order = {'QED':1})38 order = {'QED':1})
3939
40GC_8 = Coupling(name = 'GC_8',40GC_8 = Coupling(name = 'GC_8',
41 value = '(CPWL2*cw*complex(0,1)*gw)/2.e6',41 value = '(CPWL2*cw*complex(0,1)*gw)/4.e6',
42 order = {'NP':2})42 order = {'NP':2})
4343
44GC_9 = Coupling(name = 'GC_9',44GC_9 = Coupling(name = 'GC_9',
45 value = '-(CPWL2*cw**2*complex(0,1)*g1*gw)/2.e6',45 value = '-(CPWL2*cw**2*complex(0,1)*g1*gw)/8.e6',
46 order = {'NP':2,'QED':1})46 order = {'NP':2,'QED':1})
4747
48GC_10 = Coupling(name = 'GC_10',48GC_10 = Coupling(name = 'GC_10',
@@ -50,7 +50,7 @@
50 order = {'QED':2})50 order = {'QED':2})
5151
52GC_11 = Coupling(name = 'GC_11',52GC_11 = Coupling(name = 'GC_11',
53 value = '-(CPWL2*complex(0,1)*gw**2)/2.e6',53 value = '(CPWL2*complex(0,1)*gw**2)/4.e6',
54 order = {'NP':2,'QED':1})54 order = {'NP':2,'QED':1})
5555
56GC_12 = Coupling(name = 'GC_12',56GC_12 = Coupling(name = 'GC_12',
@@ -66,7 +66,7 @@
66 order = {'NP':2,'QED':2})66 order = {'NP':2,'QED':2})
6767
68GC_15 = Coupling(name = 'GC_15',68GC_15 = Coupling(name = 'GC_15',
69 value = '(CPWL2*cw*complex(0,1)*g1*gw**2)/2.e6',69 value = '(CPWL2*cw*complex(0,1)*g1*gw**2)/4.e6',
70 order = {'NP':2,'QED':2})70 order = {'NP':2,'QED':2})
7171
72GC_16 = Coupling(name = 'GC_16',72GC_16 = Coupling(name = 'GC_16',
@@ -74,11 +74,11 @@
74 order = {'NP':2,'QED':2})74 order = {'NP':2,'QED':2})
7575
76GC_17 = Coupling(name = 'GC_17',76GC_17 = Coupling(name = 'GC_17',
77 value = '-(CPWL2*cw*complex(0,1)*gw**3)/2.e6',77 value = '-(CPWL2*cw*complex(0,1)*gw**3)/4.e6',
78 order = {'NP':2,'QED':2})78 order = {'NP':2,'QED':2})
7979
80GC_18 = Coupling(name = 'GC_18',80GC_18 = Coupling(name = 'GC_18',
81 value = '(CPWWWL2*cw*complex(0,1)*gw**3)/2.e6',81 value = '(CPWWWL2*cw*complex(0,1)*gw**3)/4.e6',
82 order = {'NP':2})82 order = {'NP':2})
8383
84GC_19 = Coupling(name = 'GC_19',84GC_19 = Coupling(name = 'GC_19',
@@ -90,11 +90,11 @@
90 order = {'NP':2})90 order = {'NP':2})
9191
92GC_21 = Coupling(name = 'GC_21',92GC_21 = Coupling(name = 'GC_21',
93 value = '-(CPWWWL2*complex(0,1)*gw**4)/1.e6',93 value = '-(CPWWWL2*complex(0,1)*gw**4)/2.e6',
94 order = {'NP':2,'QED':1})94 order = {'NP':2,'QED':1})
9595
96GC_22 = Coupling(name = 'GC_22',96GC_22 = Coupling(name = 'GC_22',
97 value = '(CPWWWL2*cw**2*complex(0,1)*gw**4)/1.e6',97 value = '(CPWWWL2*cw**2*complex(0,1)*gw**4)/2.e6',
98 order = {'NP':2,'QED':1})98 order = {'NP':2,'QED':1})
9999
100GC_23 = Coupling(name = 'GC_23',100GC_23 = Coupling(name = 'GC_23',
@@ -198,7 +198,7 @@
198 order = {'QED':1})198 order = {'QED':1})
199199
200GC_48 = Coupling(name = 'GC_48',200GC_48 = Coupling(name = 'GC_48',
201 value = '(CPWL2*complex(0,1)*gw*sw)/2.e6',201 value = '(CPWL2*complex(0,1)*gw*sw)/4.e6',
202 order = {'NP':2})202 order = {'NP':2})
203203
204GC_49 = Coupling(name = 'GC_49',204GC_49 = Coupling(name = 'GC_49',
@@ -206,7 +206,7 @@
206 order = {'QED':2})206 order = {'QED':2})
207207
208GC_50 = Coupling(name = 'GC_50',208GC_50 = Coupling(name = 'GC_50',
209 value = '-(CPWL2*cw*complex(0,1)*gw**2*sw)/2.e6',209 value = '-(CPWL2*cw*complex(0,1)*gw**2*sw)/8.e6',
210 order = {'NP':2,'QED':1})210 order = {'NP':2,'QED':1})
211211
212GC_51 = Coupling(name = 'GC_51',212GC_51 = Coupling(name = 'GC_51',
@@ -214,7 +214,7 @@
214 order = {'NP':2,'QED':2})214 order = {'NP':2,'QED':2})
215215
216GC_52 = Coupling(name = 'GC_52',216GC_52 = Coupling(name = 'GC_52',
217 value = '-(CPWL2*complex(0,1)*g1*gw**2*sw)/2.e6',217 value = '-(CPWL2*complex(0,1)*g1*gw**2*sw)/4.e6',
218 order = {'NP':2,'QED':2})218 order = {'NP':2,'QED':2})
219219
220GC_53 = Coupling(name = 'GC_53',220GC_53 = Coupling(name = 'GC_53',
@@ -222,11 +222,11 @@
222 order = {'NP':2,'QED':2})222 order = {'NP':2,'QED':2})
223223
224GC_54 = Coupling(name = 'GC_54',224GC_54 = Coupling(name = 'GC_54',
225 value = '-(CPWL2*complex(0,1)*gw**3*sw)/2.e6',225 value = '-(CPWL2*complex(0,1)*gw**3*sw)/4.e6',
226 order = {'NP':2,'QED':2})226 order = {'NP':2,'QED':2})
227227
228GC_55 = Coupling(name = 'GC_55',228GC_55 = Coupling(name = 'GC_55',
229 value = '(CPWWWL2*complex(0,1)*gw**3*sw)/2.e6',229 value = '(CPWWWL2*complex(0,1)*gw**3*sw)/4.e6',
230 order = {'NP':2})230 order = {'NP':2})
231231
232GC_56 = Coupling(name = 'GC_56',232GC_56 = Coupling(name = 'GC_56',
@@ -238,7 +238,7 @@
238 order = {'NP':2})238 order = {'NP':2})
239239
240GC_58 = Coupling(name = 'GC_58',240GC_58 = Coupling(name = 'GC_58',
241 value = '(CPWWWL2*cw*complex(0,1)*gw**4*sw)/1.e6',241 value = '(CPWWWL2*cw*complex(0,1)*gw**4*sw)/2.e6',
242 order = {'NP':2,'QED':1})242 order = {'NP':2,'QED':1})
243243
244GC_59 = Coupling(name = 'GC_59',244GC_59 = Coupling(name = 'GC_59',
@@ -266,7 +266,7 @@
266 order = {'NP':2,'QED':3})266 order = {'NP':2,'QED':3})
267267
268GC_65 = Coupling(name = 'GC_65',268GC_65 = Coupling(name = 'GC_65',
269 value = '-(CPWL2*complex(0,1)*g1*gw*sw**2)/2.e6',269 value = '-(CPWL2*complex(0,1)*g1*gw*sw**2)/8.e6',
270 order = {'NP':2,'QED':1})270 order = {'NP':2,'QED':1})
271271
272GC_66 = Coupling(name = 'GC_66',272GC_66 = Coupling(name = 'GC_66',
@@ -274,7 +274,7 @@
274 order = {'QED':2})274 order = {'QED':2})
275275
276GC_67 = Coupling(name = 'GC_67',276GC_67 = Coupling(name = 'GC_67',
277 value = '(CPWWWL2*complex(0,1)*gw**4*sw**2)/1.e6',277 value = '(CPWWWL2*complex(0,1)*gw**4*sw**2)/2.e6',
278 order = {'NP':2,'QED':1})278 order = {'NP':2,'QED':1})
279279
280GC_68 = Coupling(name = 'GC_68',280GC_68 = Coupling(name = 'GC_68',
@@ -306,7 +306,7 @@
306 order = {'QED':1})306 order = {'QED':1})
307307
308GC_75 = Coupling(name = 'GC_75',308GC_75 = Coupling(name = 'GC_75',
309 value = '-(CPWL2*cw**2*complex(0,1)*gw**2)/2.e6 - (CPWL2*cw*complex(0,1)*g1*gw*sw)/2.e6',309 value = '-(CPWL2*cw**2*complex(0,1)*gw**2)/8.e6 - (CPWL2*cw*complex(0,1)*g1*gw*sw)/8.e6',
310 order = {'NP':2,'QED':1})310 order = {'NP':2,'QED':1})
311311
312GC_76 = Coupling(name = 'GC_76',312GC_76 = Coupling(name = 'GC_76',
@@ -334,7 +334,7 @@
334 order = {'NP':2,'QED':1})334 order = {'NP':2,'QED':1})
335335
336GC_82 = Coupling(name = 'GC_82',336GC_82 = Coupling(name = 'GC_82',
337 value = '(CPWL2*cw*complex(0,1)*g1*gw*sw)/2.e6 - (CPWL2*complex(0,1)*gw**2*sw**2)/2.e6',337 value = '(CPWL2*cw*complex(0,1)*g1*gw*sw)/8.e6 - (CPWL2*complex(0,1)*gw**2*sw**2)/8.e6',
338 order = {'NP':2,'QED':1})338 order = {'NP':2,'QED':1})
339339
340GC_83 = Coupling(name = 'GC_83',340GC_83 = Coupling(name = 'GC_83',
@@ -350,11 +350,11 @@
350 order = {'NP':2,'QED':3})350 order = {'NP':2,'QED':3})
351351
352GC_86 = Coupling(name = 'GC_86',352GC_86 = Coupling(name = 'GC_86',
353 value = '-(CPWL2*cw**2*complex(0,1)*g1*gw*v)/2.e6',353 value = '-(CPWL2*cw**2*complex(0,1)*g1*gw*v)/8.e6',
354 order = {'NP':2})354 order = {'NP':2})
355355
356GC_87 = Coupling(name = 'GC_87',356GC_87 = Coupling(name = 'GC_87',
357 value = '-(CPWL2*complex(0,1)*gw**2*v)/2.e6',357 value = '(CPWL2*complex(0,1)*gw**2*v)/4.e6',
358 order = {'NP':2})358 order = {'NP':2})
359359
360GC_88 = Coupling(name = 'GC_88',360GC_88 = Coupling(name = 'GC_88',
@@ -366,7 +366,7 @@
366 order = {'NP':2,'QED':1})366 order = {'NP':2,'QED':1})
367367
368GC_90 = Coupling(name = 'GC_90',368GC_90 = Coupling(name = 'GC_90',
369 value = '(CPWL2*cw*complex(0,1)*g1*gw**2*v)/2.e6',369 value = '(CPWL2*cw*complex(0,1)*g1*gw**2*v)/4.e6',
370 order = {'NP':2,'QED':1})370 order = {'NP':2,'QED':1})
371371
372GC_91 = Coupling(name = 'GC_91',372GC_91 = Coupling(name = 'GC_91',
@@ -374,7 +374,7 @@
374 order = {'NP':2,'QED':1})374 order = {'NP':2,'QED':1})
375375
376GC_92 = Coupling(name = 'GC_92',376GC_92 = Coupling(name = 'GC_92',
377 value = '-(CPWL2*cw*complex(0,1)*gw**3*v)/2.e6',377 value = '-(CPWL2*cw*complex(0,1)*gw**3*v)/4.e6',
378 order = {'NP':2,'QED':1})378 order = {'NP':2,'QED':1})
379379
380GC_93 = Coupling(name = 'GC_93',380GC_93 = Coupling(name = 'GC_93',
@@ -394,7 +394,7 @@
394 order = {'QED':1})394 order = {'QED':1})
395395
396GC_97 = Coupling(name = 'GC_97',396GC_97 = Coupling(name = 'GC_97',
397 value = '-(CPWL2*cw*complex(0,1)*gw**2*sw*v)/2.e6',397 value = '-(CPWL2*cw*complex(0,1)*gw**2*sw*v)/8.e6',
398 order = {'NP':2})398 order = {'NP':2})
399399
400GC_98 = Coupling(name = 'GC_98',400GC_98 = Coupling(name = 'GC_98',
@@ -402,7 +402,7 @@
402 order = {'NP':2,'QED':1})402 order = {'NP':2,'QED':1})
403403
404GC_99 = Coupling(name = 'GC_99',404GC_99 = Coupling(name = 'GC_99',
405 value = '-(CPWL2*complex(0,1)*g1*gw**2*sw*v)/2.e6',405 value = '-(CPWL2*complex(0,1)*g1*gw**2*sw*v)/4.e6',
406 order = {'NP':2,'QED':1})406 order = {'NP':2,'QED':1})
407407
408GC_100 = Coupling(name = 'GC_100',408GC_100 = Coupling(name = 'GC_100',
@@ -410,7 +410,7 @@
410 order = {'NP':2,'QED':1})410 order = {'NP':2,'QED':1})
411411
412GC_101 = Coupling(name = 'GC_101',412GC_101 = Coupling(name = 'GC_101',
413 value = '-(CPWL2*complex(0,1)*gw**3*sw*v)/2.e6',413 value = '-(CPWL2*complex(0,1)*gw**3*sw*v)/4.e6',
414 order = {'NP':2,'QED':1})414 order = {'NP':2,'QED':1})
415415
416GC_102 = Coupling(name = 'GC_102',416GC_102 = Coupling(name = 'GC_102',
@@ -418,7 +418,7 @@
418 order = {'NP':2,'QED':1})418 order = {'NP':2,'QED':1})
419419
420GC_103 = Coupling(name = 'GC_103',420GC_103 = Coupling(name = 'GC_103',
421 value = '-(CPWL2*complex(0,1)*g1*gw*sw**2*v)/2.e6',421 value = '-(CPWL2*complex(0,1)*g1*gw*sw**2*v)/8.e6',
422 order = {'NP':2})422 order = {'NP':2})
423423
424GC_104 = Coupling(name = 'GC_104',424GC_104 = Coupling(name = 'GC_104',
@@ -426,7 +426,7 @@
426 order = {'NP':2})426 order = {'NP':2})
427427
428GC_105 = Coupling(name = 'GC_105',428GC_105 = Coupling(name = 'GC_105',
429 value = '(CPWL2*cw*complex(0,1)*g1*gw**2*v**2)/4.e6',429 value = '(CPWL2*cw*complex(0,1)*g1*gw**2*v**2)/8.e6',
430 order = {'NP':2})430 order = {'NP':2})
431431
432GC_106 = Coupling(name = 'GC_106',432GC_106 = Coupling(name = 'GC_106',
@@ -434,7 +434,7 @@
434 order = {'NP':2})434 order = {'NP':2})
435435
436GC_107 = Coupling(name = 'GC_107',436GC_107 = Coupling(name = 'GC_107',
437 value = '-(CPWL2*cw*complex(0,1)*gw**3*v**2)/4.e6',437 value = '-(CPWL2*cw*complex(0,1)*gw**3*v**2)/8.e6',
438 order = {'NP':2})438 order = {'NP':2})
439439
440GC_108 = Coupling(name = 'GC_108',440GC_108 = Coupling(name = 'GC_108',
@@ -450,7 +450,7 @@
450 order = {'NP':2})450 order = {'NP':2})
451451
452GC_111 = Coupling(name = 'GC_111',452GC_111 = Coupling(name = 'GC_111',
453 value = '-(CPWL2*complex(0,1)*g1*gw**2*sw*v**2)/4.e6',453 value = '-(CPWL2*complex(0,1)*g1*gw**2*sw*v**2)/8.e6',
454 order = {'NP':2})454 order = {'NP':2})
455455
456GC_112 = Coupling(name = 'GC_112',456GC_112 = Coupling(name = 'GC_112',
@@ -458,7 +458,7 @@
458 order = {'NP':2})458 order = {'NP':2})
459459
460GC_113 = Coupling(name = 'GC_113',460GC_113 = Coupling(name = 'GC_113',
461 value = '-(CPWL2*complex(0,1)*gw**3*sw*v**2)/4.e6',461 value = '-(CPWL2*complex(0,1)*gw**3*sw*v**2)/8.e6',
462 order = {'NP':2})462 order = {'NP':2})
463463
464GC_114 = Coupling(name = 'GC_114',464GC_114 = Coupling(name = 'GC_114',
@@ -466,7 +466,7 @@
466 order = {'NP':2})466 order = {'NP':2})
467467
468GC_115 = Coupling(name = 'GC_115',468GC_115 = Coupling(name = 'GC_115',
469 value = '-(CPWL2*cw**2*complex(0,1)*gw**2*v)/2.e6 - (CPWL2*cw*complex(0,1)*g1*gw*sw*v)/2.e6',469 value = '-(CPWL2*cw**2*complex(0,1)*gw**2*v)/8.e6 - (CPWL2*cw*complex(0,1)*g1*gw*sw*v)/8.e6',
470 order = {'NP':2})470 order = {'NP':2})
471471
472GC_116 = Coupling(name = 'GC_116',472GC_116 = Coupling(name = 'GC_116',
@@ -494,7 +494,7 @@
494 order = {'NP':2})494 order = {'NP':2})
495495
496GC_122 = Coupling(name = 'GC_122',496GC_122 = Coupling(name = 'GC_122',
497 value = '(CPWL2*cw*complex(0,1)*g1*gw*sw*v)/2.e6 - (CPWL2*complex(0,1)*gw**2*sw**2*v)/2.e6',497 value = '(CPWL2*cw*complex(0,1)*g1*gw*sw*v)/8.e6 - (CPWL2*complex(0,1)*gw**2*sw**2*v)/8.e6',
498 order = {'NP':2})498 order = {'NP':2})
499499
500GC_123 = Coupling(name = 'GC_123',500GC_123 = Coupling(name = 'GC_123',
@@ -526,70 +526,46 @@
526 order = {'QED':1})526 order = {'QED':1})
527527
528GC_130 = Coupling(name = 'GC_130',528GC_130 = Coupling(name = 'GC_130',
529 value = '-((complex(0,1)*yc)/cmath.sqrt(2))',529 value = '-((complex(0,1)*yt)/cmath.sqrt(2))',
530 order = {'QED':1})530 order = {'QED':1})
531531
532GC_131 = Coupling(name = 'GC_131',532GC_131 = Coupling(name = 'GC_131',
533 value = '-((complex(0,1)*ydo)/cmath.sqrt(2))',533 value = '-((complex(0,1)*ytau)/cmath.sqrt(2))',
534 order = {'QED':1})534 order = {'QED':1})
535535
536GC_132 = Coupling(name = 'GC_132',536GC_132 = Coupling(name = 'GC_132',
537 value = '-((complex(0,1)*ye)/cmath.sqrt(2))',537 value = '(ee*complex(0,1)*complexconjugate(CKM1x1))/(sw*cmath.sqrt(2))',
538 order = {'QED':1})538 order = {'QED':1})
539539
540GC_133 = Coupling(name = 'GC_133',540GC_133 = Coupling(name = 'GC_133',
541 value = '-((complex(0,1)*ym)/cmath.sqrt(2))',541 value = '(ee*complex(0,1)*complexconjugate(CKM1x2))/(sw*cmath.sqrt(2))',
542 order = {'QED':1})542 order = {'QED':1})
543543
544GC_134 = Coupling(name = 'GC_134',544GC_134 = Coupling(name = 'GC_134',
545 value = '-((complex(0,1)*ys)/cmath.sqrt(2))',545 value = '(ee*complex(0,1)*complexconjugate(CKM1x3))/(sw*cmath.sqrt(2))',
546 order = {'QED':1})546 order = {'QED':1})
547547
548GC_135 = Coupling(name = 'GC_135',548GC_135 = Coupling(name = 'GC_135',
549 value = '-((complex(0,1)*yt)/cmath.sqrt(2))',549 value = '(ee*complex(0,1)*complexconjugate(CKM2x1))/(sw*cmath.sqrt(2))',
550 order = {'QED':1})550 order = {'QED':1})
551551
552GC_136 = Coupling(name = 'GC_136',552GC_136 = Coupling(name = 'GC_136',
553 value = '-((complex(0,1)*ytau)/cmath.sqrt(2))',553 value = '(ee*complex(0,1)*complexconjugate(CKM2x2))/(sw*cmath.sqrt(2))',
554 order = {'QED':1})554 order = {'QED':1})
555555
556GC_137 = Coupling(name = 'GC_137',556GC_137 = Coupling(name = 'GC_137',
557 value = '-((complex(0,1)*yup)/cmath.sqrt(2))',557 value = '(ee*complex(0,1)*complexconjugate(CKM2x3))/(sw*cmath.sqrt(2))',
558 order = {'QED':1})558 order = {'QED':1})
559559
560GC_138 = Coupling(name = 'GC_138',560GC_138 = Coupling(name = 'GC_138',
561 value = '(ee*complex(0,1)*complexconjugate(CKM1x1))/(sw*cmath.sqrt(2))',561 value = '(ee*complex(0,1)*complexconjugate(CKM3x1))/(sw*cmath.sqrt(2))',
562 order = {'QED':1})562 order = {'QED':1})
563563
564GC_139 = Coupling(name = 'GC_139',564GC_139 = Coupling(name = 'GC_139',
565 value = '(ee*complex(0,1)*complexconjugate(CKM1x2))/(sw*cmath.sqrt(2))',565 value = '(ee*complex(0,1)*complexconjugate(CKM3x2))/(sw*cmath.sqrt(2))',
566 order = {'QED':1})566 order = {'QED':1})
567567
568GC_140 = Coupling(name = 'GC_140',568GC_140 = Coupling(name = 'GC_140',
569 value = '(ee*complex(0,1)*complexconjugate(CKM1x3))/(sw*cmath.sqrt(2))',
570 order = {'QED':1})
571
572GC_141 = Coupling(name = 'GC_141',
573 value = '(ee*complex(0,1)*complexconjugate(CKM2x1))/(sw*cmath.sqrt(2))',
574 order = {'QED':1})
575
576GC_142 = Coupling(name = 'GC_142',
577 value = '(ee*complex(0,1)*complexconjugate(CKM2x2))/(sw*cmath.sqrt(2))',
578 order = {'QED':1})
579
580GC_143 = Coupling(name = 'GC_143',
581 value = '(ee*complex(0,1)*complexconjugate(CKM2x3))/(sw*cmath.sqrt(2))',
582 order = {'QED':1})
583
584GC_144 = Coupling(name = 'GC_144',
585 value = '(ee*complex(0,1)*complexconjugate(CKM3x1))/(sw*cmath.sqrt(2))',
586 order = {'QED':1})
587
588GC_145 = Coupling(name = 'GC_145',
589 value = '(ee*complex(0,1)*complexconjugate(CKM3x2))/(sw*cmath.sqrt(2))',
590 order = {'QED':1})
591
592GC_146 = Coupling(name = 'GC_146',
593 value = '(ee*complex(0,1)*complexconjugate(CKM3x3))/(sw*cmath.sqrt(2))',569 value = '(ee*complex(0,1)*complexconjugate(CKM3x3))/(sw*cmath.sqrt(2))',
594 order = {'QED':1})570 order = {'QED':1})
595571
596572
=== modified file 'models/EWdim6/function_library.py'
--- models/EWdim6/function_library.py 2012-05-05 16:56:46 +0000
+++ models/EWdim6/function_library.py 2013-03-04 23:37:19 +0000
@@ -49,6 +49,14 @@
49 arguments = ('z',),49 arguments = ('z',),
50 expression = 'cmath.asin(1./z)')50 expression = 'cmath.asin(1./z)')
5151
5252cot = Function(name = 'cot',
53 arguments = ('z',),
54 expression = '1./cmath.tan(z)')
55
56# Heaviside theta function
57
58theta_function = Function(name = 'theta_function',
59 arguments = ('x','y','z'),
60 expression = 'y if x else z')
5361
5462
5563
=== modified file 'models/EWdim6/lorentz.py'
--- models/EWdim6/lorentz.py 2012-06-14 15:45:15 +0000
+++ models/EWdim6/lorentz.py 2013-03-04 23:37:19 +0000
@@ -1,233 +1,248 @@
1# This file was automatically created by FeynRules 1.7.91# This file was automatically created by FeynRules 1.7.127
2# Mathematica version: 8.0 for Linux x86 (64-bit) (February 23, 2011)2# Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010)
3# Date: Fri 18 May 2012 14:43:243# Date: Tue 22 Jan 2013 16:20:54
44
55
6from object_library import all_lorentz, Lorentz6from object_library import all_lorentz, Lorentz
77
8from function_library import complexconjugate, re, im, csc, sec, acsc, asec8from function_library import complexconjugate, re, im, csc, sec, acsc, asec, cot
99try:
1010 import form_factors as ForFac
1111except ImportError:
12UUV2 = Lorentz(name = 'UUV2',12 pass
13
14
15UUV1 = Lorentz(name = 'UUV1',
13 spins = [ -1, -1, 3 ],16 spins = [ -1, -1, 3 ],
14 structure = 'P(3,2) + P(3,3)')17 structure = 'P(3,2) + P(3,3)')
1518
16SSS2 = Lorentz(name = 'SSS2',19SSS1 = Lorentz(name = 'SSS1',
17 spins = [ 1, 1, 1 ],20 spins = [ 1, 1, 1 ],
18 structure = '1')21 structure = '1')
1922
20FFS2 = Lorentz(name = 'FFS2',23FFS1 = Lorentz(name = 'FFS1',
21 spins = [ 2, 2, 1 ],24 spins = [ 2, 2, 1 ],
22 structure = 'Identity(2,1)')25 structure = 'Identity(2,1)')
2326
24FFV6 = Lorentz(name = 'FFV6',27FFV1 = Lorentz(name = 'FFV1',
25 spins = [ 2, 2, 3 ],28 spins = [ 2, 2, 3 ],
26 structure = 'Gamma(3,2,1)')29 structure = 'Gamma(3,2,1)')
2730
28FFV7 = Lorentz(name = 'FFV7',31FFV2 = Lorentz(name = 'FFV2',
29 spins = [ 2, 2, 3 ],32 spins = [ 2, 2, 3 ],
30 structure = 'Gamma(3,2,-1)*ProjM(-1,1)')33 structure = 'Gamma(3,2,-1)*ProjM(-1,1)')
3134
32FFV8 = Lorentz(name = 'FFV8',35FFV3 = Lorentz(name = 'FFV3',
33 spins = [ 2, 2, 3 ],36 spins = [ 2, 2, 3 ],
34 structure = 'Gamma(3,2,-1)*ProjM(-1,1) - 2*Gamma(3,2,-1)*ProjP(-1,1)')37 structure = 'Gamma(3,2,-1)*ProjM(-1,1) - 2*Gamma(3,2,-1)*ProjP(-1,1)')
3538
36FFV9 = Lorentz(name = 'FFV9',39FFV4 = Lorentz(name = 'FFV4',
37 spins = [ 2, 2, 3 ],40 spins = [ 2, 2, 3 ],
38 structure = 'Gamma(3,2,-1)*ProjM(-1,1) + 2*Gamma(3,2,-1)*ProjP(-1,1)')41 structure = 'Gamma(3,2,-1)*ProjM(-1,1) + 2*Gamma(3,2,-1)*ProjP(-1,1)')
3942
40FFV10 = Lorentz(name = 'FFV10',43FFV5 = Lorentz(name = 'FFV5',
41 spins = [ 2, 2, 3 ],44 spins = [ 2, 2, 3 ],
42 structure = 'Gamma(3,2,-1)*ProjM(-1,1) + 4*Gamma(3,2,-1)*ProjP(-1,1)')45 structure = 'Gamma(3,2,-1)*ProjM(-1,1) + 4*Gamma(3,2,-1)*ProjP(-1,1)')
4346
44VSS1 = Lorentz(name = 'VSS1',47VSS1 = Lorentz(name = 'VSS1',
45 spins = [ 3, 1, 1 ],48 spins = [ 3, 1, 1 ],
46 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)')49 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)')
50
51VVS1 = Lorentz(name = 'VVS1',
52 spins = [ 3, 3, 1 ],
53 structure = '-(Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,1)) + 3*Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3)')
54
55VVS2 = Lorentz(name = 'VVS2',
56 spins = [ 3, 3, 1 ],
57 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)')
58
59VVS3 = Lorentz(name = 'VVS3',
60 spins = [ 3, 3, 1 ],
61 structure = '-(Epsilon(1,2,-1,-2)*P(-2,3)*P(-1,2)) + 3*Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3)')
62
63VVS4 = Lorentz(name = 'VVS4',
64 spins = [ 3, 3, 1 ],
65 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)')
4766
48VVS5 = Lorentz(name = 'VVS5',67VVS5 = Lorentz(name = 'VVS5',
49 spins = [ 3, 3, 1 ],68 spins = [ 3, 3, 1 ],
50 structure = 'Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3)')69 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)')
5170
52VVS6 = Lorentz(name = 'VVS6',71VVS6 = Lorentz(name = 'VVS6',
53 spins = [ 3, 3, 1 ],72 spins = [ 3, 3, 1 ],
54 structure = 'Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3)')73 structure = 'Metric(1,2)')
5574
56VVS7 = Lorentz(name = 'VVS7',75VVS7 = Lorentz(name = 'VVS7',
57 spins = [ 3, 3, 1 ],76 spins = [ 3, 3, 1 ],
58 structure = 'Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3) - Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3)')77 structure = 'P(1,3)*P(2,1) - P(-1,1)*P(-1,3)*Metric(1,2)')
5978
60VVS8 = Lorentz(name = 'VVS8',79VVS8 = Lorentz(name = 'VVS8',
61 spins = [ 3, 3, 1 ],80 spins = [ 3, 3, 1 ],
62 structure = 'Metric(1,2)')81 structure = 'P(1,2)*P(2,3) - P(-1,2)*P(-1,3)*Metric(1,2)')
6382
64VVS9 = Lorentz(name = 'VVS9',83VVS9 = Lorentz(name = 'VVS9',
65 spins = [ 3, 3, 1 ],84 spins = [ 3, 3, 1 ],
66 structure = 'P(1,3)*P(2,1) - P(-1,1)*P(-1,3)*Metric(1,2)')85 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)')
6786
68VVS10 = Lorentz(name = 'VVS10',87VVV1 = Lorentz(name = 'VVV1',
69 spins = [ 3, 3, 1 ],88 spins = [ 3, 3, 3 ],
70 structure = 'P(1,2)*P(2,3) - P(-1,2)*P(-1,3)*Metric(1,2)')89 structure = '2*Epsilon(1,2,3,-1)*P(-1,1) + 2*Epsilon(1,2,3,-1)*P(-1,2)')
7190
72VVS11 = Lorentz(name = 'VVS11',91VVV2 = Lorentz(name = 'VVV2',
73 spins = [ 3, 3, 1 ],92 spins = [ 3, 3, 3 ],
74 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)')93 structure = '2*Epsilon(1,2,3,-1)*P(-1,2) + 2*Epsilon(1,2,3,-1)*P(-1,3)')
94
95VVV3 = Lorentz(name = 'VVV3',
96 spins = [ 3, 3, 3 ],
97 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)')
7598
76VVV4 = Lorentz(name = 'VVV4',99VVV4 = Lorentz(name = 'VVV4',
77 spins = [ 3, 3, 3 ],100 spins = [ 3, 3, 3 ],
78 structure = 'Epsilon(1,2,3,-1)*P(-1,1) + Epsilon(1,2,3,-1)*P(-1,2)')101 structure = 'P(3,1)*Metric(1,2) - P(2,1)*Metric(1,3)')
79102
80VVV5 = Lorentz(name = 'VVV5',103VVV5 = Lorentz(name = 'VVV5',
81 spins = [ 3, 3, 3 ],104 spins = [ 3, 3, 3 ],
82 structure = 'Epsilon(1,2,3,-1)*P(-1,2) + Epsilon(1,2,3,-1)*P(-1,3)')105 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)')
83106
84VVV6 = Lorentz(name = 'VVV6',107VVV6 = Lorentz(name = 'VVV6',
85 spins = [ 3, 3, 3 ],108 spins = [ 3, 3, 3 ],
86 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)')109 structure = 'P(2,3)*Metric(1,3) - P(1,3)*Metric(2,3)')
87110
88VVV7 = Lorentz(name = 'VVV7',111VVV7 = Lorentz(name = 'VVV7',
89 spins = [ 3, 3, 3 ],112 spins = [ 3, 3, 3 ],
90 structure = 'P(3,1)*Metric(1,2) - P(2,1)*Metric(1,3)')113 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)')
91114
92VVV8 = Lorentz(name = 'VVV8',115VVV8 = Lorentz(name = 'VVV8',
93 spins = [ 3, 3, 3 ],116 spins = [ 3, 3, 3 ],
94 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)')117 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)')
95118
96VVV9 = Lorentz(name = 'VVV9',119VVV9 = Lorentz(name = 'VVV9',
97 spins = [ 3, 3, 3 ],120 spins = [ 3, 3, 3 ],
98 structure = 'P(2,3)*Metric(1,3) - P(1,3)*Metric(2,3)')121 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)')
99122
100VVV10 = Lorentz(name = 'VVV10',123VVV10 = Lorentz(name = 'VVV10',
101 spins = [ 3, 3, 3 ],124 spins = [ 3, 3, 3 ],
102 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)')125 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)')
103126
104VVV11 = Lorentz(name = 'VVV11',127SSSS1 = Lorentz(name = 'SSSS1',
105 spins = [ 3, 3, 3 ],
106 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)')
107
108VVV12 = Lorentz(name = 'VVV12',
109 spins = [ 3, 3, 3 ],
110 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)')
111
112VVV13 = Lorentz(name = 'VVV13',
113 spins = [ 3, 3, 3 ],
114 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.')
115
116SSSS2 = Lorentz(name = 'SSSS2',
117 spins = [ 1, 1, 1, 1 ],128 spins = [ 1, 1, 1, 1 ],
118 structure = '1')129 structure = '1')
119130
131VVSS1 = Lorentz(name = 'VVSS1',
132 spins = [ 3, 3, 1, 1 ],
133 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)')
134
135VVSS2 = Lorentz(name = 'VVSS2',
136 spins = [ 3, 3, 1, 1 ],
137 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)')
138
139VVSS3 = Lorentz(name = 'VVSS3',
140 spins = [ 3, 3, 1, 1 ],
141 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)')
142
143VVSS4 = Lorentz(name = 'VVSS4',
144 spins = [ 3, 3, 1, 1 ],
145 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)')
146
120VVSS5 = Lorentz(name = 'VVSS5',147VVSS5 = Lorentz(name = 'VVSS5',
121 spins = [ 3, 3, 1, 1 ],148 spins = [ 3, 3, 1, 1 ],
122 structure = 'Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,3) + Epsilon(1,2,-1,-2)*P(-2,1)*P(-1,4)')149 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)')
123150
124VVSS6 = Lorentz(name = 'VVSS6',151VVSS6 = Lorentz(name = 'VVSS6',
125 spins = [ 3, 3, 1, 1 ],152 spins = [ 3, 3, 1, 1 ],
126 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)')153 structure = 'Metric(1,2)')
127154
128VVSS7 = Lorentz(name = 'VVSS7',155VVSS7 = Lorentz(name = 'VVSS7',
129 spins = [ 3, 3, 1, 1 ],156 spins = [ 3, 3, 1, 1 ],
130 structure = 'Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,3) + Epsilon(1,2,-1,-2)*P(-2,2)*P(-1,4)')157 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)')
131158
132VVSS8 = Lorentz(name = 'VVSS8',159VVSS8 = Lorentz(name = 'VVSS8',
133 spins = [ 3, 3, 1, 1 ],160 spins = [ 3, 3, 1, 1 ],
134 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)')161 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)')
135162
136VVSS9 = Lorentz(name = 'VVSS9',163VVSS9 = Lorentz(name = 'VVSS9',
137 spins = [ 3, 3, 1, 1 ],164 spins = [ 3, 3, 1, 1 ],
138 structure = 'Metric(1,2)')165 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)')
139166
140VVSS10 = Lorentz(name = 'VVSS10',167VVVS1 = Lorentz(name = 'VVVS1',
141 spins = [ 3, 3, 1, 1 ],168 spins = [ 3, 3, 3, 1 ],
142 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)')169 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)')
143170
144VVSS11 = Lorentz(name = 'VVSS11',171VVVS2 = Lorentz(name = 'VVVS2',
145 spins = [ 3, 3, 1, 1 ],172 spins = [ 3, 3, 3, 1 ],
146 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)')173 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)')
147174
148VVSS12 = Lorentz(name = 'VVSS12',175VVVS3 = Lorentz(name = 'VVVS3',
149 spins = [ 3, 3, 1, 1 ],176 spins = [ 3, 3, 3, 1 ],
150 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)')177 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)')
151178
152VVVS4 = Lorentz(name = 'VVVS4',179VVVS4 = Lorentz(name = 'VVVS4',
153 spins = [ 3, 3, 3, 1 ],180 spins = [ 3, 3, 3, 1 ],
154 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)')181 structure = 'P(3,1)*Metric(1,2) - P(2,1)*Metric(1,3)')
155182
156VVVS5 = Lorentz(name = 'VVVS5',183VVVS5 = Lorentz(name = 'VVVS5',
157 spins = [ 3, 3, 3, 1 ],184 spins = [ 3, 3, 3, 1 ],
158 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)')185 structure = 'P(2,3)*Metric(1,3) - P(1,3)*Metric(2,3)')
159186
160VVVS6 = Lorentz(name = 'VVVS6',187VVVS6 = Lorentz(name = 'VVVS6',
161 spins = [ 3, 3, 3, 1 ],188 spins = [ 3, 3, 3, 1 ],
162 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)')189 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)')
163190
164VVVS7 = Lorentz(name = 'VVVS7',191VVVS7 = Lorentz(name = 'VVVS7',
165 spins = [ 3, 3, 3, 1 ],192 spins = [ 3, 3, 3, 1 ],
166 structure = 'P(3,1)*Metric(1,2) - P(2,1)*Metric(1,3)')193 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)')
167194
168VVVS8 = Lorentz(name = 'VVVS8',195VVVS8 = Lorentz(name = 'VVVS8',
169 spins = [ 3, 3, 3, 1 ],196 spins = [ 3, 3, 3, 1 ],
170 structure = 'P(2,3)*Metric(1,3) - P(1,3)*Metric(2,3)')197 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)')
171198
172VVVS9 = Lorentz(name = 'VVVS9',199VVVV1 = Lorentz(name = 'VVVV1',
173 spins = [ 3, 3, 3, 1 ],200 spins = [ 3, 3, 3, 3 ],
174 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)')201 structure = 'Metric(1,4)*Metric(2,3) - Metric(1,3)*Metric(2,4)')
175202
176VVVS10 = Lorentz(name = 'VVVS10',203VVVV2 = Lorentz(name = 'VVVV2',
177 spins = [ 3, 3, 3, 1 ],204 spins = [ 3, 3, 3, 3 ],
178 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)')205 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)')
179206
180VVVS11 = Lorentz(name = 'VVVS11',207VVVV3 = Lorentz(name = 'VVVV3',
181 spins = [ 3, 3, 3, 1 ],208 spins = [ 3, 3, 3, 3 ],
182 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)')209 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)')
210
211VVVV4 = Lorentz(name = 'VVVV4',
212 spins = [ 3, 3, 3, 3 ],
213 structure = 'Metric(1,4)*Metric(2,3) + Metric(1,3)*Metric(2,4) - 2*Metric(1,2)*Metric(3,4)')
214
215VVVV5 = Lorentz(name = 'VVVV5',
216 spins = [ 3, 3, 3, 3 ],
217 structure = 'Metric(1,4)*Metric(2,3) - Metric(1,2)*Metric(3,4)')
183218
184VVVV6 = Lorentz(name = 'VVVV6',219VVVV6 = Lorentz(name = 'VVVV6',
185 spins = [ 3, 3, 3, 3 ],220 spins = [ 3, 3, 3, 3 ],
186 structure = 'Metric(1,4)*Metric(2,3) - Metric(1,3)*Metric(2,4)')221 structure = 'Metric(1,3)*Metric(2,4) - Metric(1,2)*Metric(3,4)')
187222
188VVVV7 = Lorentz(name = 'VVVV7',223VVVV7 = Lorentz(name = 'VVVV7',
189 spins = [ 3, 3, 3, 3 ],224 spins = [ 3, 3, 3, 3 ],
190 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.')225 structure = 'Metric(1,4)*Metric(2,3) - (Metric(1,3)*Metric(2,4))/2. - (Metric(1,2)*Metric(3,4))/2.')
191226
192VVVV8 = Lorentz(name = 'VVVV8',227VVVV8 = Lorentz(name = 'VVVV8',
193 spins = [ 3, 3, 3, 3 ],228 spins = [ 3, 3, 3, 3 ],
194 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.')229 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)')
195230
196VVVV9 = Lorentz(name = 'VVVV9',231VVVV9 = Lorentz(name = 'VVVV9',
197 spins = [ 3, 3, 3, 3 ],232 spins = [ 3, 3, 3, 3 ],
198 structure = 'Metric(1,4)*Metric(2,3) + Metric(1,3)*Metric(2,4) - 2*Metric(1,2)*Metric(3,4)')233 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)')
199
200VVVV10 = Lorentz(name = 'VVVV10',
201 spins = [ 3, 3, 3, 3 ],
202 structure = 'Metric(1,4)*Metric(2,3) - Metric(1,2)*Metric(3,4)')
203
204VVVV11 = Lorentz(name = 'VVVV11',
205 spins = [ 3, 3, 3, 3 ],
206 structure = 'Metric(1,3)*Metric(2,4) - Metric(1,2)*Metric(3,4)')
207
208VVVV12 = Lorentz(name = 'VVVV12',
209 spins = [ 3, 3, 3, 3 ],
210 structure = 'Metric(1,4)*Metric(2,3) - (Metric(1,3)*Metric(2,4))/2. - (Metric(1,2)*Metric(3,4))/2.')
211
212VVVV13 = Lorentz(name = 'VVVV13',
213 spins = [ 3, 3, 3, 3 ],
214 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)')
215
216VVVV14 = Lorentz(name = 'VVVV14',
217 spins = [ 3, 3, 3, 3 ],
218 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)')
219234
220VVVSS1 = Lorentz(name = 'VVVSS1',235VVVSS1 = Lorentz(name = 'VVVSS1',
221 spins = [ 3, 3, 3, 1, 1 ],236 spins = [ 3, 3, 3, 1, 1 ],
222 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)')237 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)')
223238
224VVVSS2 = Lorentz(name = 'VVVSS2',239VVVSS2 = Lorentz(name = 'VVVSS2',
225 spins = [ 3, 3, 3, 1, 1 ],240 spins = [ 3, 3, 3, 1, 1 ],
226 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)')241 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)')
227242
228VVVSS3 = Lorentz(name = 'VVVSS3',243VVVSS3 = Lorentz(name = 'VVVSS3',
229 spins = [ 3, 3, 3, 1, 1 ],244 spins = [ 3, 3, 3, 1, 1 ],
230 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)')245 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)')
231246
232VVVSS4 = Lorentz(name = 'VVVSS4',247VVVSS4 = Lorentz(name = 'VVVSS4',
233 spins = [ 3, 3, 3, 1, 1 ],248 spins = [ 3, 3, 3, 1, 1 ],
234249
=== modified file 'models/EWdim6/object_library.py'
--- models/EWdim6/object_library.py 2012-06-14 15:45:15 +0000
+++ models/EWdim6/object_library.py 2013-03-04 23:37:19 +0000
@@ -241,19 +241,31 @@
241 self.expansion_order = expansion_order241 self.expansion_order = expansion_order
242 self.hierarchy = hierarchy242 self.hierarchy = hierarchy
243243
244
245all_decays = []244all_decays = []
246245
247class Decay(object):246class Decay(UFOBaseClass):
248247 require_args = ['particle','partial_widths']
249 def __init__(self, name, particle, partial_widths):248
250 249 def __init__(self, particle, partial_widths, **opt):
250 args = (particle, partial_widths)
251 UFOBaseClass.__init__(self, *args, **opt)
252
251 global all_decays253 global all_decays
252 all_decays.append(self)254 all_decays.append(self)
253255
254 self.name = name256 # Add the information directly to the particle
255 self.particle = particle257 particle.partial_widths = partial_widths
256 self.partial_width = partial_widths258
257259all_form_factors = []
260
261class FormFactor(UFOBaseClass):
262 require_args = ['name','type','value']
263
264 def __init__(self, name, type, value, **opt):
265 args = (name, type, value)
266 UFOBaseClass.__init__(self, *args, **opt)
267
268 global all_form_factors
269 all_form_factors.append(self)
258270
259 271
260272
=== modified file 'models/EWdim6/parameters.py'
--- models/EWdim6/parameters.py 2012-06-14 15:45:15 +0000
+++ models/EWdim6/parameters.py 2013-03-04 23:37:19 +0000
@@ -1,13 +1,13 @@
1# This file was automatically created by FeynRules 1.7.91# This file was automatically created by FeynRules 1.7.127
2# Mathematica version: 8.0 for Linux x86 (64-bit) (February 23, 2011)2# Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010)
3# Date: Fri 18 May 2012 14:43:243# Date: Tue 22 Jan 2013 16:20:54
44
55
66
7from object_library import all_parameters, Parameter7from object_library import all_parameters, Parameter
88
99
10from function_library import complexconjugate, re, im, csc, sec, acsc, asec10from function_library import complexconjugate, re, im, csc, sec, acsc, asec, cot
1111
12# This is a default parameter object representing 0.12# This is a default parameter object representing 0.
13ZERO = Parameter(name = 'ZERO',13ZERO = Parameter(name = 'ZERO',
@@ -17,14 +17,6 @@
17 texname = '0')17 texname = '0')
1818
19# User-defined parameters.19# User-defined parameters.
20cabi = Parameter(name = 'cabi',
21 nature = 'external',
22 type = 'real',
23 value = 0.227736,
24 texname = '\\theta _c',
25 lhablock = 'CKMBLOCK',
26 lhacode = [ 1 ])
27
28CWWWL2 = Parameter(name = 'CWWWL2',20CWWWL2 = Parameter(name = 'CWWWL2',
29 nature = 'external',21 nature = 'external',
30 type = 'real',22 type = 'real',
@@ -89,37 +81,37 @@
89 lhablock = 'SMINPUTS',81 lhablock = 'SMINPUTS',
90 lhacode = [ 3 ])82 lhacode = [ 3 ])
9183
92ymdo = Parameter(name = 'ymdo',84lamWS = Parameter(name = 'lamWS',
93 nature = 'external',85 nature = 'external',
94 type = 'real',86 type = 'real',
95 value = 0.00504,87 value = 0,
96 texname = '\\text{ymdo}',88 texname = '\\text{lamWS}',
97 lhablock = 'YUKAWA',89 lhablock = 'Wolfenstein',
98 lhacode = [ 1 ])90 lhacode = [ 1 ])
9991
100ymup = Parameter(name = 'ymup',92AWS = Parameter(name = 'AWS',
101 nature = 'external',93 nature = 'external',
102 type = 'real',94 type = 'real',
103 value = 0.0025499999999999997,95 value = 0,
104 texname = '\\text{ymup}',96 texname = '\\text{AWS}',
105 lhablock = 'YUKAWA',97 lhablock = 'Wolfenstein',
106 lhacode = [ 2 ])98 lhacode = [ 2 ])
10799
108yms = Parameter(name = 'yms',100rhoWS = Parameter(name = 'rhoWS',
109 nature = 'external',101 nature = 'external',
110 type = 'real',102 type = 'real',
111 value = 0.101,103 value = 0,
112 texname = '\\text{yms}',104 texname = '\\text{rhoWS}',
113 lhablock = 'YUKAWA',105 lhablock = 'Wolfenstein',
114 lhacode = [ 3 ])106 lhacode = [ 3 ])
115107
116ymc = Parameter(name = 'ymc',108etaWS = Parameter(name = 'etaWS',
117 nature = 'external',109 nature = 'external',
118 type = 'real',110 type = 'real',
119 value = 1.27,111 value = 0,
120 texname = '\\text{ymc}',112 texname = '\\text{etaWS}',
121 lhablock = 'YUKAWA',113 lhablock = 'Wolfenstein',
122 lhacode = [ 4 ])114 lhacode = [ 4 ])
123115
124ymb = Parameter(name = 'ymb',116ymb = Parameter(name = 'ymb',
125 nature = 'external',117 nature = 'external',
@@ -137,22 +129,6 @@
137 lhablock = 'YUKAWA',129 lhablock = 'YUKAWA',
138 lhacode = [ 6 ])130 lhacode = [ 6 ])
139131
140yme = Parameter(name = 'yme',
141 nature = 'external',
142 type = 'real',
143 value = 0.0005110000000000001,
144 texname = '\\text{yme}',
145 lhablock = 'YUKAWA',
146 lhacode = [ 11 ])
147
148ymm = Parameter(name = 'ymm',
149 nature = 'external',
150 type = 'real',
151 value = 0.10566,
152 texname = '\\text{ymm}',
153 lhablock = 'YUKAWA',
154 lhacode = [ 13 ])
155
156ymtau = Parameter(name = 'ymtau',132ymtau = Parameter(name = 'ymtau',
157 nature = 'external',133 nature = 'external',
158 type = 'real',134 type = 'real',
@@ -161,46 +137,6 @@
161 lhablock = 'YUKAWA',137 lhablock = 'YUKAWA',
162 lhacode = [ 15 ])138 lhacode = [ 15 ])
163139
164Me = Parameter(name = 'Me',
165 nature = 'external',
166 type = 'real',
167 value = 0.0005110000000000001,
168 texname = '\\text{Me}',
169 lhablock = 'MASS',
170 lhacode = [ 11 ])
171
172MM = Parameter(name = 'MM',
173 nature = 'external',
174 type = 'real',
175 value = 0.10566,
176 texname = '\\text{MM}',
177 lhablock = 'MASS',
178 lhacode = [ 13 ])
179
180MTA = Parameter(name = 'MTA',
181 nature = 'external',
182 type = 'real',
183 value = 1.777,
184 texname = '\\text{MTA}',
185 lhablock = 'MASS',
186 lhacode = [ 15 ])
187
188MU = Parameter(name = 'MU',
189 nature = 'external',
190 type = 'real',
191 value = 0.0025499999999999997,
192 texname = 'M',
193 lhablock = 'MASS',
194 lhacode = [ 2 ])
195
196MC = Parameter(name = 'MC',
197 nature = 'external',
198 type = 'real',
199 value = 1.42,
200 texname = '\\text{MC}',
201 lhablock = 'MASS',
202 lhacode = [ 4 ])
203
204MT = Parameter(name = 'MT',140MT = Parameter(name = 'MT',
205 nature = 'external',141 nature = 'external',
206 type = 'real',142 type = 'real',
@@ -209,22 +145,6 @@
209 lhablock = 'MASS',145 lhablock = 'MASS',
210 lhacode = [ 6 ])146 lhacode = [ 6 ])
211147
212MD = Parameter(name = 'MD',
213 nature = 'external',
214 type = 'real',
215 value = 0.00504,
216 texname = '\\text{MD}',
217 lhablock = 'MASS',
218 lhacode = [ 1 ])
219
220MS = Parameter(name = 'MS',
221 nature = 'external',
222 type = 'real',
223 value = 0.101,
224 texname = '\\text{MS}',
225 lhablock = 'MASS',
226 lhacode = [ 3 ])
227
228MB = Parameter(name = 'MB',148MB = Parameter(name = 'MB',
229 nature = 'external',149 nature = 'external',
230 type = 'real',150 type = 'real',
@@ -249,6 +169,14 @@
249 lhablock = 'MASS',169 lhablock = 'MASS',
250 lhacode = [ 25 ])170 lhacode = [ 25 ])
251171
172MTA = Parameter(name = 'MTA',
173 nature = 'external',
174 type = 'real',
175 value = 1.777,
176 texname = '\\text{MTA}',
177 lhablock = 'MASS',
178 lhacode = [ 15 ])
179
252WT = Parameter(name = 'WT',180WT = Parameter(name = 'WT',
253 nature = 'external',181 nature = 'external',
254 type = 'real',182 type = 'real',
@@ -281,64 +209,60 @@
281 lhablock = 'DECAY',209 lhablock = 'DECAY',
282 lhacode = [ 25 ])210 lhacode = [ 25 ])
283211
284aEW = Parameter(name = 'aEW',212WTau = Parameter(name = 'WTau',
285 nature = 'internal',213 nature = 'external',
286 type = 'real',214 type = 'real',
287 value = '1/aEWM1',215 value = 2.27e-12,
288 texname = '\\text{aEW}')216 texname = '\\text{WTau}',
289217 lhablock = 'DECAY',
290G = Parameter(name = 'G',218 lhacode = [ 15 ])
291 nature = 'internal',
292 type = 'real',
293 value = '2*cmath.sqrt(aS)*cmath.sqrt(cmath.pi)',
294 texname = 'G')
295219
296CKM1x1 = Parameter(name = 'CKM1x1',220CKM1x1 = Parameter(name = 'CKM1x1',
297 nature = 'internal',221 nature = 'internal',
298 type = 'complex',222 type = 'complex',
299 value = 'cmath.cos(cabi)',223 value = '1 - lamWS**2/2.',
300 texname = '\\text{CKM1x1}')224 texname = '\\text{CKM1x1}')
301225
302CKM1x2 = Parameter(name = 'CKM1x2',226CKM1x2 = Parameter(name = 'CKM1x2',
303 nature = 'internal',227 nature = 'internal',
304 type = 'complex',228 type = 'complex',
305 value = 'cmath.sin(cabi)',229 value = 'lamWS',
306 texname = '\\text{CKM1x2}')230 texname = '\\text{CKM1x2}')
307231
308CKM1x3 = Parameter(name = 'CKM1x3',232CKM1x3 = Parameter(name = 'CKM1x3',
309 nature = 'internal',233 nature = 'internal',
310 type = 'complex',234 type = 'complex',
311 value = '0',235 value = 'AWS*lamWS**3*(-(etaWS*complex(0,1)) + rhoWS)',
312 texname = '\\text{CKM1x3}')236 texname = '\\text{CKM1x3}')
313237
314CKM2x1 = Parameter(name = 'CKM2x1',238CKM2x1 = Parameter(name = 'CKM2x1',
315 nature = 'internal',239 nature = 'internal',
316 type = 'complex',240 type = 'complex',
317 value = '-cmath.sin(cabi)',241 value = '-lamWS',
318 texname = '\\text{CKM2x1}')242 texname = '\\text{CKM2x1}')
319243
320CKM2x2 = Parameter(name = 'CKM2x2',244CKM2x2 = Parameter(name = 'CKM2x2',
321 nature = 'internal',245 nature = 'internal',
322 type = 'complex',246 type = 'complex',
323 value = 'cmath.cos(cabi)',247 value = '1 - lamWS**2/2.',
324 texname = '\\text{CKM2x2}')248 texname = '\\text{CKM2x2}')
325249
326CKM2x3 = Parameter(name = 'CKM2x3',250CKM2x3 = Parameter(name = 'CKM2x3',
327 nature = 'internal',251 nature = 'internal',
328 type = 'complex',252 type = 'complex',
329 value = '0',253 value = 'AWS*lamWS**2',
330 texname = '\\text{CKM2x3}')254 texname = '\\text{CKM2x3}')
331255
332CKM3x1 = Parameter(name = 'CKM3x1',256CKM3x1 = Parameter(name = 'CKM3x1',
333 nature = 'internal',257 nature = 'internal',
334 type = 'complex',258 type = 'complex',
335 value = '0',259 value = 'AWS*lamWS**3*(1 - etaWS*complex(0,1) - rhoWS)',
336 texname = '\\text{CKM3x1}')260 texname = '\\text{CKM3x1}')
337261
338CKM3x2 = Parameter(name = 'CKM3x2',262CKM3x2 = Parameter(name = 'CKM3x2',
339 nature = 'internal',263 nature = 'internal',
340 type = 'complex',264 type = 'complex',
341 value = '0',265 value = '-(AWS*lamWS**2)',
342 texname = '\\text{CKM3x2}')266 texname = '\\text{CKM3x2}')
343267
344CKM3x3 = Parameter(name = 'CKM3x3',268CKM3x3 = Parameter(name = 'CKM3x3',
@@ -347,6 +271,18 @@
347 value = '1',271 value = '1',
348 texname = '\\text{CKM3x3}')272 texname = '\\text{CKM3x3}')
349273
274aEW = Parameter(name = 'aEW',
275 nature = 'internal',
276 type = 'real',
277 value = '1/aEWM1',
278 texname = '\\text{aEW}')
279
280G = Parameter(name = 'G',
281 nature = 'internal',
282 type = 'real',
283 value = '2*cmath.sqrt(aS)*cmath.sqrt(cmath.pi)',
284 texname = 'G')
285
350MW = Parameter(name = 'MW',286MW = Parameter(name = 'MW',
351 nature = 'internal',287 nature = 'internal',
352 type = 'real',288 type = 'real',
@@ -407,36 +343,6 @@
407 value = '(ymb*cmath.sqrt(2))/v',343 value = '(ymb*cmath.sqrt(2))/v',
408 texname = '\\text{yb}')344 texname = '\\text{yb}')
409345
410yc = Parameter(name = 'yc',
411 nature = 'internal',
412 type = 'real',
413 value = '(ymc*cmath.sqrt(2))/v',
414 texname = '\\text{yc}')
415
416ydo = Parameter(name = 'ydo',
417 nature = 'internal',
418 type = 'real',
419 value = '(ymdo*cmath.sqrt(2))/v',
420 texname = '\\text{ydo}')
421
422ye = Parameter(name = 'ye',
423 nature = 'internal',
424 type = 'real',
425 value = '(yme*cmath.sqrt(2))/v',
426 texname = '\\text{ye}')
427
428ym = Parameter(name = 'ym',
429 nature = 'internal',
430 type = 'real',
431 value = '(ymm*cmath.sqrt(2))/v',
432 texname = '\\text{ym}')
433
434ys = Parameter(name = 'ys',
435 nature = 'internal',
436 type = 'real',
437 value = '(yms*cmath.sqrt(2))/v',
438 texname = '\\text{ys}')
439
440yt = Parameter(name = 'yt',346yt = Parameter(name = 'yt',
441 nature = 'internal',347 nature = 'internal',
442 type = 'real',348 type = 'real',
@@ -449,12 +355,6 @@
449 value = '(ymtau*cmath.sqrt(2))/v',355 value = '(ymtau*cmath.sqrt(2))/v',
450 texname = '\\text{ytau}')356 texname = '\\text{ytau}')
451357
452yup = Parameter(name = 'yup',
453 nature = 'internal',
454 type = 'real',
455 value = '(ymup*cmath.sqrt(2))/v',
456 texname = '\\text{yup}')
457
458muH = Parameter(name = 'muH',358muH = Parameter(name = 'muH',
459 nature = 'internal',359 nature = 'internal',
460 type = 'real',360 type = 'real',
461361
=== modified file 'models/EWdim6/particles.py'
--- models/EWdim6/particles.py 2012-06-14 15:45:15 +0000
+++ models/EWdim6/particles.py 2013-03-04 23:37:19 +0000
@@ -1,6 +1,6 @@
1# This file was automatically created by FeynRules 1.7.91# This file was automatically created by FeynRules 1.7.127
2# Mathematica version: 8.0 for Linux x86 (64-bit) (February 23, 2011)2# Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010)
3# Date: Fri 18 May 2012 14:43:243# Date: Tue 22 Jan 2013 16:20:54
44
55
6from __future__ import division6from __future__ import division
@@ -52,57 +52,12 @@
5252
53vt__tilde__ = vt.anti()53vt__tilde__ = vt.anti()
5454
55e__minus__ = Particle(pdg_code = 11,
56 name = 'e-',
57 antiname = 'e+',
58 spin = 2,
59 color = 1,
60 mass = Param.Me,
61 width = Param.ZERO,
62 texname = 'e-',
63 antitexname = 'e+',
64 charge = -1,
65 GhostNumber = 0,
66 LeptonNumber = 1)
67
68e__plus__ = e__minus__.anti()
69
70m__minus__ = Particle(pdg_code = 13,
71 name = 'm-',
72 antiname = 'm+',
73 spin = 2,
74 color = 1,
75 mass = Param.MM,
76 width = Param.ZERO,
77 texname = 'm-',
78 antitexname = 'm+',
79 charge = -1,
80 GhostNumber = 0,
81 LeptonNumber = 1)
82
83m__plus__ = m__minus__.anti()
84
85tt__minus__ = Particle(pdg_code = 15,
86 name = 'tt-',
87 antiname = 'tt+',
88 spin = 2,
89 color = 1,
90 mass = Param.MTA,
91 width = Param.ZERO,
92 texname = 'tt-',
93 antitexname = 'tt+',
94 charge = -1,
95 GhostNumber = 0,
96 LeptonNumber = 1)
97
98tt__plus__ = tt__minus__.anti()
99
100u = Particle(pdg_code = 2,55u = Particle(pdg_code = 2,
101 name = 'u',56 name = 'u',
102 antiname = 'u~',57 antiname = 'u~',
103 spin = 2,58 spin = 2,
104 color = 3,59 color = 3,
105 mass = Param.MU,60 mass = Param.ZERO,
106 width = Param.ZERO,61 width = Param.ZERO,
107 texname = 'u',62 texname = 'u',
108 antitexname = 'u~',63 antitexname = 'u~',
@@ -117,7 +72,7 @@
117 antiname = 'c~',72 antiname = 'c~',
118 spin = 2,73 spin = 2,
119 color = 3,74 color = 3,
120 mass = Param.MC,75 mass = Param.ZERO,
121 width = Param.ZERO,76 width = Param.ZERO,
122 texname = 'c',77 texname = 'c',
123 antitexname = 'c~',78 antitexname = 'c~',
@@ -147,7 +102,7 @@
147 antiname = 'd~',102 antiname = 'd~',
148 spin = 2,103 spin = 2,
149 color = 3,104 color = 3,
150 mass = Param.MD,105 mass = Param.ZERO,
151 width = Param.ZERO,106 width = Param.ZERO,
152 texname = 'd',107 texname = 'd',
153 antitexname = 'd~',108 antitexname = 'd~',
@@ -162,7 +117,7 @@
162 antiname = 's~',117 antiname = 's~',
163 spin = 2,118 spin = 2,
164 color = 3,119 color = 3,
165 mass = Param.MS,120 mass = Param.ZERO,
166 width = Param.ZERO,121 width = Param.ZERO,
167 texname = 's',122 texname = 's',
168 antitexname = 's~',123 antitexname = 's~',
@@ -359,3 +314,48 @@
359314
360phi__minus__ = phi__plus__.anti()315phi__minus__ = phi__plus__.anti()
361316
317e__minus__ = Particle(pdg_code = 11,
318 name = 'e-',
319 antiname = 'e+',
320 spin = 2,
321 color = 1,
322 mass = Param.ZERO,
323 width = Param.ZERO,
324 texname = 'e-',
325 antitexname = 'e+',
326 charge = -1,
327 GhostNumber = 0,
328 LeptonNumber = 1)
329
330e__plus__ = e__minus__.anti()
331
332m__minus__ = Particle(pdg_code = 13,
333 name = 'm-',
334 antiname = 'm+',
335 spin = 2,
336 color = 1,
337 mass = Param.ZERO,
338 width = Param.ZERO,
339 texname = 'm-',
340 antitexname = 'm+',
341 charge = -1,
342 GhostNumber = 0,
343 LeptonNumber = 1)
344
345m__plus__ = m__minus__.anti()
346
347tt__minus__ = Particle(pdg_code = 15,
348 name = 'tt-',
349 antiname = 'tt+',
350 spin = 2,
351 color = 1,
352 mass = Param.MTA,
353 width = Param.WTau,
354 texname = 'tt-',
355 antitexname = 'tt+',
356 charge = -1,
357 GhostNumber = 0,
358 LeptonNumber = 1)
359
360tt__plus__ = tt__minus__.anti()
361
362362
=== modified file 'models/EWdim6/vertices.py'
--- models/EWdim6/vertices.py 2012-06-14 15:45:15 +0000
+++ models/EWdim6/vertices.py 2013-03-04 23:37:19 +0000
@@ -1,6 +1,6 @@
1# This file was automatically created by FeynRules 1.7.91# This file was automatically created by FeynRules 1.7.127
2# Mathematica version: 8.0 for Linux x86 (64-bit) (February 23, 2011)2# Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010)
3# Date: Fri 18 May 2012 14:43:243# Date: Tue 22 Jan 2013 16:20:54
44
55
6from object_library import all_vertices, Vertex6from object_library import all_vertices, Vertex
@@ -12,26 +12,26 @@
12V_1 = Vertex(name = 'V_1',12V_1 = Vertex(name = 'V_1',
13 particles = [ P.H, P.H, P.H, P.H ],13 particles = [ P.H, P.H, P.H, P.H ],
14 color = [ '1' ],14 color = [ '1' ],
15 lorentz = [ L.SSSS2 ],15 lorentz = [ L.SSSS1 ],
16 couplings = {(0,0):C.GC_31})16 couplings = {(0,0):C.GC_31})
1717
18V_2 = Vertex(name = 'V_2',18V_2 = Vertex(name = 'V_2',
19 particles = [ P.H, P.H, P.H ],19 particles = [ P.H, P.H, P.H ],
20 color = [ '1' ],20 color = [ '1' ],
21 lorentz = [ L.SSS2 ],21 lorentz = [ L.SSS1 ],
22 couplings = {(0,0):C.GC_95})22 couplings = {(0,0):C.GC_95})
2323
24V_3 = Vertex(name = 'V_3',24V_3 = Vertex(name = 'V_3',
25 particles = [ P.A, P.A, P.H, P.H ],25 particles = [ P.A, P.A, P.H, P.H ],
26 color = [ '1' ],26 color = [ '1' ],
27 lorentz = [ L.VVSS12, L.VVSS6 ],27 lorentz = [ L.VVSS3, L.VVSS9 ],
28 couplings = {(0,0):C.GC_83,(0,1):C.GC_82})28 couplings = {(0,1):C.GC_83,(0,0):C.GC_82})
2929
30V_4 = Vertex(name = 'V_4',30V_4 = Vertex(name = 'V_4',
31 particles = [ P.A, P.A, P.H ],31 particles = [ P.A, P.A, P.H ],
32 color = [ '1' ],32 color = [ '1' ],
33 lorentz = [ L.VVS11, L.VVS7 ],33 lorentz = [ L.VVS4, L.VVS9 ],
34 couplings = {(0,0):C.GC_123,(0,1):C.GC_122})34 couplings = {(0,1):C.GC_123,(0,0):C.GC_122})
3535
36V_5 = Vertex(name = 'V_5',36V_5 = Vertex(name = 'V_5',
37 particles = [ P.A, P.H, P.H ],37 particles = [ P.A, P.H, P.H ],
@@ -42,62 +42,62 @@
42V_6 = Vertex(name = 'V_6',42V_6 = Vertex(name = 'V_6',
43 particles = [ P.A, P.W__minus__, P.W__plus__ ],43 particles = [ P.A, P.W__minus__, P.W__plus__ ],
44 color = [ '1' ],44 color = [ '1' ],
45 lorentz = [ L.VVV10, L.VVV11, L.VVV12, L.VVV13, L.VVV5, L.VVV6, L.VVV7 ],45 lorentz = [ L.VVV10, L.VVV2, L.VVV3, L.VVV4, L.VVV7, L.VVV8, L.VVV9 ],
46 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})46 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})
4747
48V_7 = Vertex(name = 'V_7',48V_7 = Vertex(name = 'V_7',
49 particles = [ P.W__minus__, P.W__plus__, P.Z ],49 particles = [ P.A, P.Z, P.H, P.H ],
50 color = [ '1' ],50 color = [ '1' ],
51 lorentz = [ L.VVV10, L.VVV12, L.VVV13, L.VVV4, L.VVV6, L.VVV8, L.VVV9 ],51 lorentz = [ L.VVSS1, L.VVSS2, L.VVSS3, L.VVSS7, L.VVSS8, L.VVSS9 ],
52 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})52 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})
5353
54V_8 = Vertex(name = 'V_8',54V_8 = Vertex(name = 'V_8',
55 particles = [ P.A, P.Z, P.H, P.H ],55 particles = [ P.A, P.Z, P.H ],
56 color = [ '1' ],56 color = [ '1' ],
57 lorentz = [ L.VVSS10, L.VVSS11, L.VVSS12, L.VVSS5, L.VVSS6, L.VVSS7 ],57 lorentz = [ L.VVS1, L.VVS3, L.VVS4, L.VVS7, L.VVS8, L.VVS9 ],
58 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})58 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})
5959
60V_9 = Vertex(name = 'V_9',60V_9 = Vertex(name = 'V_9',
61 particles = [ P.A, P.Z, P.H ],61 particles = [ P.Z, P.H, P.H ],
62 color = [ '1' ],62 color = [ '1' ],
63 lorentz = [ L.VVS10, L.VVS11, L.VVS5, L.VVS6, L.VVS7, L.VVS9 ],63 lorentz = [ L.VSS1 ],
64 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})64 couplings = {(0,0):C.GC_8})
6565
66V_10 = Vertex(name = 'V_10',66V_10 = Vertex(name = 'V_10',
67 particles = [ P.Z, P.H, P.H ],67 particles = [ P.W__minus__, P.W__plus__, P.Z ],
68 color = [ '1' ],68 color = [ '1' ],
69 lorentz = [ L.VSS1 ],69 lorentz = [ L.VVV1, L.VVV10, L.VVV3, L.VVV5, L.VVV6, L.VVV7, L.VVV9 ],
70 couplings = {(0,0):C.GC_8})70 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})
7171
72V_11 = Vertex(name = 'V_11',72V_11 = Vertex(name = 'V_11',
73 particles = [ P.ghG, P.ghG__tilde__, P.G ],73 particles = [ P.ghG, P.ghG__tilde__, P.G ],
74 color = [ 'f(3,1,2)' ],74 color = [ 'f(1,2,3)' ],
75 lorentz = [ L.UUV2 ],75 lorentz = [ L.UUV1 ],
76 couplings = {(0,0):C.GC_4})76 couplings = {(0,0):C.GC_4})
7777
78V_12 = Vertex(name = 'V_12',78V_12 = Vertex(name = 'V_12',
79 particles = [ P.G, P.G, P.G ],79 particles = [ P.G, P.G, P.G ],
80 color = [ 'f(1,2,3)' ],80 color = [ 'f(1,2,3)' ],
81 lorentz = [ L.VVV10 ],81 lorentz = [ L.VVV7 ],
82 couplings = {(0,0):C.GC_4})82 couplings = {(0,0):C.GC_4})
8383
84V_13 = Vertex(name = 'V_13',84V_13 = Vertex(name = 'V_13',
85 particles = [ P.G, P.G, P.G, P.G ],85 particles = [ P.G, P.G, P.G, P.G ],
86 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)' ],86 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)' ],
87 lorentz = [ L.VVVV10, L.VVVV11, L.VVVV6 ],87 lorentz = [ L.VVVV1, L.VVVV5, L.VVVV6 ],
88 couplings = {(1,0):C.GC_6,(0,2):C.GC_6,(2,1):C.GC_6})88 couplings = {(1,1):C.GC_6,(0,0):C.GC_6,(2,2):C.GC_6})
8989
90V_14 = Vertex(name = 'V_14',90V_14 = Vertex(name = 'V_14',
91 particles = [ P.A, P.A, P.W__minus__, P.W__plus__ ],91 particles = [ P.A, P.A, P.W__minus__, P.W__plus__ ],
92 color = [ '1' ],92 color = [ '1' ],
93 lorentz = [ L.VVVV14, L.VVVV7, L.VVVV9 ],93 lorentz = [ L.VVVV2, L.VVVV4, L.VVVV9 ],
94 couplings = {(0,1):C.GC_67,(0,0):C.GC_68,(0,2):[ C.GC_66, C.GC_128 ]})94 couplings = {(0,0):C.GC_67,(0,2):C.GC_68,(0,1):[ C.GC_66, C.GC_128 ]})
9595
96V_15 = Vertex(name = 'V_15',96V_15 = Vertex(name = 'V_15',
97 particles = [ P.A, P.W__minus__, P.W__plus__, P.Z ],97 particles = [ P.A, P.W__minus__, P.W__plus__, P.Z ],
98 color = [ '1' ],98 color = [ '1' ],
99 lorentz = [ L.VVVV12, L.VVVV13, L.VVVV8 ],99 lorentz = [ L.VVVV3, L.VVVV7, L.VVVV8 ],
100 couplings = {(0,2):C.GC_58,(0,1):C.GC_59,(0,0):[ C.GC_49, C.GC_127 ]})100 couplings = {(0,0):C.GC_58,(0,2):C.GC_59,(0,1):[ C.GC_49, C.GC_127 ]})
101101
102V_16 = Vertex(name = 'V_16',102V_16 = Vertex(name = 'V_16',
103 particles = [ P.A, P.W__minus__, P.W__plus__, P.H, P.H ],103 particles = [ P.A, P.W__minus__, P.W__plus__, P.H, P.H ],
@@ -108,20 +108,20 @@
108V_17 = Vertex(name = 'V_17',108V_17 = Vertex(name = 'V_17',
109 particles = [ P.A, P.W__minus__, P.W__plus__, P.H ],109 particles = [ P.A, P.W__minus__, P.W__plus__, P.H ],
110 color = [ '1' ],110 color = [ '1' ],
111 lorentz = [ L.VVVS10, L.VVVS5, L.VVVS6, L.VVVS7, L.VVVS9 ],111 lorentz = [ L.VVVS2, L.VVVS3, L.VVVS4, L.VVVS6, L.VVVS7 ],
112 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})112 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})
113113
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches