11#include " jlcxx/jlcxx.hpp"
2+ #include " jlcxx/stl.hpp"
3+
24#include " fjcore.hh"
35#include < vector>
46
57using namespace std ;
68using namespace fjcore ;
7- namespace jlcxx
8- {
9- template <> struct IsBits <JetAlgorithm> : std::true_type {};
10- template <> struct IsBits <RecombinationScheme> : std::true_type {};
11- template <> struct IsBits <Strategy> : std::true_type {};
12- }
9+
1310JLCXX_MODULE define_julia_module (jlcxx::Module& fastjet)
1411{
15- fastjet.add_bits <JetAlgorithm>(" JetAlgorithm" );
12+ fastjet.add_bits <JetAlgorithm>(" JetAlgorithm" , jlcxx::julia_type ( " CppEnum " ) );
1613 fastjet.set_const (" kt_algorithm" , kt_algorithm);
1714 fastjet.set_const (" cambridge_algorithm" , cambridge_algorithm);
1815 fastjet.set_const (" antikt_algorithm" , antikt_algorithm);
@@ -24,7 +21,7 @@ JLCXX_MODULE define_julia_module(jlcxx::Module& fastjet)
2421 fastjet.set_const (" plugin_algorithm" , plugin_algorithm);
2522 fastjet.set_const (" undefined_jet_algorithm" , undefined_jet_algorithm);
2623
27- fastjet.add_bits <RecombinationScheme>(" RecombinationScheme" );
24+ fastjet.add_bits <RecombinationScheme>(" RecombinationScheme" , jlcxx::julia_type ( " CppEnum " ) );
2825 fastjet.set_const (" E_scheme" , E_scheme);
2926 fastjet.set_const (" pt_scheme" , pt_scheme);
3027 fastjet.set_const (" pt2_scheme" , pt2_scheme);
@@ -36,7 +33,7 @@ JLCXX_MODULE define_julia_module(jlcxx::Module& fastjet)
3633 fastjet.set_const (" WTA_modp_scheme" , WTA_modp_scheme);
3734 fastjet.set_const (" external_scheme" , external_scheme);
3835
39- fastjet.add_bits <Strategy>(" Strategy" );
36+ fastjet.add_bits <Strategy>(" Strategy" , jlcxx::julia_type ( " CppEnum " ) );
4037 fastjet.set_const (" N2MHTLazy9AntiKtSeparateGhosts" , N2MHTLazy9AntiKtSeparateGhosts);
4138 fastjet.set_const (" N2MHTLazy9" , N2MHTLazy9);
4239 fastjet.set_const (" N2MHTLazy25" , N2MHTLazy25);
@@ -91,33 +88,27 @@ JLCXX_MODULE define_julia_module(jlcxx::Module& fastjet)
9188 .method (" squared_distance" , &PseudoJet::squared_distance)
9289 .method (" delta_R" , &PseudoJet::delta_R)
9390 .method (" delta_phi_to" , &PseudoJet::delta_phi_to)
94- .method (" beam_distance" , &PseudoJet::beam_distance)
95- .method (" four_mom" , &PseudoJet::four_mom);
91+ .method (" beam_distance" , &PseudoJet::beam_distance);
92+
93+ // four_mom returns a valarray... There's no factory for this, yet, so we're just returning a vector here
94+ fastjet.method (" four_mom" , [](const PseudoJet& pj)->std ::vector<double > {
95+ vector<double > mom (4 );
96+ mom[0 ] = pj.px ();
97+ mom[1 ] = pj.py ();
98+ mom[2 ] = pj.pz ();
99+ mom[4 ] = pj.e ();
100+ return mom;
101+ });
96102
97103 // we mostly don't need the jet definition on the julia side.
98104 // only used to instantiate the clustering
99105 fastjet.add_type <JetDefinition>(" JetDefinition" )
100106 .constructor <const JetAlgorithm, double >();
101107
102- fastjet.add_type <vector<PseudoJet>>(" JetVec" )
103- .method (" size" , &vector<PseudoJet>::size);
104- fastjet.method (" at" , [](const vector<PseudoJet>& vec, size_t i) {
105- return vec.at (i);
106- });
107-
108108 fastjet.method (" constituents" , [](const PseudoJet& pj) {
109109 return pj.constituents ();
110110 });
111111
112- fastjet.method (" ClusterSequence" , [](jlcxx::ArrayRef<jl_value_t *> vec, const JetDefinition& jd) {
113- vector<PseudoJet> pjvec;
114- for (jl_value_t * v : vec) {
115- const PseudoJet& j = *jlcxx::unbox_wrapped_ptr<PseudoJet>(v);
116- pjvec.push_back (j);
117- }
118- return ClusterSequence (pjvec, jd);
119- });
120-
121112 fastjet.add_type <ClusterSequence>(" ClusterSequence" )
122113 .constructor <const std::vector<PseudoJet>&, const JetDefinition&>()
123114 .method (" inclusive_jets" , &ClusterSequence::inclusive_jets);
0 commit comments