Comments (3)
continuing from #130 (comment)
Regarding the handling of the generation of different IO systems, I have started some kind of discussion in that direction in #131. Maybe instead of setting environment variables, we could pass command line arguments to the generator from cmake? Or would that defeat the purpose of exporting
PODIO_IO_HANDLERS
? I, personally, find explicitly passing command line arguments a bit easier to debug and to follow the flow of the whole thing.
command line arguments (or a single one taking a list) can also be used, I was going the lazy way of environment variables to pass the options, to avoid changes in the argument parser of the podio_class_generator.
I think one still has to declare in podioConfig.cmake which handlers are available. Of course this could be done by looking at a list of targets and creating the list from there. But this is probably more maintenance then adding to a single list whenever a new handler is created.
I think using the list of handlers in the PODIO_GENERATE_DATAMODEL cmake function is also most straight forward, and then you can just keep the list and put it in the podioConfig.cmake.
For exporting the dependency on SIO, it would be ideal if SIO already exports targets, right?
I don't think it is mandatory, but it would be easier. For any purpose targets would be preferable.
from podio.
Since some of the discussion in #130 shifted towards how to most easily incorporate different IO backends and also how to best propagate these to downstream targets, I have changed the topic of this issue slightly.
I think passing the information which backend specific code to generate to podio_class_generator.py
is basically a matter of taste (i.e. environment variables or command line arguments), but this information should not be present in the yaml file that defines the datamodel, to avoid having conflicts here.
Ideally PODIO_GENERATE_DATAMODEL
(or another cmake function) generates the c++ source code and already builds the core datamodel library as well as additional backend specific libraries. I am not sure if something like this is easily possible with an indefinite number of possible backends, that are built depending on the cmake configuration.
For the core podio functionality, i.e. a backend specific reader and writer, I think we need either a cmake function that builds the corresponding library or we place them into separate sub folders and only include them depending on the cmake configuration. Maybe both? Additionally this probably requires abstract interfaces that the readers and writers have to fulfill to easily have a core EventStore (or something similar) that can talk to all possible backends.
Any thoughts on this?
from podio.
This has been been addressed by the cmake macros introduced with #130.
from podio.
Related Issues (20)
- Weird names in `dir(podio)` HOT 1
- discussion: Possibility of differing in-memory and on-file datatypes HOT 1
- Add tests for JSON output
- Trivial return types of generated get methods should be by value instead of const reference
- Switch to black for formatting python sources HOT 1
- how to retrieve the cell ID encoding from the metadata in the output ROOT file HOT 2
- RNTuple interface changed in ROOT HOT 1
- collection push_back and value_type incompatible with some std iterator adaptors HOT 1
- Inconsistent reference access for Mutable types
- Schema evolution script does not flag some evolutions as impossible
- Frame serialization/deserialization HOT 12
- Automatically ship collection level metadata
- GenericParameters should not return a default constructed / empty value if key is not present HOT 4
- Warnings when generating ROOT dictionaries HOT 1
- GenericParameters should be stored the same way for TTree and RNTuple backends HOT 6
- Leak in SIO Frame reading
- Document the cmake functionality HOT 4
- Use types of heterogeneous origins in interfaces HOT 3
- Document more advanced cmake usage
- Make it possible to store more version information of generated EDMs
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from podio.