summaryrefslogtreecommitdiff
path: root/fileio/root.C
diff options
context:
space:
mode:
authorAnthony LaTorre <tlatorre9@gmail.com>2011-08-25 21:42:42 -0400
committerAnthony LaTorre <tlatorre9@gmail.com>2011-08-25 21:42:42 -0400
commite75eda8a637c01c34c71063b91a86845cc1c5beb (patch)
treed525cdaeda966c878e5387bf327f7e9aee643afc /fileio/root.C
parentfa8d1082f9d989f2a3819540a9bf30dc67618709 (diff)
parentb8e7b443242c716c12006442c2738e09ed77c0c9 (diff)
downloadchroma-e75eda8a637c01c34c71063b91a86845cc1c5beb.tar.gz
chroma-e75eda8a637c01c34c71063b91a86845cc1c5beb.tar.bz2
chroma-e75eda8a637c01c34c71063b91a86845cc1c5beb.zip
merge
Diffstat (limited to 'fileio/root.C')
-rw-r--r--fileio/root.C50
1 files changed, 45 insertions, 5 deletions
diff --git a/fileio/root.C b/fileio/root.C
index 7052a71..07e50a1 100644
--- a/fileio/root.C
+++ b/fileio/root.C
@@ -11,15 +11,18 @@ struct Photon {
double wavelength; // nm
unsigned int history;
int last_hit_triangle;
+
+ ClassDef(Photon, 1);
};
struct Track {
std::string particle;
- double time;
TVector3 position;
TVector3 direction;
double start_time;
double total_energy;
+
+ ClassDef(Track, 1);
};
struct MC {
@@ -34,6 +37,7 @@ struct MC {
std::vector<Photon> photon_start;
std::vector<Photon> photon_stop;
+ ClassDef(MC, 1);
};
struct Channel {
@@ -42,23 +46,30 @@ struct Channel {
double time;
double charge;
unsigned int mc_history;
+
+ ClassDef(Channel, 1);
};
struct Event {
int event_id;
MC mc;
int nhit;
+ int max_channel_id;
std::vector<Channel> channel;
+ ClassDef(Event, 1);
+
// Populate arrays of length nentries with hit, time, and charge
// information, indexed by channel ID
void get_channels(unsigned int nentries, int *hit, float *time,
- float *charge)
+ float *charge, unsigned int *mc_history=0)
{
for (unsigned int i=0; i < nentries; i++) {
hit[i] = 0;
time[i] = -1e9f;
charge[i] = -1e9f;
+ if (mc_history)
+ mc_history[i] = 0;
}
for (unsigned int i=0; i < channel.size(); i++) {
@@ -68,18 +79,45 @@ struct Event {
hit[channel_id] = 1;
time[channel_id] = channel[i].time;
charge[channel_id] = channel[i].charge;
+ if (mc_history)
+ mc_history[channel_id] = channel[i].mc_history;
}
}
}
};
-void fill_photons(Event *ev, bool start,
+void get_photons(const std::vector<Photon> &photons, float *positions,
+ float *directions, float *polarizations, float *wavelengths,
+ float *times, unsigned int *histories, int *last_hit_triangles)
+{
+ for (unsigned int i=0; i < photons.size(); i++) {
+ const Photon &photon = photons[i];
+ positions[3*i] = photon.position.X();
+ positions[3*i+1] = photon.position.Y();
+ positions[3*i+2] = photon.position.Z();
+
+ directions[3*i] = photon.direction.X();
+ directions[3*i+1] = photon.direction.Y();
+ directions[3*i+2] = photon.direction.Z();
+
+ polarizations[3*i] = photon.polarization.X();
+ polarizations[3*i+1] = photon.polarization.Y();
+ polarizations[3*i+2] = photon.polarization.Z();
+
+ wavelengths[i] = photon.wavelength;
+ times[i] = photon.time;
+ histories[i] = photon.history;
+ last_hit_triangles[i] = photon.last_hit_triangle;
+ }
+}
+
+
+void fill_photons(std::vector<Photon> &photons,
unsigned int nphotons, float *pos, float *dir,
float *pol, float *wavelength, float *t0,
- int *histories=0, int *last_hit_triangle=0)
+ unsigned int *histories=0, int *last_hit_triangle=0)
{
- std::vector<Photon> &photons = start ? ev->mc.photon_start : ev->mc.photon_stop;
photons.resize(nphotons);
for (unsigned int i=0; i < nphotons; i++) {
@@ -107,6 +145,8 @@ void fill_hits(Event *ev, unsigned int nchannels, float *time,
{
ev->channel.resize(0);
ev->nhit = 0;
+ ev->max_channel_id = nchannels - 1;
+
Channel ch;
for (unsigned int i=0; i < nchannels; i++) {
if (time[i] < 1e8) {