Skip to content

Commit 058777b

Browse files
committed
Massive updated to the package
1 parent f053ffe commit 058777b

File tree

7 files changed

+265
-145
lines changed

7 files changed

+265
-145
lines changed

Project.toml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,14 @@ CodecZstd = "6b39b394-51ab-5f42-8807-6242bab2b4c2"
88
CxxWrap = "1f15a43c-97ca-5a2a-ae31-89f07a497df4"
99
HepMC3_jll = "b85c3e40-22db-5268-bacb-02bd65cb4e01"
1010
Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
11-
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
11+
1212

1313
[compat]
1414
CxxWrap = "0.16.0"
1515
HepMC3_jll = "3.3.0"
16+
17+
[extras]
18+
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
19+
20+
[targets]
21+
test = ["Test"]

caveats.md

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,3 +309,92 @@ julia build.jl
309309
```
310310

311311
Run the test file
312+
313+
314+
315+
Critical Issue we encountered and fixed
316+
317+
318+
SOltuion : dual typing C++ functions,
319+
320+
since shared pointer version work with jet reconstruction pipeline
321+
and
322+
non shared_pointer function work with runtests.jl
323+
324+
325+
mod.method("particles_size", &particles_size);
326+
mod.method("vertices_size", &vertices_size);
327+
mod.method("get_particle_at", &get_particle_at);
328+
mod.method("get_vertex_at", &get_vertex_at);
329+
330+
331+
// For raw pointers
332+
mod.method("particles_size_raw", &particles_size_raw);
333+
mod.method("vertices_size_raw", &vertices_size_raw);
334+
mod.method("get_particle_at_raw", &get_particle_at_raw);
335+
mod.method("get_vertex_at_raw", &get_vertex_at_raw);
336+
337+
338+
after which we exposed interfaces for non_shared pointer for runtests.jl
339+
```
340+
341+
# ============================================================================
342+
# WRAPPER METHODS FOR SHARED_PTR COMPATIBILITY
343+
# ============================================================================
344+
345+
# Create alias for the generated type
346+
const GenEventAllocated = var"HepMC3!GenEventAllocated"
347+
export GenEventAllocated
348+
349+
350+
351+
# Replace the existing wrapper functions (around lines 942-977) with these:
352+
353+
# ============================================================================
354+
# WRAPPER METHODS FOR TEST COMPATIBILITY (using _raw functions)
355+
# ============================================================================
356+
357+
# Wrapper methods for GenEventAllocated (the type used in tests)
358+
function particles_size(event::GenEventAllocated)
359+
event_raw_ptr = event.cpp_object # This is GenEvent*
360+
return particles_size_raw(event_raw_ptr)
361+
end
362+
363+
function vertices_size(event::GenEventAllocated)
364+
event_raw_ptr = event.cpp_object
365+
return vertices_size_raw(event_raw_ptr)
366+
end
367+
368+
function get_particle_at(event::GenEventAllocated, index::Integer)
369+
event_raw_ptr = event.cpp_object
370+
return get_particle_at_raw(event_raw_ptr, index - 1) # Convert to 0-based indexing
371+
end
372+
373+
function get_vertex_at(event::GenEventAllocated, index::Integer)
374+
event_raw_ptr = event.cpp_object
375+
return get_vertex_at_raw(event_raw_ptr, index - 1)
376+
end
377+
378+
# Same for GenEvent type
379+
function particles_size(event::GenEvent)
380+
event_raw_ptr = event.cpp_object
381+
return particles_size_raw(event_raw_ptr)
382+
end
383+
384+
function vertices_size(event::GenEvent)
385+
event_raw_ptr = event.cpp_object
386+
return vertices_size_raw(event_raw_ptr)
387+
end
388+
389+
function get_particle_at(event::GenEvent, index::Integer)
390+
event_raw_ptr = event.cpp_object
391+
return get_particle_at_raw(event_raw_ptr, index - 1)
392+
end
393+
394+
function get_vertex_at(event::GenEvent, index::Integer)
395+
event_raw_ptr = event.cpp_object
396+
return get_vertex_at_raw(event_raw_ptr, index - 1)
397+
end
398+
399+
400+
```

directions.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,31 @@ cd gen
77
rm -rf build/ cpp/jlHepMC3.* jl/
88
julia build.jl
99
```
10-
## Apply patch to include manual wrappers, since we only define on Jlcxx module
10+
### Apply patch to include manual wrappers, since we only define on Jlcxx module
1111
```bash
1212
sed -i '/#include "HepMC3\/Units.h"/a #include "HepMC3Wrap.h"' gen/cpp/jlHepMC3.cxx
1313

1414
sed -i '/for(const auto& w: wrappers) w->add_methods();/a \ add_manual_hepmc3_methods(jlModule);' gen/cpp/jlHepMC3.cxx
1515
```
1616

