From 7a973e7b458ac053c54b1d2e2f409ff41162cd5d Mon Sep 17 00:00:00 2001
From: "Stephen A. Wood" <saw@jlab.org>
Date: Wed, 11 Apr 2012 15:57:54 -0400
Subject: [PATCH] Code that assumes that hit list stuff is in THaDetectorBase.
 Going to back out of this and go to multiple inheritance.

---
 podd                            |  2 +-
 src/THcHodoscope.cxx            | 70 +++------------------------------
 src/THcHodoscope.h              | 18 ++++-----
 src/THcNonTrackingDetector.cxx  | 16 ++++----
 src/THcNonTrackingDetector.h    | 18 ++++-----
 src/THcSpectrometerDetector.cxx | 24 +++++------
 src/THcSpectrometerDetector.h   | 18 ++++-----
 7 files changed, 54 insertions(+), 112 deletions(-)

diff --git a/podd b/podd
index 3f08eae..0397e92 160000
--- a/podd
+++ b/podd
@@ -1 +1 @@
-Subproject commit 3f08eaebe0d0997888a9bf34ba90a211dd608a2d
+Subproject commit 0397e92a6812595dcb4ff6a13ec665987e26ca1d
diff --git a/src/THcHodoscope.cxx b/src/THcHodoscope.cxx
index 3f10290..ad352c6 100644
--- a/src/THcHodoscope.cxx
+++ b/src/THcHodoscope.cxx
@@ -28,7 +28,7 @@ using namespace std;
 //_____________________________________________________________________________
 THcHodoscope::THcHodoscope( const char* name, const char* description,
 				  THaApparatus* apparatus ) :
