From 9d84f07614947c28f8968e229af74cd87bd1afc2 Mon Sep 17 00:00:00 2001
From: Eric Pooser <pooser@jlab.org>
Date: Thu, 26 Jan 2017 14:54:17 -0500
Subject: [PATCH] Add infrastructure for SHMS aerogel replay

---
 DBASE/general.param                    |   1 +
 DEF-files/SHMS/AERO/paeroana.def       |  27 +++++++
 DEF-files/SHMS/AERO/paeroana_cuts.def  |  14 ++++
 MAPS/SHMS/DETEC/paero.map              |  30 ++++----
 MAPS/SHMS/DETEC/paero_ptrig.map        |  83 ++++++++++++++++++++
 PARAM/SHMS/AERO/paero.param            |  11 +++
 PARAM/SHMS/GEN/pcana.param             |   5 +-
 SCRIPTS/SHMS/replay_paero_test_stand.C | 100 +++++++++++++++++++++++++
 8 files changed, 255 insertions(+), 16 deletions(-)
 create mode 100644 DEF-files/SHMS/AERO/paeroana.def
 create mode 100644 DEF-files/SHMS/AERO/paeroana_cuts.def
 create mode 100644 MAPS/SHMS/DETEC/paero_ptrig.map
 create mode 100644 PARAM/SHMS/AERO/paero.param
 create mode 100644 SCRIPTS/SHMS/replay_paero_test_stand.C

diff --git a/DBASE/general.param b/DBASE/general.param
index 22c8b72d..fed1a220 100644
--- a/DBASE/general.param
+++ b/DBASE/general.param
@@ -34,6 +34,7 @@ raddeg=3.14159265/180
 #include "PARAM/SHMS/GEN/ptracking.param"
 
 ; SHMS detector specific paramter files
+#include "PARAM/SHMS/AERO/paero.param"
 #include "PARAM/SHMS/CAL/pcal.param"
 #include "PARAM/SHMS/DC/pdc.pos"
 #include "PARAM/SHMS/DC/pdc.param"
