]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
1 validate the official physics selection, centrality selection and event plane selec...
authorpcrochet <pcrochet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 12 Jun 2012 10:50:00 +0000 (10:50 +0000)
committerpcrochet <pcrochet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 12 Jun 2012 10:50:00 +0000 (10:50 +0000)
13 files changed:
PWG/muon/AddTaskMuonsHF.C
PWG/muon/AliAnalysisTaskSEMuonsHF.cxx
PWG/muon/AliAnalysisTaskSEMuonsHF.h
PWG/muon/AliDimuInfoStoreMC.cxx
PWG/muon/AliDimuInfoStoreMC.h
PWG/muon/AliDimuInfoStoreRD.cxx
PWG/muon/AliDimuInfoStoreRD.h
PWG/muon/AliMuonInfoStoreMC.cxx
PWG/muon/AliMuonInfoStoreMC.h
PWG/muon/AliMuonInfoStoreRD.cxx
PWG/muon/AliMuonInfoStoreRD.h
PWG/muon/AliMuonsHFHeader.cxx
PWG/muon/AliMuonsHFHeader.h

index 5d804091c170689ab0f406eea129a593175e4504..15c19e35b69ae816c43cfa6d4082202f2a93bf82 100644 (file)
@@ -31,37 +31,13 @@ AliAnalysisTaskSEMuonsHF* AddTaskMuonsHF(Int_t mode=0, Bool_t isMC=kFALSE, Bool_
                           999999.0,   // up limit of vt
                          -999999.0,   // centrality min
                           999999.0};  // centrality max
-  Double_t cutsMuon[16]={-999999.0,   //  0, min of 3-momentum
-                          999999.0,   //  1, max of 3-momnentum
-                         -999999.0,   //  2, PtMin
-                          999999.0,   //  3, PtMax
-                         -999999.0,   //  4, EtaMin
-                          999999.0,   //  5, EtaMax
-                         -999999.0,   //  6, DCAmin
-                          999999.0,   //  7, DCAmax
-                         -999999.0,   //  8, for trigger
-                          999999.0,   //  9, for trigger
-                         -999999.0,   // 10, ThetaAbsEndMin
-                          999999.0,   // 11, ThetaAbsEndMax
-                         -999999.0,   // 12, chi2 tracker Min
-                          999999.0,   // 13, chi2 tracker Max
-                         -999999.0,   // 14, chi2 trigger Min
-                          999999.0};  // 15, chi2 trigger Max
-  Double_t cutsDimu[16]={-999999.0, 999999.0,  // single muon cuts used for dimuon selection
-                         -999999.0, 999999.0,
-                         -999999.0, 999999.0,
-                         -999999.0, 999999.0,
-                         -999999.0, 999999.0,
-                         -999999.0, 999999.0,
-                         -999999.0, 999999.0,
-                         -999999.0, 999999.0};
-  AliAnalysisTaskSEMuonsHF *taskMuonsHF = new AliAnalysisTaskSEMuonsHF("MuonsHF Analysis Task");
+  AliMuonTrackCuts *cutsMuon = new AliMuonTrackCuts("cutsMuon", "cutsMuon"); cutsMuon->SetIsMC(isMC);
+  AliMuonPairCuts  *cutsDimu = new  AliMuonPairCuts("cutsDimu", "cutsDimu"); cutsDimu->SetIsMC(isMC);
+  AliAnalysisTaskSEMuonsHF *taskMuonsHF = new AliAnalysisTaskSEMuonsHF("MuonsHF Analysis Task",*cutsMuon,*cutsDimu);
   taskMuonsHF->SetAnaMode(mode);
   taskMuonsHF->SetUseMC(isMC);
   taskMuonsHF->SetIsOutputTree(isTree);
   taskMuonsHF->SetEvsHCuts(cutsEvsH);
-  taskMuonsHF->SetMuonCuts(cutsMuon);
-  taskMuonsHF->SetDimuCuts(cutsDimu);
   if (isSel) taskMuonsHF->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kMUON);
   mgr->AddTask(taskMuonsHF);
 
index 7f61b29d19d09ad987d1e7e94a0259f233af57bf..c421af502819f11c0024b928ba4b3068cac91eb5 100644 (file)
@@ -45,6 +45,8 @@
 #include "AliDimuInfoStoreMC.h"
 #include "AliAnalysisManager.h"
 #include "AliInputEventHandler.h"
+#include "AliMuonTrackCuts.h"
+#include "AliMuonPairCuts.h"
 #include "AliAnalysisTaskSEMuonsHF.h"
 
 ClassImp(AliAnalysisTaskSEMuonsHF)
@@ -55,6 +57,8 @@ AliAnalysisTaskSE(),
 fAnaMode(0),
 fIsOutputTree(kFALSE),
 fIsMC(kFALSE),
+fCutsMuon(0x0),
+fCutsDimu(0x0),
 fHeader(0),
 fMuonClArr(0),
 fDimuClArr(0),
@@ -66,11 +70,13 @@ fListOutput(0)
 }
 
 //_____________________________________________________________________________
-AliAnalysisTaskSEMuonsHF::AliAnalysisTaskSEMuonsHF(const char *name) :
+AliAnalysisTaskSEMuonsHF::AliAnalysisTaskSEMuonsHF(const char *name, const AliMuonTrackCuts& cutsMuon, const AliMuonPairCuts& cutsDimu) :
 AliAnalysisTaskSE(name),
 fAnaMode(0),
 fIsOutputTree(kFALSE),
 fIsMC(kFALSE),
+fCutsMuon(new AliMuonTrackCuts(cutsMuon)),
+fCutsDimu(new AliMuonPairCuts(cutsDimu)),
 fHeader(0),
 fMuonClArr(0),
 fDimuClArr(0),
@@ -88,6 +94,8 @@ AliAnalysisTaskSEMuonsHF::~AliAnalysisTaskSEMuonsHF()
   //
   // Default destructor
   //
+  if (fCutsMuon)   { delete fCutsMuon;   fCutsMuon  =NULL; }
+  if (fCutsDimu)   { delete fCutsDimu;   fCutsDimu  =NULL; }
   if (fHeader)     { delete fHeader;     fHeader    =NULL; }
   if (fMuonClArr)  { delete fMuonClArr;  fMuonClArr =NULL; }
   if (fDimuClArr)  { delete fDimuClArr;  fDimuClArr =NULL; }
@@ -144,6 +152,8 @@ void AliAnalysisTaskSEMuonsHF::UserCreateOutputObjects()
     if (fAnaMode!=1) AddAODBranch("TClonesArray", &fDimuClArr);
   }
 
+  fCutsMuon->Print("mask");
+  fCutsDimu->Print("mask");
   return;
 }
 
@@ -160,6 +170,9 @@ void AliAnalysisTaskSEMuonsHF::UserExec(Option_t *)
     } else { AliError("MC event not found. Nothing done!"); return; }
   }
 
+  if ( !fCutsMuon) { AliError("AliMuonTrackCuts should be loaded!"); return;}
+  if ((!fCutsDimu) && (fAnaMode!=1)) { AliError("AliMuonPairCuts should be loaded!"); return; }
+
   Int_t ntrks = 0;
   AliAODEvent *aod = 0;
   AliESDEvent *esd = 0;
