File indexing completed on 2024-04-06 11:56:22
0001 #include "TTree.h"
0002 #include "TText.h"
0003 #include "TGraph.h"
0004 #include "TFile.h"
0005 #include "TH1F.h"
0006 #include "TCanvas.h"
0007 #include "TLegend.h"
0008 #include "TPaveStats.h"
0009
0010 TGraph* makegr(char* infileName, Double_t startPos = -300, Double_t step = 20, const Int_t n = 32, char* Det = "BPIX Half Barrels", char* ScanDirection = "delta z", char* plotVar = "Chi2", Double_t offset = 0, int lineColor = 1)
0011 {
0012
0013 gStyle->SetPadLeftMargin(0.15);
0014 gStyle->SetPadRightMargin(0.15);
0015 gStyle->SetOptFit();
0016 gStyle->SetOptStat(1111);
0017 gStyle->SetTitleFontSize(0.05);
0018 gStyle->SetTitleOffset(2, "Y");
0019
0020 TFile* inFile = TFile::Open(infileName);
0021
0022 char mytreeN[64];
0023 Double_t zPos[n - 1];
0024 Int_t zPosI[n-1];
0025 Double_t chi2 = 0;
0026 Int_t nhit = 0;
0027 Double_t chi2Vec[n - 1];
0028 Int_t nhitVec[n - 1];
0029 Double_t chi2ph[n - 1];
0030
0031 for (int iter = 2; iter <= n; iter++) {
0032 snprintf(mytreeN, sizeof(mytreeN), "T9_%d", iter);
0033 TTree* mytree = (TTree*)inFile->Get(mytreeN);
0034 mytree->SetBranchAddress("AlignableChi2", &chi2);
0035 mytree->SetBranchAddress("Nhit", &nhit);
0036 mytree->GetEntry(0);
0037
0038 zPos[iter - 2] = startPos + step * (iter - 2);
0039 zPosI[iter - 2] = startPos + step * (iter - 2);
0040 chi2Vec[iter - 2] = chi2 - offset;
0041 nhitVec[iter - 2] = nhit;
0042 if (nhit != 0)
0043 chi2ph[iter - 2] = chi2 / nhit;
0044 else
0045 chi2ph[iter - 2] = 0;
0046 cout << ScanDirection << " position=" << zPos[iter - 2] << ", chi2=" << chi2Vec[iter - 2] << ", hit=" << nhitVec[iter - 2] << ", chi2 per hit=" << chi2ph[iter - 2] << endl;
0047 }
0048
0049 TGraph* gr;
0050
0051 if (strcmp(plotVar, "Chi2") == 0)
0052 gr = new TGraph(n - 1, zPos, chi2Vec);
0053 else if (strcmp(plotVar, "Chi2PerHit") == 0)
0054 gr = new TGraph(n - 1, zPos, chi2ph);
0055 else if (strcmp(plotVar,"nhits")==0)
0056 gr = new TGraph (n-1,zPosI,nhitVec);
0057
0058 gr->SetLineColor(lineColor);
0059
0060 char title[50];
0061 sprintf(title, "%s scan of %s in %s", plotVar, ScanDirection, Det);
0062
0063 gr->SetTitle(title);
0064 gr->GetXaxis()->SetTitle(ScanDirection);
0065 gr->GetYaxis()->SetTitle(plotVar);
0066 return gr;
0067 }
0068 void plotchi2()
0069 {
0070
0071
0072
0073 char* infile = "/afs/cern.ch/cms/CAF/CMSALCA/ALCA_TRACKERALIGN2/HIP/public/AlignmentCamp2016/CMSSW_8_0_3/src/Alignment/HIPAlignmentAlgorithm/hp1609_scanBPIXz/main/IOUserVariables.root";
0074 Double_t start = -300, end = 300, step = 20;
0075 char* detName = "BPIX_Half_Barrels";
0076 char* scanDir = "delta_z";
0077
0078 char* scanVar = "nhits";
0079
0080
0081
0082 int n_iter = (end - start) / step + 2;
0083 TGraph* gr1 = makegr(infile, start, step, n_iter, detName, scanDir, scanVar);
0084
0085 TCanvas* c = new TCanvas("c", "c", 1000, 10, 800, 800);
0086
0087 c->cd();
0088 gr1->Draw("AC*");
0089
0090 c->Update();
0091 TLine* l = new TLine(0, c->GetUymin(), 0, c->GetUymax());
0092 l->SetLineStyle(2);
0093 l->Draw();
0094
0095 char plotName[50];
0096 sprintf(plotName, "%sscan_%s_%s.png", scanVar, scanDir, detName);
0097
0098 c->SaveAs(plotName);
0099
0100 }