]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
V0 and SPD linearisation (A. Toia)
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 25 Nov 2010 17:30:17 +0000 (17:30 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 25 Nov 2010 17:30:17 +0000 (17:30 +0000)
ANALYSIS/AliCentralitySelectionTask.cxx
ANALYSIS/AliCentralitySelectionTask.h

index 87674f73c1794d801b9d569edf8c39cd573b4ace..179360c27327188038053ca635aaadb8893734ff 100644 (file)
@@ -45,6 +45,7 @@
 #include "AliMultiplicity.h"
 #include "AliAODHandler.h"
 #include "AliAODEvent.h"
+#include "AliESDVertex.h"
 #include "AliAODVertex.h"
 #include "AliAODMCHeader.h"
 #include "AliMCEvent.h"
@@ -77,6 +78,7 @@ AliAnalysisTaskSE(),
   fFileList(new TList),
   fFileList2(new TList),
   fCurrentRun(-1),
+  fRunNo(-1),
   fCentV0M(0),
   fCentFMD(0),
   fCentTRK(0),
@@ -116,6 +118,7 @@ AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
   fFileList(new TList),
   fFileList2(new TList),
   fCurrentRun(-1),
+  fRunNo(-1),
   fCentV0M(0),
   fCentFMD(0),
   fCentTRK(0),
@@ -165,6 +168,7 @@ AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelect
   fFileList(ana.fFileList),
   fFileList2(ana.fFileList2),
   fCurrentRun(ana.fCurrentRun),
+  fRunNo(ana.fRunNo),
   fCentV0M(ana.fCentV0M),
   fCentFMD(ana.fCentFMD),
   fCentTRK(ana.fCentTRK),
@@ -235,12 +239,18 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
   Int_t    nTracklets = 0;          //  no. tracklets
   Int_t    nClusters[6];            //  no. clusters on 6 ITS layers
   Int_t    nChips[2];               //  no. chips on 2 SPD layers
+  Float_t  spdCorr =0;              //  corrected spd2 multiplicity
 
   Float_t  multV0A  = 0;            //  multiplicity from V0 reco side A
   Float_t  multV0C  = 0;            //  multiplicity from V0 reco side C
   Float_t  multFMDA = 0;            //  multiplicity from FMD on detector A
   Float_t  multFMDC = 0;            //  multiplicity from FMD on detector C
 
+  Short_t v0Corr = 0;               // corrected V0 multiplicity
+  Short_t v0CorrResc = 0;           // corrected and rescaled V0 multiplicity
+
+  Float_t zvtx =0;                  // z-vertex SPD
   AliESDCentrality *esdCent = 0;
 
   if(fAnalysisInput.CompareTo("ESD")==0){
@@ -257,7 +267,15 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
     AliESDVZERO* esdV0 = esd->GetVZEROData();
     multV0A=esdV0->GetMTotV0A();
     multV0C=esdV0->GetMTotV0C();
-    
+
+    float v0CorrR;
+    v0Corr = (Short_t) (GetCorrV0(esd,v0CorrR,fRunNo));
+    v0CorrResc = (Short_t)v0CorrR;
+
+    // ***** Vertex Info
+    const AliESDVertex* vtxESD = esd->GetPrimaryVertexSPD();
+    zvtx        = vtxESD->GetZ(); 
+
     // ***** CB info (tracklets, clusters, chips)
     nTracks    = event->GetNumberOfTracks();     
 
@@ -272,7 +290,8 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
     for(Int_t ilay=0; ilay<2; ilay++){
       nChips[ilay] = mult->GetNumberOfFiredChips(ilay);
     }
-    
+
+    spdCorr = GetCorrSPD2(nClusters[1],zvtx);    
 
     // ***** FMD info
     AliESDFMD *fmd = esd->GetFMDData();
@@ -326,7 +345,7 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
   }
 
   // ***** Centrality Selection
-  if(fHtempV0M)  fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((multV0A+multV0C)));
+  if(fHtempV0M)  fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((v0Corr)));
   ///  else     printf("  Centrality by V0 not available!!!\n\n");
   if(fHtempFMD) fCentFMD = fHtempFMD->GetBinContent(fHtempFMD->FindBin((multFMDA+multFMDC)));
   //  else     printf("  Centrality by FMD not available!!!\n\n");
@@ -336,7 +355,7 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
   //  else     printf("  Centrality by TKL not available!!!\n\n");
   if(fHtempCL0) fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0]));
   //  else     printf("  Centrality by CL0 not available!!!\n\n");
-  if(fHtempCL1) fCentCL1 = fHtempCL1->GetBinContent(fHtempCL1->FindBin(nClusters[1]));
+  if(fHtempCL1) fCentCL1 = fHtempCL1->GetBinContent(fHtempCL1->FindBin(spdCorr));
   ///  else     printf("  Centrality by CL1 not available!!!\n\n");
   
   if(fHtempV0MvsFMD) fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C)));
