Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F7878685
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
4 KB
Subscribers
None
View Options
diff --git a/current_generator/include/helspin.frm b/current_generator/include/helspin.frm
index 7c7b007..cf8c6c5 100644
--- a/current_generator/include/helspin.frm
+++ b/current_generator/include/helspin.frm
@@ -1,185 +1,186 @@
*/**
* \brief Procedures for dealing with helicity spinors
*
* \authors The HEJ collaboration (see AUTHORS for details)
* \date 2019
* \copyright GPLv2 or later
*/
on shortstats;
cf Conjugate,Current;
cf angle,square;
#define CHAINS "AngleChain,SquareChain,SpinorChain"
ctensor `CHAINS';
* internal symbols, rename?
v p,q,k,l,p1;
cf dum;
ctensor ct;
s x,y;
i mu1,...,mu50;
#procedure ContractCurrents
#call InsCurrent;
.sort
#call GetMomentaInChains($momenta)
#if "`$momenta'" != ""
#message Rewrite momenta `$momenta' into spinors
#call ToSpinors(`$momenta')
#endif
while(match(SpinorChain(p?, mu1?, q?)*SpinorChain(k?, mu1?, l?)));
#call Fierz(mu1?)
endwhile;
#call SortArgs
id AngleChain(p?, q?) = angle(p, q);
id SquareChain(p?, q?) = square(p, q);
argument denom_;
id AngleChain(p?, q?) = angle(p, q);
id SquareChain(p?, q?) = square(p, q);
endargument;
#endprocedure
#procedure GetMomentaInChains(MOMENTA)
id ct?{`CHAINS'}(?a) = dum(?a)*ct(?a);
#$tmp = 0;
#$p = 0;
argument dum;
+ dropcoefficient;
$p = term_;
$tmp = $tmp + $p;
endargument;
id dum(?a) = 1;
moduleoption local $p;
moduleoption sum $tmp;
.sort
#$tmp = dum_($tmp);
#inside $tmp
splitarg dum_;
argument dum_;
dropcoefficient;
endargument;
repeat id dum_(?a, mu1?index_, ?b) = dum_(?a, ?b);
id dum_(?a`MOMENTA') = 0;
#endinside
#endprocedure
#procedure InsCurrent
id Current(+1, ?a) = Current(-1, reverse_(?a));
* hack
* with ?a as pattern FORM has problems if the arguments are sums of momenta
#do N=3,50
id Current(-1, mu1?,...,mu`N'?) = SpinorChain(mu1,...,mu`N');
#enddo
#endprocedure
#procedure SortArgs
#do F={AngleChain,SquareChain}
antisymmetrize `F':2;
#enddo
#endprocedure
#procedure DoConjugate
splitarg Conjugate;
repeat id Conjugate(x?, y?, ?a) = Conjugate(x) + Conjugate(y, ?a);
normalize Conjugate;
id Conjugate(AngleChain(p?, q?)) = -SquareChain(p, q);
id Conjugate(SquareChain(p?, q?)) = -AngleChain(p, q);
id Conjugate(SpinorChain(?a)) = dum(reverse_(?a));
id dum(?a) = SpinorChain(?a);
#endprocedure
#procedure Fierz(MU)
once SpinorChain(p?, `MU', q?)*SpinorChain(k?, `MU', l?) = (
2*AngleChain(p, k)*SquareChain(l, q)
);
#endprocedure
#procedure MomentumToSpinorsInSpinorChain(P)
id SpinorChain(p?, ?a, `P', ?b, q?) = dum(
mod_(nargs_(p, ?a),2), mod_(nargs_(?b, q),2),
SpinorChain(p, ?a, `P', ?b, q)
);
id dum(1, 1, SpinorChain(p?, ?a, `P', ?b, q?)) = (
AngleChain(p, ?a, `P')*SquareChain(`P', ?b, q)
);
id dum(0, 0, SpinorChain(p?, ?a, `P', ?b, q?)) = (
SpinorChain(p, ?a, `P')*SpinorChain(`P', ?b, q)
);
if(count(dum,1)>0);
print "even number of arguments in spinor chain in %t";
exit;
endif;
#endprocedure
#procedure MomentumToSpinorsInAngleChain(P)
id AngleChain(p?, ?a, `P', ?b, q?) = dum(
mod_(nargs_(p, ?a),2), mod_(nargs_(?b, q),2),
AngleChain(p, ?a, `P', ?b, q)
);
id dum(1, 0, AngleChain(p?, ?a, `P', ?b, q?)) = (
AngleChain(p, ?a, `P')*Conjugate(SpinorChain(`P', ?b, q))
);
id dum(0, 1, AngleChain(p?, ?a, `P', ?b, q?)) = (
SpinorChain(p, ?a, `P')*AngleChain(`P', ?b, q)
);
if(count(dum,1)>0);
print "odd number of arguments in angle chain in %t";
exit;
endif;
#endprocedure
#procedure MomentumToSpinorsInSquareChain(P)
id SquareChain(p?, ?a, `P', ?b, q?) = dum(
mod_(nargs_(p, ?a),2), mod_(nargs_(?b, q),2),
SquareChain(p, ?a, `P', ?b, q)
);
id dum(1, 0, SquareChain(p?, ?a, `P', ?b, q?)) = (
SquareChain(p, ?a, `P')*SpinorChain(`P', ?b, q)
);
id dum(0, 1, SquareChain(p?, ?a, `P', ?b, q?)) = (
Conjugate(SpinorChain(p, ?a, `P'))*SquareChain(`P', ?b, q)
);
if(count(dum,1)>0);
print "odd number of arguments in angle chain in %t";
exit;
endif;
#endprocedure
#procedure MomentumToSpinors(P)
repeat;
#do CHAIN={`CHAINS'}
id `CHAIN'(?a, `P', `P', ?b) = 0;
#call MomentumToSpinorsIn`CHAIN'(`P')
#enddo
endrepeat;
#endprocedure
#procedure ToSpinors(?PS)
#do P={`?PS'}
#call MomentumToSpinors(`P')
#enddo
#endprocedure
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Tue, Nov 19, 6:39 PM (1 d, 15 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3805640
Default Alt Text
(4 KB)
Attached To
rHEJ HEJ
Event Timeline
Log In to Comment