From 3b6c2f8b0e415501aa57caf107e978327e7c5f33 Mon Sep 17 00:00:00 2001 From: Alexander Voigt Date: Sun, 4 Oct 2015 13:21:17 +0200 Subject: [PATCH] let CreateLocalConstRefs[] handle DependenceNums 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. --- meta/Parameters.m | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/meta/Parameters.m b/meta/Parameters.m index 0c1012370..1aae0dc88 100644 --- a/meta/Parameters.m +++ b/meta/Parameters.m @@ -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."; @@ -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[ @@ -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}], @@ -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]; ]; @@ -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[];