]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
adds PMD + fixes in cuts (reference multiplicity in event cuts)
authorsnelling <snelling@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 15 Oct 2010 12:30:57 +0000 (12:30 +0000)
committersnelling <snelling@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 15 Oct 2010 12:30:57 +0000 (12:30 +0000)
PWG2/FLOW/AliFlowTasks/AliAnalysisTaskFlowEvent.cxx
PWG2/FLOW/AliFlowTasks/AliFlowEvent.cxx
PWG2/FLOW/AliFlowTasks/AliFlowEvent.h
PWG2/FLOW/AliFlowTasks/AliFlowEventCuts.cxx
PWG2/FLOW/AliFlowTasks/AliFlowEventCuts.h
PWG2/FLOW/AliFlowTasks/AliFlowTrack.h
PWG2/FLOW/macros/AddTaskFlow.C
PWG2/FLOW/macros/AddTaskFlowCentrality.C

index e016569007289bb8209abe4edffe9d309688d53c..b55680c6c11badba06c870b89129e105f91698fd 100644 (file)
@@ -246,6 +246,7 @@ void AliAnalysisTaskFlowEvent::UserExec(Option_t *)
   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) {                   
@@ -278,7 +279,8 @@ void AliAnalysisTaskFlowEvent::UserExec(Option_t *)
     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
@@ -350,6 +352,11 @@ void AliAnalysisTaskFlowEvent::UserExec(Option_t *)
     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);
index 849a63fd2fbd3bffa3310cc7f1c42245003b3c16..0478c26c92bcf3f2e1f25ef3318daf3ed6b270b5 100644 (file)
@@ -26,6 +26,7 @@
 #include "AliMCParticle.h"
 #include "AliCFManager.h"
 #include "AliESDtrack.h"
+#include "AliESDPmdTrack.h"
 #include "AliESDEvent.h"
 #include "AliAODEvent.h"
 #include "AliGenCocktailEventHeader.h"
@@ -567,9 +568,9 @@ AliFlowEvent::AliFlowEvent( const AliESDEvent* anInput,
        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);
@@ -636,3 +637,112 @@ AliFlowEvent::AliFlowEvent( AliVEvent* event,
   }//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;
+}
+//---------------------------------------------------------------//
+
+
index b6fd3976c9ad0d6c85600143b82fa5fc2bfd9342..602480d7913deb13075136e2d8a171749b69628c 100644 (file)
@@ -19,6 +19,7 @@ class AliMCEvent;
 class AliESDEvent;
 class AliAODEvent;
 class AliMultiplicity;
+class AliESDPmdTrack;
 class TH2F;
 
 #include "AliFlowEventSimple.h"
@@ -59,7 +60,11 @@ public:
   AliFlowEvent( AliVEvent* anInput,
                 AliFlowTrackCuts* rpCuts,
                 AliFlowTrackCuts* poiCuts );
-
+  //pmd
+  AliFlowEvent( const AliESDEvent* anInput,
+                const AliESDPmdTrack *pmdtracks,
+                const AliCFManager* poiCFManager );
+  //pmd
 
   void SetMCReactionPlaneAngle(const AliMCEvent* mcEvent);
   using AliFlowEventSimple::SetMCReactionPlaneAngle;
index 43cb80feefadb22ab16970efd697a1ae0821107f..ffc803aa1baec04b151b6fb1417dde413eeafb74 100644 (file)
 #include <float.h>
 #include "TNamed.h"
 #include "AliVEvent.h"
+#include "AliESDEvent.h"
+#include "AliMCEvent.h"
 #include "AliFlowEventCuts.h"
+#include "AliESDtrackCuts.h"
 
 ClassImp(AliFlowEventCuts)
 
@@ -36,7 +39,8 @@ AliFlowEventCuts::AliFlowEventCuts():
   fNumberOfTracksMin(INT_MIN),
   fCutRefMult(kFALSE),
   fRefMultMax(INT_MAX),
-  fRefMultMin(INT_MIN)
+  fRefMultMin(INT_MIN),
+  fReferenceMultiplicity(-1)
 {
   //constructor 
 }
@@ -49,7 +53,8 @@ AliFlowEventCuts::AliFlowEventCuts(const char* name, const char* title):
   fNumberOfTracksMin(INT_MIN),
   fCutRefMult(kFALSE),
   fRefMultMax(INT_MAX),
-  fRefMultMin(INT_MIN)
+  fRefMultMin(INT_MIN),
+  fReferenceMultiplicity(-1)
 {
   //constructor 
 }
@@ -91,8 +96,8 @@ Bool_t AliFlowEventCuts::PassesCuts(const AliVEvent *event)
   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;
@@ -105,3 +110,14 @@ AliFlowEventCuts* AliFlowEventCuts::StandardCuts()
   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
+}
index d1b0abb64b544e4b556961be399585c82eee94a4..a3cceb0b724ae68662f31e877e4b53abb563b419 100644 (file)
@@ -41,6 +41,9 @@ class AliFlowEventCuts : public TNamed {
   Int_t GetRefMultMax() const {return fRefMultMax;}
   Int_t GetRefMultMin() const {return fRefMultMin;}
 
+  static Int_t ReferenceMultiplicity(const AliVEvent* event);
+  Int_t GetReferenceMultiplicity() {return fReferenceMultiplicity;}
+
  private:
   Bool_t fCutNumberOfTracks;//cut on # of tracks
   Int_t fNumberOfTracksMax;  //limits
@@ -49,6 +52,8 @@ class AliFlowEventCuts : public TNamed {
   Int_t fRefMultMax; //max refmult
   Int_t fRefMultMin; //min refmult
 
+  Int_t fReferenceMultiplicity; //store the reference multiplicity
+
   ClassDef(AliFlowEventCuts,1)
 };
 
index ee9f444f5a426d6272010bad093a82a30d214e9b..9399f97ff940c5726725b9acea5109745b13fb49 100644 (file)
@@ -19,7 +19,8 @@ public:
                      kFromMC=1,
                      kFromAOD=2,
                      kFromTracklet=3,
-                     kFromFMD=4 };
+                     kFromFMD=4,
+                     kFromPMD=5 };
   AliFlowTrack();
   AliFlowTrack(const AliVParticle* p);
   AliFlowTrack& operator=(const AliFlowTrack& aTrack);
index 154fe61d1965ba6f629d9e14a8b9af920feaf3b5..572f095bacb061e3253b696aa074a7104b76a024 100644 (file)
@@ -74,6 +74,7 @@ const Int_t multmax = 10000;     //used for AliFlowEventSimple (to set the centr
 const TString rptype = "Global";
 //const TString rptype = "Tracklet";
 //const TString rptype = "FMD";
+//const TString rptype = "PMD";
 
 //KINEMATICS (on generated and reconstructed tracks)
 Bool_t UseKineforRP =  kFALSE;
index 491f4b8ebd3048e65450ac7a0f0af991c067fb70..c59f6783a49b043319c801a08bd9331162909953 100644 (file)
@@ -74,6 +74,7 @@ const Int_t multmax = 10000;     //used for AliFlowEventSimple (to set the centr
 const TString rptype = "Global";
 //const TString rptype = "Tracklet";
 //const TString rptype = "FMD";
+//const TString rptype = "PMD";
 
 //KINEMATICS (on generated and reconstructed tracks)
 Bool_t UseKineforRP =  kFALSE;