18 #ifndef CLAD_DERIVATOR
19 #define CLAD_DERIVATOR
22 #error "This file must not be included by compiled programs."
25 #include <plugins/include/clad/Differentiator/Differentiator.h>
28 namespace custom_derivatives {
31 return (d < 0) ? -1 : 1;
35 Double_t ACos_darg0(T d) {
36 return -1./TMath::Sqrt(1 - d * d);
40 Double_t ACosH_darg0(T d) {
41 return 1. / TMath::Sqrt(d * d - 1);
45 Double_t ASin_darg0(T d) {
46 return 1. / TMath::Sqrt(1 - d * d);
50 Double_t ASinH_darg0(T d) {
51 return 1. / TMath::Sqrt(d * d + 1);
55 Double_t ATan_darg0(T d) {
56 return 1. / (d * d + 1);
60 Double_t ATanH_darg0(T d) {
61 return 1. / (1 - d * d);
66 return -TMath::Sin(d);
71 return TMath::SinH(d);
75 Double_t Erf_darg0(T d) {
76 return 2 * TMath::Exp(-d * d) / TMath::Sqrt(TMath::Pi());
80 Double_t Erfc_darg0(T d) {
85 Double_t Exp_darg0(T d) {
90 T Hypot_darg0(T x, T y) {
91 return x / TMath::Hypot(x, y);
95 T Hypot_darg1(T x, T y) {
96 return y / TMath::Hypot(x, y);
100 void Hypot_grad(T x, T y, T* result) {
101 T h = TMath::Hypot(x, y);
106 template <
typename T>
107 Double_t Log_darg0(T d) {
111 template <
typename T>
112 Double_t Log10_darg0(T d) {
113 return Log_darg0(d) / TMath::Ln10();
116 template <
typename T>
117 Double_t Log2_darg0(T d) {
118 return Log_darg0(d) / TMath::Log(2);
121 template <
typename T>
122 T Max_darg0(T a, T b) {
123 return (a >= b) ? 1 : 0;
126 template <
typename T>
127 T Max_darg1(T a, T b) {
128 return (a >= b) ? 0 : 1;
131 template <
typename T>
132 void Max_grad(T a, T b, T* result) {
139 template <
typename T>
140 T Min_darg0(T a, T b) {
141 return (a <= b) ? 1 : 0;
144 template <
typename T>
145 T Min_darg1(T a, T b) {
146 return (a <= b) ? 0 : 1;
149 template <
typename T>
150 void Min_grad(T a, T b, T* result) {
157 template <
typename T>
158 T Power_darg0(T x, T y) {
159 return y * TMath::Power(x, y - 1);
162 template <
typename T>
163 Double_t Power_darg1(T x, T y) {
164 return TMath::Power(x, y) * TMath::Log(x);
167 template <
typename T>
168 Double_t Power_grad(T x, T y, Double_t* result) {
169 T t = TMath::Power(x, y - 1);
171 result[1] += x * t * TMath::Log(x);
174 template <
typename T>
175 Double_t Sin_darg0(T d) {
176 return TMath::Cos(d);
179 template <
typename T>
180 Double_t SinH_darg0(T d) {
181 return TMath::CosH(d);
184 template <
typename T>
189 template <
typename T>
190 Double_t Sqrt_darg0(T d) {
191 return 0.5 / TMath::Sqrt(d);
194 template <
typename T>
195 Double_t Tan_darg0(T d) {
196 return 1./ TMath::Sq(TMath::Cos(d));
199 template <
typename T>
200 Double_t TanH_darg0(T d) {
201 return 1./ TMath::Sq(TMath::CosH(d));
204 #endif // CLAD_DERIVATOR