]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Add option to only run on events that have a muon, also a few fixes
authortschuste <Tim.Schuster@cern.ch>
Thu, 6 Nov 2014 16:16:48 +0000 (16:16 +0000)
committertschuste <Tim.Schuster@cern.ch>
Thu, 6 Nov 2014 16:17:13 +0000 (16:17 +0000)
PWGCF/Correlations/DPhi/FourierDecomposition/AliDhcTask.cxx
PWGCF/Correlations/DPhi/FourierDecomposition/AliDhcTask.h
PWGCF/Correlations/macros/fd/AddTaskDhc.C

index f5b20e20e7da2080e421a3dc890cb268da03f3cf..5a64916119972895a7ae233ca43a85bb916672da 100644 (file)
@@ -36,13 +36,14 @@ ClassImp(AliDhcTask)
 AliDhcTask::AliDhcTask()
 : AliAnalysisTaskSE(), fVerbosity(0), fEtaMax(1), fZVtxMax(10), fPtMin(0.25), fPtMax(15),
   fTrackDepth(1000), fPoolSize(200), fTracksName(), fDoWeights(kFALSE), fFillMuons(kFALSE),
+  fRequireMuon(kFALSE), fReqPtLo(0.0), fReqPtHi(1000.0),
   fPtTACrit(kTRUE), fAllTAHists(kFALSE), fMixInEtaT(kFALSE),
   fEtaTLo(-1.0), fEtaTHi(1.0), fEtaALo(-1.0), fEtaAHi(1.0), fOmitFirstEv(kTRUE),
   fDoFillSame(kFALSE), fDoMassCut(kFALSE), fCheckVertex(kTRUE), fClassName(),
   fCentMethod("V0M"), fNBdeta(20), fNBdphi(36), fTriggerMatch(kTRUE),
   fBPtT(0x0), fBPtA(0x0), fBCent(0x0), fBZvtx(0x0),
   fMixBCent(0x0), fMixBZvtx(0x0), fHEffT(0x0), fHEffA(0x0),
-  fESD(0x0), fAOD(0x0), fOutputList(0x0), fHEvt(0x0), fHTrk(0x0), fHPoolReady(0x0),
+  fESD(0x0), fAOD(0x0), fOutputList(0x0), fHEvt(0x0), fHEvtWTr(0x0), fHTrk(0x0), fHPoolReady(0x0),
   fHPtAss(0x0), fHPtTrg(0x0), fHPtTrgEvt(0x0),
   fHPtTrgNorm1S(0x0), fHPtTrgNorm1M(0x0), fHPtTrgNorm2S(0x0), fHPtTrgNorm2M(0x0),
   fHCent(0x0), fHZvtx(0x0), fNbins(0), fHSs(0x0), fHMs(0x0), fHPts(0x0), fHSMass(0x0), fHMMass(0x0),
@@ -59,13 +60,14 @@ AliDhcTask::AliDhcTask()
 AliDhcTask::AliDhcTask(const char *name, Bool_t def) 
 : AliAnalysisTaskSE(name), fVerbosity(0), fEtaMax(1), fZVtxMax(10), fPtMin(0.25), fPtMax(15),
   fTrackDepth(1000), fPoolSize(200), fTracksName(), fDoWeights(kFALSE), fFillMuons(kFALSE),
+  fRequireMuon(kFALSE), fReqPtLo(0.0), fReqPtHi(1000.0),
   fPtTACrit(kTRUE), fAllTAHists(kFALSE), fMixInEtaT(kFALSE),
   fEtaTLo(-1.0), fEtaTHi(1.0), fEtaALo(-1.0), fEtaAHi(1.0), fOmitFirstEv(kTRUE),
   fDoFillSame(kFALSE), fDoMassCut(kFALSE), fCheckVertex(kTRUE), fClassName(),
   fCentMethod("V0M"), fNBdeta(20), fNBdphi(36), fTriggerMatch(kTRUE),
   fBPtT(0x0), fBPtA(0x0), fBCent(0x0), fBZvtx(0x0),
   fMixBCent(0x0), fMixBZvtx(0x0), fHEffT(0x0), fHEffA(0x0),
