]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/ESD/AliESDUtils.cxx
Geometry for run3 implemented with updated TDI
[u/mrichter/AliRoot.git] / STEER / ESD / AliESDUtils.cxx
index 12b3859d8f063a1f243307e1b9205932cfd65285..0744c4b4f4356845b90fcc7e1672c13ec3fb383a 100644 (file)
@@ -31,7 +31,7 @@
 #include "AliVertexerTracks.h"
 
 //______________________________________________________________________________
-Float_t AliESDUtils::GetCorrV0(const AliESDEvent* esd, Float_t &v0CorrResc, Float_t *v0multChCorr, Float_t *v0multChCorrResc)
+Float_t AliESDUtils::GetCorrV0(const AliVEvent* esd, Float_t &v0CorrResc, Float_t *v0multChCorr, Float_t *v0multChCorrResc)
 {
   // Correct V0 non-linearity, prepare a version rescaled to SPD2 corr.
   // Please describe better parameters...
@@ -118,7 +118,7 @@ Float_t AliESDUtils::GetCorrV0(const AliESDEvent* esd, Float_t &v0CorrResc, Floa
   Float_t multCorr2 = 0;
   Float_t multChCorr[64];
   Float_t multChCorrResc[64];
-  AliESDVZERO* esdV0 = esd->GetVZEROData();
+  AliVVZERO* esdV0 = esd->GetVZEROData();
   for(Int_t i = 0; i < 64; ++i) {
     if (esdV0->TestBit(AliESDVZERO::kCorrectedForSaturation)) {
       multChCorr[i] = esdV0->GetMultiplicity(i);
@@ -153,30 +153,48 @@ Float_t AliESDUtils::GetCorrSPD2(Float_t spd2raw,Float_t zv)
 }  
 
 //______________________________________________________________________________
-Bool_t  AliESDUtils::RefitESDVertexTracks(AliESDEvent* esdEv, Int_t algo)
+Bool_t  AliESDUtils::RefitESDVertexTracks(AliESDEvent* esdEv, Int_t algo, const Double_t *cuts)
 {
   // Refit ESD VertexTracks and redo tracks->RelateToVertex
   // Default vertexin algorithm is 6 (multivertexer). To use old vertexed, use algo=1
   //
   static AliVertexerTracks* vtFinder = 0;
   static int currRun = 0;
+  static int defAlgo = -1;
   static double bkgauss = 0; 
   const Bool_t kVtxConstr = kTRUE;
   //
   if (!vtFinder) { // create vertexer
     vtFinder = new AliVertexerTracks(esdEv->GetMagneticField());
-    printf("Initialized vertexer (algo=%d) for  VertexTracks refit with field %f kG\n",
-          algo, esdEv->GetMagneticField());
+    printf("Initialized vertexer for VertexTracks refit with field %f kG\n",esdEv->GetMagneticField());
     //
     vtFinder->SetITSMode();
     vtFinder->SetConstraintOff();
-    const int kNCuts=21;
-    double VTCuts[kNCuts] = 
-      {1.00e-01,1.00e-01,5.00e-01,3.00e+00,1.00e+00,3.00e+00,1.00e+02,
-       1.00e+03,3.00e+00,3.00e+01,6.00e+00,4.00e+00,7.00e+00,1.00e+03,
-       5.00e+00,5.00e-02,1.00e-03,2.00e+00,1.00e+01,1.00e+00,5.00e+01};
-    VTCuts[10] = algo;
-    vtFinder->SetCuts((double*)VTCuts,kNCuts);
+  }
+  //
+  if ( (cuts && algo>11) || algo!=defAlgo) { 
+    // if cuts array is provided, then interpret algo as the number of parameters in the cuts.
+    // otherwise, interpret it as an algorithm ID for hardwired cuts below
+    if (cuts) {
+      vtFinder->SetCuts((double*)cuts,algo);
+      defAlgo = (Int_t)(cuts[10]);
+    }
+    else {
+      const int kNCuts=21;
+      double vtCuts[kNCuts] = 
+       {1.00e-01,1.00e-01,5.00e-01,3.00e+00,1.00e+00,3.00e+00,1.00e+02,
+        1.00e+03,3.00e+00,3.00e+01,6.00e+00,4.00e+00,7.00e+00,1.00e+03,
+        5.00e+00,5.00e-02,1.00e-03,2.00e+00,1.00e+01,1.00e+00,5.00e+01};
+      //
+      vtCuts[10] = algo;    
+      defAlgo = algo;
+      vtFinder->SetCuts(vtCuts,kNCuts);
+      printf("Setting vertexing algorithm to %d\n",defAlgo);
+    }
+  }
+  if (defAlgo<0 || defAlgo>AliVertexerTracks::kMultiVertexer) {
+    printf("Vertexer algorithms 0:%d are supported... \n",defAlgo);
+    return kFALSE;
   }
   //
   if (currRun!=esdEv->GetRunNumber() && kVtxConstr) { // update diamond for this run
@@ -198,15 +216,45 @@ Bool_t  AliESDUtils::RefitESDVertexTracks(AliESDEvent* esdEv, Int_t algo)
   ((AliESDVertex*)esdEv->GetPrimaryVertexTracks())->SetNContributors(-1);
   //
   AliESDVertex *pvtx=vtFinder->FindPrimaryVertex(esdEv);
-  if (pvtx && pvtx->GetStatus()) {
-    esdEv->SetPrimaryVertexTracks(pvtx);
-    for (Int_t i=esdEv->GetNumberOfTracks(); i--;) {
-      AliESDtrack *t = esdEv->GetTrack(i);
-      Double_t x[3]; t->GetXYZ(x);
-      t->RelateToVertex(pvtx, bkgauss, kVeryBig);
+  if (pvtx) {
+    if (pvtx->GetStatus()) {
+      esdEv->SetPrimaryVertexTracks(pvtx);
+      for (Int_t i=esdEv->GetNumberOfTracks(); i--;) {
+       AliESDtrack *t = esdEv->GetTrack(i);
+       Double_t x[3]; t->GetXYZ(x);
+       t->RelateToVertex(pvtx, bkgauss, kVeryBig);
+      }
     }
+    delete pvtx;
   }
   else return kFALSE;
   //
   return kTRUE;
 }
+//________________________________________________________________________
+Float_t AliESDUtils::GetCorrV0A(Float_t  v0araw, Float_t zv)
+{
+  // renormalize v0A signal at given Zv to acceptance at Zv=0
+  const Double_t pars[] = {0.998864,-0.00407311,-2.47408e-06};
+  zv -= pars[0];
+  Float_t corr = 1 + zv*(pars[1] + zv*pars[2]);
+  return corr>0 ? v0araw/corr : -1;
+}
+//________________________________________________________________________
+Float_t AliESDUtils::GetCorrV0C(Float_t  v0craw, Float_t zv)
+{
+  // renormalize v0C signal at given Zv to acceptance at Zv=0
+  const Double_t pars[] = {1.00083,0.00427623,-2.69047e-05};
+  zv -= pars[0];
+  Float_t corr = 1 + zv*(pars[1] + zv*pars[2]);
+  return corr>0 ? v0craw/corr : -1;
+}
+//________________________________________________________________________
+Float_t AliESDUtils::GetCorrV0A0(Float_t  v0a0raw, Float_t zv)
+{
+  // renormalize v0A-0 signal at given Zv to acceptance at Zv=0
+  const Double_t pars[] = {0.998243,-0.00209013,-6.97686e-06};
+  zv -= pars[0];
+  Float_t corr = 1 + zv*(pars[1] + zv*pars[2]);
+  return corr>0 ? v0a0raw/corr : -1;
+}