Skip to content

Commit

Permalink
Create PodioFactories example
Browse files Browse the repository at this point in the history
  • Loading branch information
nathanwbrei committed Sep 5, 2024
1 parent c80cbcd commit 812bb7e
Show file tree
Hide file tree
Showing 6 changed files with 120 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/examples/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ add_subdirectory(UnitTestingExample)
add_subdirectory(PodioDatamodel)
add_subdirectory(PodioFileReader)
add_subdirectory(PodioFileWriter)
add_subdirectory(PodioFactories)
add_subdirectory(PodioExample)
add_subdirectory(TimesliceExample)
add_subdirectory(RootDatamodelExample)
Expand Down
14 changes: 14 additions & 0 deletions src/examples/PodioFactories/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@

if (USE_PODIO)

add_jana_plugin(PodioFactories)
target_link_libraries(PodioFactories PUBLIC PodioDatamodel PodioDatamodelDict)

else()

message(STATUS "Skipping examples/PodioFactories because USE_PODIO=Off")

endif()



35 changes: 35 additions & 0 deletions src/examples/PodioFactories/PodioClusteringFactory.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@

#include <JANA/JApplication.h>
#include <JANA/Components/JOmniFactory.h>
#include <JANA/Components/JOmniFactoryGeneratorT.h>
#include <PodioDatamodel/ExampleClusterCollection.h>


struct PodioClusteringFactory : public JOmniFactory<PodioClusteringFactory> {

PodioInput<ExampleCluster> m_protoclusters_in {this};
PodioOutput<ExampleCluster> m_clusters_out {this};

Parameter<double> m_scale {this, "scale", 1.0, "Scaling factor"};
Parameter<double> m_offset {this, "offset", 0.0, "Amount to offset [mm]"};

void Configure() {
}

void ChangeRun(int32_t /*run_nr*/) {
}

void Execute(int32_t /*run_nr*/, uint64_t /*evt_nr*/) {

auto cs = std::make_unique<ExampleClusterCollection>();

for (auto protocluster : *m_protoclusters_in()) {
auto cluster = cs->create();
cluster.energy((m_scale() * protocluster.energy()) + m_offset());
}

m_clusters_out() = std::move(cs);
}
};


32 changes: 32 additions & 0 deletions src/examples/PodioFactories/PodioFactories.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@

#include <JANA/JApplication.h>
#include <JANA/Components/JOmniFactoryGeneratorT.h>
#include "PodioClusteringFactory.h"
#include "PodioProtoclusteringFactory.h"

extern "C"{
void InitPlugin(JApplication *app) {

InitJANAPlugin(app);

auto cluster_gen = new JOmniFactoryGeneratorT<PodioClusteringFactory>();

cluster_gen->AddWiring("clusterizer",
{"protoclusters"},
{"clusters"},
{{"offset", "1000"}});

app->Add(cluster_gen);



auto protocluster_gen = new JOmniFactoryGeneratorT<PodioProtoclusteringFactory>();

protocluster_gen->AddWiring("protoclusterizer",
{"hits"},
{"protoclusters"});

app->Add(protocluster_gen);

}
} // "C"
34 changes: 34 additions & 0 deletions src/examples/PodioFactories/PodioProtoclusteringFactory.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// Copyright 2024, Jefferson Science Associates, LLC.
// Subject to the terms in the LICENSE file found in the top-level directory.

#pragma once

#include <JANA/Components/JOmniFactory.h>
#include <PodioDatamodel/ExampleHitCollection.h>
#include <PodioDatamodel/ExampleClusterCollection.h>


struct PodioProtoclusteringFactory : public JOmniFactory<PodioProtoclusteringFactory> {

PodioInput<ExampleHit> hits_in {this};
PodioOutput<ExampleCluster> clusters_out {this};

void Configure() {
}

void ChangeRun(int32_t /*run_nr*/) {
}

void Execute(int32_t /*run_nr*/, uint64_t /*evt_nr*/) {

auto cs = std::make_unique<ExampleClusterCollection>();
for (auto hit : *hits_in()) {
auto cluster = cs->create();
cluster.energy(hit.energy());
cluster.addHits(hit);
}
clusters_out() = std::move(cs);
}
};


5 changes: 4 additions & 1 deletion src/examples/PodioFileWriter/PodioFileWriter.cc
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class PodioFileWriter : public JEventProcessor {
m_writer->finish();
}

void Process(const JEvent& event) override {
void ProcessParallel(const JEvent& event) override {

for (const auto& collection_name : *m_collection_names) {

Expand All @@ -50,6 +50,9 @@ class PodioFileWriter : public JEventProcessor {
// may contain dangling references and segfault upon reading.
event.GetCollectionBase(collection_name);
}
}

void Process(const JEvent& event) override {

auto* frame = event.GetSingle<podio::Frame>();
// This will throw if no PODIO frame is found.
Expand Down

0 comments on commit 812bb7e

Please sign in to comment.