-  fESD(0x0), fAOD(0x0), fOutputList(0x0), fHEvt(0x0), fHTrk(0x0), fHPoolReady(0x0),
+  fESD(0x0), fAOD(0x0), fOutputList(0x0), fHEvt(0x0), fHEvtWTr(0x0), fHTrk(0x0), fHPoolReady(0x0),
   fHPtAss(0x0), fHPtTrg(0x0), fHPtTrgEvt(0x0),
   fHPtTrgNorm1S(0x0), fHPtTrgNorm1M(0x0), fHPtTrgNorm2S(0x0), fHPtTrgNorm2M(0x0),
   fHCent(0x0), fHZvtx(0x0), fNbins(0), fHSs(0x0), fHMs(0x0), fHPts(0x0), fHSMass(0x0), fHMMass(0x0),
@@ -135,6 +137,8 @@ void AliDhcTask::PrintDhcSettings()
     AliInfo(Form(" %d dimensions (a)", fHEffA->GetNdimensions()));
   }
   AliInfo(Form(" fill muons? %d", fFillMuons));
+  AliInfo(Form(" require muon even if not filling them? %d", fRequireMuon));
+  if (fRequireMuon) AliInfo(Form(" require muon with %f < pt < %f", fReqPtLo, fReqPtHi));
   AliInfo(Form(" use pTT > pTA criterion? %d", fPtTACrit));
   AliInfo(Form(" create all pTT, pTA hists? %d", fAllTAHists));
   AliInfo(Form(" Mix in eta_T bins instead of z_vertex? %d", fMixInEtaT));
@@ -189,6 +193,8 @@ void AliDhcTask::BookHistos()
   
   fHEvt = new TH2F("fHEvt", "Event-level variables; Zvtx; Cent", nZvtx, zvtx, nCent, cent);
   fOutputList->Add(fHEvt);
+  fHEvtWTr = new TH2F("fHEvtWTr", "Events with tracks; Zvtx; Cent", nZvtx, zvtx, nCent, cent);
+  fOutputList->Add(fHEvtWTr);
   fHTrk = new TH2F("fHTrk", "Track-level variables",
                    100, 0, TMath::TwoPi(), 100, -fEtaMax, +fEtaMax);
   fOutputList->Add(fHTrk);
@@ -268,11 +274,14 @@ void AliDhcTask::BookHistos()
   fHSMass = new TH1*[fNbins];
   fHMMass = new TH1*[fNbins];
 
-  fIndex = new TFormula("GlobIndex","(t-1)*[0]*[1]*[2]+(z-1)*[0]*[1]+(x-1)*[0]+(y-1)+0*[4]");
-  fIndex->SetParameters(nPtTrig,nPtAssc,nZvtx,nCent);
-  fIndex->SetParNames("NTrigBins","NAssocBins", "NZvertexBins", "NCentBins");
+  fIndex = new TFormula("GlobIndex","(t-1)*[0]*[1]*[2]+(z-1)*[0]*[1]+(x-1)*[1]+(y-1)");
+  fIndex->SetParameters(nPtTrig,nPtAssc,nZvtx);
+  fIndex->SetParNames("NTrigBins","NAssocBins","NZvertexBins");
   fOutputList->Add(fIndex);
   