@@ -425,14 +444,15 @@ Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* esd)
   
   AliInfo(Form("Setup Centrality Selection for run %d\n",fCurrentRun));
 
-  Int_t runNo = fCurrentRun;
+  fRunNo = fCurrentRun;
 
   // CHANGE HERE FOR RUN RANGES
-  if ( runNo == 137162 ) runNo = 137161;
-  else if ( runNo == 137365 ) runNo = 137366;
+  if ( fRunNo == 137162 ) fRunNo = 137161;
+  else if ( fRunNo == 137365 ) fRunNo = 137366;
+  else if ( fRunNo > 137366 ) fRunNo = 137366;
   // CHANGE HERE FOR RUN RANGES
 
-  TString runName(Form("%d", runNo));
+  TString runName(Form("%d", fRunNo));
   TString fileName("");
   Bool_t isRunKnown = kFALSE;
 
@@ -463,3 +483,118 @@ Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* esd)
   
   return -1;
 }
+//________________________________________________________________________
+Float_t AliCentralitySelectionTask::GetCorrV0(const AliESDEvent* esd, float &v0CorrResc, int run) 
+{
+  // correct V0 non-linearity, prepare a version rescaled to SPD2 corr
+  Double_t *par0;
+  Double_t *par1;
+  Double_t *par2;
+  
+  Double_t par0_137161[64] = { 6.71e-02 , 6.86e-02 , 7.06e-02 , 6.32e-02 , 
+                       5.91e-02 , 6.07e-02 , 5.78e-02 , 5.73e-02 , 5.91e-02 , 6.22e-02 , 
+                       5.90e-02 , 6.11e-02 , 5.55e-02 , 5.29e-02 , 5.19e-02 , 5.56e-02 , 
+                       6.25e-02 , 7.03e-02 , 5.64e-02 , 5.81e-02 , 4.57e-02 , 5.30e-02 , 
+                       5.13e-02 , 6.43e-02 , 6.27e-02 , 6.48e-02 , 6.07e-02 , 1.01e-01 , 
+                       6.68e-02 , 7.16e-02 , 6.36e-02 , 5.95e-02 , 2.52e-02 , 2.82e-02 , 
+                       2.56e-02 , 2.86e-02 , 2.82e-02 , 2.10e-02 , 2.13e-02 , 2.32e-02 , 
+                       2.75e-02 , 4.34e-02 , 3.78e-02 , 4.52e-02 , 4.11e-02 , 3.89e-02 , 
+                       4.10e-02 , 3.73e-02 , 4.51e-02 , 5.07e-02 , 5.42e-02 , 4.74e-02 , 
+                       4.33e-02 , 4.44e-02 , 4.64e-02 , 3.01e-02 , 6.38e-02 , 5.26e-02 , 
+                       4.99e-02 , 5.26e-02 , 5.47e-02 , 3.84e-02 , 5.00e-02 , 5.20e-02 };
+  Double_t par1_137161[64] = { -6.68e-05 , -7.78e-05 , -6.88e-05 , -5.92e-05 , 
+                       -2.43e-05 , -3.54e-05 , -2.91e-05 , -1.99e-05 , -1.40e-05 , -4.01e-05 , 
+                       -2.29e-05 , -3.68e-05 , -2.53e-05 , -2.44e-06 , -9.22e-06 , -1.51e-05 , 
+                       -2.80e-05 , -2.34e-05 , -1.72e-05 , -1.81e-05 , -1.29e-05 , -2.65e-05 , 
+                       -1.61e-05 , -2.86e-05 , -1.74e-05 , -4.23e-05 , -3.41e-05 , -1.05e-04 , 
+                       -2.76e-05 , -4.71e-05 , -3.06e-05 , -2.32e-05 , -1.55e-06 , 2.15e-05 , 
+                       1.40e-05 , 2.16e-05 , 1.21e-05 , 3.05e-06 , 1.67e-05 , -3.84e-06 , 
+                       3.09e-06 , 1.50e-05 , 3.47e-06 , 4.87e-06 , -3.71e-07 , -1.75e-06 , 
+                       -1.80e-06 , 9.99e-06 , -6.46e-06 , -4.91e-06 , 1.33e-05 , -2.52e-07 , 
+                       -3.85e-06 , 4.94e-06 , -2.48e-07 , -1.20e-05 , 2.07e-06 , 6.12e-06 , 
+                       -1.18e-06 , 4.54e-06 , -1.54e-05 , -1.25e-05 , 1.46e-06 , -6.67e-06 };
+  Double_t par2_137161[64] = { 1.29e-08 , 1.51e-08 , 1.43e-08 , 1.11e-08 , 
+                       5.04e-09 , 6.99e-09 , 5.58e-09 , 4.15e-09 , 4.00e-09 , 8.22e-09 , 
+                       4.97e-09 , 7.66e-09 , 4.91e-09 , 1.10e-09 , 2.64e-09 , 3.64e-09 , 
+                       5.76e-09 , 5.46e-09 , 3.38e-09 , 3.47e-09 , 2.43e-09 , 4.13e-09 , 
+                       2.80e-09 , 5.80e-09 , 3.86e-09 , 7.46e-09 , 5.98e-09 , 2.58e-08 , 
+                       5.50e-09 , 8.72e-09 , 5.23e-09 , 4.37e-09 , 2.33e-09 , -6.01e-10 , 
+                       3.99e-11 , -2.02e-10 , 7.67e-10 , 2.03e-09 , 1.17e-10 , 2.56e-09 , 
+                       1.16e-09 , -4.75e-10 , 1.28e-09 , 1.23e-09 , 1.62e-09 , 1.61e-09 , 
+                       1.93e-09 , 2.97e-10 , 2.21e-09 , 2.16e-09 , 5.22e-10 , 1.03e-09 , 
+                       1.56e-09 , 5.00e-10 , 1.01e-09 , 2.93e-09 , 1.05e-09 , 9.96e-11 , 
+                       1.21e-09 , 7.45e-10 , 3.07e-09 , 2.31e-09 , 6.70e-10 , 1.89e-09 };
+
+  Double_t par0_137366[64] = { 7.12e-02 , 7.34e-02 , 7.39e-02 , 6.54e-02 , 6.11e-02 , 6.31e-02 , 6.15e-02 , 
+                              6.00e-02 , 6.10e-02 , 6.49e-02 , 6.17e-02 , 6.33e-02 , 6.00e-02 , 5.48e-02 , 
+                              5.44e-02 , 5.81e-02 , 6.49e-02 , 7.07e-02 , 5.91e-02 , 6.18e-02 , 4.82e-02 , 
+                              5.67e-02 , 5.36e-02 , 6.60e-02 , 6.37e-02 , 6.78e-02 , 6.31e-02 , 1.04e-01 , 
+                              6.91e-02 , 7.32e-02 , 6.61e-02 , 6.16e-02 , 2.64e-02 , 2.81e-02 , 2.64e-02 , 
+                              2.85e-02 , 2.87e-02 , 2.18e-02 , 2.19e-02 , 2.43e-02 , 2.81e-02 , 4.37e-02 , 
+                              3.90e-02 , 4.66e-02 , 4.24e-02 , 4.09e-02 , 4.21e-02 , 3.88e-02 , 4.83e-02 , 
+                              5.23e-02 , 5.44e-02 , 4.85e-02 , 4.42e-02 , 4.58e-02 , 4.74e-02 , 3.14e-02 , 
+                              6.31e-02 , 5.30e-02 , 5.01e-02 , 5.33e-02 , 5.70e-02 , 3.95e-02 , 4.98e-02 , 5.31e-02 };
+  Double_t par1_137366[64] = { -6.99e-05 , -6.99e-05 , -6.94e-05 , -6.55e-05 , -3.55e-05 , -4.50e-05 , 
+                              -3.10e-05 , -2.81e-05 , -2.29e-05 , -3.89e-05 , -2.53e-05 , -4.25e-05 ,
+                              -1.87e-05 , -2.01e-05 , -1.53e-05 , -2.14e-05 , -2.86e-05 , -4.70e-05 ,
+                              -2.23e-05 , -3.30e-05 ,-9.74e-06 , -2.62e-05 , -1.76e-05 , -2.38e-05 , 
+                              -2.40e-05 , -3.43e-05 , -2.75e-05 , -6.86e-05 ,-2.35e-05 , -4.45e-05 , 
+                              -2.51e-05 , -2.20e-05 , -1.25e-16 , -2.04e-17 , -2.06e-17 , -3.74e-19 ,
+                              -1.18e-18 , -2.02e-15 , -3.78e-06 , -1.26e-06 , -2.71e-06 , -6.23e-17 , 
+                              -7.39e-08 , -1.76e-16 , -8.98e-06 , -4.10e-18 , -1.34e-05 , -1.06e-16 , 
+                              -3.34e-06 , -1.04e-05 , -5.28e-06 , -7.34e-06 , -1.05e-05 , -7.68e-06 ,
+                              -1.78e-05 , -1.19e-05 , -1.78e-05 , -1.34e-06 , -9.23e-06 , -3.34e-06 ,
+                              -8.02e-06 , -1.39e-05 , -1.38e-05 , -1.40e-05 };
+  Double_t par2_137366[64] = { 1.41e-08 , 1.47e-08 , 1.48e-08 , 1.24e-08 , 6.82e-09 , 8.73e-09 , 6.26e-09 , 
+                              5.53e-09 , 5.40e-09 , 7.93e-09 , 5.49e-09 , 8.77e-09 , 4.21e-09 , 3.93e-09 , 
+                              3.60e-09 , 4.67e-09 , 5.59e-09 , 8.81e-09 , 3.89e-09 , 6.19e-09 , 1.97e-09 , 
+                              4.38e-09 , 3.26e-09 , 5.00e-09 , 4.58e-09 , 6.39e-09 , 5.03e-09 , 1.30e-08 , 
+                              4.95e-09 , 8.26e-09 , 4.57e-09 , 4.10e-09 , 2.35e-09 , 2.30e-09 , 2.15e-09 , 
+                              2.27e-09 , 2.17e-09 , 2.27e-09 , 2.97e-09 , 2.25e-09 , 1.69e-09 , 1.44e-09 , 
+                              1.66e-09 , 1.75e-09 , 2.88e-09 , 1.82e-09 , 3.64e-09 , 1.80e-09 , 1.71e-09 , 
+                              2.66e-09 , 3.01e-09 , 1.95e-09 , 2.64e-09 , 2.42e-09 , 3.68e-09 , 2.66e-09 , 
+                              3.92e-09 , 1.18e-09 , 2.26e-09 , 1.57e-09 , 2.02e-09 , 2.71e-09 , 2.99e-09 , 3.04e-09 }; 
+  
+  
+  if (run==137161) {
+    par0=par0_137161;
+    par1=par1_137161;
+    par2=par2_137161;
+  }  else  {
+    par0=par0_137366;
+    par1=par1_137366;
+    par2=par2_137366;
+ }
+  //
+  Float_t multCorr = 0;
+  Float_t multCorr2 = 0;
+  Float_t multChCorr[64];
+  AliESDVZERO* esdV0 = esd->GetVZEROData();
+  for(Int_t i = 0; i < 64; ++i) {
+    Double_t b = (esdV0->GetMultiplicity(i)*par1[i]-par0[i]);
+    Double_t s = (b*b-4.*par2[i]*esdV0->GetMultiplicity(i)*esdV0->GetMultiplicity(i));
+    Double_t n;
+    if (s<0) {
+      printf("FPE %d %.2f %.2f %.2e\n",i,esdV0->GetMultiplicity(i),b,(b*b-4.*par2[i]*esdV0->GetMultiplicity(i)*esdV0->GetMultiplicity(i)));
+      n = -b;
+    }
+    else {
+      n = (-b + TMath::Sqrt(s));
+    }
+    multChCorr[i] = 2.*esdV0->GetMultiplicity(i)/n*par0[i];
+    multCorr += multChCorr[i];
+    multCorr2 += (multChCorr[i]/par0[i]/64.);
+  }
+  v0CorrResc =  multCorr2;
+  return multCorr;
+}
+
+//____________________________________________________________________
+Float_t AliCentralitySelectionTask::GetCorrSPD2(Float_t spd2raw,Float_t zv)
+{
+  // renormalize N spd2 clusters at given Zv to acceptance at Zv=0
+  const double pars[] = {8.10030e-01,-2.80364e-03,-7.19504e-04};
+  zv -= pars[0];
+  float corr = 1 + zv*(pars[1] + zv*pars[2]);
+  return corr>0 ? spd2raw/corr : -1;
+}
index e6e5a7ea0e8c0f985786e2c526d3b21f309e387c..2731ee146d723e9ad3efe2e0c17f552ac7652b46 100644 (file)
@@ -45,6 +45,9 @@ class AliCentralitySelectionTask : public AliAnalysisTaskSE {
   void AddPercentileFileToList(TString filename) { fFileList->Add(new TObjString(filename)); }
   void AddPercentileFile2ToList(TString filename) { fFileList2->Add(new TObjString(filename)); }
 
+  Float_t GetCorrV0(const AliESDEvent* esd, float &v0CorrResc, int run);
+  Float_t GetCorrSPD2(Float_t spd2raw,Float_t zv);
+
  private:
 
   Int_t SetupRun(AliESDEvent* esd);
@@ -60,6 +63,7 @@ class AliCentralitySelectionTask : public AliAnalysisTaskSE {
   TList*   fFileList;           //! list of input files names
   TList*   fFileList2;          //! list of input files 2 names
   Int_t    fCurrentRun;         // current run number
+  Int_t    fRunNo;              // reference run number
 
   Float_t  fCentV0M;            // percentile centrality from V0
   Float_t  fCentFMD;            // percentile centrality from FMD