ROOT logo
#include "AliForwardFlowWeights.h"
#include <TGraph.h>
#include <TF1.h>
#include <TList.h>
#include <TMath.h>

//____________________________________________________________________
AliForwardFlowWeights::AliForwardFlowWeights()
  : fV22Pt(0), 
    fV24Pt(0), 
    fV24AltPt(0),
    fV2B(0), 
    fV2C(0)
{}

//____________________________________________________________________
AliForwardFlowWeights::AliForwardFlowWeights(const AliForwardFlowWeights& o)
  : TObject(o),
    fV22Pt(o.fV22Pt),
    fV24Pt(o.fV24Pt),
    fV24AltPt(o.fV24AltPt),
    fV2B(o.fV2B), 
    fV2C(o.fV2C)
{}

//____________________________________________________________________
AliForwardFlowWeights&
AliForwardFlowWeights::operator=(const AliForwardFlowWeights& o)
{
  if (&o == this) return *this;

  fV22Pt    = (o.fV22Pt ?    static_cast<TGraph*>(o.fV22Pt->Clone())    : 0);
  fV24Pt    = (o.fV24Pt ?    static_cast<TGraph*>(o.fV24Pt->Clone())    : 0);
  fV24AltPt = (o.fV24AltPt ? static_cast<TGraph*>(o.fV24AltPt->Clone()) : 0);
  fV2B      = (o.fV2B   ?    static_cast<TGraph*>(o.fV2B->Clone())      : 0);
  fV2C      = (o.fV2C   ?    static_cast<TGraph*>(o.fV2C->Clone())      : 0);

  return *this;
}
//____________________________________________________________________
AliForwardFlowWeights::~AliForwardFlowWeights()
{
}

namespace {
  const char* fgkPt2Name = "v22VsPt";
  const char* fgkPt4Name = "v24VsPt";
  const char* fgkPt4Alt  = "v24AltVsPt";
  const char* fgkBName   = "v2VsB";
  const char* fgkCName   = "v2VsC";
}

//____________________________________________________________________
void
AliForwardFlowWeights::Init(TList* l)
{
  Int_t          ptN     = 19;
  const Double_t ptX[]   = {0.00,     0.25,     0.350,    0.45, 
			    0.55,     0.650,    0.75,     0.85, 
			    0.950,    1.10,     1.30,     1.500,
			    1.70,     1.90,     2.250,    2.75, 
			    3.25,     3.750,    4.50};
  { 
    // v2{2} dependence on pt
    const Double_t y[] = {0.00000,  0.043400, 0.059911, 0.073516,
			  0.089756, 0.105486, 0.117391, 0.128199,
			  0.138013, 0.158271, 0.177726, 0.196383,
			  0.208277, 0.216648, 0.242954, 0.249961,
			  0.240131, 0.269006, 0.207796};
    
    fV22Pt = new TGraph(ptN, ptX, y);
    fV22Pt->SetName(fgkPt2Name);
    fV22Pt->SetMarkerStyle(20);
    fV22Pt->SetMarkerColor(kRed+1);
    l->Add(fV22Pt);
  }

  {
    const Double_t y[] = {0.000000, 0.038646, 0.049824, 0.066662,
			  0.075856, 0.081583, 0.099778, 0.104674,
			  0.118545, 0.131874, 0.152959, 0.155348,
			  0.169751, 0.179052, 0.178532, 0.198851,
			  0.185737, 0.239901, 0.186098};

    // v2{4} dependence on pt 
    fV24Pt = new TGraph(ptN, ptX, y);
    fV24Pt->SetName(fgkPt4Name);
    fV24Pt->SetMarkerStyle(20);
    fV24Pt->SetMarkerColor(kBlue+1);
    l->Add(fV24Pt);
  }

  {
    const Double_t y[] = {0.000000, 0.037071, 0.048566, 0.061083,
			  0.070910, 0.078831, 0.091396, 0.102026,
			  0.109691, 0.124449, 0.139819, 0.155561,
			  0.165701, 0.173678, 0.191149, 0.202015,
			  0.204540, 0.212560, 0.195885};
    // v2{4} dependence on pt (30-40%)
    fV24AltPt = new TGraph(ptN, ptX, y);
    fV24AltPt->SetName(fgkPt4Alt);
    fV24AltPt->SetMarkerStyle(20);
    fV24AltPt->SetMarkerColor(kBlue+1);
    l->Add(fV24AltPt);
  }
  Int_t nb            = 8;
  const Double_t by[] = {0.017855, 0.032440, 0.055818, 0.073137,
			 0.083898, 0.086690, 0.082040, 0.077777};
  {
    // V2 dependence on impact parameter
    const Double_t x[] = {1.75,     4.225,    5.965,    7.765,
			  9.215,    10.46,    11.565,   12.575};
    fV2B = new TGraph(nb, x, by);
    fV2B->SetName(fgkBName);
    fV2B->SetMarkerStyle(20);
    fV2B->SetMarkerColor(kGreen+1);
    l->Add(fV2B);
  }
  {
    // V2 dependence on impact parameter
    const Double_t x[] = { 2.5, 7.5, 15, 25, 35, 45, 55, 65};
    fV2C = new TGraph(nb, x, by);
    fV2C->SetName(fgkCName);
    fV2C->SetMarkerStyle(20);
    fV2C->SetMarkerColor(kGreen+1);
    l->Add(fV2C);
  }
}

