+Float_t AliGenAfterBurnerFlow::GetNpNorm(Int_t npart) const
+{
+ //
+ // Calculate npart norm.
+ //
+
+ if (npart<0)
+ return 1;
+
+ Int_t order = (Int_t)fNpParams[0];
+ if (order<0)
+ return 1;
+
+ Float_t ret = 0;
+ Int_t npp = 1;
+ for (Int_t i=0; i<=order; i++) {
+ ret += npp*fNpParams[i+1];
+ npp *= npart;
+ }
+ return ret;
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+Bool_t AliGenAfterBurnerFlow::IsPrimary(Int_t pdg) const
+{
+ if(pdg>=fgkPDG) return kFALSE;
+ return fIsPrim[pdg];
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+Double_t CalcAngle(Double_t phi, Double_t phi0, Double_t phiRP, Double_t v2, Double_t v1=0.)
+{
+ // Calculate relative angle
+ Double_t phi1 = phi-(phi+2*v1*TMath::Sin(phi-phiRP)+v2*TMath::Sin(2*(phi-phiRP))-phi0)/
+ (1.+2*v1*TMath::Cos(phi-phiRP)+ 2*v2*TMath::Cos(2*(phi-phiRP)));
+ if(TMath::Abs(phi/phi1-1.)<0.00001) return phi1;
+ return CalcAngle(phi1, phi0, phiRP, v2, v1);
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+void AliGenAfterBurnerFlow::InitPrimaries()
+{
+ // Init the primary particle list
+ for(Int_t i=0; i<fgkPDG; i++) fIsPrim[i]=kFALSE;
+
+ //mesons
+ fIsPrim[211]=kTRUE;
+ fIsPrim[311]=kTRUE;
+ fIsPrim[321]=kTRUE;
+ fIsPrim[411]=kTRUE;
+ fIsPrim[421]=kTRUE;
+ fIsPrim[431]=kTRUE;
+ fIsPrim[511]=kTRUE;
+ fIsPrim[521]=kTRUE;
+ fIsPrim[531]=kTRUE;
+ fIsPrim[541]=kTRUE;
+ fIsPrim[111]=kTRUE;
+ fIsPrim[221]=kTRUE;
+ fIsPrim[331]=kTRUE;
+ fIsPrim[441]=kTRUE;
+ fIsPrim[551]=kTRUE;
+ fIsPrim[130]=kTRUE;
+ fIsPrim[310]=kTRUE;
+ fIsPrim[213]=kTRUE;
+ fIsPrim[313]=kTRUE;
+ fIsPrim[323]=kTRUE;
+ fIsPrim[413]=kTRUE;
+ fIsPrim[423]=kTRUE;
+ fIsPrim[433]=kTRUE;
+ fIsPrim[513]=kTRUE;
+ fIsPrim[523]=kTRUE;
+ fIsPrim[533]=kTRUE;
+ fIsPrim[543]=kTRUE;
+ fIsPrim[113]=kTRUE;
+ fIsPrim[223]=kTRUE;
+ fIsPrim[333]=kTRUE;
+ fIsPrim[443]=kTRUE;
+ fIsPrim[553]=kTRUE;
+
+ //baryons
+ fIsPrim[2112]=kTRUE;
+ fIsPrim[2212]=kTRUE;
+ fIsPrim[3112]=kTRUE;
+ fIsPrim[3122]=kTRUE;
+ fIsPrim[3212]=kTRUE;
+ fIsPrim[3222]=kTRUE;
+ fIsPrim[3312]=kTRUE;
+ fIsPrim[3322]=kTRUE;
+ fIsPrim[4112]=kTRUE;
+ fIsPrim[4122]=kTRUE;
+ fIsPrim[4212]=kTRUE;
+ fIsPrim[4222]=kTRUE;
+ fIsPrim[4132]=kTRUE;
+ fIsPrim[4312]=kTRUE;
+ fIsPrim[4232]=kTRUE;
+ fIsPrim[4322]=kTRUE;
+ fIsPrim[4332]=kTRUE;
+ fIsPrim[5112]=kTRUE;
+ fIsPrim[5122]=kTRUE;
+ fIsPrim[5212]=kTRUE;
+ fIsPrim[5222]=kTRUE;
+ fIsPrim[1114]=kTRUE;
+ fIsPrim[2114]=kTRUE;
+ fIsPrim[2214]=kTRUE;
+ fIsPrim[2224]=kTRUE;
+ fIsPrim[3114]=kTRUE;
+ fIsPrim[3214]=kTRUE;
+ fIsPrim[3224]=kTRUE;
+ fIsPrim[3314]=kTRUE;
+ fIsPrim[3324]=kTRUE;
+ fIsPrim[3334]=kTRUE;
+ fIsPrim[4114]=kTRUE;
+ fIsPrim[4214]=kTRUE;
+ fIsPrim[4224]=kTRUE;
+ fIsPrim[4314]=kTRUE;
+ fIsPrim[4324]=kTRUE;
+ fIsPrim[4334]=kTRUE;
+ fIsPrim[5114]=kTRUE;
+ fIsPrim[5214]=kTRUE;
+ fIsPrim[5224]=kTRUE;
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+void AliGenAfterBurnerFlow::Generate()
+{