]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliEPSelectionTask.cxx
RelVal: more retries w/pauses on VM + small fixes
[u/mrichter/AliRoot.git] / ANALYSIS / AliEPSelectionTask.cxx
index 9b8842d69d2dfdc99a077dd4d1772fc9daaf440c..7d0d235c61d48c8aa98adea8557926064ab37dbd 100644 (file)
@@ -62,6 +62,8 @@
 #include "AliVTrack.h"
 #include "AliEventplane.h"
 
+using std::cout;
+using std::endl;
 ClassImp(AliEPSelectionTask)
 
 //________________________________________________________________________
@@ -175,7 +177,7 @@ AliEPSelectionTask::~AliEPSelectionTask()
       delete fEPContainer;
       fEPContainer = 0;
   }
-  if (fPhiDist && fPeriod.CompareTo("LHC11h")==0){
+  if (fPeriod.CompareTo("LHC11h")==0){
       for(Int_t i = 0; i < 4; i++) {
         if(fPhiDist[i]){
           delete fPhiDist[i];
@@ -330,6 +332,7 @@ void AliEPSelectionTask::UserExec(Option_t */*option*/)
       }
   
       esdEP = aod->GetHeader()->GetEventplaneP();
+      if(!esdEP) return; // protection against missing EP branch (nanoAODs)
       esdEP->Reset(); 
      
       Int_t maxID = 0;
@@ -529,6 +532,33 @@ void AliEPSelectionTask::GetQsub(TVector2 &Q1, TVector2 &Q2, TObjArray* tracklis
         }
       }
     }
+  } else if (fSplitMethod == AliEPSelectionTask::kCharge) {
+     
+    for (Int_t i = 0; i < nt; i++) {
+      weight = 1;
+      track = dynamic_cast<AliVTrack*> (tracklist->At(i));
+      if (!track) continue;
+      weight = GetWeight(track);
+      Short_t cha = track->Charge();
+      idtemp = track->GetID(); 
+      if ((fAnalysisInput.CompareTo("AOD")==0) && (fAODfilterbit == 128)) idtemp = idtemp*(-1) - 1;
+
+      if (cha > 0) {  
+        mQx1 += (weight*cos(2*track->Phi()));
+        mQy1 += (weight*sin(2*track->Phi()));
+        if (fSaveTrackContribution){
+          EP->GetQContributionXArraysub1()->AddAt(weight*cos(2*track->Phi()),idtemp);
+          EP->GetQContributionYArraysub1()->AddAt(weight*sin(2*track->Phi()),idtemp);
+        }
+      } else if (cha < 0) {
+        mQx2 += (weight*cos(2*track->Phi()));
+        mQy2 += (weight*sin(2*track->Phi()));
+        if (fSaveTrackContribution){
+          EP->GetQContributionXArraysub2()->AddAt(weight*cos(2*track->Phi()),idtemp);
+          EP->GetQContributionYArraysub2()->AddAt(weight*sin(2*track->Phi()),idtemp);
+        }
+      }
+    }
   } else {
     printf("plane resolution determination method not available!\n\n ");
     return;
@@ -558,7 +588,7 @@ void AliEPSelectionTask::SetPersonalESDtrackCuts(AliESDtrackCuts* trackcuts){
 }
 
 //________________________________________________________________________
-void AliEPSelectionTask::SetPersonalAODtrackCuts(UInt_t filterbit, Float_t etalow, Float_t etaup, Float_t ptlow, Float_t ptup){
+void AliEPSelectionTask::SetPersonalAODtrackCuts(UInt_t filterbit, Float_t etalow, Float_t etaup, Float_t ptlow, Float_t ptup, Int_t ntpc){
   
   if(fESDtrackCuts){ 
     delete fESDtrackCuts;
@@ -573,6 +603,7 @@ void AliEPSelectionTask::SetPersonalAODtrackCuts(UInt_t filterbit, Float_t etalo
   fUsercuts = kTRUE;
   fESDtrackCuts = new AliESDtrackCuts();
   fESDtrackCuts->SetPtRange(ptlow,ptup);
+  fESDtrackCuts->SetMinNClustersTPC(ntpc);
   fESDtrackCuts->SetEtaRange(etalow,etaup);
   fAODfilterbit = filterbit;
 }
@@ -613,7 +644,8 @@ Double_t AliEPSelectionTask::GetPhiWeight(TObject* track1)
   Double_t phiweight=1;
   AliVTrack* track = dynamic_cast<AliVTrack*>(track1);
 
-  TH1F *phiDist = SelectPhiDist(track);
+  TH1F *phiDist = 0x0;
+  if(track) phiDist = SelectPhiDist(track);
   
   if (fUsePhiWeight && phiDist && track) {
     Double_t nParticles = phiDist->Integral();
@@ -634,7 +666,7 @@ Double_t AliEPSelectionTask::GetPhiWeight(TObject* track1)
 //__________________________________________________________________________
 void AliEPSelectionTask::SetPhiDist() 
 {
-  if(!fUserphidist) { // if it's already set and custom class is required, we use the one provided by the user
+  if(!fUserphidist && (fPeriod.CompareTo("LHC10h") == 0 || fPeriod.CompareTo("LHC11h") == 0)) { // if it's already set and custom class is required, we use the one provided by the user
 
     if (fPeriod.CompareTo("LHC10h")==0)
        {
@@ -677,9 +709,7 @@ void AliEPSelectionTask::SetPhiDist()
     if (!fPhiDist[0]) AliFatal(Form("Cannot find OADB phi distribution for run %d", fRunNumber));
 
   } 
-  else {
-    AliInfo("Using Custom Phi Distribution");
-  }
+  
     
   if (fPeriod.CompareTo("LHC10h")==0 || fUserphidist){
      Bool_t emptybins;
@@ -705,6 +735,10 @@ void AliEPSelectionTask::SetPhiDist()
        AliError("After Maximum of rebinning still empty Phi-bins!!!");
      }
   }
+  if (fPeriod.CompareTo("LHC10h") != 0 && fPeriod.CompareTo("LHC11h") != 0 && !fUserphidist){
+  AliInfo("No Phi-weights available. All Phi weights set to 1");
+  SetUsePhiWeight(kFALSE);
+  }
 }
 
 //__________________________________________________________________________
@@ -736,6 +770,7 @@ TObjArray* AliEPSelectionTask::GetAODTracksAndMaxID(AliAODEvent* aod, Int_t& max
   Float_t etaup = 0;
   fESDtrackCuts->GetPtRange(ptlow,ptup);
   fESDtrackCuts->GetEtaRange(etalow,etaup);
+  Int_t ntpc = fESDtrackCuts->GetMinNClusterTPC(); 
   
   for (Int_t i = 0; i < aod->GetNumberOfTracks() ; i++){
      tr = aod->GetTrack(i);
@@ -744,7 +779,7 @@ TObjArray* AliEPSelectionTask::GetAODTracksAndMaxID(AliAODEvent* aod, Int_t& max
      if(maxidtemp > -1 && fAODfilterbit == 128) continue;
      if (fAODfilterbit == 128) maxidtemp = maxidtemp*(-1) - 1;
      if (maxidtemp > maxid1) maxid1 = maxidtemp;
-     if(tr->TestFilterBit(fAODfilterbit) && tr->Pt() < ptup && tr->Pt() > ptlow && tr->Eta() < etaup && tr->Eta() > etalow){
+     if(tr->TestFilterBit(fAODfilterbit) && tr->Pt() < ptup && tr->Pt() > ptlow && tr->Eta() < etaup && tr->Eta() > etalow && tr->GetTPCNcls() > ntpc){
      acctracks->Add(tr);
      }
   }
@@ -793,7 +828,10 @@ void AliEPSelectionTask::SetOADBandPeriod()
       fSparseDist = (THnSparse*) foadb->Get("Default");    
       if (!fSparseDist) AliFatal("Cannot fetch OADB container for EP selection");
       foadb->Close();
-      if(!fHruns) fHruns = (TH1F*)fSparseDist->Projection(0); //projection on run axis;
+      if(!fHruns){ 
+           fHruns = (TH1F*)fSparseDist->Projection(0); //projection on run axis;
+           fHruns->SetName("runsHisto");
+      }
       }        
      } 
 }