//____________________________________________________________________
Double_t
AliForwardFlowWeights::CalcEtaWeight(Double_t eta, Int_t type) const
{
  if (type == 0) return 1;
  return 0.1 * TMath::Gaus(eta, 0, (type == 2 ? 3. : 
				    type == 3 ? 15 : 9));
}
//____________________________________________________________________
Double_t
AliForwardFlowWeights::CalcPidWeight(Int_t id, Int_t type) const
{
  if (type == 0) return 1;
  if (type == 2) return 1.207;
  switch (TMath::Abs(id)) {
  case 211:  return 1.3; break; // pions 
  case 2212: return 1.0; break; // protons 
  default:   return 0.7; break;
  }
  return 1;
}
//____________________________________________________________________
Double_t
AliForwardFlowWeights::CalcPtWeight(Double_t pt, Int_t type) const
{
  switch (type) { 
  case 0: return 1;
  case 2: return fV22Pt->Eval(pt);
  case 3: return fV24AltPt->Eval(pt); // From 30-40
  case 4: return fV24Pt->Eval(pt);
  }
  return 0.5 * (fV22Pt->Eval(pt) + fV24Pt->Eval(pt));
}

//____________________________________________________________________
Double_t
AliForwardFlowWeights::CalcBWeight(Double_t b) const
{
  return fV2B->Eval(b) / fV2B->Eval(10.46);
}

//____________________________________________________________________
Double_t
AliForwardFlowWeights::CalcCentWeight(Double_t c) const
{
  return fV2C->Eval(c) / fV2C->Eval(45);
}

//____________________________________________________________________
Double_t
AliForwardFlowWeights::CalcWeight(Double_t eta, 
				  Double_t pt, 
				  Double_t phi,  
				  Int_t    id, 
				  Double_t phiR, 
				  Double_t cOrB, 
				  Int_t    type, 
				  UShort_t order,
				  UShort_t what) const
{
  Double_t w = 1;
  if (what & kEta)  w *= CalcEtaWeight(eta, type);
  if (what & kPt)   w *= CalcPtWeight(pt, type);
  if (what & kPID)  w *= CalcPidWeight(id, type);
  if      (what & kCent) w *= CalcCentWeight(cOrB);
  else if (what & kB)    w *= CalcBWeight(cOrB);
  
  w *= 20 * 2. * TMath::Cos(order * (phi - phiR));

  return w;
}

//____________________________________________________________________
Double_t
AliForwardFlowWeights::CalcWeight(Double_t eta,  Double_t pt, 
				  Double_t phi,  Int_t id, 
				  Double_t phiR, Double_t b) const
{
  return CalcWeight(eta, pt, phi, id, phiR, b, 1, 2, kEta|kPt|kPID|kB);
  
}

