From fc73ff03930801d087b09715c71461ab0de6ede1 Mon Sep 17 00:00:00 2001
From: Kayla Craycraft <klcraycraft@gmail.com>
Date: Tue, 10 Oct 2017 11:50:00 -0400
Subject: [PATCH] Working on BCM current.

---
 src/THcScalerEvtHandler.cxx | 133 ++++++++++++++++++++++++------------
 1 file changed, 89 insertions(+), 44 deletions(-)

diff --git a/src/THcScalerEvtHandler.cxx b/src/THcScalerEvtHandler.cxx
index ff40f1f..17ad03e 100644
--- a/src/THcScalerEvtHandler.cxx
+++ b/src/THcScalerEvtHandler.cxx
@@ -300,59 +300,104 @@ Int_t THcScalerEvtHandler::AnalyzeBuffer(UInt_t* rdata)
   // The correspondance between dvars and the scaler and the channel
   // will be driven by a scaler.map file  -- later
 
-  for (size_t i = 0; i < scalerloc.size(); i++) {
+  for (size_t i = 0; i < scalerloc.size(); i++)  {
     size_t ivar = scalerloc[i]->ivar;
     size_t isca = scalerloc[i]->iscaler;
     size_t ichan = scalerloc[i]->ichan;
     if (evcount==0) {
-    	if (fDebugFile) *fDebugFile << "Debug dvarsFirst "<<i<<"   "<<ivar<<"  "<<isca<<"  "<<ichan<<endl;
-    	if ((ivar < scalerloc.size()) &&
-		(isca < scalers.size()) &&
-		(ichan < MAXCHAN)) {
-                    if(fUseFirstEvent) {
-                        if (scalerloc[ivar]->ikind == ICOUNT) {
-                                dvars[ivar] = scalers[isca]->GetData(ichan);
-                                dvarsFirst[ivar] = 0;
-                        }
-          	        if (scalerloc[ivar]->ikind == IRATE) {
-                                dvars[ivar] = scalers[isca]->GetRate(ichan);
-                                dvarsFirst[ivar] = dvars[ivar];
-                        }
-			//	if(scalerloc[ivar]->ikind == ICURRENT){
-			// dvars[ivar] = scalers[isca]->GetCurrent(ichan);
-			//dvarsFirst[ivar] = dvars[ivar];
-			//}
-          		if (fDebugFile) *fDebugFile << "   dvarsFirst  "<<scalerloc[ivar]->ikind<<"  "<<dvarsFirst[ivar]<<endl;
-
-                    } else {
-      			if (scalerloc[ivar]->ikind == ICOUNT) dvarsFirst[ivar] = scalers[isca]->GetData(ichan);
-      			if (scalerloc[ivar]->ikind == IRATE)  dvarsFirst[ivar] = scalers[isca]->GetRate(ichan);
-			//if (scalerloc[ivar]->ikind == ICURRENT) dvarsFirst[ivar] = scalers[isca]->GetCurrent(ichan);
-      			if (fDebugFile) *fDebugFile << "   dvarsFirst  "<<scalerloc[ivar]->ikind<<"  "<<dvarsFirst[ivar]<<endl;
-                    }
-        } else {
-      			cout << "THcScalerEvtHandler:: ERROR:: incorrect index "<<ivar<<"  "<<isca<<"  "<<ichan<<endl;
-        }
-    }else{
-    	if (fDebugFile) *fDebugFile << "Debug dvars "<<i<<"   "<<ivar<<"  "<<isca<<"  "<<ichan<<endl;
-    	if ((ivar < scalerloc.size()) &&
-		(isca < scalers.size()) &&
-		(ichan < MAXCHAN)) {
-      			if (scalerloc[ivar]->ikind == ICOUNT) dvars[ivar] = scalers[isca]->GetData(ichan)-dvarsFirst[ivar];
-      			if (scalerloc[ivar]->ikind == IRATE)  dvars[ivar] = scalers[isca]->GetRate(ichan);
-      			//if (scalerloc[ivar]->ikind == ICURRENT) dvars[ivar] = scalers[isca]->GetCurrent(ichan);
-			if (fDebugFile) *fDebugFile << "   dvars  "<<scalerloc[ivar]->ikind<<"  "<<dvars[ivar]<<endl;
-    	} else {
-      			cout << "THcScalerEvtHandler:: ERROR:: incorrect index "<<ivar<<"  "<<isca<<"  "<<ichan<<endl;
-    	}
+      if (fDebugFile) *fDebugFile << "Debug dvarsFirst "<<i<<"   "<<ivar<<"  "<<isca<<"  "<<ichan<<endl;
+      if ((ivar < scalerloc.size()) &&
+	  (isca < scalers.size()) &&
+	  (ichan < MAXCHAN)){
+	if(fUseFirstEvent){
+	  if (scalerloc[ivar]->ikind == ICOUNT){
+	    dvars[ivar] = scalers[isca]->GetData(ichan);
+	    dvarsFirst[ivar] = 0;
+	  }
+	  if (scalerloc[ivar]->ikind == IRATE) {
+	    dvars[ivar] = scalers[isca]->GetRate(ichan);
+	    dvarsFirst[ivar] = dvars[ivar];
+	    //printf("%s %f\n",scalerloc[ivar]->name.Data(),scalers[isca]->GetRate(ichan)); //checks
+	  }
+	  if(scalerloc[ivar]->ikind == ICURRENT){
+	    Int_t bcm_ind=0;
+	    for(Int_t itemp =0; itemp<fNumBCMs;itemp++)
+	      {		
+		size_t match = string(scalerloc[ivar]->name.Data()).find(string(fBCM_Name[itemp]));
+		if (match!=string::npos)
+		  {
+		    bcm_ind=itemp;
+		  }
+	      }
+	    dvarsFirst[ivar]=(scalers[isca]->GetRate(ichan)-fBCM_Offset[bcm_ind])/fBCM_Gain[bcm_ind];
+	    printf("event %i index %i fBCMname %s scalerloc %s offset %f gain %f getrate %f computed%f\n",evcount, bcm_ind, fBCM_Name[bcm_ind],scalerloc[ivar]->name.Data(),fBCM_Offset[bcm_ind],fBCM_Gain[bcm_ind],scalers[isca]->GetRate(ichan),dvarsFirst[ivar]);
+	  }
+	  
+	  if (fDebugFile) *fDebugFile << "   dvarsFirst  "<<scalerloc[ivar]->ikind<<"  "<<dvarsFirst[ivar]<<endl;
+	  
+	} else { //ifnotusefirstevent-guessing it doesn't need changing since irate is the same as when you use fusefirstevent
+	  if (scalerloc[ivar]->ikind == ICOUNT) dvarsFirst[ivar] = scalers[isca]->GetData(ichan);
+	  if (scalerloc[ivar]->ikind == IRATE)  {
+	    dvarsFirst[ivar] = scalers[isca]->GetRate(ichan);
+ 	    //printf("%s %f\n",scalerloc[ivar]->name.Data(),scalers[isca]->GetRate(ichan)); //checks
+	  }
+	  if(scalerloc[ivar]->ikind == ICURRENT)
+	    {
+	      Int_t bcm_ind=0;
+	      for(Int_t itemp =0; itemp<fNumBCMs;itemp++)
+		{		
+		  size_t match = string(scalerloc[ivar]->name.Data()).find(string(fBCM_Name[itemp]));
+		  if (match!=string::npos)
+		    {
+		      bcm_ind=itemp;
+		    }
+		}
+	      dvarsFirst[ivar]=(scalers[isca]->GetRate(ichan)-fBCM_Offset[bcm_ind])/fBCM_Gain[bcm_ind];
+	      printf("event %i index %i fBCM name %s scalerloc %s offset %f gain %f getrate%f\n", evcount, bcm_ind, fBCM_Name[bcm_ind],scalerloc[ivar]->name.Data(),fBCM_Offset[bcm_ind],fBCM_Gain[bcm_ind],scalers[isca]->GetRate(ichan));
+	    }
+	  if (fDebugFile) *fDebugFile << "   dvarsFirst  "<<scalerloc[ivar]->ikind<<"  "<<dvarsFirst[ivar]<<endl;
+	}
+      } 
+      else {
+	cout << "THcScalerEvtHandler:: ERROR:: incorrect index "<<ivar<<"  "<<isca<<"  "<<ichan<<endl;
+      }
+    }else{ //evcount=/=0
+      if (fDebugFile) *fDebugFile << "Debug dvars "<<i<<"   "<<ivar<<"  "<<isca<<"  "<<ichan<<endl;
+      if ((ivar < scalerloc.size()) &&
+	  (isca < scalers.size()) &&
+	  (ichan < MAXCHAN)) {
+	if (scalerloc[ivar]->ikind == ICOUNT) dvars[ivar] = scalers[isca]->GetData(ichan)-dvarsFirst[ivar];
+	if (scalerloc[ivar]->ikind == IRATE) {
+	  dvars[ivar] = scalers[isca]->GetRate(ichan);
+	  // printf("%s %f\n",scalerloc[ivar]->name.Data(),scalers[isca]->GetRate(ichan));//checks
+	}
+	if(scalerloc[ivar]->ikind == ICURRENT)
+	  {
+	    Int_t bcm_ind=0;
+	    for(Int_t itemp =0; itemp<fNumBCMs;itemp++)
+	      {		
+		size_t match = string(scalerloc[ivar]->name.Data()).find(string(fBCM_Name[itemp]));
+		if (match!=string::npos)
+		  {
+		    bcm_ind=itemp;
+		  }
+	      }
+	    dvarsFirst[ivar]=(scalers[isca]->GetRate(ichan)-fBCM_Offset[bcm_ind])/fBCM_Gain[bcm_ind];
+	    printf("event %i index %i fBCMname %s scalerloc %s offset %f gain %f getrate %f computed%f\n",evcount, bcm_ind, fBCM_Name[bcm_ind],scalerloc[ivar]->name.Data(),fBCM_Offset[bcm_ind],fBCM_Gain[bcm_ind],scalers[isca]->GetRate(ichan),dvarsFirst[ivar]);
+	  }  
+	if (fDebugFile) *fDebugFile << "   dvars  "<<scalerloc[ivar]->ikind<<"  "<<dvars[ivar]<<endl;
+      } else {
+	cout << "THcScalerEvtHandler:: ERROR:: incorrect index "<<ivar<<"  "<<isca<<"  "<<ichan<<endl;
+      }
     }
+    
   }
-
+  
   evcount = evcount + 1;
   evcountR = evcount;
-
+  
   for (size_t j=0; j<scalers.size(); j++) scalers[j]->Clear("");
-
+  
   if (fDebugFile) *fDebugFile << "scaler tree ptr  "<<fScalerTree<<endl;
 
   if (fScalerTree) fScalerTree->Fill();
-- 
GitLab