From 812ae99c3cb274689aa3c6664268c35abd7f7881 Mon Sep 17 00:00:00 2001
From: Vardan Tadevosyan <tadevosn@jlab.org>
Date: Mon, 20 Oct 2014 10:18:11 -0400
Subject: [PATCH] Add a script for event-by-event comparison of energies of the
 best track in Engine and the golden track in hcana.

      Add directory examples/gtrk_e holding the code.
---
 examples/gtrk_e/comp_gtrk_e.C      | 200 +++++++++
 examples/gtrk_e/engine_class.C     |  43 ++
 examples/gtrk_e/engine_class.h     | 255 +++++++++++
 examples/gtrk_e/hcana_class.C      |  43 ++
 examples/gtrk_e/hcana_class.h      | 684 +++++++++++++++++++++++++++++
 examples/gtrk_e/hms52949_rz.root   |   1 +
 examples/gtrk_e/hodtest_52949.root |   1 +
 examples/gtrk_e/make_class.C       |  17 +
 8 files changed, 1244 insertions(+)
 create mode 100644 examples/gtrk_e/comp_gtrk_e.C
 create mode 100644 examples/gtrk_e/engine_class.C
 create mode 100644 examples/gtrk_e/engine_class.h
 create mode 100644 examples/gtrk_e/hcana_class.C
 create mode 100644 examples/gtrk_e/hcana_class.h
 create mode 120000 examples/gtrk_e/hms52949_rz.root
 create mode 120000 examples/gtrk_e/hodtest_52949.root
 create mode 100644 examples/gtrk_e/make_class.C

