From d715b6024d14d1acc253ad0eef3926e5d9f69035 Mon Sep 17 00:00:00 2001
From: "Stephen A. Wood" <saw@jlab.org>
Date: Thu, 5 Apr 2012 11:56:25 -0400
Subject: [PATCH] Decode method implemented.

---
 src/THcDetectorBase.cxx | 59 ++++++++++++++++++++++-------------------
 src/THcDetectorBase.h   |  2 +-
 2 files changed, 33 insertions(+), 28 deletions(-)

diff --git a/src/THcDetectorBase.cxx b/src/THcDetectorBase.cxx
index 26e3041..44c7923 100644
--- a/src/THcDetectorBase.cxx
+++ b/src/THcDetectorBase.cxx
@@ -37,15 +37,20 @@ THcDetectorBase::~THcDetectorBase() {
 void THcDetectorBase::InitHitlist(const char *hitclass, Int_t maxhits) {
   // Probably called by ReadDatabase
   fRawHitList = new TClonesArray(hitclass, maxhits);
+  fRawHitClass = fRawHitList->GetClass();
   fNMaxRawHits = maxhits;
   fNRawHits = 0;
+  for(Int_t i=0;i<maxhits;i++) {
+    fRawHitList->New(i);
+  }
 }
    
 
 Int_t THcDetectorBase::Decode( const THaEvData& evdata ) {
   THcRawHit* rawhit;
   fRawHitList->Clear("C");
-  
+  fNRawHits = 0;
+
   for ( Int_t i=0; i < fDetMap->GetSize(); i++ ) {
     THaDetMap::Module* d = fDetMap->GetModule(i);
 
@@ -61,36 +66,36 @@ Int_t THcDetectorBase::Decode( const THaEvData& evdata ) {
       Int_t signal = d->signal;
       Int_t counter = d->reverse ? d->first + d->hi - chan : d->first + chan - d->lo;
 	
-      // Allow for multiple hits
-
       // Search hit list for plane and counter
-      for (Int_t hit = 0; hit < n 
-
-      // Get the data. Scintillators are assumed to have only single hit (hit=0)
-      Int_t nMHits = evData.GetNumHits(d->crate, d->slot, chan);
+      // We could do sorting 
+      Int_t thishit = 0;
+      while(thishit < fNRawHits) {
+	rawhit = (THcRawHit*) (*fRawHitList)[thishit];
+	if (plane == rawhit->fPlane
+	    && counter == rawhit->fCounter) {
+	  break;
+	}
+	thishit++;
+      }
+      if(thishit == fNRawHits) {
+	fNRawHits++;
+	rawhit = (THcRawHit*) (*fRawHitList)[thishit];
+	rawhit->fPlane = plane;
+	rawhit->fCounter = counter;
+      }
+	
+      // Get the data from this channel
+      // Allow for multiple hits
+      Int_t nMHits = evdata.GetNumHits(d->crate, d->slot, chan);
       for (Int_t mhit = 0; mhit < nMHits; mhit++) {
 	Int_t data = evdata.GetData( d->crate, d->slot, chan, mhit);
-
-
-
-
- THcRawHit*       GetHit(Int_t i) const
-  { assert(i >=0 && i<GetNHits() );
-    return (THcRawHit*)fHits->UncheckedAt(i);}
-
-
-  while( raw data) {
-    // Get a data word
-    // Get plane, counter, signal
-    // Search list for that plane counter
-    // if(plane,counter hit doesn't exist) {
-    //   rawhit = fRawHitList[i];
-    // } else {
-    //   rawhit = static_cast(THcRawHit*>( fRawHitClass->New() );
-    // }
-    // rawhit->AddSignal(isignal) = datavalue;
+	rawhit->SetData(signal,data);
+      }
+    }
   }
-}
+  fRawHitList->Sort(fNRawHits);
 
+  return fNRawHits;		// Does anything care what is returned
+}
 
 ClassImp(THcDetectorBase)
diff --git a/src/THcDetectorBase.h b/src/THcDetectorBase.h
index 9b02568..740f7c1 100644
--- a/src/THcDetectorBase.h
+++ b/src/THcDetectorBase.h
@@ -36,7 +36,7 @@ class THcDetectorBase : public THaDetectorBase {
   Int_t         fNRawHits;
   Int_t         fNMaxRawHits;
   TClonesArray* fRawHitList; // List of raw hits
-  TClass* fRawHitCLass;		  // Class of raw hit object to use
+  TClass* fRawHitClass;		  // Class of raw hit object to use
 
  protected:
 
-- 
GitLab