@@ -168,26 +181,21 @@ void AliAnalysisTaskSEMuonsHF::UserExec(Option_t *)
     if (!aod) { AliError("AOD event not found. Nothing done!"); return; }
     if (!fIsMC && (aod->GetHeader()->GetEventType()!=7)) return;
     ntrks = aod->GetNTracks();
-    fHeader->SetFiredTriggerClass(aod->GetFiredTriggerClasses());
   } else {
     esd = dynamic_cast<AliESDEvent*>(InputEvent());
     if (!esd) { AliError("ESD event not found. Nothing done!"); return; }
     if (!fIsMC && (esd->GetHeader()->GetEventType()!=7)) return;
     ntrks = esd->GetNumberOfMuonTracks();
-    fHeader->SetFiredTriggerClass(esd->GetFiredTriggerClasses());
-    AliCentrality *cent = esd->GetCentrality();
-    fHeader->SetCentrality(cent->GetCentralityPercentile("V0M"));  // Just for ESD
-  }
+  } if (fIsOutputTree) AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillAOD(kTRUE);
 
-  if (fIsOutputTree) AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillAOD(kTRUE);
-  if (fInputHandler && fInputHandler->GetEventSelection()) fHeader->SetSelectionMask(fInputHandler->IsEventSelected());
-  fHeader->SetVertex(((AliVVertex*)InputEvent()->GetPrimaryVertex()));
+  fHeader->SetEventInfo(fInputHandler, MCEvent());
   fHeader->FillHistosEvnH(fListOutput);
 
   fMuonClArr->Delete();
   TClonesArray &muonRef = *fMuonClArr;
   Int_t countN = fMuonClArr->GetEntriesFast();
 
+  Int_t trkID[ntrks];
   AliAODTrack        *trkAOD = 0;
   AliESDMuonTrack    *trkESD = 0;
   AliMuonInfoStoreRD *muonRD = 0;
@@ -196,32 +204,28 @@ void AliAnalysisTaskSEMuonsHF::UserExec(Option_t *)
     if (aod) {
       trkAOD = (AliAODTrack*)aod->GetTrack(itrk);
       if (!trkAOD->IsMuonTrack())        { trkAOD=0; continue; }
-      if (fIsMC) muonMC = new AliMuonInfoStoreMC(trkAOD, MCEvent());
-      else muonRD = new AliMuonInfoStoreRD(trkAOD);
+      if (fIsMC) muonMC = new AliMuonInfoStoreMC(trkAOD,MCEvent(),fCutsMuon->GetSelectionMask(trkAOD));
+      else muonRD = new AliMuonInfoStoreRD(trkAOD,fCutsMuon->GetSelectionMask(trkAOD));
       trkAOD = 0;
     } else {
       trkESD = (AliESDMuonTrack*)esd->GetMuonTrack(itrk);
       if (!trkESD->ContainTrackerData()) { trkESD=0; continue; }
-      if (fIsMC) muonMC = new AliMuonInfoStoreMC(trkESD, MCEvent());
-      else muonRD = new AliMuonInfoStoreRD(trkESD);
+      if (fIsMC) muonMC = new AliMuonInfoStoreMC(trkESD,MCEvent(),fCutsMuon->GetSelectionMask(trkESD));
+      else muonRD = new AliMuonInfoStoreRD(trkESD,fCutsMuon->GetSelectionMask(trkESD));
       trkESD = 0;
-    }
-
-    if (muonRD) {
+    } if (muonRD) {
       new(muonRef[countN++]) AliMuonInfoStoreRD(*muonRD);
       if (fAnaMode!=2) fHeader->FillHistosMuon(fListOutput, muonRD);
-    }
-    if (muonMC) {
+    } if (muonMC) {
       new(muonRef[countN++]) AliMuonInfoStoreMC(*muonMC);
       if (fAnaMode!=2) fHeader->FillHistosMuon(fListOutput, muonMC, muonMC->Source());
-    }
+    } trkID[countN-1] = itrk;
 
     if (muonRD) { delete muonRD; muonRD=0; }
     if (muonMC) { delete muonMC; muonMC=0; }
   }  // end loop of all tracks
 
-  aod = 0; esd = 0;
-  if (fAnaMode==1) { PostData(1,fListOutput); return; }
+  if (fAnaMode==1) { aod=0; esd=0; PostData(1,fListOutput); return; }
 
   fDimuClArr->Delete();
   countN = fDimuClArr->GetEntriesFast();
@@ -232,11 +236,12 @@ void AliAnalysisTaskSEMuonsHF::UserExec(Option_t *)
   ntrks = fMuonClArr->GetEntriesFast();
   for (Int_t itrk=0; itrk<ntrks-1; itrk++) {  // 1st loop over muon tracks
     for (Int_t jtrk=itrk+1; jtrk<ntrks; jtrk++) {  // 2nd loop ofver muon tracks
-      if (fIsMC)
-        dimuMC = new AliDimuInfoStoreMC((AliMuonInfoStoreMC*)fMuonClArr->At(itrk), (AliMuonInfoStoreMC*)fMuonClArr->At(jtrk));
-      else {
-        dimuRD = new AliDimuInfoStoreRD((AliMuonInfoStoreRD*)fMuonClArr->At(itrk), (AliMuonInfoStoreRD*)fMuonClArr->At(jtrk));
-      }
+      UInt_t selMask = 0;
+      if (aod) selMask = fCutsDimu->GetSelectionMask(aod->GetTrack(    trkID[itrk]),aod->GetTrack(    trkID[jtrk]));
+      else     selMask = fCutsDimu->GetSelectionMask(esd->GetMuonTrack(trkID[itrk]),esd->GetMuonTrack(trkID[jtrk]));
+
+      if (fIsMC) dimuMC = new AliDimuInfoStoreMC((AliMuonInfoStoreMC*)fMuonClArr->At(itrk),(AliMuonInfoStoreMC*)fMuonClArr->At(jtrk),selMask);
+      else       dimuRD = new AliDimuInfoStoreRD((AliMuonInfoStoreRD*)fMuonClArr->At(itrk),(AliMuonInfoStoreRD*)fMuonClArr->At(jtrk),selMask);
 
       if (dimuRD) {
         fHeader->FillHistosDimu(fListOutput, dimuRD);
@@ -252,6 +257,7 @@ void AliAnalysisTaskSEMuonsHF::UserExec(Option_t *)
     }  // end 2nd loop of muon tracks
   }  // end 1st loop of muon tracks
 
+  aod = 0; esd = 0;
   PostData(1, fListOutput);
   return;
 }
@@ -265,3 +271,12 @@ void AliAnalysisTaskSEMuonsHF::Terminate(Option_t *)
 
   return;
 }
+
+void AliAnalysisTaskSEMuonsHF::NotifyRun()
+{
+  // Notify of the current run number
+
+  if (fCutsMuon) fCutsMuon->SetRun(fCurrentRunNumber);
+  if (fCutsDimu) fCutsDimu->SetRun(fCurrentRunNumber);
+  return;
+}
index d8d1ba4615dfc07eb4df63bb4769c5eced0dccb5..f942ad39d17b30e496cbcabf9ac069b91aa76e4d 100644 (file)
@@ -19,12 +19,14 @@ class TString;
 class TList;
 class TClonesArray;
 class AliMuonsHFHeader;
