#define AnalyzeMps_Q_cxx #include "AnalyzeMps_Q.h" #include #include #include //this function form the structure and returns two arrays: groupNum[322] and dataCount[322]. void AnalyzeMps_Q::Loop(Int_t run,Int_t pmt,Double_t preAmp,Int_t HV,Double_t LL,Double_t Iout,Double_t Ped_X1,Double_t Ped_X2,Double_t asym_X1,Double_t asym_X2,Double_t chsum,Double_t asym1_X1,Double_t asym1_X2,Double_t asymF_X1,Double_t asymF_X2,Double_t asymP_X1,Double_t asymP_X2,Double_t asym_Y1,Double_t asym_Y2) { // In a ROOT session, you can do: // root> .L AnalyzeMps_Q.C // root> AnalyzeMps_Q t // root> t.GetEntry(12); // Fill t data members with entry number 12 // root> t.Show(); // Show values of entry 12 // root> t.Show(16); // Read and show values of entry 16 // root> t.Loop(); // Loop on all entries // This is the loop skeleton where: // jentry is the global entry number in the chain // ientry is the entry number in the current Tree // Note that the argument to GetEntry must be: // jentry for TChain::GetEntry // ientry for TTree::GetEntry and TBranch::GetEntry // // To read only selected branches, Insert statements like: // METHOD1: // fChain->SetBranchStatus("*",0); // disable all branches // fChain->SetBranchStatus("branchname",1); // activate branchname // METHOD2: replace line // fChain->GetEntry(jentry); //read all branches // by b_branchname->GetEntry(ientry); //read only this branch if (fChain == 0) return; Long64_t nentries = fChain->GetEntriesFast(); Double_t sum1, sum2; const int arraysize = nentries; const int pairsize = nentries/2; Double_t EventNumArray[arraysize]; Double_t SumArray[arraysize]; double diff_even, diff_odd; TFile *rootfile = new TFile("AnalyzeMps_Q.root","recreate"); TH2F *h1_raw = new TH2F("h1_raw", "", nentries/100, 0, nentries, 1000, 0, 262000000); TH2F *h1_raw_even = new TH2F("h1_raw_even", "", nentries/100, 0, nentries, 1000, 0, 262000000); TH2F *h1_raw_odd = new TH2F("h1_raw_odd", "", nentries/100, 0, nentries, 1000, 0, 262000000); TH1F *h1_ped = new TH1F("h1_ped", "", 100, Ped_X1, Ped_X2); TH1F *h1_ped_even = new TH1F("h1_ped_even", "", 100, Ped_X1, Ped_X2); TH1F *h1_ped_odd = new TH1F("h1_ped_odd", "", 100, Ped_X1, Ped_X2); TH2F *h1_rawCor = new TH2F("h1_rawCor", "", nentries/10, 0, nentries, 1000, 0, 262000000); TH2F *h1_rawCor_even = new TH2F("h1_rawCor_even", "", nentries/10, 0, nentries, 1000, 0, 262000000); TH2F *h1_rawCor_odd = new TH2F("h1_rawCor_odd", "", nentries/10, 0, nentries, 1000, 0, 262000000); TH2F *h1_asym_my = new TH2F("h1_asym_my", "", nentries/20, 0, nentries/8, 800, asym_X1, asym_X2); h1_raw->SetYTitle("ADC (raw ch sum)"); h1_raw->SetXTitle("Event #"); h1_raw_even->SetMarkerColor(kBlue); h1_raw_odd->SetMarkerColor(kRed); h1_ped->SetYTitle("Events"); h1_ped->SetXTitle("ADC (raw ch sum)"); h1_ped->SetLineColor(kBlack); h1_ped_even->SetLineColor(kBlue); h1_ped_odd->SetLineColor(kRed); h1_rawCor->SetYTitle("ADC (raw, ped-corr ch sum)"); h1_rawCor->SetXTitle("Event #"); h1_rawCor_even->SetMarkerColor(kBlue); h1_rawCor_odd->SetMarkerColor(kRed); h1_asym_my->SetYTitle("A_{LED}"); h1_asym_my->SetXTitle("Pair #"); const int positions = 160; const int filters = 8; const int wheelCycles = 20; TH1S *h[positions]; TH1S *hPed; char name[20]; char title[100]; sprintf(name,"hPed_asym"); hPed = new TH1S(name,"",100, asymP_X1, asymP_X2); TH1S *havg[positions]; Int_t f; for(f=0;fSetMinimum(0.0); h[f]->SetMaximum(60); h[f]->SetYTitle("Events"); h[f]->SetXTitle("A_{LED}"); } for(f=0;fSetMinimum(0.0); havg[f]->SetMaximum(8); havg[f]->SetYTitle("Events"); havg[f]->SetXTitle("A_{LED}"); } Int_t samples = 500; Int_t blocks = 4; Int_t FF = 120; // LED flashing rate Int_t pmtNum = 4; Double_t Vperch = 76.29E-6; //Volts per channel Long64_t nbytes = 0, nb = 0; std::ifstream ifs("diff.txt");//this reads the text file. ifs.close(); std::ifstream ofs ("diff.txt", std::ios::out |std::ios::trunc);//this clears the contents of the text file. ofs.close(); std::ofstream myfile("diff.txt", std::ios_base::out | std::ios_base::app);//this writes the output to the text file. for (Long64_t jentry=6; jentryGetEntry(jentry); nbytes += nb; EventNumArray[jentry] = CodaEventNumber; SumArray[jentry] = qwk_mod0ch2_hw_sum_raw; if(myfile.is_open()) {myfile <Fill(EventNumArray[jentry], SumArray[jentry]); if(EventNumArray[jentry]/2.0 - int(EventNumArray[jentry]/2) == 0) { h1_raw_even->Fill(EventNumArray[jentry], SumArray[jentry]); } else { h1_raw_odd->Fill(EventNumArray[jentry], SumArray[jentry]); } if(SumArray[jentry]<=chsum) { h1_ped->Fill(SumArray[jentry]); if(EventNumArray[jentry]/2.0 - int(EventNumArray[jentry]/2) == 0) { h1_ped_even->Fill(SumArray[jentry]); } else { h1_ped_odd->Fill(SumArray[jentry]); } } } Double_t pedAve = h1_ped->GetMean(); Double_t EvenSumCor[4][pairsize]; Double_t OddSumCor[4][pairsize]; Double_t EvenSumCorPed[4][pairsize]; Double_t OddSumCorPed[4][pairsize]; Double_t sum, diff; Int_t E1,E2,E3,E4,O1,O2,O3,O4; Int_t pairNumber = 1; for (Long64_t jentry=6; jentryFill(EventNumArray[jentry], SumArray[jentry]-pedAve); if(EventNumArray[jentry]/8.0 - int(EventNumArray[jentry]/8) == 0) { E1++; h1_rawCor_even->Fill(EventNumArray[jentry], SumArray[jentry]-pedAve); EvenSumCor[0][E1] = SumArray[jentry]-pedAve; EvenSumCorPed[0][E1] = SumArray[jentry]; } else if((EventNumArray[jentry]-1)/8.0 - int((EventNumArray[jentry]-1)/8) == 0){ O1++; h1_rawCor_odd->Fill(EventNumArray[jentry], SumArray[jentry]-pedAve); OddSumCor[0][O1] = SumArray[jentry]-pedAve; OddSumCorPed[0][O1] = SumArray[jentry]; }else if((EventNumArray[jentry]-2)/8.0 - int((EventNumArray[jentry]-2)/8) == 0) { E2++; h1_rawCor_even->Fill(EventNumArray[jentry], SumArray[jentry]-pedAve); EvenSumCor[1][E2] = SumArray[jentry]-pedAve; EvenSumCorPed[1][E2] = SumArray[jentry]; } else if((EventNumArray[jentry]-3)/8.0 - int((EventNumArray[jentry]-3)/8) == 0){ O2++; h1_rawCor_odd->Fill(EventNumArray[jentry], SumArray[jentry]-pedAve); OddSumCor[1][O2] = SumArray[jentry]-pedAve; OddSumCorPed[1][O2] = SumArray[jentry]; }else if((EventNumArray[jentry]-4)/8.0 - int((EventNumArray[jentry]-4)/8) == 0) { E3++; h1_rawCor_even->Fill(EventNumArray[jentry], SumArray[jentry]-pedAve); EvenSumCor[2][E3] = SumArray[jentry]-pedAve; EvenSumCorPed[2][E3] = SumArray[jentry]; } else if((EventNumArray[jentry]-5)/8.0 - int((EventNumArray[jentry]-5)/8) == 0){ O3++; h1_rawCor_odd->Fill(EventNumArray[jentry], SumArray[jentry]-pedAve); OddSumCor[2][O3] = SumArray[jentry]-pedAve; OddSumCorPed[2][O3] = SumArray[jentry]; }else if((EventNumArray[jentry]-6)/8.0 - int((EventNumArray[jentry]-6)/8) == 0) { E4++; h1_rawCor_even->Fill(EventNumArray[jentry], SumArray[jentry]-pedAve); EvenSumCor[3][E4] = SumArray[jentry]-pedAve; EvenSumCorPed[3][E4] = SumArray[jentry]; } else if((EventNumArray[jentry]-7)/8.0 - int((EventNumArray[jentry]-7)/8) == 0){ O4++; h1_rawCor_odd->Fill(EventNumArray[jentry], SumArray[jentry]-pedAve); OddSumCor[3][O4] = SumArray[jentry]-pedAve; OddSumCorPed[3][O4] = SumArray[jentry]; } if(EventNumArray[jentry]/2.0 - int(EventNumArray[jentry]/2) == 0){ diff_even = abs(SumArray[jentry+2] - SumArray[jentry]); }else{ diff_odd = abs(SumArray[jentry+2] - SumArray[jentry]); } } const int paircount = E1; Double_t Asymmetry; int mygroup = 0; int mygroupPed = 0; int mycountTotalData = 1; int mycountTotalDataPed = 1; Double_t AsymmetryFilters[pairsize]; Double_t AsymmetryPed[pairsize]; Int_t mypairNum[pairsize]; Int_t mypairNumPed[pairsize]; Double_t mysum[pairsize]; Double_t mysumPed[pairsize]; Int_t mydataCount[positions], mydataCountPed; Double_t Navg[positions] = {0}; Double_t NavgPed = 0; Double_t Navgmean[8] = {0,0,0,0,0,0,0,0}; Double_t Navgmean_Cal[8] = {0,0,0,0,0,0,0,0}; Double_t dummyError[8] = {0,0,0,0,0,0,0,0}; Double_t Aled[positions] = {0,0,0,0,0,0,0,0}; Double_t Aledmean[8] = {0,0,0,0,0,0,0,0}; Double_t AledPed = 0; Double_t AledError[8] = {0,0,0,0,0,0,0,0}; Double_t AledErrormean[8] = {0,0,0,0,0,0,0,0}; int count[positions]; for(int i=1;i<=paircount;i++){ diff = EvenSumCor[0][i]+EvenSumCor[1][i]+EvenSumCor[2][i]+EvenSumCor[3][i]-OddSumCor[0][i]-OddSumCor[1][i]-OddSumCor[2][i]-OddSumCor[3][i]; sum = EvenSumCor[0][i]+EvenSumCor[1][i]+EvenSumCor[2][i]+EvenSumCor[3][i]+OddSumCor[0][i]+OddSumCor[1][i]+OddSumCor[2][i]+OddSumCor[3][i]; Asymmetry = fabs(diff/sum); h1_asym_my->Fill(i,Asymmetry); // cout<< sum << endl; if(sum>=1E6){ mypairNum[i] = i; AsymmetryFilters[i] = fabs(Asymmetry); mysum[i] = sum; }else{ mypairNumPed[i] = i; AsymmetryPed[i] = (EvenSumCorPed[0][i]+EvenSumCorPed[1][i]+EvenSumCorPed[2][i]+EvenSumCorPed[3][i]-OddSumCorPed[0][i]-OddSumCorPed[1][i]-OddSumCorPed[2][i]-OddSumCorPed[3][i])/(EvenSumCorPed[0][i]+EvenSumCorPed[1][i]+EvenSumCorPed[2][i]+EvenSumCorPed[3][i]+OddSumCorPed[0][i]+OddSumCorPed[1][i]+OddSumCorPed[2][i]+OddSumCorPed[3][i]); mysumPed[i] = sum; } if(mypairNum[i] !=mypairNum[i-1]+1 && mypairNum[i] !=0){ mygroup++; cout << mygroup << " " << mycountTotalData << endl; mycountTotalData = 1; }else if(mypairNum[i] !=0){ mycountTotalData++; } if(mypairNumPed[i] !=mypairNumPed[i-1]+1 && mypairNumPed[i] !=0){ mygroupPed++; cout << mygroupPed << " " << mycountTotalDataPed << endl; mycountTotalDataPed = 1; }else if(mypairNumPed[i] !=0){ mycountTotalDataPed++; } if((mygroup-3)/8.0 - int((mygroup-3)/8) == 0 && mysum[i] !=0 && AsymmetryFilters[i]>=asym1_X1 && AsymmetryFilters[i]<=asym1_X2){ h[mygroup-1]->Fill(AsymmetryFilters[i]); // cout<< mysum[i] << endl; }else if(mysum[i] !=0 && AsymmetryFilters[i]>=asymF_X1 && AsymmetryFilters[i]<=asymF_X2){ h[mygroup-1]->Fill(AsymmetryFilters[i]); // cout<< mysum[i] << endl; } if(mygroupPed>=0 && mygroupPed<=160 && mysumPed[i] !=0 && AsymmetryPed[i]>=asymP_X1 && AsymmetryPed[i]<=asymP_X2){ hPed->Fill(AsymmetryPed[i]); // cout<< mysumPed[i] << endl; } } for (int i=0; iGetEntries(); cout << mydataCount[i] << endl; } Int_t NavgGr; Int_t NavgGrPed; Int_t countNavgGrData = 1; Int_t countNavgGrDataPed = 1; for(int i=1;i<=paircount;i++){ if(mypairNum[i] !=mypairNum[i-1]+1 && mypairNum[i] !=0){ NavgGr++; countNavgGrData = 1; }else if(mypairNum[i] !=0){ countNavgGrData++; } if(mypairNumPed[i] !=mypairNumPed[i-1]+1 && mypairNumPed[i] !=0){ NavgGrPed++; countNavgGrDataPed = 1; }else if(mypairNumPed[i] !=0){ countNavgGrDataPed++; } if((NavgGr-3)/8.0 - int((NavgGr-3)/8) == 0 && mysum[i] !=0 && AsymmetryFilters[i]>=asym1_X1 && AsymmetryFilters[i]<=asym1_X2){ Navg[NavgGr-1] += mysum[i]/8/(mydataCount[NavgGr-1])/samples/blocks; count[NavgGr-1]++; }else if(mysum[i] !=0 && AsymmetryFilters[i]>=asymF_X1 && AsymmetryFilters[i]<=asymF_X2){ Navg[NavgGr-1] += mysum[i]/8/(mydataCount[NavgGr-1])/samples/blocks; count[NavgGr-1]++; } if(NavgGrPed>=0 && NavgGrPed<=160 && mysumPed[i] !=0 && AsymmetryPed[i]>=asymP_X1 && AsymmetryPed[i]<=asymP_X2){ NavgPed += mysumPed[i]/8/(hPed->GetEntries())/samples/blocks; } } myfile.close(); TCanvas *c = new TCanvas("c","Mps hwsum Tree Distributions",1000,650); c->Clear(); c->Divide(2,2); c->cd(1); gPad->SetGridx(1); gPad->SetGridy(1); h1_raw->Draw(); h1_raw_odd->Draw("same"); h1_raw_even->Draw("same"); char title1[256], legend1[256], legend2[256], flip[256], runLabel[256]; sprintf(title1,"Filter wheel scan: pmt#%4d @ %5d V, I_{cathode} = %2.1f nA", pmt, HV, LL); TPaveLabel *pt_1 = new TPaveLabel(0.14,0.91, 0.78,0.98,title1,"NDC"); pt_1->SetBorderSize(0); pt_1->SetTextColor(kBlack); pt_1->SetTextSize(0.75); pt_1->SetFillColor(0); pt_1->Draw(); sprintf(flip,"LED flash @ %4d Hz:", FF); TPaveLabel *pt_ff = new TPaveLabel(0.45,0.85,0.55,0.89,flip,"NDC"); pt_ff->SetBorderSize(0); pt_ff->SetTextColor(kBlack); pt_ff->SetTextSize(0.80); pt_ff->SetFillColor(0); pt_ff->Draw(); sprintf(legend1, "on"); sprintf(legend2, "off"); TPaveLabel *pt_l1 = new TPaveLabel(0.73,0.83,0.77,0.88,legend1,"NDC"); pt_l1->SetBorderSize(0); pt_l1->SetTextSize(0.80); pt_l1->SetFillColor(0); pt_l1->Draw(); TPaveLabel *pt_l2 = new TPaveLabel(0.73,0.79,0.77,0.84,legend2,"NDC"); pt_l2->SetBorderSize(0); pt_l2->SetTextSize(0.80); pt_l2->SetFillColor(0); pt_l2->Draw(); if(diff_oddSetTextColor(kBlue); pt_l2->SetTextColor(kRed); }else{pt_l1->SetTextColor(kRed); pt_l2->SetTextColor(kBlue);} sprintf(runLabel,"run %4d, PreAmp @ %3.2f M#Omega", run, preAmp); TPaveLabel *pt_rl = new TPaveLabel(0.15,0.85,0.38,0.89,runLabel,"NDC"); pt_rl->SetBorderSize(0); pt_rl->SetTextColor(kBlack); pt_rl->SetTextSize(0.80); pt_rl->SetFillColor(0); pt_rl->Draw(); c->cd(2); gPad->SetGridx(1); gPad->SetGridy(1); h1_ped->Draw(); h1_ped_odd->Draw("same"); //blue h1_ped_even->Draw("same"); //red char title2[256], legend3[256]; sprintf(title2,"Shutter closed (pedestal data)"); TPaveLabel *pt_2 = new TPaveLabel(0.14,0.91, 0.78,0.98,title2,"NDC"); pt_2->SetBorderSize(0); pt_2->SetTextColor(kBlack); pt_2->SetTextSize(0.75); pt_2->SetFillColor(0); pt_2->Draw(); TPaveLabel *pt2_l1 = new TPaveLabel(0.73,0.83,0.77,0.88,legend1,"NDC"); pt2_l1->SetBorderSize(0); pt2_l1->SetTextSize(0.80); pt2_l1->SetFillColor(0); pt2_l1->Draw(); TPaveLabel *pt2_l2 = new TPaveLabel(0.73,0.79,0.77,0.84,legend2,"NDC"); pt2_l2->SetBorderSize(0); pt2_l2->SetTextSize(0.80); pt2_l2->SetFillColor(0); pt2_l2->Draw(); sprintf(legend3,"sum"); TPaveLabel *pt2_l3 = new TPaveLabel(0.73,0.75,0.77,0.80,legend3,"NDC"); pt2_l3->SetBorderSize(0); pt2_l3->SetTextColor(kBlack); pt2_l3->SetTextSize(0.80); pt2_l3->SetFillColor(0); pt2_l3->Draw(); if(diff_oddSetTextColor(kBlue); pt2_l2->SetTextColor(kRed); }else{pt2_l1->SetTextColor(kRed); pt2_l2->SetTextColor(kBlue);} c->cd(3); gPad->SetGridx(1); gPad->SetGridy(1); h1_rawCor->Draw(); h1_rawCor_odd->Draw("same"); h1_rawCor_even->Draw("same"); char title3[256]; sprintf(title3,"Pedestal-corrected"); TPaveLabel *pt_3 = new TPaveLabel(0.14,0.91, 0.78,0.98,title3,"NDC"); pt_3->SetBorderSize(0); pt_3->SetTextColor(kBlack); pt_3->SetTextSize(0.75); pt_3->SetFillColor(0); pt_3->Draw(); TPaveLabel *pt3_l1 = new TPaveLabel(0.73,0.83,0.77,0.88,legend1,"NDC"); pt3_l1->SetBorderSize(0); pt3_l1->SetTextSize(0.80); pt3_l1->SetFillColor(0); pt3_l1->Draw(); TPaveLabel *pt3_l2 = new TPaveLabel(0.73,0.79,0.77,0.84,legend2,"NDC"); pt3_l2->SetBorderSize(0); pt3_l2->SetTextSize(0.80); pt3_l2->SetFillColor(0); pt3_l2->Draw(); if(diff_oddSetTextColor(kBlue); pt3_l2->SetTextColor(kRed); }else{pt3_l1->SetTextColor(kRed); pt3_l2->SetTextColor(kBlue);} c->cd(4); gPad->SetGridx(1); gPad->SetGridy(1); h1_asym_my->Draw(); char title4[256]; sprintf(title4,"Pair-wise Asymmetry vs. pair #"); TPaveLabel *pt_4 = new TPaveLabel(0.14,0.91, 0.78,0.98,title4,"NDC"); pt_4->SetBorderSize(0); pt_4->SetTextColor(kBlack); pt_4->SetTextSize(0.75); pt_4->SetFillColor(0); pt_4->Draw(); char plotname[256]; sprintf(plotname,"./r%dplotsMps_Quartet.png",run); // sprintf(plotname,"./r%dplotsMps_S.pdf",run); c->Print(plotname); for(int i=0; iClear(); c21->Divide(3,3); gStyle->SetStatW(0.30); gStyle->SetStatH(0.30); c21->cd(1); gPad->SetGridx(1); gPad->SetGridy(1); h[8*i+2]->Draw(); char label1[256], labelF1[256], labelRun[256];; sprintf(label1,"N_avg = %4.3e (%4.1f %%)" ,Navg[2], Navg[2]/Navg[0]*100); TPaveLabel *pt1 = new TPaveLabel(0.14,0.83, 0.60,0.89,label1,"NDC"); pt1->SetBorderSize(0); pt1->SetTextColor(kBlack); pt1->SetTextSize(1.0); pt1->SetFillColor(0); pt1->Draw(); sprintf(labelF1,"1 #pm 0.1%% ND filter"); TPaveLabel *ptF1 = new TPaveLabel(0.20,0.75, 0.43,0.81,labelF1,"NDC"); ptF1->SetBorderSize(0); ptF1->SetTextColor(kMagenta); ptF1->SetTextSize(1.0); ptF1->SetFillColor(0); ptF1->Draw(); sprintf(labelRun,"run %4d, %5d V, I_pe #approx %2.1f nA, %3d Hz", run, HV, LL, FF); TPaveLabel *ptR1 = new TPaveLabel(0.12,0.91, 0.68,0.99,labelRun,"NDC"); ptR1->SetBorderSize(0); ptR1->SetTextColor(kRed); ptR1->SetTextSize(0.80); ptR1->SetFillColor(0); ptR1->Draw(); c21->cd(2); gPad->SetGridx(1); gPad->SetGridy(1); h[8*i+3]->Draw(); char label2[256], labelF2[256]; sprintf(label2,"N_avg = %4.3e (%4.1f %%)" ,Navg[3], Navg[3]/Navg[0]*100); TPaveLabel *pt2 = new TPaveLabel(0.14,0.83, 0.60,0.89,label2,"NDC"); pt2->SetBorderSize(0); pt2->SetTextColor(kBlack); pt2->SetTextSize(1.0); pt2->SetFillColor(0); pt2->Draw(); sprintf(labelF2,"50 #pm 5%% ND filter"); TPaveLabel *ptF2 = new TPaveLabel(0.20,0.75, 0.43,0.81,labelF2,"NDC"); ptF2->SetBorderSize(0); ptF2->SetTextColor(kMagenta); ptF2->SetTextSize(1.0); ptF2->SetFillColor(0); ptF2->Draw(); c21->cd(3); gPad->SetGridx(1); gPad->SetGridy(1); h[8*i+4]->Draw(); char label3[256], labelF3[256]; sprintf(label3,"N_avg = %4.3e (%4.1f %%)" ,Navg[4], Navg[4]/Navg[0]*100); TPaveLabel *pt3 = new TPaveLabel(0.14,0.83, 0.60,0.89,label3,"NDC"); pt3->SetBorderSize(0); pt3->SetTextColor(kBlack); pt3->SetTextSize(1.0); pt3->SetFillColor(0); pt3->Draw(); sprintf(labelF3,"63 #pm 5%% ND filter"); TPaveLabel *ptF3 = new TPaveLabel(0.20,0.75, 0.43,0.81,labelF3,"NDC"); ptF3->SetBorderSize(0); ptF3->SetTextColor(kMagenta); ptF3->SetTextSize(1.0); ptF3->SetFillColor(0); ptF3->Draw(); c21->cd(4); gPad->SetGridx(1); gPad->SetGridy(1); h[8*i+5]->Draw(); char label4[256], labelF4[256]; sprintf(label4,"N_avg = %4.3e (%4.1f %%)" ,Navg[5], Navg[5]/Navg[0]*100); TPaveLabel *pt4 = new TPaveLabel(0.14,0.83, 0.60,0.89,label4,"NDC"); pt4->SetBorderSize(0); pt4->SetTextColor(kBlack); pt4->SetTextSize(1.0); pt4->SetFillColor(0); pt4->Draw(); sprintf(labelF4,"25 #pm 2.5%% ND filter"); TPaveLabel *ptF4 = new TPaveLabel(0.20,0.75, 0.43,0.81,labelF4,"NDC"); ptF4->SetBorderSize(0); ptF4->SetTextColor(kMagenta); ptF4->SetTextSize(1.0); ptF4->SetFillColor(0); ptF4->Draw(); c21->cd(5); gPad->SetGridx(1); gPad->SetGridy(1); h[8*i+6]->Draw(); char label5[256], labelF5[256]; sprintf(label5,"N_avg = %4.3e (%4.1f %%)" ,Navg[6], Navg[6]/Navg[0]*100); TPaveLabel *pt5 = new TPaveLabel(0.14,0.83, 0.60,0.89,label5,"NDC"); pt5->SetBorderSize(0); pt5->SetTextColor(kBlack); pt5->SetTextSize(1.0); pt5->SetFillColor(0); pt5->Draw(); sprintf(labelF5,"79 #pm 5%% ND filter"); TPaveLabel *ptF5 = new TPaveLabel(0.20,0.75, 0.43,0.81,labelF5,"NDC"); ptF5->SetBorderSize(0); ptF5->SetTextColor(kMagenta); ptF5->SetTextSize(1.0); ptF5->SetFillColor(0); ptF5->Draw(); c21->cd(6); gPad->SetGridx(1); gPad->SetGridy(1); h[8*i+7]->Draw(); char label6[256], labelF6[256]; sprintf(label6,"N_avg = %4.3e (%4.1f %%)" ,Navg[7], Navg[7]/Navg[0]*100); TPaveLabel *pt6 = new TPaveLabel(0.14,0.83, 0.60,0.89,label6,"NDC"); pt6->SetBorderSize(0); pt6->SetTextColor(kBlack); pt6->SetTextSize(1.0); pt6->SetFillColor(0); pt6->Draw(); sprintf(labelF6,"40 #pm 4%% ND filter"); TPaveLabel *ptF6 = new TPaveLabel(0.20,0.75, 0.43,0.81,labelF6,"NDC"); ptF6->SetBorderSize(0); ptF6->SetTextColor(kMagenta); ptF6->SetTextSize(1.0); ptF6->SetFillColor(0); ptF6->Draw(); c21->cd(7); gPad->SetGridx(1); gPad->SetGridy(1); h[8*i+0]->Draw(); char label7[256], labelF7[256]; sprintf(label7,"N_avg = %4.3e (%4.1f %%)" ,Navg[0], Navg[0]/Navg[0]*100); TPaveLabel *pt7 = new TPaveLabel(0.14,0.83, 0.60,0.89,label7,"NDC"); pt7->SetBorderSize(0); pt7->SetTextColor(kBlack); pt7->SetTextSize(1.0); pt7->SetFillColor(0); pt7->Draw(); sprintf(labelF7,"100%% (No filter)"); TPaveLabel *ptF7 = new TPaveLabel(0.15,0.75, 0.40,0.81,labelF7,"NDC"); ptF7->SetBorderSize(0); ptF7->SetTextColor(kMagenta); ptF7->SetTextSize(1.0); ptF7->SetFillColor(0); ptF7->Draw(); c21->cd(8); gPad->SetGridx(1); gPad->SetGridy(1); h[8*i+1]->Draw(); char label8[256], labelF8[256]; sprintf(label8,"N_avg = %4.3e (%4.1f %%)" ,Navg[1], Navg[1]/Navg[0]*100); TPaveLabel *pt8 = new TPaveLabel(0.12,0.83, 0.60,0.89,label8,"NDC"); pt8->SetBorderSize(0); pt8->SetTextColor(kBlack); pt8->SetTextSize(1.0); pt8->SetFillColor(0); pt8->Draw(); sprintf(labelF8,"10 #pm 1%% ND filter"); TPaveLabel *ptF8 = new TPaveLabel(0.15,0.75, 0.40,0.81,labelF8,"NDC"); ptF8->SetBorderSize(0); ptF8->SetTextColor(kMagenta); ptF8->SetTextSize(1.0); ptF8->SetFillColor(0); ptF8->Draw(); c21->cd(9); gPad->SetGridx(1); gPad->SetGridy(1); hPed->Draw(); char label9[256], labelF9[256]; sprintf(label9,"N_avg = %4.3e (%4.1f%%)",NavgPed, NavgPed/Navg[1]*100); TPaveLabel *pt9 = new TPaveLabel(0.12,0.83, 0.60,0.89,label9,"NDC"); pt9->SetBorderSize(0); pt9->SetTextColor(kBlack); pt9->SetTextSize(1.0); pt9->SetFillColor(0); pt9->Draw(); sprintf(labelF9,"Shutter Closed"); TPaveLabel *ptF9 = new TPaveLabel(0.15,0.75, 0.40,0.81,labelF9,"NDC"); ptF9->SetBorderSize(0); ptF9->SetTextColor(kMagenta); ptF9->SetTextSize(1.0); ptF9->SetFillColor(0); ptF9->Draw(); char plotname2[256]; sprintf(plotname2,"./r%d_asyms_quartet_20cyc_c%d.png",run,i); // sprintf(plotname2,"./r%d_asyms_quartet_20cyc_c1_S.pdf",run); c21->Print(plotname2); } for(f=0;fGetMean(); if((f-2)/8.0-int((f-2)/8)==0){ havg[0]->Fill(Aled[f]); Navgmean[0] += Navg[f]/wheelCycles; } else if((f-3)/8.0-int((f-3)/8)==0){ havg[1]->Fill(Aled[f]); Navgmean[1] += Navg[f]/wheelCycles; } else if((f-4)/8.0-int((f-4)/8)==0){ havg[2]->Fill(Aled[f]); Navgmean[2] += Navg[f]/wheelCycles; } else if((f-5)/8.0-int((f-5)/8)==0){ havg[3]->Fill(Aled[f]); Navgmean[3] += Navg[f]/wheelCycles; } else if((f-6)/8.0-int((f-6)/8)==0){ havg[4]->Fill(Aled[f]); Navgmean[4] += Navg[f]/wheelCycles; } else if((f-7)/8.0-int((f-7)/8)==0){ havg[5]->Fill(Aled[f]); Navgmean[5] += Navg[f]/wheelCycles; } else if((f-0)/8.0-int((f-0)/8)==0){ havg[6]->Fill(Aled[f]); Navgmean[6] += Navg[f]/wheelCycles; } else if((f-1)/8.0-int((f-1)/8)==0){ havg[7]->Fill(Aled[f]); Navgmean[7] += Navg[f]/wheelCycles; } } for(int i=0;iClear(); c_avg->Divide(4,2); gStyle->SetStatW(0.30); gStyle->SetStatH(0.30); c_avg->cd(1); gPad->SetGridx(1); gPad->SetGridy(1); havg[0]->Draw(); Aledmean[0] = havg[0]->GetMean(); AledErrormean[0] = sqrt(pow(havg[0]->GetMeanError(),2));//+pow(test.pedOddErr,2)+pow(test.pedEvenErr,2)); dummyError[0] = 0.0; char label1[256], labelF1[256], labelRun[256];; sprintf(labelF1,"1 #pm 0.1%% ND filter"); TPaveLabel *ptF1 = new TPaveLabel(0.25,0.84, 0.38,0.88,labelF1,"NDC"); ptF1->SetBorderSize(0); ptF1->SetTextColor(kMagenta); ptF1->SetTextSize(1.0); ptF1->SetFillColor(0); ptF1->Draw(); sprintf(labelRun,"run %4d, %5d V, I_pe #approx %2.1f nA, %3d Hz", run, HV, LL, FF); TPaveLabel *ptR1 = new TPaveLabel(0.32,0.94, 0.65,0.99,labelRun,"NDC"); ptR1->SetBorderSize(0); ptR1->SetTextColor(kRed); ptR1->SetTextSize(0.80); ptR1->SetFillColor(0); ptR1->Draw(); c_avg->cd(2); gPad->SetGridx(1); gPad->SetGridy(1); havg[1]->Draw(); Aledmean[1] = havg[1]->GetMean(); AledErrormean[1] = sqrt(pow(havg[1]->GetMeanError(),2));//+pow(test.pedOddErr,2)+pow(test.pedEvenErr,2)); dummyError[1] = 0.0; char label2[256], labelF2[256]; sprintf(labelF2,"50 #pm 5%% ND filter"); TPaveLabel *ptF2 = new TPaveLabel(0.25,0.84, 0.38,0.88,labelF2,"NDC"); ptF2->SetBorderSize(0); ptF2->SetTextColor(kMagenta); ptF2->SetTextSize(1.0); ptF2->SetFillColor(0); ptF2->Draw(); c_avg->cd(3); gPad->SetGridx(1); gPad->SetGridy(1); havg[2]->Draw(); Aledmean[2] = havg[2]->GetMean(); AledErrormean[2] = sqrt(pow(havg[2]->GetMeanError(),2));//+pow(test.pedOddErr,2)+pow(test.pedEvenErr,2)); dummyError[2] = 0.0; char label3[256], labelF3[256]; sprintf(labelF3,"63 #pm 5%% ND filter"); TPaveLabel *ptF3 = new TPaveLabel(0.25,0.84, 0.38,0.88,labelF3,"NDC"); ptF3->SetBorderSize(0); ptF3->SetTextColor(kMagenta); ptF3->SetTextSize(1.0); ptF3->SetFillColor(0); ptF3->Draw(); c_avg->cd(4); gPad->SetGridx(1); gPad->SetGridy(1); havg[3]->Draw(); Aledmean[3] = havg[3]->GetMean(); AledErrormean[3] = sqrt(pow(havg[3]->GetMeanError(),2));//+pow(test.pedOddErr,2)+pow(test.pedEvenErr,2)); dummyError[3] = 0.0; char label4[256], labelF4[256]; sprintf(labelF4,"25 #pm 2.5%% ND filter"); TPaveLabel *ptF4 = new TPaveLabel(0.25,0.84, 0.38,0.88,labelF4,"NDC"); ptF4->SetBorderSize(0); ptF4->SetTextColor(kMagenta); ptF4->SetTextSize(1.0); ptF4->SetFillColor(0); ptF4->Draw(); c_avg->cd(5); gPad->SetGridx(1); gPad->SetGridy(1); havg[4]->Draw(); Aledmean[4] = havg[4]->GetMean(); AledErrormean[4] = sqrt(pow(havg[4]->GetMeanError(),2));//+pow(test.pedOddErr,2)+pow(test.pedEvenErr,2)); dummyError[4] = 0.0; char label5[256], labelF5[256]; sprintf(labelF5,"79 #pm 5%% ND filter"); TPaveLabel *ptF5 = new TPaveLabel(0.25,0.84, 0.38,0.88,labelF5,"NDC"); ptF5->SetBorderSize(0); ptF5->SetTextColor(kMagenta); ptF5->SetTextSize(1.0); ptF5->SetFillColor(0); ptF5->Draw(); c_avg->cd(6); gPad->SetGridx(1); gPad->SetGridy(1); havg[5]->Draw(); Aledmean[5] = havg[5]->GetMean(); AledErrormean[5] = sqrt(pow(havg[5]->GetMeanError(),2));//+pow(test.pedOddErr,2)+pow(test.pedEvenErr,2)); dummyError[5] = 0.0; char label6[256], labelF6[256]; sprintf(labelF6,"40 #pm 4%% ND filter"); TPaveLabel *ptF6 = new TPaveLabel(0.25,0.84, 0.38,0.88,labelF6,"NDC"); ptF6->SetBorderSize(0); ptF6->SetTextColor(kMagenta); ptF6->SetTextSize(1.0); ptF6->SetFillColor(0); ptF6->Draw(); c_avg->cd(7); gPad->SetGridx(1); gPad->SetGridy(1); havg[6]->Draw(); Aledmean[6] = havg[6]->GetMean(); AledErrormean[6] = sqrt(pow(havg[6]->GetMeanError(),2));//+pow(test.pedOddErr,2)+pow(test.pedEvenErr,2)); dummyError[6] = 0.0; char label7[256], labelF7[256]; sprintf(labelF7,"100%% (No filter)"); TPaveLabel *ptF7 = new TPaveLabel(0.25,0.84, 0.38,0.88,labelF7,"NDC"); ptF7->SetBorderSize(0); ptF7->SetTextColor(kMagenta); ptF7->SetTextSize(1.0); ptF7->SetFillColor(0); ptF7->Draw(); c_avg->cd(8); gPad->SetGridx(1); gPad->SetGridy(1); havg[7]->Draw(); Aledmean[7] = havg[7]->GetMean(); AledErrormean[7] = sqrt(pow(havg[7]->GetMeanError(),2));//+pow(test.pedOddErr,2)+pow(test.pedEvenErr,2)); dummyError[7] = 0.0; char label8[256], labelF8[256]; sprintf(labelF8,"10 #pm 1%% ND filter"); TPaveLabel *ptF8 = new TPaveLabel(0.25,0.84, 0.38,0.88,labelF8,"NDC"); ptF8->SetBorderSize(0); ptF8->SetTextColor(kMagenta); ptF8->SetTextSize(1.0); ptF8->SetFillColor(0); ptF8->Draw(); char plotname2[256]; sprintf(plotname2,"./r%d_asyms_quartet_20cyc_avg.png",run); // sprintf(plotname2,"./r%d_asyms_quartet_20cyc_avg_S.pdf",run); c_avg->Print(plotname2); for(int i=0;iSetOptStat(kFALSE); c3->SetGridx(1); c3->SetGridy(1); gStyle->SetOptStat(kFALSE); char graphname1[256]; sprintf(graphname1,""); char title1[256], legend1[256], legend2[256], flip[256], runLabel[256]; sprintf(title1,"Filter wheel scan: pmt#%4d @ %5d V, I_{cathode} = %2.1f nA", pmt, HV, LL); char title4[256]; sprintf(title4,"Pair-wise Asymmetry vs. pair #"); TH2F *hr1; hr1 = new TH2F("hr1",graphname1,100,0,131072,100,asym_Y1,asym_Y2); gStyle->SetTitleX(0.18); char xTitle[256]; char yTitle[256]; sprintf(xTitle,"N_{avg} (adc channels)"); sprintf(yTitle,"A_{LED}"); hr1->GetYaxis()->SetLabelColor(1); hr1->GetYaxis()->SetTitleColor(1); hr1->SetYTitle(yTitle); hr1->GetYaxis()->SetTitleOffset(1.3); hr1->GetXaxis()->SetLabelColor(1); hr1->GetXaxis()->SetTitleColor(1); hr1->SetXTitle(xTitle); hr1->Draw(); TGraphErrors *gr1 = new TGraphErrors(8, Navgmean, Aledmean, dummyError, AledErrormean); gr1->SetMarkerColor(kBlue); gr1->SetMarkerStyle(20); gr1->SetMarkerSize(0.75); gStyle->SetOptFit(111); gStyle->SetStatW(0.2); gStyle->SetStatH(0.15); gr1->Draw("P"); TF1 *f1 = new TF1("f1","pol1",0,131000); f1->SetLineWidth(2); f1->SetLineColor(kMagenta); f1->SetParName(0,"A_{true}"); f1->SetParName(1,"A_{true}*#beta"); Double_t f1par[2]; gr1->Fit("f1","R"); f1->GetParameters(&f1par[0]); Double_t Error00 = f1->GetParError(0); Double_t Error01 = f1->GetParError(1); TPaveLabel *pt_1fit = new TPaveLabel(0.10,0.90, 0.60,0.95,title1,"NDC"); pt_1fit->SetBorderSize(0); pt_1fit->SetTextColor(kBlack); pt_1fit->SetTextSize(0.75); pt_1fit->SetFillColor(0); pt_1fit->Draw(); Double_t scale = sqrt(f1->GetChisquare()/f1->GetNDF()); cout << "Scale from Chi2 value is: " << scale << endl; char fitLabel[256], LabelCal[256]; sprintf(fitLabel,"run %4d, %3d Hz, %3.2f M#Omega", run, FF, preAmp); TPaveLabel *pt_rlfit = new TPaveLabel(0.12,0.84,0.4,0.89,fitLabel,"NDC"); pt_rlfit->SetBorderSize(0); pt_rlfit->SetTextColor(kBlack); pt_rlfit->SetTextSize(0.75); pt_rlfit->SetFillColor(0); pt_rlfit->Draw(); sprintf(LabelCal,"%% non-lin = %5.3f V^{-1}", f1par[1]/f1par[0]*Navgmean[6]*100/Navgmean_Cal[6]); TPaveLabel *pt_cal = new TPaveLabel(0.68,0.70,0.85,0.74,LabelCal,"NDC"); pt_cal->SetBorderSize(0); pt_cal->SetTextColor(kMagenta); pt_cal->SetTextSize(0.75); pt_cal->SetFillColor(0); pt_cal->Draw(); char labelB[256], labelBB[256];; sprintf(labelB,"#beta*N_{avg} @ %4.3e = %5.3f #pm %4.3f %% non-lin",Navgmean[6], f1par[1]/f1par[0]*Navgmean[6]*100, fabs(sqrt(pow(Error00/f1par[0],2) + pow(Error01/f1par[1],2))*f1par[1]/f1par[0]*Navgmean[6]*100)*scale); TPaveLabel *ptB = new TPaveLabel(0.11,0.78, 0.53,0.82,labelB,"NDC"); ptB->SetBorderSize(0); ptB->SetTextColor(kMagenta); ptB->SetTextSize(0.80); ptB->SetFillColor(0); ptB->Draw(); TLegend *leg = new TLegend(0.55,0.10,0.89,0.30); leg->SetBorderSize(0); leg->SetFillColor(0); leg->SetFillStyle(0); leg->AddEntry(gr1,"data","pe"); leg->AddEntry(f1,"fit: A_{LED} = A_{true}(1+#beta*N_{avg})","l"); leg->Draw(); char plotname3[256]; sprintf(plotname3,"./r%d_asymTrends_quartet_20cyc.png",run); // sprintf(plotname3,"./r%d_asymTrends_quartet_20cyc_S.pdf",run); c3->Print(plotname3); TCanvas *c3Cal = new TCanvas("c3Cal","Non-linearity fit_quartet_20cyc_avg_Cal",0,0,900,600); gStyle->SetOptStat(kFALSE); c3Cal->SetGridx(1); c3Cal->SetGridy(1); gStyle->SetOptStat(kFALSE); char graphname1[256]; sprintf(graphname1,""); char title1[256], legend1[256], legend2[256], flip[256], runLabel[256]; sprintf(title1,"Filter wheel scan: pmt#%4d @ %5d V, I_{cathode} = %2.1f nA", pmt, HV, LL); char title4[256]; sprintf(title4,"Pair-wise Asymmetry vs. pair #"); TH2F *hr2; hr2 = new TH2F("hr2",graphname1,100,0,10,100,asym_Y1,asym_Y2); gStyle->SetTitleX(0.18); char xTitle[256]; char yTitle[256]; sprintf(xTitle,"ADC Voltage (V)"); sprintf(yTitle,"A_{LED}"); hr2->GetYaxis()->SetLabelColor(1); hr2->GetYaxis()->SetTitleColor(1); hr2->SetYTitle(yTitle); hr2->GetYaxis()->SetTitleOffset(1.3); hr2->GetXaxis()->SetLabelColor(1); hr2->GetXaxis()->SetTitleColor(1); hr2->SetXTitle(xTitle); hr2->Draw(); TGraphErrors *gr3 = new TGraphErrors(8, Navgmean_Cal, Aledmean, dummyError, AledErrormean); gr3->SetMarkerColor(kBlue); gr3->SetMarkerStyle(20); gr3->SetMarkerSize(0.75); gStyle->SetOptFit(111); gStyle->SetStatW(0.2); gStyle->SetStatH(0.15); gr3->Draw("P"); TF1 *f3 = new TF1("f3","pol1",0,10); f3->SetLineWidth(2); f3->SetLineColor(kMagenta); f3->SetParName(0,"A_{true}"); f3->SetParName(1,"A_{true}*#beta"); gr3->Fit("f3","R"); Double_t f3par[2]; f3->GetParameters(&f3par[0]); Double_t Error20 = f3->GetParError(0); Double_t Error21 = f3->GetParError(1); TPaveLabel *pt_2fit = new TPaveLabel(0.10,0.90, 0.60,0.95,title1,"NDC"); pt_2fit->SetBorderSize(0); pt_2fit->SetTextColor(kBlack); pt_2fit->SetTextSize(0.75); pt_2fit->SetFillColor(0); pt_2fit->Draw(); char fitLabel[256], LabelCal[256]; sprintf(LabelCal,"%% non-lin = %5.3f V^{-1}", f1par[1]/f1par[0]*Navgmean[6]*100/Navgmean_Cal[6]); TPaveLabel *pt_cal = new TPaveLabel(0.68,0.70,0.85,0.74,LabelCal,"NDC"); pt_cal->SetBorderSize(0); pt_cal->SetTextColor(kMagenta); pt_cal->SetTextSize(0.75); pt_cal->SetFillColor(0); pt_cal->Draw(); sprintf(fitLabel,"run %4d, %3d Hz, %3.2f M#Omega", run, FF, preAmp); TPaveLabel *pt_rlcal = new TPaveLabel(0.12,0.84,0.4,0.89,fitLabel,"NDC"); pt_rlcal->SetBorderSize(0); pt_rlcal->SetTextColor(kBlack); pt_rlcal->SetTextSize(0.75); pt_rlcal->SetFillColor(0); pt_rlcal->Draw(); char labelB[256], labelBB[256];; sprintf(labelB,"#beta*N_{avg} @ %4.3f = %5.3f #pm %4.3f %% non-lin",Navgmean_Cal[6], f3par[1]/f3par[0]*Navgmean_Cal[6]*100, fabs(sqrt(pow(Error20/f3par[0],2) + pow(Error21/f3par[1],2))*f3par[1]/f3par[0]*Navgmean_Cal[6]*100)*scale); TPaveLabel *ptB = new TPaveLabel(0.11,0.78, 0.53,0.82,labelB,"NDC"); ptB->SetBorderSize(0); ptB->SetTextColor(kMagenta); ptB->SetTextSize(0.80); ptB->SetFillColor(0); ptB->Draw(); TLegend *leg = new TLegend(0.55,0.10,0.89,0.30); leg->SetBorderSize(0); leg->SetFillColor(0); leg->SetFillStyle(0); leg->AddEntry(gr1,"data","pe"); leg->AddEntry(f3,"fit: A_{LED} = A_{true}(1+#beta*N_{avg})","l"); leg->Draw(); char plotname3[256]; sprintf(plotname3,"./r%d_asymTrends_quartet_20cyc_Cal.png",run); // sprintf(plotname3,"./r%d_asymTrends_quartet_20cyc_Cal_S.pdf",run); c3Cal->Print(plotname3); rootfile->Write(); return(); }