Thanks,
Damon Spayde
--------------------------------
Damon Spayde
Department of Physics
University of Maryland
PO Box 175
College Park, MD 20742
Phone: (301) 405-6113
Fax: (301) 405-8558
e-mail: dspayde@physics.umd.edu
--------------------------------
//////////////////////////////////////////////////////////////////
// //
// dotout_hist -- Create a histogram of a *.out file's contents //
// //
// Author: Damon Spayde //
// //
// Usage: //
// //
// Caveats: //
// 1) Assumes that badruns file and ADC files are sorted. //
// //
//////////////////////////////////////////////////////////////////
#include <fstream.h>
struct Badrun
{
Int_t low;
Int_t high;
};
struct Adc
{
Int_t runnumber;
Int_t helicity;
Int_t events;
Double_t yield;
Double_t yield_error;
Double_t yield_width;
Int_t pulsepairs;
Double_t asym;
Double_t asym_error;
Double_t asym_width;
};
const Int_t IN = -1;
const Int_t OUT = 1;
const Double_t PPM = 1.0e6;
Int_t dotout_hist(Char_t *adc_file,Int_t first_run,Int_t last_run, Char_t *badruns_file = "badruns.dat")
{
// Initialization
Adc adc;
Badrun badrun;
ifstream BADRUNSfile(badruns_file); // Open badruns.dat for
// reading
if(BADRUNSfile.bad()) {
cerr << "Error: Could not open badruns_file.\n";
exit(7);
}
Char_t adc_filename[40];
sprintf(adc_filename,"%s.out",adc_file);
ifstream ADCfile(adc_filename); // Open appropriate .out file for
// reading
if(ADCfile.bad()) {
cerr << "Error: Could not open adc_filename.\n";
exit(8);
}
Char_t hname[20];
Char_t htitle[80];
sprintf(hname,"h_%s",adc_file);
sprintf(htitle,"Weighted Asymmetry Histogram in %s over Runs
%d to %d, Both Wave Plate States",adc_file,first_run,last_run);
TH1F *adc_hist = new TH1F(hname,htitle,200,-100,100); //Create a new
//histogram
sprintf(hname,"h_in_%s",adc_file);
sprintf(htitle,"Weighted Asymmetry Histogram in %s over Runs %d to
%d, Wave Plate In",adc_file,first_run,last_run);
TH1F *adc_in_hist = new TH1F(hname,htitle,200,-100,100); //Create a new
//histogram
sprintf(hname,"h_out_%s",adc_file);
sprintf(htitle,"Weighted Asymmetry Histogram in %s over Runs %d to
%d, Wave Plate Out",adc_file,first_run,last_run);
TH1F *adc_out_hist = new TH1F(hname,htitle,200,-100,100); //Create a new
//histogram
adc_hist->Sumw2(); // Record sum of weights for each bin of
// histogram
adc_in_hist->Sumw2(); // Record sum of weights for each bin of
// histogram
adc_out_hist->Sumw2(); // Record sum of weights for each bin of
// histogram
// Loop over the adc file until line corresponding to first run or
// greater is loaded into the first struct
do {
ADCfile >> adc.runnumber >> adc.helicity;
ADCfile >> adc.events >> adc.yield >> adc.yield_error;
ADCfile >> adc.pulsepairs >> adc.asym >> adc.asym_error;
// cout << adc.runnumber << ": " << adc.asym << "\n";
} while (adc.runnumber < (first_run - 1));
do {
BADRUNSfile >> badrun.low >> badrun.high;
} while (badrun.high < first_run);
// Loop over all file lines
Int_t i = ;
Int_t j = ;
while(adc.runnumber >= (first_run - 1) && adc.runnumber <= last_run) {
ADCfile >> adc.runnumber >> adc.helicity;
ADCfile >> adc.events >> adc.yield >> adc.yield_error;
ADCfile >> adc.pulsepairs >> adc.asym >> adc.asym_error;
adc.asym *= PPM;
adc.asym_error *= PPM;
adc.yield_width = adc.yield * sqrt(adc.events);
adc.asym_width = adc.asym * sqrt(adc.pulsepairs);
cout << adc.runnumber << ": " << adc.asym << "\n";
do {
if (badrun.high < adc.runnumber) { // Is it necessary to read
// another line of
// badruns.dat?
BADRUNSfile >> badrun.low >> badrun.high;
}
if (adc.runnumber < badrun.low) {
// Put hist fill here
adc_hist->Fill((Axis_t) adc.helicity*adc.asym,(Stat_t)
1.0/(adc.asym_error * adc.asym_error));
switch (adc.helicity) {
case IN:
adc_in_hist->Fill((Axis_t) adc.asym,(Stat_t) 1.0/(adc.asym_error * adc.asym_error));
break;
case OUT:
adc_out_hist->Fill((Axis_t) adc.asym,(Stat_t) 1.0/(adc.asym_error * adc.asym_error));
break;
default:
printf("Error: helicity not equal to +/-1 for run
%d.\n",adc.runnumber);
break;
}
}
} while (badrun.high < adc.runnumber);
}
ADCfile.close();
BADRUNSfile.close();
Char_t ctitle[40];
sprintf(ctitle,"%s Histograms",adc_file);
TCanvas *c2 = new TCanvas("c2",ctitle,600,777);
c2->SetBorderMode(0);
c2->SetFillColor(0);
gStyle->SetPadBorderMode(0);
gStyle->SetFillColor(0);
c2->Divide(1,3);
c2->cd(1);
adc_in_hist->Draw("B");
adc_in_hist->Print();
gPad->SetLogy(1);
gPad->Modified();
c2->cd(2);
adc_out_hist->Draw("B");
adc_out_hist->Print();
gPad->SetLogy(1);
gPad->Modified();
c2->cd(3);
adc_hist->Draw("B");
adc_hist->Print();
gPad->SetLogy(1);
gPad->Modified();
c2->Modified();
}