+class AliMuonTrackCuts;
+class AliMuonPairCuts;
 
 class AliAnalysisTaskSEMuonsHF : public AliAnalysisTaskSE {
  public:
 
   AliAnalysisTaskSEMuonsHF();
-  AliAnalysisTaskSEMuonsHF(const char *name);
+  AliAnalysisTaskSEMuonsHF(const char *name, const AliMuonTrackCuts& cutsMuon, const AliMuonPairCuts& cutsDimu);
   virtual ~AliAnalysisTaskSEMuonsHF();
 
   virtual void Init();
@@ -32,14 +34,13 @@ class AliAnalysisTaskSEMuonsHF : public AliAnalysisTaskSE {
   virtual void UserCreateOutputObjects();
   virtual void UserExec(Option_t *opt);
   virtual void Terminate(Option_t *opt);
+  virtual void NotifyRun();
 
   void SetAnaMode(Int_t mode)      { fAnaMode      = ((mode>=0 && mode<3) ? mode : 0); }
   void SetIsOutputTree(Bool_t ist) { fIsOutputTree = ist;                              }
   void SetUseMC(Bool_t isMC)       { fIsMC         = isMC;                             }
 
-  void SetEvsHCuts(Double_t cuts[3])  const { AliMuonsHFHeader::SetSelectionCuts(cuts);   }
-  void SetMuonCuts(Double_t cuts[12]) const { AliMuonInfoStoreRD::SetSelectionCuts(cuts); }
-  void SetDimuCuts(Double_t cuts[12]) const { AliDimuInfoStoreRD::SetSelectionCuts(cuts); }
+  void SetEvsHCuts(Double_t cuts[5])  const { AliMuonsHFHeader::SetSelectionCuts(cuts);   }
 
  private:
 
@@ -52,12 +53,15 @@ class AliAnalysisTaskSEMuonsHF : public AliAnalysisTaskSE {
   Bool_t fIsOutputTree;  // flag used to switch on/off tree output
   Bool_t fIsMC;          // flag of whether the input is MC
 
+  AliMuonTrackCuts *fCutsMuon;  // single muon selection cuts
+  AliMuonPairCuts  *fCutsDimu;  // dimuon selection cuts
+
   AliMuonsHFHeader *fHeader;  // output for info at ev level
   TClonesArray  *fMuonClArr;  // output clones array for single mu
   TClonesArray  *fDimuClArr;  // output clones array for dimu
   TList *fListOutput;         // output list of histos
 
-  ClassDef(AliAnalysisTaskSEMuonsHF, 6);
+  ClassDef(AliAnalysisTaskSEMuonsHF, 7);
 };
 
 #endif
index f4c52072ea12d687a8a110e43ee49217ae59ea37..4ec84670061950ca5e0594ba1184df4f0507676c 100644 (file)
@@ -45,7 +45,7 @@ fSource(-1)
 }
 
 //-----------------------------------------------------------------------------
-AliDimuInfoStoreMC::AliDimuInfoStoreMC(AliMuonInfoStoreMC* const trk0, AliMuonInfoStoreMC* const trk1, Bool_t full) :
+AliDimuInfoStoreMC::AliDimuInfoStoreMC(AliMuonInfoStoreMC* const trk0, AliMuonInfoStoreMC* const trk1, UInt_t selMask, Bool_t full) :
 AliDimuInfoStoreRD(),
 fIsFull(full),
 fLorentzP(),
@@ -54,6 +54,7 @@ fSource(-1)
   //
   // default constructor
   //
+  fSelMask = selMask;
   fMuonRef[0] = trk0;
   fMuonRef[1] = trk1;
   fLorentzP = trk0->LorentzP() + trk1->LorentzP();
index b7306aa456a4e4fe230f5b38d0f9a483971aab6b..34fb6ba19852b604994d9a6d4b7f0e619af67831 100644 (file)
@@ -21,7 +21,7 @@ class AliDimuInfoStoreMC : public AliDimuInfoStoreRD {
  public:
 
   AliDimuInfoStoreMC();
-  AliDimuInfoStoreMC(AliMuonInfoStoreMC *trk0, AliMuonInfoStoreMC *trk1, Bool_t full=kFALSE);
+  AliDimuInfoStoreMC(AliMuonInfoStoreMC *trk0, AliMuonInfoStoreMC *trk1, UInt_t selMask, Bool_t full=kFALSE);
   AliDimuInfoStoreMC(const AliDimuInfoStoreMC &src);
   AliDimuInfoStoreMC& operator=(const AliDimuInfoStoreMC &src);
   virtual ~AliDimuInfoStoreMC();
@@ -43,7 +43,7 @@ class AliDimuInfoStoreMC : public AliDimuInfoStoreRD {
   static const TString fgkStdBranchName;  // Standard branch name
   static const Int_t   fgkSourcesN;       // num. of dimuon sources
 
-  Bool_t fIsFull;  // flag of using full analysis (for Pb-Pb)
+  Bool_t fIsFull;   // flag of using full analysis (for Pb-Pb)
   TLorentzVector fLorentzP;  // lorentz momentum of MC particle
   Int_t fSource;  // = 0, BBdiff
                   // = 1, Bchain
@@ -52,7 +52,7 @@ class AliDimuInfoStoreMC : public AliDimuInfoStoreRD {
                   // = 4, Resonance
                   // = 5, UnCorr bkg
 
-  ClassDef(AliDimuInfoStoreMC, 5);
+  ClassDef(AliDimuInfoStoreMC, 7);
 };
 
 #endif
index a1ebcd337d1c3748525a64e6498eeefe9ec502a0..37b1b197c3854846a52e35f15e43b3f3d6c8443a 100644 (file)
 ClassImp(AliDimuInfoStoreRD)
 
 const TString AliDimuInfoStoreRD::fgkStdBranchName("DimuRD");
-Double_t      AliDimuInfoStoreRD::fgCutd[16] = {-999999., 999999.,
-                                                -999999., 999999.,
-                                                -999999., 999999.,
-                                                -999999., 999999.,
-                                                -999999., 999999.,
-                                                -999999., 999999.,
-                                                -999999., 999999.,
-                                                -999999., 999999.};
 
 //-----------------------------------------------------------------------------
 AliDimuInfoStoreRD::AliDimuInfoStoreRD() :
 TObject(),
+fSelMask(0),
 fMomentum(),
 fCharge(0),
 fInvM(0.)
@@ -55,8 +48,9 @@ fInvM(0.)
 }
 
 //-----------------------------------------------------------------------------
-AliDimuInfoStoreRD::AliDimuInfoStoreRD(AliMuonInfoStoreRD* const trk0, AliMuonInfoStoreRD* const trk1) :
+AliDimuInfoStoreRD::AliDimuInfoStoreRD(AliMuonInfoStoreRD* const trk0, AliMuonInfoStoreRD* const trk1, UInt_t selMask) :
 TObject(),
+fSelMask(selMask),
 fMomentum(),
 fCharge(0),
 fInvM(0.)
@@ -72,6 +66,7 @@ fInvM(0.)
 //-----------------------------------------------------------------------------
 AliDimuInfoStoreRD::AliDimuInfoStoreRD(const AliDimuInfoStoreRD &src) :
 TObject(src),
+fSelMask(src.fSelMask),
 fMomentum(src.fMomentum),
 fCharge(src.fCharge),
 fInvM(src.fInvM)
@@ -90,6 +85,7 @@ AliDimuInfoStoreRD& AliDimuInfoStoreRD::operator=(const AliDimuInfoStoreRD &src)
   //
   if(&src==this) return *this;
 
+  fSelMask  = src.fSelMask;
   fMomentum = src.fMomentum;
   fCharge   = src.fCharge;
   fInvM     = src.fInvM;
@@ -114,13 +110,13 @@ void AliDimuInfoStoreRD::FillDimuInfo()
   AliMuonInfoStoreRD *trk0 = (AliMuonInfoStoreRD*)fMuonRef[0].GetObject();
   AliMuonInfoStoreRD *trk1 = (AliMuonInfoStoreRD*)fMuonRef[1].GetObject();
 
-  fMomentum = trk0->Momentum() + trk1->Momentum();
+  fMomentum = trk0->MomentumAtVtx() + trk1->MomentumAtVtx();
   fCharge   = trk0->Charge()   + trk1->Charge();
 
   Double_t mMu = TDatabasePDG::Instance()->GetParticle(13)->Mass();
   TLorentzVector lorentzP0, lorentzP1, lorentzP;
-  lorentzP0.SetVectM(trk0->Momentum(), mMu);
-  lorentzP1.SetVectM(trk1->Momentum(), mMu);
+  lorentzP0.SetVectM(trk0->MomentumAtVtx(), mMu);
+  lorentzP1.SetVectM(trk1->MomentumAtVtx(), mMu);
   lorentzP = lorentzP0 + lorentzP1;
   fInvM = lorentzP.Mag();
 
@@ -128,20 +124,3 @@ void AliDimuInfoStoreRD::FillDimuInfo()
   trk1 = 0;
   return;
 }
-
-//-----------------------------------------------------------------------------
-Bool_t AliDimuInfoStoreRD::IsSelected()
-{
-  // select dimuon candidates according to the corresponding two muon tracks cuts
-
-  Double_t cutsOld[16];
-  AliMuonInfoStoreRD::SelectionCust(cutsOld);
-  AliMuonInfoStoreRD::SetSelectionCuts(AliDimuInfoStoreRD::fgCutd);
-  AliMuonInfoStoreRD *trk0 = (AliMuonInfoStoreRD*)fMuonRef[0].GetObject();
-  AliMuonInfoStoreRD *trk1 = (AliMuonInfoStoreRD*)fMuonRef[1].GetObject(); 
-  if (!trk0->IsSelected()) { AliMuonInfoStoreRD::SetSelectionCuts(cutsOld); return kFALSE; }
-  if (!trk1->IsSelected()) { AliMuonInfoStoreRD::SetSelectionCuts(cutsOld); return kFALSE; }
-
-  AliMuonInfoStoreRD::SetSelectionCuts(cutsOld);
-  return kTRUE;
-}
index 72f3b96242772b5b8a4dd28b33e9e86fa5c2e442..975ebeb789aa46268a84736de50cca6127a29c6e 100644 (file)
@@ -24,7 +24,7 @@ class AliDimuInfoStoreRD : public TObject {
  public:
 
   AliDimuInfoStoreRD();
-  AliDimuInfoStoreRD(AliMuonInfoStoreRD* const trk0, AliMuonInfoStoreRD* const trk1);
+  AliDimuInfoStoreRD(AliMuonInfoStoreRD* const trk0, AliMuonInfoStoreRD* const trk1, UInt_t selMask);
   AliDimuInfoStoreRD(const AliDimuInfoStoreRD &src);
   AliDimuInfoStoreRD& operator=(const AliDimuInfoStoreRD &src);
   virtual ~AliDimuInfoStoreRD();
@@ -34,27 +34,26 @@ class AliDimuInfoStoreRD : public TObject {
   TVector3 Momentum() const { return fMomentum; }
   Short_t  Charge()   const { return fCharge;   }
   Double_t InvM()     const { return fInvM;     }
-
-  Bool_t IsSelected();
+  UInt_t   SelMask()  const { return fSelMask;  }
+  Bool_t IsSelected(const UInt_t filter) { return ((fSelMask & filter) == filter); }
 
   static const char* StdBranchName() { return fgkStdBranchName.Data(); }
-  static void SetSelectionCuts(Double_t cuts[16]) { for (Int_t i=16; i--;) fgCutd[i]=cuts[i]; }
 
  protected:
 
   void FillDimuInfo();
+  UInt_t fSelMask;   // dimuon selection mask
   TRef fMuonRef[2];  // ref to the two corresponding muon tracks
 
  private:
 
   static const TString fgkStdBranchName;  // Standard branch name
-  static Double_t fgCutd[16];             // single muon cuts for dimuon selection
 
   TVector3 fMomentum;  // 3-momentum of dimuon
   Short_t  fCharge;    // charge of dimuon
   Double_t fInvM;      // invariance mass of dimuon
 
-  ClassDef(AliDimuInfoStoreRD, 5);
+  ClassDef(AliDimuInfoStoreRD, 7);
 };
 
 #endif
index b7b18b53f408d83e047d64a5eccf6dab7c6bbbea..30e5bee2b476708689abf9bc71e3ede2e1f2082b 100644 (file)
@@ -58,8 +58,8 @@ fWeight(0.)
 }
 
 //-----------------------------------------------------------------------------
-AliMuonInfoStoreMC::AliMuonInfoStoreMC(AliAODTrack *trkAOD, AliMCEvent *mcEvent, Bool_t full) :
-AliMuonInfoStoreRD(trkAOD),
+AliMuonInfoStoreMC::AliMuonInfoStoreMC(AliAODTrack *trkAOD, AliMCEvent *mcEvent, UInt_t selMask, Bool_t full) :
+AliMuonInfoStoreRD(trkAOD,selMask),
 fIsFull(full),
 fLorentzP(),
 fTrackIndex(-1),
@@ -79,8 +79,8 @@ fWeight(0.)
 }
 
 //-----------------------------------------------------------------------------
