summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStan Seibert <stan@mtrr.org>2011-08-03 17:27:20 -0400
committerStan Seibert <stan@mtrr.org>2011-08-03 17:27:20 -0400
commitacbeb1170dffc7b09ce4174cc5ef10a4ff0b3b1c (patch)
tree79345fe54ab26059a9ff66b4a9f6d3ce20cbaf45
parente13a62d7e3a532ba125b704f858c4a3361ba31a7 (diff)
downloadchroma-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__.py0
-rw-r--r--io/root.C79
-rw-r--r--io/root.py16
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