AliESDEvent* myESD = dynamic_cast<AliESDEvent*>(InputEvent()); // from TaskSE
AliAODEvent* myAOD = dynamic_cast<AliAODEvent*>(InputEvent()); // from TaskSE
AliMultiplicity* myTracklets = NULL;
+ AliESDPmdTrack* pmdtracks = NULL;//pmd
TH2F* histFMD = NULL;
if(GetNinputs()==2) {
fCutsPOI->SetMCevent( MCEvent() );
flowEvent = new AliFlowEvent( InputEvent(), fCutsRP, fCutsPOI );
if (myESD)
- flowEvent->SetReferenceMultiplicity(AliESDtrackCuts::GetReferenceMultiplicity(myESD,kTRUE));
+ flowEvent->SetReferenceMultiplicity(fCutsEvent->GetReferenceMultiplicity());
+ if (mcEvent && mcEvent->GenEventHeader()) flowEvent->SetMCReactionPlaneAngle(mcEvent);
}
// Make the FlowEvent for MC input
else if (fRPType == "FMD"){
flowEvent = new AliFlowEvent(myESD,histFMD,fCFManager2);
}
+ //pmd
+ else if (fRPType == "PMD"){
+ flowEvent = new AliFlowEvent(myESD,pmdtracks,fCFManager2);
+ }
+ //pmd
// if monte carlo event get reaction plane from monte carlo (depends on generator)
if (mcEvent && mcEvent->GenEventHeader()) flowEvent->SetMCReactionPlaneAngle(mcEvent);
#include "AliMCParticle.h"
#include "AliCFManager.h"
#include "AliESDtrack.h"
+#include "AliESDPmdTrack.h"
#include "AliESDEvent.h"
#include "AliAODEvent.h"
#include "AliGenCocktailEventHeader.h"
pTrack->SetPhi(phiFMD);
pTrack->SetWeight(weightFMD);
//marking the particles used for the reference particle (RP) selection:
- pTrack->SetForRPSelection(kTRUE);
- pTrack->SetSource(AliFlowTrack::kFromFMD);
+ pTrack->TagRP();
fNumberOfRPs++;
+ pTrack->SetSource(AliFlowTrack::kFromFMD);
//Add the track to the flowevent
AddTrack(pTrack);
}//end of while (i < numberOfTracks)
}
+//-------------------------------------------------------------------//
+//---- Including PMD tracks as RP --------------------------//
+
+AliFlowEvent::AliFlowEvent( const AliESDEvent* anInput,
+ const AliESDPmdTrack *pmdtracks,
+ const AliCFManager* poiCFManager ):
+ AliFlowEventSimple(20)
+{
+ Float_t GetPmdEta(Float_t xPos, Float_t yPos, Float_t zPos);
+ Float_t GetPmdPhi(Float_t xPos, Float_t yPos);
+ //Select the particles of interest from the ESD
+ Int_t iNumberOfInputTracks = anInput->GetNumberOfTracks() ;
+
+ //loop over tracks
+ for (Int_t itrkN=0; itrkN<iNumberOfInputTracks; itrkN++)
+ {
+ AliESDtrack* pParticle = anInput->GetTrack(itrkN); //get input particle
+ //check if pParticle passes the cuts
+ Bool_t poiOK = kTRUE;
+ if (poiCFManager)
+ {
+ poiOK = ( poiCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,pParticle) &&
+ poiCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,pParticle));
+ }
+ if (!poiOK) continue;
+
+ //make new AliFLowTrack
+ AliFlowTrack* pTrack = new AliFlowTrack(pParticle);
+
+ //marking the particles used for the particle of interest (POI) selection:
+ if(poiOK && poiCFManager)
+ {
+ pTrack->SetForPOISelection(kTRUE);
+ pTrack->SetSource(AliFlowTrack::kFromESD);
+ }
+
+ AddTrack(pTrack);
+ }//end of while (itrkN < iNumberOfInputTracks)
+
+ //Select the reference particles from the PMD tracks
+ Int_t npmdcl = anInput->GetNumberOfPmdTracks();
+ printf("======There are %d PMD tracks in this event\n-------",npmdcl);
+ //loop over clusters
+ for(Int_t iclust=0; iclust < npmdcl; iclust++){
+ //AliESDPmdTrack *pmdtr = anInput->GetPmdTrack(iclust);
+ pmdtracks = anInput->GetPmdTrack(iclust);
+ Int_t det = pmdtracks->GetDetector();
+ //Int_t smn = pmdtracks->GetSmn();
+ 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 pid = pmdtracks->GetClusterPID();
+ Float_t etacls = GetPmdEta(clsX,clsY,clsZ);
+ Float_t phicls = GetPmdPhi(clsX,clsY);
+ //make new AliFLowTrackSimple
+ AliFlowTrack* pTrack = new AliFlowTrack();
+ //if(det == 0){ //selecting preshower plane only
+ if(det == 0 && adc > 270 && ncell > 1){ //selecting preshower plane only
+ //pTrack->SetPt(adc);//cluster adc
+ pTrack->SetPt(0.0);
+ pTrack->SetEta(etacls);
+ pTrack->SetPhi(phicls);
+ //marking the particles used for the reference particle (RP) selection:
+ fNumberOfRPs++;
+ pTrack->SetForRPSelection(kTRUE);
+ pTrack->SetSource(AliFlowTrack::kFromPMD);
+ //Add the track to the flowevent
+ AddTrack(pTrack);
+ }//if det
+ }
+}
+//----------------------------------------------------------------------------//
+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; // 1st Quadrant
+ if(xPos < 0 && yPos > 0) phi = 180 - phi1; // 2nd Quadrant
+ if(xPos < 0 && yPos < 0) phi = 180 + phi1; // 3rd Quadrant
+ if(xPos > 0 && yPos < 0) phi = 360 - phi1; // 4th Quadrant
+
+ }
+ phi = phi*3.14159/180.;
+ return phi;
+}
+//---------------------------------------------------------------//
+
+
#include <float.h>
#include "TNamed.h"
#include "AliVEvent.h"
+#include "AliESDEvent.h"
+#include "AliMCEvent.h"
#include "AliFlowEventCuts.h"
+#include "AliESDtrackCuts.h"
ClassImp(AliFlowEventCuts)
fNumberOfTracksMin(INT_MIN),
fCutRefMult(kFALSE),
fRefMultMax(INT_MAX),
- fRefMultMin(INT_MIN)
+ fRefMultMin(INT_MIN),
+ fReferenceMultiplicity(-1)
{
//constructor
}
fNumberOfTracksMin(INT_MIN),
fCutRefMult(kFALSE),
fRefMultMax(INT_MAX),
- fRefMultMin(INT_MIN)
+ fRefMultMin(INT_MIN),
+ fReferenceMultiplicity(-1)
{
//constructor
}
if(fCutRefMult)
{
//reference multiplicity still to be defined
- Int_t refMult = event->GetNumberOfTracks();
- if (refMult < fRefMultMin || refMult >= fRefMultMax )
+ fReferenceMultiplicity = ReferenceMultiplicity(event);
+ if (fReferenceMultiplicity < fRefMultMin || fReferenceMultiplicity >= fRefMultMax )
return kFALSE;
}
return kTRUE;
AliFlowEventCuts* cuts = new AliFlowEventCuts();
return cuts;
}
+
+//-----------------------------------------------------------------------
+Int_t AliFlowEventCuts::ReferenceMultiplicity(const AliVEvent* event)
+{
+ //calculate the reference multiplicity
+ const AliESDEvent* esd=dynamic_cast<const AliESDEvent*>(event);
+ if (esd) return AliESDtrackCuts::GetReferenceMultiplicity(const_cast<AliESDEvent*>(esd),kTRUE);
+ AliMCEvent* mc=const_cast<AliMCEvent*>(dynamic_cast<const AliMCEvent*>(event));
+ if (mc) return mc->GetNumberOfPrimaries();
+ return event->GetNumberOfTracks(); //default
+}