From 92e996f4771f9c2995c358849593909a4c068edd Mon Sep 17 00:00:00 2001
From: Vardan Tadevosyan <tadevosn@jlab.org>
Date: Thu, 7 Aug 2014 09:42:17 -0400
Subject: [PATCH] Add example code to assign energies to tracks.

    Add TrackEnergies method in THcHallCSpectrometer class. It is
    called from TrackCalc metod.
---
 src/THcHallCSpectrometer.cxx | 40 ++++++++++++++++++++++++++++++++++++
 src/THcHallCSpectrometer.h   |  1 +
 2 files changed, 41 insertions(+)

diff --git a/src/THcHallCSpectrometer.cxx b/src/THcHallCSpectrometer.cxx
index 34d5a39..a34755d 100644
--- a/src/THcHallCSpectrometer.cxx
+++ b/src/THcHallCSpectrometer.cxx
@@ -51,6 +51,7 @@
 #include "THaTriggerTime.h"
 #include "TMath.h"
 #include "TList.h"
+#include "THcShower.h"
 
 #include <iostream>
 #include <fstream>
@@ -312,9 +313,48 @@ Int_t THcHallCSpectrometer::TrackCalc()
 {
   // Additioal track calculations. At present, we only calculate beta here.
 
+  cout << "THcHallCSpectrometer::TrackCalc is called xxxxxxxxxxxxxxxxx" << endl;
+
+  TrackEnergies(fTracks);
+
   return TrackTimes( fTracks );
 }
 
+//_____________________________________________________________________________
+Int_t THcHallCSpectrometer::TrackEnergies( TClonesArray* Tracks ) {
+
+  // Example code for track energy assignments from shower counter.
+
+  //  cout << "THcHallCSpectrometer::TrackEnergies called -----------------\n" ;
+  
+  if ( !Tracks ) return -1;
+  
+  THaTrack *track=0;
+  Int_t ntrack = GetNTracks();
+
+  //  cout << "     number of tracks " << ntrack << endl;
+
+  for ( Int_t itrk=0; itrk < ntrack; itrk++ ) {
+
+    Double_t energy = kBig;
+
+    track = static_cast<THaTrack*>(Tracks->At(itrk));
+
+    TIter nextDet( fNonTrackingDetectors );
+    THaNonTrackingDetector *det;
+    while ((det = static_cast<THaNonTrackingDetector*>(nextDet()))) {
+      
+      THcShower *sh = dynamic_cast<THcShower*>(det);
+      if ( sh ) energy = sh->GetShEnergy(track);
+    }
+
+    track->SetEnergy(energy);
+    cout << "track " << itrk << "   energy = " << track->GetEnergy() << endl;
+  }
+
+  return ntrack;
+}
+
 //_____________________________________________________________________________
 Int_t THcHallCSpectrometer::TrackTimes( TClonesArray* Tracks ) {
   // Do the actual track-timing (beta) calculation.
diff --git a/src/THcHallCSpectrometer.h b/src/THcHallCSpectrometer.h
index f906546..90e1be5 100644
--- a/src/THcHallCSpectrometer.h
+++ b/src/THcHallCSpectrometer.h
@@ -21,6 +21,7 @@ public:
   virtual Int_t   FindVertices( TClonesArray& tracks );
   virtual Int_t   TrackCalc();
   virtual Int_t   TrackTimes( TClonesArray* tracks );
+  Int_t TrackEnergies( TClonesArray* tracks );
 
   virtual Int_t   ReadRunDatabase( const TDatime& date );
 
-- 
GitLab