Skip to content

Commit 5f5f397

Browse files
committed
correcting default rng around...
1 parent 89f8082 commit 5f5f397

File tree

7 files changed

+70
-167
lines changed

7 files changed

+70
-167
lines changed

examples/misc/quick_test.inl

Lines changed: 17 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,11 @@
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

@@ -71,6 +62,7 @@
7162
using namespace hydra::arguments;
7263

7364
declarg(xvar, double)
65+
declarg(yvar, double)
7466

7567
int 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
}

hydra/PhaseSpaceIntegrator.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,15 @@
3636
#include <hydra/PhaseSpace.h>
3737
#include <hydra/detail/Print.h>
3838
#include <tuple>
39+
#include <hydra/Random.h>
3940

4041
namespace hydra {
4142

4243
/**
4344
* \ingroup phsp
4445
*
4546
*/
46-
template <size_t N, typename Backend, typename GRND=hydra_thrust::random::default_random_engine>
47+
template <size_t N, typename Backend, typename GRND=hydra::default_random_engine>
4748
class PhaseSpaceIntegrator;
4849

4950
/**

hydra/Plain.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@
4242
#include <hydra/detail/functors/ProcessCallsPlain.h>
4343
#include <utility>
4444
#include <vector>
45-
46-
#include <hydra/detail/external/hydra_thrust/random.h>
45+
#include <hydra/Integrator.h>
46+
#include <hydra/Random.h>
4747

4848
namespace hydra {
4949

50-
template<size_t N, typename BACKEND, typename GRND=hydra_thrust::random::default_random_engine>
50+
template<size_t N, typename BACKEND, typename GRND=hydra::default_random_engine>
5151
struct Plain;
5252

5353

hydra/Vegas.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,11 @@
4040
#include <hydra/Integrator.h>
4141
#include <utility>
4242
#include <hydra/detail/external/hydra_thrust/random.h>
43+
#include <hydra/Random.h>
4344

4445
namespace hydra {
4546

46-
template<size_t N, typename BACKEND, typename GRND=hydra_thrust::random::default_random_engine >
47+
template<size_t N, typename BACKEND, typename GRND=hydra::default_random_engine >
4748
class Vegas ;
4849

4950
/**

hydra/detail/Compose.h

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -37,63 +37,81 @@
3737
#include <hydra/detail/utility/Utility_Tuple.h>
3838
#include <hydra/detail/base_functor.h>
3939
#include <hydra/detail/Constant.h>
40-
#include <hydra/detail/CompositeBase.h>
40+
//#include <hydra/detail/CompositeBase.h>
4141
#include <hydra/detail/FunctorTraits.h>
4242
#include <hydra/detail/CompositeTraits.h>
4343
#include <hydra/Parameter.h>
4444
#include <hydra/Tuple.h>
45+
#include <hydra/detail/BaseCompositeFunctor.h>
46+
#include <hydra/detail/TupleUtility.h>
47+
4548

4649
namespace hydra {
4750

4851

52+
namespace detail {
53+
54+
namespace compose_signature {
55+
56+
57+
58+
} // namespace compose_signature
59+
60+
} // namespace detail
61+
62+
4963
template<typename F0, typename F1, typename... Fs >
50-
class Compose: public detail::CompositeBase<F0, F1, Fs...>
64+
class Compose: public BaseCompositeFunctor<
65+
Compose<F0, F1,Fs...>,
66+
hydra_thrust::tuple<F0, F1, Fs...>,
67+
typename detail::merged_tuple<
68+
hydra_thrust::tuple<typename F0::return_type>,
69+
typename F1::argument_type, typename Fs::argument_type ... >::type >
5170
{
52-
public:
53-
//tag
5471

55-
typedef typename F0::return_type return_type;
72+
typedef BaseCompositeFunctor<
73+
Compose<F0, F1,Fs...>,
74+
hydra_thrust::tuple<F0, F1, Fs...>,
75+
typename detail::merged_tuple< hydra_thrust::tuple<typename F0::return_type>,
76+
typename F1::argument_type, typename Fs::argument_type ... >::type > super_type;
5677

57-
typedef typename hydra_thrust::tuple<
58-
typename F1::return_type,
59-
typename Fs::return_type...> argument_type;
6078

6179

80+
public:
81+
6282

6383
Compose()=delete;
6484

6585
Compose(F0 const& f0, F1 const& f1, Fs const& ...fs):
66-
detail::CompositeBase<F0, F1, Fs...>( f0, f1,fs...)
86+
super_type( f0, f1,fs...)
6787
{ }
6888

6989
__hydra_host__ __hydra_device__
7090
inline Compose(Compose<F0,F1,Fs...> const& other):
71-
detail::CompositeBase<F0, F1, Fs...>( other)
91+
super_type( other)
7292
{ }
7393

7494
__hydra_host__ __hydra_device__
7595
inline Compose<F0,F1,Fs...>& operator=(Compose<F0,F1,Fs...> const& other)
7696
{
7797
if(this==&other) return *this;
78-
detail::CompositeBase<F0, F1, Fs...>::operator=( other);
98+
super_type::operator=( other);
7999

80100
return *this;
81101
}
82102

83-
template<typename T1>
103+
template<typename ...T>
84104
__hydra_host__ __hydra_device__
85-
inline return_type operator()(T1&& x ) const
105+
inline typename super_type::return_type Evaluate(T... x ) const
86106
{
87107

88-
//evaluating f(g_1(x), g_2(x), ..., g_n(x))
89-
90-
auto g = detail::dropFirst(this->fFtorTuple);
108+
auto g = detail::dropFirst(this->GetFunctors());
91109

92-
auto f = hydra::get<0>(this->fFtorTuple);
110+
auto f = hydra::get<0>(this->GetFunctors());
93111

94112
typedef decltype(g) G_tuple ;
95113

96-
return f(detail::invoke<G_tuple, T1>(std::forward<T1>(x),g ));
114+
return f(detail::invoke<G_tuple, hydra_thrust::tuple<T...>>( hydra_thrust::tie(x...),g ));
97115
}
98116

99117

hydra/detail/FunctorTraits.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,14 @@ typedef hydra_thrust::tuple<typename std::decay<Args>::type...> argument_type;
6363
enum {arity=sizeof...(Args)};
6464
};
6565

66+
template<typename R, typename...Args>
67+
struct signature_traits< hydra_thrust::tuple<R,Args...>>
68+
{
69+
typedef typename std::decay<R>::type return_type;
70+
typedef hydra_thrust::tuple<typename std::decay<Args>::type...> argument_type;
71+
enum {arity=sizeof...(Args)};
72+
};
73+
6674

6775
template <typename T>
6876
struct functor_traits:

hydra/detail/TupleUtility.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include <hydra/detail/external/hydra_thrust/iterator/iterator_traits.h>
3838
#include <type_traits>
3939
#include <utility>
40+
#include <hydra/detail/TupleTraits.h>
4041

4142
namespace hydra {
4243

@@ -71,7 +72,7 @@ namespace tuple_utility {
7172
typename detail::tuple_utility::flat_tuple<T...>::type
7273
get_flat_tuple(T const&... args)
7374
{
74-
return hydra::tuple_cat( detail::tupler(args)...);
75+
return hydra_thrust::tuple_cat( detail::tupler(args)...);
7576
}
7677

7778
} // namespace hydra

0 commit comments

Comments
 (0)