]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGPP/pid/doeffPr.C
Fix initialisation of SimpleOffline patch array
[u/mrichter/AliRoot.git] / PWGPP / pid / doeffPr.C
index 1ad2d72490751c9f5e4972df4a5bf375c478474b..a4c61a2ba71f578beb3fdbdcfcf25e64947dbf80 100644 (file)
@@ -30,7 +30,7 @@ TF1 *fback;
 
 Int_t ifunc=0;
 
-Float_t fitmin = 1.08;
+Float_t fitmin = 1.1;
 Float_t fitmax = 1.15;
 
 Int_t cmin = 1; // min 1
@@ -59,6 +59,8 @@ Bool_t kTOFmatch = kFALSE; // for combined PID requires TOF matching
 Bool_t kOverAll = kFALSE;
 Bool_t kOverAllTOFmatch = kFALSE;
 Bool_t kOverAll2Sigma = kFALSE;
+Bool_t kPid2Sigma = kFALSE;
+Bool_t kPid3Sigma = kFALSE;
 
 TH2F *hmatched;
 TH2F *htracked;
@@ -99,10 +101,10 @@ Int_t LoadLib(){
   kLoaded = kTRUE;
 
   // check if MC
-  Float_t x[] = {xmin[0]+0.001,xmin[1]+0.001,xmin[2]+0.001,xmin[3]+0.001,xmin[4]+0.001,xmin[5]+0.001,xmin[6]+0.001,xmin[7]+0.001,1/*trueMC*/,xmin[9],xmin[10]};
-  Float_t x2[] = {xmax[0],xmax[1],xmax[2],xmax[3],xmax[4],xmax[5],xmax[6],xmax[7],xmax[8],xmax[9],xmax[10]};
+  Float_t x[] = {xmin[0]+0.001,xmin[1]+0.001,xmin[2]+0.001,xmin[3]+0.001,xmin[4]+0.001,xmin[5]+0.001,xmin[6]+0.001,xmin[7]+0.001,1/*trueMC*/,xmin[9],xmin[10],xmin[11],xmin[12],xmin[13]};
+  Float_t x2[] = {xmax[0],xmax[1],xmax[2],xmax[3],xmax[4],xmax[5],xmax[6],xmax[7],xmax[8],xmax[9],xmax[10],xmax[11],xmax[12],xmax[13]};
 
-  AliPIDperfContainer *tmp = (AliPIDperfContainer *) fContPid1;
+  AliPIDperfContainer *tmp = (AliPIDperfContainer *) fContPid2;
   TH1D *h = tmp->GetQA(0, x, x2)->ProjectionX("checkMC");
 
   if(h->GetEntries()) isMC = kTRUE;
@@ -116,9 +118,9 @@ Int_t LoadLib(){
     printf("MC truth found!!!!!!\nIt is MC!!!!!!");
   }
 
-  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 = new TF1("fsign","gaus(0) +0*0.5*[0]*TMath::Exp(-[3]*TMath::Abs(x-[1]))",fitmin,fitmax);
+  fback = new TF1("fback","pol2*(x-0.938-0.139)*(x > 0.938+0.139)",fitmin,fitmax);
+  fall = new TF1("fall","gaus(0) +0*0.5*[0]*TMath::Exp(-[3]*TMath::Abs(x-[1])) + pol2(4)*(x-0.938-0.139)*(x > 0.938+0.139)",fitmin,fitmax);
 
   fsign->SetLineColor(2);
   fback->SetLineColor(4);
@@ -162,10 +164,10 @@ void doeffPr(Int_t pos,Float_t prob,Float_t etaminkp,Float_t etamaxkp){
     maxptbin = xmax[3];
   }
 
-  if(prob > 0.1999){
+  if(prob > 0.1999|| kPid3Sigma ||kPid2Sigma){
     kGoodMatch = kFALSE;
     kSigma2vs3 = kFALSE;
-    if(! kOverAll) require5sigma = kTRUE;
+//    if(! kOverAll) require5sigma = kTRUE;
     if(!isMC) weightS = -0.95;
   }
 
@@ -281,9 +283,11 @@ void doeffPr(Int_t pos,Float_t prob,Float_t etaminkp,Float_t etamaxkp){
     expt[i] = (-ptmin+ptmax)/2;
     eff[i] = b2[i][0]/(b[i][0]-b2[i][0]*weightS);
 
-    b[i][0] = b[i][0]-b2[i][0]*weightS;
+    //    b[i][0] = b[i][0]-b2[i][0]*weightS;
+
+    //    efferr[i] = TMath::Sqrt(b[i][1]*b[i][1]/b[i][0]/b[i][0] + b2[i][1]*b2[i][1]/b2[i][0]/b2[i][0])*(b2[i][0]+b2[i][1])*(1+weightS*(b2[i][0]-b2[i][1])/b[i][0])/b[i][0];//*(1-eff[i]);//der2*der2*(b[i][1]*b[i][1] - b2[i][1]*b2[i][1]));
 
-    efferr[i] = TMath::Sqrt(b[i][1]*b[i][1]/b[i][0]/b[i][0] + b2[i][1]*b2[i][1]/b2[i][0]/b2[i][0])*(b2[i][0]+b2[i][1])*(1+weightS*(b2[i][0]-b2[i][1])/b[i][0])/b[i][0];//*(1-eff[i]);//der2*der2*(b[i][1]*b[i][1] - b2[i][1]*b2[i][1]));
+    efferr[i] = 1./(b[i][0]-b2[i][0]*weightS)/(b[i][0]-b2[i][0]*weightS)*TMath::Sqrt(b[i][0]*b[i][0]*b2[i][1]*b2[i][1] + b2[i][0]*b2[i][0]*b[i][1]*b[i][1]);
 
     if(TMath::Abs(efferr[i]) > 1)efferr[i]=1;
   }
@@ -323,6 +327,11 @@ void doeffPr(Int_t pos,Float_t prob,Float_t etaminkp,Float_t etamaxkp){
   if(kOverAll2Sigma)
     sprintf(flag2,"OverAll2sigma");
 
+  if(kPid3Sigma)
+    sprintf(flag2,"pid3sigma");
+  if(kPid2Sigma)
+    sprintf(flag2,"pid2sigma");
+
   if(pos){
     if(prob >=0.2) sprintf(name,"protonPos%sP%iEff%i_%i%s%s.root",etarange,Int_t(prob*100),(cmin-1)*10,cmax*10,flag,flag2);
     else{
@@ -346,7 +355,7 @@ void doeffPr(Int_t pos,Float_t prob,Float_t etaminkp,Float_t etamaxkp){
 
 TH2F *GetHistoPrp(Float_t pt,Float_t ptM,Float_t pMinkp,Float_t pMinkn,Float_t etaminkp,Float_t etamaxkp){
 
-  Float_t x[] = {xmin[0]+0.001,etaminkp+0.001,pt+0.001,xmin[3]+0.001,pMinkp+0.001,pMinkn+0.001,(pMinkp>0.09)+0.001,kTOFmatch+0.001,selectTrue,xmin[9],xmin[10],xmin[11],xmin[12],xmin[13]};
+  Float_t x[] = {xmin[0]+0.001,etaminkp+0.001,pt+0.001,xmin[3]+0.001,pMinkp+0.001,pMinkn+0.001,(pMinkp>0.09 || kPid3Sigma||kPid2Sigma)+0.001,kTOFmatch+0.001,selectTrue,xmin[9],xmin[10],xmin[11],xmin[12],xmin[13]};
   Float_t x2[] = {xmax[0],etamaxkp-0.001,ptM-0.001,xmax[3],xmax[4],xmax[5],xmax[6],xmax[7],keepTrue,xmax[9],xmax[10],xmax[11],xmax[12],xmax[13]};
 
   if(kOverAll){
@@ -396,6 +405,8 @@ TH2F *GetHistoPrp(Float_t pt,Float_t ptM,Float_t pMinkp,Float_t pMinkn,Float_t e
   }
 
   if(require5sigma) x2[9] = 4.9;
+  if(kPid3Sigma && pMinkp>0.09) x2[9] = 2.9;
+  if(kPid2Sigma && pMinkp>0.09) x2[9] = 1.9;
 
   AliPIDperfContainer *tmp = (AliPIDperfContainer *) fContPid1;
 
@@ -409,7 +420,7 @@ TH2F *GetHistoPrp(Float_t pt,Float_t ptM,Float_t pMinkp,Float_t pMinkn,Float_t e
 
 TH2F *GetHistoPrn(Float_t pt,Float_t ptM,Float_t pMinkn,Float_t pMinkp,Float_t etaminkp,Float_t etamaxkp){
 
-  Float_t x[] = {xmin[0]+0.001,etaminkp+0.001,xmin[2]+0.001,pt+0.001,pMinkp+0.001,pMinkn+0.001,kTOFmatch+0.001,(pMinkn>0.09)+0.001,selectTrue,xmin[9],xmin[10],xmin[11],xmin[12],xmin[13]};
+  Float_t x[] = {xmin[0]+0.001,etaminkp+0.001,xmin[2]+0.001,pt+0.001,pMinkp+0.001,pMinkn+0.001,kTOFmatch+0.001,(pMinkn>0.09 || kPid3Sigma||kPid2Sigma)+0.001,selectTrue,xmin[9],xmin[10],xmin[11],xmin[12],xmin[13]};
   Float_t x2[] = {xmax[0],etamaxkp-0.001,xmax[2],ptM-0.001,xmax[4],xmax[5],xmax[6],xmax[7],keepTrue,xmax[9],xmax[10],xmax[11],xmax[12],xmax[13]};
 
   if(kOverAll){
@@ -457,6 +468,8 @@ TH2F *GetHistoPrn(Float_t pt,Float_t ptM,Float_t pMinkn,Float_t pMinkp,Float_t e
   }
 
   if(require5sigma) x2[10] = 4.9;
+  if(kPid3Sigma && pMinkn>0.09) x2[10] = 2.9;
+  if(kPid2Sigma && pMinkn>0.09) x2[10] = 1.9;
 
   AliPIDperfContainer *tmp = (AliPIDperfContainer *) fContPid2;
 
@@ -481,9 +494,9 @@ void fit(TH1D *h,Float_t *a,char *opt,char *opt2,Float_t pt){
  fall->SetParameter(0,100);
  fall->SetParameter(1,1.115);
  fall->SetParameter(2,2.89748e-03);
- fall->FixParameter(3,350+600/pt);
+ fall->FixParameter(3,1000+350+600/pt);
 
- fall->SetParLimits(0,0.00001,10000);
+ fall->SetParLimits(0,0.00001,10000000);
  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.0005,0.0015);
  //fall->SetParLimits(3,200,350);
@@ -514,9 +527,9 @@ void fit(TH1D *h,Float_t *a,char *opt,char *opt2,Float_t pt){
 //  getchar();
 
  if(pt > 2.5){
-   if(pt < 2.8) h2->RebinX(2);
-   else if(pt < 3) h2->RebinX(4);
-   else h2->RebinX(10);
+   if(pt < 2.4) h2->RebinX(1);
+   else if(pt < 3) h2->RebinX(2);
+   else h2->RebinX(2);
  }
 
  h=h2;
@@ -553,7 +566,12 @@ void fit(TH1D *h,Float_t *a,char *opt,char *opt2,Float_t pt){
  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);
 
- Float_t errI = TMath::Sqrt(ftmp->GetParError(0)*ftmp->GetParError(0)/(0.001+ftmp->GetParameter(0))/(0.001+ftmp->GetParameter(0)));
+ Float_t errI = TMath::Abs(ftmp->GetParError(0)*ftmp->GetParError(0)/(0.001+ftmp->GetParameter(0))/(0.001+ftmp->GetParameter(0)));
+
+ errI = TMath::Sqrt(errI);
+
+ if(signI < 0) signI = 0;
+ if(backI < 1) backI = 1;
 
  printf("signal(5 sigma) = %f +/- %f(fit) +/- %f(stat)\n",signI,errI*signI,TMath::Sqrt(signI));
  printf("backgr(3sigma) = %f\n",backI);