// Default constructor
// Initialize pointers
AliInfo("VZERO Event Plane Selection enabled.");
- for(Int_t i = 0; i < 8; ++i) fX2In[i] = fY2In[i] = fX2Y2In[i] = fCos8PsiIn[i] = NULL;
+ for(Int_t i = 0; i < 11; ++i) fX2In[i] = fY2In[i] = fX2Y2In[i] = fCos8PsiIn[i] = NULL;
}
//________________________________________________________________________
// Default constructor
// Initialize pointers
AliInfo("Event Plane Selection enabled.");
- for(Int_t i = 0; i < 8; ++i) fX2In[i] = fY2In[i] = fX2Y2In[i] = fCos8PsiIn[i] = NULL;
+ for(Int_t i = 0; i < 11; ++i) fX2In[i] = fY2In[i] = fX2Y2In[i] = fCos8PsiIn[i] = NULL;
}
//________________________________________________________________________
// Destructor
// ...
if (fUserParams) {
- for(Int_t i = 0; i < 8; ++i) {
+ for(Int_t i = 0; i < 11; ++i) {
delete fX2In[i];
fX2In[i] = NULL;
delete fY2In[i];
AliFatal("No event plane received");
if (percentile < 0 || percentile > 100) {
- for(Int_t ring = 0; ring < 8; ++ring) esdEP->SetVZEROEPParams(ring,0.,0.,1.,1.,0.,0.,0.);
+ for(Int_t ring = 0; ring < 11; ++ring) esdEP->SetVZEROEPParams(ring,0.,0.,1.,1.,0.,0.,0.);
return;
}
- for(Int_t ring = 0; ring < 8; ++ring) {
+ for(Int_t ring = 0; ring < 11; ++ring) {
Int_t ibin = fX2In[ring]->FindBin(percentile);
if (fX2In[ring]->GetBinEntries(ibin) == 0) {
esdEP->SetVZEROEPParams(ring,0.,0.,1.,1.,0.,0.,0.);
// Set the flatenning parameters
// histograms from a given list
- for(Int_t i = 0; i < 8; ++i) {
+ for(Int_t i = 0; i < 11; ++i) {
fX2In[i] = (TProfile*)list->FindObject(Form("fX2_%d",i))->Clone(Form("fX2In_%d",i));
fX2In[i]->SetDirectory(0);
fY2In[i] = (TProfile*)list->FindObject(Form("fY2_%d",i))->Clone(Form("fY2In_%d",i));
fQContributionYsub1 = new TArrayF(0);
fQContributionXsub2 = new TArrayF(0);
fQContributionYsub2 = new TArrayF(0);
- for(Int_t i = 0; i < 8; ++i) {
+ for(Int_t i = 0; i < 11; ++i) {
fMeanX2[i]=fMeanY2[i]=0.;
fAPlus[i]=fAMinus[i]=1.;
fLambdaPlus[i]=fLambdaMinus[i]=0.;
if (fQsubRes)
target.fQsubRes = fQsubRes;
- for(Int_t i = 0; i < 8; ++i) {
+ for(Int_t i = 0; i < 11; ++i) {
target.fMeanX2[i]=fMeanX2[i];
target.fMeanY2[i]=fMeanY2[i];
target.fAPlus[i]=fAPlus[i];
TString method = x;
Double_t qx = 0, qy = 0;
if(method.CompareTo("Q")==0) return fEventplaneQ;
- else if(method.CompareTo("V0A")==0) return CalculateVZEROEventPlane(event, 4, 7, harmonic, qx, qy);
- else if(method.CompareTo("V0C")==0) return CalculateVZEROEventPlane(event, 0, 3, harmonic, qx, qy);
- else if(method.CompareTo("V0")==0) return CalculateVZEROEventPlane(event, 0, 7, harmonic, qx, qy);
+ else if(method.CompareTo("V0A")==0) return CalculateVZEROEventPlane(event, 8, harmonic, qx, qy);
+ else if(method.CompareTo("V0C")==0) return CalculateVZEROEventPlane(event, 9, harmonic, qx, qy);
+ else if(method.CompareTo("V0")==0) return CalculateVZEROEventPlane(event,10, harmonic, qx, qy);
return -1000.;
}
Double_t AliEventplane::CalculateVZEROEventPlane(const AliVEvent * event, Int_t firstRing, Int_t lastRing, Int_t harmonic, Double_t &qxTot, Double_t &qyTot) const
{
+ // Calculate the VZERO event-plane by summing rings
+ // The flatenning is done on every ring separately
if(!event) {
AliError("No Event received");
return -1000.;
Double_t totMult = 0.;
for(Int_t ring = firstRing; ring <=lastRing; ++ring) {
qx=qy=0.;
- Double_t trans[2][2];
- trans[0][0] = 1./(1.-fLambdaPlus[ring]*fLambdaMinus[ring]);
- trans[0][1] = -fLambdaMinus[ring]/(1.-fLambdaPlus[ring]*fLambdaMinus[ring]);
- trans[1][0] = -fLambdaPlus[ring]/(1.-fLambdaPlus[ring]*fLambdaMinus[ring]);
- trans[1][1] = 1./(1.-fLambdaPlus[ring]*fLambdaMinus[ring]);
Double_t multRing = 0.;
for(Int_t iCh = ring*8; iCh < (ring+1)*8; ++iCh) {
Double_t phi = TMath::Pi()/8. + TMath::Pi()/4.*(iCh%8);
Double_t qxPrime = qx - fMeanX2[ring];
Double_t qyPrime = qy - fMeanY2[ring];
// Twist
+ Double_t trans[2][2];
+ trans[0][0] = 1./(1.-fLambdaPlus[ring]*fLambdaMinus[ring]);
+ trans[0][1] = -fLambdaMinus[ring]/(1.-fLambdaPlus[ring]*fLambdaMinus[ring]);
+ trans[1][0] = -fLambdaPlus[ring]/(1.-fLambdaPlus[ring]*fLambdaMinus[ring]);
+ trans[1][1] = 1./(1.-fLambdaPlus[ring]*fLambdaMinus[ring]);
Double_t qxSeconde = trans[0][0]*qxPrime + trans[0][1]*qyPrime;
Double_t qySeconde = trans[1][0]*qxPrime + trans[1][1]*qyPrime;
// Rescaling
return (TMath::ATan2(qyTot,qxTot)/harmonic);
}
+Double_t AliEventplane::CalculateVZEROEventPlane(const AliVEvent * event, Int_t ring, Int_t harmonic, Double_t &qx, Double_t &qy) const
+{
+ // Calculate the VZERO event-plane from an individual ring
+ // Ring 8 - total V0A (rings 4-7), Ring 9 - total V0C (rings 0-3)
+ // Ring 10 - total V0 (rings 0-7)
+ if(!event) {
+ AliError("No Event received");
+ return -1000.;
+ }
+ AliVVZERO *vzeroData = event->GetVZEROData();
+ if(!vzeroData) {
+ AliError("Enable to get VZERO Data");
+ return -1000.;
+ }
+ if(harmonic <= 0) {
+ AliError("Required harmonic is less or equal to 0");
+ return -1000.;
+ }
+
+ qx=qy=0.;
+ Double_t multRing = 0.;
+ for(Int_t iCh = ring*8; iCh < (ring+1)*8; ++iCh) {
+ Double_t phi = TMath::Pi()/8. + TMath::Pi()/4.*(iCh%8);
+ Double_t mult = event->GetVZEROEqMultiplicity(iCh);
+ qx += mult*TMath::Cos(harmonic*phi);
+ qy += mult*TMath::Sin(harmonic*phi);
+ multRing += mult;
+ }
+
+ // In case of no hits return an invalid event-plane angle
+ if (multRing < 1e-6) return -999;
+
+ if (harmonic == 2) {
+ // Recentering
+ Double_t qxPrime = qx - fMeanX2[ring];
+ Double_t qyPrime = qy - fMeanY2[ring];
+ // Twist
+ Double_t trans[2][2];
+ trans[0][0] = 1./(1.-fLambdaPlus[ring]*fLambdaMinus[ring]);
+ trans[0][1] = -fLambdaMinus[ring]/(1.-fLambdaPlus[ring]*fLambdaMinus[ring]);
+ trans[1][0] = -fLambdaPlus[ring]/(1.-fLambdaPlus[ring]*fLambdaMinus[ring]);
+ trans[1][1] = 1./(1.-fLambdaPlus[ring]*fLambdaMinus[ring]);
+ Double_t qxSeconde = trans[0][0]*qxPrime + trans[0][1]*qyPrime;
+ Double_t qySeconde = trans[1][0]*qxPrime + trans[1][1]*qyPrime;
+ // Rescaling
+ Double_t qxTierce = qxSeconde/fAPlus[ring];
+ Double_t qyTierce = qySeconde/fAMinus[ring];
+ // 4th Fourier momenta in order to flatten the EP within a sector
+ Double_t psi = TMath::ATan2(qyTierce,qxTierce)/harmonic;
+ Double_t deltaPsi = (fCos8Psi[ring]*TMath::Sin(2.*4.*psi))/2.;
+ Double_t qxQuarte = qxTierce*TMath::Cos(2.*deltaPsi) - qyTierce*TMath::Sin(2.*deltaPsi);
+ Double_t qyQuarte = qxTierce*TMath::Sin(2.*deltaPsi) + qyTierce*TMath::Cos(2.*deltaPsi);
+ qx = qxQuarte;
+ qy = qyQuarte;
+ }
+
+ return (TMath::ATan2(qy,qx)/harmonic);
+}
+
void AliEventplane::SetVZEROEPParams(Int_t ring,
Double_t meanX2, Double_t meanY2,
Double_t aPlus, Double_t aMinus,
{
// Set the VZERO event-plane
// flatenning parameters
- if (ring < 0 || ring >=8) AliFatal(Form("Bad ring index (%d)",ring));
+ if (ring < 0 || ring >= 11) AliFatal(Form("Bad ring index (%d)",ring));
fMeanX2[ring] = meanX2;
fMeanY2[ring] = meanY2;
Double_t GetQsubRes();
Bool_t IsEventInEventplaneClass(Double_t a, Double_t b, const char *method);
Double_t CalculateVZEROEventPlane(const AliVEvent *event, Int_t firstRing, Int_t lastRing, Int_t harmonic, Double_t &qxTot, Double_t &qyTot) const;
+ Double_t CalculateVZEROEventPlane(const AliVEvent * event, Int_t ring, Int_t harmonic, Double_t &qx, Double_t &qy) const;
void SetVZEROEPParams(Int_t ring,
Double_t meanX2, Double_t meanY2,
Double_t aPlus, Double_t aMinus,
TVector2* fQsub1; // Q-Vector of subevent 1
TVector2* fQsub2; // Q-Vector of subevent 2
Double_t fQsubRes; // Difference of EP angles of subevents
- Double_t fMeanX2[8]; // Mean Q^2_X for VZERO EP
- Double_t fMeanY2[8]; // Mean Q^2_Y for VZERO EP
- Double_t fAPlus[8]; // Q^2_X rescaling parameter for VZERO EP
- Double_t fAMinus[8]; // Q^2_Y rescaling parameter for VZERO EP
- Double_t fLambdaPlus[8]; // Q^2_X twisting parameter for VZERO EP
- Double_t fLambdaMinus[8]; // Q^2_Y twisting parameter for VZERO EP
- Double_t fCos8Psi[8]; // 4th Fourier momenta used to flatten VZERO EP within a sector
+ Double_t fMeanX2[11]; // Mean Q^2_X for VZERO EP
+ Double_t fMeanY2[11]; // Mean Q^2_Y for VZERO EP
+ Double_t fAPlus[11]; // Q^2_X rescaling parameter for VZERO EP
+ Double_t fAMinus[11]; // Q^2_Y rescaling parameter for VZERO EP
+ Double_t fLambdaPlus[11]; // Q^2_X twisting parameter for VZERO EP
+ Double_t fLambdaMinus[11]; // Q^2_Y twisting parameter for VZERO EP
+ Double_t fCos8Psi[11]; // 4th Fourier momenta used to flatten VZERO EP within a sector
- ClassDef(AliEventplane, 4)
+ ClassDef(AliEventplane, 5)
};
#endif //ALIEVENTPLANE_H