diff --git a/DEF-files/SHMS/AERO/paeroana.def b/DEF-files/SHMS/AERO/paeroana.def
new file mode 100644
index 00000000..8fd195a7
--- /dev/null
+++ b/DEF-files/SHMS/AERO/paeroana.def
@@ -0,0 +1,27 @@
+# See $ANALYZER/examples/output_example.def for examples
+#
+block P.aero.*
+block T.shms.*
+
+TH1F paero-_occu 'SHMS Aero- Occupancy; Counter Number; Number of Entries' P.aero.negAdcCounter 7 0.5 7.5
+TH1F paero+_occu 'SHMS Aero+ Occupancy; Counter Number; Number of Entries' P.aero.posAdcCounter 7 0.5 7.5
+
+TH2F paero-_rawped_vs_cntr 'SHMS Aero- Raw Pulse Pedestal vs. Counter Number; Counter Number; Raw Pulse Pedestal / 10 ADC Units' P.aero.negAdcCounter P.aero.negAdcPedRaw 7 0.5 7.5 1000 0 10000
+TH2F paero-_rawpi_vs_cntr 'SHMS Aero- Raw Pulse Integral vs. Counter Number; Counter Number; Raw Pulse Integral / 10 ADC Units' P.aero.negAdcCounter P.aero.negAdcPulseIntRaw 7 0.5 7.5 4000 0 40000
+TH2F paero-_rawpped_vs_cntr 'SHMS Aero- Raw Pulse Peak vs. Counter Number; Counter Number; Raw Pulse Peak / 10 ADC Units' P.aero.negAdcCounter P.aero.negAdcPulseAmpRaw 7 0.5 7.5 410 0 4100
+TH2F paero-_rawptime_vs_cntr 'SHMS Aero- Raw Pulse Time vs. Counter Number; Counter Number;  Raw Pulse Time / 10 ADC Units' P.aero.negAdcCounter P.aero.negAdcPulseTimeRaw 7 0.5 7.5 1000 0 10000
+
+TH2F paero+_rawped_vs_cntr 'SHMS Aero+ Raw Pulse Pedestal vs. Counter Number; Counter Number; Raw Pulse Pedestal / 10 ADC Units' P.aero.posAdcCounter P.aero.posAdcPedRaw 7 0.5 7.5 1000 0 10000
+TH2F paero+_rawpi_vs_cntr 'SHMS Aero+ Raw Pulse Integral vs. Counter Number; Counter Number; Raw Pulse Integral / 10 ADC Units' P.aero.posAdcCounter P.aero.posAdcPulseIntRaw 7 0.5 7.5 4000 0 40000
+TH2F paero+_rawpped_vs_cntr 'SHMS Aero+ Raw Pulse Peak vs. Counter Number; Counter Number; Raw Pulse Peak / 10 ADC Units' P.aero.posAdcCounter P.aero.posAdcPulseAmpRaw 7 0.5 7.5 410 0 4100
+TH2F paero+_rawptime_vs_cntr 'SHMS Aero+ Raw Pulse Time vs. Counter Number; Counter Number;  Raw Pulse Time / 10 ADC Units' P.aero.negAdcCounter P.aero.negAdcPulseTimeRaw 7 0.5 7.5 1000 0 10000
+
+TH2F paero-_ped_vs_cntr 'SHMS Aero- Pulse Pedestal vs. Counter Number; Counter Number;  Pulse Pedestal / 10 ADC Units' P.aero.negAdcCounter P.aero.negAdcPed 7 0.5 7.5 1000 0 10000
+TH2F paero-_pi_vs_cntr 'SHMS Aero- Pulse Integral vs. Counter Number; Counter Number;  Pulse Integral / 10 ADC Units' P.aero.negAdcCounter P.aero.negAdcPulseInt 7 0.5 7.5 4000 0 40000
+TH2F paero-_pped_vs_cntr 'SHMS Aero- Pulse Peak vs. Counter Number; Counter Number;  Pulse Peak / 10 ADC Units' P.aero.negAdcCounter P.aero.negAdcPulseAmp 7 0.5 7.5 410 0 4100
+
+TH2F paero+_ped_vs_cntr 'SHMS Aero+ Pulse Pedestal vs. Counter Number; Counter Number;  Pulse Pedestal / 10 ADC Units' P.aero.posAdcCounter P.aero.posAdcPed 7 0.5 7.5 1000 0 10000
+TH2F paero+_pi_vs_cntr 'SHMS Aero+ Pulse Integral vs. Counter Number; Counter Number;  Pulse Integral / 10 ADC Units' P.aero.posAdcCounter P.aero.posAdcPulseInt 7 0.5 7.5 4000 0 40000
+TH2F paero+_pped_vs_cntr 'SHMS Aero+ Pulse Peak vs. Counter Number; Counter Number;  Pulse Peak / 10 ADC Units' P.aero.posAdcCounter P.aero.posAdcPulseAmp 7 0.5 7.5 410 0 4100
+
+
diff --git a/DEF-files/SHMS/AERO/paeroana_cuts.def b/DEF-files/SHMS/AERO/paeroana_cuts.def
new file mode 100644
index 00000000..5add84a3
--- /dev/null
+++ b/DEF-files/SHMS/AERO/paeroana_cuts.def
@@ -0,0 +1,14 @@
+Block: RawDecode
+
+Pedestal_event 0
+RawDecode_master 1
+
+Block: Decode
+Decode_master 1
+
+Block: CoarseTracking
+CoarseTracking_master 1
+
+Block: CoarseReconstruct
+CourseReconstruct 0
+
diff --git a/MAPS/SHMS/DETEC/paero.map b/MAPS/SHMS/DETEC/paero.map
index eef46539..86e3d37e 100644
--- a/MAPS/SHMS/DETEC/paero.map
+++ b/MAPS/SHMS/DETEC/paero.map
@@ -1,4 +1,4 @@
-! SAERO_ID=25      ::  ::,ADC+,ADC-
+! PAERO_ID=25      ::  ::,ADC+,ADC-
 
 
 DETECTOR=25
