diff options
author | Stan Seibert <stan@mtrr.org> | 2011-08-03 17:27:20 -0400 |
---|---|---|
committer | Stan Seibert <stan@mtrr.org> | 2011-08-03 17:27:20 -0400 |
commit | acbeb1170dffc7b09ce4174cc5ef10a4ff0b3b1c (patch) | |
tree | 79345fe54ab26059a9ff66b4a9f6d3ce20cbaf45 | |
parent | e13a62d7e3a532ba125b704f858c4a3361ba31a7 (diff) | |
download | chroma-acbeb1170dffc7b09ce4174cc5ef10a4ff0b3b1c.tar.gz chroma-acbeb1170dffc7b09ce4174cc5ef10a4ff0b3b1c.tar.bz2 chroma-acbeb1170dffc7b09ce4174cc5ef10a4ff0b3b1c.zip |
ROOT data structure for holding particle, photon, and hit information.
-rw-r--r-- | io/__init__.py | 0 | ||||
-rw-r--r-- | io/root.C | 79 | ||||
-rw-r--r-- | io/root.py | 16 |
3 files changed, 95 insertions, 0 deletions
diff --git a/io/__init__.py b/io/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/io/__init__.py diff --git a/io/root.C b/io/root.C new file mode 100644 index 0000000..0cfb37f --- /dev/null +++ b/io/root.C @@ -0,0 +1,79 @@ +#include <TVector3.h> +#include <vector> +#include <TTree.h> +#include <string> + +struct Photon { + double t; + TVector3 pos; + TVector3 dir; + TVector3 pol; + double wavelength; // nm + int state; + int last_triangle; + int last_solid; +}; + +struct MC { + std::string particle; + TVector3 gen_pos; + TVector3 gen_dir; + double gen_ke; + + std::vector<Photon> photon; + + void clear() { + particle = "none"; + photon.clear(); + } +}; + +struct Channel { + Channel() : channel_id(-1), t(-9999.0), q(-9999.0) { }; + int channel_id; + double t; + double q; +}; + +struct Event { + int event_id; + MC mc; + int nhit; + std::vector<Channel> channel; + + void clear() { + mc.clear(); + channel.clear(); + } +}; + +void fill_event(TTree *T, + Event *ev, int event_id, double *gen_pos, int nchannels, + float *channel_times) +{ + ev->event_id = event_id; + MC &mc = ev->mc; + mc.gen_pos.SetXYZ(gen_pos[0], gen_pos[1], gen_pos[2]); + mc.photon.resize(0); + ev->channel.resize(0); + ev->nhit = 0; + Channel ch; + for (int i=0; i < nchannels; i++) { + if (channel_times[i] < 1e8) { + ev->nhit++; + ch.channel_id = i; + ch.t = channel_times[i]; + ch.q = 1.0; + ev->channel.push_back(ch); + } + } + T->Fill(); +} + + +#ifdef __MAKECINT__ +#pragma link C++ class vector<Photon>; +#pragma link C++ class vector<Channel>; +#endif + + diff --git a/io/root.py b/io/root.py new file mode 100644 index 0000000..382905a --- /dev/null +++ b/io/root.py @@ -0,0 +1,16 @@ +import ROOT +import os.path + +ROOT.gROOT.ProcessLine('.L '+os.path.join(os.path.dirname(__file__), 'root.C+g')) + +from ROOT import Event + +def make_tree(name, desc=''): + '''Create a ROOT tree for holding event information. + + Returns tuple of Event object for filling and TTree. + ''' + tree = ROOT.TTree(name, desc) + ev = ROOT.Event() + tree.Branch('ev', ev) + return ev, tree |