-AliMuonInfoStoreMC::AliMuonInfoStoreMC(AliESDMuonTrack *trkESD, AliMCEvent *mcEvent, Bool_t full) :
-AliMuonInfoStoreRD(trkESD),
+AliMuonInfoStoreMC::AliMuonInfoStoreMC(AliESDMuonTrack *trkESD, AliMCEvent *mcEvent, UInt_t selMask, Bool_t full) :
+AliMuonInfoStoreRD(trkESD,selMask),
 fIsFull(full),
 fLorentzP(),
 fTrackIndex(-1),
index 2690d7df5e95a8cda178245c7fc6bcbb9a214223..2a2192f8eedf98ce374f3c3920b81230820537d3 100644 (file)
@@ -31,8 +31,8 @@ class AliMuonInfoStoreMC : public AliMuonInfoStoreRD {
  public:
 
   AliMuonInfoStoreMC();
-  AliMuonInfoStoreMC(AliAODTrack     *trkAOD, AliMCEvent *mcEvent, Bool_t full=kFALSE);
-  AliMuonInfoStoreMC(AliESDMuonTrack *trkESD, AliMCEvent *mcEvent, Bool_t full=kFALSE);
+  AliMuonInfoStoreMC(AliAODTrack     *trkAOD, AliMCEvent *mcEvent, UInt_t selMask, Bool_t full=kFALSE);
+  AliMuonInfoStoreMC(AliESDMuonTrack *trkESD, AliMCEvent *mcEvent, UInt_t selMask, Bool_t full=kFALSE);
   AliMuonInfoStoreMC(const AliMuonInfoStoreMC &src);
   AliMuonInfoStoreMC& operator=(const AliMuonInfoStoreMC &src);
   virtual ~AliMuonInfoStoreMC();
index 172d138fa59357c3114b76e35f97ed8f49ff413a..7ae50d860de8936c0d4764de388edad989cfc20b 100644 (file)
@@ -32,24 +32,19 @@ class TObject;
 ClassImp(AliMuonInfoStoreRD)
 
 const TString AliMuonInfoStoreRD::fgkStdBranchName("MuonRD");
-Double_t      AliMuonInfoStoreRD::fgCuts[16] = {-999999., 999999.,
-                                                -999999., 999999.,
-                                                -999999., 999999.,
-                                                -999999., 999999.,
-                                                -999999., 999999.,
-                                                -999999., 999999.,
-                                                -999999., 999999.,
-                                                -999999., 999999.};
 
 //-----------------------------------------------------------------------------
 AliMuonInfoStoreRD::AliMuonInfoStoreRD() :
 TObject(),
-fMomentum(),
+fMomentumAtVtx(),
+fMomentumAtDCA(),
+fMomentumUncor(),
 fCharge(0),
 fMatchTrigger(-1),
 fChi2FitMomentum(0.),
 fChi2MatchTrigger(0.),
-fRabsEnd(0.)
+fRabsEnd(0.),
+fSelMask(0)
 {
   //
   // default constructor
@@ -58,14 +53,17 @@ fRabsEnd(0.)
 }
 
 //-----------------------------------------------------------------------------
-AliMuonInfoStoreRD::AliMuonInfoStoreRD(AliAODTrack *trk) :
+AliMuonInfoStoreRD::AliMuonInfoStoreRD(AliAODTrack *trk, UInt_t selMask) :
 TObject(),
-fMomentum(),
+fMomentumAtVtx(),
+fMomentumAtDCA(),
+fMomentumUncor(),
 fCharge(0),
 fMatchTrigger(-1),
 fChi2FitMomentum(0.),
 fChi2MatchTrigger(0.),
-fRabsEnd(0.)
+fRabsEnd(0.),
+fSelMask(selMask)
 {
   //
   // AOD-base constructor
@@ -75,14 +73,17 @@ fRabsEnd(0.)
 }
 
 //-----------------------------------------------------------------------------
-AliMuonInfoStoreRD::AliMuonInfoStoreRD(AliESDMuonTrack *trk) :
+AliMuonInfoStoreRD::AliMuonInfoStoreRD(AliESDMuonTrack *trk, UInt_t selMask) :
 TObject(),
-fMomentum(),
+fMomentumAtVtx(),
+fMomentumAtDCA(),
+fMomentumUncor(),
 fCharge(0),
 fMatchTrigger(-1),
 fChi2FitMomentum(0.),
 fChi2MatchTrigger(0.),
-fRabsEnd(0.)
+fRabsEnd(0.),
+fSelMask(selMask)
 {
   //
   // ESD-base constructor
@@ -94,12 +95,15 @@ fRabsEnd(0.)
 //-----------------------------------------------------------------------------
 AliMuonInfoStoreRD::AliMuonInfoStoreRD(const AliMuonInfoStoreRD &src) :
 TObject(src),
-fMomentum(src.fMomentum),
+fMomentumAtVtx(src.fMomentumAtVtx),
+fMomentumAtDCA(src.fMomentumAtDCA),
+fMomentumUncor(src.fMomentumUncor),
 fCharge(src.fCharge),
 fMatchTrigger(src.fMatchTrigger),
 fChi2FitMomentum(src.fChi2FitMomentum),
 fChi2MatchTrigger(src.fChi2MatchTrigger),
-fRabsEnd(src.fRabsEnd)
+fRabsEnd(src.fRabsEnd),
+fSelMask(src.fSelMask)
 {
   //
   // copy constructor
@@ -115,12 +119,15 @@ AliMuonInfoStoreRD& AliMuonInfoStoreRD::operator=(const AliMuonInfoStoreRD &src)
   //
   if(&src==this) return *this;
 
-  fMomentum         = src.fMomentum;
+  fMomentumAtVtx    = src.fMomentumAtVtx;
+  fMomentumAtDCA    = src.fMomentumAtDCA;
+  fMomentumUncor    = src.fMomentumUncor;
   fCharge           = src.fCharge;
   fMatchTrigger     = src.fMatchTrigger;
   fChi2FitMomentum  = src.fChi2FitMomentum;
   fChi2MatchTrigger = src.fChi2MatchTrigger;
   fRabsEnd          = src.fRabsEnd;
+  fSelMask          = src.fSelMask;
 
   for (Int_t i=3; i--;) fDCA[i]=src.fDCA[i];
 
@@ -141,18 +148,14 @@ void AliMuonInfoStoreRD::FillMuonInfo(AliAODTrack *trk)
   // extract reco info of muon track from AOD
 
   Double_t arr[3];
-  trk->PxPyPz(arr);
-  this->SetMomentum(arr);
-
-  trk->XYZAtDCA(arr);
-  this->SetDCA(arr);
-
+  trk->PxPyPz(arr);      this->SetMomentumAtVtx(arr);
+  trk->PxPyPzAtDCA(arr); this->SetMomentumAtDCA(arr);
+  trk->XYZAtDCA(arr);    this->SetDCA(arr);
   this->SetCharge(trk->Charge());
   this->SetMatchTrigger(trk->GetMatchTrigger());
   this->SetChi2FitMomentum(trk->Chi2perNDF());
   this->SetChi2MatchTrigger(trk->GetChi2MatchTrigger());
   this->SetRabsEnd(trk->GetRAtAbsorberEnd());
-
   return;
 }
 
@@ -163,51 +166,14 @@ void AliMuonInfoStoreRD::FillMuonInfo(AliESDMuonTrack *trk)
   // extract reco info of muon track from ESD
 
   Double_t arr[3];
-  trk->PxPyPz(arr);
-  this->SetMomentum(arr);
-
-  arr[0] = trk->GetNonBendingCoorAtDCA();
-  arr[1] = trk->GetBendingCoorAtDCA();
-  arr[2] = trk->GetZ();
-  this->SetDCA(arr);
-
+  arr[0]=trk->Px();                     arr[1]=trk->Py();                  arr[2]=trk->Pz();            this->SetMomentumAtVtx(arr);
+  arr[0]=trk->PxAtDCA();                arr[1]=trk->PyAtDCA();             arr[2]=trk->PzAtDCA();       this->SetMomentumAtDCA(arr);
+  arr[0]=trk->PxUncorrected();          arr[1]=trk->PyUncorrected();       arr[2]=trk->PzUncorrected(); this->SetMomentumUncor(arr);
+  arr[0]=trk->GetNonBendingCoorAtDCA(); arr[1]=trk->GetBendingCoorAtDCA(); arr[2]=trk->GetZ();          this->SetDCA(arr);
   this->SetCharge(trk->Charge());
   this->SetMatchTrigger(trk->GetMatchTrigger());
   this->SetChi2FitMomentum(trk->GetChi2()/(2.*trk->GetNHit()-5.));
   this->SetChi2MatchTrigger(trk->GetChi2MatchTrigger());
   this->SetRabsEnd(trk->GetRAtAbsorberEnd());
-
   return;
 }
-
-//-----------------------------------------------------------------------------
-Bool_t AliMuonInfoStoreRD::IsSelected()
-{
-  // select muon tracks according to the selection cuts
-
-  Double_t p = Momentum().Mag();
-  if (p<AliMuonInfoStoreRD::fgCuts[0] || p>AliMuonInfoStoreRD::fgCuts[1])               return kFALSE;
-
-  Double_t pt = Momentum().Pt();
-  if (pt<AliMuonInfoStoreRD::fgCuts[2] || pt>AliMuonInfoStoreRD::fgCuts[3])             return kFALSE;
-
-  Double_t eta = Momentum().Eta();
-  if (eta<AliMuonInfoStoreRD::fgCuts[4] || eta>AliMuonInfoStoreRD::fgCuts[5])           return kFALSE;
-
-  Double_t dca = this->DCA();
-  if (dca<AliMuonInfoStoreRD::fgCuts[6] || dca>AliMuonInfoStoreRD::fgCuts[7])           return kFALSE;
-
-  Int_t trigger = this->MatchTrigger();
-  if (trigger<AliMuonInfoStoreRD::fgCuts[8] || trigger>AliMuonInfoStoreRD::fgCuts[9])   return kFALSE;
-
-  Double_t theta = 180.*(1.-TMath::ATan(this->RabsEnd()/505.)/TMath::Pi());
-  if (theta<AliMuonInfoStoreRD::fgCuts[10] || theta>AliMuonInfoStoreRD::fgCuts[11])     return kFALSE;
-
-  Double_t chi2Trk = this->Chi2Tracker();
-  if (chi2Trk<AliMuonInfoStoreRD::fgCuts[12] || chi2Trk>AliMuonInfoStoreRD::fgCuts[13]) return kFALSE;
-
-  Double_t chi2Trg = this->Chi2Trigger();
-  if (chi2Trg<AliMuonInfoStoreRD::fgCuts[14] || chi2Trg>AliMuonInfoStoreRD::fgCuts[15]) return kFALSE;
-
-  return kTRUE;
-}
index 1462f92e218f2fa9a42563c4b2abb3c46721a4d3..0958b3653253a2a5d59e437fc5ea230ec8cf298e 100644 (file)
@@ -16,6 +16,7 @@
 #include <TObject.h>
 #include <TVector3.h>
 #include <TString.h>
+#include <TMath.h>
 
 class AliAODTrack;
 class AliESDMuonTrack;
@@ -24,13 +25,15 @@ class AliMuonInfoStoreRD : public TObject {
  public:
 
   AliMuonInfoStoreRD();
-  AliMuonInfoStoreRD(AliAODTrack *trk);
-  AliMuonInfoStoreRD(AliESDMuonTrack *trk);
+  AliMuonInfoStoreRD(AliAODTrack     *trk, UInt_t selMask);
+  AliMuonInfoStoreRD(AliESDMuonTrack *trk, UInt_t selMask);
   AliMuonInfoStoreRD(const AliMuonInfoStoreRD &src);
   AliMuonInfoStoreRD& operator=(const AliMuonInfoStoreRD &src);
   virtual ~AliMuonInfoStoreRD();
 
-  TVector3 Momentum()      const { return fMomentum; }
+  TVector3 MomentumAtVtx() const { return fMomentumAtVtx; }
+  TVector3 MomentumAtDCA() const { return fMomentumAtDCA; }
+  TVector3 MomentumUncor() const { return fMomentumUncor; }
 
   void XYZAtDCA(Double_t dca[3]) const { for (Int_t i=3; i--;) dca[i]=fDCA[i]; }
   Double_t DCA() const  { return TMath::Sqrt(fDCA[0]*fDCA[0]+fDCA[1]*fDCA[1]); }
@@ -40,21 +43,19 @@ class AliMuonInfoStoreRD : public TObject {
   Double_t Chi2Tracker()  const { return fChi2FitMomentum;  }
   Double_t Chi2Trigger()  const { return fChi2MatchTrigger; }
   Double_t RabsEnd()      const { return fRabsEnd;          }
-
-  Bool_t IsSelected();
-
-  static const char* StdBranchName()              { return fgkStdBranchName.Data(); }
-  static void SelectionCust(Double_t cuts[16])    { for (Int_t i=16; i--;) cuts[i]=fgCuts[i]; }
-  static void SetSelectionCuts(Double_t cuts[16]) { for (Int_t i=16; i--;) fgCuts[i]=cuts[i]; }
+  UInt_t   SelMask()      const { return fSelMask;          }
+  Bool_t   IsSelected(const UInt_t filter) { return ((fSelMask & filter) == filter); }
+  static const char* StdBranchName()       { return fgkStdBranchName.Data();       }
 
  private:
 
   void FillMuonInfo(AliAODTrack *trk);
   void FillMuonInfo(AliESDMuonTrack *trk);
 
-  void SetMomentum(Double_t p[3])      { fMomentum.SetXYZ(p[0],p[1],p[2]);      }
-
-  void SetDCA(Double_t dca[3]) { for (Int_t i=3; i--;) fDCA[i]=dca[i];    }
+  void SetMomentumAtVtx(Double_t p[3]) { fMomentumAtVtx.SetXYZ(p[0],p[1],p[2]); }
+  void SetMomentumAtDCA(Double_t p[3]) { fMomentumAtDCA.SetXYZ(p[0],p[1],p[2]); }
+  void SetMomentumUncor(Double_t p[3]) { fMomentumUncor.SetXYZ(p[0],p[1],p[2]); }
+  void SetDCA(Double_t dca[3])         { for (Int_t i=3; i--;) fDCA[i]=dca[i];  }
   void SetCharge(Short_t charge)           { fCharge           = charge;  }
   void SetMatchTrigger(Int_t trigger)      { fMatchTrigger     = trigger; }
   void SetChi2FitMomentum(Double_t chi2)   { fChi2FitMomentum  = chi2;    }
@@ -62,24 +63,10 @@ class AliMuonInfoStoreRD : public TObject {
   void SetRabsEnd(Double_t rAbsEnd)        { fRabsEnd          = rAbsEnd; }
 
   static const TString fgkStdBranchName;  // Standard branch name
-  static Double_t fgCuts[16];  // 0, min of 3-momentum
-                               // 1, max of 3-momentum
-                               // 2, pt_Min
-                               // 3, pt_Max
-                               // 4, eta_Min
-                               // 5, eta_Max
-                               // 6, dca_Min
-                               // 7, dca_Max
-                               // 8, about trigger matching
-                               // 9, about trigger matching
-                               //10, rAbs_Min
-                               //11, rAbs_Max
-                               //12, chi2Tracker Min
-                               //13, chi2Tracker Max
-                               //14, chi2Trigger Min
-                               //15, chi2Trigger Max
-
-  TVector3 fMomentum;       // momentum corrected w vtx
+
+  TVector3 fMomentumAtVtx;  // momentum corrected w vtx
+  TVector3 fMomentumAtDCA;  // momentum at DCA in vtx plane
+  TVector3 fMomentumUncor;  // momentum at first station
 
   Double_t fDCA[3];            // distance of closet approach
   Short_t  fCharge;            // track charge
@@ -87,8 +74,9 @@ class AliMuonInfoStoreRD : public TObject {
   Double_t fChi2FitMomentum;   // chi2/NDF of momentum fit
   Double_t fChi2MatchTrigger;  // chi2 of trigger matching
   Double_t fRabsEnd;  // position at the end of front absorber
+  UInt_t   fSelMask;  // mask of single muon selection
 
-  ClassDef(AliMuonInfoStoreRD, 5);
+  ClassDef(AliMuonInfoStoreRD, 7);
 };
 
 #endif
index 993cfd4781c0c6cc54d65f8210dd07d50b0bb412..e2bec8bcf463fcfcc4a6483be502e176a10ce89e 100644 (file)
 #include <TH1D.h>
 #include <TList.h>
 
+#include "AliInputEventHandler.h"
+#include "AliAODMCHeader.h"
 #include "AliVEvent.h"
+#include "AliAODEvent.h"
+#include "AliESDEvent.h"
+#include "AliVVertex.h"
+#include "AliCentrality.h"
+#include "AliEventplane.h"
+
+#include "AliMuonTrackCuts.h"
 #include "AliMuonInfoStoreRD.h"
 #include "AliMuonInfoStoreMC.h"
 #include "AliDimuInfoStoreRD.h"
 #include "AliDimuInfoStoreMC.h"
 #include "AliMuonsHFHeader.h"
 
-class TNamed;
-class AliVVertex;
-
 ClassImp(AliMuonsHFHeader)
 
 const TString AliMuonsHFHeader::fgkStdBranchName("MuEvsH");
@@ -51,14 +57,18 @@ TNamed(),
 fSelMask(AliVEvent::kAny),
 fIsMB(kFALSE),
 fIsMU(kFALSE),
+fIsPileupSPD(kFALSE),
 fVtxContrsN(0),
 fFiredTriggerClass(),
-fCentrality(0.)
+fCentrality(-1.),
+fCentQA(-1),
+fEventPlane(0.)
 {
   //
   // default constructor
   //
   for (Int_t i=3; i--;) fVtx[i] = 0.;
+  for (Int_t i=3; i--;) fVMC[i] = 0.;
 }
 
 //_____________________________________________________________________________
@@ -67,14 +77,18 @@ TNamed(),
 fSelMask(src.fSelMask),
 fIsMB(src.fIsMB),
 fIsMU(src.fIsMU),
+fIsPileupSPD(src.fIsPileupSPD),
 fVtxContrsN(src.fVtxContrsN),
 fFiredTriggerClass(src.fFiredTriggerClass),
-fCentrality(src.fCentrality)
+fCentrality(src.fCentrality),
+fCentQA(src.fCentQA),
+fEventPlane(src.fEventPlane)
 {
   //
   // copy constructor
   //
   for (Int_t i=3; i--;) fVtx[i] = src.fVtx[i];
+  for (Int_t i=3; i--;) fVMC[i] = src.fVMC[i];
 }
 
 //_____________________________________________________________________________
@@ -89,10 +103,14 @@ AliMuonsHFHeader& AliMuonsHFHeader::operator=(const AliMuonsHFHeader &src)
   fSelMask           = src.fSelMask;
   fIsMB              = src.fIsMB;
   fIsMU              = src.fIsMU;
+  fIsPileupSPD       = src.fIsPileupSPD;
   fVtxContrsN        = src.fVtxContrsN;
   fFiredTriggerClass = src.fFiredTriggerClass;
   fCentrality        = src.fCentrality;
+  fCentQA            = src.fCentQA;
+  fEventPlane        = src.fEventPlane;
   for (Int_t i=3; i--;) fVtx[i] = src.fVtx[i];
+  for (Int_t i=3; i--;) fVMC[i] = src.fVMC[i];
 
   return *this;
 }
@@ -106,28 +124,39 @@ AliMuonsHFHeader::~AliMuonsHFHeader()
 }
 
 //_____________________________________________________________________________
-void AliMuonsHFHeader::SetVertex(AliVVertex *vertex)
+void AliMuonsHFHeader::SetEventInfo(AliInputEventHandler* const handler, AliMCEvent* const eventMC)
 {
-  // extract event info from AOD event
+  // fill info at event level
+
+  AliVEvent *event = handler->GetEvent();
+  AliAODEvent *aod = dynamic_cast<AliAODEvent*>(event);
+  AliESDEvent *esd = dynamic_cast<AliESDEvent*>(event);
 
+  fSelMask = handler->IsEventSelected();
+  if (aod) fFiredTriggerClass = aod->GetFiredTriggerClasses();
+  if (esd) fFiredTriggerClass = esd->GetFiredTriggerClasses();
+  fIsMB = fSelMask & AliVEvent::kMB;
+  fIsMU = fSelMask & AliVEvent::kMUON;
+
+  const AliVVertex *vertex = event->GetPrimaryVertex();
   vertex->GetXYZ(fVtx);
   fVtxContrsN = vertex->GetNContributors();
-  this->SetTitle(vertex->GetTitle());
-  return;
-}
+  if (fgIsMC) {
+    if (esd)   eventMC->GetPrimaryVertex()->GetXYZ(fVMC);
+    if (aod) ((AliAODMCHeader*)aod->FindListObject(AliAODMCHeader::StdBranchName()))->GetVertex(fVMC);
+  } this->SetTitle(vertex->GetTitle());
+  fIsPileupSPD = (aod && !aod->GetTracklets()) ? event->IsPileupFromSPD(3,0.8,3.,2.,5.) : event->IsPileupFromSPDInMultBins();
+
+  AliCentrality *cent = event->GetCentrality();
+  if (cent) {
+    fCentrality = cent->GetCentralityPercentileUnchecked("V0M");
+    fCentQA     = cent->GetQuality();
+  }
+
+  AliEventplane *evnP = event->GetEventplane();
+  if (evnP) fEventPlane = evnP->GetEventplane("Q");
+//if (evnP) fEventPlane = evnP->GetEventplane("V0A");
 
-void AliMuonsHFHeader::SetFiredTriggerClass(TString trigger)
-{
-  fFiredTriggerClass = trigger;
-  fIsMB=(fFiredTriggerClass.Contains("CINT1B-ABCE-NOPF-ALL")  ||   // p-p   min. bias trigger before Aug/2010
-         fFiredTriggerClass.Contains("CINT1-B-NOPF-ALLNOTRD") ||   // p-p   min. bias trigger from   Aug/2010
-         fFiredTriggerClass.Contains("CMBS2A-B-NOPF-ALL")     ||   // Pb-Pb min. bias trigger 2-out-of-3
-         fFiredTriggerClass.Contains("CMBS2C-B-NOPF-ALL")     ||   // Pb-Pb min. bias trigger 2-out-of-3
-         fFiredTriggerClass.Contains("CMBAC-B-NOPF-ALL")      ||   // Pb-Pb min. bias trigger 2-out-of-3
-         fFiredTriggerClass.Contains("CMBACS2-B-NOPF-ALL")    ||   // Pb-Pb min. bias trigger 3-out-of-3 (early)
-         fFiredTriggerClass.Contains("CMBACS2-B-NOPF-ALLNOTRD"));  // Pb-Pb min. bias trigger 3-out-of-3 (late 2010)
-  fIsMU=(fFiredTriggerClass.Contains("CMUS1B-ABCE-NOPF-MUON") ||   // p-p MUON trigger before Aug/2010
-         fFiredTriggerClass.Contains("CMUS1-B-NOPF-ALLNOTRD"));    // p-p MUON trigger from   Aug/2010 
   return;
 }
 
@@ -257,7 +286,7 @@ void AliMuonsHFHeader::FillHistosEvnH(TList *list)
 {
   // fill histograms at event level according to event selection cuts
 
-  if (!list)                   return;
+  if (!list)               return;
   if (!this->IsSelected()) return;
 
   const Int_t nhs    = 3;
@@ -277,19 +306,19 @@ void AliMuonsHFHeader::FillHistosMuon(TList *list, AliMuonInfoStoreRD* const inf
 {
   // fill histograms for single muon according to event & muon track selection cuts
 
-  if (!list)                    return;
-  if (!this->IsSelected())      return;
-  if (!infoStore->IsSelected()) return;
+  if (!list)                     return;
+  if (!this->IsSelected())       return;
+  if (!infoStore->IsSelected(0)) return;
 
   const Int_t nhs    = 7;
   TString tName[nhs] = { "P", "Pt", "Eta", "DCA", "TrM", "Charge", "Rabs" };
-  Double_t dist[nhs] = { infoStore->Momentum().Mag(),
-                             infoStore->Momentum().Pt(),
-                             infoStore->Momentum().Eta(),
-                             infoStore->DCA(),
-                             infoStore->MatchTrigger(),
-                             infoStore->Charge(),
-                             infoStore->RabsEnd() };
+  Double_t dist[nhs] = { infoStore->MomentumAtVtx().Mag(),
+                         infoStore->MomentumAtVtx().Pt(),
+                         infoStore->MomentumAtVtx().Eta(),
+                         infoStore->DCA(),
+                         infoStore->MatchTrigger(),
+                         infoStore->Charge(),
+                         infoStore->RabsEnd() };
 
   if (fgIsMC && (fSelMask & AliVEvent::kAny)) {
     TString sName[7] = { "BottomMu", "CharmMu", "PrimaryMu", "SecondaryMu", "Hadron", "Unidentified", "" };
@@ -308,9 +337,9 @@ void AliMuonsHFHeader::FillHistosDimu(TList *list, AliDimuInfoStoreRD* const inf
 {
   // fill histograms for dimuon according to evnet & dimuon candidates selection cuts
 
-  if (!list)                    return;
-  if (!this->IsSelected())      return;
-  if (!infoStore->IsSelected()) return;
+  if (!list)                     return;
+  if (!this->IsSelected())       return;
+  if (!infoStore->IsSelected(0)) return;
 
   TString dimuName = "DimuNN";
   if (infoStore->Charge()==0)     dimuName = "DimuNP";
@@ -319,8 +348,8 @@ void AliMuonsHFHeader::FillHistosDimu(TList *list, AliDimuInfoStoreRD* const inf
   const Int_t nhs    = 3;
   TString tName[nhs] = { "P", "Pt", "InvM" };
   Double_t dist[nhs] = { infoStore->Momentum().Mag(),
-                             infoStore->Momentum().Pt(),
-                             infoStore->InvM() };
+                         infoStore->Momentum().Pt(),
+                         infoStore->InvM() };
 
   if (fgIsMC && (fSelMask & AliVEvent::kAny)) {
     TString sName[7] = { "BBdiff", "BBsame", "DDdiff", "DDsame", "Resonance", "Uncorr", "" };
index d413afd03ee95fd440308d60f0f1443fd544f133..293c11f8c2b105b2140c31cb5630a9890b413790 100644 (file)
@@ -17,8 +17,8 @@
 #include <TString.h>
 
 class TList;
-class AliAODEvent;
-class AliESDEvent;
+class AliMCEvent;
+class AliInputEventHandler;
 
 class AliMuonInfoStoreRD;
 class AliDimuInfoStoreRD;
@@ -33,6 +33,7 @@ class AliMuonsHFHeader : public TNamed {
   AliMuonsHFHeader& operator=(const AliMuonsHFHeader &src);
   ~AliMuonsHFHeader();
 
+  void GetVMC(Double_t *vtx)  const { for (Int_t i=3; i--;) vtx[i]=fVMC[i]; }
   void GetXYZ(Double_t *vtx)  const { for (Int_t i=3; i--;) vtx[i]=fVtx[i]; }
   Double_t Vx()               const { return fVtx[0]; }
   Double_t Vy()               const { return fVtx[1]; }
@@ -40,16 +41,16 @@ class AliMuonsHFHeader : public TNamed {
   Double_t Vt()               const { return TMath::Sqrt(fVtx[0]*fVtx[0] + fVtx[1]*fVtx[1]); }
   Int_t VtxContrsN()          const { return fVtxContrsN; }
   TString FiredTriggerClass() const { return fFiredTriggerClass; }
-  Float_t Centrality()        const { return fCentrality; }
   UInt_t SelectionMask()      const { return fSelMask; }
   Bool_t IsMB()               const { return fIsMB; }
   Bool_t IsMU()               const { return fIsMU; }
+  Bool_t IsPileupSPD()        const { return fIsPileupSPD; }
+  Float_t    Centrality()     const { return fCentrality; }
+  Int_t      CentQA()         const { return fCentQA;}
+  Double32_t EventPlane()     const { return fEventPlane; }
   Bool_t IsSelected();
 
-  void SetSelectionMask(UInt_t mask) { fSelMask=mask; }
-  void SetVertex(AliVVertex *vertex);
-  void SetFiredTriggerClass(TString trigger);
-  void SetCentrality(Float_t centr) { fCentrality=centr; }
+  void SetEventInfo(AliInputEventHandler* const handler, AliMCEvent* const eventMC);
 
   void CreateHistograms(TList *list);
   void FillHistosEvnH(TList *list);
@@ -76,17 +77,21 @@ class AliMuonsHFHeader : public TNamed {
                               // 3, centrality max
                               // 4, centrality min
 
-  UInt_t fSelMask; // mask of physics selection
-  Bool_t fIsMB;    // is min. bias triggered event (for real data)
-  Bool_t fIsMU;    // is MUON triggered event (for real data)
-  Double_t fVtx[3];   // position of vtx
-  Int_t fVtxContrsN;  // num. of contributors of vtx rec
+  UInt_t fSelMask;     // mask of physics selection
+  Bool_t fIsMB;        // is min. bias triggered event (for real data)
+  Bool_t fIsMU;        // is MUON triggered event (for real data)
+  Bool_t fIsPileupSPD; // is pileup from SPD
+  Double_t fVtx[3];    // position of vtx
+  Double_t fVMC[3];    // position of vtx in MC
+  Int_t fVtxContrsN;   // num. of contributors of vtx rec
 
   TString fFiredTriggerClass; // trigger class
 
   Float_t fCentrality;  // event centrality class
+  Int_t   fCentQA;      // quality of centrality determination
+  Double32_t fEventPlane; // event plane angle
 
-  ClassDef(AliMuonsHFHeader, 5)
+  ClassDef(AliMuonsHFHeader, 7)
 };
 
 #endif