+  Double_t dEtaMin = fEtaTLo - fEtaAHi;
+  Double_t dEtaMax = fEtaTHi - fEtaALo;
+  
   Int_t count = 0;
   for (Int_t c=1; c<=nCent; ++c) {
     for (Int_t z=1; z<=nZvtx; ++z) {
@@ -308,9 +317,9 @@ void AliDhcTask::BookHistos()
                              t, fBPtT->GetBinLowEdge(t),  fBPtT->GetBinUpEdge(t),
                              a, fBPtA->GetBinLowEdge(a),  fBPtA->GetBinUpEdge(a)));
           fHSs[count] = new TH2F(Form("hS%d",count), Form("Signal %s;#Delta #varphi;#Delta #eta",title.Data()),
-                                 fNBdphi,-0.5*TMath::Pi(),1.5*TMath::Pi(),fNBdeta,-2*fEtaMax,2*fEtaMax);
+                                 fNBdphi,-0.5*TMath::Pi(),1.5*TMath::Pi(),fNBdeta,dEtaMin,dEtaMax);
           fHMs[count] = new TH2F(Form("hM%d",count), Form("Mixed %s;#Delta #varphi;#Delta #eta",title.Data()),
-                                 fNBdphi,-0.5*TMath::Pi(),1.5*TMath::Pi(),fNBdeta,-2*fEtaMax,2*fEtaMax);
+                                 fNBdphi,-0.5*TMath::Pi(),1.5*TMath::Pi(),fNBdeta,dEtaMin,dEtaMax);
           fOutputList->Add(fHSs[count]);
           fOutputList->Add(fHMs[count]);
           Int_t tcount = (Int_t)fIndex->Eval(t,a,z,c);
@@ -491,7 +500,7 @@ void AliDhcTask::UserExec(Option_t *)
           Info("Exec()", "Event REJECTED (AOD vertex not OK). z = %.1f", fZVertex);
         return;
       }
-      AliAODHeader * header = dynamic_cast<AliAODHeader*>(fAOD);
+      AliAODHeader * header = dynamic_cast<AliAODHeader*>(fAOD->GetHeader());
       if(!header) AliFatal("Not a standard AOD");
 
       const AliCentrality *aodCent = header->GetCentralityP();
@@ -526,10 +535,13 @@ void AliDhcTask::UserExec(Option_t *)
   }
 
   if (sTracks->size()==0) {
-    AliWarning(Form("Track array empty"));
+    if (fVerbosity > 1)
+      AliWarning(Form("Track array empty"));
     delete sTracks;
     return;
   }
+  
+  fHEvtWTr->Fill(fZVertex, fCentrality);
 
   if (!pool->IsReady()) {
     pool->UpdatePool(sTracks);
@@ -575,8 +587,28 @@ void AliDhcTask::UserExec(Option_t *)
 //________________________________________________________________________
 void AliDhcTask::GetESDTracks(MiniEvent* miniEvt)
 {
+  // check / count muons
+  Int_t nGoodMuons = 0;
+  Bool_t bAtLeastOneMuon = kFALSE;
+  if (fFillMuons || fRequireMuon) {
+    for (Int_t iMu = 0; iMu<fESD->GetNumberOfMuonTracks(); iMu++) {
+      AliESDMuonTrack* muonTrack = fESD->GetMuonTrack(iMu);
+      if (muonTrack) {
+        if (!IsGoodMUONtrack(*muonTrack))
+          continue;
+        Double_t ptMu   = muonTrack->Pt();
+        if (ptMu>fReqPtLo && ptMu<fReqPtHi)
+          bAtLeastOneMuon = kTRUE;
+        Double_t etaMu  = muonTrack->Eta();
+        if (IsTrigger(etaMu,ptMu)||IsAssociated(etaMu,ptMu))
+          nGoodMuons++;
+      }
+    }
+  }
+  if (fRequireMuon && !bAtLeastOneMuon)
+    return;
+  
   // Loop twice: 1. Count sel. tracks. 2. Fill vector.
-
   if (fTracksName.IsNull()) {
     const AliESDVertex *vtxSPD = fESD->GetPrimaryVertexSPD();
     if (!vtxSPD)
@@ -707,20 +739,8 @@ void AliDhcTask::GetESDTracks(MiniEvent* miniEvt)
     }
   }
   
+  // fill muons into minievent
   if (fFillMuons) {
-    // count good muons
-    Int_t nGoodMuons = 0;
-    for (Int_t iMu = 0; iMu<fESD->GetNumberOfMuonTracks(); iMu++) {
-      AliESDMuonTrack* muonTrack = fESD->GetMuonTrack(iMu);
-      if (muonTrack) {
-        if (!IsGoodMUONtrack(*muonTrack))
-          continue;
-        Double_t ptMu   = muonTrack->Pt();
-        Double_t etaMu  = muonTrack->Eta();
-        if ((IsTrigger(etaMu,ptMu)||IsAssociated(etaMu,ptMu)) && (IsGoodMUONtrack(*muonTrack)))
-          nGoodMuons++;
-      }
-    }
     miniEvt->reserve(miniEvt->size()+nGoodMuons);
     // fill them into the mini event
     for (Int_t iMu = 0; iMu<fESD->GetNumberOfMuonTracks(); iMu++) {
@@ -737,13 +757,35 @@ void AliDhcTask::GetESDTracks(MiniEvent* miniEvt)
       }
     }
   }
