int scaleSmearTemplateFit_Ele(TString RDFile, TString MCFile, char BaseName[30]) { cout<<"Processing "<<BaseName<<endl; gStyle->SetPalette(1); //Output file TString ResultDir = "MCRDfitEle_Plot"; ofstream Fout; TString FoutName=ResultDir+"/"+BaseName+"_SummaryFinal.txt"; Fout.open(FoutName); //Variables char histName[50]; //Data and histograms TFile *f_RD = new TFile(RDFile); TFile *f_MC = new TFile(MCFile); TH1D *h1_ZmassDaughEtaRD[ScElCombiBins]; TH1D *h1_ZmassDaughEtaMC[ScElCombiBins]; //Plots RooPlot *zmassFrameRD; RooPlot *zmassFrameMC; CPlot *plotFitRD; CPlot *plotFitMC; RooFitResult* fitResTotalMC; RooFitResult* fitResTotalRD; //RooFitResult* fitResRD; RooFitResult* fitResMCbw[ScElCombiBins]; RooFitResult* fitResMC[ScElCombiBins]; RooFitResult* fitResRD[ScElCombiBins]; TCanvas *myCan = MakeCanvas("myCan","myCan",800,600); //Fitting stuff RooRealVar *scaleMC[ScaleBins]; RooRealVar *scaleRD[ScaleBins]; RooRealVar *smearRD[ScaleBins]; RooRealVar *smearMC[ScaleBins]; RooRealVar *nSRD[ScElCombiBins]; RooRealVar *nBRD[ScElCombiBins]; RooRealVar *CBalpha[ScElCombiBins]; RooRealVar *CBn[ScElCombiBins]; RooFormulaVar *scaleScaleMC[ScElCombiBins]; RooFormulaVar *scaleScaleRD[ScElCombiBins]; RooFormulaVar *smearSmearMC[ScElCombiBins]; RooFormulaVar *smearSmearRD[ScElCombiBins]; RooRealVar zMass("zMass","zMass",60,120); RooCategory rooCat("rooCat","rooCat"); RooDataHist *ZmassRD[ScElCombiBins]; // RooDataHist *ZmassMC; RooDataHist *ZmassMC[ScElCombiBins]; // CBreitWigner *BW[ScElCombiBins]; CBreitWignerConvCrystalBall *BWCB[ScElCombiBins]; CBreitWignerConvCrystalBallScale *BWCBsCale[ScElCombiBins]; CBreitWignerMC *BWMC[ScElCombiBins]; CBreitWignerRD *BWRD[ScElCombiBins]; RooGaussian *gaus[ScElCombiBins]; RooCBShape *cbMC[ScElCombiBins]; RooCBShape *cbRD[ScElCombiBins]; CErfExpo *ZbgRD[ScElCombiBins]; CExponential *ZbgExpRD[ScElCombiBins]; RooAbsPdf *pdfRDsig[ScElCombiBins]; RooAbsPdf *pdfMCsig[ScElCombiBins]; //RooAddPdf *pdfRDsig[ScElCombiBins]; RooAbsPdf *histPdf[ScElCombiBins]; RooAddPdf *pdfRD[ScElCombiBins]; //Initialization for(int i(0);i<ScaleBins;i++) { sprintf(histName,"scaleMC_%d",i); scaleMC[i] = new RooRealVar(histName, histName,1.01,0.001,3); sprintf(histName,"scaleRD_%d",i); scaleRD[i] = new RooRealVar(histName, histName,1.01,0.001,3); sprintf(histName,"smearMC_%d",i); smearMC[i] = new RooRealVar(histName,histName,0.5,0.01,3); sprintf(histName,"smearRD_%d",i); smearRD[i] = new RooRealVar(histName,histName,0.5,0.01,3); } for(int i(0);i<ScElCombiBins;i++) { sprintf(histName,"nBRD_%d",i); nBRD[i] = new RooRealVar(histName, histName,0.1,0.01,1); sprintf(histName,"nSRD_%d",i); nSRD[i]= new RooRealVar(histName,histName,1,0,2); sprintf(histName,"CBalpha_%d",i); CBalpha[i]= new RooRealVar(histName,histName,5,0,20); sprintf(histName,"CBn_%d",i); CBn[i] = new RooRealVar(histName,histName,1,0,10); sprintf(histName,"cat_%d",i); rooCat.defineType(histName); } RooSimultaneous pdfTotalMC("pdfTotalMC","pdfTotalMC",rooCat); map<string,TH1*>hmapMC; RooSimultaneous pdfTotalRD("pdfTotalRD","pdfTotalRD",rooCat); map<string,TH1*>hmapRD; //* ///scaleScale sprintf(histName,"scaleScaleMC_0"); scaleScaleMC[0] = new RooFormulaVar(histName,"1/sqrt(@0*@0)",RooArgSet(*scaleMC[0],*scaleMC[0])); sprintf(histName,"scaleScaleMC_1"); scaleScaleMC[1] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleMC[0],*scaleMC[1])); sprintf(histName,"scaleScaleMC_2"); scaleScaleMC[2] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleMC[0],*scaleMC[2])); sprintf(histName,"scaleScaleMC_3"); scaleScaleMC[3] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleMC[0],*scaleMC[3])); sprintf(histName,"scaleScaleMC_4"); scaleScaleMC[4] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleMC[0],*scaleMC[4])); sprintf(histName,"scaleScaleMC_5"); scaleScaleMC[5] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleMC[0],*scaleMC[5])); sprintf(histName,"scaleScaleMC_6"); scaleScaleMC[6] = new RooFormulaVar(histName,"1/sqrt(@0*@0)",RooArgSet(*scaleMC[1],*scaleMC[1])); sprintf(histName,"scaleScaleMC_7"); scaleScaleMC[7] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleMC[1],*scaleMC[2])); sprintf(histName,"scaleScaleMC_8"); scaleScaleMC[8] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleMC[1],*scaleMC[3])); sprintf(histName,"scaleScaleMC_9"); scaleScaleMC[9] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleMC[1],*scaleMC[4])); sprintf(histName,"scaleScaleMC_10"); scaleScaleMC[10] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleMC[1],*scaleMC[5])); sprintf(histName,"scaleScaleMC_11"); scaleScaleMC[11] = new RooFormulaVar(histName,"1/sqrt(@0*@0)",RooArgSet(*scaleMC[2],*scaleMC[2])); sprintf(histName,"scaleScaleMC_12"); scaleScaleMC[12] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleMC[2],*scaleMC[3])); sprintf(histName,"scaleScaleMC_13"); scaleScaleMC[13] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleMC[2],*scaleMC[4])); sprintf(histName,"scaleScaleMC_14"); scaleScaleMC[14] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleMC[2],*scaleMC[5])); sprintf(histName,"scaleScaleMC_15"); scaleScaleMC[15] = new RooFormulaVar(histName,"1/sqrt(@0*@0)",RooArgSet(*scaleMC[3],*scaleMC[3])); sprintf(histName,"scaleScaleMC_16"); scaleScaleMC[16] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleMC[3],*scaleMC[4])); sprintf(histName,"scaleScaleMC_17"); scaleScaleMC[17] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleMC[3],*scaleMC[5])); sprintf(histName,"scaleScaleMC_18"); scaleScaleMC[18] = new RooFormulaVar(histName,"1/sqrt(@0*@0)",RooArgSet(*scaleMC[4],*scaleMC[4])); sprintf(histName,"scaleScaleMC_19"); scaleScaleMC[19] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleMC[4],*scaleMC[5])); sprintf(histName,"scaleScaleMC_20"); scaleScaleMC[20] = new RooFormulaVar(histName,"1/sqrt(@0*@0)",RooArgSet(*scaleMC[5],*scaleMC[5])); //*/ //* ///scaleScale sprintf(histName,"scaleScaleRD_0"); scaleScaleRD[0] = new RooFormulaVar(histName,"1/sqrt(@0*@0)",RooArgSet(*scaleRD[0],*scaleRD[0])); sprintf(histName,"scaleScaleRD_1"); scaleScaleRD[1] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleRD[0],*scaleRD[1])); sprintf(histName,"scaleScaleRD_2"); scaleScaleRD[2] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleRD[0],*scaleRD[2])); sprintf(histName,"scaleScaleRD_3"); scaleScaleRD[3] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleRD[0],*scaleRD[3])); sprintf(histName,"scaleScaleRD_4"); scaleScaleRD[4] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleRD[0],*scaleRD[4])); sprintf(histName,"scaleScaleRD_5"); scaleScaleRD[5] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleRD[0],*scaleRD[5])); sprintf(histName,"scaleScaleRD_6"); scaleScaleRD[6] = new RooFormulaVar(histName,"1/sqrt(@0*@0)",RooArgSet(*scaleRD[1],*scaleRD[1])); sprintf(histName,"scaleScaleRD_7"); scaleScaleRD[7] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleRD[1],*scaleRD[2])); sprintf(histName,"scaleScaleRD_8"); scaleScaleRD[8] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleRD[1],*scaleRD[3])); sprintf(histName,"scaleScaleRD_9"); scaleScaleRD[9] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleRD[1],*scaleRD[4])); sprintf(histName,"scaleScaleRD_10"); scaleScaleRD[10] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleRD[1],*scaleRD[5])); sprintf(histName,"scaleScaleRD_11"); scaleScaleRD[11] = new RooFormulaVar(histName,"1/sqrt(@0*@0)",RooArgSet(*scaleRD[2],*scaleRD[2])); sprintf(histName,"scaleScaleRD_12"); scaleScaleRD[12] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleRD[2],*scaleRD[3])); sprintf(histName,"scaleScaleRD_13"); scaleScaleRD[13] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleRD[2],*scaleRD[4])); sprintf(histName,"scaleScaleRD_14"); scaleScaleRD[14] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleRD[2],*scaleRD[5])); sprintf(histName,"scaleScaleRD_15"); scaleScaleRD[15] = new RooFormulaVar(histName,"1/sqrt(@0*@0)",RooArgSet(*scaleRD[3],*scaleRD[3])); sprintf(histName,"scaleScaleRD_16"); scaleScaleRD[16] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleRD[3],*scaleRD[4])); sprintf(histName,"scaleScaleRD_17"); scaleScaleRD[17] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleRD[3],*scaleRD[5])); sprintf(histName,"scaleScaleRD_18"); scaleScaleRD[18] = new RooFormulaVar(histName,"1/sqrt(@0*@0)",RooArgSet(*scaleRD[4],*scaleRD[4])); sprintf(histName,"scaleScaleRD_19"); scaleScaleRD[19] = new RooFormulaVar(histName,"1/sqrt(@0*@1)",RooArgSet(*scaleRD[4],*scaleRD[5])); sprintf(histName,"scaleScaleRD_20"); scaleScaleRD[20] = new RooFormulaVar(histName,"1/sqrt(@0*@0)",RooArgSet(*scaleRD[5],*scaleRD[5])); //*/ //* ///smearSmear sprintf(histName,"smearSmearMC_0"); smearSmearMC[0] = new RooFormulaVar(histName,"sqrt(@0*@0+@0*@0)",RooArgSet(*smearMC[0],*smearMC[0])); sprintf(histName,"smearSmearMC_1"); smearSmearMC[1] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearMC[0],*smearMC[1])); sprintf(histName,"smearSmearMC_2"); smearSmearMC[2] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearMC[0],*smearMC[2])); sprintf(histName,"smearSmearMC_3"); smearSmearMC[3] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearMC[0],*smearMC[3])); sprintf(histName,"smearSmearMC_4"); smearSmearMC[4] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearMC[0],*smearMC[4])); sprintf(histName,"smearSmearMC_5"); smearSmearMC[5] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearMC[0],*smearMC[5])); sprintf(histName,"smearSmearMC_6"); smearSmearMC[6] = new RooFormulaVar(histName,"sqrt(@0*@0+@0*@0)",RooArgSet(*smearMC[1],*smearMC[1])); sprintf(histName,"smearSmearMC_7"); smearSmearMC[7] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearMC[1],*smearMC[2])); sprintf(histName,"smearSmearMC_8"); smearSmearMC[8] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearMC[1],*smearMC[3])); sprintf(histName,"smearSmearMC_9"); smearSmearMC[9] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearMC[1],*smearMC[4])); sprintf(histName,"smearSmearMC_10"); smearSmearMC[10] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearMC[1],*smearMC[5])); sprintf(histName,"smearSmearMC_11"); smearSmearMC[11] = new RooFormulaVar(histName,"sqrt(@0*@0+@0*@0)",RooArgSet(*smearMC[2],*smearMC[2])); sprintf(histName,"smearSmearMC_12"); smearSmearMC[12] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearMC[2],*smearMC[3])); sprintf(histName,"smearSmearMC_13"); smearSmearMC[13] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearMC[2],*smearMC[4])); sprintf(histName,"smearSmearMC_14"); smearSmearMC[14] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearMC[2],*smearMC[5])); sprintf(histName,"smearSmearMC_15"); smearSmearMC[15] = new RooFormulaVar(histName,"sqrt(@0*@0+@0*@0)",RooArgSet(*smearMC[3],*smearMC[3])); sprintf(histName,"smearSmearMC_16"); smearSmearMC[16] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearMC[3],*smearMC[4])); sprintf(histName,"smearSmearMC_17"); smearSmearMC[17] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearMC[3],*smearMC[5])); sprintf(histName,"smearSmearMC_18"); smearSmearMC[18] = new RooFormulaVar(histName,"sqrt(@0*@0+@0*@0)",RooArgSet(*smearMC[4],*smearMC[4])); sprintf(histName,"smearSmearMC_19"); smearSmearMC[19] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearMC[4],*smearMC[5])); sprintf(histName,"smearSmearMC_20"); smearSmearMC[20] = new RooFormulaVar(histName,"sqrt(@0*@0+@0*@0)",RooArgSet(*smearMC[5],*smearMC[5])); //*/ //* ///smearSmear sprintf(histName,"smearSmearRD_0"); smearSmearRD[0] = new RooFormulaVar(histName,"sqrt(@0*@0+@0*@0)",RooArgSet(*smearRD[0],*smearRD[0])); sprintf(histName,"smearSmearRD_1"); smearSmearRD[1] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearRD[0],*smearRD[1])); sprintf(histName,"smearSmearRD_2"); smearSmearRD[2] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearRD[0],*smearRD[2])); sprintf(histName,"smearSmearRD_3"); smearSmearRD[3] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearRD[0],*smearRD[3])); sprintf(histName,"smearSmearRD_4"); smearSmearRD[4] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearRD[0],*smearRD[4])); sprintf(histName,"smearSmearRD_5"); smearSmearRD[5] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearRD[0],*smearRD[5])); sprintf(histName,"smearSmearRD_6"); smearSmearRD[6] = new RooFormulaVar(histName,"sqrt(@0*@0+@0*@0)",RooArgSet(*smearRD[1],*smearRD[1])); sprintf(histName,"smearSmearRD_7"); smearSmearRD[7] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearRD[1],*smearRD[2])); sprintf(histName,"smearSmearRD_8"); smearSmearRD[8] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearRD[1],*smearRD[3])); sprintf(histName,"smearSmearRD_9"); smearSmearRD[9] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearRD[1],*smearRD[4])); sprintf(histName,"smearSmearRD_10"); smearSmearRD[10] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearRD[1],*smearRD[5])); sprintf(histName,"smearSmearRD_11"); smearSmearRD[11] = new RooFormulaVar(histName,"sqrt(@0*@0+@0*@0)",RooArgSet(*smearRD[2],*smearRD[2])); sprintf(histName,"smearSmearRD_12"); smearSmearRD[12] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearRD[2],*smearRD[3])); sprintf(histName,"smearSmearRD_13"); smearSmearRD[13] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearRD[2],*smearRD[4])); sprintf(histName,"smearSmearRD_14"); smearSmearRD[14] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearRD[2],*smearRD[5])); sprintf(histName,"smearSmearRD_15"); smearSmearRD[15] = new RooFormulaVar(histName,"sqrt(@0*@0+@0*@0)",RooArgSet(*smearRD[3],*smearRD[3])); sprintf(histName,"smearSmearRD_16"); smearSmearRD[16] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearRD[3],*smearRD[4])); sprintf(histName,"smearSmearRD_17"); smearSmearRD[17] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearRD[3],*smearRD[5])); sprintf(histName,"smearSmearRD_18"); smearSmearRD[18] = new RooFormulaVar(histName,"sqrt(@0*@0+@0*@0)",RooArgSet(*smearRD[4],*smearRD[4])); sprintf(histName,"smearSmearRD_19"); smearSmearRD[19] = new RooFormulaVar(histName,"sqrt(@0*@0+@1*@1)",RooArgSet(*smearRD[4],*smearRD[5])); sprintf(histName,"smearSmearRD_20"); smearSmearRD[20] = new RooFormulaVar(histName,"sqrt(@0*@0+@0*@0)",RooArgSet(*smearRD[5],*smearRD[5])); //*/ RooRealVar gaussMean("gaussMean","gaussMean",0); gaussMean.setConstant(kTRUE); RooRealVar CBMean("CBMean","CBMean",0); CBMean.setConstant(kTRUE); for(int i(0);i<ScElCombiBins;i++) { //Getting histogram from RD & MC sprintf(histName,"h1_ZmassDaughEtaEle_%d",i); h1_ZmassDaughEtaMC[i] = (TH1D*)f_MC->Get(histName)->Clone(histName); h1_ZmassDaughEtaRD[i] = (TH1D*)f_RD->Get(histName)->Clone(histName); sprintf(histName,"ZmassRD_%d",i); ZmassRD[i] = new RooDataHist(histName,histName,RooArgSet(zMass),h1_ZmassDaughEtaRD[i]); sprintf(histName,"cat_%d",i); hmapMC[histName] = h1_ZmassDaughEtaMC[i]; sprintf(histName,"cat_%d",i); hmapRD[histName] = h1_ZmassDaughEtaRD[i]; // Making template from MC sprintf(histName,"ZmassMC_%d",i); ZmassMC[i] = new RooDataHist(histName,histName,RooArgSet(zMass),h1_ZmassDaughEtaMC[i]); sprintf(histName,"cbMC_%d",i); cbMC[i] = new RooCBShape(histName,histName,zMass,CBMean,*smearSmearMC[i],*CBalpha[i],*CBn[i]); sprintf(histName,"BWMC_%d",i); BWMC[i] = new CBreitWignerMC(histName,zMass, scaleScaleMC[i]); sprintf(histName,"pdfMCsig_%d",i); pdfMCsig[i] = new RooFFTConvPdf(histName,histName,zMass,*(BWMC[i]->model),*cbMC[i]); //Making RD pdf // sprintf(histName,"gaus_%d",i); // gaus[i] = new RooGaussian(histName,histName,zMass,gaussMean,*smearSmearRD[i]); // sprintf(histName,"BWCBsCale_%d",i); // BWCBsCale[i] = new CBreitWignerConvCrystalBallScale // (histName,zMass, scaleScaleRD[i], // BWCB[i]->mean->getVal(),BWCB[i]->sigma->getVal(),BWCB[i]->alpha->getVal(),BWCB[i]->n->getVal()); //* sprintf(histName,"cbRD_%d",i); cbRD[i] = new RooCBShape(histName,histName,zMass,CBMean,*smearSmearRD[i],*CBalpha[i],*CBn[i]); sprintf(histName,"BWRD_%d",i); BWRD[i] = new CBreitWignerRD(histName,zMass, scaleScaleRD[i]); sprintf(histName,"pdfRDsig_%d",i); // pdfRDsig[i] = new RooFFTConvPdf(histName,histName,zMass,*(BWCBsCale[i]->model),*gaus[i]); pdfRDsig[i] = new RooFFTConvPdf(histName,histName,zMass,*(BWRD[i]->model),*cbRD[i]); sprintf(histName,"cat_%d",i); pdfTotalMC.addPdf(*pdfMCsig[i],histName); sprintf(histName,"cat_%d",i); pdfTotalRD.addPdf(*pdfRDsig[i],histName); } RooDataHist MCTotal("MCTotal","MCTotal",zMass,rooCat,hmapMC); fitResTotalMC = pdfTotalMC.fitTo(MCTotal,Minos(kTRUE),Save(kTRUE),SumW2Error(kTRUE)); RooDataHist dataTotal("dataTotal","dataTotal",zMass,rooCat,hmapRD); fitResTotalRD = pdfTotalRD.fitTo(dataTotal,Minos(kTRUE),Save(kTRUE),SumW2Error(kTRUE)); Fout<<"bin range \t scale \t smear "<<endl; for(int i(0);i<ScaleBins;i++) { // cout<<" "<<i<<"\t"<<scaleMC[i]->getVal()<<"+"<<scaleMC[i]->getError()<<"\t"<<smearMC[i]->getVal()<<"+"<<smearMC[i]->getError()<<endl; // Fout<<" "<<i<<"\t"<<scaleMC[i]->getVal()<<"+"<<scaleMC[i]->getError()<<"\t"<<smearMC[i]->getVal()<<"+"<<smearMC[i]->getError()<<endl; // cout<<" "<<i<<"\t"<<scaleRD[i]->getVal()<<"+"<<scaleRD[i]->getError()<<"\t"<<smearRD[i]->getVal()<<"+"<<smearRD[i]->getError()<<endl; // Fout<<" "<<i<<"\t"<<scaleRD[i]->getVal()<<"+"<<scaleRD[i]->getError()<<"\t"<<smearRD[i]->getVal()<<"+"<<smearRD[i]->getError()<<endl; cout<<" "<<i<<"\t"<<scaleRD[i]->getVal()/scaleMC[i]->getVal()<<"+-"<<(scaleRD[i]->getVal()/scaleMC[i]->getVal())*sqrt((scaleRD[i]->getError()*scaleRD[i]->getError())/scaleRD[i]->getVal()/scaleRD[i]->getVal()+(scaleMC[i]->getError()*scaleMC[i]->getError())/scaleMC[i]->getVal()/scaleMC[i]->getVal())<<"\t"<<sqrt(smearRD[i]->getVal()*smearRD[i]->getVal()- smearMC[i]->getVal()*smearMC[i]->getVal())<<"+"<<sqrt(smearRD[i]->getError()*smearRD[i]->getError()+ smearMC[i]->getError()*smearMC[i]->getError())<<endl; Fout<<" "<<i<<"\t"<<scaleRD[i]->getVal()/scaleMC[i]->getVal()<<"+-"<<(scaleRD[i]->getVal()/scaleMC[i]->getVal())*sqrt((scaleRD[i]->getError()*scaleRD[i]->getError())/scaleRD[i]->getVal()/scaleRD[i]->getVal()+(scaleMC[i]->getError()*scaleMC[i]->getError())/scaleMC[i]->getVal()/scaleMC[i]->getVal())<<"\t"<<sqrt(smearRD[i]->getVal()*smearRD[i]->getVal()- smearMC[i]->getVal()*smearMC[i]->getVal()) <<"+"<<sqrt(smearRD[i]->getError()*smearRD[i]->getError()+ smearMC[i]->getError()*smearMC[i]->getError())<<endl; } //* for(int i(0);i<ScElCombiBins;i++) { //* zmassFrameMC = zMass.frame(); ZmassMC[i]->plotOn(zmassFrameMC,DrawOption("p")); pdfMCsig[i]->plotOn(zmassFrameMC,DrawOption("l")); sprintf(histName,"ZmassMC_%s_%d",BaseName,i); plotFitMC = new CPlot(histName,zmassFrameMC,"","Di-Lepton M",""); plotFitMC->setOutDir(ResultDir); plotFitMC->Draw(myCan,kTRUE,"png"); //*/ zmassFrameRD = zMass.frame(); ZmassRD[i]->plotOn(zmassFrameRD,DrawOption("p")); pdfRDsig[i]->plotOn(zmassFrameRD,DrawOption("l")); sprintf(histName,"ZmassRD_%s_%d",BaseName,i); plotFitRD = new CPlot(histName,zmassFrameRD,"","Di-Lepton M",""); plotFitRD->setOutDir(ResultDir); plotFitRD->Draw(myCan,kTRUE,"png"); } //*/ Fout.close(); return 0; }
void Wpt_ZmassCompEtaBins_Gaus(const TString Mode,//Channel - Muon or Electron const TString corrName, const TString outputDir ) { TString plotTitle; TString mu_etaRange[6]; mu_etaRange[0] = "-2.1 #geq eta < -1.4"; mu_etaRange[1] = "-1.4 #geq eta < -0.7"; mu_etaRange[2] = "-0.7 #geq eta < 0"; mu_etaRange[3] = "0 #geq eta < 0.7"; mu_etaRange[4] = "0.7 #geq eta < 1.4"; mu_etaRange[5] = "1.4 #geq eta < 2.1"; TH1D* makeDiffHist(TH1D* h1, TH1D* h2, const TString name); const TString format("png"); Int_t ratioColor = kGray+2; TFile *fname_MC; TFile *fname_RD; gSystem->mkdir(outputDir,kTRUE); CPlot::sOutDir = outputDir; fname_MC = new TFile("Muon2012LoPU/Muon_DYToMuMu_S8.root"); fname_RD = new TFile("Muon2012LoPU/Muon_RD_LowPU.root"); if(Mode=="Electron") { fname_MC = new TFile("Electron2012LoPU/Ele_DYToEE_S8.root"); fname_RD = new TFile("Electron2012LoPU/Ele_RD_LowPU.root"); } CPlot *plotMllEtaBinP; CPlot *plotMllEtaBinM; CPlot *plotMllEtameanP; CPlot *plotMllEtameanM; CPlot *plotMllEtawidthP; CPlot *plotMllEtawidthM; TH1D *hMCetaBinP[ScaleBins]; TH1D *hRDetaBinP[ScaleBins]; TH1D *hMCetaBinM[ScaleBins]; TH1D *hRDetaBinM[ScaleBins]; RooDataHist *h1_MCetaBinP; RooDataHist *h1_RDetaBinP; RooDataHist *h1_MCetaBinM; RooDataHist *h1_RDetaBinM; TH1D *hMCmeanp = new TH1D("hMCmeanp","hMCmeanp",ScaleBins,-2.1,2.1);hMCmeanp->Sumw2(); TH1D *hRDmeanp = new TH1D("hRDmeanp","hRDmeanp",ScaleBins,-2.1,2.1);hRDmeanp->Sumw2(); TH1D *hMCmeanm = new TH1D("hMCmeanm","hMCmeanm",ScaleBins,-2.1,2.1);hMCmeanm->Sumw2(); TH1D *hRDmeanm = new TH1D("hRDmeanm","hRDmeanm",ScaleBins,-2.1,2.1);hRDmeanm->Sumw2(); TH1D *hMCwidthp = new TH1D("hMCwidthp","hMCwidthp",ScaleBins,-2.1,2.1);hMCwidthp->Sumw2(); TH1D *hRDwidthp = new TH1D("hRDwidthp","hRDwidthp",ScaleBins,-2.1,2.1);hRDwidthp->Sumw2(); TH1D *hMCwidthm = new TH1D("hMCwidthm","hMCwidthm",ScaleBins,-2.1,2.1);hMCwidthm->Sumw2(); TH1D *hRDwidthm = new TH1D("hRDwidthm","hRDwidthm",ScaleBins,-2.1,2.1);hRDwidthm->Sumw2(); char histName[50]; char tmpName[50]; TCanvas *myCan; myCan = MakeCanvas("myCan","myCan",800,600); myCan->SetPad(0,0,1.0,1.0); myCan->SetTopMargin(0.11); myCan->SetBottomMargin(0.15); myCan->SetLeftMargin(0.15); myCan->SetRightMargin(0.05); myCan->SetTickx(1); myCan->SetTicky(1); //============================= //Read Zmass histograms for each pt bin //============================= for(int i(0);i<ScaleBins;i++){ sprintf(tmpName,"h1_Zmass_muEtaP_%d",i); if(corrName=="CorrTotalRegion") sprintf(tmpName,"h1_ZmassCorr_muEtaP_%d",i); if(outputDir=="Wpt_ZmassPlotsEtaBins_noOverLap_Gaus") { sprintf(tmpName,"h1_Zmass_noOverLap_muEtaP_%d",i); if(corrName=="CorrTotalRegion") sprintf(tmpName,"h1_ZmassCorr_noOverLap_muEtaP_%d",i); } if(outputDir=="Wpt_ZmassPlotsEtaBins_LeadingLept_noOverLap_Gaus") { sprintf(tmpName,"h1_Zmass_LeadingLept_noOverLap_muEtaP_%d",i); if(corrName=="CorrTotalRegion") sprintf(tmpName,"h1_ZmassCorr_LeadingLept_noOverLap_muEtaP_%d",i); } if(outputDir=="Wpt_ZmassPlotsEtaBins_LeadingLept_Gaus") { sprintf(tmpName,"h1_Zmass_LeadingLept_muEtaP_%d",i); if(corrName=="CorrTotalRegion") sprintf(tmpName,"h1_ZmassCorr_LeadingLept_muEtaP_%d",i); } if(outputDir=="Wpt_ZmassPlotsEtaBins_TrailingLept_noOverLap_Gaus") { sprintf(tmpName,"h1_Zmass_TrailingLept_noOverLap_muEtaP_%d",i); if(corrName=="CorrTotalRegion") sprintf(tmpName,"h1_ZmassCorr_TrailingLept_noOverLap_muEtaP_%d",i); } if(outputDir=="Wpt_ZmassPlotsEtaBins_TrailingLept_Gaus") { sprintf(tmpName,"h1_Zmass_TrailingLept_muEtaP_%d",i); if(corrName=="CorrTotalRegion") sprintf(tmpName,"h1_ZmassCorr_TrailingLept_muEtaP_%d",i); } sprintf(histName,"hMCetaBinP_%d",i); hMCetaBinP[i]= (TH1D*)fname_MC->Get(tmpName)->Clone(histName); hMCetaBinP[i]->Sumw2(); sprintf(histName,"hRDetaBinP_%d",i); hRDetaBinP[i]= (TH1D*)fname_RD->Get(tmpName)->Clone(histName); hRDetaBinP[i]->Sumw2(); sprintf(tmpName,"h1_Zmass_muEtaM_%d",i); if(corrName=="CorrTotalRegion") sprintf(tmpName,"h1_ZmassCorr_muEtaM_%d",i); if(outputDir=="Wpt_ZmassPlotsEtaBins_noOverLap_Gaus") { sprintf(tmpName,"h1_Zmass_noOverLap_muEtaM_%d",i); if(corrName=="CorrTotalRegion") sprintf(tmpName,"h1_ZmassCorr_noOverLap_muEtaM_%d",i); } if(outputDir=="Wpt_ZmassPlotsEtaBins_LeadingLept_noOverLap_Gaus") { sprintf(tmpName,"h1_Zmass_LeadingLept_noOverLap_muEtaM_%d",i); if(corrName=="CorrTotalRegion") sprintf(tmpName,"h1_ZmassCorr_LeadingLept_noOverLap_muEtaM_%d",i); } if(outputDir=="Wpt_ZmassPlotsEtaBins_LeadingLept_Gaus") { sprintf(tmpName,"h1_Zmass_LeadingLept_muEtaM_%d",i); if(corrName=="CorrTotalRegion") sprintf(tmpName,"h1_ZmassCorr_LeadingLept_muEtaM_%d",i); } if(outputDir=="Wpt_ZmassPlotsEtaBins_TrailingLept_noOverLap_Gaus") { sprintf(tmpName,"h1_Zmass_TrailingLept_noOverLap_muEtaM_%d",i); if(corrName=="CorrTotalRegion") sprintf(tmpName,"h1_ZmassCorr_TrailingLept_noOverLap_muEtaM_%d",i); } if(outputDir=="Wpt_ZmassPlotsEtaBins_TrailingLept_Gaus") { sprintf(tmpName,"h1_Zmass_TrailingLept_muEtaM_%d",i); if(corrName=="CorrTotalRegion") sprintf(tmpName,"h1_ZmassCorr_TrailingLept_muEtaM_%d",i); } sprintf(histName,"hMCetaBinM_%d",i); hMCetaBinM[i]= (TH1D*)fname_MC->Get(tmpName)->Clone(histName); hMCetaBinM[i]->Sumw2(); sprintf(histName,"hRDetaBinM_%d",i); hRDetaBinM[i]= (TH1D*)fname_RD->Get(tmpName)->Clone(histName); hRDetaBinM[i]->Sumw2(); hMCetaBinP[i] -> SetMarkerSize(0.9); hMCetaBinP[i] -> SetMarkerColor(kRed); hMCetaBinP[i] -> SetLineColor(kRed); hRDetaBinP[i] -> SetMarkerSize(0.9); hRDetaBinP[i] -> SetMarkerColor(kBlack); hRDetaBinP[i] -> SetLineColor(kBlack); hMCetaBinM[i] -> SetMarkerSize(0.9); hMCetaBinM[i] -> SetMarkerColor(kRed); hMCetaBinM[i] -> SetLineColor(kRed); hRDetaBinM[i] -> SetMarkerSize(0.9); hRDetaBinM[i] -> SetMarkerColor(kBlack); hRDetaBinM[i] -> SetLineColor(kBlack); RooRealVar x("x", "x",80,100); x.setBins(40); x.setRange("R0",86,96); h1_MCetaBinP = new RooDataHist("h1_MCetaBinP","h1_MCetaBinP",RooArgSet(x),hMCetaBinP[i]); h1_MCetaBinM = new RooDataHist("h1_MCetaBinM","h1_MCetaBinM",RooArgSet(x),hMCetaBinM[i]); h1_RDetaBinP = new RooDataHist("h1_RDetaBinP","h1_RDetaBinP",RooArgSet(x),hRDetaBinP[i]); h1_RDetaBinM = new RooDataHist("h1_RDetaBinM","h1_RDetaBinM",RooArgSet(x),hRDetaBinM[i]); //============================= //Gauss function //============================= RooRealVar meanMCp("meanMCp","",91.2,80,100); RooRealVar meanRDp("meanRDp","",91.2,80,100); RooRealVar meanMCm("meanMCm","",91.2,80,100); RooRealVar meanRDm("meanRDm","",91.2,80,100); RooRealVar sigmaMCp("sigmaMCp","",5,-50.,50.); RooRealVar sigmaRDp("sigmaRDp","",5,-50.,50.); RooRealVar sigmaMCm("sigmaMCm","",5,-50.,50.); RooRealVar sigmaRDm("sigmaRDm","",5,-50.,50.); RooGaussian mcModelp("mcModelp", "",x,meanMCp,sigmaMCp); RooGaussian mcModelm("mcModelm", "",x,meanMCm,sigmaMCm); RooGaussian dataModelp("dataModelp", "",x,meanRDp,sigmaRDp); RooGaussian dataModelm("dataModelm", "",x,meanRDm,sigmaRDm); //================================== //Fit Zmass distribution with Gaussian function //============================= mcModelp.fitTo(*h1_MCetaBinP,Range("R0")); mcModelm.fitTo(*h1_MCetaBinM,Range("R0")); dataModelp.fitTo(*h1_RDetaBinP,Range("R0")); dataModelm.fitTo(*h1_RDetaBinM,Range("R0")); //================================== //Fill 2D plots: etaBins and mean values //============================= hMCmeanp->SetBinContent(i+1,meanMCp.getVal()); hRDmeanp->SetBinContent(i+1,meanRDp.getVal()); hMCmeanm->SetBinContent(i+1,meanMCm.getVal()); hRDmeanm->SetBinContent(i+1,meanRDm.getVal()); hMCmeanp->SetBinError(i+1,meanMCp.getError()); hRDmeanp->SetBinError(i+1,meanRDp.getError()); hMCmeanm->SetBinError(i+1,meanMCm.getError()); hRDmeanm->SetBinError(i+1,meanRDm.getError()); hMCwidthp->SetBinContent(i+1,sigmaMCp.getVal()); hRDwidthp->SetBinContent(i+1,sigmaRDp.getVal()); hMCwidthm->SetBinContent(i+1,sigmaMCm.getVal()); hRDwidthm->SetBinContent(i+1,sigmaRDm.getVal()); hMCwidthp->SetBinError(i+1,sigmaMCp.getError()); hRDwidthp->SetBinError(i+1,sigmaRDp.getError()); hMCwidthm->SetBinError(i+1,sigmaMCm.getError()); hRDwidthm->SetBinError(i+1,sigmaRDm.getError()); cout<<meanMCp.getVal()<<"\t"<<meanMCm.getVal()<<"\t"<<meanRDp.getVal()<<"\t"<<meanRDm.getVal()<<endl; RooPlot* pframe = x.frame(Bins(40)); RooPlot* mframe = x.frame(Bins(40)); //================================== //Draw muon plus //================================== sprintf(tmpName,"pFit_etaBin%d_noCorr",i); plotTitle = "Wpt: " + mu_etaRange[i] + " of #mu^{+}, before correction"; if(corrName=="CorrTotalRegion") { sprintf(tmpName,"pFit_etaBin%d_Corr",i); plotTitle = "Wpt: " + mu_etaRange[i] + " of #mu^{+}, after correction"; } sprintf(histName,"Events / %.1f",hMCetaBinP[i]->GetBinWidth(1)); plotMllEtaBinP = new CPlot(tmpName,pframe,plotTitle,"M_{#mu#mu} [GeV]",histName); plotMllEtaBinP->setOutDir(CPlot::sOutDir); plotMllEtaBinP->SetLegend(0.7,0.7,0.88,0.82); h1_MCetaBinP->plotOn(pframe,LineColor(kRed),MarkerColor(kRed),MarkerStyle(kFullCircle),MarkerSize(0.9),DrawOption("ZP"),DataError(RooAbsData::SumW2)); mcModelp.plotOn(pframe,LineColor(kRed)); h1_RDetaBinP->plotOn(pframe,LineColor(kBlack),MarkerColor(kBlack),MarkerStyle(kFullCircle),MarkerSize(0.9),DrawOption("ZP"),DataError(RooAbsData::SumW2)); dataModelp.plotOn(pframe,LineColor(kBlack)); plotMllEtaBinP->GetLegend()->AddEntry(hMCetaBinP[i],"Z #rightarrow #mu#mu","pl"); plotMllEtaBinP->GetLegend()->AddEntry(hRDetaBinP[i],"Data","pl"); sprintf(tmpName,"MC: #mu=%.2f #pm %.2f, #sigma=%.2f #pm %.2f",meanMCp.getVal(),meanMCp.getError(),sigmaMCp.getVal(),sigmaMCp.getError()); plotMllEtaBinP->AddTextBox(tmpName,0.20,0.83,0.6,0.88,0); sprintf(tmpName,"Data: #mu=%.2f #pm %.2f, #sigma=%.2f #pm %.2f",meanRDp.getVal(),meanRDp.getError(),sigmaRDp.getVal(),sigmaRDp.getError()); plotMllEtaBinP->AddTextBox(tmpName,0.20,0.78,0.6,0.83,0); plotMllEtaBinP->SetYRange(0.,1.4*TMath::Max(hRDetaBinP[i]->GetMaximum(),hMCetaBinP[i]->GetMaximum())); plotMllEtaBinP->Draw(myCan,kTRUE,"png"); //================================== //Draw muon minus //============================= sprintf(tmpName,"mFit_etaBin%d_noCorr",i); plotTitle = "Wpt: " + mu_etaRange[i] + " of #mu^{-}, before correction"; if(corrName=="CorrTotalRegion") { sprintf(tmpName,"mFit_etaBin%d_Corr",i); plotTitle = "Wpt: " + mu_etaRange[i] + " of #mu^{-}, after correction"; } sprintf(histName,"Events / %.1f",hMCetaBinM[i]->GetBinWidth(1)); plotMllEtaBinM = new CPlot(tmpName,mframe,plotTitle,"M_{#mu#mu} [GeV]",histName); plotMllEtaBinM->setOutDir(CPlot::sOutDir); plotMllEtaBinM->SetLegend(0.7,0.7,0.88,0.82); h1_MCetaBinM->plotOn(mframe,LineColor(kRed),MarkerColor(kRed),MarkerStyle(kFullCircle),MarkerSize(0.9),DrawOption("ZP"),DataError(RooAbsData::SumW2)); mcModelm.plotOn(mframe,LineColor(kRed)); h1_RDetaBinM->plotOn(mframe,LineColor(kBlack),MarkerColor(kBlack),MarkerStyle(kFullCircle),MarkerSize(0.9),DrawOption("ZP"),DataError(RooAbsData::SumW2)); dataModelm.plotOn(mframe,LineColor(kBlack)); plotMllEtaBinM->GetLegend()->AddEntry(hMCetaBinM[i],"Z #rightarrow #mu#mu","pl"); plotMllEtaBinM->GetLegend()->AddEntry(hRDetaBinM[i],"Data","pl"); sprintf(tmpName,"MC: #mu=%.2f #pm %.2f, #sigma=%.2f #pm %.2f",meanMCm.getVal(),meanMCm.getError(),sigmaMCm.getVal(),sigmaMCm.getError()); plotMllEtaBinM->AddTextBox(tmpName,0.20,0.83,0.6,0.88,0); sprintf(tmpName,"Data: #mu=%.2f #pm %.2f, #sigma=%.2f #pm %.2f",meanRDm.getVal(),meanRDm.getError(),sigmaRDm.getVal(),sigmaRDm.getError()); plotMllEtaBinM->AddTextBox(tmpName,0.20,0.78,0.6,0.83,0); plotMllEtaBinM->SetYRange(0.,1.4*TMath::Max(hRDetaBinM[i]->GetMaximum(),hMCetaBinM[i]->GetMaximum())); plotMllEtaBinM->Draw(myCan,kTRUE,"png"); } //================================== //Save Mean and Width histograms to root file //================================== TString filename = outputDir + "/Wpt_MeanWidth_Gaus_" + corrName + ".root"; TFile *outfile = new TFile(filename,"RECREATE"); hMCmeanp ->Write(); hMCmeanm ->Write(); hMCwidthp->Write(); hMCwidthm->Write(); hRDmeanp ->Write(); hRDmeanm ->Write(); hRDwidthp->Write(); hRDwidthm->Write(); outfile->Close(); //================================== //Draw 2D plots //================================== TString histoName = "plusMean_" + corrName; plotTitle = "Wpt: mean at #eta of #mu^{+}, before correction"; if(corrName=="CorrTotalRegion") plotTitle = "Wpt: mean at #eta of #mu^{+}, after correction"; plotMllEtameanP= new CPlot(histoName,plotTitle,"#eta of #mu^{+}","Mean of M(#mu^{+}#mu^{-})"); plotMllEtameanP->setOutDir(CPlot::sOutDir); plotMllEtameanP->AddHist1D(hMCmeanp,"Z#rightarrow #mu#mu","E1",kRed); plotMllEtameanP->AddHist1D(hRDmeanp,"Data","E1",kBlack); plotMllEtameanP->SetLegend(0.7,0.7,0.88,0.82); plotMllEtameanP->SetYRange(90,92); plotMllEtameanP->Draw(myCan,kTRUE,format); histoName = "minusMean_" + corrName; plotTitle = "Wpt: mean at #eta of #mu^{-}, before correction"; if(corrName=="CorrTotalRegion") plotTitle = "Wpt: mean at #eta of #mu^{-}, after correction"; plotMllEtameanM= new CPlot(histoName,plotTitle,"#eta of #mu^{-}","Mean of M(#mu^{+}#mu^{-})"); plotMllEtameanM->setOutDir(CPlot::sOutDir); plotMllEtameanM->AddHist1D(hMCmeanm,"Z#rightarrow #mu#mu","E1",kRed); plotMllEtameanM->AddHist1D(hRDmeanm,"Data","E1",kBlack); plotMllEtameanM->SetLegend(0.7,0.7,0.88,0.82); plotMllEtameanM->SetYRange(90,92); plotMllEtameanM->Draw(myCan,kTRUE,format); histoName = "plusWidth_" + corrName; plotTitle = "Wpt: width at #eta of #mu^{+}, before correction"; if(corrName=="CorrTotalRegion") plotTitle = "Wpt: width at #eta of #mu^{+}, after correction"; plotMllEtawidthP= new CPlot(histoName,plotTitle,"#eta of #mu^{+}","Width of M(#mu^{+}#mu^{-})"); plotMllEtawidthP->setOutDir(CPlot::sOutDir); plotMllEtawidthP->AddHist1D(hMCwidthp,"Z#rightarrow #mu#mu","E1",kRed); plotMllEtawidthP->AddHist1D(hRDwidthp,"Data","E1",kBlack); plotMllEtawidthP->SetLegend(0.7,0.7,0.88,0.82); plotMllEtawidthP->SetYRange(1.5,3); plotMllEtawidthP->Draw(myCan,kTRUE,format); histoName = "minusWidth_" + corrName; plotTitle = "Wpt: width at #eta of #mu^{-}, before correction"; if(corrName=="CorrTotalRegion") plotTitle = "Wpt: width at #eta of #mu^{-}, after correction"; plotMllEtawidthM= new CPlot(histoName,plotTitle,"#eta of #mu^{-}","Width of M(#mu^{+}#mu^{-})"); plotMllEtawidthM->setOutDir(CPlot::sOutDir); plotMllEtawidthM->AddHist1D(hMCwidthm,"Z#rightarrow #mu#mu","E1",kRed); plotMllEtawidthM->AddHist1D(hRDwidthm,"Data","E1",kBlack); plotMllEtawidthM->SetLegend(0.7,0.7,0.88,0.82); plotMllEtawidthM->SetYRange(1.5,3); plotMllEtawidthM->Draw(myCan,kTRUE,format); }
void fitWe(const TString outputDir="test", // output directory const Double_t lumi=18.7, // integrated luminosity (/fb) const Int_t Ecm=8, // center-of-mass energy const Int_t doPU=1 // option for PU-reweighting ) { gBenchmark->Start("fitWe"); //-------------------------------------------------------------------------------------------------------------- // Settings //============================================================================================================== // MET histogram binning and range const Int_t NBINS = 50; const Double_t METMAX = 100; const Double_t PT_CUT = 25; const Double_t ETA_CUT = 2.5; // file format for output plots const TString format("png"); // file name with recoil correction TString recoilfname("../RecoilSyst/ZeeData/fits.root"); // file name(s) with PU weights TString pufname(""); if(doPU>0) { if(doPU==1) { pufname = "Utils/PileupReweighting.Summer11DYmm_To_Run2011A.root"; } else { cout << "Invalid option for PU re-weighting! Aborting..." << endl; assert(0); } } // // input ntuple file names // enum { eData, eWenu, eEWK }; // data type enum vector<TString> fnamev; vector<Int_t> typev; fnamev.push_back("../Selection/Wenu/ntuples/data_m23_select.root"); typev.push_back(eData); fnamev.push_back("../Selection/Wenu/ntuples/we_select.root"); typev.push_back(eWenu); fnamev.push_back("../Selection/Wenu/ntuples/ewk_select.root"); typev.push_back(eEWK); fnamev.push_back("../Selection/Wenu/ntuples/top_select.root"); typev.push_back(eEWK); //-------------------------------------------------------------------------------------------------------------- // Main analysis code //============================================================================================================== // Create output directory gSystem->mkdir(outputDir,kTRUE); CPlot::sOutDir = outputDir; // Get pile-up weights TFile *pufile = 0; TH1D *puWeights = 0; if(doPU>0) { pufile = new TFile(pufname); assert(pufile); puWeights = (TH1D*)pufile->Get("puWeights"); assert(puWeights); } // Access recoil corrections //RecoilCorrector recoilCorr(recoilfname); // // Declare MET histograms // TH1D *hDataMet = new TH1D("hDataMet", "",NBINS,0,METMAX); hDataMet->Sumw2(); TH1D *hDataMetm = new TH1D("hDataMetm","",NBINS,0,METMAX); hDataMetm->Sumw2(); TH1D *hDataMetp = new TH1D("hDataMetp","",NBINS,0,METMAX); hDataMetp->Sumw2(); TH1D *hWenuMet = new TH1D("hWenuMet", "",NBINS,0,METMAX); hWenuMet->Sumw2(); TH1D *hWenuMetp = new TH1D("hWenuMetp","",NBINS,0,METMAX); hWenuMetp->Sumw2(); TH1D *hWenuMetm = new TH1D("hWenuMetm","",NBINS,0,METMAX); hWenuMetm->Sumw2(); TH1D *hEWKMet = new TH1D("hEWKMet", "",NBINS,0,METMAX); hEWKMet->Sumw2(); TH1D *hEWKMetp = new TH1D("hEWKMetp", "",NBINS,0,METMAX); hEWKMetp->Sumw2(); TH1D *hEWKMetm = new TH1D("hEWKMetm", "",NBINS,0,METMAX); hEWKMetm->Sumw2(); // // Declare variables to read in ntuple // UInt_t runNum, lumiSec, evtNum; UInt_t npv, npu; Float_t genWPt, genWPhi; Float_t scale1fb; Float_t met, metPhi, sumEt, mt, u1, u2; Int_t q; LorentzVector *lep=0; LorentzVector *sc=0; TFile *infile=0; TTree *intree=0; // // Loop over files // for(UInt_t ifile=0; ifile<fnamev.size(); ifile++) { // Read input file and get the TTrees cout << "Processing " << fnamev[ifile] << "..." << endl; infile = new TFile(fnamev[ifile]); assert(infile); intree = (TTree*)infile->Get("Events"); assert(intree); intree->SetBranchAddress("runNum", &runNum); // event run number intree->SetBranchAddress("lumiSec", &lumiSec); // event lumi section intree->SetBranchAddress("evtNum", &evtNum); // event number intree->SetBranchAddress("npv", &npv); // number of primary vertices intree->SetBranchAddress("npu", &npu); // number of in-time PU events (MC) intree->SetBranchAddress("genVPt", &genWPt); // GEN W boson pT (signal MC) intree->SetBranchAddress("genVPhi", &genWPhi); // GEN W boson phi (signal MC) intree->SetBranchAddress("scale1fb", &scale1fb); // event weight per 1/fb (MC) intree->SetBranchAddress("met", &met); // MET intree->SetBranchAddress("metPhi", &metPhi); // phi(MET) intree->SetBranchAddress("sumEt", &sumEt); // Sum ET intree->SetBranchAddress("mt", &mt); // transverse mass intree->SetBranchAddress("u1", &u1); // parallel component of recoil intree->SetBranchAddress("u2", &u2); // perpendicular component of recoil intree->SetBranchAddress("q", &q); // lepton charge intree->SetBranchAddress("lep", &lep); // lepton 4-vector intree->SetBranchAddress("sc", &sc); // electron Supercluster 4-vector // // loop over events // for(UInt_t ientry=0; ientry<intree->GetEntries(); ientry++) { intree->GetEntry(ientry); if(mt< 40) continue; // LUCA ADD TLorentzVector muPosP, muNegP, JpsiP; muPosP.SetPtEtaPhiM(lep->Pt(),lep->Eta(),lep->Phi(),lep->M()); // always use the muon muNegP.SetPtEtaPhiM(met,0,metPhi,0); // always use the neutrino JpsiP = muPosP + muNegP; // if(JpsiP.Pt() < 15 // || JpsiP.Pt() > 25 ) continue; if(sc->Pt() < PT_CUT) continue; if(fabs(sc->Eta()) > ETA_CUT) continue; if(typev[ifile]==eData) { hDataMet->Fill(met); if(q>0) { hDataMetp->Fill(met); } else { hDataMetm->Fill(met); } } else { Double_t weight = 1; weight *= scale1fb*lumi; if(puWeights) weight *= puWeights->GetBinContent(npu+1); if(typev[ifile]==eWenu) { Double_t corrMet=met, corrMetPhi=metPhi; // apply recoil corrections to W MC //recoilCorr.Correct(corrMet,corrMetPhi,genWPt,genWPhi,lep->Pt(),lep->Phi()); hWenuMet->Fill(corrMet,weight); if(q>0) { hWenuMetp->Fill(corrMet,weight); } else { hWenuMetm->Fill(corrMet,weight); } } if(typev[ifile]==eEWK) { hEWKMet->Fill(met,weight); if(q>0) { hEWKMetp->Fill(met,weight); } else { hEWKMetm->Fill(met,weight); } } } } } delete infile; infile=0, intree=0; // // Declare fit parameters for signal and background yields // Note: W signal and EWK+top PDFs are constrained to the ratio described in MC // RooRealVar nSig("nSig","nSig",0.7*(hDataMet->Integral()),0,hDataMet->Integral()); RooRealVar nQCD("nQCD","nQCD",0.3*(hDataMet->Integral()),0,hDataMet->Integral()); RooRealVar cewk("cewk","cewk",0.1,0,5) ; cewk.setVal(hEWKMet->Integral()/hWenuMet->Integral()); cewk.setConstant(kTRUE); RooFormulaVar nEWK("nEWK","nEWK","cewk*nSig",RooArgList(nSig,cewk)); RooRealVar nSigp("nSigp","nSigp",0.7*(hDataMetp->Integral()),0,hDataMetp->Integral()); RooRealVar nQCDp("nQCDp","nQCDp",0.3*(hDataMetp->Integral()),0,hDataMetp->Integral()); RooRealVar cewkp("cewkp","cewkp",0.1,0,5) ; cewkp.setVal(hEWKMetp->Integral()/hWenuMetp->Integral()); cewkp.setConstant(kTRUE); RooFormulaVar nEWKp("nEWKp","nEWKp","cewkp*nSigp",RooArgList(nSigp,cewkp)); RooRealVar nSigm("nSigm","nSigm",0.7*(hDataMetm->Integral()),0,hDataMetm->Integral()); RooRealVar nQCDm("nQCDm","nQCDm",0.3*(hDataMetm->Integral()),0,hDataMetm->Integral()); RooRealVar cewkm("cewkm","cewkm",0.1,0,5) ; cewkm.setVal(hEWKMetm->Integral()/hWenuMetm->Integral()); cewkm.setConstant(kTRUE); RooFormulaVar nEWKm("nEWKm","nEWKm","cewkm*nSigm",RooArgList(nSigm,cewkm)); // // Construct PDFs for fitting // RooRealVar pfmet("pfmet","pfmet",0,METMAX); pfmet.setBins(NBINS); // Signal PDFs RooDataHist wenuMet ("wenuMET", "wenuMET", RooArgSet(pfmet),hWenuMet); RooHistPdf pdfWe ("we", "we", pfmet,wenuMet, 1); RooDataHist wenuMetp("wenuMETp","wenuMETp",RooArgSet(pfmet),hWenuMetp); RooHistPdf pdfWep("wep","wep",pfmet,wenuMetp,1); RooDataHist wenuMetm("wenuMETm","wenuMETm",RooArgSet(pfmet),hWenuMetm); RooHistPdf pdfWem("wem","wem",pfmet,wenuMetm,1); // EWK+top PDFs RooDataHist ewkMet ("ewkMET", "ewkMET", RooArgSet(pfmet),hEWKMet); RooHistPdf pdfEWK ("ewk", "ewk", pfmet,ewkMet, 1); RooDataHist ewkMetp("ewkMETp","ewkMETp",RooArgSet(pfmet),hEWKMetp); RooHistPdf pdfEWKp("ewkp","ewkp",pfmet,ewkMetp,1); RooDataHist ewkMetm("ewkMETm","ewkMETm",RooArgSet(pfmet),hEWKMetm); RooHistPdf pdfEWKm("ewkm","ewkm",pfmet,ewkMetm,1); // QCD Pdfs CPepeModel1 qcd("qcd",pfmet); CPepeModel1 qcdp("qcdp",pfmet); CPepeModel1 qcdm("qcdm",pfmet); // Signal + Background PDFs RooAddPdf pdfMet ("pdfMet", "pdfMet", RooArgList(pdfWe,pdfEWK,*(qcd.model)), RooArgList(nSig,nEWK,nQCD)); RooAddPdf pdfMetp("pdfMetp","pdfMetp",RooArgList(pdfWep,pdfEWKp,*(qcdp.model)),RooArgList(nSigp,nEWKp,nQCDp)); RooAddPdf pdfMetm("pdfMetm","pdfMetm",RooArgList(pdfWem,pdfEWKm,*(qcdm.model)),RooArgList(nSigm,nEWKm,nQCDm)); // // Perform fits // RooDataHist dataMet("dataMet", "dataMet", RooArgSet(pfmet),hDataMet); RooFitResult *fitRes = pdfMet.fitTo(dataMet,Extended(),Minos(kTRUE),Save(kTRUE)); RooDataHist dataMetp("dataMetp","dataMetp",RooArgSet(pfmet),hDataMetp); RooFitResult *fitResp = pdfMetp.fitTo(dataMetp,Extended(),Minos(kTRUE),Save(kTRUE)); RooDataHist dataMetm("dataMetm","dataMetm",RooArgSet(pfmet),hDataMetm); RooFitResult *fitResm = pdfMetm.fitTo(dataMetm,Extended(),Minos(kTRUE),Save(kTRUE)); // // Use histogram version of fitted PDFs to make ratio plots // (Will also use PDF histograms later for Chi^2 and KS tests) // TH1D *hPdfMet = (TH1D*)(pdfMet.createHistogram("hPdfMet", pfmet)); hPdfMet->Scale((nSig.getVal()+nEWK.getVal()+nQCD.getVal())/hPdfMet->Integral()); TH1D *hMetDiff = makeDiffHist(hDataMet,hPdfMet,"hMetDiff"); hMetDiff->SetMarkerStyle(kFullCircle); hMetDiff->SetMarkerSize(0.9); TH1D *hPdfMetp = (TH1D*)(pdfMetp.createHistogram("hPdfMetp", pfmet)); hPdfMetp->Scale((nSigp.getVal()+nEWKp.getVal()+nQCDp.getVal())/hPdfMetp->Integral()); TH1D *hMetpDiff = makeDiffHist(hDataMetp,hPdfMetp,"hMetpDiff"); hMetpDiff->SetMarkerStyle(kFullCircle); hMetpDiff->SetMarkerSize(0.9); TH1D *hPdfMetm = (TH1D*)(pdfMetm.createHistogram("hPdfMetm", pfmet)); hPdfMetm->Scale((nSigm.getVal()+nEWKm.getVal()+nQCDm.getVal())/hPdfMetm->Integral()); TH1D *hMetmDiff = makeDiffHist(hDataMetm,hPdfMetm,"hMetmDiff"); hMetmDiff->SetMarkerStyle(kFullCircle); hMetmDiff->SetMarkerSize(0.9); //-------------------------------------------------------------------------------------------------------------- // Make plots //============================================================================================================== TCanvas *c = MakeCanvas("c","c",800,800); c->Divide(1,2,0,0); c->cd(1)->SetPad(0,0.3,1.0,1.0); c->cd(1)->SetTopMargin(0.1); c->cd(1)->SetBottomMargin(0.01); c->cd(1)->SetLeftMargin(0.18); c->cd(1)->SetRightMargin(0.07); c->cd(1)->SetTickx(1); c->cd(1)->SetTicky(1); c->cd(2)->SetPad(0,0,1.0,0.3); c->cd(2)->SetTopMargin(0.05); c->cd(2)->SetBottomMargin(0.45); c->cd(2)->SetLeftMargin(0.18); c->cd(2)->SetRightMargin(0.07); c->cd(2)->SetTickx(1); c->cd(2)->SetTicky(1); gStyle->SetTitleOffset(1.400,"Y"); char ylabel[100]; // string buffer for y-axis label // label for lumi char lumitext[100]; if(lumi<0.1) sprintf(lumitext,"%.1f pb^{-1} at #sqrt{s} = %i TeV",lumi*1000.,Ecm); else sprintf(lumitext,"%.2f fb^{-1} at #sqrt{s} = %i TeV",lumi,Ecm); // plot colors Int_t linecolorW = kOrange-3; Int_t fillcolorW = kOrange-2; Int_t linecolorEWK = kOrange+10; Int_t fillcolorEWK = kOrange+7; Int_t linecolorQCD = kViolet+2; Int_t fillcolorQCD = kViolet-5; Int_t ratioColor = kGray+2; // // Dummy histograms for TLegend // (I can't figure out how to properly pass RooFit objects...) // TH1D *hDummyData = new TH1D("hDummyData","",0,0,10); hDummyData->SetMarkerStyle(kFullCircle); hDummyData->SetMarkerSize(0.9); TH1D *hDummyW = new TH1D("hDummyW","",0,0,10); hDummyW->SetLineColor(linecolorW); hDummyW->SetFillColor(fillcolorW); hDummyW->SetFillStyle(1001); TH1D *hDummyEWK = new TH1D("hDummyEWK","",0,0,10); hDummyEWK->SetLineColor(linecolorEWK); hDummyEWK->SetFillColor(fillcolorEWK); hDummyEWK->SetFillStyle(1001); TH1D *hDummyQCD = new TH1D("hDummyQCD","",0,0,10); hDummyQCD->SetLineColor(linecolorQCD); hDummyQCD->SetFillColor(fillcolorQCD); hDummyQCD->SetFillStyle(1001); // // W MET plot // RooPlot *weframe = pfmet.frame(Bins(NBINS)); dataMet.plotOn(weframe,MarkerStyle(kFullCircle),MarkerSize(0.9),DrawOption("ZP")); pdfMet.plotOn(weframe,FillColor(fillcolorW),DrawOption("F")); pdfMet.plotOn(weframe,LineColor(linecolorW)); pdfMet.plotOn(weframe,Components(RooArgSet(pdfEWK,*(qcd.model))),FillColor(fillcolorEWK),DrawOption("F")); pdfMet.plotOn(weframe,Components(RooArgSet(pdfEWK,*(qcd.model))),LineColor(linecolorEWK)); pdfMet.plotOn(weframe,Components(RooArgSet(*(qcd.model))),FillColor(fillcolorQCD),DrawOption("F")); pdfMet.plotOn(weframe,Components(RooArgSet(*(qcd.model))),LineColor(linecolorQCD)); pdfMet.plotOn(weframe,Components(RooArgSet(pdfWe)),LineColor(linecolorW),LineStyle(2)); dataMet.plotOn(weframe,MarkerStyle(kFullCircle),MarkerSize(0.9),DrawOption("ZP")); sprintf(ylabel,"Events / %.1f GeV",hDataMet->GetBinWidth(1)); CPlot plotMet("fitmet",weframe,"","",ylabel); plotMet.SetLegend(0.68,0.57,0.93,0.77); plotMet.GetLegend()->AddEntry(hDummyData,"data","PL"); plotMet.GetLegend()->AddEntry(hDummyW,"W#rightarrowe#nu","F"); plotMet.GetLegend()->AddEntry(hDummyEWK,"EWK+t#bar{t}","F"); plotMet.GetLegend()->AddEntry(hDummyQCD,"QCD","F"); plotMet.AddTextBox(lumitext,0.55,0.80,0.90,0.86,0); plotMet.AddTextBox("CMS Preliminary",0.63,0.92,0.95,0.99,0); plotMet.SetYRange(0.1,1.1*(hDataMet->GetMaximum())); // plotMet.Draw(c,kFALSE,format,1); plotMet.Draw(c,kTRUE,format,1); CPlot plotMetDiff("fitmet","","#slash{E}_{T} [GeV]","#chi"); plotMetDiff.AddHist1D(hMetDiff,"EX0",ratioColor); plotMetDiff.SetYRange(-8,8); plotMetDiff.AddLine(0, 0,METMAX, 0,kBlack,1); plotMetDiff.AddLine(0, 5,METMAX, 5,kBlack,3); plotMetDiff.AddLine(0,-5,METMAX,-5,kBlack,3); plotMetDiff.Draw(c,kTRUE,format,2); plotMet.SetName("fitmetlog"); plotMet.SetLogy(); plotMet.SetYRange(1e-3*(hDataMet->GetMaximum()),10*(hDataMet->GetMaximum())); plotMet.Draw(c,kTRUE,format,1); // // W+ MET plot // RooPlot *wepframe = pfmet.frame(Bins(NBINS)); dataMetp.plotOn(wepframe,MarkerStyle(kFullCircle),MarkerSize(0.9),DrawOption("ZP")); pdfMetp.plotOn(wepframe,FillColor(fillcolorW),DrawOption("F")); pdfMetp.plotOn(wepframe,LineColor(linecolorW)); pdfMetp.plotOn(wepframe,Components(RooArgSet(pdfEWKp,*(qcdp.model))),FillColor(fillcolorEWK),DrawOption("F")); pdfMetp.plotOn(wepframe,Components(RooArgSet(pdfEWKp,*(qcdp.model))),LineColor(linecolorEWK)); pdfMetp.plotOn(wepframe,Components(RooArgSet(*(qcdp.model))),FillColor(fillcolorQCD),DrawOption("F")); pdfMetp.plotOn(wepframe,Components(RooArgSet(*(qcdp.model))),LineColor(linecolorQCD)); pdfMetp.plotOn(wepframe,Components(RooArgSet(pdfWep)),LineColor(linecolorW),LineStyle(2)); dataMetp.plotOn(wepframe,MarkerStyle(kFullCircle),MarkerSize(0.9),DrawOption("ZP")); sprintf(ylabel,"Events / %.1f GeV",hDataMetp->GetBinWidth(1)); CPlot plotMetp("fitmetp",wepframe,"","",ylabel); plotMetp.SetLegend(0.68,0.57,0.93,0.77); plotMetp.GetLegend()->AddEntry(hDummyData,"data","PL"); plotMetp.GetLegend()->AddEntry(hDummyW,"W^{+}#rightarrowe^{+}#nu","F"); plotMetp.GetLegend()->AddEntry(hDummyEWK,"EWK+t#bar{t}","F"); plotMetp.GetLegend()->AddEntry(hDummyQCD,"QCD","F"); plotMetp.AddTextBox(lumitext,0.55,0.80,0.90,0.86,0); plotMetp.AddTextBox("CMS Preliminary",0.63,0.92,0.95,0.99,0); plotMetp.SetYRange(0.1,1.1*(hDataMetp->GetMaximum())); plotMetp.Draw(c,kFALSE,format,1); CPlot plotMetpDiff("fitmetp","","#slash{E}_{T} [GeV]","#chi"); plotMetpDiff.AddHist1D(hMetpDiff,"EX0",ratioColor); plotMetpDiff.SetYRange(-8,8); plotMetpDiff.AddLine(0, 0,METMAX, 0,kBlack,1); plotMetpDiff.AddLine(0, 5,METMAX, 5,kBlack,3); plotMetpDiff.AddLine(0,-5,METMAX,-5,kBlack,3); plotMetpDiff.Draw(c,kTRUE,format,2); plotMetp.SetName("fitmetplog"); plotMetp.SetLogy(); plotMetp.SetYRange(1e-3*(hDataMetp->GetMaximum()),10*(hDataMetp->GetMaximum())); plotMetp.Draw(c,kTRUE,format,1); // // W- MET plot // RooPlot *wemframe = pfmet.frame(Bins(NBINS)); dataMetm.plotOn(wemframe,MarkerStyle(kFullCircle),MarkerSize(0.9),DrawOption("ZP")); pdfMetm.plotOn(wemframe,FillColor(fillcolorW),DrawOption("F")); pdfMetm.plotOn(wemframe,LineColor(linecolorW)); pdfMetm.plotOn(wemframe,Components(RooArgSet(pdfEWKm,*(qcdm.model))),FillColor(fillcolorEWK),DrawOption("F")); pdfMetm.plotOn(wemframe,Components(RooArgSet(pdfEWKm,*(qcdm.model))),LineColor(linecolorEWK)); pdfMetm.plotOn(wemframe,Components(RooArgSet(*(qcdm.model))),FillColor(fillcolorQCD),DrawOption("F")); pdfMetm.plotOn(wemframe,Components(RooArgSet(*(qcdm.model))),LineColor(linecolorQCD)); pdfMetm.plotOn(wemframe,Components(RooArgSet(pdfWem)),LineColor(linecolorW),LineStyle(2)); dataMetm.plotOn(wemframe,MarkerStyle(kFullCircle),MarkerSize(0.9),DrawOption("ZP")); sprintf(ylabel,"Events / %.1f GeV",hDataMetm->GetBinWidth(1)); CPlot plotMetm("fitmetm",wemframe,"","",ylabel); plotMetm.SetLegend(0.68,0.57,0.93,0.77); plotMetm.GetLegend()->AddEntry(hDummyData,"data","PL"); plotMetm.GetLegend()->AddEntry(hDummyW,"W^{-}#rightarrowe^{-}#bar{#nu}","F"); plotMetm.GetLegend()->AddEntry(hDummyEWK,"EWK+t#bar{t}","F"); plotMetm.GetLegend()->AddEntry(hDummyQCD,"QCD","F"); plotMetm.AddTextBox(lumitext,0.55,0.80,0.90,0.86,0); plotMetm.AddTextBox("CMS Preliminary",0.63,0.92,0.95,0.99,0); plotMetm.SetYRange(0.1,1.1*(hDataMetm->GetMaximum())); plotMetm.Draw(c,kFALSE,format,1); CPlot plotMetmDiff("fitmetm","","#slash{E}_{T} [GeV]","#chi"); plotMetmDiff.AddHist1D(hMetmDiff,"EX0",ratioColor); plotMetmDiff.SetYRange(-8,8); plotMetmDiff.AddLine(0, 0,METMAX, 0,kBlack,1); plotMetmDiff.AddLine(0, 5,METMAX, 5,kBlack,3); plotMetmDiff.AddLine(0,-5,METMAX,-5,kBlack,3); plotMetmDiff.Draw(c,kTRUE,format,2); plotMetm.SetName("fitmetmlog"); plotMetm.SetLogy(); plotMetm.SetYRange(1e-3*(hDataMetm->GetMaximum()),10*(hDataMetm->GetMaximum())); plotMetm.Draw(c,kTRUE,format,1); //-------------------------------------------------------------------------------------------------------------- // Output //============================================================================================================== cout << "*" << endl; cout << "* SUMMARY" << endl; cout << "*--------------------------------------------------" << endl; // // Write fit results // ofstream txtfile; char txtfname[100]; ios_base::fmtflags flags; Double_t chi2prob, chi2ndf; Double_t ksprob, ksprobpe; chi2prob = hDataMet->Chi2Test(hPdfMet,"PUW"); chi2ndf = hDataMet->Chi2Test(hPdfMet,"CHI2/NDFUW"); ksprob = hDataMet->KolmogorovTest(hPdfMet); ksprobpe = hDataMet->KolmogorovTest(hPdfMet,"DX"); sprintf(txtfname,"%s/fitresWe.txt",CPlot::sOutDir.Data()); txtfile.open(txtfname); assert(txtfile.is_open()); flags = txtfile.flags(); txtfile << setprecision(10); txtfile << " *** Yields *** " << endl; txtfile << "Selected: " << hDataMet->Integral() << endl; txtfile << " Signal: " << nSig.getVal() << " +/- " << nSig.getPropagatedError(*fitRes) << endl; txtfile << " QCD: " << nQCD.getVal() << " +/- " << nQCD.getPropagatedError(*fitRes) << endl; txtfile << " Other: " << nEWK.getVal() << " +/- " << nEWK.getPropagatedError(*fitRes) << endl; txtfile << endl; txtfile.flags(flags); fitRes->printStream(txtfile,RooPrintable::kValue,RooPrintable::kVerbose); txtfile << endl; printCorrelations(txtfile, fitRes); txtfile << endl; printChi2AndKSResults(txtfile, chi2prob, chi2ndf, ksprob, ksprobpe); txtfile.close(); chi2prob = hDataMetp->Chi2Test(hPdfMetp,"PUW"); chi2ndf = hDataMetp->Chi2Test(hPdfMetp,"CHI2/NDFUW"); ksprob = hDataMetp->KolmogorovTest(hPdfMetp); ksprobpe = hDataMetp->KolmogorovTest(hPdfMetp,"DX"); sprintf(txtfname,"%s/fitresWep.txt",CPlot::sOutDir.Data()); txtfile.open(txtfname); assert(txtfile.is_open()); flags = txtfile.flags(); txtfile << setprecision(10); txtfile << " *** Yields *** " << endl; txtfile << "Selected: " << hDataMetp->Integral() << endl; txtfile << " Signal: " << nSigp.getVal() << " +/- " << nSigp.getPropagatedError(*fitResp) << endl; txtfile << " QCD: " << nQCDp.getVal() << " +/- " << nQCDp.getPropagatedError(*fitResp) << endl; txtfile << " Other: " << nEWKp.getVal() << " +/- " << nEWKp.getPropagatedError(*fitResp) << endl; txtfile << endl; txtfile.flags(flags); fitResp->printStream(txtfile,RooPrintable::kValue,RooPrintable::kVerbose); txtfile << endl; printCorrelations(txtfile, fitResp); txtfile << endl; printChi2AndKSResults(txtfile, chi2prob, chi2ndf, ksprob, ksprobpe); txtfile.close(); chi2prob = hDataMetm->Chi2Test(hPdfMetm,"PUW"); chi2ndf = hDataMetm->Chi2Test(hPdfMetm,"CHI2/NDFUW"); ksprob = hDataMetm->KolmogorovTest(hPdfMetm); ksprobpe = hDataMetm->KolmogorovTest(hPdfMetm,"DX"); sprintf(txtfname,"%s/fitresWem.txt",CPlot::sOutDir.Data()); txtfile.open(txtfname); assert(txtfile.is_open()); flags = txtfile.flags(); txtfile << setprecision(10); txtfile << " *** Yields *** " << endl; txtfile << "Selected: " << hDataMetm->Integral() << endl; txtfile << " Signal: " << nSigm.getVal() << " +/- " << nSigm.getPropagatedError(*fitResm) << endl; txtfile << " QCD: " << nQCDm.getVal() << " +/- " << nQCDm.getPropagatedError(*fitResm) << endl; txtfile << " Other: " << nEWKm.getVal() << " +/- " << nEWKm.getPropagatedError(*fitResm) << endl; txtfile << endl; txtfile.flags(flags); fitResm->printStream(txtfile,RooPrintable::kValue,RooPrintable::kVerbose); txtfile << endl; printCorrelations(txtfile, fitResm); txtfile << endl; printChi2AndKSResults(txtfile, chi2prob, chi2ndf, ksprob, ksprobpe); txtfile.close(); makeHTML(outputDir); cout << endl; cout << " <> Output saved in " << outputDir << "/" << endl; cout << endl; gBenchmark->Show("fitWe"); }
//================================================ //メインループ //================================================ void Luna::Main(long ArgNum, char *pArgStr[]) { //---------------------------------------- //全システムの開始 //---------------------------------------- if(Luna::Start() ) { //-------------------------------- //初期化処理 //-------------------------------- InitProcess(); //LunaInput::GetMouseData(&camera.Mouse); //LunaInput::GetMouseData(&camera.MouseOld); //-------------------------------- //ゲーム用ループ //-------------------------------- while(Luna::WaitForMsgLoop() ) { /*画面クリア*/ Luna3D::Clear(D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, COLOR_BLACK, 1.0f); //Luna3D::Clear(D3DCLEAR_TARGET, COLOR_WHITE); /*デバッグ画面クリア*/ // LunaDebug::Clear(); switch(g_GameMode) { case SCENE_INITIALIZE: { Initialize(); break; } case SCENE_LOGO: { //DrawLogo(); break; } case SCENE_TITLE: { DrawTitle(); break; } case SCENE_CHARSEL: { DrawCharaSelect(); break; } case SCENE_MAIN: { DrawMain(); break; } case SCENE_OPTION: { DrawOption(); break; } case SCENE_TUTOLIAL: { DrawTutorial(); break; } case SCENE_PAUSE: { DrawPause(); break; } case SCENE_PAUSEEXIT: { DrawPauseExit(); break; } case SCENE_ERROR: { DrawError(); break; } case SCENE_EXIT: { DrawExit(); break; } case SCENE_FADEIN: { Fadein(); break; } case SCENE_FADEOUT: { Fadeout(); break; } case SCENE_CONV: { Conversation(); break; } case SCENE_GAMECLEAR: { DrawGameClear(); break; } case SCENE_GAMEOVER: { DrawGameOver(); break; } case SCENE_CONTINUE: { DrawContinue(); break; } case SCENE_FINALIZE: { Finalize(); break; } } /*画面更新*/ Luna3D::Refresh(); /*デバッグ処理*/ // Debug(); } /*終了処理*/ Finalize(); } }