From 2b38358f76c51da9f49195d96a8dbcb0a3b568d8 Mon Sep 17 00:00:00 2001
From: Carlos Yero <cyero002@fiu.edu>
Date: Tue, 13 Jun 2017 14:16:31 -0400
Subject: [PATCH] Modify HMS and SHMS calorimeter calibration codes to comply
 with latest naming conventions in hcana code.

       Change of tree branch names in THcShowerCalib.h and
       THcPShowerCalib.h.
---
 CALIBRATION/hms_cal_calib/THcShowerCalib.h   | 16 ++---
 CALIBRATION/shms_cal_calib/THcPShowerCalib.h | 68 ++++++++++++++++----
 2 files changed, 65 insertions(+), 19 deletions(-)

diff --git a/CALIBRATION/hms_cal_calib/THcShowerCalib.h b/CALIBRATION/hms_cal_calib/THcShowerCalib.h
index 523ea33c..f11f84c0 100644
--- a/CALIBRATION/hms_cal_calib/THcShowerCalib.h
+++ b/CALIBRATION/hms_cal_calib/THcShowerCalib.h
@@ -205,24 +205,24 @@ void THcShowerCalib::Init() {
 
   // Set branch addresses.
 
-  fTree->SetBranchAddress("H.cal.1pr.aneg_p",H_cal_1pr_aneg_p,
+  fTree->SetBranchAddress("H.cal.1pr.goodNegAdcPulseInt", H_cal_1pr_aneg_p,
 			  &b_H_cal_1pr_aneg_p);
-  fTree->SetBranchAddress("H.cal.1pr.apos_p",H_cal_1pr_apos_p,
+  fTree->SetBranchAddress("H.cal.1pr.goodPosAdcPulseInt", H_cal_1pr_apos_p,
 			  &b_H_cal_1pr_apos_p);
 
-  fTree->SetBranchAddress("H.cal.2ta.aneg_p",H_cal_2ta_aneg_p,
+  fTree->SetBranchAddress("H.cal.2ta.goodNegAdcPulseInt", H_cal_2ta_aneg_p,
 			  &b_H_cal_2ta_aneg_p);
-  fTree->SetBranchAddress("H.cal.2ta.apos_p",H_cal_2ta_apos_p,
+  fTree->SetBranchAddress("H.cal.2ta.goodPosAdcPulseInt", H_cal_2ta_apos_p,
 			  &b_H_cal_2ta_apos_p);
 
-  fTree->SetBranchAddress("H.cal.3ta.aneg_p",H_cal_3ta_aneg_p,
+  fTree->SetBranchAddress("H.cal.3ta.goodNegAdcPulseInt", H_cal_3ta_aneg_p,
 			  &b_H_cal_3ta_aneg_p);
-  fTree->SetBranchAddress("H.cal.3ta.apos_p",H_cal_3ta_apos_p,
+  fTree->SetBranchAddress("H.cal.3ta.goodPosAdcPulseInt", H_cal_3ta_apos_p,
 			  &b_H_cal_3ta_apos_p);
 
-  fTree->SetBranchAddress("H.cal.4ta.aneg_p",H_cal_4ta_aneg_p,
+  fTree->SetBranchAddress("H.cal.4ta.goodNegAdcPulseInt", H_cal_4ta_aneg_p,
 			  &b_H_cal_4ta_aneg_p);
-  fTree->SetBranchAddress("H.cal.4ta.apos_p",H_cal_4ta_apos_p,
+  fTree->SetBranchAddress("H.cal.4ta.goodPosAdcPulseInt", H_cal_4ta_apos_p,
 			  &b_H_cal_4ta_apos_p);
 
   fTree->SetBranchAddress("H.tr.n", &H_tr_n,&b_H_tr_n);
diff --git a/CALIBRATION/shms_cal_calib/THcPShowerCalib.h b/CALIBRATION/shms_cal_calib/THcPShowerCalib.h
index bb461351..4200a0c2 100644
--- a/CALIBRATION/shms_cal_calib/THcPShowerCalib.h
+++ b/CALIBRATION/shms_cal_calib/THcPShowerCalib.h
@@ -18,6 +18,8 @@
 
 #include <time.h>
 
+#include <vector>
+
 #define D_CALO_FP 275.    //distance from FP to the Preshower
 
 //Whole calorimeter fid. limits
@@ -36,6 +38,8 @@
 #define BETA_MAX 1.5
 
 #define HGCER_NPE_MIN 2
+//#define NGCER_NPE_MIN 2
+#define NGCER_NPE_MIN 0.   //
 
 #define MIN_HIT_COUNT 5   //Minimum number of hits for a PMT to be calibrated.
 
@@ -84,7 +88,7 @@ class THcPShowerCalib {
 
   Double_t        P_pr_apos_p[THcPShTrack::fNrows_pr];
   Double_t        P_pr_aneg_p[THcPShTrack::fNrows_pr];
-  Double_t        P_sh_a_p[THcPShTrack::fNcols_sh][THcPShTrack::fNrows_sh];
+  Double_t        P_sh_a_p[THcPShTrack::fNcols_sh*THcPShTrack::fNrows_sh];
 
   // Track parameters.
 
@@ -98,9 +102,13 @@ class THcPShowerCalib {
   Double_t        P_tr_tg_dp;
 
   Double_t        P_hgcer_npe[4];
+  Double_t        P_ngcer_npe[4];
   Double_t        P_tr_beta;
 
-  Double_t        P_cal_nclust;
+  Double_t        P_cal_nclust;          //Preshower
+  Double_t        P_cal_ntracks;         //Preshower
+  Double_t        P_cal_fly_nclust;      //Shower
+  Double_t        P_cal_fly_ntracks;     //Shower
 
   TBranch* b_P_tr_p;
   TBranch* b_P_pr_apos_p;
@@ -113,9 +121,13 @@ class THcPShowerCalib {
   TBranch* b_P_tr_yp;
   TBranch* b_P_tr_tg_dp;
   TBranch* b_P_hgcer_npe;
+  TBranch* b_P_ngcer_npe;
   TBranch* b_P_tr_beta;
 
   TBranch* b_P_cal_nclust;
+  TBranch* b_P_cal_ntracks;
+  TBranch* b_P_cal_fly_nclust;
+  TBranch* b_P_cal_fly_ntracks;
 
   // Quantities for calculations of the calibration constants.
 
@@ -191,9 +203,12 @@ void THcPShowerCalib::Init() {
   fNentries = fTree->GetEntries();
   cout << "THcPShowerCalib::Init: fNentries= " << fNentries << endl;
 
-  fTree->SetBranchAddress("P.cal.pr.apos_p",P_pr_apos_p,&b_P_pr_apos_p);
-  fTree->SetBranchAddress("P.cal.pr.aneg_p",P_pr_aneg_p,&b_P_pr_aneg_p);
-  fTree->SetBranchAddress("P.cal.fly.a_p",  P_sh_a_p,   &b_P_sh_a_p);
+  fTree->SetBranchAddress("P.cal.pr.goodPosAdcPulseInt", P_pr_apos_p,
+			  &b_P_pr_apos_p);
+  fTree->SetBranchAddress("P.cal.pr.goodNegAdcPulseInt", P_pr_aneg_p, 
+			  &b_P_pr_aneg_p);
+  fTree->SetBranchAddress("P.cal.fly.goodAdcPulseInt",  P_sh_a_p,
+			  &b_P_sh_a_p);
 
   fTree->SetBranchAddress("P.tr.n", &P_tr_n,&b_P_tr_n);
   fTree->SetBranchAddress("P.tr.x", &P_tr_x,&b_P_tr_x);
@@ -205,17 +220,23 @@ void THcPShowerCalib::Init() {
   fTree->SetBranchAddress("P.tr.tg_dp", &P_tr_tg_dp,&b_P_tr_tg_dp);
  
   fTree->SetBranchAddress("P.hgcer.npe", P_hgcer_npe,&b_P_hgcer_npe);
+  fTree->SetBranchAddress("P.ngcer.npe", P_ngcer_npe,&b_P_ngcer_npe);
 
   fTree->SetBranchAddress("P.tr.beta", &P_tr_beta,&b_P_tr_beta);
 
   fTree->SetBranchAddress("P.cal.nclust", &P_cal_nclust,&b_P_cal_nclust);
+  fTree->SetBranchAddress("P.cal.ntracks", &P_cal_ntracks,&b_P_cal_ntracks);
+  fTree->SetBranchAddress("P.cal.fly.nclust", &P_cal_fly_nclust,
+			  &b_P_cal_fly_nclust);
+  fTree->SetBranchAddress("P.cal.fly.ntracks", &P_cal_fly_ntracks,
+			  &b_P_cal_fly_ntracks);
 
   // Histogram declarations.
 
   hEunc = new TH1F("hEunc", "Edep/P uncalibrated", 500, 0., 10.);
   hEcal = new TH1F("hEcal", "Edep/P calibrated", 200, 0., 2.);
   hDPvsEcal = new TH2F("hDPvsEcal", "#DeltaP versus Edep/P ",
-		       400,0.,2., 250,-12.5,22.5);
+		       400,0.,2., 440,DELTA_MIN-1.,DELTA_MAX+1.);
   hESHvsEPR = new TH2F("hESHvsEPR", "E_{SH} versus E_{PR}",
 		       300,0.,1.5, 300,0.,1.5);
 
@@ -327,7 +348,8 @@ bool THcPShowerCalib::ReadShRawTrack(THcPShTrack &trk, UInt_t ientry) {
 
   if (P_tr_n != 1) return 0;
 
-  if (P_cal_nclust != 1) return 0;
+  //  if (P_cal_nclust != 1) return 0;
+  //  if (P_cal_fly_nclust != 1) return 0;
 
   bool good_trk =   P_tr_tg_dp > DELTA_MIN &&
 		    P_tr_tg_dp < DELTA_MAX &&
@@ -337,6 +359,12 @@ bool THcPShowerCalib::ReadShRawTrack(THcPShTrack &trk, UInt_t ientry) {
 		    P_tr_y + P_tr_yp*D_CALO_FP < YMAX ;
   if (!good_trk) return 0;
 
+  bool good_ngcer = P_ngcer_npe[0] > NGCER_NPE_MIN ||
+		    P_ngcer_npe[1] > NGCER_NPE_MIN ||
+		    P_ngcer_npe[2] > NGCER_NPE_MIN ||
+		    P_ngcer_npe[3] > NGCER_NPE_MIN  ;
+  if(!good_ngcer) return 0;
+
   bool good_hgcer = P_hgcer_npe[0] > HGCER_NPE_MIN ||
 		    P_hgcer_npe[1] > HGCER_NPE_MIN ||
 		    P_hgcer_npe[2] > HGCER_NPE_MIN ||
@@ -347,9 +375,6 @@ bool THcPShowerCalib::ReadShRawTrack(THcPShTrack &trk, UInt_t ientry) {
                    P_tr_beta < BETA_MAX ;
   if(!good_beta) return 0;
 
-  //  cout << "    Track is good." << endl << endl;
-  //  getchar();
-
   // Set track coordinates and slopes at the face of Preshower.
 
   trk.Reset(P_tr_p, P_tr_tg_dp, P_tr_x+D_CALO_FP*P_tr_xp, P_tr_xp,
@@ -377,7 +402,7 @@ bool THcPShowerCalib::ReadShRawTrack(THcPShTrack &trk, UInt_t ientry) {
   for (UInt_t k=0; k<THcPShTrack::fNcols_sh; k++) {
     for (UInt_t j=0; j<THcPShTrack::fNrows_sh; j++) {
       nb++;
-      Double_t adc = P_sh_a_p[k][j];
+      Double_t adc = P_sh_a_p[k*THcPShTrack::fNrows_sh + j];
       if (adc > SH_ADC_THR) {
 	trk.AddHit(adc, 0., nb);
       }
@@ -500,6 +525,27 @@ void THcPShowerCalib::ComposeVMs() {
     for (UInt_t j=0; j<THcPShTrack::fNpmts; j++)
       Qout << setprecision(20) << fQ[i][j] << " " << i << " " << j << endl;
   Qout.close();
+
+  ofstream sout;
+  sout.open("signal.deb",ios::out);
+  for (UInt_t i=0; i<THcPShTrack::fNpmts; i++) {
+    double sig_sum = fq0[i] * fNev;
+    double sig2_sum = fQ[i][i] * fNev;
+    int nhit = fHitCount[i];
+    double sig = 0.;
+    double err = 0.;
+    if (nhit != 0) {
+      sig = sig_sum/nhit;
+      double rms2 = sig2_sum/nhit - (sig_sum/nhit)*(sig_sum/nhit);
+      if (rms2 > 0.) {
+	double rms = TMath::Sqrt(rms2);
+	err = rms/TMath::Sqrt(double(nhit));
+      }
+    }
+
+    sout << sig << " " << err << " " << nhit << " " << i << endl;
+  }
+  sout.close();
   */
 };
 
-- 
GitLab