+
 }
 
 //________________________________________________________________________
 void AliDhcTask::GetAODTracks(MiniEvent* miniEvt)
 {
+  // check / count muons
+  Int_t nGoodMuons = 0;
+  Bool_t bAtLeastOneMuon = kFALSE;
+  if (fFillMuons || fRequireMuon) {
+    for (Int_t iMu = 0; iMu<fAOD->GetNumberOfTracks(); iMu++) {
+      AliAODTrack* muonTrack = dynamic_cast<AliAODTrack*>(fAOD->GetTrack(iMu));
+      if(!muonTrack) AliFatal("Not a standard AOD");
+      if (muonTrack) {
+        if (!IsGoodMUONtrack(*muonTrack))
+          continue;
+        Double_t ptMu   = muonTrack->Pt();
+        if (ptMu>fReqPtLo && ptMu<fReqPtHi)
+          bAtLeastOneMuon = kTRUE;
+        Double_t etaMu  = muonTrack->Eta();
+        if (IsTrigger(etaMu,ptMu)||IsAssociated(etaMu,ptMu))
+          nGoodMuons++;
+      }
+    }
+  }
+  if (fRequireMuon && !bAtLeastOneMuon)
+    return;
+  
   // Loop twice: 1. Count sel. tracks. 2. Fill vector.
-
   if (fTracksName.IsNull()) {
     Int_t nTrax = fAOD->GetNumberOfTracks();
     Int_t nSelTrax = 0;
@@ -843,21 +885,8 @@ void AliDhcTask::GetAODTracks(MiniEvent* miniEvt)
     }
   }
 
+  // fill muons into minievent
   if (fFillMuons) {
-    // count good muons
-    Int_t nGoodMuons = 0;
-    for (Int_t iMu = 0; iMu<fAOD->GetNumberOfTracks(); iMu++) {
-      AliAODTrack* muonTrack = dynamic_cast<AliAODTrack*>(fAOD->GetTrack(iMu));
-      if(!muonTrack) AliFatal("Not a standard AOD");
-      if (muonTrack) {
-        if (!IsGoodMUONtrack(*muonTrack))
-          continue;
-        Double_t ptMu   = muonTrack->Pt();
-        Double_t etaMu  = muonTrack->Eta();
-        if ((IsTrigger(etaMu,ptMu)||IsAssociated(etaMu,ptMu)) && (IsGoodMUONtrack(*muonTrack)))
-          nGoodMuons++;
-      }
-    }
     miniEvt->reserve(miniEvt->size()+nGoodMuons);
     // fill them into the mini event
     for (Int_t iMu = 0; iMu<fAOD->GetNumberOfTracks(); iMu++) {
@@ -875,6 +904,7 @@ void AliDhcTask::GetAODTracks(MiniEvent* miniEvt)
       }
     }
   }