@@ -6,19 +6,19 @@ DETECTOR=25
 ROC=2
 
 SLOT=10
-  10,   1,   1,   0  ! sAER01+
-  11,   1,   2,   0  ! sAER02+
-  12,   1,   3,   0  ! sAER03+
-  13,   1,   4,   0  ! sAER04+
-  14,   1,   5,   0  ! sAER05+
-  15,   1,   6,   0  ! sAER06+
+  10,   1,   1,   0  ! pAER01+
+  11,   1,   2,   0  ! pAER02+
+  12,   1,   3,   0  ! pAER03+
+  13,   1,   4,   0  ! pAER04+
+  14,   1,   5,   0  ! pAER05+
+  15,   1,   6,   0  ! pAER06+
 
 SLOT=13
-   0,   1,   7,   0  ! sAER07+
-   1,   1,   1,   1  ! sAER01-
-   2,   1,   2,   1  ! sAER02-
-   3,   1,   3,   1  ! sAER03-
-   4,   1,   4,   1  ! sAER04-
-   5,   1,   5,   1  ! sAER05-
-   6,   1,   6,   1  ! sAER06-
-   7,   1,   7,   1  ! sAER07-
+   0,   1,   7,   0  ! pAER07+
+   1,   1,   1,   1  ! pAER01-
+   2,   1,   2,   1  ! pAER02-
+   3,   1,   3,   1  ! pAER03-
+   4,   1,   4,   1  ! pAER04-
+   5,   1,   5,   1  ! pAER05-
+   6,   1,   6,   1  ! pAER06-
+   7,   1,   7,   1  ! pAER07-
diff --git a/MAPS/SHMS/DETEC/paero_ptrig.map b/MAPS/SHMS/DETEC/paero_ptrig.map
new file mode 100644
index 00000000..4371a2f3
--- /dev/null
+++ b/MAPS/SHMS/DETEC/paero_ptrig.map
@@ -0,0 +1,83 @@
+! TSHMS_ID=20      ::  ::,ADC,TDC
+! PAERO_ID=25      ::  ::,ADC,TDC
+
+
+DETECTOR=20
+
+ROC=2
+
+SLOT=14
+   0,   1,   1,   0  ! pAERSUM
+   1,   1,   2,   0  ! pHGCSUM
+   2,   1,   3,   0  ! pNGCSUM
+
+SLOT=20
+  15,   2,   1,   1  ! pT1
+
+SLOT=19
+  31,   2,   2,   1  ! pT2
+  32,   2,   3,   1  ! p1X
+  33,   2,   4,   1  ! p1Y
+  34,   2,   5,   1  ! p2X
+  35,   2,   6,   1  ! p2Y
+  36,   2,   7,   1  ! p1T
+  37,   2,   8,   1  ! p2T
+  38,   2,   9,   1  ! pT3
+  39,   2,  10,   1  ! pAERSUM
+  40,   2,  11,   1  ! pHGCSUM
+  41,   2,  12,   1  ! pNGCSUM
+
+ROC=6
+
+SLOT=6
+  79,   2,  13,   1  ! pDCREF1
+
+SLOT=7
+  79,   2,  14,   1  ! pDCREF2
+
+SLOT=8
+  79,   2,  15,   1  ! pDCREF3
+
+SLOT=9
+  79,   2,  16,   1  ! pDCREF4
+
+SLOT=10
+  79,   2,  17,   1  ! pDCREF5
+
+SLOT=11
+  47,   2,  18,   1  ! pDCREF6
+
+SLOT=12
+  47,   2,  19,   1  ! pDCREF7
+
+SLOT=13
+  47,   2,  20,   1  ! pDCREF8
+
+SLOT=14
+  15,   2,  21,   1  ! pDCREF9
+
+SLOT=15
+  47,   2,  22,   1  ! pDCREF10
+
+
+DETECTOR=25
+
+ROC=2
+
+SLOT=10
+  10,   1,   1,   0  ! pAER01+
+  11,   1,   2,   0  ! pAER02+
+  12,   1,   3,   0  ! pAER03+
+  13,   1,   4,   0  ! pAER04+
+  14,   1,   5,   0  ! pAER05+
+  15,   1,   6,   0  ! pAER06+
+
+SLOT=13
+   0,   1,   7,   0  ! pAER07+
+   1,   1,   1,   1  ! pAER01-
+   2,   1,   2,   1  ! pAER02-
+   3,   1,   3,   1  ! pAER03-
+   4,   1,   4,   1  ! pAER04-
+   5,   1,   5,   1  ! pAER05-
+   6,   1,   6,   1  ! pAER06-
+   7,   1,   7,   1  ! pAER07-
diff --git a/PARAM/SHMS/AERO/paero.param b/PARAM/SHMS/AERO/paero.param
new file mode 100644
index 00000000..c1622274
--- /dev/null
+++ b/PARAM/SHMS/AERO/paero.param
@@ -0,0 +1,11 @@
+     paero_pos_gain   = 1./168.3, 1./233.9, 1./181.3, 1./169.2, 1./177.6, 1./155.0, 1./169.5, 1./149.7,
+
+     paero_neg_gain   = 1./248.8, 1./186.4, 1./236.4, 1./172.0,
+                        1./205.3, 1./198.1, 1./227.9, 1./229.2,
+
+     paero_pos_ped_limit =  1000., 1000., 1000., 1000.,
+                            1000., 1000., 1000., 1000.,
+
+     paero_neg_ped_limit =  1000., 1000., 1000., 1000.,
+                            1000., 1000., 1000., 1000.,
+
diff --git a/PARAM/SHMS/GEN/pcana.param b/PARAM/SHMS/GEN/pcana.param
index 347bf0e2..2ba415b0 100644
--- a/PARAM/SHMS/GEN/pcana.param
+++ b/PARAM/SHMS/GEN/pcana.param
@@ -18,4 +18,7 @@ pdc_plane_names = "1u1 1u2 1x1 1x2 1v1 1v2 2v2 2v1 2x2 2x1 2u2 2u1"
 ; behavior, but one for more correct behavior
 pdc_fix_lr = 1 ; Let hit have different L/R assignment for different space point
 pdc_fix_propcorr = 1 ; do propagation along wire each time hit appeears