diff --git a/examples/gtrk_e/comp_gtrk_e.C b/examples/gtrk_e/comp_gtrk_e.C
new file mode 100644
index 0000000..a3e1a06
--- /dev/null
+++ b/examples/gtrk_e/comp_gtrk_e.C
@@ -0,0 +1,200 @@
+#define hcana_class_cxx
+#define engine_class_cxx
+
+#include <TTree.h>
+#include <TFile.h>
+#include <TROOT.h>
+#include <iostream>
+#include <TMath.h>
+#include <TLegend.h>
+#include "hcana_class.h"
+#include "engine_class.h"
+
+using namespace std;
+
+void comp_gtrk_e() {
+
+  // Compare Ecalo of the golden track from Engine and hcana.
+
+  // hcana tree
+
+  hcana_class* hcana_tree = new hcana_class(0);
+
+  Long64_t hcana_nentries = hcana_tree->fChain->GetEntriesFast();
+  cout << "hcana_nentries = " << hcana_nentries << endl;
+
+  //  hcana_tree->fChain->SetBranchStatus("*",0);      // disable all branches
+  //  hcana_tree->fChain->SetBranchStatus("*H.gold.e",1); // activate branchname
+  //  hcana_tree->fChain->SetBranchStatus("*H.gold.p",1);
+  //  hcana_tree->fChain->SetBranchStatus("*H.gold.index",1);
+  //  hcana_tree->fChain->SetBranchStatus("*H.tr.n",1);
+  //  hcana_tree->fChain->SetBranchStatus("*g.evtyp",1);
+  //  hcana_tree->fChain->SetBranchStatus("*fEvtHdr.fEvtType",1);
+  //  hcana_tree->fChain->SetBranchStatus("*fEvtHdr.fEvtNum",1);
+
+  // Engine tree
+
+  engine_class* engine_tree = new engine_class(0);
+
+  Long64_t engine_nentries = engine_tree->fChain->GetEntriesFast();
+  cout << "engine_nentries = " << engine_nentries << endl;
+
+  //  engine_tree->fChain->SetBranchStatus("*",0);
+  //  engine_tree->fChain->SetBranchStatus("*hstrk_et",1);
+  //  engine_tree->fChain->SetBranchStatus("*hsp",1);
+  //  engine_tree->fChain->SetBranchStatus("*ev_type",1);
+  //  engine_tree->fChain->SetBranchStatus("*eventid",1);
+  //  engine_tree->fChain->SetBranchStatus("*hstrk_in",1);
+  //  engine_tree->fChain->SetBranchStatus("*hntracks",1);
+
+  // Histograms.
+
+  TH1F* he_hcana = new TH1F("e_hcana", "Golden track  Ecalo",
+				100, 0.011, 1.8);
+  he_hcana->SetLineColor(kRed);
+
+  TH1F* he_engine = (TH1F*) he_hcana->Clone("e_engine");
+  he_engine->SetLineColor(kBlue);
+
+  TH1F* ee_diff = new TH1F("ee_diff",
+		  "Event by event hcana - Engine Ecalo difference", 200,-1.,1.);
+  TH1F* pp_diff = new TH1F("pp_diff","Event by event P difference",
+			   200,-1.,1.);
+  TH2F* pvse_diff = new TH2F("pvse_diff","Event by event P vs Ecalo difference",
+			     200,-1.,1., 200,-100.,100.);
+  pvse_diff->SetMarkerStyle(3);
+  TH2F* evse = new TH2F("evse","Event by event hcana vs Engine Ecalo",
+			210,-0.1,2., 210,-0.1,2.);
+  evse->SetMarkerStyle(3);
+
+  // Loop over entries.
+
+  Long64_t nentries = TMath::Min(hcana_nentries, engine_nentries);
+  cout << "nentries = " << nentries << endl;
+
+  Long64_t jentry_hcana = 0;
+  Long64_t jentry_engine = 0;
+  for (Long64_t jentry=0; jentry<nentries; jentry++) {
+
+    hcana_tree->fChain->GetEntry(jentry_hcana++);
+    engine_tree->fChain->GetEntry(jentry_engine++);
+
+    while (hcana_tree->fEvtHdr_fEvtNum > engine_tree->eventid &&
+	   jentry_engine < engine_nentries) {
+      engine_tree->fChain->GetEntry(jentry_engine++);
+      //cout<< hcana_tree->fEvtHdr_fEvtNum << " " << engine_tree->eventid << endl;
+    }
+
+    while (hcana_tree->fEvtHdr_fEvtNum < engine_tree->eventid &&
+	   jentry_hcana < hcana_nentries) {
+      hcana_tree->fChain->GetEntry(jentry_hcana++);
+      //cout<< hcana_tree->fEvtHdr_fEvtNum << " " << engine_tree->eventid << endl;
+    }
+
+    if (hcana_tree->fEvtHdr_fEvtType==1 && engine_tree->ev_type==1
+	&& hcana_tree->H_gold_index>-1 && engine_tree->hstrk_in>0
+	&& hcana_tree->H_gold_index == engine_tree->hstrk_in - 1) {
+
+      he_hcana->Fill(hcana_tree->H_gold_e, 1.);
+      //cout << hcana_tree->H_gold_e << " " << hcana_tree->g_evtyp << " " 
+      //	 << hcana_tree->fEvtHdr_fEvtType << endl; 
+
+      he_engine->Fill(engine_tree->hstrk_et, 1.);
+      //     cout << engine_tree->hsshtrk << " " << engine_tree->ev_type << " " 
+      //	   << engine_tree->eventid << endl; 
+
+      ee_diff->Fill(hcana_tree->H_gold_e - engine_tree->hstrk_et, 1.);
+      pp_diff->Fill(hcana_tree->H_gold_p - engine_tree->hsp, 1.);
+      pvse_diff->Fill(hcana_tree->H_gold_e - engine_tree->hstrk_et,
+		      hcana_tree->H_gold_p - engine_tree->hsp, 1.);
+      evse->Fill(engine_tree->hstrk_et, hcana_tree->H_gold_e, 1.);
+
+      //Debug print out.
+
+      //      if (hcana_tree->H_gold_e>0.6 && hcana_tree->H_gold_e<0.95 &&
+      //      	  engine_tree->hstrk_et<0.1) {
+	//	if (hcana_tree->H_gold_e>0.6 && hcana_tree->H_gold_e<0.95 &&
+      //  TMath::Abs(engine_tree->hstrk_et - hcana_tree->H_gold_e) < 0.0001 ) {
+      //      if (engine_tree->hstrk_et>0.6 && engine_tree->hstrk_et<0.95 &&
+      //      	  hcana_tree->H_gold_e<0.1) {
+      if (TMath::Abs(engine_tree->hstrk_et - hcana_tree->H_gold_e) < 0.65 &&
+	  TMath::Abs(engine_tree->hstrk_et - hcana_tree->H_gold_e) > 0.05 ) {
+
+	cout << "===========================================================\n";
+	cout << "Engine event " << engine_tree->eventid
+	     << ": hstrk_et = " << engine_tree->hstrk_et
+	     << ", hstrk_index = " << engine_tree->hstrk_in
+	     << ", hntracks = " << engine_tree->hntracks << endl;
+	cout << "  hsxfp = " << engine_tree->hsxfp
+	     << ", hsyfp = " << engine_tree->hsyfp << endl;
+	cout << "  hsxpfp= " << engine_tree->hsxpfp
+	     << ", hsypfp= " << engine_tree->hsypfp << endl;
+	cout << "  hsp   = " << engine_tree->hsp << endl;
+	cout << "  At calorimeter:"
+	     << "  x = " << engine_tree->hsxfp+338.69*engine_tree->hsxpfp
+	     << "  y = " << engine_tree->hsyfp+338.69*engine_tree->hsypfp
+	     << endl;
+	cout << "-----------------------------------------------------------\n";
+	cout << "hcana  event " << hcana_tree->fEvtHdr_fEvtNum
+	     << ": H_gold_e = " << hcana_tree->H_gold_e
+	     << "  H_gold_index = " << hcana_tree->H_gold_index
+	     << "  H_tr_n = " << hcana_tree->H_tr_n << endl;
+	cout << "  H_gold_fp_x = " << hcana_tree->H_gold_fp_x
+	     << "  H_gold_fp_y = " << hcana_tree->H_gold_fp_y << endl;
+	cout << "  H_gold_fp_th= " << hcana_tree->H_gold_fp_th
+	     << "  H_gold_fp_ph= " << hcana_tree->H_gold_fp_ph << endl;
+	cout << "  H_gold_p = " << hcana_tree->H_gold_p << endl;
+	cout << "  At calorimeter:"
+	  << "  x = " << hcana_tree->H_gold_fp_x+338.69*hcana_tree->H_gold_fp_th
+	  << "  y = " << hcana_tree->H_gold_fp_y+338.69*hcana_tree->H_gold_fp_ph
+	  << endl;
+
+      }
+
+    }
+
+  }   //over entries
+
+  // Plot.
+
+  TCanvas* c1 = new TCanvas("c1","Golden Track E from hcana",600,750);
+
+  c1->Divide(1,2);
+  c1->cd(1);
+  he_hcana->Draw();
+  he_engine->Draw("same");
+
+  TLegend* leg = new TLegend(0.25, 0.70, 0.40, 0.82);
+  leg->AddEntry(he_hcana,"hcana","l");
+  leg->AddEntry(he_engine,"Engine","l");
+  leg->Draw();
+
+  // Difference between the histograms.
+
+  c1->cd(2);
+
+  TH1F* dif = he_hcana->Clone("difference");
+  dif->Reset();
+  dif->Add(he_hcana,he_engine,1.,-1.);
+
+  dif->SetTitle("hcana -- Engine difference");
+  dif->SetFillColor(kRed);
+  dif->SetLineColor(kRed);
+  dif->SetLineWidth(1);
+  dif->SetFillStyle(1111);
+  dif->Draw();
+
+  TCanvas* c2 = new TCanvas("c2","Event by event hcana - Engine Ecalo diff.",
+			    600,750);
+
+  c2->Divide(1,2);
+  c2->cd(1);
+  gPad->SetLogy();
+  ee_diff->Draw();
+  c2->cd(2);
+  //  gPad->SetLogy();
+  //  pp_diff->Draw();
+  //  pvse_diff->Draw();
+  evse->Draw();
+
+}
diff --git a/examples/gtrk_e/engine_class.C b/examples/gtrk_e/engine_class.C
new file mode 100644
index 0000000..b437035
--- /dev/null
+++ b/examples/gtrk_e/engine_class.C
@@ -0,0 +1,43 @@
+#define engine_class_cxx
+#include "engine_class.h"
+#include <TH2.h>
+#include <TStyle.h>
+#include <TCanvas.h>
+
+void engine_class::Loop()
+{
+//   In a ROOT session, you can do:
+//      Root > .L engine_class.C
+//      Root > engine_class t
+//      Root > t.GetEntry(12); // Fill t data members with entry number 12
+//      Root > t.Show();       // Show values of entry 12
+//      Root > t.Show(16);     // Read and show values of entry 16
+//      Root > t.Loop();       // Loop on all entries
+//
+
+//     This is the loop skeleton where:
+//    jentry is the global entry number in the chain
+//    ientry is the entry number in the current Tree
+//  Note that the argument to GetEntry must be:
+//    jentry for TChain::GetEntry
+//    ientry for TTree::GetEntry and TBranch::GetEntry
+//
+//       To read only selected branches, Insert statements like:
+// METHOD1:
+//    fChain->SetBranchStatus("*",0);  // disable all branches
+//    fChain->SetBranchStatus("branchname",1);  // activate branchname
+// METHOD2: replace line
+//    fChain->GetEntry(jentry);       //read all branches
+//by  b_branchname->GetEntry(ientry); //read only this branch
+   if (fChain == 0) return;
+
+   Long64_t nentries = fChain->GetEntriesFast();
+
+   Long64_t nbytes = 0, nb = 0;
+   for (Long64_t jentry=0; jentry<nentries;jentry++) {
+      Long64_t ientry = LoadTree(jentry);
+      if (ientry < 0) break;
+      nb = fChain->GetEntry(jentry);   nbytes += nb;
+      // if (Cut(ientry) < 0) continue;
+   }
+}
diff --git a/examples/gtrk_e/engine_class.h b/examples/gtrk_e/engine_class.h
new file mode 100644
index 0000000..3a6d2e5
--- /dev/null
+++ b/examples/gtrk_e/engine_class.h
@@ -0,0 +1,255 @@
+//////////////////////////////////////////////////////////
+// This class has been automatically generated on
+// Mon Sep 29 17:54:32 2014 by ROOT version 5.34/06
+// from TTree h9010/
+// found on file: hms52949_rz.root
+//////////////////////////////////////////////////////////
+
+#ifndef engine_class_h
+#define engine_class_h
+
+#include <TROOT.h>
+#include <TChain.h>
+#include <TFile.h>
+
+// Header file for the classes stored in the TTree if any.
+
+// Fixed size dimensions of array or collections stored in the TTree if any.
+
+class engine_class {
+public :
+   TTree          *fChain;   //!pointer to the analyzed TTree or TChain
+   Int_t           fCurrent; //!current Tree number in a TChain
+
+   // Declaration of leaf types
+   Float_t         hcer_npe;
+   Float_t         hsp;
+   Float_t         hse;
+   Float_t         charge;
+   Float_t         hsdelta;
+   Float_t         hstheta;
+   Float_t         hsphi;
+   Float_t         w;
+   Float_t         hszbeam;
+   Float_t         hsdedx1;
+   Float_t         hsbeta;
+   Float_t         hsshtrk;
+   Float_t         hsprtrk;
+   Float_t         hsxfp;
+   Float_t         hsyfp;
+   Float_t         hsxpfp;
+   Float_t         hsypfp;
+   Float_t         hsytar;
+   Float_t         hsxptar;
+   Float_t         hsyptar;
+   Float_t         hstart;
+   Float_t         eventid;
+   Float_t         ev_type;
+   Float_t         gfrx_raw;
+   Float_t         gfry_raw;
+   Float_t         gbeam_x;
+   Float_t         gbeam_y;
+   Float_t         bpma_x;
+   Float_t         bpma_y;
+   Float_t         bpmb_x;
+   Float_t         bpmb_y;
+   Float_t         bpmc_x;
+   Float_t         bpmc_y;
+   Float_t         hseloss;
+   Float_t         hntracks;
+   Float_t         hcal_et;
+   Float_t         hgoodsc;
+   Float_t         hcal_e1;
+   Float_t         hcal_e2;
+   Float_t         hcal_e3;
+   Float_t         hcal_e4;
+   Float_t         hstrk_et;
+   Float_t         hstrk_in;
+
+   // List of branches
+   TBranch        *b_hcer_npe;   //!
+   TBranch        *b_hsp;   //!
+   TBranch        *b_hse;   //!
+   TBranch        *b_charge;   //!
+   TBranch        *b_hsdelta;   //!
+   TBranch        *b_hstheta;   //!
+   TBranch        *b_hsphi;   //!
+   TBranch        *b_w;   //!
+   TBranch        *b_hszbeam;   //!
+   TBranch        *b_hsdedx1;   //!
+   TBranch        *b_hsbeta;   //!
+   TBranch        *b_hsshtrk;   //!
+   TBranch        *b_hsprtrk;   //!
+   TBranch        *b_hsxfp;   //!
+   TBranch        *b_hsyfp;   //!
+   TBranch        *b_hsxpfp;   //!
+   TBranch        *b_hsypfp;   //!
+   TBranch        *b_hsytar;   //!
+   TBranch        *b_hsxptar;   //!
+   TBranch        *b_hsyptar;   //!
+   TBranch        *b_hstart;   //!
+   TBranch        *b_eventid;   //!
+   TBranch        *b_ev_type;   //!
+   TBranch        *b_gfrx_raw;   //!
+   TBranch        *b_gfry_raw;   //!
+   TBranch        *b_gbeam_x;   //!
+   TBranch        *b_gbeam_y;   //!
+   TBranch        *b_bpma_x;   //!
+   TBranch        *b_bpma_y;   //!
+   TBranch        *b_bpmb_x;   //!
+   TBranch        *b_bpmb_y;   //!
+   TBranch        *b_bpmc_x;   //!
+   TBranch        *b_bpmc_y;   //!
+   TBranch        *b_hseloss;   //!
+   TBranch        *b_hntracks;   //!
+   TBranch        *b_hcal_et;   //!
+   TBranch        *b_hgoodsc;   //!
+   TBranch        *b_hcal_e1;   //!
+   TBranch        *b_hcal_e2;   //!
+   TBranch        *b_hcal_e3;   //!
+   TBranch        *b_hcal_e4;   //!
+   TBranch        *b_hstrk_et;   //!
+   TBranch        *b_hstrk_in;   //!
+
+   engine_class(TTree *tree=0);
+   virtual ~engine_class();
+   virtual Int_t    Cut(Long64_t entry);
+   virtual Int_t    GetEntry(Long64_t entry);
+   virtual Long64_t LoadTree(Long64_t entry);
+   virtual void     Init(TTree *tree);
+   virtual void     Loop();
+   virtual Bool_t   Notify();
+   virtual void     Show(Long64_t entry = -1);
+};
+
+#endif
+
+#ifdef engine_class_cxx
+engine_class::engine_class(TTree *tree) : fChain(0) 
+{
+// if parameter tree is not specified (or zero), connect the file
+// used to generate this class and read the Tree.
+   if (tree == 0) {
+      TFile *f = (TFile*)gROOT->GetListOfFiles()->FindObject("hms52949_rz.root");
+      if (!f || !f->IsOpen()) {
+         f = new TFile("hms52949_rz.root");
+      }
+      f->GetObject("h9010",tree);
+
+   }
+   Init(tree);
+}
+
+engine_class::~engine_class()
+{
+   if (!fChain) return;
+   delete fChain->GetCurrentFile();
+}
+
+Int_t engine_class::GetEntry(Long64_t entry)
+{
+// Read contents of entry.
+   if (!fChain) return 0;
+   return fChain->GetEntry(entry);
+}
+Long64_t engine_class::LoadTree(Long64_t entry)
+{
+// Set the environment to read one entry
+   if (!fChain) return -5;
+   Long64_t centry = fChain->LoadTree(entry);
+   if (centry < 0) return centry;
+   if (fChain->GetTreeNumber() != fCurrent) {
+      fCurrent = fChain->GetTreeNumber();
+      Notify();
+   }
+   return centry;
+}
+
+void engine_class::Init(TTree *tree)
+{
+   // The Init() function is called when the selector needs to initialize
+   // a new tree or chain. Typically here the branch addresses and branch
+   // pointers of the tree will be set.
+   // It is normally not necessary to make changes to the generated
+   // code, but the routine can be extended by the user if needed.
+   // Init() will be called many times when running on PROOF
+   // (once per file to be processed).
+
+   // Set branch addresses and branch pointers
+   if (!tree) return;
+   fChain = tree;
+   fCurrent = -1;
+   fChain->SetMakeClass(1);
+
+   fChain->SetBranchAddress("hcer_npe", &hcer_npe, &b_hcer_npe);
+   fChain->SetBranchAddress("hsp", &hsp, &b_hsp);
+   fChain->SetBranchAddress("hse", &hse, &b_hse);
+   fChain->SetBranchAddress("charge", &charge, &b_charge);
+   fChain->SetBranchAddress("hsdelta", &hsdelta, &b_hsdelta);
+   fChain->SetBranchAddress("hstheta", &hstheta, &b_hstheta);
+   fChain->SetBranchAddress("hsphi", &hsphi, &b_hsphi);
+   fChain->SetBranchAddress("w", &w, &b_w);
+   fChain->SetBranchAddress("hszbeam", &hszbeam, &b_hszbeam);
+   fChain->SetBranchAddress("hsdedx1", &hsdedx1, &b_hsdedx1);
+   fChain->SetBranchAddress("hsbeta", &hsbeta, &b_hsbeta);
+   fChain->SetBranchAddress("hsshtrk", &hsshtrk, &b_hsshtrk);
+   fChain->SetBranchAddress("hsprtrk", &hsprtrk, &b_hsprtrk);
+   fChain->SetBranchAddress("hsxfp", &hsxfp, &b_hsxfp);
+   fChain->SetBranchAddress("hsyfp", &hsyfp, &b_hsyfp);
+   fChain->SetBranchAddress("hsxpfp", &hsxpfp, &b_hsxpfp);
+   fChain->SetBranchAddress("hsypfp", &hsypfp, &b_hsypfp);
+   fChain->SetBranchAddress("hsytar", &hsytar, &b_hsytar);
+   fChain->SetBranchAddress("hsxptar", &hsxptar, &b_hsxptar);
+   fChain->SetBranchAddress("hsyptar", &hsyptar, &b_hsyptar);
+   fChain->SetBranchAddress("hstart", &hstart, &b_hstart);
+   fChain->SetBranchAddress("eventid", &eventid, &b_eventid);
+   fChain->SetBranchAddress("ev_type", &ev_type, &b_ev_type);
+   fChain->SetBranchAddress("gfrx_raw", &gfrx_raw, &b_gfrx_raw);
+   fChain->SetBranchAddress("gfry_raw", &gfry_raw, &b_gfry_raw);
+   fChain->SetBranchAddress("gbeam_x", &gbeam_x, &b_gbeam_x);
+   fChain->SetBranchAddress("gbeam_y", &gbeam_y, &b_gbeam_y);
+   fChain->SetBranchAddress("bpma_x", &bpma_x, &b_bpma_x);
+   fChain->SetBranchAddress("bpma_y", &bpma_y, &b_bpma_y);
+   fChain->SetBranchAddress("bpmb_x", &bpmb_x, &b_bpmb_x);
+   fChain->SetBranchAddress("bpmb_y", &bpmb_y, &b_bpmb_y);
+   fChain->SetBranchAddress("bpmc_x", &bpmc_x, &b_bpmc_x);
+   fChain->SetBranchAddress("bpmc_y", &bpmc_y, &b_bpmc_y);
+   fChain->SetBranchAddress("hseloss", &hseloss, &b_hseloss);
+   fChain->SetBranchAddress("hntracks", &hntracks, &b_hntracks);
+   fChain->SetBranchAddress("hcal_et", &hcal_et, &b_hcal_et);
+   fChain->SetBranchAddress("hgoodsc", &hgoodsc, &b_hgoodsc);
+   fChain->SetBranchAddress("hcal_e1", &hcal_e1, &b_hcal_e1);
+   fChain->SetBranchAddress("hcal_e2", &hcal_e2, &b_hcal_e2);
+   fChain->SetBranchAddress("hcal_e3", &hcal_e3, &b_hcal_e3);
+   fChain->SetBranchAddress("hcal_e4", &hcal_e4, &b_hcal_e4);
+   fChain->SetBranchAddress("hstrk_et", &hstrk_et, &b_hstrk_et);
+   fChain->SetBranchAddress("hstrk_in", &hstrk_in, &b_hstrk_in);
+   Notify();
+}
+
+Bool_t engine_class::Notify()
+{
+   // The Notify() function is called when a new file is opened. This
+   // can be either for a new TTree in a TChain or when when a new TTree
+   // is started when using PROOF. It is normally not necessary to make changes
+   // to the generated code, but the routine can be extended by the
+   // user if needed. The return value is currently not used.
+
+   return kTRUE;
+}
+
+void engine_class::Show(Long64_t entry)
+{
+// Print contents of entry.
+// If entry is not specified, print current entry
+   if (!fChain) return;
+   fChain->Show(entry);
+}
+Int_t engine_class::Cut(Long64_t entry)
+{
+// This function may be called from Loop.
+// returns  1 if entry is accepted.
+// returns -1 otherwise.
+   return 1;
+}
+#endif // #ifdef engine_class_cxx
diff --git a/examples/gtrk_e/hcana_class.C b/examples/gtrk_e/hcana_class.C
new file mode 100644
index 0000000..61a1bfb
--- /dev/null
+++ b/examples/gtrk_e/hcana_class.C
@@ -0,0 +1,43 @@
+#define hcana_class_cxx
+#include "hcana_class.h"
+#include <TH2.h>
+#include <TStyle.h>
+#include <TCanvas.h>
+
+void hcana_class::Loop()
+{
+//   In a ROOT session, you can do:
+//      Root > .L hcana_class.C
+//      Root > hcana_class t
+//      Root > t.GetEntry(12); // Fill t data members with entry number 12
+//      Root > t.Show();       // Show values of entry 12
+//      Root > t.Show(16);     // Read and show values of entry 16
+//      Root > t.Loop();       // Loop on all entries
+//
+
+//     This is the loop skeleton where:
+//    jentry is the global entry number in the chain
+//    ientry is the entry number in the current Tree
+//  Note that the argument to GetEntry must be:
+//    jentry for TChain::GetEntry
+//    ientry for TTree::GetEntry and TBranch::GetEntry
+//
+//       To read only selected branches, Insert statements like:
+// METHOD1:
+//    fChain->SetBranchStatus("*",0);  // disable all branches
+//    fChain->SetBranchStatus("branchname",1);  // activate branchname
+// METHOD2: replace line
+//    fChain->GetEntry(jentry);       //read all branches
+//by  b_branchname->GetEntry(ientry); //read only this branch
+   if (fChain == 0) return;
+
+   Long64_t nentries = fChain->GetEntriesFast();
+
+   Long64_t nbytes = 0, nb = 0;
+   for (Long64_t jentry=0; jentry<nentries;jentry++) {
+      Long64_t ientry = LoadTree(jentry);
+      if (ientry < 0) break;
+      nb = fChain->GetEntry(jentry);   nbytes += nb;
+      // if (Cut(ientry) < 0) continue;
+   }
+}
diff --git a/examples/gtrk_e/hcana_class.h b/examples/gtrk_e/hcana_class.h
new file mode 100644
index 0000000..ba63e9c
--- /dev/null
+++ b/examples/gtrk_e/hcana_class.h
@@ -0,0 +1,684 @@
+//////////////////////////////////////////////////////////
+// This class has been automatically generated on
+// Tue Oct  7 08:29:09 2014 by ROOT version 5.34/06
+// from TTree T/Hall A Analyzer Output DST
+// found on file: hodtest_52949.root
+//////////////////////////////////////////////////////////
+
+#ifndef hcana_class_h
+#define hcana_class_h
+
+#include <TROOT.h>
+#include <TChain.h>
+#include <TFile.h>
+
+// Header file for the classes stored in the TTree if any.
+#include "./podd/src/THaEvent.h"
+#include "./podd/src/THaEvent.h"
+
+// Fixed size dimensions of array or collections stored in the TTree if any.
+
+class hcana_class {
+public :
+   TTree          *fChain;   //!pointer to the analyzed TTree or TChain
+   Int_t           fCurrent; //!current Tree number in a TChain
+
+   // Declaration of leaf types
+   Int_t           Ndata_H_cal_1pr_aneg;
+   Double_t        H_cal_1pr_aneg[13];   //[Ndata.H.cal.1pr.aneg]
+   Int_t           Ndata_H_cal_1pr_aneg_p;
+   Double_t        H_cal_1pr_aneg_p[13];   //[Ndata.H.cal.1pr.aneg_p]
+   Int_t           Ndata_H_cal_1pr_apos;
+   Double_t        H_cal_1pr_apos[13];   //[Ndata.H.cal.1pr.apos]
+   Int_t           Ndata_H_cal_1pr_apos_p;
+   Double_t        H_cal_1pr_apos_p[13];   //[Ndata.H.cal.1pr.apos_p]
+   Int_t           Ndata_H_cal_1pr_emean;
+   Double_t        H_cal_1pr_emean[13];   //[Ndata.H.cal.1pr.emean]
+   Int_t           Ndata_H_cal_1pr_eneg;
+   Double_t        H_cal_1pr_eneg[13];   //[Ndata.H.cal.1pr.eneg]
+   Int_t           Ndata_H_cal_1pr_epos;
+   Double_t        H_cal_1pr_epos[13];   //[Ndata.H.cal.1pr.epos]
+   Int_t           Ndata_H_cal_1pr_negadchits;
+   Double_t        H_cal_1pr_negadchits[9];   //[Ndata.H.cal.1pr.negadchits]
+   Int_t           Ndata_H_cal_1pr_posadchits;
+   Double_t        H_cal_1pr_posadchits[8];   //[Ndata.H.cal.1pr.posadchits]
+   Int_t           Ndata_H_cal_2ta_aneg;
+   Double_t        H_cal_2ta_aneg[13];   //[Ndata.H.cal.2ta.aneg]
+   Int_t           Ndata_H_cal_2ta_aneg_p;
+   Double_t        H_cal_2ta_aneg_p[13];   //[Ndata.H.cal.2ta.aneg_p]
+   Int_t           Ndata_H_cal_2ta_apos;
+   Double_t        H_cal_2ta_apos[13];   //[Ndata.H.cal.2ta.apos]
+   Int_t           Ndata_H_cal_2ta_apos_p;
+   Double_t        H_cal_2ta_apos_p[13];   //[Ndata.H.cal.2ta.apos_p]
+   Int_t           Ndata_H_cal_2ta_emean;
+   Double_t        H_cal_2ta_emean[13];   //[Ndata.H.cal.2ta.emean]
+   Int_t           Ndata_H_cal_2ta_eneg;
+   Double_t        H_cal_2ta_eneg[13];   //[Ndata.H.cal.2ta.eneg]
+   Int_t           Ndata_H_cal_2ta_epos;
+   Double_t        H_cal_2ta_epos[13];   //[Ndata.H.cal.2ta.epos]
+   Int_t           Ndata_H_cal_2ta_negadchits;
+   Double_t        H_cal_2ta_negadchits[8];   //[Ndata.H.cal.2ta.negadchits]
+   Int_t           Ndata_H_cal_2ta_posadchits;
+   Double_t        H_cal_2ta_posadchits[7];   //[Ndata.H.cal.2ta.posadchits]
+   Int_t           Ndata_H_cal_3ta_aneg;
+   Double_t        H_cal_3ta_aneg[13];   //[Ndata.H.cal.3ta.aneg]
+   Int_t           Ndata_H_cal_3ta_aneg_p;
+   Double_t        H_cal_3ta_aneg_p[13];   //[Ndata.H.cal.3ta.aneg_p]
+   Int_t           Ndata_H_cal_3ta_apos;
+   Double_t        H_cal_3ta_apos[13];   //[Ndata.H.cal.3ta.apos]
+   Int_t           Ndata_H_cal_3ta_apos_p;
+   Double_t        H_cal_3ta_apos_p[13];   //[Ndata.H.cal.3ta.apos_p]
+   Int_t           Ndata_H_cal_3ta_emean;
+   Double_t        H_cal_3ta_emean[13];   //[Ndata.H.cal.3ta.emean]
+   Int_t           Ndata_H_cal_3ta_eneg;
+   Double_t        H_cal_3ta_eneg[13];   //[Ndata.H.cal.3ta.eneg]
+   Int_t           Ndata_H_cal_3ta_epos;
+   Double_t        H_cal_3ta_epos[13];   //[Ndata.H.cal.3ta.epos]
+   Int_t           Ndata_H_cal_3ta_negadchits;
+   Double_t        H_cal_3ta_negadchits[1];   //[Ndata.H.cal.3ta.negadchits]
+   Int_t           Ndata_H_cal_3ta_posadchits;
+   Double_t        H_cal_3ta_posadchits[6];   //[Ndata.H.cal.3ta.posadchits]
+   Int_t           Ndata_H_cal_4ta_aneg;
+   Double_t        H_cal_4ta_aneg[13];   //[Ndata.H.cal.4ta.aneg]
+   Int_t           Ndata_H_cal_4ta_aneg_p;
+   Double_t        H_cal_4ta_aneg_p[13];   //[Ndata.H.cal.4ta.aneg_p]
+   Int_t           Ndata_H_cal_4ta_apos;
+   Double_t        H_cal_4ta_apos[13];   //[Ndata.H.cal.4ta.apos]
+   Int_t           Ndata_H_cal_4ta_apos_p;
+   Double_t        H_cal_4ta_apos_p[13];   //[Ndata.H.cal.4ta.apos_p]
+   Int_t           Ndata_H_cal_4ta_emean;
+   Double_t        H_cal_4ta_emean[13];   //[Ndata.H.cal.4ta.emean]
+   Int_t           Ndata_H_cal_4ta_eneg;
+   Double_t        H_cal_4ta_eneg[13];   //[Ndata.H.cal.4ta.eneg]
+   Int_t           Ndata_H_cal_4ta_epos;
+   Double_t        H_cal_4ta_epos[13];   //[Ndata.H.cal.4ta.epos]
+   Int_t           Ndata_H_cal_4ta_negadchits;
+   Double_t        H_cal_4ta_negadchits[1];   //[Ndata.H.cal.4ta.negadchits]
+   Int_t           Ndata_H_cal_4ta_posadchits;
+   Double_t        H_cal_4ta_posadchits[5];   //[Ndata.H.cal.4ta.posadchits]
+   Int_t           Ndata_H_tr_beta;
+   Double_t        H_tr_beta[10];   //[Ndata.H.tr.beta]
+   Int_t           Ndata_H_tr_chi2;
+   Double_t        H_tr_chi2[10];   //[Ndata.H.tr.chi2]
+   Int_t           Ndata_H_tr_d_ph;
+   Double_t        H_tr_d_ph[10];   //[Ndata.H.tr.d_ph]
+   Int_t           Ndata_H_tr_d_th;
+   Double_t        H_tr_d_th[10];   //[Ndata.H.tr.d_th]
+   Int_t           Ndata_H_tr_d_x;
+   Double_t        H_tr_d_x[10];   //[Ndata.H.tr.d_x]
+   Int_t           Ndata_H_tr_d_y;
+   Double_t        H_tr_d_y[10];   //[Ndata.H.tr.d_y]
+   Int_t           Ndata_H_tr_dbeta;
+   Double_t        H_tr_dbeta[10];   //[Ndata.H.tr.dbeta]
+   Int_t           Ndata_H_tr_dtime;
+   Double_t        H_tr_dtime[10];   //[Ndata.H.tr.dtime]
+   Int_t           Ndata_H_tr_flag;
+   Double_t        H_tr_flag[10];   //[Ndata.H.tr.flag]
+   Int_t           Ndata_H_tr_ndof;
+   Double_t        H_tr_ndof[10];   //[Ndata.H.tr.ndof]
+   Int_t           Ndata_H_tr_p;
+   Double_t        H_tr_p[10];   //[Ndata.H.tr.p]
+   Int_t           Ndata_H_tr_pathl;
+   Double_t        H_tr_pathl[10];   //[Ndata.H.tr.pathl]
+   Int_t           Ndata_H_tr_ph;
+   Double_t        H_tr_ph[10];   //[Ndata.H.tr.ph]
+   Int_t           Ndata_H_tr_px;
+   Double_t        H_tr_px[10];   //[Ndata.H.tr.px]
+   Int_t           Ndata_H_tr_py;
+   Double_t        H_tr_py[10];   //[Ndata.H.tr.py]
+   Int_t           Ndata_H_tr_pz;
+   Double_t        H_tr_pz[10];   //[Ndata.H.tr.pz]
+   Int_t           Ndata_H_tr_r_ph;
+   Double_t        H_tr_r_ph[10];   //[Ndata.H.tr.r_ph]
+   Int_t           Ndata_H_tr_r_th;
+   Double_t        H_tr_r_th[10];   //[Ndata.H.tr.r_th]
+   Int_t           Ndata_H_tr_r_x;
+   Double_t        H_tr_r_x[10];   //[Ndata.H.tr.r_x]
+   Int_t           Ndata_H_tr_r_y;
+   Double_t        H_tr_r_y[10];   //[Ndata.H.tr.r_y]
+   Int_t           Ndata_H_tr_tg_dp;
+   Double_t        H_tr_tg_dp[10];   //[Ndata.H.tr.tg_dp]
+   Int_t           Ndata_H_tr_tg_ph;
+   Double_t        H_tr_tg_ph[10];   //[Ndata.H.tr.tg_ph]
+   Int_t           Ndata_H_tr_tg_th;
+   Double_t        H_tr_tg_th[10];   //[Ndata.H.tr.tg_th]
+   Int_t           Ndata_H_tr_tg_y;
+   Double_t        H_tr_tg_y[10];   //[Ndata.H.tr.tg_y]
+   Int_t           Ndata_H_tr_th;
+   Double_t        H_tr_th[10];   //[Ndata.H.tr.th]
+   Int_t           Ndata_H_tr_time;
+   Double_t        H_tr_time[10];   //[Ndata.H.tr.time]
+   Int_t           Ndata_H_tr_vx;
+   Double_t        H_tr_vx[10];   //[Ndata.H.tr.vx]
+   Int_t           Ndata_H_tr_vy;
+   Double_t        H_tr_vy[10];   //[Ndata.H.tr.vy]
+   Int_t           Ndata_H_tr_vz;
+   Double_t        H_tr_vz[10];   //[Ndata.H.tr.vz]
+   Int_t           Ndata_H_tr_x;
+   Double_t        H_tr_x[10];   //[Ndata.H.tr.x]
+   Int_t           Ndata_H_tr_y;
+   Double_t        H_tr_y[10];   //[Ndata.H.tr.y]
+   Double_t        H_cal_1pr_eplane;
+   Double_t        H_cal_1pr_eplane_neg;
+   Double_t        H_cal_1pr_eplane_pos;
+   Double_t        H_cal_2ta_eplane;
+   Double_t        H_cal_2ta_eplane_neg;
+   Double_t        H_cal_2ta_eplane_pos;
+   Double_t        H_cal_3ta_eplane;
+   Double_t        H_cal_3ta_eplane_neg;
+   Double_t        H_cal_3ta_eplane_pos;
+   Double_t        H_cal_4ta_eplane;
+   Double_t        H_cal_4ta_eplane_neg;
+   Double_t        H_cal_4ta_eplane_pos;
+   Double_t        H_cal_emax;
+   Double_t        H_cal_eprmax;
+   Double_t        H_cal_mult;
+   Double_t        H_cal_nclust;
+   Double_t        H_cal_nhits;
+   Double_t        H_cal_ntracks;
+   Double_t        H_cal_tre;
+   Double_t        H_cal_trecor;
+   Double_t        H_cal_treplcor;
+   Double_t        H_cal_trepr;
+   Double_t        H_cal_treprcor;
+   Double_t        H_cal_trx;
+   Double_t        H_cal_try;
+   Double_t        H_cal_xmax;
+   Double_t        H_gold_dp;
+   Double_t        H_gold_e;
+   Double_t        H_gold_fp_ph;
+   Double_t        H_gold_fp_th;
+   Double_t        H_gold_fp_x;
+   Double_t        H_gold_fp_y;
+   Double_t        H_gold_index;
+   Double_t        H_gold_ok;
+   Double_t        H_gold_p;
+   Double_t        H_gold_ph;
+   Double_t        H_gold_px;
+   Double_t        H_gold_py;
+   Double_t        H_gold_pz;
+   Double_t        H_gold_th;
+   Double_t        H_gold_x;
+   Double_t        H_gold_y;
+   Double_t        H_tr_n;
+   Double_t        g_evtyp;
+ //THaEvent        *Event_Branch;
+   ULong64_t       fEvtHdr_fEvtTime;
+   UInt_t          fEvtHdr_fEvtNum;
+   Int_t           fEvtHdr_fEvtType;
+   Int_t           fEvtHdr_fEvtLen;
+   Int_t           fEvtHdr_fHelicity;
+   Int_t           fEvtHdr_fTargetPol;
+   Int_t           fEvtHdr_fRun;
+
+   // List of branches
+   TBranch        *b_Ndata_H_cal_1pr_aneg;   //!
+   TBranch        *b_H_cal_1pr_aneg;   //!
+   TBranch        *b_Ndata_H_cal_1pr_aneg_p;   //!
+   TBranch        *b_H_cal_1pr_aneg_p;   //!
+   TBranch        *b_Ndata_H_cal_1pr_apos;   //!
+   TBranch        *b_H_cal_1pr_apos;   //!
+   TBranch        *b_Ndata_H_cal_1pr_apos_p;   //!
+   TBranch        *b_H_cal_1pr_apos_p;   //!
+   TBranch        *b_Ndata_H_cal_1pr_emean;   //!
+   TBranch        *b_H_cal_1pr_emean;   //!
+   TBranch        *b_Ndata_H_cal_1pr_eneg;   //!
+   TBranch        *b_H_cal_1pr_eneg;   //!
+   TBranch        *b_Ndata_H_cal_1pr_epos;   //!
+   TBranch        *b_H_cal_1pr_epos;   //!
+   TBranch        *b_Ndata_H_cal_1pr_negadchits;   //!
+   TBranch        *b_H_cal_1pr_negadchits;   //!
+   TBranch        *b_Ndata_H_cal_1pr_posadchits;   //!
+   TBranch        *b_H_cal_1pr_posadchits;   //!
+   TBranch        *b_Ndata_H_cal_2ta_aneg;   //!
+   TBranch        *b_H_cal_2ta_aneg;   //!
+   TBranch        *b_Ndata_H_cal_2ta_aneg_p;   //!
+   TBranch        *b_H_cal_2ta_aneg_p;   //!
+   TBranch        *b_Ndata_H_cal_2ta_apos;   //!
+   TBranch        *b_H_cal_2ta_apos;   //!
+   TBranch        *b_Ndata_H_cal_2ta_apos_p;   //!
+   TBranch        *b_H_cal_2ta_apos_p;   //!
+   TBranch        *b_Ndata_H_cal_2ta_emean;   //!
+   TBranch        *b_H_cal_2ta_emean;   //!
+   TBranch        *b_Ndata_H_cal_2ta_eneg;   //!
+   TBranch        *b_H_cal_2ta_eneg;   //!
+   TBranch        *b_Ndata_H_cal_2ta_epos;   //!
+   TBranch        *b_H_cal_2ta_epos;   //!
+   TBranch        *b_Ndata_H_cal_2ta_negadchits;   //!
+   TBranch        *b_H_cal_2ta_negadchits;   //!
+   TBranch        *b_Ndata_H_cal_2ta_posadchits;   //!
+   TBranch        *b_H_cal_2ta_posadchits;   //!
+   TBranch        *b_Ndata_H_cal_3ta_aneg;   //!
+   TBranch        *b_H_cal_3ta_aneg;   //!
+   TBranch        *b_Ndata_H_cal_3ta_aneg_p;   //!
+   TBranch        *b_H_cal_3ta_aneg_p;   //!
+   TBranch        *b_Ndata_H_cal_3ta_apos;   //!
+   TBranch        *b_H_cal_3ta_apos;   //!
+   TBranch        *b_Ndata_H_cal_3ta_apos_p;   //!
+   TBranch        *b_H_cal_3ta_apos_p;   //!
+   TBranch        *b_Ndata_H_cal_3ta_emean;   //!
+   TBranch        *b_H_cal_3ta_emean;   //!
+   TBranch        *b_Ndata_H_cal_3ta_eneg;   //!
+   TBranch        *b_H_cal_3ta_eneg;   //!
+   TBranch        *b_Ndata_H_cal_3ta_epos;   //!
+   TBranch        *b_H_cal_3ta_epos;   //!
+   TBranch        *b_Ndata_H_cal_3ta_negadchits;   //!
+   TBranch        *b_H_cal_3ta_negadchits;   //!
+   TBranch        *b_Ndata_H_cal_3ta_posadchits;   //!
+   TBranch        *b_H_cal_3ta_posadchits;   //!
+   TBranch        *b_Ndata_H_cal_4ta_aneg;   //!
+   TBranch        *b_H_cal_4ta_aneg;   //!
+   TBranch        *b_Ndata_H_cal_4ta_aneg_p;   //!
+   TBranch        *b_H_cal_4ta_aneg_p;   //!
+   TBranch        *b_Ndata_H_cal_4ta_apos;   //!
+   TBranch        *b_H_cal_4ta_apos;   //!
+   TBranch        *b_Ndata_H_cal_4ta_apos_p;   //!
+   TBranch        *b_H_cal_4ta_apos_p;   //!
+   TBranch        *b_Ndata_H_cal_4ta_emean;   //!
+   TBranch        *b_H_cal_4ta_emean;   //!
+   TBranch        *b_Ndata_H_cal_4ta_eneg;   //!
+   TBranch        *b_H_cal_4ta_eneg;   //!
+   TBranch        *b_Ndata_H_cal_4ta_epos;   //!
+   TBranch        *b_H_cal_4ta_epos;   //!
+   TBranch        *b_Ndata_H_cal_4ta_negadchits;   //!
+   TBranch        *b_H_cal_4ta_negadchits;   //!
+   TBranch        *b_Ndata_H_cal_4ta_posadchits;   //!
+   TBranch        *b_H_cal_4ta_posadchits;   //!
+   TBranch        *b_Ndata_H_tr_beta;   //!
+   TBranch        *b_H_tr_beta;   //!
+   TBranch        *b_Ndata_H_tr_chi2;   //!
+   TBranch        *b_H_tr_chi2;   //!
+   TBranch        *b_Ndata_H_tr_d_ph;   //!
+   TBranch        *b_H_tr_d_ph;   //!
+   TBranch        *b_Ndata_H_tr_d_th;   //!
+   TBranch        *b_H_tr_d_th;   //!
+   TBranch        *b_Ndata_H_tr_d_x;   //!
+   TBranch        *b_H_tr_d_x;   //!
+   TBranch        *b_Ndata_H_tr_d_y;   //!
+   TBranch        *b_H_tr_d_y;   //!
+   TBranch        *b_Ndata_H_tr_dbeta;   //!
+   TBranch        *b_H_tr_dbeta;   //!
+   TBranch        *b_Ndata_H_tr_dtime;   //!
+   TBranch        *b_H_tr_dtime;   //!
+   TBranch        *b_Ndata_H_tr_flag;   //!
+   TBranch        *b_H_tr_flag;   //!
+   TBranch        *b_Ndata_H_tr_ndof;   //!
+   TBranch        *b_H_tr_ndof;   //!
+   TBranch        *b_Ndata_H_tr_p;   //!
+   TBranch        *b_H_tr_p;   //!
+   TBranch        *b_Ndata_H_tr_pathl;   //!
+   TBranch        *b_H_tr_pathl;   //!
+   TBranch        *b_Ndata_H_tr_ph;   //!
+   TBranch        *b_H_tr_ph;   //!
+   TBranch        *b_Ndata_H_tr_px;   //!
+   TBranch        *b_H_tr_px;   //!
+   TBranch        *b_Ndata_H_tr_py;   //!
+   TBranch        *b_H_tr_py;   //!
+   TBranch        *b_Ndata_H_tr_pz;   //!
+   TBranch        *b_H_tr_pz;   //!
+   TBranch        *b_Ndata_H_tr_r_ph;   //!
+   TBranch        *b_H_tr_r_ph;   //!
+   TBranch        *b_Ndata_H_tr_r_th;   //!
+   TBranch        *b_H_tr_r_th;   //!
+   TBranch        *b_Ndata_H_tr_r_x;   //!
+   TBranch        *b_H_tr_r_x;   //!
+   TBranch        *b_Ndata_H_tr_r_y;   //!
+   TBranch        *b_H_tr_r_y;   //!
+   TBranch        *b_Ndata_H_tr_tg_dp;   //!
+   TBranch        *b_H_tr_tg_dp;   //!
+   TBranch        *b_Ndata_H_tr_tg_ph;   //!
+   TBranch        *b_H_tr_tg_ph;   //!
+   TBranch        *b_Ndata_H_tr_tg_th;   //!
+   TBranch        *b_H_tr_tg_th;   //!
+   TBranch        *b_Ndata_H_tr_tg_y;   //!
+   TBranch        *b_H_tr_tg_y;   //!
+   TBranch        *b_Ndata_H_tr_th;   //!
+   TBranch        *b_H_tr_th;   //!
+   TBranch        *b_Ndata_H_tr_time;   //!
+   TBranch        *b_H_tr_time;   //!
+   TBranch        *b_Ndata_H_tr_vx;   //!
+   TBranch        *b_H_tr_vx;   //!
+   TBranch        *b_Ndata_H_tr_vy;   //!
+   TBranch        *b_H_tr_vy;   //!
+   TBranch        *b_Ndata_H_tr_vz;   //!
+   TBranch        *b_H_tr_vz;   //!
+   TBranch        *b_Ndata_H_tr_x;   //!
+   TBranch        *b_H_tr_x;   //!
+   TBranch        *b_Ndata_H_tr_y;   //!
+   TBranch        *b_H_tr_y;   //!
+   TBranch        *b_H_cal_1pr_eplane;   //!
+   TBranch        *b_H_cal_1pr_eplane_neg;   //!
+   TBranch        *b_H_cal_1pr_eplane_pos;   //!
+   TBranch        *b_H_cal_2ta_eplane;   //!
+   TBranch        *b_H_cal_2ta_eplane_neg;   //!
+   TBranch        *b_H_cal_2ta_eplane_pos;   //!
+   TBranch        *b_H_cal_3ta_eplane;   //!
+   TBranch        *b_H_cal_3ta_eplane_neg;   //!
+   TBranch        *b_H_cal_3ta_eplane_pos;   //!
+   TBranch        *b_H_cal_4ta_eplane;   //!
+   TBranch        *b_H_cal_4ta_eplane_neg;   //!
+   TBranch        *b_H_cal_4ta_eplane_pos;   //!
+   TBranch        *b_H_cal_emax;   //!
+   TBranch        *b_H_cal_eprmax;   //!
+   TBranch        *b_H_cal_mult;   //!
+   TBranch        *b_H_cal_nclust;   //!
+   TBranch        *b_H_cal_nhits;   //!
+   TBranch        *b_H_cal_ntracks;   //!
+   TBranch        *b_H_cal_tre;   //!
+   TBranch        *b_H_cal_trecor;   //!
+   TBranch        *b_H_cal_treplcor;   //!
+   TBranch        *b_H_cal_trepr;   //!
+   TBranch        *b_H_cal_treprcor;   //!
+   TBranch        *b_H_cal_trx;   //!
+   TBranch        *b_H_cal_try;   //!
+   TBranch        *b_H_cal_xmax;   //!
+   TBranch        *b_H_gold_dp;   //!
+   TBranch        *b_H_gold_e;   //!
+   TBranch        *b_H_gold_fp_ph;   //!
+   TBranch        *b_H_gold_fp_th;   //!
+   TBranch        *b_H_gold_fp_x;   //!
+   TBranch        *b_H_gold_fp_y;   //!
+   TBranch        *b_H_gold_index;   //!
+   TBranch        *b_H_gold_ok;   //!
+   TBranch        *b_H_gold_p;   //!
+   TBranch        *b_H_gold_ph;   //!
+   TBranch        *b_H_gold_px;   //!
+   TBranch        *b_H_gold_py;   //!
+   TBranch        *b_H_gold_pz;   //!
+   TBranch        *b_H_gold_th;   //!
+   TBranch        *b_H_gold_x;   //!
+   TBranch        *b_H_gold_y;   //!
+   TBranch        *b_H_tr_n;   //!
+   TBranch        *b_g_evtyp;   //!
+   TBranch        *b_Event_Branch_fEvtHdr_fEvtTime;   //!
+   TBranch        *b_Event_Branch_fEvtHdr_fEvtNum;   //!
+   TBranch        *b_Event_Branch_fEvtHdr_fEvtType;   //!
+   TBranch        *b_Event_Branch_fEvtHdr_fEvtLen;   //!
+   TBranch        *b_Event_Branch_fEvtHdr_fHelicity;   //!
+   TBranch        *b_Event_Branch_fEvtHdr_fTargetPol;   //!
+   TBranch        *b_Event_Branch_fEvtHdr_fRun;   //!
+
+   hcana_class(TTree *tree=0);
+   virtual ~hcana_class();
+   virtual Int_t    Cut(Long64_t entry);
+   virtual Int_t    GetEntry(Long64_t entry);
+   virtual Long64_t LoadTree(Long64_t entry);
+   virtual void     Init(TTree *tree);
+   virtual void     Loop();
+   virtual Bool_t   Notify();
+   virtual void     Show(Long64_t entry = -1);
+};
+
+#endif
+
+#ifdef hcana_class_cxx
+hcana_class::hcana_class(TTree *tree) : fChain(0) 
+{
+// if parameter tree is not specified (or zero), connect the file
+// used to generate this class and read the Tree.
+   if (tree == 0) {
+      TFile *f = (TFile*)gROOT->GetListOfFiles()->FindObject("hodtest_52949.root");
+      if (!f || !f->IsOpen()) {
+         f = new TFile("hodtest_52949.root");
+      }
+      f->GetObject("T",tree);
+
+   }
+   Init(tree);
+}
+
+hcana_class::~hcana_class()
+{
+   if (!fChain) return;
+   delete fChain->GetCurrentFile();
+}
+
+Int_t hcana_class::GetEntry(Long64_t entry)
+{
+// Read contents of entry.
+   if (!fChain) return 0;
+   return fChain->GetEntry(entry);
+}
+Long64_t hcana_class::LoadTree(Long64_t entry)
+{
+// Set the environment to read one entry
+   if (!fChain) return -5;
+   Long64_t centry = fChain->LoadTree(entry);
+   if (centry < 0) return centry;
+   if (fChain->GetTreeNumber() != fCurrent) {
+      fCurrent = fChain->GetTreeNumber();
+      Notify();
+   }
+   return centry;
+}
+
+void hcana_class::Init(TTree *tree)
+{
+   // The Init() function is called when the selector needs to initialize
+   // a new tree or chain. Typically here the branch addresses and branch
+   // pointers of the tree will be set.
+   // It is normally not necessary to make changes to the generated
+   // code, but the routine can be extended by the user if needed.
+   // Init() will be called many times when running on PROOF
+   // (once per file to be processed).
+
+   // Set branch addresses and branch pointers
+   if (!tree) return;
+   fChain = tree;
+   fCurrent = -1;
+   fChain->SetMakeClass(1);
+
+   fChain->SetBranchAddress("Ndata.H.cal.1pr.aneg", &Ndata_H_cal_1pr_aneg, &b_Ndata_H_cal_1pr_aneg);
+   fChain->SetBranchAddress("H.cal.1pr.aneg", H_cal_1pr_aneg, &b_H_cal_1pr_aneg);
+   fChain->SetBranchAddress("Ndata.H.cal.1pr.aneg_p", &Ndata_H_cal_1pr_aneg_p, &b_Ndata_H_cal_1pr_aneg_p);
+   fChain->SetBranchAddress("H.cal.1pr.aneg_p", H_cal_1pr_aneg_p, &b_H_cal_1pr_aneg_p);
+   fChain->SetBranchAddress("Ndata.H.cal.1pr.apos", &Ndata_H_cal_1pr_apos, &b_Ndata_H_cal_1pr_apos);
+   fChain->SetBranchAddress("H.cal.1pr.apos", H_cal_1pr_apos, &b_H_cal_1pr_apos);
+   fChain->SetBranchAddress("Ndata.H.cal.1pr.apos_p", &Ndata_H_cal_1pr_apos_p, &b_Ndata_H_cal_1pr_apos_p);
+   fChain->SetBranchAddress("H.cal.1pr.apos_p", H_cal_1pr_apos_p, &b_H_cal_1pr_apos_p);
+   fChain->SetBranchAddress("Ndata.H.cal.1pr.emean", &Ndata_H_cal_1pr_emean, &b_Ndata_H_cal_1pr_emean);
+   fChain->SetBranchAddress("H.cal.1pr.emean", H_cal_1pr_emean, &b_H_cal_1pr_emean);
+   fChain->SetBranchAddress("Ndata.H.cal.1pr.eneg", &Ndata_H_cal_1pr_eneg, &b_Ndata_H_cal_1pr_eneg);
+   fChain->SetBranchAddress("H.cal.1pr.eneg", H_cal_1pr_eneg, &b_H_cal_1pr_eneg);
+   fChain->SetBranchAddress("Ndata.H.cal.1pr.epos", &Ndata_H_cal_1pr_epos, &b_Ndata_H_cal_1pr_epos);
+   fChain->SetBranchAddress("H.cal.1pr.epos", H_cal_1pr_epos, &b_H_cal_1pr_epos);
+   fChain->SetBranchAddress("Ndata.H.cal.1pr.negadchits", &Ndata_H_cal_1pr_negadchits, &b_Ndata_H_cal_1pr_negadchits);
+   fChain->SetBranchAddress("H.cal.1pr.negadchits", H_cal_1pr_negadchits, &b_H_cal_1pr_negadchits);
+   fChain->SetBranchAddress("Ndata.H.cal.1pr.posadchits", &Ndata_H_cal_1pr_posadchits, &b_Ndata_H_cal_1pr_posadchits);
+   fChain->SetBranchAddress("H.cal.1pr.posadchits", H_cal_1pr_posadchits, &b_H_cal_1pr_posadchits);
+   fChain->SetBranchAddress("Ndata.H.cal.2ta.aneg", &Ndata_H_cal_2ta_aneg, &b_Ndata_H_cal_2ta_aneg);
+   fChain->SetBranchAddress("H.cal.2ta.aneg", H_cal_2ta_aneg, &b_H_cal_2ta_aneg);
+   fChain->SetBranchAddress("Ndata.H.cal.2ta.aneg_p", &Ndata_H_cal_2ta_aneg_p, &b_Ndata_H_cal_2ta_aneg_p);
+   fChain->SetBranchAddress("H.cal.2ta.aneg_p", H_cal_2ta_aneg_p, &b_H_cal_2ta_aneg_p);
+   fChain->SetBranchAddress("Ndata.H.cal.2ta.apos", &Ndata_H_cal_2ta_apos, &b_Ndata_H_cal_2ta_apos);
+   fChain->SetBranchAddress("H.cal.2ta.apos", H_cal_2ta_apos, &b_H_cal_2ta_apos);
+   fChain->SetBranchAddress("Ndata.H.cal.2ta.apos_p", &Ndata_H_cal_2ta_apos_p, &b_Ndata_H_cal_2ta_apos_p);
+   fChain->SetBranchAddress("H.cal.2ta.apos_p", H_cal_2ta_apos_p, &b_H_cal_2ta_apos_p);
+   fChain->SetBranchAddress("Ndata.H.cal.2ta.emean", &Ndata_H_cal_2ta_emean, &b_Ndata_H_cal_2ta_emean);
+   fChain->SetBranchAddress("H.cal.2ta.emean", H_cal_2ta_emean, &b_H_cal_2ta_emean);
+   fChain->SetBranchAddress("Ndata.H.cal.2ta.eneg", &Ndata_H_cal_2ta_eneg, &b_Ndata_H_cal_2ta_eneg);
+   fChain->SetBranchAddress("H.cal.2ta.eneg", H_cal_2ta_eneg, &b_H_cal_2ta_eneg);
+   fChain->SetBranchAddress("Ndata.H.cal.2ta.epos", &Ndata_H_cal_2ta_epos, &b_Ndata_H_cal_2ta_epos);
+   fChain->SetBranchAddress("H.cal.2ta.epos", H_cal_2ta_epos, &b_H_cal_2ta_epos);
+   fChain->SetBranchAddress("Ndata.H.cal.2ta.negadchits", &Ndata_H_cal_2ta_negadchits, &b_Ndata_H_cal_2ta_negadchits);
+   fChain->SetBranchAddress("H.cal.2ta.negadchits", H_cal_2ta_negadchits, &b_H_cal_2ta_negadchits);
+   fChain->SetBranchAddress("Ndata.H.cal.2ta.posadchits", &Ndata_H_cal_2ta_posadchits, &b_Ndata_H_cal_2ta_posadchits);
+   fChain->SetBranchAddress("H.cal.2ta.posadchits", H_cal_2ta_posadchits, &b_H_cal_2ta_posadchits);
+   fChain->SetBranchAddress("Ndata.H.cal.3ta.aneg", &Ndata_H_cal_3ta_aneg, &b_Ndata_H_cal_3ta_aneg);
+   fChain->SetBranchAddress("H.cal.3ta.aneg", H_cal_3ta_aneg, &b_H_cal_3ta_aneg);
+   fChain->SetBranchAddress("Ndata.H.cal.3ta.aneg_p", &Ndata_H_cal_3ta_aneg_p, &b_Ndata_H_cal_3ta_aneg_p);
+   fChain->SetBranchAddress("H.cal.3ta.aneg_p", H_cal_3ta_aneg_p, &b_H_cal_3ta_aneg_p);
+   fChain->SetBranchAddress("Ndata.H.cal.3ta.apos", &Ndata_H_cal_3ta_apos, &b_Ndata_H_cal_3ta_apos);
+   fChain->SetBranchAddress("H.cal.3ta.apos", H_cal_3ta_apos, &b_H_cal_3ta_apos);
+   fChain->SetBranchAddress("Ndata.H.cal.3ta.apos_p", &Ndata_H_cal_3ta_apos_p, &b_Ndata_H_cal_3ta_apos_p);
+   fChain->SetBranchAddress("H.cal.3ta.apos_p", H_cal_3ta_apos_p, &b_H_cal_3ta_apos_p);
+   fChain->SetBranchAddress("Ndata.H.cal.3ta.emean", &Ndata_H_cal_3ta_emean, &b_Ndata_H_cal_3ta_emean);
+   fChain->SetBranchAddress("H.cal.3ta.emean", H_cal_3ta_emean, &b_H_cal_3ta_emean);
+   fChain->SetBranchAddress("Ndata.H.cal.3ta.eneg", &Ndata_H_cal_3ta_eneg, &b_Ndata_H_cal_3ta_eneg);
+   fChain->SetBranchAddress("H.cal.3ta.eneg", H_cal_3ta_eneg, &b_H_cal_3ta_eneg);
+   fChain->SetBranchAddress("Ndata.H.cal.3ta.epos", &Ndata_H_cal_3ta_epos, &b_Ndata_H_cal_3ta_epos);
+   fChain->SetBranchAddress("H.cal.3ta.epos", H_cal_3ta_epos, &b_H_cal_3ta_epos);
+   fChain->SetBranchAddress("Ndata.H.cal.3ta.negadchits", &Ndata_H_cal_3ta_negadchits, &b_Ndata_H_cal_3ta_negadchits);
+   fChain->SetBranchAddress("H.cal.3ta.negadchits", &H_cal_3ta_negadchits, &b_H_cal_3ta_negadchits);
+   fChain->SetBranchAddress("Ndata.H.cal.3ta.posadchits", &Ndata_H_cal_3ta_posadchits, &b_Ndata_H_cal_3ta_posadchits);
+   fChain->SetBranchAddress("H.cal.3ta.posadchits", H_cal_3ta_posadchits, &b_H_cal_3ta_posadchits);
+   fChain->SetBranchAddress("Ndata.H.cal.4ta.aneg", &Ndata_H_cal_4ta_aneg, &b_Ndata_H_cal_4ta_aneg);
+   fChain->SetBranchAddress("H.cal.4ta.aneg", H_cal_4ta_aneg, &b_H_cal_4ta_aneg);
+   fChain->SetBranchAddress("Ndata.H.cal.4ta.aneg_p", &Ndata_H_cal_4ta_aneg_p, &b_Ndata_H_cal_4ta_aneg_p);
+   fChain->SetBranchAddress("H.cal.4ta.aneg_p", H_cal_4ta_aneg_p, &b_H_cal_4ta_aneg_p);
+   fChain->SetBranchAddress("Ndata.H.cal.4ta.apos", &Ndata_H_cal_4ta_apos, &b_Ndata_H_cal_4ta_apos);
+   fChain->SetBranchAddress("H.cal.4ta.apos", H_cal_4ta_apos, &b_H_cal_4ta_apos);
+   fChain->SetBranchAddress("Ndata.H.cal.4ta.apos_p", &Ndata_H_cal_4ta_apos_p, &b_Ndata_H_cal_4ta_apos_p);
+   fChain->SetBranchAddress("H.cal.4ta.apos_p", H_cal_4ta_apos_p, &b_H_cal_4ta_apos_p);
+   fChain->SetBranchAddress("Ndata.H.cal.4ta.emean", &Ndata_H_cal_4ta_emean, &b_Ndata_H_cal_4ta_emean);
+   fChain->SetBranchAddress("H.cal.4ta.emean", H_cal_4ta_emean, &b_H_cal_4ta_emean);
+   fChain->SetBranchAddress("Ndata.H.cal.4ta.eneg", &Ndata_H_cal_4ta_eneg, &b_Ndata_H_cal_4ta_eneg);
+   fChain->SetBranchAddress("H.cal.4ta.eneg", H_cal_4ta_eneg, &b_H_cal_4ta_eneg);
+   fChain->SetBranchAddress("Ndata.H.cal.4ta.epos", &Ndata_H_cal_4ta_epos, &b_Ndata_H_cal_4ta_epos);
+   fChain->SetBranchAddress("H.cal.4ta.epos", H_cal_4ta_epos, &b_H_cal_4ta_epos);
+   fChain->SetBranchAddress("Ndata.H.cal.4ta.negadchits", &Ndata_H_cal_4ta_negadchits, &b_Ndata_H_cal_4ta_negadchits);
+   fChain->SetBranchAddress("H.cal.4ta.negadchits", &H_cal_4ta_negadchits, &b_H_cal_4ta_negadchits);
+   fChain->SetBranchAddress("Ndata.H.cal.4ta.posadchits", &Ndata_H_cal_4ta_posadchits, &b_Ndata_H_cal_4ta_posadchits);
+   fChain->SetBranchAddress("H.cal.4ta.posadchits", H_cal_4ta_posadchits, &b_H_cal_4ta_posadchits);
+   fChain->SetBranchAddress("Ndata.H.tr.beta", &Ndata_H_tr_beta, &b_Ndata_H_tr_beta);
+   fChain->SetBranchAddress("H.tr.beta", H_tr_beta, &b_H_tr_beta);
+   fChain->SetBranchAddress("Ndata.H.tr.chi2", &Ndata_H_tr_chi2, &b_Ndata_H_tr_chi2);
+   fChain->SetBranchAddress("H.tr.chi2", H_tr_chi2, &b_H_tr_chi2);
+   fChain->SetBranchAddress("Ndata.H.tr.d_ph", &Ndata_H_tr_d_ph, &b_Ndata_H_tr_d_ph);
+   fChain->SetBranchAddress("H.tr.d_ph", H_tr_d_ph, &b_H_tr_d_ph);
+   fChain->SetBranchAddress("Ndata.H.tr.d_th", &Ndata_H_tr_d_th, &b_Ndata_H_tr_d_th);
+   fChain->SetBranchAddress("H.tr.d_th", H_tr_d_th, &b_H_tr_d_th);
+   fChain->SetBranchAddress("Ndata.H.tr.d_x", &Ndata_H_tr_d_x, &b_Ndata_H_tr_d_x);
+   fChain->SetBranchAddress("H.tr.d_x", H_tr_d_x, &b_H_tr_d_x);
+   fChain->SetBranchAddress("Ndata.H.tr.d_y", &Ndata_H_tr_d_y, &b_Ndata_H_tr_d_y);
+   fChain->SetBranchAddress("H.tr.d_y", H_tr_d_y, &b_H_tr_d_y);
+   fChain->SetBranchAddress("Ndata.H.tr.dbeta", &Ndata_H_tr_dbeta, &b_Ndata_H_tr_dbeta);
+   fChain->SetBranchAddress("H.tr.dbeta", H_tr_dbeta, &b_H_tr_dbeta);
+   fChain->SetBranchAddress("Ndata.H.tr.dtime", &Ndata_H_tr_dtime, &b_Ndata_H_tr_dtime);
+   fChain->SetBranchAddress("H.tr.dtime", H_tr_dtime, &b_H_tr_dtime);
+   fChain->SetBranchAddress("Ndata.H.tr.flag", &Ndata_H_tr_flag, &b_Ndata_H_tr_flag);
+   fChain->SetBranchAddress("H.tr.flag", H_tr_flag, &b_H_tr_flag);
+   fChain->SetBranchAddress("Ndata.H.tr.ndof", &Ndata_H_tr_ndof, &b_Ndata_H_tr_ndof);
+   fChain->SetBranchAddress("H.tr.ndof", H_tr_ndof, &b_H_tr_ndof);
+   fChain->SetBranchAddress("Ndata.H.tr.p", &Ndata_H_tr_p, &b_Ndata_H_tr_p);
+   fChain->SetBranchAddress("H.tr.p", H_tr_p, &b_H_tr_p);
+   fChain->SetBranchAddress("Ndata.H.tr.pathl", &Ndata_H_tr_pathl, &b_Ndata_H_tr_pathl);
+   fChain->SetBranchAddress("H.tr.pathl", H_tr_pathl, &b_H_tr_pathl);
+   fChain->SetBranchAddress("Ndata.H.tr.ph", &Ndata_H_tr_ph, &b_Ndata_H_tr_ph);
+   fChain->SetBranchAddress("H.tr.ph", H_tr_ph, &b_H_tr_ph);
+   fChain->SetBranchAddress("Ndata.H.tr.px", &Ndata_H_tr_px, &b_Ndata_H_tr_px);
+   fChain->SetBranchAddress("H.tr.px", H_tr_px, &b_H_tr_px);
+   fChain->SetBranchAddress("Ndata.H.tr.py", &Ndata_H_tr_py, &b_Ndata_H_tr_py);
+   fChain->SetBranchAddress("H.tr.py", H_tr_py, &b_H_tr_py);
+   fChain->SetBranchAddress("Ndata.H.tr.pz", &Ndata_H_tr_pz, &b_Ndata_H_tr_pz);
+   fChain->SetBranchAddress("H.tr.pz", H_tr_pz, &b_H_tr_pz);
+   fChain->SetBranchAddress("Ndata.H.tr.r_ph", &Ndata_H_tr_r_ph, &b_Ndata_H_tr_r_ph);
+   fChain->SetBranchAddress("H.tr.r_ph", H_tr_r_ph, &b_H_tr_r_ph);
+   fChain->SetBranchAddress("Ndata.H.tr.r_th", &Ndata_H_tr_r_th, &b_Ndata_H_tr_r_th);
+   fChain->SetBranchAddress("H.tr.r_th", H_tr_r_th, &b_H_tr_r_th);
+   fChain->SetBranchAddress("Ndata.H.tr.r_x", &Ndata_H_tr_r_x, &b_Ndata_H_tr_r_x);
+   fChain->SetBranchAddress("H.tr.r_x", H_tr_r_x, &b_H_tr_r_x);
+   fChain->SetBranchAddress("Ndata.H.tr.r_y", &Ndata_H_tr_r_y, &b_Ndata_H_tr_r_y);
+   fChain->SetBranchAddress("H.tr.r_y", H_tr_r_y, &b_H_tr_r_y);
+   fChain->SetBranchAddress("Ndata.H.tr.tg_dp", &Ndata_H_tr_tg_dp, &b_Ndata_H_tr_tg_dp);
+   fChain->SetBranchAddress("H.tr.tg_dp", H_tr_tg_dp, &b_H_tr_tg_dp);
+   fChain->SetBranchAddress("Ndata.H.tr.tg_ph", &Ndata_H_tr_tg_ph, &b_Ndata_H_tr_tg_ph);
+   fChain->SetBranchAddress("H.tr.tg_ph", H_tr_tg_ph, &b_H_tr_tg_ph);
+   fChain->SetBranchAddress("Ndata.H.tr.tg_th", &Ndata_H_tr_tg_th, &b_Ndata_H_tr_tg_th);
+   fChain->SetBranchAddress("H.tr.tg_th", H_tr_tg_th, &b_H_tr_tg_th);
+   fChain->SetBranchAddress("Ndata.H.tr.tg_y", &Ndata_H_tr_tg_y, &b_Ndata_H_tr_tg_y);
+   fChain->SetBranchAddress("H.tr.tg_y", H_tr_tg_y, &b_H_tr_tg_y);
+   fChain->SetBranchAddress("Ndata.H.tr.th", &Ndata_H_tr_th, &b_Ndata_H_tr_th);
+   fChain->SetBranchAddress("H.tr.th", H_tr_th, &b_H_tr_th);
+   fChain->SetBranchAddress("Ndata.H.tr.time", &Ndata_H_tr_time, &b_Ndata_H_tr_time);
+   fChain->SetBranchAddress("H.tr.time", H_tr_time, &b_H_tr_time);
+   fChain->SetBranchAddress("Ndata.H.tr.vx", &Ndata_H_tr_vx, &b_Ndata_H_tr_vx);
+   fChain->SetBranchAddress("H.tr.vx", H_tr_vx, &b_H_tr_vx);
+   fChain->SetBranchAddress("Ndata.H.tr.vy", &Ndata_H_tr_vy, &b_Ndata_H_tr_vy);
+   fChain->SetBranchAddress("H.tr.vy", H_tr_vy, &b_H_tr_vy);
+   fChain->SetBranchAddress("Ndata.H.tr.vz", &Ndata_H_tr_vz, &b_Ndata_H_tr_vz);
+   fChain->SetBranchAddress("H.tr.vz", H_tr_vz, &b_H_tr_vz);
+   fChain->SetBranchAddress("Ndata.H.tr.x", &Ndata_H_tr_x, &b_Ndata_H_tr_x);
+   fChain->SetBranchAddress("H.tr.x", H_tr_x, &b_H_tr_x);
+   fChain->SetBranchAddress("Ndata.H.tr.y", &Ndata_H_tr_y, &b_Ndata_H_tr_y);
+   fChain->SetBranchAddress("H.tr.y", H_tr_y, &b_H_tr_y);
+   fChain->SetBranchAddress("H.cal.1pr.eplane", &H_cal_1pr_eplane, &b_H_cal_1pr_eplane);
+   fChain->SetBranchAddress("H.cal.1pr.eplane_neg", &H_cal_1pr_eplane_neg, &b_H_cal_1pr_eplane_neg);
+   fChain->SetBranchAddress("H.cal.1pr.eplane_pos", &H_cal_1pr_eplane_pos, &b_H_cal_1pr_eplane_pos);
+   fChain->SetBranchAddress("H.cal.2ta.eplane", &H_cal_2ta_eplane, &b_H_cal_2ta_eplane);
+   fChain->SetBranchAddress("H.cal.2ta.eplane_neg", &H_cal_2ta_eplane_neg, &b_H_cal_2ta_eplane_neg);
+   fChain->SetBranchAddress("H.cal.2ta.eplane_pos", &H_cal_2ta_eplane_pos, &b_H_cal_2ta_eplane_pos);
+   fChain->SetBranchAddress("H.cal.3ta.eplane", &H_cal_3ta_eplane, &b_H_cal_3ta_eplane);
+   fChain->SetBranchAddress("H.cal.3ta.eplane_neg", &H_cal_3ta_eplane_neg, &b_H_cal_3ta_eplane_neg);
+   fChain->SetBranchAddress("H.cal.3ta.eplane_pos", &H_cal_3ta_eplane_pos, &b_H_cal_3ta_eplane_pos);
+   fChain->SetBranchAddress("H.cal.4ta.eplane", &H_cal_4ta_eplane, &b_H_cal_4ta_eplane);
+   fChain->SetBranchAddress("H.cal.4ta.eplane_neg", &H_cal_4ta_eplane_neg, &b_H_cal_4ta_eplane_neg);
+   fChain->SetBranchAddress("H.cal.4ta.eplane_pos", &H_cal_4ta_eplane_pos, &b_H_cal_4ta_eplane_pos);
+   fChain->SetBranchAddress("H.cal.emax", &H_cal_emax, &b_H_cal_emax);
+   fChain->SetBranchAddress("H.cal.eprmax", &H_cal_eprmax, &b_H_cal_eprmax);
+   fChain->SetBranchAddress("H.cal.mult", &H_cal_mult, &b_H_cal_mult);
+   fChain->SetBranchAddress("H.cal.nclust", &H_cal_nclust, &b_H_cal_nclust);
+   fChain->SetBranchAddress("H.cal.nhits", &H_cal_nhits, &b_H_cal_nhits);
+   fChain->SetBranchAddress("H.cal.ntracks", &H_cal_ntracks, &b_H_cal_ntracks);
+   fChain->SetBranchAddress("H.cal.tre", &H_cal_tre, &b_H_cal_tre);
+   fChain->SetBranchAddress("H.cal.trecor", &H_cal_trecor, &b_H_cal_trecor);
+   fChain->SetBranchAddress("H.cal.treplcor", &H_cal_treplcor, &b_H_cal_treplcor);
+   fChain->SetBranchAddress("H.cal.trepr", &H_cal_trepr, &b_H_cal_trepr);
+   fChain->SetBranchAddress("H.cal.treprcor", &H_cal_treprcor, &b_H_cal_treprcor);
+   fChain->SetBranchAddress("H.cal.trx", &H_cal_trx, &b_H_cal_trx);
+   fChain->SetBranchAddress("H.cal.try", &H_cal_try, &b_H_cal_try);
+   fChain->SetBranchAddress("H.cal.xmax", &H_cal_xmax, &b_H_cal_xmax);
+   fChain->SetBranchAddress("H.gold.dp", &H_gold_dp, &b_H_gold_dp);
+   fChain->SetBranchAddress("H.gold.e", &H_gold_e, &b_H_gold_e);
+   fChain->SetBranchAddress("H.gold.fp_ph", &H_gold_fp_ph, &b_H_gold_fp_ph);
+   fChain->SetBranchAddress("H.gold.fp_th", &H_gold_fp_th, &b_H_gold_fp_th);
+   fChain->SetBranchAddress("H.gold.fp_x", &H_gold_fp_x, &b_H_gold_fp_x);
+   fChain->SetBranchAddress("H.gold.fp_y", &H_gold_fp_y, &b_H_gold_fp_y);
+   fChain->SetBranchAddress("H.gold.index", &H_gold_index, &b_H_gold_index);
+   fChain->SetBranchAddress("H.gold.ok", &H_gold_ok, &b_H_gold_ok);
+   fChain->SetBranchAddress("H.gold.p", &H_gold_p, &b_H_gold_p);
+   fChain->SetBranchAddress("H.gold.ph", &H_gold_ph, &b_H_gold_ph);
+   fChain->SetBranchAddress("H.gold.px", &H_gold_px, &b_H_gold_px);
+   fChain->SetBranchAddress("H.gold.py", &H_gold_py, &b_H_gold_py);
+   fChain->SetBranchAddress("H.gold.pz", &H_gold_pz, &b_H_gold_pz);
+   fChain->SetBranchAddress("H.gold.th", &H_gold_th, &b_H_gold_th);
+   fChain->SetBranchAddress("H.gold.x", &H_gold_x, &b_H_gold_x);
+   fChain->SetBranchAddress("H.gold.y", &H_gold_y, &b_H_gold_y);
+   fChain->SetBranchAddress("H.tr.n", &H_tr_n, &b_H_tr_n);
+   fChain->SetBranchAddress("g.evtyp", &g_evtyp, &b_g_evtyp);
+   fChain->SetBranchAddress("fEvtHdr.fEvtTime", &fEvtHdr_fEvtTime, &b_Event_Branch_fEvtHdr_fEvtTime);
+   fChain->SetBranchAddress("fEvtHdr.fEvtNum", &fEvtHdr_fEvtNum, &b_Event_Branch_fEvtHdr_fEvtNum);
+   fChain->SetBranchAddress("fEvtHdr.fEvtType", &fEvtHdr_fEvtType, &b_Event_Branch_fEvtHdr_fEvtType);
+   fChain->SetBranchAddress("fEvtHdr.fEvtLen", &fEvtHdr_fEvtLen, &b_Event_Branch_fEvtHdr_fEvtLen);
+   fChain->SetBranchAddress("fEvtHdr.fHelicity", &fEvtHdr_fHelicity, &b_Event_Branch_fEvtHdr_fHelicity);
+   fChain->SetBranchAddress("fEvtHdr.fTargetPol", &fEvtHdr_fTargetPol, &b_Event_Branch_fEvtHdr_fTargetPol);
+   fChain->SetBranchAddress("fEvtHdr.fRun", &fEvtHdr_fRun, &b_Event_Branch_fEvtHdr_fRun);
+   Notify();
+}
+
+Bool_t hcana_class::Notify()
+{
+   // The Notify() function is called when a new file is opened. This
+   // can be either for a new TTree in a TChain or when when a new TTree
+   // is started when using PROOF. It is normally not necessary to make changes
+   // to the generated code, but the routine can be extended by the
+   // user if needed. The return value is currently not used.
+
+   return kTRUE;
+}
+
+void hcana_class::Show(Long64_t entry)
+{
+// Print contents of entry.
+// If entry is not specified, print current entry
+   if (!fChain) return;
+   fChain->Show(entry);
+}
+Int_t hcana_class::Cut(Long64_t entry)
+{
+// This function may be called from Loop.
+// returns  1 if entry is accepted.
+// returns -1 otherwise.
+   return 1;
+}
+#endif // #ifdef hcana_class_cxx
diff --git a/examples/gtrk_e/hms52949_rz.root b/examples/gtrk_e/hms52949_rz.root
new file mode 120000
index 0000000..eee1c1e
--- /dev/null
+++ b/examples/gtrk_e/hms52949_rz.root
@@ -0,0 +1 @@
+../hms52949_rz.root
\ No newline at end of file
diff --git a/examples/gtrk_e/hodtest_52949.root b/examples/gtrk_e/hodtest_52949.root
new file mode 120000
index 0000000..0417a12
--- /dev/null
+++ b/examples/gtrk_e/hodtest_52949.root
@@ -0,0 +1 @@
+../hodtest_52949.root
\ No newline at end of file
diff --git a/examples/gtrk_e/make_class.C b/examples/gtrk_e/make_class.C
new file mode 100644
index 0000000..a22c5e9
--- /dev/null
+++ b/examples/gtrk_e/make_class.C
@@ -0,0 +1,17 @@
+#include <TTree.h>
+#include <TFile.h>
+#include <TROOT.h>
+#include <iostream>
+
+using namespace std;
+
+void make_class(string root_file="hodtest_52949.root",
+		string tree_name="T;1",
+		string class_name="hcana_class") {
+
+  TFile* r_file = new TFile(root_file.c_str());
+  //  TTree *T = (TTree*)gROOT->FindObject("T;1");
+  TTree *T = (TTree*)gROOT->FindObject(tree_name.c_str());
+  T->MakeClass(class_name.c_str());
+
+}
-- 
GitLab