#include "Riostream.h"
#include "TFile.h"
#include "TList.h"
#include "TH1.h"
#include "TH2F.h"
#include "TArrayD.h"
#include "TProfile.h"
#include "AliMCEvent.h"
#include "AliMCParticle.h"
#include "AliCFManager.h"
#include "AliESDtrack.h"
#include "AliESDPmdTrack.h"
#include "AliESDEvent.h"
#include "AliAODEvent.h"
#include "AliOADBContainer.h"
#include "AliGenCocktailEventHeader.h"
#include "AliGenEposEventHeader.h"
#include "AliGenHijingEventHeader.h"
#include "AliGenGeVSimEventHeader.h"
#include "AliCollisionGeometry.h"
#include "AliMultiplicity.h"
#include "AliFlowTrackCuts.h"
#include "AliFlowEventSimple.h"
#include "AliFlowTrack.h"
#include "AliFlowVector.h"
#include "AliFlowEvent.h"
#include "AliLog.h"
using std::endl;
using std::cout;
ClassImp(AliFlowEvent)
AliFlowEvent::AliFlowEvent():
AliFlowEventSimple(), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0), fChi2A(0x0), fChi2C(0x0), fChi3A(0x0), fChi3C(0x0)
{
for(Int_t i(0); i < 9; i++) {
for(Int_t j(0); j < 2; j++) {
for(Int_t k(0); k < 2; k++) {
fMeanQ[i][j][k] = 0.;
fWidthQ[i][j][k] = 0.;
fMeanQv3[i][j][k] = 0.;
fWidthQv3[i][j][k] = 0.;
}
}
}
cout << "AliFlowEvent: Default constructor to be used only by root for io" << endl;
}
AliFlowEvent::AliFlowEvent(Int_t n):
AliFlowEventSimple(n), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0), fChi2A(0x0), fChi2C(0x0), fChi3A(0x0), fChi3C(0x0)
{
for(Int_t i(0); i < 9; i++) {
for(Int_t j(0); j < 2; j++) {
for(Int_t k(0); k < 2; k++) {
fMeanQ[i][j][k] = 0.;
fWidthQ[i][j][k] = 0.;
fMeanQv3[i][j][k] = 0.;
fWidthQv3[i][j][k] = 0.;
}
}
}
}
AliFlowEvent::AliFlowEvent(const AliFlowEvent& event):
AliFlowEventSimple(event), fApplyRecentering(event.fApplyRecentering), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0), fChi2A(0x0), fChi2C(0x0), fChi3A(0x0), fChi3C(0x0)
{
for(Int_t i(0); i < 9; i++) {
for(Int_t j(0); j < 2; j++) {
for(Int_t k(0); k < 2; k++) {
fMeanQ[i][j][k] = 0.;
fWidthQ[i][j][k] = 0.;
fMeanQv3[i][j][k] = 0.;
fWidthQv3[i][j][k] = 0.;
}
}
}
}
AliFlowEvent& AliFlowEvent::operator=(const AliFlowEvent& event)
{
if (&event==this) return *this;
fApplyRecentering = event.fApplyRecentering;
fCachedRun = event.fCachedRun;
fVZEROcentralityBin = event.fVZEROcentralityBin;
fEvent = 0x0;
fChi2A = 0x0;
fChi2C = 0x0;
fChi3A = 0x0;
fChi3C = 0x0;
for(Int_t i(0); i < 9; i++) {
for(Int_t j(0); j < 2; j++) {
for(Int_t k(0); k < 2; k++) {
fMeanQ[i][j][k] = event.fMeanQ[i][j][k];
fWidthQ[i][j][k] = event.fWidthQ[i][j][k];
fMeanQv3[i][j][k] = event.fMeanQv3[i][j][k];
fWidthQv3[i][j][k] = event.fWidthQv3[i][j][k];
}
}
}
AliFlowEventSimple::operator=(event);
return *this;
}
AliFlowTrack* AliFlowEvent::GetTrack(Int_t i)
{
if (i>=fNumberOfTracks) return NULL;
AliFlowTrack* pTrack = static_cast<AliFlowTrack*>(fTrackCollection->At(i)) ;
return pTrack;
}
void AliFlowEvent::SetMCReactionPlaneAngle(const AliMCEvent* mcEvent)
{
if (!strcmp(mcEvent-> GenEventHeader()->GetName(),"Cocktail Header"))
{
AliGenCocktailEventHeader *headerC = dynamic_cast<AliGenCocktailEventHeader *> (mcEvent-> GenEventHeader());
if (headerC)
{
TList *lhd = headerC->GetHeaders();
if (lhd)
{
AliGenHijingEventHeader *hdh = dynamic_cast<AliGenHijingEventHeader *> (lhd->At(0));
if (hdh) AliFlowEventSimple::SetMCReactionPlaneAngle( hdh->ReactionPlaneAngle() );
}
}
}
else if (!strcmp(mcEvent-> GenEventHeader()->GetName(),"Therminator"))
{
AliGenHijingEventHeader* headerH = dynamic_cast<AliGenHijingEventHeader*>(mcEvent->GenEventHeader());
if (headerH) AliFlowEventSimple::SetMCReactionPlaneAngle( headerH->ReactionPlaneAngle() );
}
else if (!strcmp(mcEvent-> GenEventHeader()->GetName(),"GeVSim header"))
{
AliGenGeVSimEventHeader* headerG = dynamic_cast<AliGenGeVSimEventHeader*>(mcEvent->GenEventHeader());
if (headerG) AliFlowEventSimple::SetMCReactionPlaneAngle( headerG->GetEventPlane() );
}
else if (!strcmp(mcEvent-> GenEventHeader()->GetName(),"Hijing"))
{
AliGenHijingEventHeader* headerH = dynamic_cast<AliGenHijingEventHeader*>(mcEvent->GenEventHeader());
if (headerH) AliFlowEventSimple::SetMCReactionPlaneAngle( headerH->ReactionPlaneAngle() );
}
else if (!strcmp(mcEvent-> GenEventHeader()->GetName(),"Ampt"))
{
AliGenHijingEventHeader* headerH = dynamic_cast<AliGenHijingEventHeader*>(mcEvent->GenEventHeader());
if (headerH) AliFlowEventSimple::SetMCReactionPlaneAngle( headerH->ReactionPlaneAngle() );
}
else if (!strcmp(mcEvent->GenEventHeader()->GetName(),"EPOS"))
{
AliGenEposEventHeader* headerE = dynamic_cast<AliGenEposEventHeader*>(mcEvent->GenEventHeader());
if (headerE) AliFlowEventSimple::SetMCReactionPlaneAngle( headerE->ReactionPlaneAngle() );
}
else
{
AliCollisionGeometry* header = dynamic_cast<AliCollisionGeometry*>(mcEvent->GenEventHeader());
if (header) AliFlowEventSimple::SetMCReactionPlaneAngle( header->ReactionPlaneAngle() );
}
}
AliFlowEvent::AliFlowEvent( const AliMCEvent* anInput,
const AliCFManager* rpCFManager,
const AliCFManager* poiCFManager):
AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0), fChi2A(0x0), fChi2C(0x0), fChi3A(0x0), fChi3C(0x0)
{
for(Int_t i(0); i < 9; i++) {
for(Int_t j(0); j < 2; j++) {
for(Int_t k(0); k < 2; k++) {
fMeanQ[i][j][k] = 0.;
fWidthQ[i][j][k] = 0.;
fMeanQv3[i][j][k] = 0.;
fWidthQv3[i][j][k] = 0.;
}
}
}
Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
for (Int_t itrkN=0; itrkN<iNumberOfInputTracks; itrkN++)
{
AliMCParticle* pParticle = dynamic_cast<AliMCParticle*>(anInput->GetTrack(itrkN));
if (!pParticle) continue;
Bool_t rpOK = kTRUE;
Bool_t poiOK = kTRUE;
if (rpCFManager && poiCFManager)
{
rpOK = rpCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pParticle);
poiOK = poiCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pParticle);
}
if (!(rpOK||poiOK)) continue;
AliFlowTrack* pTrack = new AliFlowTrack(pParticle);
pTrack->SetSource(AliFlowTrack::kFromMC);
if (rpOK && rpCFManager)
{
pTrack->SetForRPSelection(kTRUE);
IncrementNumberOfPOIs(0);
}
if (poiOK && poiCFManager)
{
pTrack->SetForPOISelection(kTRUE);
IncrementNumberOfPOIs(1);
}
AddTrack(pTrack) ;
}
SetMCReactionPlaneAngle(anInput);
}
AliFlowEvent::AliFlowEvent( const AliESDEvent* anInput,
const AliCFManager* rpCFManager,
const AliCFManager* poiCFManager ):
AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0), fChi2A(0x0), fChi2C(0x0), fChi3A(0x0), fChi3C(0x0)
{
for(Int_t i(0); i < 9; i++) {
for(Int_t j(0); j < 2; j++) {
for(Int_t k(0); k < 2; k++) {
fMeanQ[i][j][k] = 0.;
fWidthQ[i][j][k] = 0.;
fMeanQv3[i][j][k] = 0.;
fWidthQv3[i][j][k] = 0.;
}
}
}
Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
for (Int_t itrkN=0; itrkN<iNumberOfInputTracks; itrkN++)
{
AliESDtrack* pParticle = anInput->GetTrack(itrkN);
Bool_t rpOK = kTRUE;
Bool_t poiOK = kTRUE;
if (rpCFManager && poiCFManager)
{
rpOK = ( rpCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
rpCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle));
poiOK = ( poiCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
poiCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle));
}
if (!(rpOK || poiOK)) continue;
AliFlowTrack* pTrack = new AliFlowTrack(pParticle);
pTrack->SetSource(AliFlowTrack::kFromESD);
if(rpOK && rpCFManager)
{
pTrack->SetForRPSelection(kTRUE);
IncrementNumberOfPOIs(0);
}
if(poiOK && poiCFManager)
{
pTrack->SetForPOISelection(kTRUE);
IncrementNumberOfPOIs(1);
}
AddTrack(pTrack);
}
}
AliFlowEvent::AliFlowEvent( const AliAODEvent* anInput,
const AliCFManager* rpCFManager,
const AliCFManager* poiCFManager):
AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0), fChi2A(0x0), fChi2C(0x0), fChi3A(0x0), fChi3C(0x0)
{
for(Int_t i(0); i < 9; i++) {
for(Int_t j(0); j < 2; j++) {
for(Int_t k(0); k < 2; k++) {
fMeanQ[i][j][k] = 0.;
fWidthQ[i][j][k] = 0.;
fMeanQv3[i][j][k] = 0.;
fWidthQv3[i][j][k] = 0.;
}
}
}
Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
for (Int_t itrkN=0; itrkN<iNumberOfInputTracks; itrkN++)
{
AliAODTrack* pParticle = dynamic_cast<AliAODTrack*>(anInput->GetTrack(itrkN));
if(!pParticle) AliFatal("Not a standard AOD");
Bool_t rpOK = kTRUE;
Bool_t poiOK = kTRUE;
if (rpCFManager && poiCFManager)
{
rpOK = ( rpCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
rpCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle));
poiOK = ( poiCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
poiCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle));
}
if (!(rpOK || poiOK)) continue;
AliFlowTrack* pTrack = new AliFlowTrack(pParticle);
pTrack->SetSource(AliFlowTrack::kFromAOD);
if (rpOK )
{
pTrack->SetForRPSelection(kTRUE);
IncrementNumberOfPOIs(0);
}
if (poiOK )
{
pTrack->SetForPOISelection(kTRUE);
IncrementNumberOfPOIs(1);
}
AddTrack(pTrack);
}
}
AliFlowEvent::AliFlowEvent( const AliESDEvent* anInput,
const AliMCEvent* anInputMc,
KineSource anOption,
const AliCFManager* rpCFManager,
const AliCFManager* poiCFManager ):
AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0), fChi2A(0x0), fChi2C(0x0), fChi3A(0x0), fChi3C(0x0)
{
for(Int_t i(0); i < 9; i++) {
for(Int_t j(0); j < 2; j++) {
for(Int_t k(0); k < 2; k++) {
fMeanQ[i][j][k] = 0.;
fWidthQ[i][j][k] = 0.;
fMeanQv3[i][j][k] = 0.;
fWidthQv3[i][j][k] = 0.;
}
}
}
if (anOption==kNoKine)
{
AliFatal("WRONG OPTION IN AliFlowEventMaker::FillTracks(AliESDEvent* anInput, AliMCEvent* anInputMc, KineSource anOption)");
exit(1);
}
Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
Int_t iNumberOfInputTracksMC = anInputMc->GetNumberOfTracks() ;
if (iNumberOfInputTracksMC==-1)
{
AliError("Skipping Event -- No MC information available for this event");
return;
}
for (Int_t itrkN=0; itrkN<iNumberOfInputTracks; itrkN++)
{
AliESDtrack* pParticle = anInput->GetTrack(itrkN);
Int_t iLabel = pParticle->GetLabel();
AliMCParticle* pMcParticle = (AliMCParticle*) anInputMc->GetTrack(TMath::Abs(iLabel));
if (TMath::Abs(pParticle->GetLabel())!=pMcParticle->Label())
AliWarning(Form("pParticle->GetLabel()!=pMcParticle->Label(), %i, %i", pParticle->GetLabel(), pMcParticle->Label()));
Bool_t rpOK = kFALSE;
Bool_t poiOK = kFALSE;
if (rpCFManager && poiCFManager)
{
if(anOption == kESDkine)
{
if (rpCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pMcParticle,"mcGenCuts1") &&
rpCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle))
rpOK=kTRUE;
if (poiCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pMcParticle,"mcGenCuts2") &&
poiCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle))
poiOK=kTRUE;
}
else if (anOption == kMCkine)
{
if (rpCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pMcParticle))
rpOK=kTRUE;
if (poiCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,pMcParticle))
poiOK=kTRUE;
}
}
if (!(rpOK || poiOK)) continue;
AliFlowTrack* pTrack = NULL;
if(anOption == kESDkine)
{
pTrack = new AliFlowTrack(pParticle);
}
else if (anOption == kMCkine)
{
pTrack = new AliFlowTrack(pMcParticle);
}
if (rpOK && rpCFManager)
{
IncrementNumberOfPOIs(0);
pTrack->SetForRPSelection();
}
if (poiOK && poiCFManager)
{
IncrementNumberOfPOIs(1);
pTrack->SetForPOISelection();
}
AddTrack(pTrack);
}
SetMCReactionPlaneAngle(anInputMc);
}
AliFlowEvent::AliFlowEvent( const AliESDEvent* anInput,
const AliMultiplicity* anInputTracklets,
const AliCFManager* poiCFManager ):
AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0), fChi2A(0x0), fChi2C(0x0), fChi3A(0x0), fChi3C(0x0)
{
for(Int_t i(0); i < 9; i++) {
for(Int_t j(0); j < 2; j++) {
for(Int_t k(0); k < 2; k++) {
fMeanQ[i][j][k] = 0.;
fWidthQ[i][j][k] = 0.;
fMeanQv3[i][j][k] = 0.;
fWidthQv3[i][j][k] = 0.;
}
}
}
Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
for (Int_t itrkN=0; itrkN<iNumberOfInputTracks; itrkN++)
{
AliESDtrack* pParticle = anInput->GetTrack(itrkN);
Bool_t poiOK = kTRUE;
if (poiCFManager)
{
poiOK = ( poiCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
poiCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle));
}
if (!poiOK) continue;
AliFlowTrack* pTrack = new AliFlowTrack(pParticle);
if(poiOK && poiCFManager)
{
IncrementNumberOfPOIs(1);
pTrack->SetForPOISelection(kTRUE);
pTrack->SetSource(AliFlowTrack::kFromESD);
}
AddTrack(pTrack);
}
anInputTracklets = anInput->GetMultiplicity();
Int_t multSPD = anInputTracklets->GetNumberOfTracklets();
for (Int_t itracklet=0; itracklet<multSPD; ++itracklet) {
Float_t thetaTr= anInputTracklets->GetTheta(itracklet);
Float_t phiTr= anInputTracklets->GetPhi(itracklet);
Float_t etaTr = -TMath::Log(TMath::Tan(thetaTr/2.));
AliFlowTrack* pTrack = new AliFlowTrack();
pTrack->SetPt(0.0);
pTrack->SetEta(etaTr);
pTrack->SetPhi(phiTr);
IncrementNumberOfPOIs(0);
pTrack->SetForRPSelection(kTRUE);
pTrack->SetSource(AliFlowTrack::kFromTracklet);
AddTrack(pTrack);
}
}
AliFlowEvent::AliFlowEvent( const AliESDEvent* esd,
const AliCFManager* poiCFManager,
Bool_t hybrid):
AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0), fChi2A(0x0), fChi2C(0x0), fChi3A(0x0), fChi3C(0x0)
{
for(Int_t i(0); i < 9; i++) {
for(Int_t j(0); j < 2; j++) {
for(Int_t k(0); k < 2; k++) {
fMeanQ[i][j][k] = 0.;
fWidthQ[i][j][k] = 0.;
fMeanQv3[i][j][k] = 0.;
fWidthQv3[i][j][k] = 0.;
}
}
}
Int_t iNumberOfInputTracks = esd->GetNumberOfTracks() ;
Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
AliESDtrack trackTPC;
for (Int_t itrkN=0; itrkN<iNumberOfInputTracks; itrkN++)
{
if (!esd->GetTrack(itrkN)) continue;
Bool_t useTPC = kFALSE;
AliESDtrack* pParticle = esd->GetTrack(itrkN);
Bool_t poiOK = kTRUE;
if (poiCFManager)
{
poiOK = ( poiCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
poiCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle));
}
if (!(poiOK)) continue;
AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)pParticle->GetTPCInnerParam();
if (tpcTrack)
{
useTPC = kTRUE;
const AliESDVertex *vertexSPD = esd->GetPrimaryVertexSPD();
const AliESDVertex *vertexTPC = esd->GetPrimaryVertexTPC();
AliExternalTrackParam copy(*tpcTrack);
if(hybrid)
copy.PropagateToDCA(vertexSPD,esd->GetMagneticField(),100.,dca,cov);
else
copy.PropagateToDCA(vertexTPC,esd->GetMagneticField(),100.,dca,cov);
}
AliFlowTrack* pTrack = new AliFlowTrack(pParticle);
pTrack->SetSource(AliFlowTrack::kFromESD);
if(poiOK && poiCFManager)
{
pTrack->SetForPOISelection(kTRUE);
IncrementNumberOfPOIs(1);
}
if(useTPC)
{
pTrack->SetForRPSelection(kTRUE);
IncrementNumberOfPOIs(0);
}
AddTrack(pTrack);
}
}
AliFlowEvent::AliFlowEvent( const AliESDEvent* anInput,
const TH2F* anInputFMDhist,
const AliCFManager* poiCFManager ):
AliFlowEventSimple(20), fApplyRecentering(-1), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0), fChi2A(0x0), fChi2C(0x0), fChi3A(0x0), fChi3C(0x0)
{
for(Int_t i(0); i < 9; i++) {
for(Int_t j(0); j < 2; j++) {
for(Int_t k(0); k < 2; k++) {
fMeanQ[i][j][k] = 0.;
fWidthQ[i][j][k] = 0.;
fMeanQv3[i][j][k] = 0.;
fWidthQv3[i][j][k] = 0.;
}
}
}
Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
for (Int_t itrkN=0; itrkN<iNumberOfInputTracks; itrkN++)
{
AliESDtrack* pParticle = anInput->GetTrack(itrkN);
Bool_t poiOK = kTRUE;
if (poiCFManager)
{
poiOK = ( poiCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
poiCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle));
}
if (!poiOK) continue;
AliFlowTrack* pTrack = new AliFlowTrack(pParticle);
if(poiOK && poiCFManager)
{
IncrementNumberOfPOIs(1);
pTrack->SetForPOISelection(kTRUE);
pTrack->SetSource(AliFlowTrack::kFromESD);
}
AddTrack(pTrack);
}
Int_t iBinsEta = anInputFMDhist->GetNbinsX();
Int_t iBinsPhi = anInputFMDhist->GetNbinsY();
for (Int_t iEta = 1; iEta <= iBinsEta; iEta++){
Double_t etaFMD = anInputFMDhist->GetXaxis()->GetBinCenter(iEta);
for (Int_t iPhi = 1; iPhi <= iBinsPhi; iPhi++){
Double_t phiFMD = anInputFMDhist->GetYaxis()->GetBinCenter(iPhi);
Double_t weightFMD = anInputFMDhist->GetBinContent(iEta,iPhi);
if (weightFMD > 0.0) {
AliFlowTrack* pTrack = new AliFlowTrack();
pTrack->SetPt(0.0);
pTrack->SetEta(etaFMD);
pTrack->SetPhi(phiFMD);
pTrack->SetWeight(weightFMD);
pTrack->TagRP();
IncrementNumberOfPOIs(0);
pTrack->SetSource(AliFlowTrack::kFromFMD);
AddTrack(pTrack);
}
}
}
}
void AliFlowEvent::FindDaughters(Bool_t keepDaughtersInRPselection)
{
for (Int_t iTrack=0; iTrack<fMothersCollection->GetEntriesFast(); iTrack++)
{
AliFlowTrack* mother = static_cast<AliFlowTrack*>(fMothersCollection->At(iTrack));
if (!mother) continue;
if (mother->GetNDaughters()<1) continue;
for (Int_t iDaughterCandidate=0; iDaughterCandidate<fNumberOfTracks; iDaughterCandidate++)
{
AliFlowTrack* daughterCandidate = static_cast<AliFlowTrack*>(fTrackCollection->At(iDaughterCandidate));
Int_t esdIndexDaughterCandidate = daughterCandidate->GetID();
for (Int_t iDaughter=0; iDaughter<mother->GetNDaughters(); iDaughter++)
{
Int_t esdIndexDaughter = mother->GetIDDaughter(iDaughter);
if (esdIndexDaughter==esdIndexDaughterCandidate)
{
mother->SetDaughter(iDaughter,daughterCandidate);
daughterCandidate->SetForRPSelection(keepDaughtersInRPselection);
}
}
}
}
}
void AliFlowEvent::Fill( AliFlowTrackCuts* rpCuts,
AliFlowTrackCuts* poiCuts )
{
ClearFast();
if (!rpCuts || !poiCuts) return;
AliFlowTrackCuts::trackParameterType sourceRP = rpCuts->GetParamType();
AliFlowTrackCuts::trackParameterType sourcePOI = poiCuts->GetParamType();
AliFlowTrack* pTrack=NULL;
if (sourceRP == AliFlowTrackCuts::kVZERO) {
SetVZEROCalibrationForTrackCuts(rpCuts);
if(!rpCuts->GetApplyRecentering()) {
fApplyRecentering = -1;
}
}
if (sourcePOI == AliFlowTrackCuts::kVZERO) {
SetVZEROCalibrationForTrackCuts(poiCuts);
}
if (sourceRP==sourcePOI)
{
Int_t numberOfInputObjects = rpCuts->GetNumberOfInputObjects();
for (Int_t i=0; i<numberOfInputObjects; i++)
{
TObject* particle = rpCuts->GetInputObject(i);
Bool_t rp = rpCuts->IsSelected(particle,i);
Bool_t poi = poiCuts->IsSelected(particle,i);
if (!(rp||poi)) continue;
if (rp)
{
pTrack = rpCuts->FillFlowTrack(fTrackCollection,fNumberOfTracks);
if (!pTrack) continue;
pTrack->Tag(0); IncrementNumberOfPOIs(0);
if (poi) {pTrack->Tag(1); IncrementNumberOfPOIs(1);}
if (pTrack->GetNDaughters()>0) fMothersCollection->Add(pTrack);
}
else if (poi)
{
pTrack = poiCuts->FillFlowTrack(fTrackCollection,fNumberOfTracks);
if (!pTrack) continue;
pTrack->Tag(1); IncrementNumberOfPOIs(1);
if (pTrack->GetNDaughters()>0) fMothersCollection->Add(pTrack);
}
fNumberOfTracks++;
}
}
else if (sourceRP!=sourcePOI)
{
for (Int_t i=0; i<poiCuts->GetNumberOfInputObjects(); i++)
{
TObject* particle = poiCuts->GetInputObject(i);
Bool_t poi = poiCuts->IsSelected(particle,i);
if (!poi) continue;
pTrack = poiCuts->FillFlowTrack(fTrackCollection,fNumberOfTracks);
if (!pTrack) continue;
pTrack->Tag(1);
IncrementNumberOfPOIs(1);
fNumberOfTracks++;
if (pTrack->GetNDaughters()>0) fMothersCollection->Add(pTrack);
}
Int_t numberOfInputObjects = rpCuts->GetNumberOfInputObjects();
for (Int_t i=0; i<numberOfInputObjects; i++)
{
TObject* particle = rpCuts->GetInputObject(i);
Bool_t rp = rpCuts->IsSelected(particle,i);
if (!rp) continue;
pTrack = rpCuts->FillFlowTrack(fTrackCollection,fNumberOfTracks);
if (!pTrack) continue;
pTrack->Tag(0);
IncrementNumberOfPOIs(0);
fNumberOfTracks++;
if (pTrack->GetNDaughters()>0) fMothersCollection->Add(pTrack);
}
}
}
void AliFlowEvent::InsertTrack(AliFlowTrack *track) {
AliFlowTrack *pTrack = ReuseTrack( fNumberOfTracks++ );
*pTrack = *track;
if (track->GetNDaughters()>0)
{
fMothersCollection->Add(pTrack);
}
return;
}
AliFlowTrack* AliFlowEvent::ReuseTrack(Int_t i)
{
AliFlowTrack* pTrack = static_cast<AliFlowTrack*>(fTrackCollection->At(i));
if (pTrack)
{
pTrack->Clear();
}
else
{
pTrack = new AliFlowTrack();
fTrackCollection->AddAtAndExpand(pTrack,i);
}
return pTrack;
}
AliFlowEvent::AliFlowEvent( AliFlowTrackCuts* rpCuts,
AliFlowTrackCuts* poiCuts ):
AliFlowEventSimple(20), fApplyRecentering(kFALSE), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0), fChi2A(0x0), fChi2C(0x0), fChi3A(0x0), fChi3C(0x0)
{
for(Int_t i(0); i < 9; i++) {
for(Int_t j(0); j < 2; j++) {
for(Int_t k(0); k < 2; k++) {
fMeanQ[i][j][k] = 0.;
fWidthQ[i][j][k] = 0.;
fMeanQv3[i][j][k] = 0.;
fWidthQv3[i][j][k] = 0.;
}
}
}
Fill(rpCuts,poiCuts);
}
AliFlowEvent::AliFlowEvent( const AliESDEvent* anInput,
const AliESDPmdTrack *pmdtracks,
const AliCFManager* poiCFManager ):
AliFlowEventSimple(20), fApplyRecentering(kFALSE), fCachedRun(-1), fVZEROcentralityBin(-1), fEvent(0x0), fChi2A(0x0), fChi2C(0x0), fChi3A(0x0), fChi3C(0x0)
{
for(Int_t i(0); i < 9; i++) {
for(Int_t j(0); j < 2; j++) {
for(Int_t k(0); k < 2; k++) {
fMeanQ[i][j][k] = 0.;
fWidthQ[i][j][k] = 0.;
fMeanQv3[i][j][k] = 0.;
fWidthQv3[i][j][k] = 0.;
}
}
}
Float_t GetPmdEta(Float_t xPos, Float_t yPos, Float_t zPos);
Float_t GetPmdPhi(Float_t xPos, Float_t yPos);
Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
for (Int_t itrkN=0; itrkN<iNumberOfInputTracks; itrkN++)
{
AliESDtrack* pParticle = anInput->GetTrack(itrkN);
Bool_t poiOK = kTRUE;
if (poiCFManager)
{
poiOK = ( poiCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
poiCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle));
}
if (!poiOK) continue;
AliFlowTrack* pTrack = new AliFlowTrack(pParticle);
if(poiOK && poiCFManager)
{
IncrementNumberOfPOIs(1);
pTrack->SetForPOISelection(kTRUE);
pTrack->SetSource(AliFlowTrack::kFromESD);
}
AddTrack(pTrack);
}
Int_t npmdcl = anInput->GetNumberOfPmdTracks();
printf("======There are %d PMD tracks in this event\n-------",npmdcl);
for(Int_t iclust=0; iclust < npmdcl; iclust++){
pmdtracks = anInput->GetPmdTrack(iclust);
Int_t det = pmdtracks->GetDetector();
Float_t clsX = pmdtracks->GetClusterX();
Float_t clsY = pmdtracks->GetClusterY();
Float_t clsZ = pmdtracks->GetClusterZ();
Float_t ncell = pmdtracks->GetClusterCells();
Float_t adc = pmdtracks->GetClusterADC();
Float_t etacls = GetPmdEta(clsX,clsY,clsZ);
Float_t phicls = GetPmdPhi(clsX,clsY);
AliFlowTrack* pTrack = new AliFlowTrack();
if(det == 0 && adc > 270 && ncell > 1){
pTrack->SetPt(0.0);
pTrack->SetEta(etacls);
pTrack->SetPhi(phicls);
IncrementNumberOfPOIs(0);
pTrack->SetForRPSelection(kTRUE);
pTrack->SetSource(AliFlowTrack::kFromPMD);
AddTrack(pTrack);
}
}
}
Float_t GetPmdEta(Float_t xPos, Float_t yPos, Float_t zPos)
{
Float_t rpxpy, theta, eta;
rpxpy = TMath::Sqrt(xPos*xPos + yPos*yPos);
theta = TMath::ATan2(rpxpy,zPos);
eta = -TMath::Log(TMath::Tan(0.5*theta));
return eta;
}
Float_t GetPmdPhi(Float_t xPos, Float_t yPos)
{
Float_t pybypx, phi = 0., phi1;
if(xPos==0)
{
if(yPos>0) phi = 90.;
if(yPos<0) phi = 270.;
}
if(xPos != 0)
{
pybypx = yPos/xPos;
if(pybypx < 0) pybypx = - pybypx;
phi1 = TMath::ATan(pybypx)*180./3.14159;
if(xPos > 0 && yPos > 0) phi = phi1;
if(xPos < 0 && yPos > 0) phi = 180 - phi1;
if(xPos < 0 && yPos < 0) phi = 180 + phi1;
if(xPos > 0 && yPos < 0) phi = 360 - phi1;
}
phi = phi*3.14159/180.;
return phi;
}
AliFlowVector AliFlowEvent::GetQ(Int_t n, TList *weightsList, Bool_t usePhiWeights, Bool_t usePtWeights, Bool_t useEtaWeights)
{
AliFlowVector vQ = AliFlowEventSimple::GetQ(n, weightsList, usePhiWeights, usePhiWeights, useEtaWeights);
if(fApplyRecentering == 2010) {
AliFlowVector Qarray[2];
AliFlowEvent::Get2Qsub(Qarray, n, weightsList, usePhiWeights, usePtWeights, useEtaWeights);
AliFlowVector vA = Qarray[0];
AliFlowVector vB = Qarray[1];
Double_t chiA(1.), chiC(1.), dQX(0.), dQY(0.);
if(n==2) {
chiA = fChi2A->At(fVZEROcentralityBin);
chiC = fChi2C->At(fVZEROcentralityBin);
} else if (n==3) {
chiA = fChi3A->At(fVZEROcentralityBin);
chiC = fChi3C->At(fVZEROcentralityBin);
}
dQX = chiA*chiA*vB.X()+chiC*chiC*vA.X();
dQY = chiA*chiA*vB.Y()+chiC*chiC*vA.Y();
vQ.Set(dQX, dQY);
} else if (fApplyRecentering == 2011) {
Double_t dQX = 0.;
Double_t dQY = 0.;
if(fEvent && fEvent->GetEventplane()) {
fEvent->GetEventplane()->CalculateVZEROEventPlane(fEvent, 10, n, dQX, dQY);
vQ.Set(dQX, dQY);
}
}
return vQ;
}
void AliFlowEvent::Get2Qsub(AliFlowVector* Qarray, Int_t n, TList *weightsList, Bool_t usePhiWeights, Bool_t usePtWeights, Bool_t useEtaWeights)
{
AliFlowEventSimple::Get2Qsub(Qarray, n, weightsList, usePhiWeights, usePtWeights, useEtaWeights);
AliFlowVector vA = Qarray[0];
AliFlowVector vB = Qarray[1];
if (fApplyRecentering == 2010)
{
Double_t Qxc(vA.X());
Double_t Qyc(vA.Y());
Double_t Qxa(vB.X());
Double_t Qya(vB.Y());
Double_t Qxamean(0);
Double_t Qxarms(1);
Double_t Qyamean(0);
Double_t Qyarms(1);
Double_t Qxcmean(0);
Double_t Qxcrms(1);
Double_t Qycmean(0);
Double_t Qycrms(1);
if( n == 2) {
Qxamean = fMeanQ[fVZEROcentralityBin][1][0];
Qxarms = fWidthQ[fVZEROcentralityBin][1][0];
Qyamean = fMeanQ[fVZEROcentralityBin][1][1];
Qyarms = fWidthQ[fVZEROcentralityBin][1][1];
Qxcmean = fMeanQ[fVZEROcentralityBin][0][0];
Qxcrms = fWidthQ[fVZEROcentralityBin][0][0];
Qycmean = fMeanQ[fVZEROcentralityBin][0][1];
Qycrms = fWidthQ[fVZEROcentralityBin][0][1];
} else if (n == 3) {
Qxamean = fMeanQv3[fVZEROcentralityBin][1][0];
Qxarms = fWidthQv3[fVZEROcentralityBin][1][0];
Qyamean = fMeanQv3[fVZEROcentralityBin][1][1];
Qyarms = fWidthQv3[fVZEROcentralityBin][1][1];
Qxcmean = fMeanQv3[fVZEROcentralityBin][0][0];
Qxcrms = fWidthQv3[fVZEROcentralityBin][0][0];
Qycmean = fMeanQv3[fVZEROcentralityBin][0][1];
Qycrms = fWidthQv3[fVZEROcentralityBin][0][1];
}
Double_t QxaCor = (Qxa - Qxamean)/Qxarms;
Double_t QyaCor = (Qya - Qyamean)/Qyarms;
Double_t QxcCor = (Qxc - Qxcmean)/Qxcrms;
Double_t QycCor = (Qyc - Qycmean)/Qycrms;
vA.Set(QxcCor, QycCor);
vB.Set(QxaCor, QyaCor);
} else if (fApplyRecentering == 2011) {
Double_t QxaCor = 0.;
Double_t QyaCor = 0.;
Double_t QxcCor = 0.;
Double_t QycCor = 0.;
if(fEvent && fEvent->GetEventplane()) {
fEvent->GetEventplane()->CalculateVZEROEventPlane(fEvent, 8, n, QxaCor, QyaCor);
fEvent->GetEventplane()->CalculateVZEROEventPlane(fEvent, 9, n, QxcCor, QycCor);
vA.Set(QxcCor, QycCor);
vB.Set(QxaCor, QyaCor);
}
}
}
void AliFlowEvent::SetVZEROCalibrationForTrackCuts(AliFlowTrackCuts* cuts) {
fEvent = cuts->GetEvent();
if(!fEvent) return;
Float_t v0Centr(fEvent->GetCentrality()->GetCentralityPercentile("V0M"));
if(v0Centr < 5) fVZEROcentralityBin = 0;
else if(v0Centr < 10) fVZEROcentralityBin = 1;
else if(v0Centr < 20) fVZEROcentralityBin = 2;
else if(v0Centr < 30) fVZEROcentralityBin = 3;
else if(v0Centr < 40) fVZEROcentralityBin = 4;
else if(v0Centr < 50) fVZEROcentralityBin = 5;
else if(v0Centr < 60) fVZEROcentralityBin = 6;
else if(v0Centr < 70) fVZEROcentralityBin = 7;
else fVZEROcentralityBin = 8;
Int_t run(fEvent->GetRunNumber());
if(fCachedRun == run) return;
else fCachedRun = run;
Double_t chiC2[] = {0.771423, 1.10236, 1.38116, 1.48077, 1.31964, 1.10236, 0.674622, 0.600403, 0.273865};
Double_t chiA2[] = {0.582214, 0.674622, 0.832214, 0.873962, 0.832214, 0.771423, 0.637146, 0.424255, 0.257385};
Double_t chiC3[] = {0.493347, 0.493347, 0.458557, 0.407166, 0.356628, 0.273865, 0.176208, 6.10352e-05, 6.10352e-05};
Double_t chiA3[] = {0.356628, 0.373474, 0.356628, 0.306702, 0.24115, 0.192322, 0.127869, 6.10352e-05, 6.10352e-05};
if(!cuts->GetChi2A()) cuts->SetChi2A(new TArrayD(9, chiA2));
if(!cuts->GetChi2C()) cuts->SetChi2C(new TArrayD(9, chiC2));
if(!cuts->GetChi3A()) cuts->SetChi3A(new TArrayD(9, chiA3));
if(!cuts->GetChi3C()) cuts->SetChi3C(new TArrayD(9, chiC3));
if(!fChi2A) fChi2A = cuts->GetChi2A();
if(!fChi2C) fChi2C = cuts->GetChi2C();
if(!fChi3A) fChi3A = cuts->GetChi3A();
if(!fChi3C) fChi3C = cuts->GetChi3C();
TFile *foadb = TFile::Open("$ALICE_ROOT/OADB/PWGCF/VZERO/VZEROcalibEP.root");
if(!foadb){
printf("OADB file $ALICE_ROOT/OADB/PWGCF/VZERO/VZEROcalibEP.root cannot be opened, CALIBRATION FAILED !");
return;
}
AliOADBContainer *cont = (AliOADBContainer*) foadb->Get("hMultV0BefCorr");
if(!cont){
printf("OADB object hMultV0BefCorr is not available in the file\n");
return;
}
if(!(cont->GetObject(run))){
Int_t runs11h[] = {170593, 170572, 170556, 170552, 170546, 170390, 170389, 170388, 170387, 170315, 170313, 170312, 170311, 170309, 170308, 170306, 170270, 170269, 170268, 170267, 170264, 170230, 170228, 170208, 170207, 170205, 170204, 170203, 170195, 170193, 170163, 170162, 170159, 170155, 170152, 170091, 170089, 170088, 170085, 170084, 170083, 170081, 170040, 170038, 170036, 170027, 169981, 169975, 169969, 169965, 169961, 169956, 169926, 169924, 169923, 169922, 169919, 169918, 169914, 169859, 169858, 169855, 169846, 169838, 169837, 169835, 169683, 169628, 169591, 169590, 169588, 169587, 169586, 169584, 169557, 169555, 169554, 169553, 169550, 169515, 169512, 169506, 169504, 169498, 169475, 169420, 169419, 169418, 169417, 169415, 169411, 169238, 169236, 169167, 169160, 169156, 169148, 169145, 169144, 169143, 169138, 169099, 169094, 169091, 169045, 169044, 169040, 169035, 168992, 168988, 168984, 168826, 168777, 168514, 168512, 168511, 168467, 168464, 168461, 168460, 168458, 168362, 168361, 168356, 168342, 168341, 168325, 168322, 168318, 168311, 168310, 168213, 168212, 168208, 168207, 168206, 168205, 168204, 168203, 168181, 168177, 168175, 168173, 168172, 168171, 168115, 168108, 168107, 168105, 168104, 168103, 168076, 168069, 168068, 168066, 167988, 167987, 167986, 167985, 167921, 167920, 167915, 167909, 167903, 167902, 167818, 167814, 167813, 167808, 167807, 167806, 167713, 167712, 167711, 167706, 167693};
for(Int_t r(0); r < 176; r++) {
if(run == runs11h[r]) {
printf(" > run has been identified as 11h < \n");
if(cuts->GetVZEROgainEqualizationPerRing()) {
(cuts->GetUseVZERORing(0)) ? cuts->SetVZEROCpol(0, 1.) : cuts->SetVZEROCpol(0, 0.);
(cuts->GetUseVZERORing(1)) ? cuts->SetVZEROCpol(1, 1.) : cuts->SetVZEROCpol(1, 0.);
(cuts->GetUseVZERORing(2)) ? cuts->SetVZEROCpol(2, 1.) : cuts->SetVZEROCpol(2, 0.);
(cuts->GetUseVZERORing(3)) ? cuts->SetVZEROCpol(3, 1.) : cuts->SetVZEROCpol(3, 0.);
(cuts->GetUseVZERORing(4)) ? cuts->SetVZEROApol(0, 1.) : cuts->SetVZEROApol(0, 0.);
(cuts->GetUseVZERORing(5)) ? cuts->SetVZEROApol(1, 1.) : cuts->SetVZEROApol(1, 0.);
(cuts->GetUseVZERORing(6)) ? cuts->SetVZEROApol(2, 1.) : cuts->SetVZEROApol(2, 0.);
(cuts->GetUseVZERORing(7)) ? cuts->SetVZEROApol(3, 1.) : cuts->SetVZEROApol(3, 0.);
} else {
for(Int_t i(0); i < 4; i++) cuts->SetVZEROCpol(i, 1.);
for(Int_t i(0); i < 4; i++) cuts->SetVZEROApol(i, 1.);
}
cuts->SetVZEROgainEqualisation(NULL);
fApplyRecentering = 2011;
return;
}
}
printf("OADB object hMultVZEROBefCorr is not available for run %i (used default run 137366)\n",run);
run = 137366;
}
printf(" > run has been identified as 10h < \n");
TProfile* fMultVZERO = ((TH2F *) cont->GetObject(run))->ProfileX();
TF1 *fpol0 = new TF1("fpol0","pol0");
if(cuts->GetVZEROgainEqualizationPerRing()) {
fMultVZERO->Fit(fpol0, "N0", "", 0, 8);
(cuts->GetUseVZERORing(0)) ? cuts->SetVZEROCpol(0, fpol0->GetParameter(0)) : cuts->SetVZEROCpol(0, 0.);
fMultVZERO->Fit(fpol0, "N0", "", 8, 16);
(cuts->GetUseVZERORing(1)) ? cuts->SetVZEROCpol(1, fpol0->GetParameter(0)) : cuts->SetVZEROCpol(1, 0.);
fMultVZERO->Fit(fpol0, "N0", "", 16, 24);
(cuts->GetUseVZERORing(2)) ? cuts->SetVZEROCpol(2, fpol0->GetParameter(0)) : cuts->SetVZEROCpol(2, 0.);
fMultVZERO->Fit(fpol0, "N0", "", 24, 32);
(cuts->GetUseVZERORing(3)) ? cuts->SetVZEROCpol(3, fpol0->GetParameter(0)) : cuts->SetVZEROCpol(3, 0.);
fMultVZERO->Fit(fpol0, "N0", "", 32, 40);
(cuts->GetUseVZERORing(4)) ? cuts->SetVZEROApol(0, fpol0->GetParameter(0)) : cuts->SetVZEROApol(0, 0.);
fMultVZERO->Fit(fpol0, "N0", "", 40, 48);
(cuts->GetUseVZERORing(5)) ? cuts->SetVZEROApol(1, fpol0->GetParameter(0)) : cuts->SetVZEROApol(1, 0.);
fMultVZERO->Fit(fpol0, "N0", "", 48, 56);
(cuts->GetUseVZERORing(6)) ? cuts->SetVZEROApol(2, fpol0->GetParameter(0)) : cuts->SetVZEROApol(2, 0.);
fMultVZERO->Fit(fpol0, "N0", "", 56, 64);
(cuts->GetUseVZERORing(7)) ? cuts->SetVZEROApol(3, fpol0->GetParameter(0)) : cuts->SetVZEROApol(3, 0.);
} else {
fMultVZERO->Fit(fpol0,"N0","",0,31);
for(Int_t i(0); i < 4; i++) cuts->SetVZEROCpol(i, fpol0->GetParameter(0));
fMultVZERO->Fit(fpol0,"N0","",32,64);
for(Int_t i(0); i < 4; i++) cuts->SetVZEROApol(i, fpol0->GetParameter(0));
}
cuts->SetVZEROgainEqualisation(fMultVZERO);
for(Int_t iside=0;iside<2;iside++){
for(Int_t icoord=0;icoord<2;icoord++){
for(Int_t i=0;i < 9;i++){
char namecont[100];
if(iside==0 && icoord==0)
snprintf(namecont,100,"hQxc2_%i",i);
else if(iside==1 && icoord==0)
snprintf(namecont,100,"hQxa2_%i",i);
else if(iside==0 && icoord==1)
snprintf(namecont,100,"hQyc2_%i",i);
else if(iside==1 && icoord==1)
snprintf(namecont,100,"hQya2_%i",i);
cont = (AliOADBContainer*) foadb->Get(namecont);
if(!cont){
printf("OADB object %s is not available in the file\n",namecont);
return;
}
if(!(cont->GetObject(run))){
printf("OADB object %s is not available for run %i (used run 137366)\n",namecont,run);
run = 137366;
}
fMeanQ[i][iside][icoord] = ((TH1F *) cont->GetObject(run))->GetMean();
fWidthQ[i][iside][icoord] = ((TH1F *) cont->GetObject(run))->GetRMS();
if(iside==0 && icoord==0)
snprintf(namecont,100,"hQxc3_%i",i);
else if(iside==1 && icoord==0)
snprintf(namecont,100,"hQxa3_%i",i);
else if(iside==0 && icoord==1)
snprintf(namecont,100,"hQyc3_%i",i);
else if(iside==1 && icoord==1)
snprintf(namecont,100,"hQya3_%i",i);
cont = (AliOADBContainer*) foadb->Get(namecont);
if(!cont){
printf("OADB object %s is not available in the file\n",namecont);
return;
}
if(!(cont->GetObject(run))){
printf("OADB object %s is not available for run %i (used run 137366)\n",namecont,run);
run = 137366;
}
fMeanQv3[i][iside][icoord] = ((TH1F *) cont->GetObject(run))->GetMean();
fWidthQv3[i][iside][icoord] = ((TH1F *) cont->GetObject(run))->GetRMS();
}
}
}
fApplyRecentering = 2010;
}
void AliFlowEvent::ClearFast()
{
AliFlowEventSimple::ClearFast();
}
void AliFlowEvent::ClearCachedRun()
{
fCachedRun=0;
fApplyRecentering=0;
}