-  THaNonTrackingDetector(name,description,apparatus)
+  THcNonTrackingDetector(name,description,apparatus)
 {
   // Constructor
   fTWalkPar = 0;
@@ -38,7 +38,7 @@ THcHodoscope::THcHodoscope( const char* name, const char* description,
 
 //_____________________________________________________________________________
 THcHodoscope::THcHodoscope( ) :
-  THaNonTrackingDetector()
+  THcNonTrackingDetector()
 {
   // Constructor
   fTWalkPar = NULL;
@@ -55,7 +55,7 @@ THaAnalysisObject::EStatus THcHodoscope::Init( const TDatime& date )
 {
   // Extra initialization for scintillators: set up DataDest map
 
-  if( THaNonTrackingDetector::Init( date ) )
+  if( THcNonTrackingDetector::Init( date ) )
     return fStatus;
 
   const DataDest tmp[NDEST] = {
@@ -477,69 +477,11 @@ void THcHodoscope::ClearEvent()
 //_____________________________________________________________________________
 Int_t THcHodoscope::Decode( const THaEvData& evdata )
 {
-  // Decode scintillator data, correct TDC times and ADC amplitudes, and copy
-  // the data to the local data members.
-  // This implementation makes the following assumptions about the detector map:
-  // - The first half of the map entries corresponds to ADCs, 
-  //   the second half, to TDCs.
-  // - The first fNelem detector channels correspond to the PMTs on the
-  //   right hand side, the next fNelem channels, to the left hand side.
-  //   (Thus channel numbering for each module must be consecutive.)
 
-  ClearEvent();
+  // Get the hitlist (fRawHitList) for this event
+  Int_t nhits = THcDetectorBase::Decode(evdata);
 
-  // Loop over all modules defined for Scintillator 1 detector
-
-  for( Int_t i = 0; i < fDetMap->GetSize(); i++ ) {
-    THaDetMap::Module* d = fDetMap->GetModule( i );
-    bool adc = ( d->model ? fDetMap->IsADC(d) : (i < fDetMap->GetSize()/2) );
-
-    // Loop over all channels that have a hit.
-    for( Int_t j = 0; j < evdata.GetNumChan( d->crate, d->slot ); j++) {
-
-      Int_t chan = evdata.GetNextChan( d->crate, d->slot, j );
-      if( chan < d->lo || chan > d->hi ) continue;     // Not one of my channels
-
-      // Get the data. Scintillators are assumed to have only single hit (hit=0)
-      Int_t data = evdata.GetData( d->crate, d->slot, chan, 0 );
-
-      // Get the detector channel number, starting at 0
-      Int_t k = d->first + chan - d->lo - 1;   
-
-#ifdef WITH_DEBUG      
-      if( k<0 || k>NDEST*fNelem ) {
-	// Indicates bad database
-	Warning( Here("Decode()"), "Illegal detector channel: %d", k );
-	continue;
-      }
-//        cout << "adc,j,k = " <<adc<<","<<j<< ","<<k<< endl;
-#endif
-      // Copy the data to the local variables.
-      DataDest* dest = fDataDest + k/fNelem;
-      k = k % fNelem;
-      if( adc ) {
-	dest->adc[k]   = static_cast<Double_t>( data );
-	dest->adc_p[k] = data - dest->ped[k];
-	dest->adc_c[k] = dest->adc_p[k] * dest->gain[k];
-	(*dest->nahit)++;
-      } else {
-	dest->tdc[k]   = static_cast<Double_t>( data );
-	dest->tdc_c[k] = (data - dest->offset[k])*fTdc2T;
-	(*dest->nthit)++;
-      }
-    }
-  }
-  if ( fDebug > 3 ) {
-    printf("\n\nEvent %d   Trigger %d Scintillator %s\n:",
-	   evdata.GetEvNum(), evdata.GetEvType(), GetPrefix() );
-    printf("   paddle  Left(TDC    ADC   ADC_p)   Right(TDC   ADC   ADC_p)\n");
-    for ( int i=0; i<fNelem; i++ ) {
-      printf("     %2d     %5.0f    %5.0f  %5.0f     %5.0f    %5.0f  %5.0f\n",
-	     i+1,fLT[i],fLA[i],fLA_p[i],fRT[i],fRA[i],fRA_p[i]);
-    }
-  }
-  
-  return fLTNhit+fRTNhit;
+  return nhits;
 }
 
 //_____________________________________________________________________________
diff --git a/src/THcHodoscope.h b/src/THcHodoscope.h
index a093103..5f23006 100644
--- a/src/THcHodoscope.h
+++ b/src/THcHodoscope.h
@@ -1,23 +1,23 @@
-#ifndef ROOT_THaHodoscope
-#define ROOT_THaHodoscope
+#ifndef ROOT_THcHodoscope
+#define ROOT_THcHodoscope
 
 ///////////////////////////////////////////////////////////////////////////////
 //                                                                           //
-// THaHodoscope                                                           //
+// THcHodoscope                                                           //
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
 #include "TClonesArray.h"
-#include "THaNonTrackingDetector.h"
+#include "THcNonTrackingDetector.h"
 
 class THaScCalib;
 
-class THaHodoscope : public THaNonTrackingDetector {
+class THcHodoscope : public THcNonTrackingDetector {
 
 public:
-  THaHodoscope( const char* name, const char* description = "",
+  THcHodoscope( const char* name, const char* description = "",
 		   THaApparatus* a = NULL );
-  virtual ~THaHodoscope();
+  virtual ~THcHodoscope();
 
   virtual Int_t      Decode( const THaEvData& );
   virtual EStatus    Init( const TDatime& run_time );
@@ -38,7 +38,7 @@ public:
   
   friend class THaScCalib;
 
-  THaHodoscope();  // for ROOT I/O
+  THcHodoscope();  // for ROOT I/O
 protected:
 
   // Calibration
@@ -119,7 +119,7 @@ protected:
   virtual  Double_t TimeWalkCorrection(const Int_t& paddle,
 					   const ESide side);
 
-  ClassDef(THaHodoscope,0)   // Generic scintillator class
+  ClassDef(THcHodoscope,0)   // Generic hodoscope class
 };
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/src/THcNonTrackingDetector.cxx b/src/THcNonTrackingDetector.cxx
index 2f76e1f..dd0cc66 100644
--- a/src/THcNonTrackingDetector.cxx
+++ b/src/THcNonTrackingDetector.cxx
@@ -2,34 +2,34 @@
 
 //////////////////////////////////////////////////////////////////////////
 //
-// THaNonTrackingDetector
+// THcNonTrackingDetector
 //
 //////////////////////////////////////////////////////////////////////////
 
-#include "THaNonTrackingDetector.h"
+#include "THcNonTrackingDetector.h"
 
-ClassImp(THaNonTrackingDetector)
+ClassImp(THcNonTrackingDetector)
 
 //______________________________________________________________________________
-THaNonTrackingDetector::THaNonTrackingDetector( const char* name, 
+THcNonTrackingDetector::THcNonTrackingDetector( const char* name, 
 						const char* description,
 						THaApparatus* apparatus )
-  : THaSpectrometerDetector(name,description,apparatus)
+  : THcSpectrometerDetector(name,description,apparatus)
 {
   // Normal constructor with name and description
 
 }
 
 //______________________________________________________________________________
-THaNonTrackingDetector::THaNonTrackingDetector( )
-  : THaSpectrometerDetector( )
+THcNonTrackingDetector::THcNonTrackingDetector( )
+  : THcSpectrometerDetector( )
 {
   // for ROOT I/O only
 
 }
 
 //______________________________________________________________________________
-THaNonTrackingDetector::~THaNonTrackingDetector()
+THcNonTrackingDetector::~THcNonTrackingDetector()
 {
   // Destructor
 
diff --git a/src/THcNonTrackingDetector.h b/src/THcNonTrackingDetector.h
index a0ff050..25b129d 100644
--- a/src/THcNonTrackingDetector.h
+++ b/src/THcNonTrackingDetector.h
@@ -1,9 +1,9 @@
-#ifndef ROOT_THaNonTrackingDetector
-#define ROOT_THaNonTrackingDetector
+#ifndef ROOT_THcNonTrackingDetector
+#define ROOT_THcNonTrackingDetector
 
 //////////////////////////////////////////////////////////////////////////
 //
-// THaNonTrackingDetector.h
+// THcNonTrackingDetector.h
 //
 // Abstract base class for a generic non-tracking spectrometer detector. 
 //
@@ -12,16 +12,16 @@
 //
 //////////////////////////////////////////////////////////////////////////
 
-#include "THaSpectrometerDetector.h"
+#include "THcSpectrometerDetector.h"
 
 class TClonesArray;
 
-class THaNonTrackingDetector : public THaSpectrometerDetector {
+class THcNonTrackingDetector : public THcSpectrometerDetector {
   
 public:
-  THaNonTrackingDetector(); // only for ROOT I/O
+  THcNonTrackingDetector(); // only for ROOT I/O
 
-  virtual ~THaNonTrackingDetector();
+  virtual ~THcNonTrackingDetector();
   
   virtual Int_t    CoarseProcess( TClonesArray& tracks ) = 0;
   virtual Int_t    FineProcess( TClonesArray& tracks )  = 0;
@@ -32,10 +32,10 @@ protected:
 
   //Only derived classes may construct me for real
 
-  THaNonTrackingDetector( const char* name, const char* description,
+  THcNonTrackingDetector( const char* name, const char* description,
 			  THaApparatus* a = NULL);
 
-  ClassDef(THaNonTrackingDetector,1)  //ABC for a non-tracking spectrometer detector
+  ClassDef(THcNonTrackingDetector,0)  //ABC for a non-tracking spectrometer detector
 };
 
 #endif
diff --git a/src/THcSpectrometerDetector.cxx b/src/THcSpectrometerDetector.cxx
index 9b33f48..c21122a 100644
--- a/src/THcSpectrometerDetector.cxx
+++ b/src/THcSpectrometerDetector.cxx
@@ -2,41 +2,41 @@
 
 //////////////////////////////////////////////////////////////////////////
 //
-// THaSpectrometerDetector
+// THcSpectrometerDetector
 //
 //////////////////////////////////////////////////////////////////////////
 
-#include "THaSpectrometerDetector.h"
+#include "THcSpectrometerDetector.h"
 #include "THaTrack.h"
 #include "TMath.h"
 
-ClassImp(THaSpectrometerDetector)
+ClassImp(THcSpectrometerDetector)
 
 //______________________________________________________________________________
-THaSpectrometerDetector::THaSpectrometerDetector( const char* name, 
+THcSpectrometerDetector::THcSpectrometerDetector( const char* name, 
 						  const char* description,
 						  THaApparatus* apparatus )
-  : THaDetector(name,description,apparatus)
+  : THcDetector(name,description,apparatus)
 {
   // Constructor
 
 }
 
 //______________________________________________________________________________
-THaSpectrometerDetector::THaSpectrometerDetector( )
+THcSpectrometerDetector::THcSpectrometerDetector( )
 {
   // Constructor for ROOT I/O only
 }
 
 //______________________________________________________________________________
-THaSpectrometerDetector::~THaSpectrometerDetector()
+THcSpectrometerDetector::~THcSpectrometerDetector()
 {
   // Destructor
 
 }
 
 //_____________________________________________________________________________
-void THaSpectrometerDetector::DefineAxes(Double_t rotation_angle)
+void THcSpectrometerDetector::DefineAxes(Double_t rotation_angle)
 {
   // define variables used for calculating intercepts of tracks
   // with the detector
@@ -50,7 +50,7 @@ void THaSpectrometerDetector::DefineAxes(Double_t rotation_angle)
 }
 
 //_____________________________________________________________________________
-bool THaSpectrometerDetector::CalcTrackIntercept(THaTrack* theTrack, 
+bool THcSpectrometerDetector::CalcTrackIntercept(THaTrack* theTrack, 
 					 Double_t& t, Double_t& xcross, 
 					 Double_t& ycross)
 {
@@ -75,21 +75,21 @@ bool THaSpectrometerDetector::CalcTrackIntercept(THaTrack* theTrack,
 }
 
 //_____________________________________________________________________________
-bool THaSpectrometerDetector::CheckIntercept(THaTrack *track)
+bool THcSpectrometerDetector::CheckIntercept(THaTrack *track)
 {
   Double_t x, y, t;
   return CalcTrackIntercept(track, t, x, y);
 }
 
 //_____________________________________________________________________________
-bool THaSpectrometerDetector::CalcInterceptCoords(THaTrack* track, Double_t& x, Double_t& y)
+bool THcSpectrometerDetector::CalcInterceptCoords(THaTrack* track, Double_t& x, Double_t& y)
 {
   Double_t t;
   return CalcTrackIntercept(track, t, x, y);
 }
 
 //_____________________________________________________________________________
-bool THaSpectrometerDetector::CalcPathLen(THaTrack* track, Double_t& t)
+bool THcSpectrometerDetector::CalcPathLen(THaTrack* track, Double_t& t)
 {
   Double_t x, y;
   return CalcTrackIntercept(track, t, x, y);
diff --git a/src/THcSpectrometerDetector.h b/src/THcSpectrometerDetector.h
index e9f1fae..ac909dd 100644
--- a/src/THcSpectrometerDetector.h
+++ b/src/THcSpectrometerDetector.h
@@ -1,9 +1,9 @@
-#ifndef ROOT_THaSpectrometerDetector
-#define ROOT_THaSpectrometerDetector
+#ifndef ROOT_THcSpectrometerDetector
+#define ROOT_THcSpectrometerDetector
 
 //////////////////////////////////////////////////////////////////////////
 //
-// THaSpectrometerDetector
+// THcSpectrometerDetector
 //
 // Abstract base class for a generic spectrometer detector. 
 //
@@ -12,14 +12,14 @@
 //
 //////////////////////////////////////////////////////////////////////////
 
-#include "THaDetector.h"
+#include "THcDetector.h"
 
 class THaTrack;
 
-class THaSpectrometerDetector : public THaDetector {
+class THcSpectrometerDetector : public THcDetector {
   
 public:
-  virtual ~THaSpectrometerDetector();
+  virtual ~THcSpectrometerDetector();
   
   virtual Bool_t   IsTracking() = 0;
   virtual Bool_t   IsPid()      = 0;
@@ -29,7 +29,7 @@ public:
 					Double_t& x, Double_t& y );
           bool     CalcPathLen( THaTrack* track, Double_t& t );
 
-  THaSpectrometerDetector();       // for ROOT I/O only
+  THcSpectrometerDetector();       // for ROOT I/O only
 
 protected:
 
@@ -44,10 +44,10 @@ protected:
 				    Double_t& ycross, Double_t& xcross);
 
   //Only derived classes may construct me
-  THaSpectrometerDetector( const char* name, const char* description,
+  THcSpectrometerDetector( const char* name, const char* description,
 			   THaApparatus* a = NULL );
 
-  ClassDef(THaSpectrometerDetector,1)   //ABC for a spectrometer detector
+  ClassDef(THcSpectrometerDetector,0)   //ABC for a spectrometer detector
 };
 
 #endif
-- 
GitLab