From 133a8bc2f216cac10bfc23225fcf2fd0ab6e6c1a Mon Sep 17 00:00:00 2001
From: "Stephen A. Wood" <saw@jlab.org>
Date: Thu, 10 Sep 2015 10:51:05 -0400
Subject: [PATCH] Avoid predetermined array lengths in THcHodoEff

---
 src/THcHodoEff.cxx | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/src/THcHodoEff.cxx b/src/THcHodoEff.cxx
index 646f241..138abf8 100644
--- a/src/THcHodoEff.cxx
+++ b/src/THcHodoEff.cxx
@@ -131,19 +131,22 @@ Int_t THcHodoEff::ReadDatabase( const TDatime& date )
   fCenterFirst = new Double_t[fNPlanes];
   fNCounters = new Int_t[fNPlanes];
   fHodoSlop = new Double_t[fNPlanes];
-  fHodoPosEffi = new Int_t[100];
-  fHodoNegEffi = new Int_t[100];
-  fHodoOrEffi = new Int_t[100];
-  fHodoAndEffi = new Int_t[100];
-  fStatTrk = new Int_t[100];
 
+  Int_t maxcountersperplane=0;
   for(Int_t ip=0;ip<fNPlanes;ip++) {
     fPlanes[ip] = fHod->GetPlane(ip);
     fPosZ[ip] = fPlanes[ip]->GetZpos() + 0.5*fPlanes[ip]->GetDzpos();
     fSpacing[ip] = fPlanes[ip]->GetSpacing();
     fCenterFirst[ip] = fPlanes[ip]->GetPosCenter(0) + fPlanes[ip]->GetPosOffset();
     fNCounters[ip] = fPlanes[ip]->GetNelem();
+    maxcountersperplane = TMath::Max(maxcountersperplane,fNCounters[ip]);
   }
+  Int_t totalpaddles = fNPlanes*maxcountersperplane;
+  fHodoPosEffi = new Int_t[totalpaddles];
+  fHodoNegEffi = new Int_t[totalpaddles];
+  fHodoOrEffi = new Int_t[totalpaddles];
+  fHodoAndEffi = new Int_t[totalpaddles];
+  fStatTrk = new Int_t[totalpaddles];
   
   char prefix[2];
   prefix[0] = tolower((fHod->GetApparatus())->GetName()[0]);
@@ -202,12 +205,11 @@ Int_t THcHodoEff::ReadDatabase( const TDatime& date )
   // gHcParms->Define(Form("%shodo_pos_hits[%d][%d]",fPrefix,fNPlanes,fHodPaddles),
   // 		        "Golden track's pos pmt hit",*&fStatPosHit);
 
-  Int_t fTotalPaddles = 100;
-  gHcParms->Define(Form("%shodo_pos_eff[%d]",  prefix,fTotalPaddles), "Hodo positive effi",*fHodoPosEffi);
-  gHcParms->Define(Form("%shodo_neg_eff[%d]",  prefix,fTotalPaddles), "Hodo negative effi",*fHodoNegEffi);
-  gHcParms->Define(Form("%shodo_or_eff[%d]",   prefix,fTotalPaddles), "Hodo or effi",      *fHodoOrEffi);
-  gHcParms->Define(Form("%shodo_and_eff[%d]",  prefix,fTotalPaddles), "Hodo and effi",     *fHodoAndEffi);
-  gHcParms->Define(Form("%shodo_gold_hits[%d]",prefix,fTotalPaddles), "Hodo golden hits",  *fStatTrk);
+  gHcParms->Define(Form("%shodo_pos_eff[%d]",  prefix,totalpaddles), "Hodo positive effi",*fHodoPosEffi);
+  gHcParms->Define(Form("%shodo_neg_eff[%d]",  prefix,totalpaddles), "Hodo negative effi",*fHodoNegEffi);
+  gHcParms->Define(Form("%shodo_or_eff[%d]",   prefix,totalpaddles), "Hodo or effi",      *fHodoOrEffi);
+  gHcParms->Define(Form("%shodo_and_eff[%d]",  prefix,totalpaddles), "Hodo and effi",     *fHodoAndEffi);
+  gHcParms->Define(Form("%shodo_gold_hits[%d]",prefix,totalpaddles), "Hodo golden hits",  *fStatTrk);
 
   return kOK;
 }
-- 
GitLab