void drawOutputOfBensNumberZeroedChannel16BH(){ // gStyle->SetOptStat("mre"); auto cOld = new TChain("angResTree"); // cOld->Add("januaryTests/photogrammetryNumbers/generateAngularResolutionTreePlots_3*.root"); cOld->Add("januaryTests/photogrammetryNumbersZeroedChannel16BH_cosminV3Trees/generateAngularResolutionTreePlots_3*.root"); auto cNew = new TChain("angResTree"); cNew->Add("januaryTests/bensNumbersZeroedChannel16BH_cosminV3Trees/generateAngularResolutionTreePlots_3*.root"); const Int_t numVars = 2; TString drawVars[numVars] = {"deltaPhiDeg", "deltaThetaDeg"}; TString varNames[numVars] = {"#delta#phi", "#delta#theta"}; for(int varInd=0; varInd < numVars; varInd++){ auto c1 = new TCanvas(); const Int_t numPhiBins = 128; TProfile* hProfOld = new TProfile("hProfOld", "Photogrammetry", numPhiBins, 0, 360); TH1D* hOld = new TH1D("hOld", "Photogrammetry", numPhiBins/2, -5, 5); TString drawCommandOld = TString::Format("%s:phiExpected>>hProfOld", drawVars[varInd].Data()); cOld->Draw(drawCommandOld, "TMath::Abs(deltaPhiDeg) < 5", "goff"); TString drawCommandOld2 = TString::Format("%s>>hOld", drawVars[varInd].Data()); cOld->Draw(drawCommandOld2, "TMath::Abs(deltaPhiDeg) < 5", "goff"); hProfOld->SetLineColor(kBlue); hOld->SetLineColor(kBlue); TProfile* hProfNew = new TProfile("hProfNew", "Ben's numbers", numPhiBins, 0, 360); TH1D* hNew = new TH1D("hNew", "Ben's numbers", numPhiBins/2, -5, 5); TString drawCommandNew = TString::Format("%s:phiExpected>>hProfNew", drawVars[varInd].Data()); cNew->Draw(drawCommandNew, "TMath::Abs(deltaPhiDeg) < 5", "goff"); TString drawCommandNew2 = TString::Format("%s>>hNew", drawVars[varInd].Data()); cNew->Draw(drawCommandNew2, "TMath::Abs(deltaPhiDeg) < 5", "goff"); hProfNew->SetLineColor(kRed); hNew->SetLineColor(kRed); hProfNew->Draw(); hProfOld->Draw("same"); // hProfOld->Draw(); // hProfNew->Draw("same"); auto l = c1->BuildLegend(); l->Draw(); // TH1D* hs[2] = {hOld, hNew}; TH1D* hs[2] = {hNew, hOld}; TCanvas* c2 = RootTools::drawHistsWithStatsBoxes(2, hs, "", "mre"); auto l2 = c2->BuildLegend(); l2->Draw(); hProfNew->SetTitle("Comparison of WAIS divide photogrammetry vs. Ben's numbers "+varNames[varInd]+" ; Expected #phi (Degrees); " + varNames[varInd] + " (Degrees)"); hProfOld->SetTitle("Comparison of WAIS divide photogrammetry vs. Ben's numbers "+varNames[varInd]+" ; Expected #phi (Degrees); " + varNames[varInd] + " (Degrees)"); c1->Update(); hOld->SetTitle("Comparison of WAIS divide pulses "+varNames[varInd]+", photogrammetry vs. Ben's numbers;"+varNames[varInd]+" (Degrees); Events/bin"); hNew->SetTitle("Comparison of WAIS divide pulses "+varNames[varInd]+", photogrammetry vs. Ben's numbers;"+varNames[varInd]+" (Degrees); Events/bin"); c2->Update(); } }
void plotAngResVsSnr2(){ TChain* cLdb = new TChain("angResTree"); TChain* cSnrLdb = new TChain("snrTree"); TChain* cWais = new TChain("angResTree"); TChain* cSnrWais = new TChain("snrTree"); // cLdb->Add("filterOffs/phaseCenter/generateAngularResolutionTreeVPOLPlots_*"); // cSnrLdb->Add("filterOffs/phaseCenter/generateSignalToNoiseRatioTreeVPOLPlots_*"); // cWais->Add("filterOffs/phaseCenter/generateAngularResolutionTreePlots_*"); // cSnrWais->Add("filterOffs/phaseCenter/generateSignalToNoiseRatioTreePlots_*"); cLdb->Add("extremeFilter/phaseCenter/generateAngularResolutionTreeVPOLPlots_*"); cSnrLdb->Add("extremeFilter/phaseCenter/generateSignalToNoiseRatioTreeVPOLPlots_*"); cWais->Add("filterOns/phaseCenter/generateAngularResolutionTreePlots_*"); cSnrWais->Add("filterOns/phaseCenter/generateSignalToNoiseRatioTreePlots_*"); Double_t deltaPhiDegLdb = 0; cLdb->SetBranchAddress("deltaPhiDeg", &deltaPhiDegLdb); Double_t deltaThetaDegLdb = 0; cLdb->SetBranchAddress("deltaThetaDeg", &deltaThetaDegLdb); UInt_t eventNumber = 0; cLdb->SetBranchAddress("eventNumber", &eventNumber); Double_t phiExpected = 0; cLdb->SetBranchAddress("phiExpected", &phiExpected); Double_t snr0Ldb = 0; cSnrLdb->SetBranchAddress("snr0", &snr0Ldb); Long64_t nEntries = cSnrLdb->GetEntries(); Long64_t maxEntry = 0; //5; //1000; //10000; Long64_t startEntry = 0; if(maxEntry<=0 || maxEntry > nEntries) maxEntry = nEntries; std::cout << "Processing " << maxEntry << " of " << nEntries << " entries." << std::endl; ProgressBar p(maxEntry-startEntry); double dPhi = 0.05; double phiRange = 6; double dTheta = 0.05; double thetaRange = 6; double rebin = 2; const int nBinsPhi = 32; std::vector<double> theSnrBinsLdb = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 21};//, 22, 23, 24, 25}; TH2D* hSnrVsPhiExpectedLdb = new TH2D("hSnrVsPhiExpectedLdb", "SNR vs. #phi_{LDB}; #phi_{LDB} (Degrees); SNR (no units); Events per bin", nBinsPhi, 0, 360, theSnrBinsLdb.size()-1, &theSnrBinsLdb[0]); TH1D* hDeltaPhiLdb = new TH1D("hDeltaPhiLdb", "#delta#phi_{LDB}; #delta#phi (Degrees); Events per bin", phiRange/(dPhi*rebin), -phiRange/2 - dPhi/2, phiRange/2 - dPhi/2); // TH2D* hDeltaPhiLdb2 = new TH2D("hDeltaPhiLdb2", "#delta#phi_{LDB} vs. SNR; SNR (no units); #delta#phi (Degrees); Events per bin", nBinsSnr, minSnr, maxSnr, phiRange/dPhi, -phiRange/2 - dPhi/2, phiRange/2 - dPhi/2); TH2D* hDeltaPhiLdb2 = new TH2D("hDeltaPhiLdb2", "#delta#phi_{LDB} vs. SNR; SNR (no units); #delta#phi (Degrees); Events per bin", theSnrBinsLdb.size()-1, &theSnrBinsLdb[0], phiRange/dPhi, -phiRange/2 - dPhi/2, phiRange/2 - dPhi/2); TH1D* hDeltaThetaLdb = new TH1D("hDeltaThetaLdb", "#delta#theta_{LDB}; #delta#theta (Degrees); Events per bin", thetaRange/dTheta, -thetaRange/2 - dTheta/2, thetaRange/2 - dTheta/2); // TH2D* hDeltaThetaLdb2 = new TH2D("hDeltaThetaLdb2", "#delta#theta_{LDB} vs. SNR; SNR (no units); #delta#theta (Degrees); Events per bin", nBinsSnr, minSnr, maxSnr, thetaRange/dTheta, -thetaRange/2 - dTheta/2, thetaRange/2 - dTheta/2); TH2D* hDeltaThetaLdb2 = new TH2D("hDeltaThetaLdb2", "#delta#theta_{LDB} vs. SNR; SNR (no units); #delta#theta (Degrees); Events per bin", theSnrBinsLdb.size()-1, &theSnrBinsLdb[0], thetaRange/dTheta, -thetaRange/2 - dTheta/2, thetaRange/2 - dTheta/2); double lowestSnr = 9999; double highestSnr = -9999; UInt_t lowEventNumber; UInt_t highEventNumber; const double phiCut = 3; for(Long64_t entry = startEntry; entry < maxEntry; entry++){ cLdb->GetEntry(entry); cSnrLdb->GetEntry(entry); // cLdbOff->GetEntry(entry); if(TMath::Abs(deltaPhiDegLdb) < phiCut){ hSnrVsPhiExpectedLdb->Fill(phiExpected, snr0Ldb); // if(snr0Ldb > 6){ hDeltaPhiLdb->Fill(deltaPhiDegLdb); hDeltaPhiLdb2->Fill(snr0Ldb, deltaPhiDegLdb); hDeltaThetaLdb->Fill(deltaThetaDegLdb); hDeltaThetaLdb2->Fill(snr0Ldb, deltaThetaDegLdb); // } if(snr0Ldb < lowestSnr){ lowestSnr = snr0Ldb; lowEventNumber = eventNumber; } if(snr0Ldb > highestSnr){ highestSnr = snr0Ldb; highEventNumber = eventNumber; } } p.inc(entry, maxEntry); } std::cout << "LDB: " << std::endl; std::cout << lowEventNumber << "\t" << lowestSnr << std::endl; std::cout << highEventNumber << "\t" << highestSnr << std::endl; auto c0 = new TCanvas(); hSnrVsPhiExpectedLdb->Draw("colz"); TObjArray* tArrLdbPhi = new TObjArray(); hDeltaPhiLdb2->FitSlicesY(NULL, 1, hDeltaPhiLdb2->GetNbinsY(), 0, "QNR", tArrLdbPhi); TH1D* hResolutionVsSnrPhiLdb = NULL; for(int i=0; i < tArrLdbPhi->GetEntries(); i++){ auto h = (TH1D*)tArrLdbPhi->At(i); // auto c0 = new TCanvas(); // TString opt = i==0? "" : "same"; // h->Draw(opt); if(i==2){ hResolutionVsSnrPhiLdb = h; hResolutionVsSnrPhiLdb->SetTitle("VPOL #delta#phi_{LDB}"); } new TCanvas(); h->Draw(); } TObjArray* tArrLdbTheta = new TObjArray(); hDeltaThetaLdb2->FitSlicesY(NULL, 1, hDeltaThetaLdb2->GetNbinsY(), 0, "QNR", tArrLdbTheta); TH1D* hResolutionVsSnrThetaLdb = NULL; for(int i=0; i < tArrLdbTheta->GetEntries(); i++){ auto h = (TH1D*)tArrLdbTheta->At(i); // auto c0 = new TCanvas(); // TString opt = i==0? "" : "same"; // h->Draw(opt); if(i==2){ hResolutionVsSnrThetaLdb = h; hResolutionVsSnrThetaLdb->SetTitle("VPOL #delta#theta_{LDB}"); } new TCanvas(); h->Draw(); } Double_t deltaPhiDegWais = 0; cWais->SetBranchAddress("deltaPhiDeg", &deltaPhiDegWais); Double_t deltaThetaDegWais = 0; cWais->SetBranchAddress("deltaThetaDeg", &deltaThetaDegWais); phiExpected = 0; cWais->SetBranchAddress("phiExpected", &phiExpected); Double_t snr0Wais = 0; cSnrWais->SetBranchAddress("snr0", &snr0Wais); std::vector<double> theSnrBinsWais = {0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 18, 21};//, 22, 23, 24, 25}; TH2D* hSnrVsPhiExpectedWais = new TH2D("hSnrVsPhiExpectedWais", "SNR vs. #phi_{WAIS}; #phi_{WAIS} (Degrees); SNR (no units); Events per bin", nBinsPhi, 0, 360, theSnrBinsWais.size()-1, &theSnrBinsWais[0]); TH1D* hDeltaPhiWais = new TH1D("hDeltaPhiWais", "#delta#phi_{WAIS}; #delta#phi (Degrees); Events per bin", phiRange/(dPhi*rebin), -phiRange/2 - dPhi/2, phiRange/2 - dPhi/2); TH2D* hDeltaPhiWais2 = new TH2D("hDeltaPhiWais2", "#delta#phi_{WAIS} vs. SNR; SNR (no units); #delta#phi (Degrees); Events per bin", theSnrBinsWais.size()-1, &theSnrBinsWais[0], phiRange/dPhi, -phiRange/2 - dPhi/2, phiRange/2 - dPhi/2); TH1D* hDeltaThetaWais = new TH1D("hDeltaThetaWais", "#delta#theta_{WAIS}; #delta#theta (Degrees); Events per bin", thetaRange/dTheta, -thetaRange/2 - dTheta/2, thetaRange/2 - dTheta/2); TH2D* hDeltaThetaWais2 = new TH2D("hDeltaThetaWais2", "#delta#theta_{WAIS} vs. SNR; SNR (no units); #delta#theta (Degrees); Events per bin", theSnrBinsWais.size()-1, &theSnrBinsWais[0], thetaRange/dTheta, -thetaRange/2 - dTheta/2, thetaRange/2 - dTheta/2); Long64_t nEntries2 = cSnrWais->GetEntries(); Long64_t maxEntry2 = 0; //5; //1000; //10000; Long64_t startEntry2 = 0; if(maxEntry2<=0 || maxEntry2 > nEntries2) maxEntry2 = nEntries2; std::cout << "Processing " << maxEntry2 << " of " << nEntries2 << " entries." << std::endl; ProgressBar p2(maxEntry2-startEntry2); for(Long64_t entry = startEntry2; entry < maxEntry2; entry++){ cWais->GetEntry(entry); cSnrWais->GetEntry(entry); if(TMath::Abs(deltaPhiDegWais) < phiCut){ hSnrVsPhiExpectedWais->Fill(phiExpected, snr0Wais); hDeltaPhiWais->Fill(deltaPhiDegWais); hDeltaPhiWais2->Fill(snr0Wais, deltaPhiDegWais); hDeltaThetaWais->Fill(deltaThetaDegWais); hDeltaThetaWais2->Fill(snr0Wais, deltaThetaDegWais); } p2.inc(entry, maxEntry2); } TObjArray* tArrWaisPhi = new TObjArray(); hDeltaPhiWais2->FitSlicesY(NULL, 1, hDeltaPhiWais2->GetNbinsY(), 0, "QNR", tArrWaisPhi); TH1D* hResolutionVsSnrPhiWais = NULL; for(int i=0; i < tArrWaisPhi->GetEntries(); i++){ auto h = (TH1D*)tArrWaisPhi->At(i); // auto c0 = new TCanvas(); // TString opt = i==0? "" : "same"; // h->Draw(opt); if(i==2){ hResolutionVsSnrPhiWais = h; hResolutionVsSnrPhiWais->SetTitle("HPOL #delta#phi_{WAIS}"); } new TCanvas(); h->Draw(); } TObjArray* tArrWaisTheta = new TObjArray(); hDeltaThetaWais2->FitSlicesY(NULL, 1, hDeltaThetaWais2->GetNbinsY(), 0, "QNR", tArrWaisTheta); TH1D* hResolutionVsSnrThetaWais = NULL; for(int i=0; i < tArrWaisTheta->GetEntries(); i++){ auto h = (TH1D*)tArrWaisTheta->At(i); // auto c0 = new TCanvas(); // TString opt = i==0? "" : "same"; // h->Draw(opt); if(i==2){ hResolutionVsSnrThetaWais = h; hResolutionVsSnrThetaWais->SetTitle("HPOL #delta#theta_{WAIS}"); } new TCanvas(); h->Draw(); } auto c0a = new TCanvas(); hSnrVsPhiExpectedWais->Draw("colz"); return; auto c1 = new TCanvas(); hDeltaPhiWais2->Draw("colz"); auto c1a = new TCanvas(); hDeltaPhiLdb2->Draw("colz"); auto c2 = new TCanvas(); hDeltaThetaWais2->Draw("colz"); auto c2a = new TCanvas(); hDeltaThetaLdb2->Draw("colz"); // auto c3 = new TCanvas(); // // hResolutionVsSnrPhiLdb->SetLineColor(kRed); // // hResolutionVsSnrThetaLdb->SetLineColor(kBlue); // hResolutionVsSnrPhiLdb->Draw(); // hResolutionVsSnrThetaLdb->Draw("same"); // auto c3a = new TCanvas(); // // hResolutionVsSnrPhiWais->SetLineColor(kRed); // // hResolutionVsSnrThetaWais->SetLineColor(kBlue); // hResolutionVsSnrPhiWais->Draw(); // hResolutionVsSnrThetaWais->Draw("same"); auto c4 = new TCanvas(); hResolutionVsSnrPhiWais->SetLineColor(kRed); hResolutionVsSnrPhiLdb->SetLineColor(kBlue); hResolutionVsSnrThetaWais->SetLineColor(kMagenta); hResolutionVsSnrThetaLdb->SetLineColor(kCyan); hResolutionVsSnrPhiWais->SetMarkerSize(0); hResolutionVsSnrPhiLdb->SetMarkerSize(0); hResolutionVsSnrThetaWais->SetMarkerSize(0); hResolutionVsSnrThetaLdb->SetMarkerSize(0); hResolutionVsSnrPhiLdb->Draw(); hResolutionVsSnrThetaLdb->Draw("same"); hResolutionVsSnrPhiWais->Draw("same"); hResolutionVsSnrThetaWais->Draw("same"); auto l4 = c4->BuildLegend(); // l1->SetNColumns(2); l4->Draw(); // hs[0]->SetMaximum(0.13); hResolutionVsSnrPhiLdb->SetTitle("Angular Resolution vs. SNR; SNR; Angular Resolution (Degrees)"); hResolutionVsSnrPhiLdb->SetMaximum(1); hResolutionVsSnrPhiLdb->SetMinimum(0); //hDeltaPhiDegPhaseLdb->SetTitle("ANITA Angular Resolution Using Fitted Phase Centres; #delta#theta or #delta#phi (Degrees); Fraction of events per bin"); }
TLegend* BuildLegend(TCanvas& canvas, Double_t x1, Double_t y1, Double_t x2, Double_t y2, TString& Header) { return BuildLegend(&canvas, x1, y1, x2, y2, Header); }
TLegend* Build2DLegend(TCanvas* canvas) { return BuildLegend(canvas, 0.4, 0.90, 0.98, 0.95); }
// myRoot.BuildLegend(c1, 0.7,0.8,0.9,0.9); TLegend* BuildLegend(TCanvas& canvas, Double_t x1, Double_t y1, Double_t x2, Double_t y2) { return BuildLegend(&canvas, x1, y1, x2, y2); }