ROOT logo
/*************************************************************************
* Copyright(c) 1998-2008, 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.                  * 
**************************************************************************/

#include "AliFlowVector.h"
#include "AliFlowTrackSimple.h"
#include "TMath.h"

//********************************************************************
// AliFlowVector:                                                    *
// Class to hold the flow vector and multiplicity for flow analysis. *
// Author: A. Bilandzic (anteb@nikhef.nl)                            *
// extended: M.Krzewicki (mikolaj.krzewicki@cern.ch)                 *
//********************************************************************

ClassImp(AliFlowVector)

//________________________________________________________________________

AliFlowVector::AliFlowVector():
  TVector2(0.0,0.0),
  fMult(0.0),
  fHarmonic(2),
  fPOItype(0),
  fSubeventNumber(-1)
{
  // default constructor
}

//________________________________________________________________________

AliFlowVector::AliFlowVector(const AliFlowVector& aVector):
  TVector2(aVector),
  fMult(aVector.fMult),
  fHarmonic(aVector.fHarmonic),
  fPOItype(aVector.fPOItype),
  fSubeventNumber(aVector.fSubeventNumber)
{
  // copy constructor
}

//________________________________________________________________________

AliFlowVector::AliFlowVector(Double_t *y, Double_t m, Int_t h, Int_t t, Int_t s):
  TVector2(y),
  fMult(m),
  fHarmonic(h),
  fPOItype(t),
  fSubeventNumber(s)
{
  // Analogue of TVector2 constructor. Sets (x,y) and multiplicity 1.
}

 //________________________________________________________________________

AliFlowVector::AliFlowVector(const TVector2 &v, Double_t m, Int_t h, Int_t t, Int_t s):
  TVector2(v),
  fMult(m),
  fHarmonic(h),
  fPOItype(t),
  fSubeventNumber(s)
{
  // custom constructor, Sets vector and multiplicity
}

 //________________________________________________________________________

AliFlowVector::AliFlowVector(Double_t x, Double_t y, Double_t m, Int_t h, Int_t t, Int_t s):
  TVector2(x,y),
  fMult(m),
  fHarmonic(h),
  fPOItype(t),
  fSubeventNumber(s)
{
  // custom constructor analogue of TVector2 constructor
}

//________________________________________________________________________ 

AliFlowVector::~AliFlowVector()
{
  // default destructor 
}

void AliFlowVector::SetMagPhi(Double_t size, Double_t angle, Double_t mult)
{
   // Analogue to SetMagPhi for a TVector2 but here including a sum of weights
   TVector2::SetMagPhi(size,angle);
   SetMult(mult);
}

//________________________________________________________________________

AliFlowVector& AliFlowVector::operator=(const AliFlowVector& aVector)
{
  // assignement operator
  if (this==&aVector) return *this;
  fX = aVector.X();
  fY = aVector.Y();
  fMult = aVector.GetMult();
  return *this;
}

//________________________________________________________________________

AliFlowVector& AliFlowVector::operator+=(const AliFlowVector& aVector)
{
  // addition operator
  fX += aVector.X(); 
  fY += aVector.Y(); 
  fMult += aVector.GetMult(); 
  return *this;
}

AliFlowVector& AliFlowVector::operator-=(const AliFlowVector& aVector)
{
  // subtraction operator
  fX -= aVector.X(); 
  fY -= aVector.Y(); 
  fMult -= aVector.GetMult();
  return *this;
}

AliFlowVector& AliFlowVector::operator*=(Double_t w)
{
   // multiply by a weight operator
   fX*=w;
   fY*=w;
   fMult*=w;
   return *this;
}

//________________________________________________________________________
void AliFlowVector::Clear(Option_t* /*option*/)
{
  //clear
  fX=0.;
  fY=0.;
  fMult=0;
  fHarmonic=2;
  fPOItype=AliFlowTrackSimple::kRP;
  fSubeventNumber=-1;
}

