tuned fit to V0s
authorfnoferin <fnoferin@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 17 Jul 2013 14:06:00 +0000 (14:06 +0000)
committerfnoferin <fnoferin@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 17 Jul 2013 14:06:00 +0000 (14:06 +0000)
PWGPP/pid/doeffAllSpecies.C
PWGPP/pid/doeffKa.C
PWGPP/pid/doeffPi.C
PWGPP/pid/doeffPr.C

index f7f347b..deb79ef 100644 (file)
@@ -1,7 +1,7 @@
-doeffAllSpecies(){
-  performAllPi();
-  performAllKa();
-  performAllPr();
+doeffAllSpecies(Int_t isp=1){
+  if(isp==1)  performAllPi();
+  else if(isp==2) performAllKa();
+  else if(isp == 3) performAllPr();
 }
 
 performAllPi(){
@@ -18,16 +18,16 @@ performAllPi(){
   gSystem->Load("libCORRFW.so");
   gSystem->Load("libNetx.so");
   gSystem->Load("libPWGPPpid.so");
-
+  
   gSystem->AddIncludePath("-I$ALICE_ROOT/PWGPP/pid");
-
+  
   gROOT->LoadMacro("$ALICE_ROOT/PWGPP/pid/doeffPi.C++");
-
+  
   // tune these parameters
   cmin = 1; // centrality min 1
   cmax = 10;// centrality max 10
   Float_t etamin = -0.8;
-  Float_t etamax = -0.8;
+  Float_t etamax = 0.8;
 
   // reset all flags
   rebinsize = 1; // don't change this, not choice here!!!
@@ -42,9 +42,9 @@ performAllPi(){
   isMC = kFALSE;
   selectTrue = kTRUE;
   keepTrue = kFALSE;
-
+  
   if(! LoadLib()) return;
-
+  
   // matching and PID eff.
   doeffPi(1,0.1,etamin,etamax);
   doeffPi(0,0.1,etamin,etamax);
@@ -68,7 +68,7 @@ performAllPi(){
   doeffPi(1,0.1,etamin,etamax);
   doeffPi(0,0.1,etamin,etamax);
   kSigma2vs3=kFALSE;
-
+  
   kOverAll=kTRUE;
   // TPC|TOF overall eff
   doeffPi(1,0.2,etamin,etamax);
@@ -79,7 +79,7 @@ performAllPi(){
   doeffPi(0,0.4,etamin,etamax);
   doeffPi(0,0.6,etamin,etamax);
   doeffPi(0,0.8,etamin,etamax);
-
+  
   kOverAllTOFmatch=kTRUE;
   // TPC&TOF overall eff
   doeffPi(1,0.2,etamin,etamax);
@@ -91,7 +91,7 @@ performAllPi(){
   doeffPi(0,0.6,etamin,etamax);
   doeffPi(0,0.8,etamin,etamax);
   kOverAllTOFmatch=kFALSE;
-
+  
   kOverAll2Sigma=kTRUE;
   // TPC&TOF 2 TOF sigma cut
   doeffPi(1,0.1,etamin,etamax);
@@ -115,17 +115,17 @@ performAllPr(){
   gSystem->Load("libCORRFW.so");
   gSystem->Load("libNetx.so");
   gSystem->Load("libPWGPPpid.so");
-
+  
   gSystem->AddIncludePath("-I$ALICE_ROOT/PWGPP/pid");
-
+  
   gROOT->LoadMacro("$ALICE_ROOT/PWGPP/pid/doeffPr.C++");
-
+  
   // tune these parameters
   cmin = 1; // centrality min 1
   cmax = 10;// centrality max 10
   Float_t etamin = -0.8;
-  Float_t etamax = -0.8;
-
+  Float_t etamax = 0.8;
+  
   // reset all flags
   rebinsize = 1; // don't change this, not choice here!!!
   kGoodMatch=kFALSE;
@@ -139,9 +139,9 @@ performAllPr(){
   isMC = kFALSE;
   selectTrue = kTRUE;
   keepTrue = kFALSE;
-
+  
   if(! LoadLib()) return;
-
+  
   // matching and PID eff.
   doeffPr(1,0.1,etamin,etamax);
   doeffPr(0,0.1,etamin,etamax);
@@ -221,7 +221,7 @@ performAllKa(){
   cmin = 1; // centrality min 1
   cmax = 10;// centrality max 10
   Float_t etamin = -0.8;
-  Float_t etamax = -0.8;
+  Float_t etamax = 0.8;
 
   // reset all flags
   rebinsize = 1; // don't change this, not choice here!!!
@@ -294,3 +294,47 @@ performAllKa(){
   kOverAll=kFALSE;
   gSystem->Unload("$ALICE_ROOT/PWGPP/pid/doeffKa_C.so");
 }
+
+TGraphErrors *MakeRatio(const char *nf1,const char *nf2,const char *nfo=""/*output file*/,const char *title=""/*title*/){
+  TFile *f1 = new TFile(nf1);
+  TFile *f2 = new TFile(nf2);
+  
+  TGraphErrors *g1 = (TGraphErrors *) f1->Get("Graph");
+  TGraphErrors *g2 = (TGraphErrors *) f2->Get("Graph");
+  if(!(g1 && g2)) return NULL;
+  if(!(g1 && g2)) return NULL;
+  
+  Int_t n1= g1->GetN();
+  Int_t n2= g2->GetN();
+  
+  if(n1 != n2) return NULL;
+  
+  if(n1 > 100) n1 = 100;
+  
+  Float_t x[100],y[100],ex[100],ey[100];
+  
+  for(Int_t i=0;i < n1;i++){
+    x[i] = g1->GetX()[i];
+    ex[i] = g1->GetEX()[i];
+    if(g1->GetY()[i] > 0 && g2->GetY()[i] > 0){
+      y[i] = g1->GetY()[i] / g2->GetY()[i];
+      ey[i] = (g1->GetEY()[i] / g1->GetY()[i])**2 + (g2->GetEY()[i] / g2->GetY()[i])**2;
+      ey[i] = sqrt(ey[i])*y[i];
+    }
+    else{
+      y[i] = 0.5;
+      ey[i] = 0.5;
+    }
+  }
+  TGraphErrors *gr = new TGraphErrors(n1,x,y,ex,ey);
+  gr->SetTitle(title);
+
+  if(nfo[0] != '\0'){ // write output
+    printf("written in %s\n",nfo);
+    TFile *fo = new TFile(nfo,"RECREATE");
+    gr->Write();
+    fo->Close();
+  }
+
+  return gr;
+}
index 4bc7925..79bda4b 100644 (file)
@@ -37,7 +37,7 @@ Int_t cmax = 8;// max 10
 
 Float_t weightS = -1.;
 
-Int_t rebinsize = 2;
+Int_t rebinsize = 1;
 
 Int_t parplotted = 2;
 
@@ -66,6 +66,8 @@ Bool_t kLoaded=kFALSE;
 int LoadLib(){
   weightS = -1.;
 
+  require5sigma = kFALSE;
+
   if(! kLoaded){
     gSystem->Load("libVMC.so");
     gSystem->Load("libPhysics.so");
index 31547d9..3455d50 100644 (file)
@@ -12,7 +12,7 @@ Int_t LoadLib();
 void doeffPi(Int_t pos=1,Float_t prob=0.1,Float_t etaminkp=-0.8,Float_t etamaxkp=0.8);
 TH2F *GetHistoPip(Float_t pt=1,Float_t ptM=1.1,Float_t pMinkp=0,Float_t pMinkn=0.,Float_t etaminkp=-0.8,Float_t etamaxkp=0.8);
 TH2F *GetHistoPin(Float_t pt=1,Float_t ptM=1.1,Float_t pMinkn=0,Float_t pMinkp=0.,Float_t etaminkp=-0.8,Float_t etamaxkp=0.8);
-void fit(TH1D *h,Float_t *a=NULL,char *opt="",char *opt2="");
+void fit(TH1D *h,Float_t *a=NULL,char *opt="",char *opt2="",Float_t pt=1.5);
 void AddHisto(TH2F *h1,TH2F *h2,Float_t w);
 
 TObject* fContPid1;
@@ -67,6 +67,8 @@ Bool_t kLoaded=kFALSE;
 Int_t LoadLib(){
   weightS = -1.;
 
+  require5sigma = kFALSE;
+
   if(! kLoaded){
     gSystem->Load("libVMC.so");
     gSystem->Load("libPhysics.so");
@@ -113,9 +115,9 @@ Int_t LoadLib(){
     printf("MC truth found!!!!!!\nIt is MC!!!!!!");
   }
 
-  fsign = new TF1("fsign","[0]*TMath::Voigt(x-[1],[3],[2])",fitmin,fitmax);
-  fback = new TF1("fback","pol1",fitmin,fitmax);
-  fall = new TF1("fall","[0]*TMath::Voigt(x-[1],[3],[2]) + pol1(4)",fitmin,fitmax);
+  fsign = new TF1("fsign","gaus(0) +0.5*[0]*TMath::Exp(-[3]*TMath::Abs(x-[1]))",fitmin,fitmax);
+  fback = new TF1("fback","pol2",fitmin,fitmax);
+  fall = new TF1("fall","gaus(0) +0.5*[0]*TMath::Exp(-[3]*TMath::Abs(x-[1])) + pol2(4)",fitmin,fitmax);
 
   fsign->SetLineColor(2);
   fback->SetLineColor(4);
@@ -206,10 +208,10 @@ void doeffPi(Int_t pos,Float_t prob,Float_t etaminkp,Float_t etamaxkp){
     Int_t ntrial = 0;
     Float_t chi2 = 10000;
     while(ntrial < 3 && (chi2 > 20 + 1000*selectTrue)){
-      fit(h,b[i],"WW","");
+      fit(h,b[i],"WW","",xx[i]);
       c1->Update();
 //       getchar();
-      fit(h,b[i],"","");
+      fit(h,b[i],"","",xx[i]);
       ntrial++;
       chi2 = b[i][2];
       printf("chi2 = %f\n",chi2);
@@ -251,8 +253,8 @@ void doeffPi(Int_t pos,Float_t prob,Float_t etaminkp,Float_t etamaxkp){
     Int_t ntrial = 0;
     Float_t chi2 = 10000;
     while(ntrial < 3 && (chi2 > 20 + 1000*selectTrue)){
-      fit(h,b2[i],"WW","");
-      fit(h,b2[i],"","");
+      fit(h,b2[i],"WW","",xx[i]);
+      fit(h,b2[i],"","",xx[i]);
       ntrial++;
       chi2 = b2[i][2];
       printf("chi2 = %f\n",chi2);
@@ -465,7 +467,7 @@ TH2F *GetHistoPin(Float_t pt,Float_t ptM,Float_t pMinkn,Float_t pMinkp,Float_t e
   return h;
 }
 
-void fit(TH1D *h,Float_t *a,char *opt,char *opt2){
+void fit(TH1D *h,Float_t *a,char *opt,char *opt2,Float_t pt){
   if(h->Integral(1,h->GetNbinsX()) < 1){
     if(a){
       a[0]=0.001;
@@ -477,13 +479,13 @@ void fit(TH1D *h,Float_t *a,char *opt,char *opt2){
 
  fall->SetParameter(0,100);
  fall->SetParameter(1,0.4971);
- fall->SetParameter(2,0.00006);
- fall->SetParameter(3,0.0035);
+ fall->SetParameter(2,2.89748e-03);
+ fall->FixParameter(3,230+30/pt);
 
- fall->SetParLimits(0,0.00001,10000);
+ fall->SetParLimits(0,0.00001,1000000);
  fall->SetParLimits(1,0.4965,0.4985);
- fall->SetParLimits(2,0.00005,0.001);
- fall->SetParLimits(3,0.002,0.01);
+ fall->SetParLimits(2,0.0025,0.005);
+ //fall->SetParLimits(3,200,350);
 
  fall->ReleaseParameter(4);
  fall->ReleaseParameter(5);
@@ -491,6 +493,7 @@ void fit(TH1D *h,Float_t *a,char *opt,char *opt2){
  if(selectTrue){
    fall->FixParameter(4,0);
    fall->FixParameter(5,0);
+   fall->FixParameter(6,0);
  }
 
  char name[100];
@@ -516,10 +519,11 @@ void fit(TH1D *h,Float_t *a,char *opt,char *opt2){
  ftmp2->Draw("SAME");
  ftmp3->SetParameter(0,ftmp->GetParameter(4));
  ftmp3->SetParameter(1,ftmp->GetParameter(5));
+ ftmp3->SetParameter(2,ftmp->GetParameter(6));
  ftmp3->Draw("SAME");
 
  Float_t mean = ftmp->GetParameter(1);
- Float_t sigma = 0.0044;
+ Float_t sigma = TMath::Abs(ftmp->GetParameter(2));
 
  Float_t signI = ftmp2->Integral(mean-10*sigma,mean+10*sigma)/h->GetBinWidth(1);
  Float_t backI = ftmp3->Integral(mean-3*sigma,mean+3*sigma)/h->GetBinWidth(1);
index d2c771f..fa054aa 100644 (file)
@@ -12,7 +12,7 @@ Int_t LoadLib();
 void doeffPr(Int_t pos=1,Float_t prob=0.1,Float_t etaminkp=-0.8,Float_t etamaxkp=0.8);
 TH2F *GetHistoPrp(Float_t pt=1,Float_t ptM=1.1,Float_t pMinkp=0,Float_t pMinkn=0.,Float_t etaminkp=-0.8,Float_t etamaxkp=0.8);
 TH2F *GetHistoPrn(Float_t pt=1,Float_t ptM=1.1,Float_t pMinkn=0,Float_t pMinkp=0.,Float_t etaminkp=-0.8,Float_t etamaxkp=0.8);
-void fit(TH1D *h,Float_t *a=NULL,char *opt="",char *opt2="");
+void fit(TH1D *h,Float_t *a=NULL,char *opt="",char *opt2="",Float_t pt=1.5);
 void AddHisto(TH2F *h1,TH2F *h2,Float_t w);
 
 TObject* fContPid1;
@@ -66,6 +66,8 @@ Bool_t kLoaded=kFALSE;
 Int_t LoadLib(){
   weightS = -1.;
 
+  require5sigma = kFALSE;
+
   if(! kLoaded){
     gSystem->Load("libVMC.so");
     gSystem->Load("libPhysics.so");
@@ -113,9 +115,9 @@ Int_t LoadLib(){
     printf("MC truth found!!!!!!\nIt is MC!!!!!!");
   }
 
-  fsign = new TF1("fsign","[0]*TMath::Voigt(x-[1],[3],[2])",fitmin,fitmax);
+  fsign = new TF1("fsign","gaus(0) +0.5*[0]*TMath::Exp(-[3]*TMath::Abs(x-[1]))",fitmin,fitmax);
   fback = new TF1("fback","pol2",fitmin,fitmax);
-  fall = new TF1("fall","[0]*TMath::Voigt(x-[1],[3],[2]) + pol2(4)",fitmin,fitmax);
+  fall = new TF1("fall","gaus(0) +0.5*[0]*TMath::Exp(-[3]*TMath::Abs(x-[1])) + pol2(4)",fitmin,fitmax);
 
   fsign->SetLineColor(2);
   fback->SetLineColor(4);
@@ -206,10 +208,10 @@ void doeffPr(Int_t pos,Float_t prob,Float_t etaminkp,Float_t etamaxkp){
     Int_t ntrial = 0;
     Float_t chi2 = 10000;
     while(ntrial < 3 && (chi2 > 20 + 1000*selectTrue)){
-      fit(h,b[i],"WW","");
+      fit(h,b[i],"WW","",xx[i]);
       c1->Update();
 //       getchar();
-      fit(h,b[i],"","");
+      fit(h,b[i],"","",xx[i]);
       ntrial++;
       chi2 = b[i][2];
       printf("chi2 = %f\n",chi2);
@@ -251,8 +253,8 @@ void doeffPr(Int_t pos,Float_t prob,Float_t etaminkp,Float_t etamaxkp){
     Int_t ntrial = 0;
     Float_t chi2 = 10000;
     while(ntrial < 3 && (chi2 > 20 + 1000*selectTrue)){
-      fit(h,b2[i],"WW","");
-      fit(h,b2[i],"","");
+      fit(h,b2[i],"WW","",xx[i]);
+      fit(h,b2[i],"","",xx[i]);
       ntrial++;
       chi2 = b2[i][2];
       printf("chi2 = %f\n",chi2);
@@ -465,7 +467,7 @@ TH2F *GetHistoPrn(Float_t pt,Float_t ptM,Float_t pMinkn,Float_t pMinkp,Float_t e
   return h;
 }
 
-void fit(TH1D *h,Float_t *a,char *opt,char *opt2){
+void fit(TH1D *h,Float_t *a,char *opt,char *opt2,Float_t pt){
   if(h->Integral(1,h->GetNbinsX()) < 1){
     if(a){
       a[0]=0.01;
@@ -477,13 +479,13 @@ void fit(TH1D *h,Float_t *a,char *opt,char *opt2){
 
  fall->SetParameter(0,100);
  fall->SetParameter(1,1.115);
- fall->SetParameter(2,0.0003);
- fall->SetParameter(3,0.001);
+ fall->SetParameter(2,2.89748e-03);
+ fall->FixParameter(3,350+600/pt);
 
  fall->SetParLimits(0,0.00001,10000);
  fall->SetParLimits(1,1.105,1.125);//1.01898 + 2.4e-04*pt-1e-03,1.01898 + 2.4e-04*pt+1e-03);
- fall->SetParLimits(2,0.00001,0.001);
- fall->SetParLimits(3,0.0005,0.01);
+ fall->SetParLimits(2,0.0005,0.0015);
+ //fall->SetParLimits(3,200,350);
 
  // fall->FixParameter(2,5E-4);
 
@@ -528,7 +530,7 @@ void fit(TH1D *h,Float_t *a,char *opt,char *opt2){
  ftmp3->Draw("SAME");
 
  Float_t mean = ftmp->GetParameter(1);
- Float_t sigma = TMath::Abs(ftmp->GetParameter(3)) + TMath::Abs(ftmp->GetParameter(2));
+ Float_t sigma = TMath::Abs(ftmp->GetParameter(2));
 
  Float_t signI = ftmp2->Integral(mean-10*sigma,mean+10*sigma)/h->GetBinWidth(1);
  Float_t backI = ftmp3->Integral(mean-3*sigma,mean+3*sigma)/h->GetBinWidth(1);