diff --git a/CALIBRATION/shms_hgcer_calib/calibration.C b/CALIBRATION/shms_hgcer_calib/calibration.C index 58feb6e4c5f1630d1e013fedfd520a853d8258a0..053fdd47c810feda085dae53d3f3ad5c5728ee83 100644 --- a/CALIBRATION/shms_hgcer_calib/calibration.C +++ b/CALIBRATION/shms_hgcer_calib/calibration.C @@ -128,6 +128,20 @@ void calibration::SlaveBegin(TTree * /*tree*/) } } + //Timing and Beta cut visualizations + fBeta_Cut = new TH1F("Beta_Cut", "Beta cut used for 'good' hits;Beta;Counts", 1000, -5, 5); + GetOutputList()->Add(fBeta_Cut); + + fBeta_Full = new TH1F("Beta_Full", "Full beta for events;Beta;Counts", 1000, -5, 5); + GetOutputList()->Add(fBeta_Full); + + fTiming_Cut = new TH1F("Timing_Cut", "Timing cut used for 'good' hits;Time (ns);Counts", 10000, 1, 200); + GetOutputList()->Add(fTiming_Cut); + + fTiming_Full = new TH1F("Timing_Full", "Full timing information for events;Time (ns);Counts", 10000, 1, 200); + GetOutputList()->Add(fTiming_Full); + + //Particle ID cut visualization fCut_everything = new TH2F("Cut_everything", "Visualization of no cuts; Calorimeter Energy (GeV); Pre-Shower Energy (GeV)", 200, 0, 1.0, 200, 0, 1.0); GetOutputList()->Add(fCut_everything); fCut_electron = new TH2F("Cut_electron", "Visualization of electron cut; Calorimeter Energy (GeV); Pre-Shower Energy (GeV)", 200, 0, 1.0, 200, 0, 1.0); @@ -178,15 +192,19 @@ Bool_t calibration::Process(Long64_t entry) { if (!fFullRead) b_P_tr_beta->GetEntry(entry); //Require loose cut on particle velocity - if (TMath::Abs(P_tr_beta[itrack] -1.) > 0.2) return kTRUE; + fBeta_Full->Fill(P_tr_beta[itrack]); + if (TMath::Abs(P_tr_beta[itrack] -0.7) > 0.3) return kTRUE; + fBeta_Cut->Fill(P_tr_beta[itrack]); //Filling the histograms for (Int_t ipmt = 0; ipmt < fpmts; ipmt++) { //Perform a loose timing cut if (!fFullRead) fNGC ? b_P_ngcer_goodAdcPulseTime->GetEntry(entry) : b_P_hgcer_goodAdcPulseTime->GetEntry(entry); + fTiming_Full->Fill(fNGC ? P_ngcer_goodAdcPulseTime[ipmt] : P_hgcer_goodAdcPulseTime[ipmt]); if (fNGC ? P_ngcer_goodAdcPulseTime[ipmt] < 50 || P_ngcer_goodAdcPulseTime[ipmt] > 125 : - P_hgcer_goodAdcPulseTime[ipmt] < 70 || P_hgcer_goodAdcPulseTime[ipmt] > 135) continue; + P_hgcer_goodAdcPulseTime[ipmt] < 50 || P_hgcer_goodAdcPulseTime[ipmt] > 70) continue; + fTiming_Cut->Fill(fNGC ? P_ngcer_goodAdcPulseTime[ipmt] : P_hgcer_goodAdcPulseTime[ipmt]); //Cuts to remove entries corresponding to a PMT not registering a hit if (!fFullRead) fNGC ? b_P_ngcer_goodAdcPulseInt->GetEntry(entry) : b_P_hgcer_goodAdcPulseInt->GetEntry(entry); @@ -479,7 +497,29 @@ void calibration::Terminate() fNGC ? PulseInt[ipmt]->Rebin(20) : PulseInt[ipmt]->Rebin(20); } */ - + //Canvases to display cut information + if (fFullShow) + { + //Canvas to show beta cut information + TCanvas *Beta; + Beta = new TCanvas("Beta", "Beta information for events"); + Beta->Divide(2,1); + Beta->cd(1); + fBeta_Full->Draw(); + Beta->cd(2); + fBeta_Cut->Draw(); + + //Canvas to show timing cut information + TCanvas *Timing; + Timing = new TCanvas("Timing", "Timing information for events"); + Timing->Divide(2,1); + Timing->cd(1); + fTiming_Full->Draw(); + Timing->cd(2); + + fTiming_Cut->Draw(); + } + //Show the particle cuts performed in the histogram forming if (fCut) { @@ -560,16 +600,16 @@ void calibration::Terminate() if (xpeaks[1] < xpeaks[0]) xpeaks[1] = xpeaks[0]; //Use the peak to fit the SPE with a Gaussian to determine the mean - Gauss1->SetRange(xpeaks[1]-5, xpeaks[1]+5); - Gauss1->SetParameter(1, xpeaks[1]); + Gauss1->SetRange(xpeaks[0]-3, xpeaks[0]+3); + Gauss1->SetParameter(1, xpeaks[0]); Gauss1->SetParameter(2, 10.); Gauss1->SetParLimits(0, 0., 2000.); - Gauss1->SetParLimits(1, xpeaks[1]-10, xpeaks[1]+10); + Gauss1->SetParLimits(1, xpeaks[0]-3, xpeaks[0]+3); Gauss1->SetParLimits(2, 0.5, 10.); fFullShow ? PulseInt_quad[iquad][ipmt]->Fit("Gauss1","RQ") : PulseInt_quad[iquad][ipmt]->Fit("Gauss1","RQN"); //Store the mean of the SPE in the mean array provided it is not zero and passes a loose statistical cut. Note that indexing by ipad-1 is for convienience - if (xpeaks[1] > 2.0 && PulseInt_quad[iquad][ipmt]->GetBinContent(PulseInt_quad[iquad][ipmt]->GetXaxis()->FindBin(xpeaks[1])) > 90) mean[ipad-1] = Gauss1->GetParameter(1); + if (xpeaks[0] > 2.0 && PulseInt_quad[iquad][ipmt]->GetBinContent(PulseInt_quad[iquad][ipmt]->GetXaxis()->FindBin(xpeaks[1])) > 90) mean[ipad-1] = Gauss1->GetParameter(1); ipad++; } @@ -595,11 +635,11 @@ void calibration::Terminate() TList *functions = PulseInt[ipmt]->GetListOfFunctions(); TPolyMarker *pm = (TPolyMarker*)functions->FindObject("TPolyMarker"); Double_t *xpeaks = pm->GetX(); - Gauss1->SetRange(xpeaks[1]-5, xpeaks[1]+5); - Gauss1->SetParameter(1, xpeaks[1]); + Gauss1->SetRange(xpeaks[0]-3, xpeaks[0]+3); + Gauss1->SetParameter(1, xpeaks[0]); Gauss1->SetParameter(2, 10.); - Gauss1->SetParLimits(0, 0., 2000.); - Gauss1->SetParLimits(1, xpeaks[1]-5, xpeaks[1]+5); + Gauss1->SetParLimits(0, 0., 10000.); + Gauss1->SetParLimits(1, xpeaks[0]-3, xpeaks[0]+3); Gauss1->SetParLimits(2, 0.5, 20.); PulseInt[ipmt]->GetXaxis()->SetRangeUser(-10,200); fFullShow ? PulseInt[ipmt]->Fit("Gauss1","RQ") : PulseInt[ipmt]->Fit("Gauss1","RQN"); diff --git a/CALIBRATION/shms_hgcer_calib/calibration.h b/CALIBRATION/shms_hgcer_calib/calibration.h index bfec2dab69d682c5c675ec5ed4fd8bb62f594112..728f1db5dc42ede36e275c901e9e5386082734f0 100644 --- a/CALIBRATION/shms_hgcer_calib/calibration.h +++ b/CALIBRATION/shms_hgcer_calib/calibration.h @@ -40,6 +40,10 @@ public : TH2F *fCut_everything; TH2F *fCut_electron; TH2F *fCut_pion; + TH1F *fBeta_Cut; + TH1F *fBeta_Full; + TH1F *fTiming_Cut; + TH1F *fTiming_Full; // Declaration of histograms used in fitting/analysis TH1F *fscaled[4]; diff --git a/CALIBRATION/shms_hgcer_calib/efficiencies.C b/CALIBRATION/shms_hgcer_calib/efficiencies.C index dfc3353f49c2581f12de892816af076cf880914d..570d974b044225278e630f952561961d88ebebf9 100644 --- a/CALIBRATION/shms_hgcer_calib/efficiencies.C +++ b/CALIBRATION/shms_hgcer_calib/efficiencies.C @@ -225,7 +225,7 @@ Bool_t efficiencies::Process(Long64_t entry) //Require loose cut on particle velocity b_P_tr_beta->GetEntry(entry); fBeta_Full->Fill(P_tr_beta[itrack]); - if (TMath::Abs(P_tr_beta[itrack] - 1.0) > 0.2) return kTRUE; + if (TMath::Abs(P_tr_beta[itrack] - 0.7) > 0.3) return kTRUE; fBeta_Cut->Fill(P_tr_beta[itrack]); //Filling the histograms @@ -235,7 +235,7 @@ Bool_t efficiencies::Process(Long64_t entry) fNGC ? b_P_ngcer_goodAdcPulseTime->GetEntry(entry) : b_P_hgcer_goodAdcPulseTime->GetEntry(entry); fTiming_Full->Fill(fNGC ? P_ngcer_goodAdcPulseTime[ipmt] : P_hgcer_goodAdcPulseTime[ipmt]); if (fNGC ? P_ngcer_goodAdcPulseTime[ipmt] < 50 || P_ngcer_goodAdcPulseTime[ipmt] > 125 : - P_hgcer_goodAdcPulseTime[ipmt] < 70 || P_hgcer_goodAdcPulseTime[ipmt] > 135) continue; + P_hgcer_goodAdcPulseTime[ipmt] < 50 || P_hgcer_goodAdcPulseTime[ipmt] > 70) continue; fTiming_Cut->Fill(fNGC ? P_ngcer_goodAdcPulseTime[ipmt] : P_hgcer_goodAdcPulseTime[ipmt]); //Require the signal passes a tracking cut, with a threshold NPE cut as well diff --git a/PARAM/SHMS/HGCER/CALIB/phgcer_calib.param b/PARAM/SHMS/HGCER/CALIB/phgcer_calib.param index f12328b8da66eb9dd3b69da2ae415593db6b4666..399444f93616084ecad1dfe9065888b63913f948 100644 --- a/PARAM/SHMS/HGCER/CALIB/phgcer_calib.param +++ b/PARAM/SHMS/HGCER/CALIB/phgcer_calib.param @@ -1,2 +1,2 @@ ; Garth H. gain calibration from run 488, June 20 2017 -phgcer_adc_to_npe = 1/546./0.0195, 1/430./0.0195, 1/376./0.0195, 1/477./0.0195 +phgcer_adc_to_npe = 1.0/6.587, 1.0/7.088, 1.0/6.462, 1.0/6.414