//________________________________________________________________________
Int_t AliFlowVector::SubtractTrackWithDaughters( const AliFlowTrackSimple* track, 
                                                Double_t extraWeight 
                                              )
{
  //subtract a track and all its daughters, only if tagged with flowTag and in specified
  //subevent (-1 for no subevent selection)
  //to only subtract if it was actually used in the construction of the vector)
  //TODO: maybe make recursive if it ever becomes needed
  //for complicated decay topologies
  Bool_t inSubEvent=kTRUE;
  if (fSubeventNumber>=0) 
  {
    inSubEvent = track->InSubevent(fSubeventNumber);
  }
  if (track->IsPOItype(fPOItype) && inSubEvent )
  {
    fX -= extraWeight * track->Weight() * TMath::Cos(fHarmonic*track->Phi());
    fY -= extraWeight * track->Weight() * TMath::Sin(fHarmonic*track->Phi());
  }
  
  Int_t numberOfsubtractedDaughters=0;
  for (Int_t i=0; i<track->GetNDaughters(); i++)
  {
    AliFlowTrackSimple* daughter = track->GetDaughter(i);
    if (!daughter) continue;
    inSubEvent=kTRUE;
    if (fSubeventNumber>=0) 
    {
      inSubEvent = daughter->InSubevent(fSubeventNumber);
    }
    if (daughter->IsPOItype(fPOItype) && inSubEvent )
    {
      fX -= extraWeight * daughter->Weight() * TMath::Cos(fHarmonic*daughter->Phi());
      fY -= extraWeight * daughter->Weight() * TMath::Sin(fHarmonic*daughter->Phi());
      numberOfsubtractedDaughters++;
    }
  }
  return numberOfsubtractedDaughters;
}
 AliFlowVector.cxx:1
 AliFlowVector.cxx:2
 AliFlowVector.cxx:3
 AliFlowVector.cxx:4
 AliFlowVector.cxx:5
 AliFlowVector.cxx:6
 AliFlowVector.cxx:7
 AliFlowVector.cxx:8
 AliFlowVector.cxx:9
 AliFlowVector.cxx:10
 AliFlowVector.cxx:11
 AliFlowVector.cxx:12
 AliFlowVector.cxx:13
 AliFlowVector.cxx:14
 AliFlowVector.cxx:15
 AliFlowVector.cxx:16
 AliFlowVector.cxx:17
 AliFlowVector.cxx:18
 AliFlowVector.cxx:19
 AliFlowVector.cxx:20
 AliFlowVector.cxx:21
 AliFlowVector.cxx:22
 AliFlowVector.cxx:23
 AliFlowVector.cxx:24
 AliFlowVector.cxx:25
 AliFlowVector.cxx:26
 AliFlowVector.cxx:27
 AliFlowVector.cxx:28
 AliFlowVector.cxx:29
 AliFlowVector.cxx:30
 AliFlowVector.cxx:31
 AliFlowVector.cxx:32
 AliFlowVector.cxx:33
 AliFlowVector.cxx:34
 AliFlowVector.cxx:35
 AliFlowVector.cxx:36
 AliFlowVector.cxx:37
 AliFlowVector.cxx:38
 AliFlowVector.cxx:39
 AliFlowVector.cxx:40
 AliFlowVector.cxx:41
 AliFlowVector.cxx:42
 AliFlowVector.cxx:43
 AliFlowVector.cxx:44
 AliFlowVector.cxx:45
 AliFlowVector.cxx:46
 AliFlowVector.cxx:47
 AliFlowVector.cxx:48
 AliFlowVector.cxx:49
 AliFlowVector.cxx:50
 AliFlowVector.cxx:51
 AliFlowVector.cxx:52
 AliFlowVector.cxx:53
 AliFlowVector.cxx:54
 AliFlowVector.cxx:55
 AliFlowVector.cxx:56
 AliFlowVector.cxx:57
 AliFlowVector.cxx:58
 AliFlowVector.cxx:59
 AliFlowVector.cxx:60
 AliFlowVector.cxx:61
 AliFlowVector.cxx:62
 AliFlowVector.cxx:63
 AliFlowVector.cxx:64
 AliFlowVector.cxx:65
 AliFlowVector.cxx:66
 AliFlowVector.cxx:67
 AliFlowVector.cxx:68
 AliFlowVector.cxx:69
 AliFlowVector.cxx:70
 AliFlowVector.cxx:71
 AliFlowVector.cxx:72
 AliFlowVector.cxx:73
 AliFlowVector.cxx:74
 AliFlowVector.cxx:75
 AliFlowVector.cxx:76
 AliFlowVector.cxx:77
 AliFlowVector.cxx:78
 AliFlowVector.cxx:79
 AliFlowVector.cxx:80
 AliFlowVector.cxx:81
 AliFlowVector.cxx:82
 AliFlowVector.cxx:83
 AliFlowVector.cxx:84
 AliFlowVector.cxx:85
 AliFlowVector.cxx:86
 AliFlowVector.cxx:87
 AliFlowVector.cxx:88
 AliFlowVector.cxx:89
 AliFlowVector.cxx:90
 AliFlowVector.cxx:91
 AliFlowVector.cxx:92
 AliFlowVector.cxx:93
 AliFlowVector.cxx:94
 AliFlowVector.cxx:95
 AliFlowVector.cxx:96
 AliFlowVector.cxx:97
 AliFlowVector.cxx:98
 AliFlowVector.cxx:99
 AliFlowVector.cxx:100
 AliFlowVector.cxx:101
 AliFlowVector.cxx:102
 AliFlowVector.cxx:103
 AliFlowVector.cxx:104
 AliFlowVector.cxx:105
 AliFlowVector.cxx:106
 AliFlowVector.cxx:107
 AliFlowVector.cxx:108
 AliFlowVector.cxx:109
 AliFlowVector.cxx:110
 AliFlowVector.cxx:111
 AliFlowVector.cxx:112
 AliFlowVector.cxx:113
 AliFlowVector.cxx:114
 AliFlowVector.cxx:115
 AliFlowVector.cxx:116
 AliFlowVector.cxx:117
 AliFlowVector.cxx:118
 AliFlowVector.cxx:119
 AliFlowVector.cxx:120
 AliFlowVector.cxx:121
 AliFlowVector.cxx:122
 AliFlowVector.cxx:123
 AliFlowVector.cxx:124
 AliFlowVector.cxx:125
 AliFlowVector.cxx:126
 AliFlowVector.cxx:127
 AliFlowVector.cxx:128
 AliFlowVector.cxx:129
 AliFlowVector.cxx:130
 AliFlowVector.cxx:131
 AliFlowVector.cxx:132
 AliFlowVector.cxx:133
 AliFlowVector.cxx:134
 AliFlowVector.cxx:135
 AliFlowVector.cxx:136
 AliFlowVector.cxx:137
 AliFlowVector.cxx:138
 AliFlowVector.cxx:139
 AliFlowVector.cxx:140
 AliFlowVector.cxx:141
 AliFlowVector.cxx:142
 AliFlowVector.cxx:143
 AliFlowVector.cxx:144
 AliFlowVector.cxx:145
 AliFlowVector.cxx:146
 AliFlowVector.cxx:147
 AliFlowVector.cxx:148
 AliFlowVector.cxx:149
 AliFlowVector.cxx:150
 AliFlowVector.cxx:151
 AliFlowVector.cxx:152
 AliFlowVector.cxx:153
 AliFlowVector.cxx:154
 AliFlowVector.cxx:155
 AliFlowVector.cxx:156
 AliFlowVector.cxx:157
 AliFlowVector.cxx:158
 AliFlowVector.cxx:159
 AliFlowVector.cxx:160
 AliFlowVector.cxx:161
 AliFlowVector.cxx:162
 AliFlowVector.cxx:163
 AliFlowVector.cxx:164
 AliFlowVector.cxx:165
 AliFlowVector.cxx:166
 AliFlowVector.cxx:167
 AliFlowVector.cxx:168
 AliFlowVector.cxx:169
 AliFlowVector.cxx:170
 AliFlowVector.cxx:171
 AliFlowVector.cxx:172
 AliFlowVector.cxx:173
 AliFlowVector.cxx:174
 AliFlowVector.cxx:175
 AliFlowVector.cxx:176
 AliFlowVector.cxx:177
 AliFlowVector.cxx:178
 AliFlowVector.cxx:179
 AliFlowVector.cxx:180
 AliFlowVector.cxx:181
 AliFlowVector.cxx:182
 AliFlowVector.cxx:183
 AliFlowVector.cxx:184
 AliFlowVector.cxx:185
 AliFlowVector.cxx:186
 AliFlowVector.cxx:187
 AliFlowVector.cxx:188
 AliFlowVector.cxx:189
 AliFlowVector.cxx:190
 AliFlowVector.cxx:191
 AliFlowVector.cxx:192
 AliFlowVector.cxx:193
 AliFlowVector.cxx:194
 AliFlowVector.cxx:195