-                     ; in a space point
\ No newline at end of file
+                     ; in a space point
+
+; Number of aerogel pairs of pmt's
+paero_num_pairs = 7
\ No newline at end of file
diff --git a/SCRIPTS/SHMS/replay_paero_test_stand.C b/SCRIPTS/SHMS/replay_paero_test_stand.C
new file mode 100644
index 00000000..c934c040
--- /dev/null
+++ b/SCRIPTS/SHMS/replay_paero_test_stand.C
@@ -0,0 +1,100 @@
+void replay_paero_test_stand(Int_t RunNumber=0, Int_t MaxEvent=0) {
+
+  // Get RunNumber and MaxEvent if not provided.
+  if(RunNumber == 0) {
+    cout << "Enter a Run Number (-1 to exit): ";
+    cin >> RunNumber;
+    if( RunNumber<=0 ) return;
+  }
+  if(MaxEvent == 0) {
+    cout << "\nNumber of Events to analyze: ";
+    cin >> MaxEvent;
+    if(MaxEvent == 0) {
+      cerr << "...Invalid entry\n";
+      exit;
+    }
+  }
+
+  // Create file name patterns.
+  const char* RunFileNamePattern = "raw/shms_all_%05d.dat";
+  const char* ROOTFileNamePattern = "ROOTfiles/paero_replay_%d.root";
+  // Add variables to global list.
+  gHcParms->Define("gen_run_number", "Run Number", RunNumber);
+  gHcParms->AddString("g_ctp_database_filename", "DBASE/standard.database");
+
+  // Load varibles from files to global list.
+  gHcParms->Load(gHcParms->GetString("g_ctp_database_filename"), RunNumber);
+
+  // g_ctp_parm_filename and g_decode_map_filename should now be defined.
+  gHcParms->Load(gHcParms->GetString("g_ctp_kinematics_filename"), RunNumber);
+  gHcParms->Load(gHcParms->GetString("g_ctp_parm_filename"));
+
+  // Load params for HMS trigger configuration
+  gHcParms->Load("PARAM/TRIG/tshms.param");
+
+  // Load the Hall C style detector map
+  gHcDetectorMap = new THcDetectorMap();
+  gHcDetectorMap->Load("MAPS/SHMS/DETEC/paero_ptrig.map");
+  
+  // Set up the equipment to be analyzed.
+  THaApparatus* SHMS = new THcHallCSpectrometer("P", "SHMS");
+  gHaApps->Add(SHMS);
+  // Add aeroscope to HMS apparatus
+  THcAerogel* aero = new THcAerogel("aero", "Aerogel");
+  SHMS->AddDetector(aero);
+
+  // Add trigger apparatus
+  THaApparatus* TRG = new THcTrigApp("T", "TRG");
+  gHaApps->Add(TRG);
+  // Add trigger detector to trigger apparatus
+  THcTrigDet* shms = new THcTrigDet("shms", "SHMS Trigger Information");
+  TRG->AddDetector(shms);
+
+  // Set up the analyzer - we use the standard one,
+  // but this could be an experiment-specific one as well.
+  // The Analyzer controls the reading of the data, executes
+  // tests/cuts, loops over Acpparatus's and PhysicsModules,
+  // and executes the output routines.
+  THcAnalyzer* analyzer = new THcAnalyzer;
+
+  // A simple event class to be output to the resulting tree.
+  // Creating your own descendant of THaEvent is one way of
+  // defining and controlling the output.
+  THaEvent* event = new THaEvent;
+
+  // Define the run(s) that we want to analyze.
+  // We just set up one, but this could be many.
+  char RunFileName[100];
+  sprintf(RunFileName, RunFileNamePattern, RunNumber);
+  THaRun* run = new THaRun(RunFileName);
+
+  // Eventually need to learn to skip over, or properly analyze
+  // the pedestal events
+  run->SetEventRange(1, MaxEvent);    // Physics Event number, does not
+                                      // include scaler or control events.
+  run->SetNscan(1);
+  run->SetDataRequired(0x7);
+  run->Print();
+
+  // Define the analysis parameters
+  TString ROOTFileName = Form(ROOTFileNamePattern, RunNumber);
+  analyzer->SetCountMode(2);    // 0 = counter is # of physics triggers
+                                // 1 = counter is # of all decode reads
+                                // 2 = counter is event number
+ analyzer->SetEvent(event);
+ analyzer->SetCrateMapFileName("MAPS/db_cratemap.dat");
+ analyzer->SetOutFile(ROOTFileName.Data());
+ analyzer->SetOdefFile("DEF-files/SHMS/AERO/paeroana.def");
+ analyzer->SetCutFile("DEF-files/SHMS/AERO/paeroana_cuts.def");    // optional
+
+ // File to record cuts accounting information
+ //analyzer->SetSummaryFile("summary_example.log");    // optional
+
+  // Start the actual analysis.
+  analyzer->Process(run);
+  // Create report file from template.
+  //analyzer->PrintReport(    // optional
+  //  "TEMPLATES/dcana.template",
+  //  Form("REPORT_OUTPUT/replay_hms_%05d.report", RunNumber)
+  //);
+}
-- 
GitLab