Skip to content

Commit

Permalink
let CreateLocalConstRefs[] handle DependenceNums
Browse files Browse the repository at this point in the history
If an expression contain a symbol (not a function!) that has a
DependenceNum, the CreateLocalConstRefs[] function creates a local
const reference for the symbol.

For example for ThetaW in the expression

   g1 ThetaW + g2 ThetaW

a local const ref will be created.  However, for the expression

   g1 ThetaW[] + g2 ThetaW[]

no local const ref will be created, because ThetaW[] is a function.
  • Loading branch information
Alexander Voigt authored and Alexander Voigt committed Oct 4, 2015
1 parent 10767b3 commit 3b6c2f8
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions meta/Parameters.m
Expand Up @@ -63,6 +63,9 @@
GetModelParametersWithMassDimension::usage="Returns model parameters
with given mass dimension";

GetDependenceNumSymbols::usage="Returns symbols which have a
DependenceNum";

CreateLocalConstRefs::usage="creates local const references to model
parameters / input parameters.";

Expand Down Expand Up @@ -160,7 +163,8 @@
FindAllParameters[expr_] :=
Module[{symbols, compactExpr, allParameters},
allParameters = Join[allModelParameters, allOutputParameters,
allInputParameters, Phases`GetArg /@ allPhases];
allInputParameters, Phases`GetArg /@ allPhases,
GetDependenceNumSymbols[]];
compactExpr = RemoveProtectedHeads[expr];
(* find all model parameters with SARAH head *)
symbols = DeleteDuplicates[Flatten[
Expand Down Expand Up @@ -869,7 +873,7 @@

CreateLocalConstRefs[expr_] :=
Module[{result = "", symbols, inputSymbols, modelPars, outputPars,
poleMasses, phases},
poleMasses, phases, depNum},
symbols = FindAllParameters[expr];
poleMasses = {
Cases[expr, FlexibleSUSY`Pole[FlexibleSUSY`M[a_]] /; MemberQ[allOutputParameters,FlexibleSUSY`M[a]] :> FlexibleSUSY`M[a], {0,Infinity}],
Expand All @@ -881,10 +885,12 @@
modelPars = DeleteDuplicates[Select[symbols, (MemberQ[allModelParameters,#])&]];
outputPars = DeleteDuplicates[Select[symbols, (MemberQ[allOutputParameters,#])&]];
phases = DeleteDuplicates[Select[symbols, (MemberQ[Phases`GetArg /@ allPhases,#])&]];
depNum = DeleteDuplicates[Select[symbols, (MemberQ[GetDependenceNumSymbols[],#])&]];
(result = result <> DefineLocalConstCopy[#,"INPUTPARAMETER"])& /@ inputSymbols;
(result = result <> DefineLocalConstCopy[#,"MODELPARAMETER"])& /@ modelPars;
(result = result <> DefineLocalConstCopy[#,"MODELPARAMETER"])& /@ outputPars;
(result = result <> DefineLocalConstCopy[#,"PHASE" ])& /@ phases;
(result = result <> DefineLocalConstCopy[#,"DERIVEDPARAMETER"])& /@ depNum;
(result = result <> CalculateLocalPoleMasses[#])& /@ poleMasses;
Return[result];
];
Expand Down Expand Up @@ -1158,6 +1164,15 @@
True, Print["Warning: GetThirdGeneration[",par,"]: unknown type"]; par
];

GetDependenceNumSymbols[] :=
DeleteDuplicates @ Flatten @
Join[{SARAH`Weinberg},
Cases[SARAH`ParameterDefinitions,
{parameter_ /; !MemberQ[Parameters`GetModelParameters[], parameter] &&
parameter =!= SARAH`Weinberg && parameter =!= SARAH`electricCharge,
{___, SARAH`DependenceNum -> value:Except[None], ___}} :> parameter]
];

End[];

EndPackage[];

0 comments on commit 3b6c2f8

Please sign in to comment.