CLHEP VERSION Reference Documentation
CLHEP Home Page CLHEP Documentation CLHEP Bug Reports |
00001 // -*- C++ -*- 00002 // $Id: AbsFunction.cc,v 1.4 2007/01/21 20:20:41 boudreau Exp $ 00003 #include "CLHEP/GenericFunctions/AbsFunction.hh" 00004 #include "CLHEP/GenericFunctions/ConstTimesFunction.hh" 00005 #include "CLHEP/GenericFunctions/ConstOverFunction.hh" 00006 #include "CLHEP/GenericFunctions/ConstPlusFunction.hh" 00007 #include "CLHEP/GenericFunctions/ConstMinusFunction.hh" 00008 #include "CLHEP/GenericFunctions/FunctionSum.hh" 00009 #include "CLHEP/GenericFunctions/FunctionDifference.hh" 00010 #include "CLHEP/GenericFunctions/FunctionProduct.hh" 00011 #include "CLHEP/GenericFunctions/FunctionQuotient.hh" 00012 #include "CLHEP/GenericFunctions/FunctionConvolution.hh" 00013 #include "CLHEP/GenericFunctions/FunctionNegation.hh" 00014 #include "CLHEP/GenericFunctions/FunctionDirectProduct.hh" 00015 #include "CLHEP/GenericFunctions/FixedConstant.hh" 00016 #include "CLHEP/GenericFunctions/FloatingConstant.hh" 00017 #include "CLHEP/GenericFunctions/FunctionNumDeriv.hh" 00018 #include "CLHEP/GenericFunctions/Variable.hh" 00019 #include "CLHEP/GenericFunctions/FunctionNoop.hh" 00020 #include "CLHEP/GenericFunctions/ParameterComposition.hh" 00021 #include <assert.h> 00022 namespace Genfun { 00023 AbsFunction::AbsFunction() { 00024 } 00025 00026 AbsFunction::~AbsFunction() { 00027 } 00028 00029 AbsFunction::AbsFunction(const AbsFunction &) { 00030 } 00031 00032 FunctionComposition AbsFunction::operator () (const AbsFunction &function) const { 00033 return FunctionComposition(this, &function); 00034 } 00035 00036 ParameterComposition AbsFunction::operator() (const AbsParameter &p) const { 00037 return ParameterComposition(this, &p); 00038 } 00039 00040 Derivative AbsFunction::partial(unsigned int index) const { 00041 FunctionNumDeriv fPrime(this,index); 00042 return Derivative(&fPrime); 00043 } 00044 00045 00046 Derivative AbsFunction::derivative(const Variable &v) const { 00047 return partial(v.index()); 00048 } 00049 00050 Derivative AbsFunction::prime() const { 00051 assert(dimensionality()==1); 00052 return partial(0); 00053 } 00054 00055 FunctionSum operator + (const AbsFunction & a, const AbsFunction & b) { 00056 return FunctionSum(&a,&b); 00057 } 00058 00059 FunctionDifference operator - (const AbsFunction & a, const AbsFunction & b) { 00060 return FunctionDifference(&a,&b); 00061 } 00062 00063 FunctionProduct operator * (const AbsFunction & a, const AbsFunction & b) { 00064 return FunctionProduct(&a,&b); 00065 } 00066 00067 FunctionQuotient operator / (const AbsFunction & a, const AbsFunction & b) { 00068 return FunctionQuotient(&a,&b); 00069 } 00070 00071 FunctionConvolution convolve (const AbsFunction & a, const AbsFunction & b, double x0, double x1) { 00072 return FunctionConvolution(&a,&b, x0, x1); 00073 } 00074 00075 FunctionNegation operator - (const AbsFunction & a) { 00076 return FunctionNegation(&a); 00077 } 00078 00079 unsigned int AbsFunction::dimensionality() const { 00080 return 1; 00081 } 00082 00083 FunctionDirectProduct operator % (const AbsFunction & a, const AbsFunction & b) { 00084 return FunctionDirectProduct(&a,&b); 00085 } 00086 00087 ConstTimesFunction operator * (const AbsFunction &op2, double c) { 00088 return ConstTimesFunction(c, &op2); 00089 } 00090 00091 ConstPlusFunction operator + (const AbsFunction &op2, double c) { 00092 return ConstPlusFunction(c,&op2); 00093 } 00094 00095 ConstPlusFunction operator - (const AbsFunction &op2, double c) { 00096 return ConstPlusFunction(-c, &op2); 00097 } 00098 00099 ConstTimesFunction operator / (const AbsFunction &op2, double c) { 00100 return ConstTimesFunction(1/c,&op2); 00101 } 00102 00103 00104 ConstTimesFunction operator * (double c, const AbsFunction &op2) { 00105 return ConstTimesFunction(c,&op2); 00106 } 00107 00108 ConstPlusFunction operator + (double c, const AbsFunction &op2) { 00109 return ConstPlusFunction(c,&op2); 00110 } 00111 00112 ConstMinusFunction operator - (double c, const AbsFunction &op2) { 00113 return ConstMinusFunction(c,&op2); 00114 } 00115 00116 ConstOverFunction operator / (double c, const AbsFunction &op2) { 00117 return ConstOverFunction(c,&op2); 00118 } 00119 00120 00121 FunctionTimesParameter operator * (const AbsFunction &f, const AbsParameter & p) { 00122 return FunctionTimesParameter(&p, &f); 00123 } 00124 00125 FunctionPlusParameter operator + (const AbsFunction &f, const AbsParameter & p) { 00126 return FunctionPlusParameter(&p, &f); 00127 } 00128 00129 FunctionPlusParameter operator - (const AbsFunction &f, const AbsParameter & p) { 00130 GENPARAMETER MinusP = -p; 00131 return FunctionPlusParameter(&MinusP, &f); 00132 00133 } 00134 00135 FunctionTimesParameter operator / (const AbsFunction &f, const AbsParameter & p) { 00136 GENPARAMETER oneOverP = 1.0/p; 00137 return FunctionTimesParameter(&oneOverP, &f); 00138 } 00139 00140 FunctionTimesParameter operator * (const AbsParameter & p, const AbsFunction &f) { 00141 return FunctionTimesParameter(&p, &f); 00142 } 00143 00144 FunctionPlusParameter operator + (const AbsParameter & p, const AbsFunction &f) { 00145 return FunctionPlusParameter(&p, &f); 00146 } 00147 00148 FunctionPlusParameter operator - (const AbsParameter & p, const AbsFunction &f) { 00149 GENFUNCTION MinusF = -f; 00150 return FunctionPlusParameter(&p, &MinusF); 00151 } 00152 00153 FunctionTimesParameter operator / (const AbsParameter & p, const AbsFunction &f) { 00154 GENFUNCTION oneOverF = 1.0/f; 00155 return FunctionTimesParameter(&p, &oneOverF); 00156 } 00157 } // namespace Genfun