Example of Using Scaler Classes to Compute the Charge Asymmetry

Robert Michaels, rom@jlab.org, Jefferson Lab Hall A, May 2001

This file:     hallaweb.jlab.org/equipment/daq/tscalasy_main.html


The following example shows how to use the hana_scaler package to read a CODA file and compute the helicity correlated charge asymmetry, something quite relevant for A1n/g2n.

//--------------------------------------------------------
//  tscalasy_main.C
//
//  Example to compute helicity correlated charge asymmetry
//  R. Michaels, May 2001
//--------------------------------------------------------

#include < iostream >
#include < string >
#include "THaScaler.h"

int main(int argc, char* argv[]) {

   cout << "Enter name of CODA file ->" << endl;
   string filename;  cin >> filename;  
   cout << "Enter bank 'Right' or 'Left' (spectrometer) ->" << endl;
   string bank;  cin >> bank;

   THaScaler scaler;
   if (scaler.Init("7-4-1999",bank) == -1) {  // "day-month-year", or "now"
      cout << "Error initializing scalers" << endl;  return 1;
   }

   Double_t beamcut = 50;
   Double_t au3,ad10;  // this example treats Upstream-x3 and Downstream-x10.
   Double_t au3sum,au3sq,ad10sum,ad10sq,sum,xcnt;
   au3sum=0; au3sq = 0; ad10sum = 0; ad10sq = 0; xcnt = 0;

   while ( scaler.LoadDataCodaFile(filename) ) {  // each call gets 1 event

     Double_t iu3  = scaler.GetBcmRate("bcm_u3");  
     Double_t id10 = scaler.GetBcmRate("bcm_d10");

     if (iu3 > beamcut && id10 > beamcut) {   // probably want better cuts
       sum = scaler.GetBcmRate(1,"bcm_u3") + 
                 scaler.GetBcmRate(-1,"bcm_u3");
       if (sum > 0) {
	 au3 = (scaler.GetBcmRate(1,"bcm_u3") - 
                 scaler.GetBcmRate(-1,"bcm_u3"))/ sum;
       } // else  {  // error, do something  }

       sum = scaler.GetBcmRate(1,"bcm_d10") + 
                 scaler.GetBcmRate(-1,"bcm_d10");
       if (sum > 0) {
	 ad10 = (scaler.GetBcmRate(1,"bcm_d10") - 
                 scaler.GetBcmRate(-1,"bcm_d10"))/ sum;
       }  // else {  // error, do something }

// fill ntuple or whatever
       au3sum = au3sum + au3;  au3sq = au3sq + au3*au3;
       ad10sum = ad10sum + ad10;  ad10sq = ad10sq + ad10*ad10;
       xcnt = xcnt + 1.;
     }
   }

   if (xcnt > 0) {
     au3 = au3sum / xcnt;
     Double_t au3sig = sqrt(au3sq/xcnt - au3*au3);     
     ad10 = ad10sum / xcnt;
     Double_t ad10sig = sqrt(ad10sq/xcnt - ad10*ad10);     
     cout << "Upstr x3  Asym    = " << au3 << " +/- " << au3sig << endl;
     cout << "Downstr x10  Asym = " << ad10 << " +/- " << ad10sig << endl;
   } else {
     cout << "No statistics !  Maybe no events ?\n";
   }
   return 0;
}