Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DEventProcessor_eloss.cc
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DEventProcessor_eloss.cc
4 // Created: Mon Mar 22 15:58:47 EDT 2010
5 // Creator: davidl (on Darwin harriet.jlab.org 9.8.0 i386)
6 //
7 
9 #include <PID/DChargedTrack.h>
10 
11 #include "DEventProcessor_eloss.h"
12 using namespace jana;
13 
14 
15 // Routine used to create our DEventProcessor
16 #include <JANA/JApplication.h>
17 extern "C"{
18 void InitPlugin(JApplication *app){
19  InitJANAPlugin(app);
20  app->AddProcessor(new DEventProcessor_eloss());
21 }
22 } // "C"
23 
24 
25 //------------------
26 // DEventProcessor_eloss (Constructor)
27 //------------------
29 {
30 
31 }
32 
33 //------------------
34 // ~DEventProcessor_eloss (Destructor)
35 //------------------
37 {
38 
39 }
40 
41 //------------------
42 // init
43 //------------------
45 {
46  geant = new TTree("geant", "GEANT swimmer");
47  dana = new TTree("dana", "DANA swimmer");
48  geant->Branch("e", &geant_event, "event/I:s/F:x:y:z:P:dP:mech/I");
49  dana->Branch("e", &dana_event, "event/I:s/F:x:y:z:P:dP");
50 
51  geant->SetMarkerColor(kRed);
52  dana->SetMarkerColor(kBlue);
53 
54  geant->SetMarkerStyle(8);
55  dana->SetMarkerStyle(8);
56  dana->SetMarkerSize(0.5);
57 
58  return NOERROR;
59 }
60 
61 //------------------
62 // brun
63 //------------------
64 jerror_t DEventProcessor_eloss::brun(JEventLoop *eventLoop, int32_t runnumber)
65 {
66  return NOERROR;
67 }
68 
69 //------------------
70 // evnt
71 //------------------
72 jerror_t DEventProcessor_eloss::evnt(JEventLoop *loop, uint64_t eventnumber)
73 {
74  vector<const DMCTrajectoryPoint*> mctrajs;
75  vector<const DChargedTrack*> tracks;
76  loop->Get(mctrajs);
77  loop->Get(tracks);
78 
79  if(tracks.size()!=1 || tracks[0]->hypotheses.size()<1){
80  _DBG_<<"tracks.size()="<<tracks.size();
81  if(tracks.size()>0)cerr<<" tracks[0]->hypotheses.size()="<<tracks[0]->hypotheses.size();
82  cerr<<endl;
83  return NOERROR;
84  }
85 
86  // Although we are only filling objects local to this plugin, TTree::Fill() periodically writes to file: Global ROOT lock
87  japp->RootWriteLock(); //ACQUIRE ROOT LOCK
88 
89  // Fill dana tree
90  const DReferenceTrajectory::swim_step_t *step = tracks[0]->hypotheses[0]->rt->swim_steps;
91  for(int i=0; i<tracks[0]->hypotheses[0]->rt->Nswim_steps; i++, step++){
92  dana_event.event = eventnumber;
93  dana_event.s = step->s;
94  dana_event.x = step->origin.X();
95  dana_event.y = step->origin.Y();
96  dana_event.z = step->origin.Z();
97  dana_event.P = step->mom.Mag();
98  dana_event.dP = step->dP;
99  dana->Fill();
100  }
101 
102  // Fill GEANT tree
103  geant_event.s = 0.0;
104  for(unsigned int i=0; i<mctrajs.size(); i++){
105  const DMCTrajectoryPoint *traj = mctrajs[i];
106  geant_event.event = eventnumber;
107  geant_event.s += traj->step;
108  geant_event.x = traj->x;
109  geant_event.y = traj->y;
110  geant_event.z = traj->z;
111  geant_event.P = sqrt(traj->px*traj->px + traj->py*traj->py + traj->pz*traj->pz);
112  float E = traj->E;
113  float dE = traj->dE;
114  float P = geant_event.P;
115  float m = sqrt(E*E - P*P);
116  float P1 = sqrt((E-dE)*(E-dE) - m*m);
117  geant_event.dP = P-P1;
118  geant_event.mech = traj->mech;
119  geant->Fill();
120  }
121 
122  japp->RootUnLock(); //RELEASE ROOT LOCK
123 
124  return NOERROR;
125 }
126 
127 //------------------
128 // erun
129 //------------------
131 {
132  // Any final calculations on histograms (like dividing them)
133  // should be done here. This may get called more than once.
134  return NOERROR;
135 }
136 
137 //------------------
138 // fini
139 //------------------
141 {
142  // Called at very end. This will be called only once
143 
144  return NOERROR;
145 }
146 
jerror_t erun(void)
Called everytime run number changes, provided brun has been called.
jerror_t fini(void)
Called after last event of last event source has been processed.
JApplication * japp
InitPlugin_t InitPlugin
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
#define _DBG_
Definition: HDEVIO.h:12
double sqrt(double)
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
jerror_t init(void)
Called once at program start.