forked from alisw/AliPhysics
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAliOADBTrackFix.cxx
84 lines (74 loc) · 3.3 KB
/
AliOADBTrackFix.cxx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/**************************************************************************
* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
* *
* Author: The ALICE Off-line Project. *
* Contributors are mentioned in the code where appropriate. *
* *
* Permission to use, copy, modify and distribute this software and its *
* documentation strictly for non-commercial purposes is hereby granted *
* without fee, provided that the above copyright notice appears in all *
* copies and that both the copyright notice and this permission notice *
* appear in the supporting documentation. The authors make no claims *
* about the suitability of this software for any purpose. It is *
* provided "as is" without express or implied warranty. *
**************************************************************************/
/* $Id$ */
//-------------------------------------------------------------------------
// OADB class for run dependent track fixing parameters
// Convention for phi-dependent data: 0 : 2pi
// Author: [email protected]
//-------------------------------------------------------------------------
#include <TGraph.h>
#include <TMath.h>
#include "AliOADBTrackFix.h"
#include "AliLog.h"
ClassImp(AliOADBTrackFix);
//______________________________________________________________________________
AliOADBTrackFix::AliOADBTrackFix()
{
// Default constructor
for (int imd=0;imd<kNCorModes;imd++) {
for (int iside=0;iside<2;iside++) fPtInvCor[imd][iside] = 0;
fXIniPtInvCorr[imd] = 0;
}
//
}
//______________________________________________________________________________
AliOADBTrackFix::AliOADBTrackFix(const char* name) :
TNamed(name, "TrackFix")
{
// Constructor
for (int imd=0;imd<kNCorModes;imd++) {
for (int iside=0;iside<2;iside++) fPtInvCor[imd][iside] = 0;
fXIniPtInvCorr[imd] = 0;
}
}
//______________________________________________________________________________
AliOADBTrackFix::~AliOADBTrackFix()
{
// destructor
for (int imd=0;imd<kNCorModes;imd++) for (int iside=0;iside<2;iside++) delete fPtInvCor[imd][iside];
//
}
//______________________________________________________________________________
void AliOADBTrackFix::SetPtInvCorr(int mode,int side, const TGraph* gr)
{
if (!gr || gr->GetN()<1) {
AliInfo(Form("Correction for side %d in mode %d is empty",side,mode));
fPtInvCor[mode][side] = 0;
}
fPtInvCor[mode][side] = gr;
}
//______________________________________________________________________________
Double_t AliOADBTrackFix::GetPtInvCorr(int mode, double sideAfrac, double phi) const
{
// calculate the correction for the track of given model at given phi, provided the sideAfrac fraction of its
// total lenght in TPC is in side A.
if (!fPtInvCor[mode][0] || !fPtInvCor[mode][1]) return 0; // no graph
while (phi>2*TMath::Pi()) phi -= 2*TMath::Pi();
while (phi<0) phi += 2*TMath::Pi();
int nb = fPtInvCor[mode][0]->GetN();
int bin = int( phi/(2*TMath::Pi())*nb );
if (bin==nb) bin = nb-1;
return sideAfrac*fPtInvCor[mode][0]->GetY()[bin] + (1.-sideAfrac)*fPtInvCor[mode][1]->GetY()[bin];
}