#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...
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);
}
//______________________________________________________________________________
-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
((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;
+}