00001
00002
00003
00004
00005 const int mx=1;
00006 const int mt=1;
00007 TFile *fd[mx];
00008 TCanvas *c1=0;
00009
00010 FitPtMass() {
00011
00012 float ptmin=7.0,ptmax=8.0;
00013 float fit_x1=0.07,fit_x2=0.4;
00014 const int nend=int(fit_x1/0.01);
00015 const int nstart=int(fit_x2/0.01);
00016 cout<<"nend="<<nend<<" nstart="<<nstart<<endl;
00017 int minbin,maxbin;
00018 TH1F* h1= new TH1F("hMassAny","diphoton invariant mass",120,0.,1.2 );
00019 TH1F* h2= new TH1F("hMassAny","diphoton invariant mass",120,0.,1.2 );
00020 TH1F* hResidual= new TH1F("hMassAny","diphoton invariant mass",120,0.,1.2 );
00021 FILE* fout=fopen("mass.txt","w");assert(fout);
00022 fprintf(fout,"Bin# Entry\n");
00023 char *PlotName[mx]={"hPTAny"};
00024 char *fName[mt]={"allruns.hist"};
00025 TString inPath="";
00026 c1=new TCanvas("tmp","tmp",700,600);
00027 gStyle->SetPalette(1,0);
00028 int i;
00029 for(i=0;i<mt;i++) {
00030 TString hFile=inPath+fName[i];
00031 hFile+=".root";
00032 fd0=new TFile(hFile); assert(fd0->IsOpen());
00033 fd[i]=fd0;
00034 }
00035 c1->Divide(1,1);
00036 c1->cd(1);
00037 int i;
00038 for(i=0;i<mx;i++)
00039 {
00040
00041
00042
00043 TString hname=PlotName[i];
00044 printf("=%s=\n",hname.Data());
00045 h0=(TH2F*)fd[0]->Get(hname); assert(h0);
00046 minbin=h0->GetYaxis()->FindBin(ptmin);
00047 maxbin=h0->GetYaxis()->FindBin(ptmax)-1;
00048 h1->Add(h0->ProjectionX("htemp",minbin,maxbin,""));
00049 int ent=h1->Integral();
00050 cout<<"entry="<<ent<<endl;
00051 h1->SetEntries(ent);
00052 int ccount=0;
00053 float sum=0;
00054 float tpt=ptmin;
00055 for(int i=minbin;i<=maxbin;i++){
00056 ccount+=h0->ProjectionX("",i,i,"")->Integral();
00057 sum+=(h0->ProjectionX("",i,i,"")->Integral())*tpt;
00058 tpt+=(ptmax-ptmin)/(maxbin+1-minbin);
00059 }
00060 float ptmean=sum/ccount;
00061 cout<<"raw="<<int(h1->Integral(11,19))<<" ptmean="<<ptmean<<endl;
00062 h1->Draw();
00063 h1->SetMinimum(-ent/100);
00064 TF1* f1=new TF1("ffit","exp([0]+[1]*x)+[2]*exp(-0.5*((x-[3])/([4]*(1.0+6.11*(x-[3]))))**2)",fit_x1,fit_x2);
00065
00066 f1->SetParameters(9.0,-8.0,10000,0.135,0.02);
00067
00068
00069
00070
00071 h1->Fit(f1,"R+","",fit_x1,fit_x2);
00072 int nx=h1->GetNbinsX();
00073
00074 float sumx=0,sum2;
00075 for(int ix=1;ix<=nx;ix++)
00076 {
00077 fprintf(fout,"%d %d\n",ix,h1->GetBinContent(ix));
00078 sumx+=h1->GetBinContent(ix);
00079 }
00080
00081
00082
00083 TF1* f2=new TF1("fit2","exp([0]+[1]*x+[2]/x)",0.,1.2);
00084
00085 h2->Add(h1);
00086 hResidual->Add(h1);
00087 hResidual->Add(f1,-1);
00088 for (int ix= 1; ix <= nend; ix++) {
00089 hResidual->SetBinContent(ix, 0);
00090 }
00091 for (int ix= nstart; ix <= nx; ix++) {
00092 hResidual->SetBinContent(ix, 0);
00093 }
00094 hResidual->SetLineColor(11);
00095 hResidual->Draw("same");
00096 f2->SetParameters(f1->GetParameter(0),f1->GetParameter(1));
00097 h2->Add(f2,-1);
00098 for (int ix= 1; ix <= 8; ix++) {
00099 h2->SetBinContent(ix, 0);
00100 }
00101
00102
00103
00104 h2->SetLineColor(kBlue);
00105 TF1* f3=new TF1("f3","exp([0]+[1]*x+[2]/x)",fit_x1,fit_x2);
00106 f3->SetParameters(f1->GetParameter(0),f1->GetParameter(1));
00107 cout<<"p0="<<f1->GetParameter(0)<<endl;
00108
00109 int Realpi=h2->Integral(11,19);
00110 int backpi=h1->Integral(11,19)-h2->Integral(11,19);
00111 int totpi=h1->Integral(11,19);
00112 cout<<"total pi="<<totpi<<" Real Pi0 integral="<<Realpi<<" backpi="<<backpi<<endl;
00113 h2->Draw("same");
00114 f3->SetLineColor(6);
00115 f3->Draw("same");
00116
00117 l1=new TLine(0.135,0.,0.135,7000);
00118 l1->SetLineColor(kRed);
00119 l1->Draw();
00120 l2=new TLine(0.18,0.,0.18,7000);
00121 l2->SetLineColor(kGreen);
00122 l2->Draw();
00123 l3=new TLine(0.1,0.,0.1,7000);
00124 l3->SetLineColor(kGreen);
00125 l3->Draw();
00126
00127 c1->Print("hMassAny.gif");
00128
00129 }
00130 return;
00131
00132 }
00133