4141#include < hydra/host/System.h>
4242#include < hydra/device/System.h>
4343#include < hydra/Lambda.h>
44- #include < hydra/multivector.h>
4544#include < hydra/Parameter.h>
46-
45+ # include < hydra/detail/Compose.h >
4746#include < hydra/functions/Gaussian.h>
48- #include < hydra/functions/Exponential.h>
49- #include < hydra/functions/BifurcatedGaussian.h>
50- #include < hydra/functions/BreitWignerNR.h>
51- #include < hydra/functions/ChiSquare.h>
52- #include < hydra/functions/Chebychev.h>
53- #include < hydra/functions/JohnsonSUShape.h>
5447#include < hydra/functions/LogNormal.h>
55- #include < hydra/functions/UniformShape.h>
56- #include < hydra/functions/TriangularShape.h>
57- #include < hydra/functions/TrapezoidalShape.h>
48+
5849
5950#include < hydra/detail/external/hydra_thrust/random.h>
6051
7162using namespace hydra ::arguments;
7263
7364declarg (xvar, double )
65+ declarg(yvar, double )
7466
7567int main(int argv, char ** argc)
7668{
@@ -93,147 +85,29 @@ int main(int argv, char** argc)
9385 }
9486
9587
96- auto data = hydra::device::vector< double >(10 , .0 );
88+ auto data = hydra::device::vector< double >(10 , .0 );
9789
98- // Gaussian distribution
9990 // Parameters
100- auto mean = hydra::Parameter::Create (" mean" ).Value (0.0 );
101- auto sigma = hydra::Parameter::Create (" sigma" ).Value (0.25 );
91+ auto mean = hydra::Parameter::Create (" mean" ).Value (0.0 );
92+ auto sigma = hydra::Parameter::Create (" sigma" ).Value (1.0 );
93+ auto factor = hydra::Parameter::Create (" factor" ).Value (1.0 );
10294
95+ // Gaussian distribution
10396 auto gauss = hydra::Gaussian<xvar>(mean, sigma);
104-
105- for (auto x: data)
106- std::cout << gauss (x) << std::endl;
107-
10897 // LogNormal distribution
109- auto lognormal = hydra::LogNormal<xvar>(mean, sigma);
110-
111-
112- // BifurcatedGaussian distribution
113- // Parameters
114- auto sigma_left = hydra::Parameter::Create (" sigma left" ).Value (2.0 );
115- auto sigma_rigt = hydra::Parameter::Create (" sigma rigt" ).Value (1.0 );
116-
117- auto bigauss = hydra::BifurcatedGaussian<xvar>(mean, sigma_left, sigma_rigt);
118-
119- // Exponential distribution
120- auto tau = hydra::Parameter::Create (" mean" ).Value (1.0 );
121-
122- auto exp = hydra::Exponential<xvar>(tau);
98+ auto lognormal = hydra::LogNormal<yvar>(mean, sigma);
99+ //
123100
124- // Breit-Wigner
125- auto mass = hydra::Parameter::Create ().Name (" mass" ).Value (5.0 );
126- auto width = hydra::Parameter::Create ().Name (" width" ).Value (0.5 );
127-
128- auto bw = hydra::BreitWignerNR<xvar>(mass, width );
129-
130- // ChiSquare
131- auto ndof = hydra::Parameter::Create ().Name (" ndof" ).Value (2.0 );
132-
133- auto chi2 = hydra::ChiSquare<xvar>(ndof);
134-
135- // JohnsonSU
136- auto delta = hydra::Parameter::Create ().Name (" delta" ).Value (2.0 );
137- auto lambda = hydra::Parameter::Create ().Name (" lambda" ).Value (1.5 );
138- auto gamma = hydra::Parameter::Create ().Name (" gamma" ).Value (3.0 );
139- auto xi = hydra::Parameter::Create ().Name (" xi" ).Value (1.1 );
140-
141- auto johnson_su = hydra::JohnsonSU<xvar>(gamma, delta, xi, lambda);
142-
143- // Uniform
144- auto A = hydra::Parameter::Create ().Name (" A" ).Value (-5.0 );
145- auto B = hydra::Parameter::Create ().Name (" B" ).Value (-1.5 );
146- auto C = hydra::Parameter::Create ().Name (" C" ).Value ( 1.5 );
147- auto D = hydra::Parameter::Create ().Name (" D" ).Value ( 5.0 );
148-
149- auto uniform = hydra::UniformShape<xvar>(A,D);
150- auto triangle = hydra::TriangularShape<xvar>(A,B,D);
151- auto trapezoid = hydra::TrapezoidalShape<xvar>(A,B,C,D);
152-
153- hydra_thrust::default_random_engine engine;
154-
155- #ifdef _ROOT_AVAILABLE_
156-
157- TH1D hist_gauss (" hist_gauss" , " hydra::Gaussian<xvar>" , 100 ,-8.0 , 8.0 );
158- TH1D hist_lognormal (" hist_lognormal" , " hydra::LogNormal<xvar>" , 100 ,0.0 , 2.5 );
159- TH1D hist_bigauss (" hist_bigauss" , " hydra::BifurcatedGaussian<xvar>" , 100 ,-8.0 , 8.0 );
160- TH1D hist_exp (" hist_exp" , " hydra::Exponential<xvar>" , 100 , 0.0 , 10.0 );
161- TH1D hist_bw (" hist_bw" , " hydra::BreitWignerNR<xvar>" , 100 , 0.0 , 10.0 );
162- TH1D hist_chi (" hist_chi" , " hydra::ChiSquare<xvar>" , 100 , 0.0 , 10.0 );
163- TH1D hist_johnson_su (" hist_su" , " hydra::JohnsonSU<xvar>" , 100 , -5.0 , 1.0 );
164- TH1D hist_uniform (" hist_uniform" , " hydra::UniformShape<xvar>" , 100 , -6.0 , 6.0 );
165- hist_uniform.SetMinimum (0.0 );
166- TH1D hist_triangle (" hist_triangle" , " hydra::TriangularShape<xvar>" , 100 , -6.0 , 6.0 );
167- TH1D hist_trapezoid (" hist_trapezoid" , " hydra::TrapezoidalShape<xvar>" , 100 , -6.0 , 6.0 );
168-
169-
170- for (size_t i=0 ; i<nentries; i++)
171- {
172- auto gauss_dist = hydra::Distribution<hydra::Gaussian<xvar>>();
173- auto lognormal_dist = hydra::Distribution<hydra::LogNormal<xvar>>();
174- auto bigauss_dist = hydra::Distribution<hydra::BifurcatedGaussian<xvar>>();
175- auto exp_dist = hydra::Distribution<hydra::Exponential<xvar>>();
176- auto bw_dist = hydra::Distribution<hydra::BreitWignerNR<xvar>>();
177- auto chi2_dist = hydra::Distribution<hydra::ChiSquare<xvar>>();
178- auto johnson_su_dist = hydra::Distribution<hydra::JohnsonSU<xvar>>();
179- auto uniform_dist = hydra::Distribution<hydra::UniformShape<xvar>>();
180- auto triangle_dist = hydra::Distribution<hydra::TriangularShape<xvar>>();
181- auto trapezoid_dist = hydra::Distribution<hydra::TrapezoidalShape<xvar>>();
182-
183- hist_gauss.Fill ( gauss_dist (engine, {0.0 , 1.5 } ));
184- hist_lognormal.Fill ( lognormal_dist (engine, lognormal ));
185- hist_bigauss.Fill ( bigauss_dist (engine, bigauss));
186- hist_exp.Fill ( exp_dist (engine, exp));
187- hist_bw.Fill ( bw_dist (engine, bw));
188- hist_chi.Fill ( chi2_dist (engine, chi2));
189- hist_johnson_su.Fill ( johnson_su_dist (engine, johnson_su ));
190- hist_uniform.Fill ( uniform_dist (engine, uniform));
191- hist_triangle.Fill (triangle_dist (engine,triangle));
192- hist_trapezoid.Fill (trapezoid_dist (engine,trapezoid));
193-
194- }
195-
196- TApplication *myapp=new TApplication (" myapp" ,0 ,0 );
197-
198- // draw histograms
199- TCanvas canvas_gauss (" canvas_gauss" ," hydra::Gaussian" , 500 , 500 );
200- hist_gauss.Draw (" hist" );
201-
202- TCanvas canvas_lognormal (" canvas_lognormal" ," hydra::LogNormal" , 500 , 500 );
203- hist_lognormal.Draw (" hist" );
204-
205- TCanvas canvas_bigauss (" canvas_bigauss" ," hydra::BifurcatedGaussian" , 500 , 500 );
206- hist_bigauss.Draw (" hist" );
207-
208- TCanvas canvas_exp (" canvas_exp" ," hydra::Exponential" , 500 , 500 );
209- hist_exp.Draw (" hist" );
210-
211- TCanvas canvas_bw (" canvas_bw" ," hydra::BreitWignerNR" , 500 , 500 );
212- hist_bw.Draw (" hist" );
213-
214- TCanvas canvas_chi (" canvas_chi" ," hydra::ChiSquare" , 500 , 500 );
215- hist_chi.Draw (" hist" );
216-
217- TCanvas canvas_johnson_su (" canvas_chi" ," hydra::JohnsonSU" , 500 , 500 );
218- hist_johnson_su.Draw (" hist" );
219-
220- TCanvas canvas_uniform (" canvas_uniform" ," hydra::UniformShape" , 500 , 500 );
221- hist_uniform.Draw (" hist" );
222-
223- TCanvas canvas_triangle (" canvas_triangle" ," hydra::TriangularShape" , 500 , 500 );
224- hist_triangle.Draw (" hist" );
225-
226- TCanvas canvas_trapezoid (" canvas_trapezoid" ," hydra::TrapezoidalShape" , 500 , 500 );
227- hist_trapezoid.Draw (" hist" );
228-
229-
230-
231- myapp->Run ();
232-
233- #endif // _ROOT_AVAILABLE_
101+ auto combiner = hydra::wrap_lambda ( [] __hydra_dual__ (unsigned int npar, const hydra::Parameter* params, double x, double y) {
234102
103+ printf (" gauss %f , log-gauss %f\n " , x, y );
104+ return x + params[0 ]*y;
105+ }, factor);
235106
107+ auto fcomposed = hydra::compose ( combiner, gauss, lognormal);
236108
109+ for (size_t i=0 ; i< data.size (); ++i)
110+ fcomposed (xvar (1.0 ), yvar (1.0 ));
237111
238112 return 0 ;
239113}
0 commit comments