namespace {
  TObject* GetListObject(TList* l, const char* name)
  {
    if (!name || name[0] == '\0') { 
      Error("GetListObject", "No object name");
      return 0;
    }
    if (!l) { 
      Error("GetListObject", "No list");
      return 0;
    }
    TObject* o = l->FindObject(name);
    if (!o) { 
      Error("GetListObject", "Object %s not found in list %s",  
	    name, l->GetName());
      return 0;
    }
    return o;
  }
}
//____________________________________________________________________
AliForwardFlowWeights*
AliForwardFlowWeights::FromList(TList* l)
{
  TObject* pt2 = GetListObject(l, fgkPt2Name);
  TObject* pt4 = GetListObject(l, fgkPt4Name);
  TObject* alt = GetListObject(l, fgkPt4Alt);
  TObject* b   = GetListObject(l, fgkBName);
  TObject* c   = GetListObject(l, fgkCName);

  if (!pt2 || !pt4 || !alt || !b || !c) {
    ::Error("FromList", "One or more histograms not found");
    return 0;
  }
  AliForwardFlowWeights* ret = new AliForwardFlowWeights;
  ret->fV22Pt    = static_cast<TGraph*>(pt2);
  ret->fV24Pt    = static_cast<TGraph*>(pt4);
  ret->fV24AltPt = static_cast<TGraph*>(alt);
  ret->fV2B      = static_cast<TGraph*>(b);
  ret->fV2C      = static_cast<TGraph*>(c);
  
  return ret;
}

