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