00001 #include "common/Name.h"
00002 #include "commonmacro/histutil.h"
00003 #include "commonmacro/common.h"
00004
00005
00006
00007
00008 void yieldVcent(const char* inName=
00009 "links/P01hi.minbias.2000.hist/hianalysis_1000.hist.root",
00010 const char* psDir="ps",
00011 int cut = 1,
00012 const char* outDir="./",
00013 const char* more = "west",
00014 float extraValue = 0)
00015
00016 {
00017
00018 cout << "--------------------------" << endl;
00019 cout << "in name=" << inName << endl
00020 << "ps dir=" << psDir << endl
00021 << "cut=" << cut << endl;
00022 cout << "--------------------------" << endl;
00023
00024 inRoot = new TFile(inName);
00025
00026 if(!inRoot){
00027 cout << "cannot find the infile" << endl;
00028 return;
00029 }
00030 TCanvas c1("c1","c1",400,500);
00031 TString sName,sTitle; TH1* h1a,*h1b; TH3* h3a, *h3b; TH2* h2a,*h2b;
00032 int nSlice=9;
00033
00034
00035 int zdcMin[]={0,5,10,20,30,40,50,60,70,80};
00036 int zdcMax[]={5,10,20,30,40,50,60,70,80,100};
00037
00038 gStyle->SetOptLogy(1); gStyle->SetOptStat(0);
00039 sprintf(name,"raw pt yield, zdc slices (cut %d)",cut);
00040 Divide(&c1,3,3,name,inName);
00041 h2a=(TH2*)inRoot.Get("Plus.h2ZDCCentralityPtPr");
00042 h2b=(TH2*)inRoot.Get("Minus.h2ZDCCentralityPtPr");
00043 for(int i=1; i<=nSlice; i++){
00044 c1.cd(i);
00045 sprintf(name,"zdc%d%s",i,sPM[0]);
00046 h1a=h2a->ProjectionY(name,i,i,"e");
00047 sprintf(name,"zdc%d%s",i,sPM[1]);
00048 h1b=h2b->ProjectionY(name,i,i,"e");
00049 h1a->SetMarkerSize(0.5); h1b->SetMarkerSize(0.5);
00050 h1a->SetMarkerStyle(4); h1b->SetMarkerStyle(8);
00051 sprintf(title,"zdc cent %d (%d-%d %)",
00052 h2a->GetXaxis()->GetBinCenter(i),zdcMin[i-1],zdcMax[i-1]);
00053 h1a->SetTitle(title); SetRange(h1a->GetXaxis(),1.5,6);
00054
00055 h1a->Draw(); h1b->Draw("same");
00056 printHighPtYield(h1a,h1b);
00057 }
00058 Print(&c1,psDir,"yieldPtZdcSlices");
00059
00060 gStyle->SetOptLogy(1); gStyle->SetOptStat(0);
00061 sprintf(name,"raw pt yield, flow slices (cut %d)",cut);
00062 Divide(&c1,3,3,name,inName);
00063 h2a=(TH2*)inRoot.Get("Plus.h2CentralityPtPr");
00064 h2b=(TH2*)inRoot.Get("Minus.h2CentralityPtPr");
00065 for(int i=1; i<=nSlice; i++){
00066 c1.cd(i);
00067 sprintf(name,"flow%d%s",i,sPM[0]);
00068 h1a=h2a->ProjectionY(name,i,i,"e");
00069 sprintf(name,"flow%d%s",i,sPM[1]);
00070 h1b=h2b->ProjectionY(name,i,i,"e");
00071 h1a->SetMarkerStyle(4); h1b->SetMarkerStyle(8);
00072 h1a->SetMarkerSize(0.5); h1b->SetMarkerSize(0.5);
00073 sprintf(title,"flow cent %d",h2a->GetXaxis()->GetBinCenter(i));
00074 h1a->SetTitle(title); SetRange(h1a->GetXaxis(),1.5,6);
00075
00076 h1a->Draw(); h1b->Draw("same");
00077 printHighPtYield(h1a,h1b);
00078 }
00079 Print(&c1,psDir,"yieldPtFlowSlices");
00080 }
00081
00082 void printHighPtYield(TH1* ha,TH1* hb)
00083 {
00084 char buf[20]; TH1* h[2]; h[0]=ha; h[1]=hb;
00085 int minBin[2],maxBin[2],count(0);
00086 float min,max;
00087 float ptBins[]={4,4.5,5,5.5};
00088 int nBin=4;
00089 TText* text = new TText;
00090
00091 for(int iBin=0;iBin<nBin;iBin++){
00092 count=0;
00093 for(int i=0; i<2; i++){
00094 if(!h[i]) break;
00095 minBin[i] = h[i]->GetXaxis()->FindBin(ptBins[iBin]);
00096 maxBin[i] = h[i]->GetXaxis()->FindBin(ptBins[iBin]);
00097 float integral=h[i]->Integral(minBin[i],maxBin[i]);
00098 count += integral;
00099 if(i==0){
00100 min=h[i]->GetXaxis()->GetBinLowEdge(minBin[i]);
00101 max=h[i]->GetXaxis()->GetBinUpEdge(maxBin[i]);
00102 }
00103 }
00104 sprintf(buf,"%.1f<pt<%.1f=%d",min,max,count);
00105 text->DrawTextNDC(0.55,0.8-iBin*0.1,buf);
00106 }
00107
00108 }