//____________________________________________________________________
//
// EOF
//
 AliForwardFlowWeights.cxx:1
 AliForwardFlowWeights.cxx:2
 AliForwardFlowWeights.cxx:3
 AliForwardFlowWeights.cxx:4
 AliForwardFlowWeights.cxx:5
 AliForwardFlowWeights.cxx:6
 AliForwardFlowWeights.cxx:7
 AliForwardFlowWeights.cxx:8
 AliForwardFlowWeights.cxx:9
 AliForwardFlowWeights.cxx:10
 AliForwardFlowWeights.cxx:11
 AliForwardFlowWeights.cxx:12
 AliForwardFlowWeights.cxx:13
 AliForwardFlowWeights.cxx:14
 AliForwardFlowWeights.cxx:15
 AliForwardFlowWeights.cxx:16
 AliForwardFlowWeights.cxx:17
 AliForwardFlowWeights.cxx:18
 AliForwardFlowWeights.cxx:19
 AliForwardFlowWeights.cxx:20
 AliForwardFlowWeights.cxx:21
 AliForwardFlowWeights.cxx:22
 AliForwardFlowWeights.cxx:23
 AliForwardFlowWeights.cxx:24
 AliForwardFlowWeights.cxx:25
 AliForwardFlowWeights.cxx:26
 AliForwardFlowWeights.cxx:27
 AliForwardFlowWeights.cxx:28
 AliForwardFlowWeights.cxx:29
 AliForwardFlowWeights.cxx:30
 AliForwardFlowWeights.cxx:31
 AliForwardFlowWeights.cxx:32
 AliForwardFlowWeights.cxx:33
 AliForwardFlowWeights.cxx:34
 AliForwardFlowWeights.cxx:35
 AliForwardFlowWeights.cxx:36
 AliForwardFlowWeights.cxx:37
 AliForwardFlowWeights.cxx:38
 AliForwardFlowWeights.cxx:39
 AliForwardFlowWeights.cxx:40
 AliForwardFlowWeights.cxx:41
 AliForwardFlowWeights.cxx:42
 AliForwardFlowWeights.cxx:43
 AliForwardFlowWeights.cxx:44
 AliForwardFlowWeights.cxx:45
 AliForwardFlowWeights.cxx:46
 AliForwardFlowWeights.cxx:47
 AliForwardFlowWeights.cxx:48
 AliForwardFlowWeights.cxx:49
 AliForwardFlowWeights.cxx:50
 AliForwardFlowWeights.cxx:51
 AliForwardFlowWeights.cxx:52
 AliForwardFlowWeights.cxx:53
 AliForwardFlowWeights.cxx:54
 AliForwardFlowWeights.cxx:55
 AliForwardFlowWeights.cxx:56
 AliForwardFlowWeights.cxx:57
 AliForwardFlowWeights.cxx:58
 AliForwardFlowWeights.cxx:59
 AliForwardFlowWeights.cxx:60
 AliForwardFlowWeights.cxx:61
 AliForwardFlowWeights.cxx:62
 AliForwardFlowWeights.cxx:63
 AliForwardFlowWeights.cxx:64
 AliForwardFlowWeights.cxx:65
 AliForwardFlowWeights.cxx:66
 AliForwardFlowWeights.cxx:67
 AliForwardFlowWeights.cxx:68
 AliForwardFlowWeights.cxx:69
 AliForwardFlowWeights.cxx:70
 AliForwardFlowWeights.cxx:71
 AliForwardFlowWeights.cxx:72
 AliForwardFlowWeights.cxx:73
 AliForwardFlowWeights.cxx:74
 AliForwardFlowWeights.cxx:75
 AliForwardFlowWeights.cxx:76
 AliForwardFlowWeights.cxx:77
 AliForwardFlowWeights.cxx:78
 AliForwardFlowWeights.cxx:79
 AliForwardFlowWeights.cxx:80
 AliForwardFlowWeights.cxx:81
 AliForwardFlowWeights.cxx:82
 AliForwardFlowWeights.cxx:83
 AliForwardFlowWeights.cxx:84
 AliForwardFlowWeights.cxx:85
 AliForwardFlowWeights.cxx:86
 AliForwardFlowWeights.cxx:87
 AliForwardFlowWeights.cxx:88
 AliForwardFlowWeights.cxx:89
 AliForwardFlowWeights.cxx:90
 AliForwardFlowWeights.cxx:91
 AliForwardFlowWeights.cxx:92
 AliForwardFlowWeights.cxx:93
 AliForwardFlowWeights.cxx:94
 AliForwardFlowWeights.cxx:95
 AliForwardFlowWeights.cxx:96
 AliForwardFlowWeights.cxx:97
 AliForwardFlowWeights.cxx:98
 AliForwardFlowWeights.cxx:99
 AliForwardFlowWeights.cxx:100
 AliForwardFlowWeights.cxx:101
 AliForwardFlowWeights.cxx:102
 AliForwardFlowWeights.cxx:103
 AliForwardFlowWeights.cxx:104
 AliForwardFlowWeights.cxx:105
 AliForwardFlowWeights.cxx:106
 AliForwardFlowWeights.cxx:107
 AliForwardFlowWeights.cxx:108
 AliForwardFlowWeights.cxx:109
 AliForwardFlowWeights.cxx:110
 AliForwardFlowWeights.cxx:111
 AliForwardFlowWeights.cxx:112
 AliForwardFlowWeights.cxx:113
 AliForwardFlowWeights.cxx:114
 AliForwardFlowWeights.cxx:115
 AliForwardFlowWeights.cxx:116
 AliForwardFlowWeights.cxx:117
 AliForwardFlowWeights.cxx:118
 AliForwardFlowWeights.cxx:119
 AliForwardFlowWeights.cxx:120
 AliForwardFlowWeights.cxx:121
 AliForwardFlowWeights.cxx:122
 AliForwardFlowWeights.cxx:123
 AliForwardFlowWeights.cxx:124
 AliForwardFlowWeights.cxx:125
 AliForwardFlowWeights.cxx:126
 AliForwardFlowWeights.cxx:127
 AliForwardFlowWeights.cxx:128
 AliForwardFlowWeights.cxx:129
 AliForwardFlowWeights.cxx:130
 AliForwardFlowWeights.cxx:131
 AliForwardFlowWeights.cxx:132
 AliForwardFlowWeights.cxx:133
 AliForwardFlowWeights.cxx:134
 AliForwardFlowWeights.cxx:135
 AliForwardFlowWeights.cxx:136
 AliForwardFlowWeights.cxx:137
 AliForwardFlowWeights.cxx:138
 AliForwardFlowWeights.cxx:139
 AliForwardFlowWeights.cxx:140
 AliForwardFlowWeights.cxx:141
 AliForwardFlowWeights.cxx:142
 AliForwardFlowWeights.cxx:143
 AliForwardFlowWeights.cxx:144
 AliForwardFlowWeights.cxx:145
 AliForwardFlowWeights.cxx:146
 AliForwardFlowWeights.cxx:147
 AliForwardFlowWeights.cxx:148
 AliForwardFlowWeights.cxx:149
 AliForwardFlowWeights.cxx:150
 AliForwardFlowWeights.cxx:151
 AliForwardFlowWeights.cxx:152
 AliForwardFlowWeights.cxx:153
 AliForwardFlowWeights.cxx:154
 AliForwardFlowWeights.cxx:155
 AliForwardFlowWeights.cxx:156
 AliForwardFlowWeights.cxx:157
 AliForwardFlowWeights.cxx:158
 AliForwardFlowWeights.cxx:159
 AliForwardFlowWeights.cxx:160
 AliForwardFlowWeights.cxx:161
 AliForwardFlowWeights.cxx:162
 AliForwardFlowWeights.cxx:163
 AliForwardFlowWeights.cxx:164
 AliForwardFlowWeights.cxx:165
 AliForwardFlowWeights.cxx:166
 AliForwardFlowWeights.cxx:167
 AliForwardFlowWeights.cxx:168
 AliForwardFlowWeights.cxx:169
 AliForwardFlowWeights.cxx:170
 AliForwardFlowWeights.cxx:171
 AliForwardFlowWeights.cxx:172
 AliForwardFlowWeights.cxx:173
 AliForwardFlowWeights.cxx:174
 AliForwardFlowWeights.cxx:175
 AliForwardFlowWeights.cxx:176
 AliForwardFlowWeights.cxx:177
 AliForwardFlowWeights.cxx:178
 AliForwardFlowWeights.cxx:179
 AliForwardFlowWeights.cxx:180
 AliForwardFlowWeights.cxx:181
 AliForwardFlowWeights.cxx:182
 AliForwardFlowWeights.cxx:183
 AliForwardFlowWeights.cxx:184
 AliForwardFlowWeights.cxx:185
 AliForwardFlowWeights.cxx:186
 AliForwardFlowWeights.cxx:187
 AliForwardFlowWeights.cxx:188
 AliForwardFlowWeights.cxx:189
 AliForwardFlowWeights.cxx:190
 AliForwardFlowWeights.cxx:191
 AliForwardFlowWeights.cxx:192
 AliForwardFlowWeights.cxx:193
 AliForwardFlowWeights.cxx:194
 AliForwardFlowWeights.cxx:195
 AliForwardFlowWeights.cxx:196
 AliForwardFlowWeights.cxx:197
 AliForwardFlowWeights.cxx:198
 AliForwardFlowWeights.cxx:199
 AliForwardFlowWeights.cxx:200
 AliForwardFlowWeights.cxx:201
 AliForwardFlowWeights.cxx:202
 AliForwardFlowWeights.cxx:203
 AliForwardFlowWeights.cxx:204
 AliForwardFlowWeights.cxx:205
 AliForwardFlowWeights.cxx:206
 AliForwardFlowWeights.cxx:207
 AliForwardFlowWeights.cxx:208
 AliForwardFlowWeights.cxx:209
 AliForwardFlowWeights.cxx:210
 AliForwardFlowWeights.cxx:211
 AliForwardFlowWeights.cxx:212
 AliForwardFlowWeights.cxx:213
 AliForwardFlowWeights.cxx:214
 AliForwardFlowWeights.cxx:215
 AliForwardFlowWeights.cxx:216
 AliForwardFlowWeights.cxx:217
 AliForwardFlowWeights.cxx:218
 AliForwardFlowWeights.cxx:219
 AliForwardFlowWeights.cxx:220
 AliForwardFlowWeights.cxx:221
 AliForwardFlowWeights.cxx:222
 AliForwardFlowWeights.cxx:223
 AliForwardFlowWeights.cxx:224
 AliForwardFlowWeights.cxx:225
 AliForwardFlowWeights.cxx:226
 AliForwardFlowWeights.cxx:227
 AliForwardFlowWeights.cxx:228
 AliForwardFlowWeights.cxx:229
 AliForwardFlowWeights.cxx:230
 AliForwardFlowWeights.cxx:231
 AliForwardFlowWeights.cxx:232
 AliForwardFlowWeights.cxx:233
 AliForwardFlowWeights.cxx:234
 AliForwardFlowWeights.cxx:235
 AliForwardFlowWeights.cxx:236
 AliForwardFlowWeights.cxx:237
 AliForwardFlowWeights.cxx:238
 AliForwardFlowWeights.cxx:239
 AliForwardFlowWeights.cxx:240
 AliForwardFlowWeights.cxx:241
 AliForwardFlowWeights.cxx:242
 AliForwardFlowWeights.cxx:243
 AliForwardFlowWeights.cxx:244
 AliForwardFlowWeights.cxx:245
 AliForwardFlowWeights.cxx:246
 AliForwardFlowWeights.cxx:247
 AliForwardFlowWeights.cxx:248
 AliForwardFlowWeights.cxx:249
 AliForwardFlowWeights.cxx:250
 AliForwardFlowWeights.cxx:251
 AliForwardFlowWeights.cxx:252
 AliForwardFlowWeights.cxx:253
 AliForwardFlowWeights.cxx:254
 AliForwardFlowWeights.cxx:255
 AliForwardFlowWeights.cxx:256
 AliForwardFlowWeights.cxx:257
 AliForwardFlowWeights.cxx:258
 AliForwardFlowWeights.cxx:259