void Hist_FitAsymmetry() { TFile *filepara = TFile::Open("hist_p2gamma_para.acc.root"); TFile *fileperp = TFile::Open("hist_p2gamma_perp.acc.root"); TH2F *h2para = (TH2F*)filepara->Get("phi_t"); h2para->Rebin2D(10, 5); TH2F *h2perp = (TH2F*)fileperp->Get("phi_t"); h2perp->Rebin2D(10, 5); // phi distributions integrated over |t| TCanvas *cc1 = new TCanvas("cc1", "cc1", 800, 600); cc1->Divide(2,2); TH1F *hpara = (TH1F*)h2para->ProjectionY("phi_para"); TH1F *hperp = (TH1F*)h2perp->ProjectionY("phi_perp"); TH1F *hasym = (TH1F*)hperp->GetAsymmetry(hpara); TH1F *hsum = (TH1F*)hpara->Clone(); hsum->Add(hperp); cc1->cd(1); TF1* fpara = new TF1("fitpara","[0]*(1.0 + [1]*cos(2*(x + [2])/180.*3.14159))"); fpara->SetLineColor(kRed); hpara->Fit(fpara, "", ""); hpara->Draw("e"); cc1->cd(2); TF1* fperp = new TF1("fitperp","[0]*(1.0 + [1]*cos(2*(x + [2])/180.*3.14159))"); fperp->SetLineColor(kRed); hperp->Fit(fperp, "", ""); hperp->Draw("e"); cc1->cd(3); TF1* fitasym = new TF1("fitasym","[1]*cos(2*(x + [2])/180.*3.14159)"); fitasym->SetLineColor(kRed); hasym->Fit(fitasym, "", ""); hasym->Draw("e"); cc1->cd(4); hsum->Draw(); return; }
void add_hand_targ_asymmetry_vs_nu(){ TString targ; TString kine; TString veto; bool check = false; cout << "Which target do you want to look at? (v=vertical 3He, l=longitudinal 3He, t=transverse 3He, c=All Carbon, h=All Hydrogen, n=All Nitrogen, vc=Vertish Carbon, ltc=Longtransish Carbon, vh=Vertish Hydrogen, lth=Longtransish Hydrogen, ltn=Longtransish Nitrogen)" << endl; cin >> targ; if ((targ == "v") || (targ == "l") || (targ == "t") || (targ == "c") || (targ == "vc") || (targ == "ltc") || (targ == "h") || (targ == "vh") || (targ == "lth") || (targ == "n") || (targ == "ltn")) { check = true;} if (!check) {cout << "Not a valid entry. Exiting..." << endl; return 0;} check = false; cout << "What Q2 do you want to look at? (1.0, 0.5, 0.42, 0.1)" << endl; cin >> kine; if ((kine == "1.0") || (kine == "0.5") || (kine == "0.42") || (kine == "0.1")) { check = true;} if (!check) {cout << "Not a valid entry. Exiting..." << endl; return 0;} check = false; cout << "Do you want data with vetos or without vetos? (w, wo)" << endl; cin >> veto; if ((veto == "w") || (veto == "wo")) { check = true;} if (!check) { cout << "Not a valid entry. Exiting..." << endl; return 0;} cout << "Did I make it here?" << endl; bool drawCuts = true; // bool drawCuts = false; bool includeVetos; if (veto == "w") {includeVetos = true;} if (veto == "wo") {includeVetos = false;} int HeRunNumber; int endHeRunNumber; if (kine == "1.0") { // if (targ == "v") {HeRunNumber = 20596; endHeRunNumber = 20789;} if (targ == "v") {HeRunNumber = 20596; endHeRunNumber = 20760;} // if (targ == "v") {HeRunNumber = 20751; endHeRunNumber = 20760;} // if (targ == "v") {HeRunNumber = 20751; endHeRunNumber = 20760;} if (targ == "l") {HeRunNumber = 22393; endHeRunNumber = 22438;} if (targ == "t") {HeRunNumber = 22447; endHeRunNumber = 22489;} if (targ == "vc") {HeRunNumber = 20591; endHeRunNumber = 20734;} if (targ == "ltc") {HeRunNumber = 22380; endHeRunNumber = 22461;} if (targ == "vh") {HeRunNumber = 20791; endHeRunNumber = 20792;} if (targ == "lth") {HeRunNumber = 22441; endHeRunNumber = 22441;} if (targ == "ltn") {HeRunNumber = 22442; endHeRunNumber = 22442;} double nuMax = 0.65; double nuMin = 0.35; } if (kine == "0.5") { if (targ == "v") {HeRunNumber = 20890; endHeRunNumber = 21005;} double nuMax = 0.125; double nuMin = 0.425; } if (kine == "0.1") { // if (targ == "v") {HeRunNumber = 20487; endHeRunNumber = 20540;} // if (targ == "v") {HeRunNumber = 20487; endHeRunNumber = 20532;} if (targ == "v") {HeRunNumber = 20487; endHeRunNumber = 20511;} // if (targ == "v") {HeRunNumber = 20533; endHeRunNumber = 20538;} double nuMin = 0; double nuMax = 0.13; } TString outputPlotsHere = "/home/ellie/physics/e05-102/images/plots_for_hand/hand_beam_asymmetry_vs_nu/"; const int nuBins = 10; TChain* chainHe = new TChain("T"); TString filenameHe; TString outFileName; filenameHe = "/home/ellie/physics/e05-102/analysis-scripts/devel/neutron_hunt/results/targ_ssa/"; if (veto == "w") {filenameHe += "with_vetos/";} if (veto == "wo") {filenameHe += "without_vetos/";} if (targ == "v") {filenameHe += "vert_3he_";} if (targ == "l") {filenameHe += "long_3he_";} if (targ == "t") {filenameHe += "trans_3he_";} if (targ == "c") {filenameHe += "carbon_";} if (targ == "vc") {filenameHe += "v_carbon_";} if (targ == "ltc") {filenameHe += "lt_carbon_";} if (targ == "h") {filenameHe += "hydrogen_";} if (targ == "vh") {filenameHe += "v_hydrogen_";} if (targ == "lth") {filenameHe += "lt_hydrogen_";} if (targ == "n") {filenameHe += "nitrogen_";} if (targ == "ltn") {filenameHe += "lt_nitrogen_";} if (kine == "1.0") {filenameHe += "q2_1";} if (kine == "0.5") {filenameHe += "q2_05";} if (kine == "0.1") {filenameHe += "q2_01";} if (kine == "0.42") {filenameHe += "q2_042";} outFileName = filenameHe; filenameHe += ".root"; TString asymOutFileName = outFileName; asymOutFileName += "_ssa_target_asymmetry_runs_"; asymOutFileName += HeRunNumber; asymOutFileName += "-"; asymOutFileName += endHeRunNumber; asymOutFileName += ".txt"; ofstream asymOutFile; asymOutFile.open(asymOutFileName); ifstream ifileHe(filenameHe); if (ifileHe) { cout << "Adding file to chainHe: " << filenameHe << endl; chainHe->Add(filenameHe); } else { cout << "File " << filenameHe << " does not exist. Exiting..." << endl; return 0; // If this loop is causing you problems, read the IMPORTANT note above } TFile fileHe(filenameHe); gStyle->SetPalette(1); hand_basic_cuts(HeRunNumber, endHeRunNumber, drawCuts, kine, filenameHe, targ); // ********************************************************************************************** gStyle->SetOptFit(1111); TString veto1plane = ""; TString veto1bar = ""; TString veto2plane = ""; TString veto2bar = ""; TString veto3plane = ""; TString veto3bar = ""; TString veto4plane = ""; TString veto4bar = ""; TString veto5plane = ""; TString veto5bar = ""; TString veto6plane = ""; TString veto6bar = ""; TString antiveto1plane = ""; TString antiveto1bar = ""; TString antiveto2plane = ""; TString antiveto2bar = ""; TString antiveto3plane = ""; TString antiveto3bar = ""; TString allVetos = ""; TString allAntivetos = ""; TString vetoTDCslSt = ""; TString vetoTDCsrSt = ""; TCut vetoTDCsl = ""; TCut vetoTDCsr = ""; TCut vetoTDCs = ""; TString antivetosTDCslSt = ""; TString antivetosTDCsrSt = ""; int maxbars = 0; int vetoplane = 0; int padBins = 0; double padMin = 0; double padMax = 0; // ********************************************************************************************** // This bit of code should set the charge and livetime scaling factors double HeChargeScale; double Helivetime; double HeChargeScaleUp; double HelivetimeUp; double HeChargeScaleDown; double HelivetimeDown; double BeamChargeScaleUp; double BeamlivetimeUp; double BeamChargeScaleDown; double BeamlivetimeDown; hand_scaling_factors(HeRunNumber, endHeRunNumber, HeChargeScale, Helivetime, HeChargeScaleUp, HelivetimeUp, HeChargeScaleDown, HelivetimeDown, BeamChargeScaleUp, BeamlivetimeUp, BeamChargeScaleDown, BeamlivetimeDown, kine, targ); HeChargeScale = 0.00001 * int(HeChargeScale * 100000.0 + 0.5); HeChargeScaleUp = 0.00001 * int(HeChargeScaleUp * 100000.0 + 0.5); HeChargeScaleDown = 0.00001 * int(HeChargeScaleDown * 100000.0 + 0.5); BeamChargeScaleUp = 0.00001 * int(BeamChargeScaleUp * 100000.0 + 0.5); BeamChargeScaleDown = 0.00001 * int(BeamChargeScaleDown * 100000.0 + 0.5); Helivetime = 0.0001 * int(Helivetime * 10000.0 + 0.5); HelivetimeUp = 0.0001 * int(HelivetimeUp * 10000.0 + 0.5); HelivetimeDown = 0.0001 * int(HelivetimeDown * 10000.0 + 0.5); BeamlivetimeUp = 0.0001 * int(BeamlivetimeUp * 10000.0 + 0.5); BeamlivetimeDown = 0.0001 * int(BeamlivetimeDown * 10000.0 + 0.5); cout << "HeChargeScale: " << HeChargeScale << "C, Helivetime: " << Helivetime << endl; cout << "HeChargeScaleUp: " << HeChargeScaleUp << "C, HelivetimeUp: " << HelivetimeUp << endl; cout << "HeChargeScaleDown: " << HeChargeScaleDown << "C, HelivetimeDown: " << HelivetimeDown << endl; cout << "BeamChargeScaleUp: " << BeamChargeScaleUp << "C, BeamlivetimeUp: " << BeamlivetimeUp << endl; cout << "BeamChargeScaleDown: " << BeamChargeScaleDown << "C, BeamlivetimeDown: " << BeamlivetimeDown << endl; // ********************************************************************************************** // The section below plots the HAND data // ********************************************************************************************** // int whichplane = 0; int whichplane = 1; int endplane = 5; int whichbar=0; // int whichbar=11; TString titleTotalSpinUpx = "Total Target Spin Up vs. Omega"; if (includeVetos) {titleTotalSpinUpx += " with vetos";} else {titleTotalSpinUpx += " without vetos";} titleTotalSpinUpx += " with goodTDC cuts"; cout << "Drawing " << titleTotalSpinUpx << "..." << endl; TString plotTotalSpinUpx = "newHANDTotalSpinUpx"; TH1F *newHANDTotalSpinUpx = new TH1F(plotTotalSpinUpx,titleTotalSpinUpx,nuBins,nuMin,nuMax); TString titleTotalSpinDownx = "Total Spin Down vs. Omega"; if (includeVetos) {titleTotalSpinDownx += " with vetos";} else {titleTotalSpinDownx += " without vetos";} titleTotalSpinDownx += " with goodTDC cuts"; cout << "Drawing " << titleTotalSpinDownx << "..." << endl; TString plotTotalSpinDownx = "newHANDTotalSpinDownx"; TH1F *newHANDTotalSpinDownx = new TH1F(plotTotalSpinDownx,titleTotalSpinDownx,nuBins,nuMin,nuMax); for (int nplane=whichplane; nplane<endplane; nplane++) { if (nplane==0) maxbars=32; if (nplane==1) maxbars=30; if (nplane==2) maxbars=24; if (nplane==3) maxbars=22; if (nplane==4) maxbars=12; for (int thisbar=whichbar; thisbar<maxbars; thisbar++) { TString goodPlane = nplane; TString goodPMT = thisbar; // hand_define_vetos(includeVetos, includeAntivetos, antivetosAsVetos, nplane, thisbar, veto1plane, veto2plane, veto3plane, veto4plane, veto5plane, veto6plane, veto1bar, veto2bar, veto3bar, veto4bar, veto5bar, veto6bar, antiveto1plane, antiveto2plane, antiveto3plane, antiveto1bar, antiveto2bar, antiveto3bar, allVetos, allAntivetos, vetoTDCslSt, vetoTDCsrSt, vetoTDCsl, vetoTDCsr, vetoTDCs, vetoTDCcutmin, vetoTDCcutmax, antivetosTDCslSt, antivetosTDCsrSt); hand_define_vetos(includeVetos, false, false, nplane, thisbar, veto1plane, veto2plane, veto3plane, veto4plane, veto5plane, veto6plane, veto1bar, veto2bar, veto3bar, veto4bar, veto5bar, veto6bar, antiveto1plane, antiveto2plane, antiveto3plane, antiveto1bar, antiveto2bar, antiveto3bar, allVetos, allAntivetos, vetoTDCslSt, vetoTDCsrSt, vetoTDCsl, vetoTDCsr, vetoTDCs, 745, 755, antivetosTDCslSt, antivetosTDCsrSt); TString goodBar = "nd.p"; goodBar += nplane; goodBar += "."; goodBar += thisbar; goodBar += " "; cout << "Good Bar: " << goodBar << endl; TString canvasName = "handp"; canvasName += nplane; canvasName += "b"; canvasName += thisbar; TString canvasTitle = "HAND - Plane "; canvasTitle += nplane; canvasTitle += ", Bar "; canvasTitle += thisbar; TCanvas *handCanvas = new TCanvas(canvasName,canvasTitle,1400,730); //x,y handpad01 = new TPad("handpad01","handpad01",0.0000,0.0000,0.1000,1.0000,0,0,0); handpad02 = new TPad("handpad02","handpad02",0.1000,0.6666,0.5500,1.0000,0,0,0); handpad03 = new TPad("handpad03","handpad03",0.5500,0.6666,1.0000,1.0000,0,0,0); handpad04 = new TPad("handpad04","handpad04",0.1000,0.3333,0.5500,0.6666,0,0,0); handpad05 = new TPad("handpad05","handpad05",0.5500,0.3333,1.0000,0.6666,0,0,0); handpad06 = new TPad("handpad06","handpad06",0.1000,0.0000,0.5500,0.3333,0,0,0); handpad07 = new TPad("handpad07","handpad07",0.5500,0.0000,1.0000,0.3333,0,0,0); handpad01->Draw(); handpad02->Draw(); handpad03->Draw(); handpad04->Draw(); handpad05->Draw(); handpad06->Draw(); handpad07->Draw(); // This section will run hand_draw.h which will draw the HAND in handpad01. handpad01->cd(); // hand_draw(HeRunNumber, endHeRunNumber, antivetosAsVetos, allVetos, goodBar, allAntivetos); hand_draw(HeRunNumber, endHeRunNumber, false, allVetos, goodBar, allAntivetos); handpad01->Update(); handpad02->cd(); TString titleHANDleft = "Left TDC for Plane #"; titleHANDleft += nplane; titleHANDleft += ", PMT # "; titleHANDleft += thisbar; if (includeVetos) {titleHANDleft += " with vetos";} else {titleHANDleft += " without vetos";} cout << "Drawing " << titleHANDleft << "..." << endl; TString plotHANDleft = "HANDleft_p"; plotHANDleft += nplane; plotHANDleft += "_b"; plotHANDleft += thisbar; TString plotHANDleftcut = plotHANDleft; plotHANDleftcut += "_cut"; TH1F *HANDleft = (TH1F*)fileHe.Get(plotHANDleft); HANDleft->SetMinimum(0); HANDleft->Draw(); // HANDleftcut->Scale(1/(HeChargeScale*Helivetime)); TH1F *HANDleftcut = (TH1F*)fileHe.Get(plotHANDleftcut); HANDleftcut->SetMinimum(0); HANDleftcut->Draw("same"); // ******************************************************************************** // This section below gathers and prints some statistics on the plot double numHANDleftcutEvents = 0; for (int i=0; i<(HANDleft->GetSize()); i++){ numHANDleftcutEvents = numHANDleftcutEvents + HANDleftcut->GetBinContent(i);} TString HANDleftFactorsString = "Total Charge for Runs: "; HANDleftFactorsString += HeChargeScale; HANDleftFactorsString += " C"; TString HANDleftFactorsString1 = "Total Livetime for Runs: "; HANDleftFactorsString1 += Helivetime; TString HANDleftFactorsString2 = "# of Cut (Purple) Events: "; HANDleftFactorsString2 += numHANDleftcutEvents; /* HANDleftFactors = new TPaveText(0.11,0.69,0.4,0.89,"NDC"); TText *t1 = HANDleftFactors->AddText(HANDleftFactorsString); TText *t2 = HANDleftFactors->AddText(HANDleftFactorsString1); TText *t2 = HANDleftFactors->AddText(HANDleftFactorsString2); HANDleftFactors->Draw("same"); */ // ******************************************************************************** handpad02->Update(); handpad03->cd(); TString titleHANDright = "Right TDC for Plane #"; titleHANDright += nplane; titleHANDright += ", PMT # "; titleHANDright += thisbar; if (includeVetos) {titleHANDright += " with vetos";} else {titleHANDright += " without vetos";} TString plotHANDright = "HANDright_p"; plotHANDright += nplane; plotHANDright += "_b"; plotHANDright += thisbar; TString plotHANDrightcut = plotHANDright; plotHANDrightcut += "_cut"; cout << "Drawing " << titleHANDright << "..." << endl; TH1F *HANDright = (TH1F*)fileHe.Get(plotHANDright); HANDright->SetMinimum(0); TH1F *HANDrightcut = (TH1F*)fileHe.Get(plotHANDrightcut); HANDrightcut->SetMinimum(0); // HANDright->Scale(1/(HeChargeScale*Helivetime)); HANDright->Draw(); HANDrightcut->SetFillColor(kViolet); // HANDrightcut->Scale(1/(HeChargeScale*Helivetime)); HANDrightcut->Draw("same"); // ******************************************************************************** // This section below gathers and prints some statistics on the plot double numHANDrightcutEvents = 0; for (int i=0; i<(HANDright->GetSize()); i++){ numHANDrightcutEvents = numHANDrightcutEvents + HANDrightcut->GetBinContent(i);} TString HANDrightFactorsString = "Total Charge for Runs: "; HANDrightFactorsString += HeChargeScale; HANDrightFactorsString += " C"; TString HANDrightFactorsString1 = "Total Livetime for Runs: "; HANDrightFactorsString1 += Helivetime; TString HANDrightFactorsString2 = "# of Cut (Purple) Events: "; HANDrightFactorsString2 += numHANDrightcutEvents; /* HANDrightFactors = new TPaveText(0.11,0.69,0.4,0.89,"NDC"); TText *t1 = HANDrightFactors->AddText(HANDrightFactorsString); TText *t2 = HANDrightFactors->AddText(HANDrightFactorsString1); TText *t2 = HANDrightFactors->AddText(HANDrightFactorsString2); HANDrightFactors->Draw("same"); */ // ******************************************************************************** handpad03->Update(); handpad04->cd(); cout << "Drawing Helicity Up vs. xBj..." << endl; TString titleSpinUpx = "Helicity Up vs. xBj for Plane #"; titleSpinUpx += nplane; titleSpinUpx += ", PMT # "; titleSpinUpx += thisbar; if (includeVetos) {titleSpinUpx += " with vetos";} else {titleSpinUpx += " without vetos";} TString titleSpinUpxcut = titleSpinUpx; titleSpinUpxcut += " with goodTDC cuts"; cout << "Drawing " << titleSpinUpx << "..." << endl; TString plotSpinUpx = "HANDSpinUpx_p"; plotSpinUpx += nplane; plotSpinUpx += "_b"; plotSpinUpx += thisbar; TH1F *HANDSpinUpx = (TH1F*)fileHe.Get(plotSpinUpx); HANDSpinUpx->SetMinimum(0); HANDSpinUpx->Draw(); handpad04->Update(); handpad05->cd(); cout << "Drawing Helicity Down vs. xBj..." << endl; TString titleSpinDownx = "Helicity Down vs. xBj for Plane #"; titleSpinDownx += nplane; titleSpinDownx += ", PMT # "; titleSpinDownx += thisbar; if (includeVetos) {titleSpinDownx += " with vetos";} else {titleSpinDownx += " without vetos";} TString titleSpinDownxcut = titleSpinDownx; titleSpinDownxcut += " with goodTDC cuts"; cout << "Drawing " << titleSpinDownx << "..." << endl; TString plotSpinDownx = "HANDSpinDownx_p"; plotSpinDownx += nplane; plotSpinDownx += "_b"; plotSpinDownx += thisbar; TH1F *HANDSpinDownx = (TH1F*)fileHe.Get(plotSpinDownx); HANDSpinDownx->SetMinimum(0); HANDSpinDownx->Draw(); handpad05->Update(); handpad06->cd(); cout << "Drawing Total Helicity Up vs. xBj..." << endl; // TString titleTotalSpinUpx = "Total Spin Up vs. xBj"; // if (includeVetos) {titleTotalSpinUpx += " with vetos";} // else {titleTotalSpinUpx += " without vetos";} // titleTotalSpinUpx += " with goodTDC cuts"; // cout << "Drawing " << titleTotalSpinUpx << "..." << endl; // TString plotTotalSpinUpx = "HANDTotalSpinUpx"; // TH1F *HANDTotalSpinUpx = new TH1F(plotTotalSpinUpx,titleTotalSpinUpx,nuBins,nuMin,nuMax); newHANDTotalSpinUpx->Add(HANDSpinUpx); newHANDTotalSpinUpx->SetMinimum(0); newHANDTotalSpinUpx->Draw(); handpad06->Update(); handpad07->cd(); cout << "Drawing Total Helicity Down vs. xBj..." << endl; // TString titleTotalSpinDownx = "Total Spin Down vs. xBj"; // if (includeVetos) {titleTotalSpinDownx += " with vetos";} // else {titleTotalSpinDownx += " without vetos";} // titleTotalSpinDownx += " with goodTDC cuts"; // cout << "Drawing " << titleTotalSpinDownx << "..." << endl; // TString plotTotalSpinDownx = "HANDTotalSpinDownx"; // TH1F *HANDTotalSpinDownx = new TH1F(plotTotalSpinDownx,titleTotalSpinDownx,nuBins,nuMin,nuMax); newHANDTotalSpinDownx->Add(HANDSpinDownx); newHANDTotalSpinDownx->SetMinimum(0); newHANDTotalSpinDownx->Draw(); handpad07->Update(); // if (includeAntivetos) {hand_draw_antivetos(antiveto1plane, antiveto1bar, antiveto2plane, antiveto2bar, antiveto3plane, antiveto3bar, HeRunNumber, endHeRunNumber, chainHe, TDCbins, TDCmin, TDCmax, cuts, goodTDCcut, vetoTDCs, imageAntivetosTitle, nplane, thisbar, includeVetos, includeAntivetos, antivetosAsVetos, veto1plane, veto1bar, veto2plane, veto2bar, veto3plane, veto3bar, veto4plane, veto4bar, veto5plane, veto5bar, veto6plane, veto6bar, allVetos, allAntivetos);} // ********************************************************************************************************* // The section below will plot the bars used for vetos for the previous canvas. It will consist of two // canvases, one without the veto cuts made and one with to show the different. // if (includeVetos) {hand_draw_vetos(veto1plane, veto2plane, veto3plane, veto4plane, veto5plane, veto6plane,veto1bar, veto2bar, veto3bar, veto4bar, veto5bar, veto6bar, imageVetosWithoutVetosTitle, imageVetosWithVetosTitle, HeRunNumber, endHeRunNumber, chainHe, nplane, thisbar, TDCbins, TDCmin, TDCmax, cuts, vetoTDCs, antivetosAsVetos, allVetos, allAntivetos);} // if ((nplane==1) && (thisbar==15)) { nplane = 2; thisbar = 7;} // if ((nplane==2) && (thisbar==12)) { nplane = 3; thisbar = 6;} // if ((nplane==3) && (thisbar==11)) { nplane = 4; thisbar = 3;} // if ((nplane==4) && (thisbar==7)) { nplane = 4; thisbar = 99;} } } TString canvasTotalSpinTest = "TotalSpinTest"; TString canvasTitleTotalSpinTest = "HAND - Total Spin (Not Scaled)"; TCanvas *totalSpinTestCanvas = new TCanvas(canvasTotalSpinTest,canvasTitleTotalSpinTest,1400,730); //x,y totalspintestpad01 = new TPad("totalspintestpad01","totalspintestpad01",0.0000,0.5000,0.5000,1.0000,0,0,0); totalspintestpad02 = new TPad("totalspintestpad02","totalspintestpad02",0.5000,0.5000,1.0000,1.0000,0,0,0); totalspintestpad03 = new TPad("totalspintestpad03","totalspintestpad03",0.0000,0.0000,1.0000,0.5000,0,0,0); totalspintestpad01->Draw(); totalspintestpad02->Draw(); totalspintestpad03->Draw(); totalspintestpad01->cd(); newHANDTotalSpinUpx->SetTitle("Total Spin Up (Not Scaled)"); newHANDTotalSpinUpx->Draw(); totalspintestpad01->Update(); totalspintestpad02->cd(); newHANDTotalSpinDownx->SetTitle("Total Spin Down (Not Scaled)"); newHANDTotalSpinDownx->Draw(); totalspintestpad02->Update(); totalspintestpad03->cd(); TF1 *fitasymtest = new TF1("fitasymtest","[0]",nuMin,nuMax); HANDAsymTest = newHANDTotalSpinUpx->GetAsymmetry(newHANDTotalSpinDownx); TString AsymTestTitle = "Target Asymmerty with Neutron Cuts vs. xBj for runs "; AsymTestTitle += HeRunNumber; AsymTestTitle += "-"; AsymTestTitle += endHeRunNumber; HANDAsymTest->SetTitle(AsymTestTitle); HANDAsymTest->Draw(); fitasymtest->SetLineColor(kBlue); HANDAsymTest->Fit("fitasymtest","R"); totalspintestpad03->Update(); TString asymTitle = "Target Asymmetry for Runs "; asymTitle += HeRunNumber; asymTitle += "-"; asymTitle += endHeRunNumber; TCanvas *asymCanvas = new TCanvas("asymCanvas",asymTitle,1400,730); //x,y asymCanvas->cd(); asymCanvas->SetGrid(); Double_t x[nuBins], y[nuBins], errorx[nuBins], errory[nuBins]; double minError; double maxError; double posStuff; double negStuff; double UpEvents; double DownEvents; if ((targ == "v") || (targ == "l") || (targ == "t") || (targ == "c") || (targ == "h")) { check = true;} if (targ == "v") {asymOutFile << "Dataset: Vertical 3He, Q2=" << kine << endl; cout << "Dataset: Vertical 3He, Q2=" << kine << endl;} if (targ == "l") {asymOutFile << "Dataset: Longitudinal 3He, Q2=" << kine << endl; cout << "Dataset: Longitudinal 3He, Q2=" << kine << endl;} if (targ == "t") {asymOutFile << "Dataset: Transverse 3He, Q2=" << kine << endl; cout << "Dataset: Transverse 3He, Q2=" << kine << endl;} if (targ == "c") {asymOutFile << "Dataset: Carbon, Q2=" << kine << endl; cout << "Dataset: Carbon, Q2=" << kine << endl;} if (targ == "h") {asymOutFile << "Dataset: Hydrogen, Q2=" << kine << endl; cout << "Dataset: Hydrogen, Q2=" << kine << endl;} asymOutFile << "Runs: " << HeRunNumber << "-" << endHeRunNumber << endl; cout << "Runs: " << HeRunNumber << "-" << endHeRunNumber << endl; asymOutFile << "Omega Asymmetry Stat. Error # HePos Events HePos Charge PosHe LT # Neg Events HeNeg Charge NegHe LT" << endl; cout << "xBj Asymmetry Stat. Error # HePos Events HePos Charge PosHe LT # Neg Events HeNeg Charge NegHe LT" << endl; for (int i=0; i<nuBins; i++) { UpEvents = newHANDTotalSpinUpx->GetBinContent(i); DownEvents = newHANDTotalSpinDownx->GetBinContent(i); x[i] = newHANDTotalSpinUpx->GetBinCenter(i); if (x[i] != (newHANDTotalSpinDownx->GetBinCenter(i))) { cout << endl << endl << "!!!!!!!!!!!!!!!!!!!!!!!!!! STOP! THERE'S A PROBLEM!!!!!!!!!!!!!!!!!!!!!!" << endl << endl << endl;} posStuff = UpEvents/(HeChargeScaleUp * HelivetimeUp + 1e-15); negStuff = DownEvents/(HeChargeScaleDown * HelivetimeDown + 1e-15); y[i] = ((posStuff - negStuff)/(posStuff + negStuff + 1e-15)); errory[i] = 2*(DownEvents*sqrt(UpEvents) + UpEvents*sqrt(DownEvents))/((HeChargeScaleUp*HelivetimeUp)*(HeChargeScaleDown*HelivetimeDown)*pow((UpEvents/(HeChargeScaleUp*HelivetimeUp + 1e-25)) + (DownEvents/(HeChargeScaleDown*HelivetimeDown + 1e-25)),2) + 1e-15); if ((UpEvents == 0) || (DownEvents == 0)) { errory[i] = 1;} if ((UpEvents == 0) || (DownEvents == 0)) { y[i] = NULL;} if (i==0) { minError = y[i] - 2*errory[i]; maxError = y[i] + 2*errory[i]; } if ((y[i] - 2*errory[i]) < minError) { minError = y[i] - 2*errory[i];} if ((y[i] + 2*errory[i]) > maxError) { maxError = y[i] + 2*errory[i];} errorx[i] = ((nuMax - nuMin)/nuBins)/2; asymOutFile << x[i] << " " << y[i] << " " << errory[i] << " " << UpEvents << " " << HeChargeScaleUp << " " << HelivetimeUp << " " << DownEvents << " " << HeChargeScaleDown << " " << HelivetimeDown << endl; cout << x[i] << " " << y[i] << " " << errory[i] << " " << UpEvents << " " << HeChargeScaleUp << " " << HelivetimeUp << " " << DownEvents << " " << HeChargeScaleDown << " " << HelivetimeDown << endl; } asymGraph = new TGraphErrors(nuBins, x, y, errorx, errory); asymGraph->SetMarkerStyle(21); asymGraph->SetMarkerColor(4); asymGraph->SetTitle(asymTitle); asymTestHist = new TH2F("asymTestHist",asymTitle,nuBins,nuMin,nuMax,100,minError,maxError); asymTestHist->SetStats(kFALSE); asymTestHist->Draw(); cout << "Fit min = " << nuMin << "; Fit max = " << nuMax << endl; TF1 *fitAsymGraph = new TF1("fitAsymGraph", "[0]", nuMin, nuMax); asymGraph->Draw("P"); fitAsymGraph->SetLineColor(kBlue); asymGraph->Fit("fitAsymGraph","R"); asymCanvas->Update(); /* TString TotalAsymOutTitle = outputPlotsHere; TotalAsymOutTitle += "target_asymmetry_good_for_Run_Num_"; TotalAsymOutTitle += HeRunNumber; TotalAsymOutTitle += "-"; TotalAsymOutTitle += endHeRunNumber; if (includeVetos) {TotalAsymOutTitle += "_with_vetos";} if (includeAntivetos) {TotalAsymOutTitle += "_with_antivetos";} if (antivetosAsVetos && includeAntivetos) {TotalAsymOutTitle += "_as_vetos";} TotalAsymOutTitle += ".png"; asymCanvas->Print(TotalAsymOutTitle); */ TString canvasTotalSpin = "TotalSpin"; TString canvasTitleTotalSpin = "HAND - Total Spin"; TCanvas *totalSpinCanvas = new TCanvas(canvasTotalSpin,canvasTitleTotalSpin,1400,730); //x,y totalspinpad01 = new TPad("totalspinpad01","totalspinpad01",0.0000,0.5000,0.5000,1.0000,0,0,0); totalspinpad02 = new TPad("totalspinpad02","totalspinpad02",0.5000,0.5000,1.0000,1.0000,0,0,0); totalspinpad03 = new TPad("totalspinpad03","totalspinpad03",0.0000,0.0000,1.0000,0.5000,0,0,0); totalspinpad01->Draw(); totalspinpad02->Draw(); totalspinpad03->Draw(); totalspinpad01->cd(); cout << "HeChargeScaleUp: " << HeChargeScaleUp << " HelivetimeUp: " << HelivetimeUp << endl; newHANDTotalSpinUpx->Scale(1/(HeChargeScaleUp * HelivetimeUp + 1e-25)); newHANDTotalSpinUpx->SetTitle("Total Spin Up (Scaled by Charge, LT)"); newHANDTotalSpinUpx->Draw(); // ******************************************************************************** // This section below gathers and prints some statistics on the plot TString HANDUpFactorsString = "Total Positive Charge for Runs: "; HANDUpFactorsString += HeChargeScaleUp; HANDUpFactorsString += " C"; TString HANDUpFactorsString1 = "Total Positive Livetime for Runs: "; HANDUpFactorsString1 += HelivetimeUp; HANDUpFactors = new TPaveText(0.11,0.69,0.4,0.89,"NDC"); TText *t1 = HANDUpFactors->AddText(HANDUpFactorsString); TText *t2 = HANDUpFactors->AddText(HANDUpFactorsString1); HANDUpFactors->Draw("same"); // ******************************************************************************** totalspinpad01->Update(); totalspinpad02->cd(); cout << "HeChargeScaleDown: " << HeChargeScaleDown << " HelivetimeDown: " << HelivetimeDown << endl; newHANDTotalSpinDownx->Scale(1/(HeChargeScaleDown * HelivetimeDown + 1e-25)); newHANDTotalSpinDownx->SetTitle("Total Spin Down (Scaled by Charge, LT)"); newHANDTotalSpinDownx->Draw(); // ******************************************************************************** // This section below gathers and prints some statistics on the plot TString HANDDownFactorsString = "Total Negative Charge for Runs: "; HANDDownFactorsString += HeChargeScaleDown; HANDDownFactorsString += " C"; TString HANDDownFactorsString1 = "Total Negative Livetime for Runs: "; HANDDownFactorsString1 += HelivetimeDown; HANDDownFactors = new TPaveText(0.11,0.69,0.4,0.89,"NDC"); TText *t1 = HANDDownFactors->AddText(HANDDownFactorsString); TText *t2 = HANDDownFactors->AddText(HANDDownFactorsString1); HANDDownFactors->Draw("same"); // ******************************************************************************** totalspinpad02->Update(); totalspinpad03->cd(); TF1 *fitasym = new TF1("fitasym","[0]",nuMin,nuMax); HANDAsym = newHANDTotalSpinUpx->GetAsymmetry(newHANDTotalSpinDownx); TString AsymTitle = "Target Asymmerty with Neutron Cuts vs. xBj for runs "; AsymTitle += HeRunNumber; AsymTitle += "-"; AsymTitle += endHeRunNumber; HANDAsym->SetTitle(AsymTitle); HANDAsym->Draw(); fitasym->SetLineColor(kBlue); HANDAsym->Fit("fitasym","R"); totalspinpad03->Update(); /* TString TotalSpinOutTitle = outputPlotsHere; TotalSpinOutTitle += "target_asymmetry_for_Run_Num_"; TotalSpinOutTitle += HeRunNumber; TotalSpinOutTitle += "-"; TotalSpinOutTitle += endHeRunNumber; if (includeVetos) {TotalSpinOutTitle += "_with_vetos";} TotalSpinOutTitle += ".png"; totalSpinCanvas->Print(TotalSpinOutTitle); */ asymOutFile.close(); // TString exitst; // cout << "Are you ready to finish?" << endl; // cin >> exitst; cout << "All done!" << endl; }
void l_beam_asymmetry(){ TString Q2 = "1.0"; int HeRunNumber = 22393; int endHeRunNumber = 22437; double bins = 50; double xmin = 0.6; double xmax = 1.6; // Defines Cuts TCut cut = ""; TCut kinematics = "PriKineR.Q2<10 && GoodElectron==1 && PriKineR.omega<10"; TCut eventtype = "(D.evtypebits&2)==2"; TCut gold = "R.gold.dp>-0.04 && R.gold.dp<0.053"; TCut target = "ReactPt_R.z>-0.17 && ReactPt_R.z<0.175"; TCut sieve = "abs(R_sv_y)<0.03 && abs(R_sv_x)<0.06"; TCut cuts = cut && kinematics && eventtype && gold && target && sieve; TChain* chainHe = new TChain("T"); TString filenameHe; for (int thisHeRunNumber=HeRunNumber; thisHeRunNumber<(endHeRunNumber+1); thisHeRunNumber++) { // Skipping Vertical Carbon Runs if(thisHeRunNumber==20591){thisHeRunNumber=20596;} if(thisHeRunNumber==20731){thisHeRunNumber=20738;} if(thisHeRunNumber==20732){thisHeRunNumber=20738;} if(thisHeRunNumber==20733){thisHeRunNumber=20738;} if(thisHeRunNumber==20734){thisHeRunNumber=20738;} if(thisHeRunNumber==20736){thisHeRunNumber=20738;} if(thisHeRunNumber==20737){thisHeRunNumber=20738;} if(thisHeRunNumber==20762){thisHeRunNumber=20789;} if(thisHeRunNumber==20763){thisHeRunNumber=20789;} if(thisHeRunNumber==20764){thisHeRunNumber=20789;} if(thisHeRunNumber==20791){thisHeRunNumber=20814;} if(thisHeRunNumber==20792){thisHeRunNumber=20814;} // Skipping Longitudinal Carbon Runs if(thisHeRunNumber==22380){thisHeRunNumber=22393;} if(thisHeRunNumber==22389){thisHeRunNumber=22393;} if(thisHeRunNumber==22425){thisHeRunNumber=22436;} if(thisHeRunNumber==22426){thisHeRunNumber=22436;} // Skipping Transverse Carbon Runs if(thisHeRunNumber==22461){thisHeRunNumber=22465;} // Adds runs to the chain for (int t=0; t<1000; t++) { filenameHe = "/home/ellie/physics/e05-102/terabyte/ROOTfiles/e05102_R_"; filenameHe += thisHeRunNumber; if (t != 0) { filenameHe += "_"; filenameHe += t; } filenameHe += ".root"; ifstream ifileHe(filenameHe); if (ifileHe) { cout << "Adding file to chainHe: " << filenameHe << endl; chainHe->Add(filenameHe); } else { cout << "File " << filenameHe << " does not exist. Ending here." << endl; t=999999999; } } } gStyle->SetPalette(1); // Defines Canvas TCanvas *c1 = new TCanvas("c1","Asymmetry",1360,810); //x,y pad1 = new TPad("pad1","pad1",0.0000,0.6666,0.2500,1.0000,0,0,0); pad2 = new TPad("pad2","pad2",0.2500,0.6666,0.5000,1.0000,0,0,0); pad3 = new TPad("pad3","pad3",0.5000,0.6666,0.7500,1.0000,0,0,0); pad4 = new TPad("pad4","pad4",0.7500,0.6666,1.0000,1.0000,0,0,0); pad5 = new TPad("pad5","pad5",0.0000,0.3333,0.2000,0.6666,0,0,0); pad6 = new TPad("pad6","pad6",0.2000,0.3333,0.4000,0.6666,0,0,0); pad7 = new TPad("pad7","pad7",0.4000,0.3333,0.6000,0.6666,0,0,0); pad8 = new TPad("pad8","pad8",0.6000,0.3333,0.8000,0.6666,0,0,0); pad9 = new TPad("pad9","pad9",0.8000,0.3333,1.0000,0.6666,0,0,0); pad10 = new TPad("pad10","pad10",0.0000,0.0000,0.5000,0.3333,0,0,0); pad11 = new TPad("pad11","pad11",0.5000,0.0000,1.0000,0.3333,0,0,0); pad1->Draw();pad2->Draw();pad3->Draw();pad4->Draw();pad5->Draw();pad6->Draw();pad7->Draw();pad8->Draw();pad9->Draw();pad10->Draw();pad11->Draw(); // Everything below here makes graphs for each section of the canvas pad1->cd(); TString titledp = "dp Cut"; cout << "Drawing " << titledp << "..." << endl; chainHe->Draw("R.gold.dp>>HedpNoCut(400,-0.08,0.08)", "", ""); chainHe->Draw("R.gold.dp>>HedpCut(400,-0.08,0.08)", gold, ""); HedpNoCut->SetTitle(titledp); HedpNoCut->Draw(); HedpCut->SetLineColor(kBlack); HedpCut->SetFillColor(kViolet); HedpCut->Draw("same"); pad2->cd(); cout << "Drawing Target Cut..." << endl; chainHe->Draw("ReactPt_R.z>>HeReactZNoCut(400,-0.3,0.3)", "", ""); chainHe->Draw("ReactPt_R.z>>HeReactZCut(400,-0.3,0.3)", target, ""); HeReactZNoCut->SetTitle("Target Cut"); HeReactZNoCut->Draw(); HeReactZCut->SetLineColor(kBlack); HeReactZCut->SetFillColor(kViolet); HeReactZCut->Draw("same"); pad3->cd(); cout << "Drawing Theta and Phi..." << endl; chainHe->Draw("R_sv_x:R_sv_y>>HeSieveNoCut(100,-0.05,0.05,100,-0.1,0.1)", target, ""); HeSieveNoCut->SetTitle("Theta and Phi, No Cut"); HeSieveNoCut->SetStats(kFALSE); HeSieveNoCut->Draw("COLZ"); pad4->cd(); cout << "Drawing Theta and Phi Cut..." << endl; chainHe->Draw("R_sv_x:R_sv_y>>HeSieveCut(100,-0.05,0.05,100,-0.1,0.1)", target && sieve, ""); HeSieveCut->SetTitle("Theta and Phi Cut"); HeSieveCut->SetStats(kFALSE); HeSieveCut->Draw("COLZ"); pad5->cd(); TString titleQ2 = "Q2"; cout << "Drawing " << titleQ2 << "..." << endl; chainHe->Draw("PriKineR.Q2>>histQ2(400,0,1.6)", cuts, ""); histQ2->SetTitle(titleQ2); histQ2->SetStats(kFALSE); histQ2->Draw(); pad6->cd(); TString titleOmega = "Omega"; cout << "Drawing " << titleOmega << "..." << endl; chainHe->Draw("PriKineR.omega>>histOmega(100,0.3,0.8)", cuts, ""); histOmega->SetTitle(titleOmega); histOmega->SetStats(kFALSE); histOmega->Draw(); pad7->cd(); TString titleHel = "Helicity vs. Bjorken x"; cout << "Drawing " << titleHel << "..." << endl; TH2F *histHel = new TH2F("histHel",titleHel,bins,xmin,xmax,7,-2,2); chainHe->Draw("g0hel.R.helicity:(PriKineR.Q2 / (PriKineR.omega * 2 * 0.9315))>>histHel", cuts, ""); histHel->Draw("COLZ"); // Note: For all plots below, Positive Helicity is defined as g0hel.R.helicity==1 when the BHWP is In // and g0hel.R.helicity==-1 when the BHWP is Out pad8->cd(); TString titlePosHelx = "# of Positive Helicity Events vs. Bjorken x"; cout << "Drawing " << titlePosHelx << "..." << endl; TH1F *histPosHelxIn = new TH1F("histPosHelxIn",titlePosHelx,bins,xmin,xmax); TH1F *histPosHelxOut = new TH1F("histPosHelxOut",titlePosHelx,bins,xmin,xmax); TH1F *histPosHelx = new TH1F("histPosHelx",titlePosHelx,bins,xmin,xmax); chainHe->Draw("(PriKineR.Q2 / (PriKineR.omega * 2 * 0.9315))>>histPosHelxIn", cuts && "g0hel.R.helicity==1" && "fEvtHdr.fRun<22413", ""); chainHe->Draw("(PriKineR.Q2 / (PriKineR.omega * 2 * 0.9315))>>histPosHelxOut", cuts && "g0hel.R.helicity==-1" && "fEvtHdr.fRun>22412", ""); histPosHelxIn->Sumw2(); histPosHelxOut->Sumw2(); histPosHelx->Add(histPosHelxIn,histPosHelxOut); histPosHelx->Draw(); pad9->cd(); TString titleNegHelx = "# of Negative Helicity Events vs. Bjorken x"; cout << "Drawing " << titleNegHelx << "..." << endl; TH1F *histNegHelxIn = new TH1F("histNegHelxIn",titleNegHelx,bins,xmin,xmax); TH1F *histNegHelxOut = new TH1F("histNegHelxOut",titleNegHelx,bins,xmin,xmax); TH1F *histNegHelx = new TH1F("histNegHelx",titleNegHelx,bins,xmin,xmax); chainHe->Draw("(PriKineR.Q2 / (PriKineR.omega * 2 * 0.9315))>>histNegHelxIn", cuts && "g0hel.R.helicity==-1" && "fEvtHdr.fRun<22413", ""); chainHe->Draw("(PriKineR.Q2 / (PriKineR.omega * 2 * 0.9315))>>histNegHelxOut", cuts && "g0hel.R.helicity==1" && "fEvtHdr.fRun>22412", ""); histNegHelxIn->Sumw2(); histNegHelxOut->Sumw2(); histNegHelx->Add(histNegHelxIn,histNegHelxOut); histNegHelx->Draw(); pad10->cd(); TString titlex = "Bjorken x "; titlex += " (x=Q^2/[2m*omega])"; cout << "Drawing " << titlex << "..." << endl; TH1F *histx = new TH1F("histx",titlex,bins,xmin,xmax); histx->Sumw2(); chainHe->Draw("(PriKineR.Q2 / (PriKineR.omega * 2 * 0.9315))>>histx", cuts, "E"); histx->Draw(); // Note: Asymmetry is defined as (Pos - Neg)/(Pos + Neg) pad11->cd(); TString titleAsym = "Beam Asymmetry (%) vs. Bjorken x for Q2 of "; titleAsym += Q2; cout << "Drawing " << titleAsym << "..." << endl; // TH1F *histPosHelIn = new TH1F("histPosHelIn",titleAsym,bins,xmin,xmax); // TH1F *histPosHelOut = new TH1F("histPosHelOut",titleAsym,bins,xmin,xmax); // chainHe->Draw("(PriKineR.Q2 / (PriKineR.omega * 2 * 0.9315))>>histPosHelIn", cuts && "g0hel.R.helicity==1" && "fEvtHdr.fRun<22413", ""); // chainHe->Draw("(PriKineR.Q2 / (PriKineR.omega * 2 * 0.9315))>>histPosHelOut", cuts && "g0hel.R.helicity==-1" && "fEvtHdr.fRun>22412", ""); // histPosHelIn->Sumw2(); // histPosHelOut->Sumw2(); // histPosHel->Add(histPosHelIn,histPosHelOut); // TH1F *histNegHelIn = new TH1F("histNegHelIn","Negative Helicity",bins,xmin,xmax); // TH1F *histNegHelOut = new TH1F("histNegHelOut","Negative Helicity",bins,xmin,xmax); // chainHe->Draw("(PriKineR.Q2 / (PriKineR.omega * 2 * 0.9315))>>histNegHelIn", cuts && "g0hel.R.helicity==-1" && "fEvt.fRun<22413", ""); // chainHe->Draw("(PriKineR.Q2 / (PriKineR.omega * 2 * 0.9315))>>histNegHelOut", cuts && "g0hel.R.helicity==1" && "fEvt.fRun>22412", ""); // histNegHelIn->Sumw2(); // histNegHelOut->Sumw2(); // histNegHel->Add(histNegHelIn,histNegHelOut); // histPosHelx->SetStats(kFALSE); // histNegHelx->SetStats(kFALSE); // histPosHelx->Sumw2(); // histNegHelx->Sumw2(); histAsym = histPosHelx->GetAsymmetry(histNegHelx); histAsym->Scale(100); histAsym->SetTitle(titleAsym); histAsym->Draw(); TString imagename = "Asymmetries/Longitudinal_Beam_Asymmetry_for_Q2_of_"; imagename += Q2; imagename += ".png"; c1->Print(imagename); cout << "All done!" << endl; }
void hand_beam_asymmetry_vs_nu(){ bool includeVetos; // If includeVetos = false, then only good bars will be displayed. If // includeVetos = true, then veto bars will be shown along with the good bars. // includeVetos = true; includeVetos = false; bool includeAntivetos; // If includeAntivetos = false, then only good bars will be displayed. If // includeAntivetos = true, then antiveto bars will be shown along with the good bars. // includeAntivetos = true; includeAntivetos = false; bool antivetosAsVetos; // If antivetosAsVetos = false, then the antivetos will not be included in the veto cut // If antivetosAsVetos = true, then the antivetos will be included in the veto cut // Discusses elsewhere, antivetos are the bars immediately following a goodBar antivetosAsVetos = false; // antivetosAsVetos = true; bool drawCuts = true; // bool drawCuts = false; // The SinglePlane and SingleBar booleans skip the loop that goes over // ever bar into just a single plane and/or a single bar. bool SinglePlane; bool SingleBar; int singleplane; int singlebar; // SinglePlane = true; SinglePlane = false; singleplane = 2; // SingleBar = true; SingleBar = false; singlebar = 10; /* int HeRunNumber = 22441; int endHeRunNumber = 22441; TString Q2 = "1.0"; double q2min = 0.75; double q2max = 1.2; double numin = 0.3; double numax = 0.7; int Positionbins = 30; double Positionmin = -30; double Positionmax = 30; int TDCbins = 100; double TDCmin = 700; double TDCmax = 800; int ADCbins = 700; double ADCmin = -100; double ADCmax = 11100; double goodTDCleftcutmin = 752; double goodTDCleftcutmax = 775; double goodTDCrightcutmin = 752; double goodTDCrightcutmax = 775; double vetoTDCcutmin = 750; double vetoTDCcutmax = 785; */ /* // ********* Vertical, Q2=1.0 ******************* int HeRunNumber = 20596; int endHeRunNumber = 20683; TString Q2 = "1.0"; double q2min = 0.75; double q2max = 1.2; double numin = 0.3; double numax = 0.7; int Positionbins = 30; double Positionmin = -30; double Positionmax = 30; int TDCbins = 200; double TDCmin = 1300; double TDCmax = 1700; int ADCbins = 700; double ADCmin = -100; double ADCmax = 11100; double goodTDCleftcutmin = 1385; double goodTDCleftcutmax = 1415; double goodTDCrightcutmin = 1385; double goodTDCrightcutmax = 1415; double vetoTDCcutmin = 1385; double vetoTDCcutmax = 1415; */ /* // ********* Vertical, Q2=0.5 ******************* int HeRunNumber = 20890; int endHeRunNumber = 20890; TString Q2 = "0.5"; double q2min = 0.3; double q2max = 0.6; double numin = 0.1; double numax = 0.35; int Positionbins = 30; double Positionmin = -30; double Positionmax = 30; int TDCbins = 75; double TDCmin = 1300; double TDCmax = 1500; int ADCbins = 700; double ADCmin = -100; double ADCmax = 11100; double goodTDCleftcutmin = 1385; double goodTDCleftcutmax = 1415; double goodTDCrightcutmin = 1385; double goodTDCrightcutmax = 1415; double vetoTDCcutmin = 1385; double vetoTDCcutmax = 1415; */ /* // ********* Vertical, Q2=0.42 ******************* int HeRunNumber = 21383; int endHeRunNumber = 21387; TString Q2 = "0.42"; double q2min = 0.33; double q2max = 0.51; double numin = 0.17; double numax = 0.3; int Positionbins = 30; double Positionmin = -30; double Positionmax = 30; int TDCbins = 50; double TDCmin = 700; double TDCmax = 800; int ADCbins = 700; double ADCmin = -100; double ADCmax = 11100; double goodTDCleftcutmin = 730; double goodTDCleftcutmax = 770; double goodTDCrightcutmin = 740; double goodTDCrightcutmax = 780; double vetoTDCcutmin = 730; double vetoTDCcutmax = 770; */ /* int HeRunNumber = 21714; int endHeRunNumber = 22248; TString Q2 = "0.52"; double q2min = 0.33; double q2max = 0.62; double numin = 0.17; double numax = 0.35; int Positionbins = 30; double Positionmin = -30; double Positionmax = 30; int TDCbins = 50; double TDCmin = 700; double TDCmax = 800; int ADCbins = 700; double ADCmin = -100; double ADCmax = 11100; double goodTDCleftcutmin = 730; double goodTDCleftcutmax = 770; double goodTDCrightcutmin = 740; double goodTDCrightcutmax = 780; double vetoTDCcutmin = 730; double vetoTDCcutmax = 770; */ // ********* Transverse, Q2=1.0 ******************* int HeRunNumber = 22450; int endHeRunNumber = 22450; // int endHeRunNumber = 22489; TString Q2 = "1.0"; double q2min = 0.75; double q2max = 1.2; double numin = 0.3; double numax = 0.7; int Positionbins = 30; double Positionmin = -30; double Positionmax = 30; int TDCbins = 100; double TDCmin = 650; double TDCmax = 850; /* int TDCbins = 600; double TDCmin = 0; double TDCmax = 1600; */ int ADCbins = 700; double ADCmin = -100; double ADCmax = 11100; /* double goodTDCleftcutmin = 745; double goodTDCleftcutmax = 775; double goodTDCrightcutmin = 750; double goodTDCrightcutmax = 780; */ // double goodTDCleftcutmin = 645; // double goodTDCleftcutmax = 875; // double goodTDCrightcutmin = 650; // double goodTDCrightcutmax = 880; double goodTDCleftcutmin = 1; double goodTDCleftcutmax = 1600; double goodTDCrightcutmin = 1; double goodTDCrightcutmax = 1600; double vetoTDCcutmin = 745; double vetoTDCcutmax = 780; // const int nuBins = 50; const int nuBins = 10; double nuMin = 0.35; double nuMax = 0.65; double xmin = 0.6; double xmax = 3.0; int bins = 50; TString outputPlotsHere = "/home/ellie/physics/e05-102/images/plots_for_hand/hand_beam_asymmetry_vs_nu/"; TString outputRootString = outputPlotsHere; outputRootString += "hand_beam_asym_vs_nu_for_runs_"; outputRootString += HeRunNumber; outputRootString += "-"; outputRootString += endHeRunNumber; outputRootString += ".root"; // TFile *outputRoot = new TFile(outputRootString,"RECREATE"); TFile outputRoot(outputRootString,"RECREATE"); outputRoot.Close(); TString asymOutFileName = outputPlotsHere; asymOutFileName += "target_asymmetry_for_runs_"; asymOutFileName += HeRunNumber; asymOutFileName += "-"; asymOutFileName += endHeRunNumber; if (includeVetos) asymOutFileName += "-with-vetos"; asymOutFileName += ".txt"; ofstream asymOutFile; asymOutFile.open(asymOutFileName); // Although declared here, the goodTDCcut is actually made down below where it can be included // in the loop so that it is easy to have it change for each good bar when done one at a time. // However, the left and right min and max TDC values are defined here TCut goodTDCcut = ""; TChain* chainHe = new TChain("T"); TString filenameHe; for (int thisHeRunNumber=HeRunNumber; thisHeRunNumber<(endHeRunNumber+1); thisHeRunNumber++) { // Skipping Vertical Non-Production Runs if(thisHeRunNumber==20591){thisHeRunNumber=20596;} if(thisHeRunNumber==20731){thisHeRunNumber=20738;} if(thisHeRunNumber==20732){thisHeRunNumber=20738;} if(thisHeRunNumber==20733){thisHeRunNumber=20738;} if(thisHeRunNumber==20734){thisHeRunNumber=20738;} if(thisHeRunNumber==20736){thisHeRunNumber=20738;} if(thisHeRunNumber==20737){thisHeRunNumber=20738;} if(thisHeRunNumber==20762){thisHeRunNumber=20789;} if(thisHeRunNumber==20763){thisHeRunNumber=20789;} if(thisHeRunNumber==20764){thisHeRunNumber=20789;} if(thisHeRunNumber==20791){thisHeRunNumber=20814;} if(thisHeRunNumber==20792){thisHeRunNumber=20814;} // Skipping Longitudinal Non-Production Runs if(thisHeRunNumber==22380){thisHeRunNumber=22393;} if(thisHeRunNumber==22389){thisHeRunNumber=22393;} if(thisHeRunNumber==22425){thisHeRunNumber=22436;} if(thisHeRunNumber==22426){thisHeRunNumber=22436;} // Skipping Transverse Non-Production Runs if(thisHeRunNumber==22461){thisHeRunNumber=22465;} for (int t=0; t<1000; t++) { filenameHe = "/home/ellie/physics/e05-102/ellana/ROOTfiles/e05102_R_"; filenameHe += thisHeRunNumber; if (t != 0) { filenameHe += "_"; filenameHe += t; } filenameHe += ".root"; ifstream ifileHe(filenameHe); if (ifileHe) { cout << "Adding file to chainHe: " << filenameHe << endl; chainHe->Add(filenameHe); } else { cout << "File " << filenameHe << " does not exist. Ending here." << endl; t=999999999; } TFile fileHe(filenameHe); } } gStyle->SetPalette(1); TCut cut = ""; TCut kinematics = ""; TCut eventtype = ""; TCut dp = ""; TCut target = ""; TCut tracks = ""; TCut thph = ""; TCut xbj = ""; TCut pssh = ""; TCut cerenkov = ""; TCut q2nu = ""; TCut basic = ""; TCut cuts = ""; TString imageCutsTitle = outputPlotsHere; imageCutsTitle += "HAND_plots_Run_Num_"; imageCutsTitle += HeRunNumber; imageCutsTitle += "-"; imageCutsTitle += endHeRunNumber; imageCutsTitle += "_basic_cuts"; if (includeVetos) imageCutsTitle += "_with_vetos"; if (includeAntivetos) {imageCutsTitle += "_with_antivetos";} if (antivetosAsVetos && includeAntivetos) {imageCutsTitle += "_as_vetos";} imageCutsTitle += ".png"; hand_basic_cuts(cut, kinematics, eventtype, dp, target, tracks, thph, xbj, pssh, cerenkov, q2nu, basic, cuts, imageCutsTitle, HeRunNumber, endHeRunNumber, chainHe, numin, numax, q2min, q2max, bins, xmin, xmax, drawCuts, Q2, outputRootString); TFile *outputRoot1 = new TFile(outputRootString,"UPDATE"); TString cutstring = TString(cuts); cout << "Cuts: " << cutstring << endl; // ********************************************************************************************** gStyle->SetOptFit(1111); TString veto1plane = ""; TString veto1bar = ""; TString veto2plane = ""; TString veto2bar = ""; TString veto3plane = ""; TString veto3bar = ""; TString veto4plane = ""; TString veto4bar = ""; TString veto5plane = ""; TString veto5bar = ""; TString veto6plane = ""; TString veto6bar = ""; TString antiveto1plane = ""; TString antiveto1bar = ""; TString antiveto2plane = ""; TString antiveto2bar = ""; TString antiveto3plane = ""; TString antiveto3bar = ""; TString allVetos = ""; TString allAntivetos = ""; TString vetoTDCslSt = ""; TString vetoTDCsrSt = ""; TCut vetoTDCsl = ""; TCut vetoTDCsr = ""; TCut vetoTDCs = ""; TString antivetosTDCslSt = ""; TString antivetosTDCsrSt = ""; int maxbars = 0; int vetoplane = 0; int padBins = 0; double padMin = 0; double padMax = 0; // ********************************************************************************************** // This bit of code should set the charge and livetime scaling factors double HeChargeScale; double Helivetime; double HeChargeScaleUp; double HelivetimeUp; double HeChargeScaleDown; double HelivetimeDown; double BeamChargeScaleUp; double BeamlivetimeUp; double BeamChargeScaleDown; double BeamlivetimeDown; hand_scaling_factors(HeRunNumber, endHeRunNumber, HeChargeScale, Helivetime, HeChargeScaleUp, HelivetimeUp, HeChargeScaleDown, HelivetimeDown, BeamChargeScaleUp, BeamlivetimeUp, BeamChargeScaleDown, BeamlivetimeDown); HeChargeScale = 0.00001 * int(HeChargeScale * 100000.0 + 0.5); HeChargeScaleUp = 0.00001 * int(HeChargeScaleUp * 100000.0 + 0.5); HeChargeScaleDown = 0.00001 * int(HeChargeScaleDown * 100000.0 + 0.5); BeamChargeScaleUp = 0.00001 * int(BeamChargeScaleUp * 100000.0 + 0.5); BeamChargeScaleDown = 0.00001 * int(BeamChargeScaleDown * 100000.0 + 0.5); Helivetime = 0.0001 * int(Helivetime * 10000.0 + 0.5); HelivetimeUp = 0.0001 * int(HelivetimeUp * 10000.0 + 0.5); HelivetimeDown = 0.0001 * int(HelivetimeDown * 10000.0 + 0.5); BeamlivetimeUp = 0.0001 * int(BeamlivetimeUp * 10000.0 + 0.5); BeamlivetimeDown = 0.0001 * int(BeamlivetimeDown * 10000.0 + 0.5); cout << "HeChargeScale: " << HeChargeScale << "C, Helivetime: " << Helivetime << endl; cout << "HeChargeScaleUp: " << HeChargeScaleUp << "C, HelivetimeUp: " << HelivetimeUp << endl; cout << "HeChargeScaleDown: " << HeChargeScaleDown << "C, HelivetimeDown: " << HelivetimeDown << endl; cout << "BeamChargeScaleUp: " << BeamChargeScaleUp << "C, BeamlivetimeUp: " << BeamlivetimeUp << endl; cout << "BeamChargeScaleDown: " << BeamChargeScaleDown << "C, BeamlivetimeDown: " << BeamlivetimeDown << endl; // ********************************************************************************************** // The section below plots the HAND data // ********************************************************************************************** // int whichplane = 0; int whichplane = 1; int endplane = 5; if (SinglePlane) {whichplane = singleplane; endplane = singleplane+1;} int whichbar=0; // int whichbar=11; TString titleTotalSpinUpx = "Total Helicity Up vs. xBj"; if (includeVetos) {titleTotalSpinUpx += " with vetos";} else {titleTotalSpinUpx += " without vetos";} titleTotalSpinUpx += " with goodTDC cuts"; cout << "Drawing " << titleTotalSpinUpx << "..." << endl; TString plotTotalSpinUpx = "HANDTotalSpinUpx"; TH1F *HANDTotalSpinUpx = new TH1F(plotTotalSpinUpx,titleTotalSpinUpx,nuBins,nuMin,nuMax); TString titleTotalSpinDownx = "Total Spin Down vs. xBj"; if (includeVetos) {titleTotalSpinDownx += " with vetos";} else {titleTotalSpinDownx += " without vetos";} titleTotalSpinDownx += " with goodTDC cuts"; cout << "Drawing " << titleTotalSpinDownx << "..." << endl; TString plotTotalSpinDownx = "HANDTotalSpinDownx"; TH1F *HANDTotalSpinDownx = new TH1F(plotTotalSpinDownx,titleTotalSpinDownx,nuBins,nuMin,nuMax); for (int nplane=whichplane; nplane<endplane; nplane++) { if (nplane==0) maxbars=32; if (nplane==1) maxbars=30; if (nplane==2) maxbars=24; if (nplane==3) maxbars=22; if (nplane==4) maxbars=12; if (SingleBar) {whichbar = singlebar; maxbars = singlebar + 1;} for (int thisbar=whichbar; thisbar<maxbars; thisbar++) { TString goodPlane = nplane; TString goodPMT = thisbar; hand_define_vetos(includeVetos, includeAntivetos, antivetosAsVetos, nplane, thisbar, veto1plane, veto2plane, veto3plane, veto4plane, veto5plane, veto6plane, veto1bar, veto2bar, veto3bar, veto4bar, veto5bar, veto6bar, antiveto1plane, antiveto2plane, antiveto3plane, antiveto1bar, antiveto2bar, antiveto3bar, allVetos, allAntivetos, vetoTDCslSt, vetoTDCsrSt, vetoTDCsl, vetoTDCsr, vetoTDCs, vetoTDCcutmin, vetoTDCcutmax, antivetosTDCslSt, antivetosTDCsrSt); TString goodBar = "nd.p"; goodBar += nplane; goodBar += "."; goodBar += thisbar; goodBar += " "; cout << "Good Bar: " << goodBar << endl; TString goodTDCl = "NA.nd.p"; goodTDCl += nplane; if (nplane == 0) goodTDCl = "NA.veto"; goodTDCl += ".lt_c["; goodTDCl += thisbar; goodTDCl += "]"; TString goodTDCr = "NA.nd.p"; goodTDCr += nplane; if (nplane == 0) goodTDCr = "NA.veto"; goodTDCr += ".rt_c["; goodTDCr += thisbar; goodTDCr += "]"; TString goodTDCs = goodTDCl; goodTDCs += ":"; goodTDCs += goodTDCr; TString goodADCl = "NA.nd.p"; goodADCl += nplane; if (nplane == 0) goodADCl = "NA.veto"; goodADCl += ".la_c["; goodADCl += thisbar; goodADCl += "]"; TString goodADCr = "NA.nd.p"; goodADCr += nplane; if (nplane == 0) goodADCr = "NA.veto"; goodADCr += ".ra_c["; goodADCr += thisbar; goodADCr += "]"; TString goodADCs = goodADCl; goodADCs += ":"; goodADCs += goodADCr; TString canvasName = "handp"; canvasName += nplane; canvasName += "b"; canvasName += thisbar; TString canvasTitle = "HAND - Plane "; canvasTitle += nplane; canvasTitle += ", Bar "; canvasTitle += thisbar; TCanvas *handCanvas = new TCanvas(canvasName,canvasTitle,1400,770); //x,y handpad01 = new TPad("handpad01","handpad01",0.0000,0.0000,0.1000,1.0000,0,0,0); handpad02 = new TPad("handpad02","handpad02",0.1000,0.6666,0.5500,1.0000,0,0,0); handpad03 = new TPad("handpad03","handpad03",0.5500,0.6666,1.0000,1.0000,0,0,0); handpad04 = new TPad("handpad04","handpad04",0.1000,0.3333,0.5500,0.6666,0,0,0); handpad05 = new TPad("handpad05","handpad05",0.5500,0.3333,1.0000,0.6666,0,0,0); handpad06 = new TPad("handpad06","handpad06",0.1000,0.0000,0.5500,0.3333,0,0,0); handpad07 = new TPad("handpad07","handpad07",0.5500,0.0000,1.0000,0.3333,0,0,0); handpad01->Draw(); handpad02->Draw(); handpad03->Draw(); handpad04->Draw(); handpad05->Draw(); handpad06->Draw(); handpad07->Draw(); // This section will run hand_draw.h which will draw the HAND in handpad01. handpad01->cd(); hand_draw(HeRunNumber, endHeRunNumber, antivetosAsVetos, allVetos, goodBar, allAntivetos); handpad01->Update(); TString goodTDCleftcutString = "(NA.nd.p"; goodTDCleftcutString += nplane; if (nplane == 0) {goodTDCleftcutString = "(NA.veto";} goodTDCleftcutString += ".lt_c["; goodTDCleftcutString += thisbar; goodTDCleftcutString += "]>"; goodTDCleftcutString += goodTDCleftcutmin; if (nplane > 0) { goodTDCleftcutString += " && NA.nd.p"; goodTDCleftcutString += nplane; } if (nplane == 0) {goodTDCleftcutString += " && NA.veto";} goodTDCleftcutString += ".lt_c["; goodTDCleftcutString += thisbar; goodTDCleftcutString += "]<"; goodTDCleftcutString += goodTDCleftcutmax; goodTDCleftcutString += ")"; cout << "goodTDCleftcutString = " << goodTDCleftcutString << endl; TCut goodTDCleftcut = goodTDCleftcutString; TString goodTDCrightcutString = "(NA.nd.p"; goodTDCrightcutString += nplane; if (nplane == 0) {goodTDCrightcutString = "(NA.veto";} goodTDCrightcutString += ".rt_c["; goodTDCrightcutString += thisbar; goodTDCrightcutString += "]>"; goodTDCrightcutString += goodTDCrightcutmin; if (nplane > 0) { goodTDCrightcutString += " && NA.nd.p"; goodTDCrightcutString += nplane; } if (nplane == 0) {goodTDCrightcutString += " && NA.veto";} goodTDCrightcutString += ".rt_c["; goodTDCrightcutString += thisbar; goodTDCrightcutString += "]<"; goodTDCrightcutString += goodTDCrightcutmax; goodTDCrightcutString += ")"; cout << "goodTDCrightcutString = " << goodTDCrightcutString << endl; TCut goodTDCrightcut = goodTDCrightcutString; TString firstTrackString = "NA.n.plane=="; firstTrackString += (nplane - 1); firstTrackString += " && NA.n.pad=="; firstTrackString += thisbar; TCut firstTrack = firstTrackString; goodTDCcut = (goodTDCleftcut || goodTDCrightcut); // cout << "Cuts: " << cutstring << endl; TString vetoCutString = TString(vetoTDCs); // cout << "Veto Cuts: " << vetoCutString << endl; handpad02->cd(); TString titleHANDleft = "Left TDC for Plane #"; titleHANDleft += nplane; titleHANDleft += ", PMT # "; titleHANDleft += thisbar; if (includeVetos) {titleHANDleft += " with vetos";} else {titleHANDleft += " without vetos";} cout << "Drawing " << titleHANDleft << "..." << endl; TString plotHANDleft = "HANDleft_p"; plotHANDleft += nplane; plotHANDleft += "_b"; plotHANDleft += thisbar; TString plotHANDleftcut = plotHANDleft; plotHANDleftcut += "_cut"; // cout << "plotHANDleft: " << plotHANDleft << ", plotHANDleftcut: " << plotHANDleftcut << endl; cout << "goodTDCl: " << goodTDCl << endl; TH1F *HANDleft = new TH1F(plotHANDleft,titleHANDleft,TDCbins,TDCmin,TDCmax); HANDleft->SetMinimum(0); TH1F *HANDleftcut = new TH1F(plotHANDleftcut,titleHANDleft,TDCbins,TDCmin,TDCmax); HANDleftcut->SetMinimum(0); TString HANDleftTDC = goodTDCl; HANDleftTDC += ">>"; HANDleftTDC += plotHANDleft; TString HANDleftTDCcut = goodTDCl; HANDleftTDCcut += ">>"; HANDleftTDCcut += plotHANDleftcut; chainHe->Draw(HANDleftTDC, cuts && vetoTDCs && firstTrack,""); // chainHe->Draw(HANDleftTDC, vetoTDCs,""); // HANDleft->Scale(1/(HeChargeScale*Helivetime)); HANDleft->Write(); HANDleft->Draw(); if (!includeVetos) {chainHe->Draw(HANDleftTDCcut, cuts && goodTDCleftcut&& firstTrack,"same");} if (includeVetos) {chainHe->Draw(HANDleftTDCcut, cuts && vetoTDCs && goodTDCleftcut && firstTrack,"same");} HANDleftcut->SetFillColor(kViolet); // HANDleftcut->Scale(1/(HeChargeScale*Helivetime)); HANDleftcut->Write(); HANDleftcut->Draw("same"); // ******************************************************************************** // This section below gathers and prints some statistics on the plot double numHANDleftcutEvents = 0; for (int i=0; i<TDCbins; i++){ numHANDleftcutEvents = numHANDleftcutEvents + HANDleftcut->GetBinContent(i);} TString HANDleftFactorsString = "Total Charge for Runs: "; HANDleftFactorsString += HeChargeScale; HANDleftFactorsString += " C"; TString HANDleftFactorsString1 = "Total Livetime for Runs: "; HANDleftFactorsString1 += Helivetime; TString HANDleftFactorsString2 = "# of Cut (Purple) Events: "; HANDleftFactorsString2 += numHANDleftcutEvents; HANDleftFactors = new TPaveText(0.11,0.69,0.4,0.89,"NDC"); TText *t1 = HANDleftFactors->AddText(HANDleftFactorsString); TText *t2 = HANDleftFactors->AddText(HANDleftFactorsString1); TText *t2 = HANDleftFactors->AddText(HANDleftFactorsString2); HANDleftFactors->Write(); HANDleftFactors->Draw("same"); // ******************************************************************************** handpad02->Update(); handpad03->cd(); TString titleHANDright = "Right TDC for Plane #"; titleHANDright += nplane; titleHANDright += ", PMT # "; titleHANDright += thisbar; if (includeVetos) {titleHANDright += " with vetos";} else {titleHANDright += " without vetos";} TString plotHANDright = "HANDright_p"; plotHANDright += nplane; plotHANDright += "_b"; plotHANDright += thisbar; TString plotHANDrightcut = plotHANDright; plotHANDrightcut += "_cut"; cout << "Drawing " << titleHANDright << "..." << endl; TH1F *HANDright = new TH1F(plotHANDright,titleHANDright,TDCbins,TDCmin,TDCmax); HANDright->SetMinimum(0); TH1F *HANDrightcut = new TH1F(plotHANDrightcut,titleHANDright,TDCbins,TDCmin,TDCmax); HANDrightcut->SetMinimum(0); TString HANDrightTDC = goodTDCr; HANDrightTDC += ">>"; HANDrightTDC += plotHANDright; TString HANDrightTDCcut = goodTDCr; HANDrightTDCcut += ">>"; HANDrightTDCcut += plotHANDrightcut; chainHe->Draw(HANDrightTDC, cuts && vetoTDCs && firstTrack,""); // HANDright->Scale(1/(HeChargeScale*Helivetime)); HANDright->Write(); HANDright->Draw(); if (!includeVetos) {chainHe->Draw(HANDrightTDCcut, cuts && firstTrack && goodTDCrightcut,"same");} if (includeVetos) {chainHe->Draw(HANDrightTDCcut, cuts && vetoTDCs && goodTDCrightcut && firstTrack,"same");} HANDrightcut->SetFillColor(kViolet); // HANDrightcut->Scale(1/(HeChargeScale*Helivetime)); HANDrightcut->Write(); HANDrightcut->Draw("same"); // ******************************************************************************** // This section below gathers and prints some statistics on the plot double numHANDrightcutEvents = 0; for (int j=0; j<TDCbins; j++){ numHANDrightcutEvents = numHANDrightcutEvents + HANDrightcut->GetBinContent(j);} TString HANDrightFactorsString = "Total Charge for Runs: "; HANDrightFactorsString += HeChargeScale; HANDrightFactorsString += " C"; TString HANDrightFactorsString1 = "Total Livetime for Runs: "; HANDrightFactorsString1 += Helivetime; TString HANDrightFactorsString2 = "# of Cut (Purple) Events: "; HANDrightFactorsString2 += numHANDrightcutEvents; HANDrightFactors = new TPaveText(0.11,0.69,0.4,0.89,"NDC"); TText *t1 = HANDrightFactors->AddText(HANDrightFactorsString); TText *t2 = HANDrightFactors->AddText(HANDrightFactorsString1); TText *t2 = HANDrightFactors->AddText(HANDrightFactorsString2); HANDrightFactors->Write(); // ******************************************************************************** handpad03->Update(); handpad04->cd(); cout << "Drawing Helicity Up vs. xBj..." << endl; TString titleSpinUpx = "Helicity Up vs. xBj for Plane #"; titleSpinUpx += nplane; titleSpinUpx += ", PMT # "; titleSpinUpx += thisbar; if (includeVetos) {titleSpinUpx += " with vetos";} else {titleSpinUpx += " without vetos";} TString titleSpinUpxcut = titleSpinUpx; titleSpinUpxcut += " with goodTDC cuts"; cout << "Drawing " << titleSpinUpx << "..." << endl; TString plotSpinUpx = "HANDSpinUpx_p"; plotSpinUpx += nplane; plotSpinUpx += "_b"; plotSpinUpx += thisbar; TH1F *HANDSpinUpx = new TH1F(plotSpinUpx,titleSpinUpxcut,nuBins,nuMin,nuMax); TString HANDSpinUpxString = "PriKineR.nu"; HANDSpinUpxString += ">>"; HANDSpinUpxString += plotSpinUpx; if (includeVetos) {chainHe->Draw(HANDSpinUpxString, cuts && vetoTDCs && goodTDCcut && firstTrack && "((g0hel.R.helicity==1 && g.runnum<22467) || (g0hel.R.helicity==-1 && g.runnum>22468))","");} if (!includeVetos) {chainHe->Draw(HANDSpinUpxString, cuts && firstTrack && goodTDCcut && "((g0hel.R.helicity==1 && g.runnum<22467) || (g0hel.R.helicity==-1 && g.runnum>22468))","");} HANDSpinUpx->SetMinimum(0); HANDSpinUpx->Write(); HANDSpinUpx->Draw(); handpad04->Update(); handpad05->cd(); cout << "Drawing Helicity Down vs. xBj..." << endl; TString titleSpinDownx = "Helicity Down vs. xBj for Plane #"; titleSpinDownx += nplane; titleSpinDownx += ", PMT # "; titleSpinDownx += thisbar; if (includeVetos) {titleSpinDownx += " with vetos";} else {titleSpinDownx += " without vetos";} TString titleSpinDownxcut = titleSpinDownx; titleSpinDownxcut += " with goodTDC cuts"; cout << "Drawing " << titleSpinDownx << "..." << endl; TString plotSpinDownx = "HANDSpinDownx_p"; plotSpinDownx += nplane; plotSpinDownx += "_b"; plotSpinDownx += thisbar; TH1F *HANDSpinDownx = new TH1F(plotSpinDownx,titleSpinDownxcut,nuBins,nuMin,nuMax); TString HANDSpinDownxString = "PriKineR.nu"; HANDSpinDownxString += ">>"; HANDSpinDownxString += plotSpinDownx; if (includeVetos) {chainHe->Draw(HANDSpinDownxString, cuts && vetoTDCs && goodTDCcut && firstTrack && "((g0hel.R.helicity==-1 && g.runnum<22467) || (g0hel.R.helicity==1 && g.runnum>22468))","");} if (!includeVetos) {chainHe->Draw(HANDSpinDownxString, cuts && firstTrack && goodTDCcut && "((g0hel.R.helicity==-1 && g.runnum<22467) || (g0hel.R.helicity==1 && g.runnum>22468))","");} HANDSpinDownx->SetMinimum(0); HANDSpinDownx->Write(); HANDSpinDownx->Draw(); handpad05->Update(); handpad06->cd(); cout << "Drawing Total Helicity Up vs. xBj..." << endl; // TString titleTotalSpinUpx = "Total Spin Up vs. xBj"; // if (includeVetos) {titleTotalSpinUpx += " with vetos";} // else {titleTotalSpinUpx += " without vetos";} // titleTotalSpinUpx += " with goodTDC cuts"; // cout << "Drawing " << titleTotalSpinUpx << "..." << endl; // TString plotTotalSpinUpx = "HANDTotalSpinUpx"; // TH1F *HANDTotalSpinUpx = new TH1F(plotTotalSpinUpx,titleTotalSpinUpx,nuBins,nuMin,nuMax); HANDTotalSpinUpx->Add(HANDSpinUpx); HANDTotalSpinUpx->SetMinimum(0); HANDTotalSpinUpx->Write(); HANDTotalSpinUpx->Draw(); handpad06->Update(); handpad07->cd(); cout << "Drawing Total Helicity Down vs. xBj..." << endl; // TString titleTotalSpinDownx = "Total Spin Down vs. xBj"; // if (includeVetos) {titleTotalSpinDownx += " with vetos";} // else {titleTotalSpinDownx += " without vetos";} // titleTotalSpinDownx += " with goodTDC cuts"; // cout << "Drawing " << titleTotalSpinDownx << "..." << endl; // TString plotTotalSpinDownx = "HANDTotalSpinDownx"; // TH1F *HANDTotalSpinDownx = new TH1F(plotTotalSpinDownx,titleTotalSpinDownx,nuBins,nuMin,nuMax); HANDTotalSpinDownx->Add(HANDSpinDownx); HANDTotalSpinDownx->SetMinimum(0); HANDTotalSpinDownx->Write(); HANDTotalSpinDownx->Draw(); handpad07->Update(); TString imageTitle = outputPlotsHere; imageTitle += "TDC_plots_for_beam_asym_Run_Num_"; imageTitle += HeRunNumber; imageTitle += "-"; imageTitle += endHeRunNumber; imageTitle += "_p"; imageTitle += nplane; imageTitle += "_b"; if (thisbar < 10) {imageTitle += "0";} imageTitle += thisbar; if (includeVetos) {imageTitle += "_with_vetos";} if (includeAntivetos) {imageTitle += "_with_antivetos";} if (antivetosAsVetos && includeAntivetos) {imageTitle += "_as_vetos";} imageTitle+= ".png"; handCanvas->Print(imageTitle); TString imageAntivetosTitle = outputPlotsHere; imageAntivetosTitle += "antivetos_for_beam_asym_for_Run_Num_"; imageAntivetosTitle += HeRunNumber; imageAntivetosTitle += "-"; imageAntivetosTitle += endHeRunNumber; imageAntivetosTitle += "_p"; imageAntivetosTitle += nplane; imageAntivetosTitle += "_b"; imageAntivetosTitle += thisbar; if (includeVetos) {imageAntivetosTitle += "_with_vetos";} if (includeAntivetos) {imageAntivetosTitle += "_with_antivetos";} if (antivetosAsVetos && includeAntivetos) {imageAntivetosTitle += "_as_vetos";} imageAntivetosTitle += ".png"; if (includeAntivetos) {hand_draw_antivetos(antiveto1plane, antiveto1bar, antiveto2plane, antiveto2bar, antiveto3plane, antiveto3bar, HeRunNumber, endHeRunNumber, chainHe, TDCbins, TDCmin, TDCmax, cuts, goodTDCcut, vetoTDCs, imageAntivetosTitle, nplane, thisbar, includeVetos, includeAntivetos, antivetosAsVetos, veto1plane, veto1bar, veto2plane, veto2bar, veto3plane, veto3bar, veto4plane, veto4bar, veto5plane, veto5bar, veto6plane, veto6bar, allVetos, allAntivetos);} // ********************************************************************************************************* // The section below will plot the bars used for vetos for the previous canvas. It will consist of two // canvases, one without the veto cuts made and one with to show the different. TString imageVetosWithoutVetosTitle = outputPlotsHere; imageVetosWithoutVetosTitle += "vetos_without_veto_cut_for_beam_asym_for_Run_Num_"; imageVetosWithoutVetosTitle += HeRunNumber; imageVetosWithoutVetosTitle += "-"; imageVetosWithoutVetosTitle += endHeRunNumber; imageVetosWithoutVetosTitle += "_p"; imageVetosWithoutVetosTitle += nplane; imageVetosWithoutVetosTitle += "_b"; imageVetosWithoutVetosTitle += thisbar; if (includeVetos) {imageVetosWithoutVetosTitle += "_with_vetos";} if (includeAntivetos) {imageVetosWithoutVetosTitle += "_with_antivetos";} if (antivetosAsVetos && includeAntivetos) {imageVetosWithoutVetosTitle += "_as_vetos";} imageVetosWithoutVetosTitle+= ".png"; TString imageVetosWithVetosTitle = outputPlotsHere; imageVetosWithVetosTitle += "vetos_with_veto_cut_for_beam_asym_Run_Num_"; imageVetosWithVetosTitle += HeRunNumber; imageVetosWithVetosTitle += "-"; imageVetosWithVetosTitle += endHeRunNumber; imageVetosWithVetosTitle += "_p"; imageVetosWithVetosTitle += nplane; imageVetosWithVetosTitle += "_b"; imageVetosWithVetosTitle += thisbar; if (includeVetos) {imageVetosWithVetosTitle += "_with_vetos";} if (includeAntivetos) {imageVetosWithVetosTitle += "_with_antivetos";} if (antivetosAsVetos && includeAntivetos) {imageVetosWithVetosTitle += "_as_vetos";} imageVetosWithVetosTitle+= ".png"; // if (includeVetos) {hand_draw_vetos(veto1plane, veto2plane, veto3plane, veto4plane, veto5plane, veto6plane,veto1bar, veto2bar, veto3bar, veto4bar, veto5bar, veto6bar, imageVetosWithoutVetosTitle, imageVetosWithVetosTitle, HeRunNumber, endHeRunNumber, chainHe, nplane, thisbar, TDCbins, TDCmin, TDCmax, cuts, vetoTDCs, antivetosAsVetos, allVetos, allAntivetos);} // if ((nplane==1) && (thisbar==15)) { nplane = 2; thisbar = 7;} // if ((nplane==2) && (thisbar==12)) { nplane = 3; thisbar = 6;} // if ((nplane==3) && (thisbar==11)) { nplane = 4; thisbar = 3;} // if ((nplane==4) && (thisbar==7)) { nplane = 4; thisbar = 99;} } } TString canvasTotalSpinTest = "TotalSpinTest"; TString canvasTitleTotalSpinTest = "HAND - Total Spin (Not Scaled)"; TCanvas *totalSpinTestCanvas = new TCanvas(canvasTotalSpinTest,canvasTitleTotalSpinTest,1400,770); //x,y totalspintestpad01 = new TPad("totalspintestpad01","totalspintestpad01",0.0000,0.5000,0.5000,1.0000,0,0,0); totalspintestpad02 = new TPad("totalspintestpad02","totalspintestpad02",0.5000,0.5000,1.0000,1.0000,0,0,0); totalspintestpad03 = new TPad("totalspintestpad03","totalspintestpad03",0.0000,0.0000,1.0000,0.5000,0,0,0); totalspintestpad01->Draw(); totalspintestpad02->Draw(); totalspintestpad03->Draw(); totalspintestpad01->cd(); HANDTotalSpinUpx->SetTitle("Total Spin Up (Not Scaled)"); HANDTotalSpinUpx->Write(); HANDTotalSpinUpx->Draw(); totalspintestpad01->Update(); totalspintestpad02->cd(); HANDTotalSpinDownx->SetTitle("Total Spin Down (Not Scaled)"); HANDTotalSpinDownx->Write(); HANDTotalSpinDownx->Draw(); totalspintestpad02->Update(); totalspintestpad03->cd(); TF1 *fitasymtest = new TF1("fitasymtest","[0]",nuMin,nuMax); HANDAsymTest = HANDTotalSpinUpx->GetAsymmetry(HANDTotalSpinDownx); TString AsymTestTitle = "Target Asymmerty with Neutron Cuts vs. xBj for runs "; AsymTestTitle += HeRunNumber; AsymTestTitle += "-"; AsymTestTitle += endHeRunNumber; HANDAsymTest->SetTitle(AsymTestTitle); HANDAsymTest->Write(); HANDAsymTest->Draw(); fitasymtest->SetLineColor(kBlue); HANDAsymTest->Fit("fitasymtest","R"); totalspintestpad03->Update(); TString asymTitle = "Target Asymmetry for Runs "; asymTitle += HeRunNumber; asymTitle += "-"; asymTitle += endHeRunNumber; TCanvas *asymCanvas = new TCanvas("asymCanvas",asymTitle,1400,770); //x,y asymCanvas->cd(); asymCanvas->SetGrid(); Double_t x[nuBins], y[nuBins], errorx[nuBins], errory[nuBins]; double minError; double maxError; double posStuff; double negStuff; double UpEvents; double DownEvents; asymOutFile << "Runs " << HeRunNumber << "-" << endHeRunNumber << endl; cout << "Runs " << HeRunNumber << "-" << endHeRunNumber << endl; asymOutFile << "xBj Asymmetry Stat. Error # BeamPos Events BeamPos Charge PosBeam LT # Neg Events BeamNeg Charge NegBeam LT" << endl; cout << "xBj Asymmetry Stat. Error # BeamPos Events BeamPos Charge PosBeam LT # Neg Events BeamNeg Charge NegBeam LT" << endl; for (int i=0; i<nuBins; i++) { UpEvents = HANDTotalSpinUpx->GetBinContent(i); DownEvents = HANDTotalSpinDownx->GetBinContent(i); x[i] = HANDTotalSpinUpx->GetBinCenter(i); if (x[i] != (HANDTotalSpinDownx->GetBinCenter(i))) { cout << endl << endl << "!!!!!!!!!!!!!!!!!!!!!!!!!! STOP! THERE'S A PROBLEM!!!!!!!!!!!!!!!!!!!!!!" << endl << endl << endl;} posStuff = UpEvents/(BeamChargeScaleUp * BeamlivetimeUp + 1e-15); negStuff = DownEvents/(BeamChargeScaleDown * BeamlivetimeDown + 1e-15); y[i] = ((posStuff - negStuff)/(posStuff + negStuff + 1e-15)); errory[i] = 2*(DownEvents*sqrt(UpEvents) + UpEvents*sqrt(DownEvents))/((BeamChargeScaleUp*BeamlivetimeUp)*(BeamChargeScaleDown*BeamlivetimeDown)*pow((UpEvents/(BeamChargeScaleUp*BeamlivetimeUp)) + (DownEvents/(BeamChargeScaleDown*BeamlivetimeDown)),2) + 1e-15); if ((UpEvents == 0) || (DownEvents == 0)) { errory[i] = 1;} if ((UpEvents == 0) || (DownEvents == 0)) { y[i] = NULL;} if (i==0) { minError = y[i] - 2*errory[i]; maxError = y[i] + 2*errory[i]; } if ((y[i] - 2*errory[i]) < minError) { minError = y[i] - 2*errory[i];} if ((y[i] + 2*errory[i]) > maxError) { maxError = y[i] + 2*errory[i];} errorx[i] = ((nuMax - nuMin)/nuBins)/2; asymOutFile << x[i] << " " << y[i] << " " << errory[i] << " " << UpEvents << " " << BeamChargeScaleUp << " " << BeamlivetimeUp << " " << DownEvents << " " << BeamChargeScaleDown << " " << BeamlivetimeDown << endl; cout << x[i] << " " << y[i] << " " << errory[i] << " " << UpEvents << " " << BeamChargeScaleUp << " " << BeamlivetimeUp << " " << DownEvents << " " << BeamChargeScaleDown << " " << BeamlivetimeDown << endl; } asymGraph = new TGraphErrors(nuBins, x, y, errorx, errory); asymGraph->SetMarkerStyle(21); asymGraph->SetMarkerColor(4); asymGraph->SetTitle(asymTitle); asymTestHist = new TH2F("asymTestHist",asymTitle,nuBins,nuMin,nuMax,100,minError,maxError); asymTestHist->SetStats(kFALSE); asymTestHist->Write(); asymTestHist->Draw(); cout << "Fit min = " << nuMin << "; Fit max = " << nuMax << endl; TF1 *fitAsymGraph = new TF1("fitAsymGraph", "[0]", nuMin, nuMax); asymGraph->Draw("P"); fitAsymGraph->SetLineColor(kBlue); asymGraph->Fit("fitAsymGraph","R"); asymGraph->Write(); asymCanvas->Update(); TString TotalAsymOutTitle = outputPlotsHere; TotalAsymOutTitle += "target_asymmetry_good_for_Run_Num_"; TotalAsymOutTitle += HeRunNumber; TotalAsymOutTitle += "-"; TotalAsymOutTitle += endHeRunNumber; if (includeVetos) {TotalAsymOutTitle += "_with_vetos";} if (includeAntivetos) {TotalAsymOutTitle += "_with_antivetos";} if (antivetosAsVetos && includeAntivetos) {TotalAsymOutTitle += "_as_vetos";} TotalAsymOutTitle += ".png"; asymCanvas->Print(TotalAsymOutTitle); TString canvasTotalSpin = "TotalSpin"; TString canvasTitleTotalSpin = "HAND - Total Spin"; TCanvas *totalSpinCanvas = new TCanvas(canvasTotalSpin,canvasTitleTotalSpin,1400,770); //x,y totalspinpad01 = new TPad("totalspinpad01","totalspinpad01",0.0000,0.5000,0.5000,1.0000,0,0,0); totalspinpad02 = new TPad("totalspinpad02","totalspinpad02",0.5000,0.5000,1.0000,1.0000,0,0,0); totalspinpad03 = new TPad("totalspinpad03","totalspinpad03",0.0000,0.0000,1.0000,0.5000,0,0,0); totalspinpad01->Draw(); totalspinpad02->Draw(); totalspinpad03->Draw(); totalspinpad01->cd(); cout << "HeChargeScaleUp: " << HeChargeScaleUp << " HelivetimeUp: " << HelivetimeUp << endl; HANDTotalSpinUpx->Scale(1/(BeamChargeScaleUp * BeamlivetimeUp)); HANDTotalSpinUpx->SetTitle("Total Spin Up (Scaled by Charge, LT)"); HANDTotalSpinUpx->Write(); HANDTotalSpinUpx->Draw(); // ******************************************************************************** // This section below gathers and prints some statistics on the plot TString HANDUpFactorsString = "Total Positive Charge for Runs: "; HANDUpFactorsString += BeamChargeScaleUp; HANDUpFactorsString += " C"; TString HANDUpFactorsString1 = "Total Positive Livetime for Runs: "; HANDUpFactorsString1 += BeamlivetimeUp; HANDUpFactors = new TPaveText(0.11,0.69,0.4,0.89,"NDC"); TText *t1 = HANDUpFactors->AddText(HANDUpFactorsString); TText *t2 = HANDUpFactors->AddText(HANDUpFactorsString1); HANDUpFactors->Write(); HANDUpFactors->Draw("same"); // ******************************************************************************** totalspinpad01->Update(); totalspinpad02->cd(); cout << "HeChargeScaleDown: " << HeChargeScaleDown << " HelivetimeDown: " << HelivetimeDown << endl; HANDTotalSpinDownx->Scale(1/(BeamChargeScaleDown * BeamlivetimeDown)); HANDTotalSpinDownx->SetTitle("Total Spin Down (Scaled by Charge, LT)"); HANDTotalSpinDownx->Write(); HANDTotalSpinDownx->Draw(); // ******************************************************************************** // This section below gathers and prints some statistics on the plot TString HANDDownFactorsString = "Total Negative Charge for Runs: "; HANDDownFactorsString += BeamChargeScaleDown; HANDDownFactorsString += " C"; TString HANDDownFactorsString1 = "Total Negative Livetime for Runs: "; HANDDownFactorsString1 += BeamlivetimeDown; HANDDownFactors = new TPaveText(0.11,0.69,0.4,0.89,"NDC"); TText *t1 = HANDDownFactors->AddText(HANDDownFactorsString); TText *t2 = HANDDownFactors->AddText(HANDDownFactorsString1); HANDDownFactors->Write(); HANDDownFactors->Draw("same"); // ******************************************************************************** totalspinpad02->Update(); totalspinpad03->cd(); TF1 *fitasym = new TF1("fitasym","[0]",nuMin,nuMax); HANDAsym = HANDTotalSpinUpx->GetAsymmetry(HANDTotalSpinDownx); TString AsymTitle = "Target Asymmerty (Scaled by Charge, LT) with Neutron Cuts vs. xBj for runs "; AsymTitle += HeRunNumber; AsymTitle += "-"; AsymTitle += endHeRunNumber; HANDAsym->SetTitle(AsymTitle); HANDAsym->Write(); HANDAsym->Draw(); fitasym->SetLineColor(kBlue); HANDAsym->Fit("fitasym","R"); totalspinpad03->Update(); TString TotalSpinOutTitle = outputPlotsHere; TotalSpinOutTitle += "target_asymmetry_for_Run_Num_"; TotalSpinOutTitle += HeRunNumber; TotalSpinOutTitle += "-"; TotalSpinOutTitle += endHeRunNumber; if (includeVetos) {TotalSpinOutTitle += "_with_vetos";} if (includeAntivetos) {TotalSpinOutTitle += "_with_antivetos";} if (antivetosAsVetos && includeAntivetos) {TotalSpinOutTitle += "_as_vetos";} TotalSpinOutTitle += ".png"; totalSpinCanvas->Print(TotalSpinOutTitle); asymOutFile.close(); outputRoot1->Close(); cout << "All done!" << endl; }
void v_beam_asymmetry(){ TString Q2 = "1.0"; int HeRunNumberL = 1686; int endHeRunNumberL = 1958; int HeRunNumberR = 20596; int endHeRunNumberR = 20789; // NOTE: There is a problem with the charge scalar in runs 20812-20879. When this is fixed, // uncomment the line below. Until then, we stop at run 20789. // int endHeRunNumberR = 20879; double bins = 50; double xmin = 0.6; double xmax = 1.6; // Defines Right Arm Cuts TCut cutR = ""; TCut kinematicsR = "PriKineR.Q2<10 && GoodElectron==1 && PriKineR.nu<10"; TCut eventtypeR = "(D.evtypebits&2)==2"; TCut goldR = "ExTgtCor_R.dp>-0.04 && ExTgtCor_R.dp<0.053"; TCut targetR = "ReactPt_R.z>-0.17 && ReactPt_R.z<0.175"; TCut thetaphiR = "abs(ExTgtCor_R.ph)<0.03 && abs(ExTgtCor_R.th)<0.06"; TCut cutsR = cutR && kinematicsR && eventtypeR && goldR && targetR && thetaphiR; // Defines Left Arm Cuts TCut cutL = ""; TCut kinematicsL = "PriKineL.Q2<10 && GoodElectron==1 && PriKineL.nu<10"; // TCut eventtypeL = "(D.evtypebits&2)==2"; TCut eventtypeL = ""; TCut goldL = "ExTgtCor_L.dp>-0.04 && ExTgtCor_L.dp<0.053"; TCut targetL = "ReactPt_L.z>-0.17 && ReactPt_L.z<0.175"; TCut thetaphiL = "abs(ExTgtCor_L.ph)<0.03 && abs(ExTgtCor_L.th)<0.06"; TCut cutsL = cutL && kinematicsL && eventtypeL && goldL && targetL && thetaphiL; TChain* chainHeR = new TChain("T"); TChain* chainHeL = new TChain("T"); TString filenameHeR; TString filenameHeL; // ******************* The section below adds files to the Right arm chain from the RHRS ******************** for (int thisHeRunNumberR=HeRunNumberR; thisHeRunNumberR<(endHeRunNumberR+1); thisHeRunNumberR++) { // Skipping Vertical Carbon & Deuterium Runs if(thisHeRunNumberR==20591){thisHeRunNumberR=20596;} if(thisHeRunNumberR==20731){thisHeRunNumberR=20738;} if(thisHeRunNumberR==20732){thisHeRunNumberR=20738;} if(thisHeRunNumberR==20733){thisHeRunNumberR=20738;} if(thisHeRunNumberR==20734){thisHeRunNumberR=20738;} if(thisHeRunNumberR==20736){thisHeRunNumberR=20738;} if(thisHeRunNumberR==20737){thisHeRunNumberR=20738;} if(thisHeRunNumberR==20762){thisHeRunNumberR=20789;} if(thisHeRunNumberR==20763){thisHeRunNumberR=20789;} if(thisHeRunNumberR==20764){thisHeRunNumberR=20789;} if(thisHeRunNumberR==20791){thisHeRunNumberR=20814;} if(thisHeRunNumberR==20792){thisHeRunNumberR=20814;} // Skipping Longitudinal Carbon Runs if(thisHeRunNumberR==22380){thisHeRunNumberR=22393;} if(thisHeRunNumberR==22389){thisHeRunNumberR=22393;} if(thisHeRunNumberR==22425){thisHeRunNumberR=22436;} if(thisHeRunNumberR==22426){thisHeRunNumberR=22436;} // Skipping Transverse Carbon Runs if(thisHeRunNumberR==22461){thisHeRunNumberR=22465;} // Adds runs to the chain for (int t=0; t<1000; t++) { filenameHeR = "/home/ellie/physics/e05-102/terabyte/ROOTfiles/e05102_R_"; filenameHeR += thisHeRunNumberR; if (t != 0) { filenameHeR += "_"; filenameHeR += t; } filenameHeR += ".root"; ifstream ifileHeR(filenameHeR); if (ifileHeR) { cout << "Adding file to chainHeR: " << filenameHeR << endl; chainHeR->Add(filenameHeR); } else { cout << "File " << filenameHeR << " does not exist. Ending here." << endl; t=999999999; } } // Use the line below only for debugging purposes. It will only add the first file. // thisHeRunNumberR=999999; } // *********************************************************************************************************** // ************************** The section below adds files to the Left arm chain from the LHRS *************** for (int thisHeRunNumberL=HeRunNumberL; thisHeRunNumberL<(endHeRunNumberL+1); thisHeRunNumberL++) { // Skipping Vertical Carbon and Deuterium Runs if(thisHeRunNumberL==1699){thisHeRunNumberL=1705;} if(thisHeRunNumberL==1825){thisHeRunNumberL=1832;} if(thisHeRunNumberL==1826){thisHeRunNumberL=1832;} if(thisHeRunNumberL==1827){thisHeRunNumberL=1832;} if(thisHeRunNumberL==1828){thisHeRunNumberL=1832;} if(thisHeRunNumberL==1830){thisHeRunNumberL=1832;} if(thisHeRunNumberL==1831){thisHeRunNumberL=1832;} if(thisHeRunNumberL==1884){thisHeRunNumberL=1905;} if(thisHeRunNumberL==1885){thisHeRunNumberL=1905;} // Skipping Longitudinal Carbon Runs if(thisHeRunNumberL==22380){thisHeRunNumberL=22393;} if(thisHeRunNumberL==22389){thisHeRunNumberL=22393;} if(thisHeRunNumberL==22425){thisHeRunNumberL=22436;} if(thisHeRunNumberL==22426){thisHeRunNumberL=22436;} // Skipping Transverse Carbon Runs if(thisHeRunNumberL==22461){thisHeRunNumberL=22465;} // Adds runs to the chain for (int t=0; t<1000; t++) { filenameHeL = "/home/ellie/physics/e05-102/terabyte/ROOTfiles/e05102_L_"; filenameHeL += thisHeRunNumberL; if (t != 0) { filenameHeL += "_"; filenameHeL += t; } filenameHeL += ".root"; ifstream ifileHeL(filenameHeL); if (ifileHeL) { cout << "Adding file to chainHeL: " << filenameHeL << endl; chainHeL->Add(filenameHeL); } else { cout << "File " << filenameHeL << " does not exist. Ending here." << endl; t=999999999; } } // Use the line below only for debugging purposes. It will only add the first file. // thisHeRunNumberL=999999; } // **************************************************************************************************************** gStyle->SetPalette(1); // Defines Canvas TCanvas *c1 = new TCanvas("c1","Asymmetry",1360,810); //x,y pad1 = new TPad("pad1","pad1",0.0000,0.6666,0.2500,1.0000,0,0,0); pad2 = new TPad("pad2","pad2",0.2500,0.6666,0.5000,1.0000,0,0,0); pad3 = new TPad("pad3","pad3",0.5000,0.6666,0.7500,1.0000,0,0,0); pad4 = new TPad("pad4","pad4",0.7500,0.6666,1.0000,1.0000,0,0,0); pad5 = new TPad("pad5","pad5",0.0000,0.3333,0.2000,0.6666,0,0,0); pad6 = new TPad("pad6","pad6",0.2000,0.3333,0.4000,0.6666,0,0,0); pad7 = new TPad("pad7","pad7",0.4000,0.3333,0.6000,0.6666,0,0,0); pad8 = new TPad("pad8","pad8",0.6000,0.3333,0.8000,0.6666,0,0,0); pad9 = new TPad("pad9","pad9",0.8000,0.3333,1.0000,0.6666,0,0,0); pad10 = new TPad("pad10","pad10",0.0000,0.0000,0.5000,0.3333,0,0,0); pad11 = new TPad("pad11","pad11",0.5000,0.0000,1.0000,0.3333,0,0,0); pad1->Draw();pad2->Draw();pad3->Draw();pad4->Draw();pad5->Draw();pad6->Draw();pad7->Draw();pad8->Draw();pad9->Draw();pad10->Draw();pad11->Draw(); // Everything below here makes graphs for each section of the canvas pad1->cd(); TString titledp = "dp Cut"; cout << "Drawing " << titledp << "..." << endl; TH1F *HedpNoCut = new TH1F("HedpNoCut",titledp,400,-0.08,0.08); TH1F *HedpCut = new TH1F("HedpCut",titledp,400,-0.08,0.08); chainHeR->Draw("ExTgtCor_R.dp>>HedpNoCutR(400,-0.08,0.08)", "", ""); chainHeR->Draw("ExTgtCor_R.dp>>HedpCutR(400,-0.08,0.08)", goldR, ""); chainHeL->Draw("ExTgtCor_L.dp>>HedpNoCutL(400,-0.08,0.08)", "", ""); chainHeL->Draw("ExTgtCor_L.dp>>HedpCutL(400,-0.08,0.08)", goldL, ""); HedpNoCut->Add(HedpNoCutR,HedpNoCutL); HedpNoCut->SetTitle(titledp); HedpNoCut->Draw(); HedpCut->Add(HedpCutR,HedpCutL); HedpCut->SetLineColor(kBlack); HedpCut->SetFillColor(kViolet); HedpCut->Draw("same"); pad2->cd(); cout << "Drawing Target Cut..." << endl; TString titleTarget = "Target Cut"; TH1F *HeReactZNoCut = new TH1F("HeReactZNoCut",titleTarget,400,-0.3,0.3); TH1F *HeReactZCut = new TH1F("HeReactZCut",titleTarget,400,-0.3,0.3); chainHeR->Draw("ReactPt_R.z>>HeReactZNoCutR(400,-0.3,0.3)", "", ""); chainHeR->Draw("ReactPt_R.z>>HeReactZCutR(400,-0.3,0.3)", targetR, ""); chainHeL->Draw("ReactPt_L.z>>HeReactZNoCutL(400,-0.3,0.3)", "", ""); chainHeL->Draw("ReactPt_L.z>>HeReactZCutL(400,-0.3,0.3)", targetL, ""); HeReactZNoCut->Add(HeReactZNoCutR,HeReactZNoCutL); HeReactZNoCut->SetTitle(titleTarget); HeReactZNoCut->Draw(); HeReactZCut->Add(HeReactZCutR,HeReactZCutL); HeReactZCut->SetLineColor(kBlack); HeReactZCut->SetFillColor(kViolet); HeReactZCut->Draw("same"); pad3->cd(); cout << "Drawing Theta and Phi..." << endl; TString titleThetaPhiNoCut = "Theta and Phi, No Cut"; TH2F *HeThetaPhiNoCut = new TH2F("HeThetaPhiNoCut",titleThetaPhiNoCut,100,-0.05,0.05,100,-0.1,0.1); chainHeR->Draw("ExTgtCor_R.th:ExTgtCor_R.ph>>HeThetaPhiNoCutR(100,-0.05,0.05,100,-0.1,0.1)", targetR, ""); chainHeL->Draw("ExTgtCor_L.th:ExTgtCor_L.ph>>HeThetaPhiNoCutL(100,-0.05,0.05,100,-0.1,0.1)", targetL, ""); HeThetaPhiNoCut->Add(HeThetaPhiNoCutR,HeThetaPhiNoCutL); HeThetaPhiNoCut->SetTitle(titleThetaPhiNoCut); HeThetaPhiNoCut->SetStats(kFALSE); HeThetaPhiNoCut->Draw("COLZ"); pad4->cd(); cout << "Drawing Theta and Phi Cut..." << endl; TString titleThetaPhi = "Theta and Phi Cut"; TH2F *HeThetaPhiCut = new TH2F("HeThetaPhiCut",titleThetaPhi,100,-0.05,0.05,100,-0.1,0.1); chainHeR->Draw("ExTgtCor_R.th:ExTgtCor_R.ph>>HeThetaPhiCutR(100,-0.05,0.05,100,-0.1,0.1)", targetR && thetaphiR, ""); chainHeL->Draw("ExTgtCor_L.th:ExTgtCor_L.ph>>HeThetaPhiCutL(100,-0.05,0.05,100,-0.1,0.1)", targetL && thetaphiL, ""); HeThetaPhiCut->Add(HeThetaPhiCutR,HeThetaPhiCutL); HeThetaPhiCut->SetTitle(titleThetaPhi); HeThetaPhiCut->SetStats(kFALSE); HeThetaPhiCut->Draw("COLZ"); pad5->cd(); TString titleQ2 = "Q2"; TH1F *histQ2 = new TH1F("histQ2",titleQ2,400,0,1.6); cout << "Drawing " << titleQ2 << "..." << endl; chainHeR->Draw("PriKineR.Q2>>histQ2R(400,0,1.6)", cutsR, ""); chainHeL->Draw("PriKineL.Q2>>histQ2L(400,0,1.6)", cutsL, ""); histQ2->Add(histQ2R,histQ2L); histQ2->SetTitle(titleQ2); histQ2->SetStats(kFALSE); histQ2->Draw(); pad6->cd(); TString titleNu = "Nu"; cout << "Drawing " << titleNu << "..." << endl; TH1F *histNu = new TH1F("histNu",titleNu,100,0.3,0.8); chainHeR->Draw("PriKineR.nu>>histNuR(100,0.3,0.8)", cutsR, ""); chainHeL->Draw("PriKineL.nu>>histNuL(100,0.3,0.8)", cutsL, ""); histNu->Add(histNuR,histNuL); histNu->SetTitle(titleNu); histNu->SetStats(kFALSE); histNu->Draw(); pad7->cd(); TString titleHel = "Helicity vs. Bjorken x"; cout << "Drawing " << titleHel << "..." << endl; TH2F *histHelR = new TH2F("histHelR",titleHel,bins,xmin,xmax,7,-2,2); TH2F *histHelL = new TH2F("histHelL",titleHel,bins,xmin,xmax,7,-2,2); TH2F *histHel = new TH2F("histHel",titleHel,bins,xmin,xmax,7,-2,2); chainHeR->Draw("g0hel.R.helicity:(PriKineR.Q2 / (PriKineR.nu * 2 * 0.9315))>>histHelR", cutsR, ""); chainHeL->Draw("g0hel.L.helicity:(PriKineL.Q2 / (PriKineL.nu * 2 * 0.9315))>>histHelL", cutsL, ""); histHel->Add(histHelR,histHelL); histHel->Draw("COLZ"); // Note: For all plots below, Positive Helicity is defined as g0hel.R.helicity==1 when the BHWP is In // and g0hel.R.helicity==-1 when the BHWP is Out pad8->cd(); TString titlePosHelx = "# of Positive Helicity Events vs. Bjorken x"; cout << "Drawing " << titlePosHelx << "..." << endl; TH1F *histPosHelxIn1R = new TH1F("histPosHelxIn1R",titlePosHelx,bins,xmin,xmax); TH1F *histPosHelxIn2R = new TH1F("histPosHelxIn2R",titlePosHelx,bins,xmin,xmax); TH1F *histPosHelxInR = new TH1F("histPosHelxInR",titlePosHelx,bins,xmin,xmax); TH1F *histPosHelxOut1R = new TH1F("histPosHelxOut1R",titlePosHelx,bins,xmin,xmax); TH1F *histPosHelxOut2R = new TH1F("histPosHelxOut2R",titlePosHelx,bins,xmin,xmax); TH1F *histPosHelxOutR = new TH1F("histPosHelxOutR",titlePosHelx,bins,xmin,xmax); TH1F *histPosHelxIn1L = new TH1F("histPosHelxIn1L",titlePosHelx,bins,xmin,xmax); TH1F *histPosHelxIn2L = new TH1F("histPosHelxIn2L",titlePosHelx,bins,xmin,xmax); TH1F *histPosHelxInL = new TH1F("histPosHelxInL",titlePosHelx,bins,xmin,xmax); TH1F *histPosHelxOut1L = new TH1F("histPosHelxOut1L",titlePosHelx,bins,xmin,xmax); TH1F *histPosHelxOut2L = new TH1F("histPosHelxOut2L",titlePosHelx,bins,xmin,xmax); TH1F *histPosHelxOutL = new TH1F("histPosHelxOutL",titlePosHelx,bins,xmin,xmax); TH1F *histPosHelxR = new TH1F("histPosHelxL",titlePosHelx,bins,xmin,xmax); TH1F *histPosHelxL = new TH1F("histPosHelxR",titlePosHelx,bins,xmin,xmax); TH1F *histPosHelx = new TH1F("histPosHelx",titlePosHelx,bins,xmin,xmax); chainHeR->Draw("(PriKineR.Q2 / (PriKineR.nu * 2 * 0.9315))>>histPosHelxIn1R", cutsR && "g0hel.R.helicity==1" && "fEvtHdr.fRun>20576" && "fEvtHdr.fRun<20684", ""); chainHeR->Draw("(PriKineR.Q2 / (PriKineR.nu * 2 * 0.9315))>>histPosHelxIn2R", cutsR && "g0hel.R.helicity==1" && "fEvtHdr.fRun>20728" && "fEvtHdr.fRun<20813", ""); chainHeR->Draw("(PriKineR.Q2 / (PriKineR.nu * 2 * 0.9315))>>histPosHelxOut1R", cutsR && "g0hel.R.helicity==-1" && "fEvtHdr.fRun>20683" && "fEvtHdr.fRun<20728", ""); chainHeR->Draw("(PriKineR.Q2 / (PriKineR.nu * 2 * 0.9315))>>histPosHelxOut2R", cutsR && "g0hel.R.helicity==-1" && "fEvtHdr.fRun>20813" && "fEvtHdr.fRun<20879", ""); chainHeL->Draw("(PriKineL.Q2 / (PriKineL.nu * 2 * 0.9315))>>histPosHelxIn1L", cutsL && "g0hel.L.helicity==1" && "fEvtHdr.fRun>1685" && "fEvtHdr.fRun<1778", ""); chainHeL->Draw("(PriKineL.Q2 / (PriKineL.nu * 2 * 0.9315))>>histPosHelxIn2L", cutsL && "g0hel.L.helicity==1" && "fEvtHdr.fRun>1822" && "fEvtHdr.fRun<1905", ""); chainHeL->Draw("(PriKineL.Q2 / (PriKineL.nu * 2 * 0.9315))>>histPosHelxOut1L", cutsL && "g0hel.L.helicity==-1" && "fEvtHdr.fRun>1777" && "fEvtHdr.fRun<1823", ""); chainHeL->Draw("(PriKineL.Q2 / (PriKineL.nu * 2 * 0.9315))>>histPosHelxOut2L", cutsL && "g0hel.L.helicity==-1" && "fEvtHdr.fRun>1905" && "fEvtHdr.fRun<1960", ""); histPosHelxInR->Add(histPosHelxIn1R,histPosHelxIn2R); histPosHelxOutR->Add(histPosHelxOut1R,histPosHelxOut2R); histPosHelxR->Add(histPosHelxInR,histPosHelxOutR); histPosHelxInL->Add(histPosHelxIn1L,histPosHelxIn2L); histPosHelxOutL->Add(histPosHelxOut1L,histPosHelxOut2L); histPosHelxL->Add(histPosHelxInL,histPosHelxOutL); histPosHelx->Add(histPosHelxR,histPosHelxL); histPosHelx->Draw(); pad9->cd(); TString titleNegHelx = "# of Negative Helicity Events vs. Bjorken x"; cout << "Drawing " << titleNegHelx << "..." << endl; TH1F *histNegHelxIn1R = new TH1F("histNegHelxIn1R",titleNegHelx,bins,xmin,xmax); TH1F *histNegHelxIn2R = new TH1F("histNegHelxIn2R",titleNegHelx,bins,xmin,xmax); TH1F *histNegHelxInR = new TH1F("histNegHelxInR",titleNegHelx,bins,xmin,xmax); TH1F *histNegHelxOut1R = new TH1F("histNegHelxOut1R",titleNegHelx,bins,xmin,xmax); TH1F *histNegHelxOut2R = new TH1F("histNegHelxOut2R",titleNegHelx,bins,xmin,xmax); TH1F *histNegHelxOutR = new TH1F("histNegHelxOutR",titleNegHelx,bins,xmin,xmax); TH1F *histNegHelxR = new TH1F("histNegHelxR",titleNegHelx,bins,xmin,xmax); TH1F *histNegHelxIn1L = new TH1F("histNegHelxIn1L",titleNegHelx,bins,xmin,xmax); TH1F *histNegHelxIn2L = new TH1F("histNegHelxIn2L",titleNegHelx,bins,xmin,xmax); TH1F *histNegHelxInL = new TH1F("histNegHelxInL",titleNegHelx,bins,xmin,xmax); TH1F *histNegHelxOut1L = new TH1F("histNegHelxOut1L",titleNegHelx,bins,xmin,xmax); TH1F *histNegHelxOut2L = new TH1F("histNegHelxOut2L",titleNegHelx,bins,xmin,xmax); TH1F *histNegHelxOutL = new TH1F("histNegHelxOutL",titleNegHelx,bins,xmin,xmax); TH1F *histNegHelxL = new TH1F("histNegHelxL",titleNegHelx,bins,xmin,xmax); TH1F *histNegHelx = new TH1F("histNegHelx",titleNegHelx,bins,xmin,xmax); chainHeR->Draw("(PriKineR.Q2 / (PriKineR.nu * 2 * 0.9315))>>histNegHelxIn1R", cutsR && "g0hel.R.helicity==-1" && "fEvtHdr.fRun>20576" && "fEvtHdr.fRun<20684", ""); chainHeR->Draw("(PriKineR.Q2 / (PriKineR.nu * 2 * 0.9315))>>histNegHelxIn2R", cutsR && "g0hel.R.helicity==-1" && "fEvtHdr.fRun>20728" && "fEvtHdr.fRun<20813", ""); chainHeR->Draw("(PriKineR.Q2 / (PriKineR.nu * 2 * 0.9315))>>histNegHelxOut1R", cutsR && "g0hel.R.helicity==1" && "fEvtHdr.fRun>20683" && "fEvtHdr.fRun<20728", ""); chainHeR->Draw("(PriKineR.Q2 / (PriKineR.nu * 2 * 0.9315))>>histNegHelxOut2R", cutsR && "g0hel.R.helicity==1" && "fEvtHdr.fRun>20813" && "fEvtHdr.fRun<20879", ""); chainHeL->Draw("(PriKineL.Q2 / (PriKineL.nu * 2 * 0.9315))>>histNegHelxIn1L", cutsL && "g0hel.L.helicity==-1" && "fEvtHdr.fRun>1685" && "fEvtHdr.fRun<1778", ""); chainHeL->Draw("(PriKineL.Q2 / (PriKineL.nu * 2 * 0.9315))>>histNegHelxIn2L", cutsL && "g0hel.L.helicity==-1" && "fEvtHdr.fRun>1822" && "fEvtHdr.fRun<1905", ""); chainHeL->Draw("(PriKineL.Q2 / (PriKineL.nu * 2 * 0.9315))>>histNegHelxOut1L", cutsL && "g0hel.L.helicity==1" && "fEvtHdr.fRun>1777" && "fEvtHdr.fRun<1823", ""); chainHeL->Draw("(PriKineL.Q2 / (PriKineL.nu * 2 * 0.9315))>>histNegHelxOut2L", cutsL && "g0hel.L.helicity==1" && "fEvtHdr.fRun>1905" && "fEvtHdr.fRun<1960", ""); histNegHelxInR->Add(histNegHelxIn1R,histNegHelxIn2R); histNegHelxInL->Add(histNegHelxIn1L,histNegHelxIn2L); histNegHelxOutR->Add(histNegHelxOut1R,histNegHelxOut2R); histNegHelxOutL->Add(histNegHelxOut1L,histNegHelxOut2L); histNegHelxR->Add(histNegHelxInR,histNegHelxOutR); histNegHelxL->Add(histNegHelxInL,histNegHelxOutL); histNegHelx->Add(histNegHelxR,histNegHelxL); histNegHelx->Draw(); pad10->cd(); TString titlex = "Bjorken x "; titlex += " (x=Q^2/[2m*nu])"; cout << "Drawing " << titlex << "..." << endl; TH1F *histxR = new TH1F("histxR",titlex,bins,xmin,xmax); TH1F *histxL = new TH1F("histxL",titlex,bins,xmin,xmax); TH1F *histx = new TH1F("histx",titlex,bins,xmin,xmax); histx->Sumw2(); chainHeR->Draw("(PriKineR.Q2 / (PriKineR.nu * 2 * 0.9315))>>histxR", cutsR, "E"); chainHeL->Draw("(PriKineL.Q2 / (PriKineL.nu * 2 * 0.9315))>>histxL", cutsL, "E"); histx->Add(histxR,histxL); histx->Draw(); // Note: Asymmetry is defined as (Pos - Neg)/(Pos + Neg) pad11->cd(); TString titleAsym = "Beam Asymmetry (%) vs. Bjorken x for Q2 of "; titleAsym += Q2; cout << "Drawing " << titleAsym << "..." << endl; histAsym = histPosHelx->GetAsymmetry(histNegHelx); histAsym->Scale(100); histAsym->SetTitle(titleAsym); histAsym->Draw(); TString imagename = "Asymmetries/Vertical_Beam_Asymmetry_for_Q2_of_"; imagename += Q2; imagename += ".png"; c1->Print(imagename); cout << "All done!" << endl; }