1 // -*- C++ -*-
2 // $Id: Variable.cc,v 1.3 2003/09/06 14:04:14 boudreau Exp $
3 #include "CLHEP/GenericFunctions/Variable.hh"
4 #include "CLHEP/GenericFunctions/FixedConstant.hh"
5 #include <stdexcept>
6 namespace Genfun {
FUNCTION_OBJECT_IMP(Variable)7 FUNCTION_OBJECT_IMP(Variable)
8 
9 Variable::Variable(unsigned int selectionIndex, unsigned int dmsnlty):
10   _selectionIndex(selectionIndex),
11   _dimensionality(dmsnlty)
12 {}
13 
Variable(const Variable & right)14 Variable::Variable(const Variable & right):
15   AbsFunction(right),
16   _selectionIndex(right._selectionIndex),
17   _dimensionality(right._dimensionality)
18 {
19 }
20 
~Variable()21 Variable::~Variable() {
22 }
23 
operator ()(double x) const24 double Variable::operator() (double x) const {
25   if (_selectionIndex!=0) throw std::runtime_error("Genfun::Variable: selection index !=0") ;
26   return x;
27 }
28 
operator ()(const Argument & a) const29 double Variable::operator () (const Argument & a) const {
30   if  (!(_selectionIndex<a.dimension())) throw std::runtime_error("Genfun::Varaible selection index out of bounds");
31   return a[_selectionIndex];
32 }
33 
index() const34 unsigned int Variable::index() const {
35   return _selectionIndex;
36 }
37 
38 
partial(unsigned int mindex) const39 Derivative Variable::partial(unsigned int mindex) const {
40   int kroneckerDelta = mindex==_selectionIndex ? 1 : 0;
41 
42   const AbsFunction * f= new FixedConstant(kroneckerDelta);
43   for (unsigned int i=1;i<_dimensionality;i++) {
44     const AbsFunction & g = (*f)%FixedConstant(kroneckerDelta);
45     delete f;
46     f=g.clone();
47   }
48   Derivative retVal(f);
49   delete f;
50   return retVal;
51 }
52 
dimensionality() const53 unsigned int Variable::dimensionality() const {
54   return _dimensionality;
55 }
56 
57 } // namespace Genfun
58