17-
## After applying patch rebuild the binary
17+
### After applying patch rebuild the binary
1818

1919
```julia
2020
cd gen/build
2121

2222
cmake --build . --config Release --parallel 8
2323
```
2424

25-
# Executing a basic example
25+
### Executing a basic example
2626

2727
```julia
2828
cd ../..
2929
julia --project=. examples/basic_tree_julia.jl
3030
```
3131

3232

33+
### Running Tests
34+
```julia
35+
julia --project=. -e "using Pkg; Pkg.build()"
36+
julia --project=. -e "using Pkg; Pkg.test()"
37+
```

gen/cpp/HepMC3Wrap.cxx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,14 @@ void add_manual_hepmc3_methods(jlcxx::Module& mod) {
110110
mod.method("vertices_size", &vertices_size);
111111
mod.method("get_particle_at", &get_particle_at);
112112
mod.method("get_vertex_at", &get_vertex_at);
113-
113+
114+
115+
// For raw pointers
116+
mod.method("particles_size_raw", &particles_size_raw);
117+
mod.method("vertices_size_raw", &vertices_size_raw);
118+
mod.method("get_particle_at_raw", &get_particle_at_raw);
119+
mod.method("get_vertex_at_raw", &get_vertex_at_raw);
120+
114121
// Run info support
115122
mod.method("create_gen_run_info", &create_gen_run_info);
116123
mod.method("set_event_run_info", &set_event_run_info);
@@ -123,10 +130,6 @@ void add_manual_hepmc3_methods(jlcxx::Module& mod) {
123130
mod.method("get_end_vertex_safe", &get_end_vertex_safe);
124131

125132

126-
127-
128-
129-
130133
mod.method("read_all_events_from_file", &read_all_events_from_file);
131134
mod.method("get_event_from_vector", &get_event_from_vector);
132135
mod.method("get_events_vector_size", &get_events_vector_size);

gen/cpp/HepMC3Wrap.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,15 @@ extern "C" {
142142
void* get_event_from_vector(void* events_vector, int index);
143143
int get_events_vector_size(void* events_vector);
144144
void delete_events_vector(void* events_vector);
145+
146+
147+
148+
// New raw pointer functions for test compatibility
149+
int particles_size_raw(void* event);
150+
int vertices_size_raw(void* event);
151+
void* get_particle_at_raw(void* event, int index);
152+
void* get_vertex_at_raw(void* event, int index);
153+
145154
}
146155

147156
#endif

gen/cpp/HepMC3WrapImpl.cpp

Lines changed: 67 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -391,32 +391,54 @@ void free_weights(double* weights) {
391391
delete[] weights;
392392
}
393393

394-
int particles_size(void* event) {
395-
auto e = static_cast<std::shared_ptr<HepMC3::GenEvent>*>(event); // ← Use shared_ptr
396-
return (*e)->particles().size();
397-
}
398394

399-
int vertices_size(void* event) {
400-
auto e = static_cast<std::shared_ptr<HepMC3::GenEvent>*>(event); // ← Use shared_ptr
401-
return (*e)->vertices().size();
402-
}
395+
396+
397+
// int particles_size(void* event) {
398+
// // CHANGE: Input casting from shared_ptr* to GenEvent*
399+
// auto e = static_cast<HepMC3::GenEvent*>(event); // ← Was: std::shared_ptr<HepMC3::GenEvent>*
400+
// return e->particles().size();
401+
// }
402+
403+
// int vertices_size(void* event) {
404+
// // CHANGE: Input casting from shared_ptr* to GenEvent*
405+
// auto e = static_cast<HepMC3::GenEvent*>(event); // ← Was: std::shared_ptr<HepMC3::GenEvent>*
406+
// return e->vertices().size();
407+
// }
403408

404409
// void* get_particle_at(void* event, int index) {
405-
// auto e = static_cast<std::shared_ptr<HepMC3::GenEvent>*>(event); // ← Use shared_ptr
406-
// if (index >= 0 && index < (int)(*e)->particles().size()) {
407-
// return new std::shared_ptr<HepMC3::GenParticle>((*e)->particles()[index]);
410+
// // CHANGE: Input casting from shared_ptr* to GenEvent*
411+
// auto e = static_cast<HepMC3::GenEvent*>(event); // ← Was: std::shared_ptr<HepMC3::GenEvent>*
412+
// auto particles = e->particles();
413+
// if (index >= 0 && index < (int)particles.size()) {
414+
// // KEEP: Return shared_ptr for compatibility with JetReconstruction
415+
// return new std::shared_ptr<HepMC3::GenParticle>(particles[index]); // ← KEEP THIS
408416
// }
409417
// return nullptr;
410418
// }
411419

412420
// void* get_vertex_at(void* event, int index) {
413-
// auto e = static_cast<std::shared_ptr<HepMC3::GenEvent>*>(event); // ← Use shared_ptr
414-
// if (index >= 0 && index < (int)(*e)->vertices().size()) {
415-
// return new std::shared_ptr<HepMC3::GenVertex>((*e)->vertices()[index]);
421+
// // CHANGE: Input casting from shared_ptr* to GenEvent*
422+
// auto e = static_cast<HepMC3::GenEvent*>(event); // ← Was: std::shared_ptr<HepMC3::GenEvent>*
423+
// auto vertices = e->vertices();
424+
// if (index >= 0 && index < (int)vertices.size()) {
425+
// // KEEP: Return shared_ptr for compatibility with JetReconstruction
426+
// return new std::shared_ptr<HepMC3::GenVertex>(vertices[index]); // ← KEEP THIS
416427
// }
417428
// return nullptr;
418429
// }
419430

431+
432+
int particles_size(void* event) {
433+
auto e = static_cast<std::shared_ptr<HepMC3::GenEvent>*>(event); // ← Use shared_ptr
434+
return (*e)->particles().size();
435+
}
436+
437+
int vertices_size(void* event) {
438+
auto e = static_cast<std::shared_ptr<HepMC3::GenEvent>*>(event); // ← Use shared_ptr
439+
return (*e)->vertices().size();
440+
}
441+
420442
void* get_particle_at(void* event, int index) {
421443
auto e = static_cast<std::shared_ptr<HepMC3::GenEvent>*>(event);
422444
auto particles = (*e)->particles();
@@ -436,6 +458,37 @@ void* get_vertex_at(void* event, int index) {
436458
}
437459
return nullptr;
438460
}
461+
462+
// ADD these new functions for test compatibility (raw GenEvent* input)
463+
int particles_size_raw(void* event) {
464+
auto e = static_cast<HepMC3::GenEvent*>(event); // Raw pointer
465+
return e->particles().size();
466+
}
467+
468+
int vertices_size_raw(void* event) {
469+
auto e = static_cast<HepMC3::GenEvent*>(event); // Raw pointer
470+
return e->vertices().size();
471+
}
472+
473+
void* get_particle_at_raw(void* event, int index) {
474+
auto e = static_cast<HepMC3::GenEvent*>(event); // Raw pointer
475+
auto particles = e->particles();
476+
if (index >= 0 && index < (int)particles.size()) {
477+
return new std::shared_ptr<HepMC3::GenParticle>(particles[index]); // Still return shared_ptr
478+
}
479+
return nullptr;
480+
}
481+
482+
void* get_vertex_at_raw(void* event, int index) {
483+
auto e = static_cast<HepMC3::GenEvent*>(event); // Raw pointer
484+
auto vertices = e->vertices();
485+
if (index >= 0 && index < (int)vertices.size()) {
486+
return new std::shared_ptr<HepMC3::GenVertex>(vertices[index]); // Still return shared_ptr
487+
}
488+
return nullptr;
489+
}
490+
491+
439492
// Run info support
440493
void* create_gen_run_info() {
441494
return new std::shared_ptr<HepMC3::GenRunInfo>(std::make_shared<HepMC3::GenRunInfo>());

0 commit comments

Comments
 (0)