+
 }
 
 //________________________________________________________________________
index 5bb34a540aa92c94cd87205916b46e4b987623db..39c8f2e67dae9152d592d577ed41bf9c861474fb 100644 (file)
@@ -46,6 +46,11 @@ class AliDhcTask : public AliAnalysisTaskSE {
   void         SetEtaTRange(Double_t eL, Double_t eH) { fEtaTLo=eL; fEtaTHi=eH;   }
   void         SetEtaARange(Double_t eL, Double_t eH) { fEtaALo=eL; fEtaAHi=eH;   }
   void         SetFillMuons(Bool_t b)                 { fFillMuons = b;           }
+  void         SetRequireMuon(Bool_t b, Double_t l=0.5, Double_t h=4.0) {
+    fRequireMuon = b;
+    fReqPtLo = l;
+    fReqPtHi = h;
+  }
   void         SetHEffA(THnF *h)                      { fHEffA=h;                 }
   void         SetHEffT(THnF *h)                      { fHEffT=h;                 }
   void         SetMixInEtaT(Bool_t b)                 { fMixInEtaT = b;           }
@@ -98,6 +103,9 @@ class AliDhcTask : public AliAnalysisTaskSE {
   TString            fTracksName;      //  name of track collection
   Bool_t             fDoWeights;       //  if true weight with 1/N per event
   Bool_t             fFillMuons;       //  fill the muon tracks into the mini event
+  Bool_t             fRequireMuon;     //  only run on events with a muon track
+  Double_t           fReqPtLo;         //  require a muon above this pt
+  Double_t           fReqPtHi;         //  and below this pt
   Bool_t             fPtTACrit;        //  use the pTT > pTA criterion?
   Bool_t             fAllTAHists;      //  create all pTT,pTA combination hists, even t<a?
   Bool_t             fMixInEtaT;       //  mix in bins of eta_T instead of z_vertex
@@ -113,7 +121,7 @@ class AliDhcTask : public AliAnalysisTaskSE {
   TString            fCentMethod;      //  centrality selection method
   Int_t              fNBdeta;          //  no. deta bins
   Int_t              fNBdphi;          //  no. dphi bins
-  Bool_t             fTriggerMatch;    //  muon trigger match 
+  Bool_t             fTriggerMatch;    //  muon trigger match
   TAxis             *fBPtT;            //  ptt binning
   TAxis             *fBPtA;            //  pta binning
   TAxis             *fBCent;           //  centrality binning
@@ -126,6 +134,7 @@ class AliDhcTask : public AliAnalysisTaskSE {
   AliAODEvent       *fAOD;             //! AOD object
   TList             *fOutputList;      //! Output list
   TH2               *fHEvt;            //! Cent vs vtx.
+  TH2               *fHEvtWTr;         //! Cent vs vtx. for events with at least one track
   TH2               *fHTrk;            //! Phi vs Eta
   TH2               *fHPoolReady;      //! Check how many Jobs start mixing
   TH1               *fHPtAss;          //! Pt ass
index 847de833924a6a408602d9e3b74b8a85d39b1e27..820c836edbdfe0c499a97a6b2a37a663c11885d5 100644 (file)
@@ -78,6 +78,7 @@ AliDhcTask *AddTaskDhc(
     }
     
     dhcTask = new AliDhcTask("Task_Dhc_Temp_Name");
+    dhcTask->SetDoFillSame(doFillSame);
     if (iAna==1) { // h-h
       Int_t nDetaBins = 40;
       Int_t nDPhiBins = 72;
@@ -142,7 +143,6 @@ AliDhcTask *AddTaskDhc(
     }
     dhcTask->SetTracksName(chNTracks);
     dhcTask->SetDoWeights(kFALSE);
-    dhcTask->SetDoFillSame(doFillSame);
     dhcTask->SetDoMassCut(doMassCut);
     dhcTask->SetClassName(className);
     dhcTask->SetCentMethod(centSel);