updates and tuning for the central train run (data and MC)
authorandronic <andronic@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 28 Sep 2010 20:46:18 +0000 (20:46 +0000)
committerandronic <andronic@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 28 Sep 2010 20:46:18 +0000 (20:46 +0000)
19 files changed:
PWG3/dielectron/AliAnalysisTaskDielectronFilter.h
PWG3/dielectron/AliAnalysisTaskDielectronSE.h
PWG3/dielectron/AliAnalysisTaskMultiDielectron.cxx
PWG3/dielectron/AliAnalysisTaskMultiDielectron.h
PWG3/dielectron/AliDielectronCFdraw.cxx
PWG3/dielectron/AliDielectronHistos.cxx
PWG3/dielectron/AliDielectronPID.cxx
PWG3/dielectron/AliDielectronPID.h
PWG3/dielectron/AliDielectronSignalBase.cxx
PWG3/dielectron/AliDielectronSignalBase.h
PWG3/dielectron/AliDielectronSignalExt.cxx
PWG3/dielectron/AliDielectronSignalFunc.cxx
PWG3/dielectron/AliDielectronVarManager.h
PWG3/dielectron/macros/AddTaskJPSI.C
PWG3/dielectron/macros/AddTaskJPSIFilter.C
PWG3/dielectron/macros/ConfigJpsi2eeData.C
PWG3/dielectron/macros/ConfigJpsi2eeEff.C
PWG3/dielectron/macros/ConfigJpsi2eeFilter.C
PWG3/dielectron/macros/MakeDataReport.C

index ecdad14..eb4b6b0 100644 (file)
@@ -25,6 +25,8 @@ Add a sattelite AOD with the array of candidates.
 
 #include "AliAnalysisTaskSE.h"
 
+#include "AliDielectronPID.h"
+
 class AliDielectron;
 class TH1D;
 
@@ -39,7 +41,9 @@ public:
   virtual void Init();
   virtual void UserCreateOutputObjects();
   virtual void LocalInit() {Init();}
-
+  //temporary
+  virtual void NotifyRun(){AliDielectronPID::SetCorrVal((Double_t)fCurrentRunNumber);}
+  
   void UsePhysicsSelection(Bool_t phy=kTRUE) {fSelectPhysics=phy;}
   void SetTriggerMask(UInt_t mask) {fTriggerMask=mask;}
   UInt_t GetTriggerMask() const { return fTriggerMask; }
index dc5ff3e..6718328 100644 (file)
@@ -16,6 +16,7 @@
 //#####################################################
 
 #include "AliAnalysisTaskSE.h"
+#include "AliDielectronPID.h"
 
 class AliDielectron;
 class TH1D;
@@ -29,7 +30,9 @@ public:
 
   virtual void  UserExec(Option_t *option);
   virtual void  UserCreateOutputObjects();
-
+  //temporary
+  virtual void NotifyRun(){AliDielectronPID::SetCorrVal((Double_t)fCurrentRunNumber);}
+  
   void UsePhysicsSelection(Bool_t phy=kTRUE) {fSelectPhysics=phy;}
   void SetTriggerMask(UInt_t mask) {fTriggerMask=mask;}
   UInt_t GetTriggerMask() const { return fTriggerMask; }
index 192a691..4a9035e 100644 (file)
@@ -90,10 +90,16 @@ void AliAnalysisTaskMultiDielectron::UserCreateOutputObjects()
     if (die->GetCFManagerPair()) fListCF.Add(const_cast<AliCFContainer*>(die->GetCFManagerPair()->GetContainer()));
   }
 
+  Int_t cuts=fListDielectron.GetEntries();
+  Int_t nbins=2+2*cuts;
   if (!fEventStat){
-    fEventStat=new TH1D("hEventStat","Event statistics",5,0,5);
+    fEventStat=new TH1D("hEventStat","Event statistics",nbins,0,nbins);
     fEventStat->GetXaxis()->SetBinLabel(1,"Before Phys. Sel.");
     fEventStat->GetXaxis()->SetBinLabel(2,"After Phys. Sel.");
+    for (Int_t i=0; i<cuts; ++i){
+      fEventStat->GetXaxis()->SetBinLabel(3+2*i,Form("#splitline{1 candidate}{%s}",fListDielectron.At(i)->GetName()));
+      fEventStat->GetXaxis()->SetBinLabel(4+2*i,Form("#splitline{With >1 candidate}{%s}",fListDielectron.At(i)->GetName()));
+    }
   }
   
   PostData(1, &fListHistos);
@@ -150,8 +156,15 @@ void AliAnalysisTaskMultiDielectron::UserExec(Option_t *)
   //Process event in all AliDielectron instances
   TIter nextDie(&fListDielectron);
   AliDielectron *die=0;
+  Int_t idie=0;
   while ( (die=static_cast<AliDielectron*>(nextDie())) ){
     die->Process(InputEvent());
+    if (die->HasCandidates()){
+      Int_t ncandidates=die->GetPairArray(1)->GetEntriesFast();
+      if (ncandidates==1) fEventStat->Fill(3+2*idie);
+      else if (ncandidates>1) fEventStat->Fill(4+2*idie);
+    }
+    ++idie;
   }
   
   PostData(1, &fListHistos);
index a0ea333..0a67dd0 100644 (file)
@@ -19,6 +19,8 @@
 
 #include "AliAnalysisTaskSE.h"
 
+#include "AliDielectronPID.h"
+
 class AliDielectron;
 class TH1D;
 
@@ -32,6 +34,8 @@ public:
   virtual void UserExec(Option_t *option);
   virtual void UserCreateOutputObjects();
   virtual void FinishTaskOutput();
+  //temporary
+  virtual void NotifyRun(){AliDielectronPID::SetCorrVal((Double_t)fCurrentRunNumber);}
   
   void UsePhysicsSelection(Bool_t phy=kTRUE) {fSelectPhysics=phy;}
   void SetTriggerMask(UInt_t mask) {fTriggerMask=mask;}
index ad76fcb..5e73f10 100644 (file)
@@ -521,7 +521,7 @@ TObjArray* AliDielectronCFdraw::CollectHistosEff(Int_t dim, Int_t *vars, const c
         Float_t eff=0;
         if (entriesDen>0) eff=hproj->GetEffectiveEntries()/entriesDen;
         fVdata(istep)=eff;
-        hproj->Divide(hDen);
+        hproj->Divide(hproj,hDen,1,1,"B");
         hproj->SetName(Form("eff_%02d/%02d",istep,denominator));
         hproj->SetTitle(Form("%s (%.3f)",fCfContainer->GetStepTitle(istep),eff));
         arrHists->Add(hproj);
@@ -539,7 +539,7 @@ TObjArray* AliDielectronCFdraw::CollectHistosEff(Int_t dim, Int_t *vars, const c
         Float_t eff=0;
         if (entriesDen>0) eff=hproj->GetEffectiveEntries()/entriesDen;
         fVdata(count++)=eff;
-        hproj->Divide(hDen);
+        hproj->Divide(hproj,hDen,1,1,"B");
         hproj->SetName(Form("eff_%02d/%02d",istep,denominator));
         hproj->SetTitle(Form("%s (%.3f)",fCfContainer->GetStepTitle(istep),eff));
         arrHists->Add(hproj);
index 7626064..c941d1f 100644 (file)
@@ -83,6 +83,7 @@ AliDielectronHistos::~AliDielectronHistos()
   // Destructor
   //
   fHistoList.Clear();
+  if (fList) fList->Clear();
   delete fReservedWords;
 }
 
index d31fe92..1fc52a7 100644 (file)
@@ -27,6 +27,7 @@ Detailed description
 
 #include <TMath.h>
 #include <TF1.h>
+#include <TGraph.h>
 
 #include <AliVTrack.h>
 #include <AliLog.h>
@@ -38,6 +39,9 @@ Detailed description
 
 ClassImp(AliDielectronPID)
 
+TGraph *AliDielectronPID::fgFitCorr=0x0;
+Double_t AliDielectronPID::fgCorr=0.0;
+
 AliDielectronPID::AliDielectronPID() :
   AliAnalysisCuts(),
   fNcuts(0),
@@ -234,7 +238,6 @@ Bool_t AliDielectronPID::IsSelectedITS(AliVTrack * const part, Int_t icut) const
   if (part->IsA()==AliESDtrack::Class()){
     // ESD case in case the PID bit is not set, don't use this track!
     AliESDtrack *track=static_cast<AliESDtrack*>(part);
-    
     numberOfSigmas=fESDpid->NumberOfSigmasITS(track, fPartType[icut]);
   }else{
     // AOD case
@@ -255,12 +258,12 @@ Bool_t AliDielectronPID::IsSelectedTPC(AliVTrack * const part, Int_t icut) const
   //
   Float_t numberOfSigmas=-1000.;
   
+  if (fRequirePIDbit[icut]==AliDielectronPID::kRequire&&!(part->GetStatus()&AliESDtrack::kTPCpid)) return kFALSE;
+  if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable&&!(part->GetStatus()&AliESDtrack::kTPCpid)) return kTRUE;
+
   if (part->IsA()==AliESDtrack::Class()){
     // ESD case in case the PID bit is not set, don't use this track!
     AliESDtrack *track=static_cast<AliESDtrack*>(part);
-    if (fRequirePIDbit[icut]==AliDielectronPID::kRequire&&!(track->GetStatus()&AliESDtrack::kTPCpid)) return kFALSE;
-    if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable&&!(track->GetStatus()&AliESDtrack::kTPCpid)) return kTRUE;
-    
     numberOfSigmas=fESDpid->NumberOfSigmasTPC(track, fPartType[icut]);
   }else{
     // AOD case
@@ -268,7 +271,9 @@ Bool_t AliDielectronPID::IsSelectedTPC(AliVTrack * const part, Int_t icut) const
     AliAODTrack *track=static_cast<AliAODTrack*>(part);
     numberOfSigmas=NumberOfSigmasTPC(track, fPartType[icut]);
   }
-  
+//   if (fPartType[icut]==AliPID::kElectron){
+//     numberOfSigmas-=fgCorr;
+//   }
   Bool_t selected=((numberOfSigmas>=fNsigmaLow[icut])&&(numberOfSigmas<=fNsigmaUp[icut]))^fExclude[icut];
   return selected;
 }
@@ -291,12 +296,12 @@ Bool_t AliDielectronPID::IsSelectedTOF(AliVTrack * const part, Int_t icut) const
   //
   Float_t numberOfSigmas=-1000.;
   
+  if (fRequirePIDbit[icut]==AliDielectronPID::kRequire&&!(part->GetStatus()&AliESDtrack::kTOFpid)) return kFALSE;
+  if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable&&!(part->GetStatus()&AliESDtrack::kTOFpid)) return kTRUE;
+
   if (part->IsA()==AliESDtrack::Class()){
     // ESD case in case the PID bit is not set, don't use this track!
     AliESDtrack *track=static_cast<AliESDtrack*>(part);
-    if (fRequirePIDbit[icut]==AliDielectronPID::kRequire&&!(track->GetStatus()&AliESDtrack::kTOFpid)) return kFALSE;
-    if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable&&!(track->GetStatus()&AliESDtrack::kTOFpid)) return kTRUE;
-    
     numberOfSigmas=fESDpid->NumberOfSigmasTOF(track, fPartType[icut], fESDpid->GetTOFResponse().GetTimeZero());
   }else{
     // AOD case
@@ -340,7 +345,7 @@ void AliDielectronPID::SetDefaults(Int_t def){
     // include 2sigma e TPC
     // 3sigma bands TOF
     // - exclude K,P
-    AddCut(kTPC,AliPID::kElectron,-2.5,4.);
+    AddCut(kTPC,AliPID::kElectron,-3.,3.);
     AddCut(kTPC,AliPID::kPion,-3.,3.,0.,0.,kTRUE);
     AddCut(kTPC,AliPID::kProton,-3.,3.,0.,0.,kTRUE);
 
@@ -401,3 +406,17 @@ void AliDielectronPID::SetDefaults(Int_t def){
   }
 }
 
+//______________________________________________
+void AliDielectronPID::SetCorrVal(Double_t run)
+{
+  //
+  // set correction value for run
+  //
+  fgCorr=0;
+  if (!fgFitCorr) return;
+  fgCorr=fgFitCorr->Eval(run);
+  if (run<fgFitCorr->GetX()[0]) fgCorr=fgFitCorr->GetY()[0];
+  if (run>fgFitCorr->GetX()[fgFitCorr->GetN()-1]) fgCorr=fgFitCorr->GetY()[fgFitCorr->GetN()-1];
+//   printf("Corr: %f\n",fgCorr);
+}
+
index 67530cf..0760120 100644 (file)
@@ -29,6 +29,7 @@
 class TF1;
 class TList;
 class AliVTrack;
+class TGraph;
 
 class AliDielectronPID : public AliAnalysisCuts {
 public:
@@ -59,6 +60,11 @@ public:
   //const
   virtual Bool_t IsSelected(TObject* track);
   virtual Bool_t IsSelected(TList*   /* list */ ) {return kFALSE;}
+
+  static void SetCorrGraph(TGraph * const gr) { fgFitCorr=gr; }
+  static void SetCorrVal(Double_t run);
+  static Double_t GetCorrVal()   { return fgCorr; }
+  static TGraph *GetCorrGraph()  { return fgFitCorr; }
   
 private:
   enum {kNmaxPID=10};
@@ -77,6 +83,10 @@ private:
 
   AliESDpid *fESDpid;             //! esd pid object
 
+                                  
+  static TGraph *fgFitCorr;       //spline fit object to correct the nsigma deviation in the TPC electron band
+  static Double_t fgCorr;         //!correction value for current run. Set if fgFitCorr is set and SetCorrVal(run)
+                                  // was called
   
   Bool_t IsSelectedITS(AliVTrack * const part, Int_t icut) const;
   Bool_t IsSelectedTPC(AliVTrack * const part, Int_t icut) const;
@@ -90,7 +100,7 @@ private:
   AliDielectronPID(const AliDielectronPID &c);
   AliDielectronPID &operator=(const AliDielectronPID &c);
 
-  ClassDef(AliDielectronPID,2)         // Dielectron PID
+  ClassDef(AliDielectronPID,3)         // Dielectron PID
 };
 
 
index f4c5157..03dd07e 100644 (file)
@@ -28,9 +28,10 @@ resulting from single and mixed events, as defined in AliDielectron.cxx
 ///////////////////////////////////////////////////////////////////////////
 
 
-#include "TPaveText.h"
-#include "AliDielectronSignalBase.h"
+#include <TVectorT.h>
+#include <TPaveText.h>
 #include <TH1F.h>
+#include "AliDielectronSignalBase.h"
 
 ClassImp(AliDielectronSignalBase)
 
index 5be8247..5ab434c 100644 (file)
@@ -65,8 +65,8 @@ public:
   Double_t GetMassWidth()            const { return fValues(5);}
   Double_t GetMassWidthError()       const { return fErrors(5);}
 
-  TH1F* GetSignalHistogram()        {return fHistSignal;}
-  TH1F* GetBackgroundHistogram()    {return fHistBackground;}
+  TH1F* GetSignalHistogram()      const {return fHistSignal;}
+  TH1F* GetBackgroundHistogram()  const {return fHistBackground;}
 
   virtual void Print(Option_t *option="") const;
 
index 75b6aef..91f6175 100644 (file)
@@ -137,8 +137,8 @@ void AliDielectronSignalExt::ProcessLS(TObjArray* const arrhist)
                                             fHistSignal->FindBin(fIntMax), fErrors(0));
   // background
   fValues(1) = fHistBackground->IntegralAndError(fHistBackground->FindBin(fIntMin),
-                                                 fHistBackground->FindBin(fIntMax), 
-                                                 fErrors(1));
+                                                fHistBackground->FindBin(fIntMax), 
+                                                fErrors(1));
   // S/B and significance
   SetSignificanceAndSOB();
 
@@ -171,7 +171,7 @@ void AliDielectronSignalExt::Draw(const Option_t* option)
   Int_t binSize = Int_t(1000*fHistDataPM->GetBinWidth(1));   // in MeV
   Float_t minMinY = fHistSignal->GetMinimum();
 
-  TCanvas *cSub = new TCanvas("cSub","signal, background subtracted",1400,1000);
+  TCanvas *cSub = new TCanvas(Form("%s", fName.Data()),Form("%s", fTitle.Data()),1400,1000);
   cSub->SetLeftMargin(0.15);
   cSub->SetRightMargin(0.0);
   cSub->SetTopMargin(0.002);
@@ -283,5 +283,7 @@ void AliDielectronSignalExt::Draw(const Option_t* option)
   line.DrawLine(minX, 0.,maxX, 0.);
   line.DrawLine(fIntMin, minMinY, fIntMin, maxY);
   line.DrawLine(fIntMax, minMinY, fIntMax, maxY);
+
+  cSub->SaveAs(Form("%s_summary.png", fName.Data()));
 }
 
index 92aaad5..30f437f 100644 (file)
@@ -36,7 +36,7 @@ can be used.
 #include <TPaveText.h>
 #include <TList.h>
 #include <TFitResult.h>
-//#include <../hist/hist/src/TF1Helper.h> //not supposed to be used!
+#include <../hist/hist/src/TF1Helper.h>
 
 #include <AliLog.h>
 
@@ -137,7 +137,7 @@ void AliDielectronSignalFunc::ProcessFit(TObjArray * const arrhist) {
   // by the user in its macro
   fHistDataPM->Fit(fFuncSigBack, fFitOpt.Data(), "", fFitMin, fFitMax);
   TFitResultPtr pmFitPtr = fHistDataPM->Fit(fFuncSigBack, fFitOpt.Data(), "", fFitMin, fFitMax);
-  //TFitResult *pmFitResult = pmFitPtr.Get(); //not used when TF1Helper out
+  TFitResult *pmFitResult = pmFitPtr.Get();
   fFuncSignal->SetParameters(fFuncSigBack->GetParameters());
   fFuncBackground->SetParameters(fFuncSigBack->GetParameters()+fFuncSignal->GetNpar());
   
@@ -147,7 +147,6 @@ void AliDielectronSignalFunc::ProcessFit(TObjArray * const arrhist) {
     Double_t epm = fHistDataPM->GetBinError(iBin);
     Double_t bknd = fFuncBackground->Eval(m);
     Double_t ebknd = 0;
-    /* to be revised ... TF1Helper
     for(Int_t iPar=fFuncSignal->GetNpar(); iPar<fFuncSigBack->GetNpar(); iPar++) {
       for(Int_t jPar=iPar; jPar<fFuncSigBack->GetNpar(); jPar++) {
         TF1 gradientIpar("gradientIpar",
@@ -159,7 +158,6 @@ void AliDielectronSignalFunc::ProcessFit(TObjArray * const arrhist) {
           (iPar==jPar ? 1.0 : 2.0);
       }
     }
-    */ // TF1Helper
     Double_t signal = pm-bknd;
     Double_t error = TMath::Sqrt(epm*epm+ebknd);
     fHistSignal->SetBinContent(iBin, signal);
@@ -172,7 +170,6 @@ void AliDielectronSignalFunc::ProcessFit(TObjArray * const arrhist) {
     // signal
     fValues(0) = fFuncSignal->Integral(fIntMin, fIntMax)/fHistDataPM->GetBinWidth(1);
     fErrors(0) = 0;
-    /* to be revised ... TF1Helper
     for(Int_t iPar=0; iPar<fFuncSignal->GetNpar(); iPar++) {
       for(Int_t jPar=iPar; jPar<fFuncSignal->GetNpar(); jPar++) {
         TF1 gradientIpar("gradientIpar",
@@ -184,11 +181,9 @@ void AliDielectronSignalFunc::ProcessFit(TObjArray * const arrhist) {
           (iPar==jPar ? 1.0 : 2.0);
       }
     }
-    */ //TF1Helper
     // background
     fValues(1) = fFuncBackground->Integral(fIntMin, fIntMax)/fHistDataPM->GetBinWidth(1);
     fErrors(1) = 0;
-    /* to be revised... TF1Helper
     for(Int_t iPar=fFuncSignal->GetNpar(); iPar<fFuncSigBack->GetNpar(); iPar++) {
       for(Int_t jPar=iPar; jPar<fFuncSigBack->GetNpar(); jPar++) {
         TF1 gradientIpar("gradientIpar",
@@ -200,7 +195,6 @@ void AliDielectronSignalFunc::ProcessFit(TObjArray * const arrhist) {
           (iPar==jPar ? 1.0 : 2.0);
       }
     }
-    */ // TF1Helper
   }
   else {
     // signal
@@ -261,7 +255,6 @@ void AliDielectronSignalFunc::ProcessLS(TObjArray * const arrhist) {
   TFitResultPtr mmFitPtr = fHistDataMM->Fit(funcCloneMM, fFitOpt.Data(), "", fFitMin, fFitMax);
   mmFitResult = mmFitPtr.Get();
   
-  /* to be revised ... TF1Helper
   for(Int_t iBin=1; iBin<=fHistDataPM->GetXaxis()->GetNbins(); iBin++) {
     Double_t m = fHistDataPM->GetBinCenter(iBin);
     Double_t pm = fHistDataPM->GetBinContent(iBin);
@@ -280,7 +273,6 @@ void AliDielectronSignalFunc::ProcessLS(TObjArray * const arrhist) {
           (iPar==jPar ? 1.0 : 2.0);
       }
     }
-    
     Double_t emm = 0;
     for(Int_t iPar=0; iPar<funcCloneMM->GetNpar(); iPar++) {
       for(Int_t jPar=iPar; jPar<funcCloneMM->GetNpar(); jPar++) {
@@ -304,8 +296,7 @@ void AliDielectronSignalFunc::ProcessLS(TObjArray * const arrhist) {
     fHistBackground->SetBinContent(iBin, background);
     fHistBackground->SetBinError(iBin, ebackground);
   }
-  */  // TF1Helper
-
+  
   // signal
   fValues(0) = fHistSignal->IntegralAndError(fHistSignal->FindBin(fIntMin),
                                              fHistSignal->FindBin(fIntMax), fErrors(0));
index 0891ce0..4d7448d 100644 (file)
@@ -46,6 +46,7 @@
 
 #include "AliDielectronPair.h"
 #include "AliDielectronMC.h"
+#include "AliDielectronPID.h"
 
 class AliVEvent;
 
@@ -322,7 +323,9 @@ inline void AliDielectronVarManager::FillVarESDtrack(const AliESDtrack *particle
   // nsigma to Electron band
   // TODO: for the moment we set the bethe bloch parameters manually
   //       this should be changed in future!
+  
   values[AliDielectronVarManager::kTPCnSigmaEle]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kElectron);
+    //-AliDielectronPID::GetCorrVal();
   values[AliDielectronVarManager::kTPCnSigmaPio]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kPion);
   values[AliDielectronVarManager::kTPCnSigmaMuo]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kMuon);
   values[AliDielectronVarManager::kTPCnSigmaKao]=fgESDpid->NumberOfSigmasTPC(particle,AliPID::kKaon);
index 9ba071b..3a74f97 100644 (file)
@@ -10,7 +10,11 @@ AliAnalysisTask *AddTaskJPSI(const char* config=""){
     return NULL;
   }
 
+  //Do we have an MC handler?
+  Bool_t hasMC=(mgr->GetMCtruthEventHandler()!=0x0);
+  
   TString configFile("$ALICE_ROOT/PWG3/dielectron/macros/ConfigJpsi2eeData.C");
+  if (hasMC) configFile="$ALICE_ROOT/PWG3/dielectron/macros/ConfigJpsi2eeEff.C";
   Bool_t isAOD=mgr->GetInputEventHandler()->IsA()==AliAODInputHandler::Class();
 
   //create task and add it to the manager
@@ -23,7 +27,7 @@ AliAnalysisTask *AddTaskJPSI(const char* config=""){
   //add dielectron analysis with different cuts to the task
   for (Int_t i=0; i<nDie; ++i){ //nDie defined in config file
     AliDielectron *jpsi=ConfigJpsi2ee(i,isAOD);
-    task->AddDielectron(jpsi);
+    if (jpsi) task->AddDielectron(jpsi);
   }
   
   //----------------------
index 76462d0..3d6ca74 100644 (file)
@@ -8,7 +8,7 @@ AliAnalysisTask *AddTaskJPSIFilter(){
   
   //check for output aod handler
   if (!mgr->GetOutputEventHandler()||mgr->GetOutputEventHandler()->IsA()!=AliAODHandler::Class()) {
-    Warning("AddTaskJPSIFilter","No AOD output handler available. Not adding the task!");
+    Error("AddTaskJPSIFilter","No AOD output handler available. Cannot Proceed!");
     return 0;
   }
 
index f07cc3f..884160f 100644 (file)
@@ -1,76 +1,82 @@
+void SetupTrackCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD);
+void SetupPairCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD);
+void InitHistogramsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD);
+void InitCFDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD);
+void SetupEventCutsDieleData(AliDielectron *diele, Int_t cutDefinition);
 
+AliESDtrackCuts *SetupESDtrackCutsDieleData(Int_t cutDefinition);
 
-void SetupTrackCuts();
-void SetupPairCuts();
-void InitHistograms();
-void InitCF();
+TString namesDieleData=("basicQ+SPDfirst+pt>.6+PID;basicQ+SPDany+pt>.6+PID");
 
-AliESDtrackCuts *SetupESDtrackCuts();
+TObjArray *arrNamesDieleData=namesDieleData.Tokenize(";");
 
-TString names=("basicQ+SPDfirst+pt>.6+PID;basicQ+SPDany+pt>.6+PID");
+const Int_t nDie=arrNamesDieleData->GetEntries();
 
-TObjArray *arrNames=names.Tokenize(";");
-
-const Int_t nDie=arrNames->GetEntries();
-
-AliDielectron *fDiele=0x0;
-Int_t          fCutDefinition=0;
-Bool_t         fIsAOD=kFALSE;
-
-AliDielectron* ConfigJpsi2ee(Int_t cutDefinition, Bool_t isAOD)
+AliDielectron* ConfigJpsi2ee(Int_t cutDefinition, Bool_t isAOD=kFALSE)
 {
   //
   // Setup the instance of AliDielectron
   //
   
-  fCutDefinition=cutDefinition;
-  fIsAOD=isAOD;
-  
   // create the actual framework object
-  TString name=Form("%02d",fCutDefinition);
-  if (fCutDefinition<arrNames->GetEntriesFast()){
-    name=arrNames->At(fCutDefinition)->GetName();
+  TString name=Form("%02d",cutDefinition);
+  if (cutDefinition<arrNamesDieleData->GetEntriesFast()){
+    name=arrNamesDieleData->At(cutDefinition)->GetName();
   }
-  fDiele = new AliDielectron(Form("%s",name.Data()),
+  AliDielectron *diele = new AliDielectron(Form("%s",name.Data()),
                              Form("Track cuts: %s",name.Data()));
 
   // cut setup
-  SetupTrackCuts();
-  SetupPairCuts();
+  SetupEventCutsDieleData(diele, cutDefinition);
+  
+  SetupTrackCutsDieleData(diele, cutDefinition, isAOD);
+  SetupPairCutsDieleData(diele, cutDefinition, isAOD);
   
   //
   // histogram setup
   // only if an AliDielectronHistos object is attached to the
-  // fDielelectron framework histograms will be filled
+  // dielelectron framework histograms will be filled
   //
-  InitHistograms();
+  InitHistogramsDieleData(diele, cutDefinition, isAOD);
 
   // the last definition uses no cuts and only the QA histograms should be filled!
-//   if (fCutDefinition<nDie-1)
-  InitCF();
+//   if (cutDefinition<nDie-1)
+  InitCFDieleData(diele, cutDefinition, isAOD);
+
+  return diele;
+}
 
-  return fDiele;
+//______________________________________________________________________________________
+void SetupEventCutsDieleData(AliDielectron *diele, Int_t cutDefinition)
+{
+  //
+  // Setup the event cuts
+  //
+  AliDielectronVarCuts *vtxZ = new AliDielectronVarCuts("vtxZ","Vertex z cut");
+  vtxZ->AddCut(AliDielectronVarManager::kZvPrim,-15.,15.);
+  diele->GetEventFilter().AddCuts(vtxZ);
+  
 }
 
 //______________________________________________________________________________________
-void SetupTrackCuts()
+void SetupTrackCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD)
 {
   //
   // Setup the track cuts
   //
   
   //ESD quality cuts DielectronTrackCuts
-  if (!fIsAOD) {
-    fDiele->GetTrackFilter().AddCuts(SetupESDtrackCuts());
+  if (!isAOD) {
+    diele->GetTrackFilter().AddCuts(SetupESDtrackCutsDieleData(cutDefinition));
   } else {
     AliDielectronTrackCuts *trackCuts=new AliDielectronTrackCuts("trackCuts","trackCuts");
-    if (fCutDefinition==0)
+    if (cutDefinition==0)
       trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
-    else if (fCutDefinition==1)
+    else if (cutDefinition==1)
       trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
     trackCuts->SetRequireTPCRefit(kTRUE);
     trackCuts->SetRequireITSRefit(kTRUE);
-    fDiele->GetTrackFilter().AddCuts(trackCuts);
+    diele->GetTrackFilter().AddCuts(trackCuts);
   }
 
   //Pt cut ----------------------------------------------------------
@@ -79,38 +85,38 @@ void SetupTrackCuts()
 
   //AOD additions since there are no AliESDtrackCuts -----------------
   //
-  if (fIsAOD){
+  if (isAOD){
     // TPC #clusteres cut
     pt->AddCut(AliDielectronVarManager::kNclsTPC,90.,160.);
-    pt->AddCut(AliDielectronVarManager::kEta,-0.8,0.8);
+    pt->AddCut(AliDielectronVarManager::kEta,-0.88,0.88);
     //TODO: DCA cuts to be investigated!!!
 //       pt->AddCut(AliDielectronVarManager::kImpactParXY,-1.,1.);
 //       pt->AddCut(AliDielectronVarManager::kImpactParZ,-3.,3.);
   }
-  fDiele->GetTrackFilter().AddCuts(pt);
+  diele->GetTrackFilter().AddCuts(pt);
     
   // PID cuts --------------------------------------------------------
   AliDielectronPID *pid = new AliDielectronPID("PID10","TPC nSigma 2.5<e<4. + |Pi|>3 + |P|>3");
   pid->SetDefaults(2);
-  fDiele->GetTrackFilter().AddCuts(pid);
+  diele->GetTrackFilter().AddCuts(pid);
 }
 
 //______________________________________________________________________________________
-void SetupPairCuts()
+void SetupPairCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD)
 {
   //
   // Setup the pair cuts
   //
   
   //Invariant mass and rapidity selection
-  AliDielectronVarCuts *pairCut=new AliDielectronVarCuts("2<M<4+|Y|<.8","2<M<4 + |Y|<.8");
+  AliDielectronVarCuts *pairCut=new AliDielectronVarCuts("2<M<4+|Y|<.8","2<M<4 + |Y|<.88");
   pairCut->AddCut(AliDielectronVarManager::kM,2.,4.);
-  pairCut->AddCut(AliDielectronVarManager::kY,-0.8,0.8);
-  fDiele->GetPairFilter().AddCuts(pairCut);
+  pairCut->AddCut(AliDielectronVarManager::kY,-0.88,0.88);
+  diele->GetPairFilter().AddCuts(pairCut);
 }
 
 //______________________________________________________________________________________
-AliESDtrackCuts *SetupESDtrackCuts()
+AliESDtrackCuts *SetupESDtrackCutsDieleData(Int_t cutDefinition)
 {
   //
   // Setup default AliESDtrackCuts
@@ -121,7 +127,7 @@ AliESDtrackCuts *SetupESDtrackCuts()
   esdTrackCuts->SetMaxDCAToVertexZ(3.0);
   esdTrackCuts->SetMaxDCAToVertexXY(1.0);
   
-  esdTrackCuts->SetEtaRange( -0.8 , 0.8 );
+  esdTrackCuts->SetEtaRange( -0.88 , 0.88 );
   
   esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
   esdTrackCuts->SetRequireITSRefit(kTRUE);
@@ -130,9 +136,9 @@ AliESDtrackCuts *SetupESDtrackCuts()
   esdTrackCuts->SetMinNClustersTPC(90);
   esdTrackCuts->SetMaxChi2PerClusterTPC(4);
   
-  if (fCutDefinition==0)
+  if (cutDefinition==0)
     esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
-  else if (fCutDefinition==1)
+  else if (cutDefinition==1)
     esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
   
   return esdTrackCuts;
@@ -140,14 +146,14 @@ AliESDtrackCuts *SetupESDtrackCuts()
 
 
 //______________________________________________________________________________________
-void InitHistograms()
+void InitHistogramsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD)
 {
   //
   // Initialise the histograms
   //
   
   //Setup histogram Manager
-  AliDielectronHistos *histos=new AliDielectronHistos(fDiele->GetName(),fDiele->GetTitle());
+  AliDielectronHistos *histos=new AliDielectronHistos(diele->GetName(),diele->GetTitle());
   
   //Initialise histogram classes
   histos->SetReservedWords("Track;Pair");
@@ -169,6 +175,12 @@ void InitHistograms()
     histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
   }
   
+  //add histograms to event class
+  if (cutDefinition==0){
+    histos->AddClass("Event");
+    histos->UserHistogram("Event","VtxZ","Vertex Z;Z[cm]",300,-15.,15.,AliDielectronVarManager::kZvPrim);
+  }
+  
   //add histograms to Track classes
   histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",400,0,20.,AliDielectronVarManager::kPt);
   histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",160,-0.5,159.5,AliDielectronVarManager::kNclsTPC);
@@ -191,20 +203,20 @@ void InitHistograms()
   histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
                         100,0.,3.15,AliDielectronVarManager::kOpeningAngle);
   
-  fDiele->SetHistogramManager(histos);
+  diele->SetHistogramManager(histos);
 }
 
 
-void InitCF()
+void InitCFDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD)
 {
   //
   // Setupd the CF Manager if needed
   //
   
-  AliDielectronCF *cf=new AliDielectronCF(fDiele->GetName(),fDiele->GetTitle());
+  AliDielectronCF *cf=new AliDielectronCF(diele->GetName(),diele->GetTitle());
   
   //pair variables
-  cf->AddVariable(AliDielectronVarManager::kPt,"0.0, 0.8, 1.4, 2.8, 4.2, 9.9, 100.0");
+  cf->AddVariable(AliDielectronVarManager::kPt,"0.0, 0.8, 1.4, 2.8, 5., 9.9, 100.0");
   
   cf->AddVariable(AliDielectronVarManager::kY,40,-2,2);
   cf->AddVariable(AliDielectronVarManager::kM,50,1.98,1.98+50*.04); //40Mev Steps
@@ -213,7 +225,7 @@ void InitCF()
   cf->AddVariable(AliDielectronVarManager::kPt,"0.0, 0.8, 1.2, 100.0",kTRUE);
   cf->AddVariable(AliDielectronVarManager::kNclsTPC,"0, 100, 120, 160",kTRUE);
   
-  fDiele->SetCFManagerPair(cf);
+  diele->SetCFManagerPair(cf);
   
 }
 
index 53bd71e..0937def 100644 (file)
@@ -5,18 +5,18 @@ void InitCF(AliDielectron* die, Int_t cutDefinition);
 void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
 void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
 
-AliESDtrackCuts *SetupESDtrackCuts();
+AliESDtrackCuts *SetupESDtrackCuts(Int_t cutDefinition);
 
-TString names=("no_cuts;track_quality;tq+mcPIDele;tq+4#sigma_dEdx_E");
+TString names=("nocut;TPCrefit;ESDcuts;ESDcuts+SPDany+TPCpid;ESDcuts+SPDfirst+TPCpid");
 TObjArray *arrNames=names.Tokenize(";");
 const Int_t nDie=arrNames->GetEntriesFast();
 
-AliDielectron* ConfigJpsi2ee(Int_t cutDefinition=1)
+AliDielectron* ConfigJpsi2ee(Int_t cutDefinition, Bool_t isAOD=kFALSE)
 {
   //
   // Setup the instance of AliDielectron
   //
-  
+  if (isAOD) return 0x0;
   // create the actual framework object
   TString name=Form("%02d",cutDefinition);
   if (cutDefinition<arrNames->GetEntriesFast()){
@@ -47,30 +47,25 @@ void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
   //
   // Setup the track cuts
   //
-  
+
   //ESD quality cuts
   if (cutDefinition>0){
-    die->GetTrackFilter().AddCuts(SetupESDtrackCuts());
-  }
-  
-  //MC pid
-  if (cutDefinition==2){
-    //MC pid
-    AliDielectronVarCuts *mcpid=new AliDielectronVarCuts("legMCpid","Leg MC pid");
-    mcpid->SetCutOnMCtruth();
-    mcpid->SetCutType(AliDielectronVarCuts::kAny);
-    mcpid->AddCut(AliDielectronVarManager::kPdgCode, 11);
-    mcpid->AddCut(AliDielectronVarManager::kPdgCode, -11);
-    die->GetTrackFilter().AddCuts(mcpid);
+    die->GetTrackFilter().AddCuts(SetupESDtrackCuts(cutDefinition));
   }
-  
+
   if (cutDefinition>=3){
-    //ESD pid cuts (TPC nSigma)
-    AliDielectronVarCuts *pid = new AliDielectronVarCuts("TPCnSigma","TPC nSigma cut");
-    pid->AddCut(AliDielectronVarManager::kTPCnSigmaEle, -4., 4.);
+    //ESD pid cuts
+    AliDielectronPID *pid=new AliDielectronPID("MC_Prod_Data","MC to reproduce data");
+    //proton cut to reproduce data parametrisation
+    Double_t resolution=0.058;
+    Double_t nSigma=3.;
+    TF1 *ff=new TF1(Form("fBethe%d",AliPID::kProton), Form("(%f*%f+(AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])-AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])))/%f", nSigma,resolution, AliPID::ParticleMass(AliPID::kProton), AliPID::ParticleMass(AliPID::kElectron), resolution), 0.05,200.);
+    ff->SetParameters(0.0283086/0.97,2.63394e+01,5.04114e-11,2.12543e+00,4.88663e+00);
+    pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,3);
+    pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ff,10,0,3);
+    pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3,3,kTRUE);
     die->GetTrackFilter().AddCuts(pid);
-  }
-  
+  } 
 }
 
 //______________________________________________________________________________________
@@ -79,79 +74,41 @@ void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
   //
   // Setup the pair cuts
   //
-  
-  
-  if (cutDefinition>0){
-    //MC mother in y +-.9
-    AliDielectronVarCuts *etaMC=new AliDielectronVarCuts("|MC Y|<.9","|MC Y|<.9");
-    etaMC->AddCut(AliDielectronVarManager::kY,-.8,.8);
-    etaMC->SetCutOnMCtruth();
-    die->GetPairFilter().AddCuts(etaMC);
-    
-    //reject conversions
-    AliDielectronVarCuts *openingAngleCut=new AliDielectronVarCuts("OpeningAngle","Opening angle > .35rad");
-    openingAngleCut->AddCut(AliDielectronVarManager::kOpeningAngle,.35,4.);
-    die->GetPairFilter().AddCuts(openingAngleCut);
-    
-  }
 
-  if (cutDefinition==3){
-    //
-    //ESD pid cuts (TPC nSigma Pions)
-    //
-    AliDielectronPairLegCuts *tpcNSigmaPi = new AliDielectronPairLegCuts("|n#sigma#pi|>2","|n#sigma#pi|>2");
-    
-    AliDielectronVarCuts *pidPiM = new AliDielectronVarCuts("TPCnSigmaPi-","TPC nSigma- pi cut");
-    pidPiM->AddCut(AliDielectronVarManager::kTPCnSigmaPio, -10., -2.);
-    
-    AliDielectronVarCuts *pidPiP = new AliDielectronVarCuts("TPCnSigmaPi+","TPC nSigma+ pi cut");
-    pidPiP->AddCut(AliDielectronVarManager::kTPCnSigmaPio, 2., 10.);
-    
-    tpcNSigmaPi->GetLeg1Filter().AddCuts(pidPiM);
-    tpcNSigmaPi->GetLeg1Filter().AddCuts(pidPiP);
-    
-    tpcNSigmaPi->GetLeg2Filter().AddCuts(pidPiM);
-    tpcNSigmaPi->GetLeg2Filter().AddCuts(pidPiP);
-    
-    die->GetPairFilter().AddCuts(tpcNSigmaPi);
-    
-    //
-    //TRD pid quality cuts
-    //
-    AliDielectronVarCuts *trdNtrklet = new AliDielectronVarCuts("TRDpidQuality","TRD pid quality");
-    trdNtrklet->AddCut(AliDielectronVarManager::kTRDpidQuality, 3.5, 8.);
-    
-    AliDielectronPairLegCuts *trdNtrkletAny = new AliDielectronPairLegCuts("TRDntrlt>=4 any","TRDntrlt>=4 any");
-    trdNtrkletAny->GetLeg1Filter().AddCuts(trdNtrklet);
-    trdNtrkletAny->GetLeg2Filter().AddCuts(trdNtrklet);
-    trdNtrkletAny->SetCutType(AliDielectronPairLegCuts::kAnyLeg);
-    die->GetPairFilter().AddCuts(trdNtrkletAny);
-    
-    AliDielectronPairLegCuts *trdNtrkletBoth = new AliDielectronPairLegCuts("TRDntrlt>=4 both","TRDntrlt>=4 both");
-    trdNtrkletBoth->GetLeg1Filter().AddCuts(trdNtrklet);
-    trdNtrkletBoth->GetLeg2Filter().AddCuts(trdNtrklet);
-    die->GetPairFilter().AddCuts(trdNtrkletBoth);
-  }
+  //reject conversions
+  AliDielectronVarCuts *openingAngleCut=new AliDielectronVarCuts("OpeningAngle","Opening angle>0.35rad");
+  openingAngleCut->AddCut(AliDielectronVarManager::kOpeningAngle,.035,4.);
+  if(cutDefinition>1)
+    die->GetPairFilter().AddCuts(openingAngleCut);  
 }
 
 //______________________________________________________________________________________
-AliESDtrackCuts *SetupESDtrackCuts()
+AliESDtrackCuts *SetupESDtrackCuts(Int_t cutDefinition)
 {
   //
   // Setup default AliESDtrackCuts
   //
   AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts;
-  
-  esdTrackCuts->SetMaxDCAToVertexZ(3.0);
-  esdTrackCuts->SetMaxDCAToVertexXY(1); 
-  esdTrackCuts->SetRequireTPCRefit(kTRUE);
-  esdTrackCuts->SetRequireITSRefit(kTRUE);
-  esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
-  esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
-  
-  esdTrackCuts->SetMinNClustersTPC(75);
-  esdTrackCuts->SetMaxChi2PerClusterTPC(4);
-  
+  if(cutDefinition==1) {
+    esdTrackCuts->SetRequireTPCRefit(kTRUE);
+  }
+  if(cutDefinition>1) {
+    //    esdTrackCuts->SetEtaRange(-0.9,0.9);
+    esdTrackCuts->SetRequireITSRefit(kTRUE);
+    esdTrackCuts->SetMaxDCAToVertexZ(3.0);
+    esdTrackCuts->SetMaxDCAToVertexXY(1);
+    esdTrackCuts->SetRequireTPCRefit(kTRUE);
+    esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
+    esdTrackCuts->SetMinNClustersTPC(80);
+    esdTrackCuts->SetMaxChi2PerClusterTPC(4);
+  }
+  if(cutDefinition==3) {
+    esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
+  }
+  if(cutDefinition==4) {
+    esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
+  }
+
   return esdTrackCuts;
 }
 
@@ -216,39 +173,55 @@ void InitCF(AliDielectron* die, Int_t cutDefinition)
   //
   
   AliDielectronCF *cf=new AliDielectronCF(die->GetName(),die->GetTitle());
-  
-  //pair variables
-  cf->AddVariable(AliDielectronVarManager::kPt,50,0,10);
-  cf->AddVariable(AliDielectronVarManager::kEta,40,-2,2);
-  cf->AddVariable(AliDielectronVarManager::kY,40,-2,2);
-  cf->AddVariable(AliDielectronVarManager::kM,100,0,4);
-  cf->AddVariable(AliDielectronVarManager::kPairType,10,0,10);
-  cf->AddVariable(AliDielectronVarManager::kOpeningAngle,10,0,3.15);
-  //leg variables
-  cf->AddVariable(AliDielectronVarManager::kEta,40,-2,2,kTRUE);
-  cf->AddVariable(AliDielectronVarManager::kImpactParXY,50,-.1,.1,kTRUE);
-  cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,12,-3,3,kTRUE);
-  
-  //no cuts
-  //only in this case write MC truth info
-  if (cutDefinition==0){
+
+  //pair variables **********************************************************
+  // j/psi pt ------------------
+  TVectorD *binLimPt=new TVectorD(14);
+  (*binLimPt)[0]=0.0; (*binLimPt)[1]=0.4; (*binLimPt)[2]=0.8; (*binLimPt)[3]=1.4;
+  (*binLimPt)[4]=2.0; (*binLimPt)[5]=2.8; (*binLimPt)[6]=3.5; (*binLimPt)[7]=4.2;
+  (*binLimPt)[8]=5.0; (*binLimPt)[9]=6.0; (*binLimPt)[10]=7.0; (*binLimPt)[11]=8.0;
+  (*binLimPt)[12]=9.0; (*binLimPt)[13]=10.0;
+  cf->AddVariable(AliDielectronVarManager::kPt,          binLimPt);
+  // j/psi y -------------------
+  TVectorD *binLimY=new TVectorD(13);
+  (*binLimY)[0]=-1.0; (*binLimY)[1]=-0.88; (*binLimY)[2]=-0.8;
+  (*binLimY)[3]=-0.6; (*binLimY)[4]=-0.4; (*binLimY)[5]=-0.2; (*binLimY)[6]=0.0;
+  (*binLimY)[7]=0.2; (*binLimY)[8]=0.4; (*binLimY)[9]=0.6; (*binLimY)[10]=0.8;
+  (*binLimY)[11]=0.88; (*binLimY)[12]=1.0;
+  cf->AddVariable(AliDielectronVarManager::kY,            binLimY);
+  // pair type -----------------
+  cf->AddVariable(AliDielectronVarManager::kPairType,      3,  0.0, 3.0);  
+  //leg variables **********************************************************
+  // leg pseudo-rapidity --------------------------
+  cf->AddVariable(AliDielectronVarManager::kEta,          binLimY, kTRUE);
+  // leg TPC n-sigma electron ---------------------
+  //  cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle, 12, -3.0,   3.0, kTRUE);
+  // leg pt ---------------------------------------
+  TVectorD *binLimPtLeg=new TVectorD(7);
+  (*binLimPtLeg)[0]=0.0; (*binLimPtLeg)[1]=0.8; (*binLimPtLeg)[2]=0.9;
+  (*binLimPtLeg)[3]=1.0; (*binLimPtLeg)[4]=1.1; (*binLimPtLeg)[5]=1.2;
+  (*binLimPtLeg)[6]=20.0;
+  cf->AddVariable(AliDielectronVarManager::kPt,            binLimPtLeg, kTRUE);
+  // leg Ncls TPC ---------------------------------
+  TVectorD *binLimNclsTPC=new TVectorD(7);
+  (*binLimNclsTPC)[0]=0.0;   (*binLimNclsTPC)[1]=80.0;  (*binLimNclsTPC)[2]=90.0;
+  (*binLimNclsTPC)[3]=100.0; (*binLimNclsTPC)[4]=110.0; (*binLimNclsTPC)[5]=120.0;
+  (*binLimNclsTPC)[6]=160.0;
+  cf->AddVariable(AliDielectronVarManager::kNclsTPC,       binLimNclsTPC, kTRUE);
+  // -------------------------------------------------------------------------------
+
+  if(cutDefinition==0) {
     cf->SetStepForMCtruth();
-    cf->SetStepForNoCutsMCmotherPid();
     cf->SetStepForAfterAllCuts(kFALSE);
+    cf->SetStepsForSignal(kFALSE);
   }
-  
-  if (cutDefinition==1){
-    cf->SetStepForNoCutsMCmotherPid();
-  }
-  
-  if (cutDefinition>1){
-    cf->SetStepsForEachCut();
-  }
-  
-  if (cutDefinition>2){
-    cf->SetStepsForCutsIncreasing();
+  if(cutDefinition>0){
+    //    cf->SetStepForNoCutsMCmotherPid();
+    cf->SetStepForAfterAllCuts();
+    //    cf->SetStepsForEachCut();
+    cf->SetStepsForSignal();
+    //    cf->SetStepsForBackground();
   }
-  
   die->SetCFManagerPair(cf);
   
 }
index 73de2e9..5c9cb52 100644 (file)
@@ -1,12 +1,11 @@
-void SetupTrackCuts(AliDielectron *fDiele);
-void SetupPairCuts(AliDielectron *fDiele);
+void SetupTrackCutsDieleFilter(AliDielectron *diele, Bool_t isAOD);
+void SetupPairCutsDieleFilter(AliDielectron *diele, Bool_t isAOD);
+void SetupEventCutsDieleFilter(AliDielectron *diele, Int_t cutDefinition);
 
-void InitHistograms();
+void InitHistogramsDieleFilter(AliDielectron *diele);
 
-AliESDtrackCuts *SetupESDtrackCuts();
+AliESDtrackCuts *SetupESDtrackCutsDieleFilter();
 
-Bool_t *fIsAOD=kFALSE;
-AliDielectron *fDiele=0x0;
 
 AliDielectron* ConfigJpsi2eeFilter(Bool_t isAOD=kFALSE)
 {
@@ -14,41 +13,52 @@ AliDielectron* ConfigJpsi2eeFilter(Bool_t isAOD=kFALSE)
   // Setup the instance of AliDielectron
   //
 
-  fIsAOD=isAOD;
-  
   // create the actual framework object
   TString name="trackQ+Pt>0.6+60<dEdx<100";
-  fDiele = new AliDielectron(Form("%s",name.Data()),
+  AliDielectron *diele = new AliDielectron(Form("%s",name.Data()),
                              Form("Track cuts: %s",name.Data()));
   
   // cut setup
-  SetupTrackCuts();
-  SetupPairCuts();
+  SetupEventCutsDieleFilter(diele);
+  
+  SetupTrackCutsDieleFilter(diele, isAOD);
+  SetupPairCutsDieleFilter(diele, isAOD);
   
   //
   // QA histogram setup
   //
-  InitHistograms();
+  InitHistogramsDieleFilter(diele, isAOD);
   
-  return fDiele;
+  return diele;
 }
 
 //______________________________________________________________________________________
-void SetupTrackCuts()
+void SetupEventCutsDieleFilter(AliDielectron *diele)
+{
+  //
+  // Setup the event cuts
+  //
+  AliDielectronVarCuts *vtxZ = new AliDielectronVarCuts("vtxZ","Vertex z cut");
+  vtxZ->AddCut(AliDielectronVarManager::kZvPrim,-15.,15.);
+  diele->GetEventFilter().AddCuts(vtxZ);
+}
+
+//______________________________________________________________________________________
+void SetupTrackCutsDieleFilter(AliDielectron *diele, Bool_t isAOD)
 {
   //
   // Setup the track cuts
   //
   
   //ESD quality cuts DielectronTrackCuts
-  if (!fIsAOD) {
-    fDiele->GetTrackFilter().AddCuts(SetupESDtrackCuts());
+  if (!isAOD) {
+    diele->GetTrackFilter().AddCuts(SetupESDtrackCutsDieleFilter());
   } else {
     AliDielectronTrackCuts *trackCuts=new AliDielectronTrackCuts("trackCuts","trackCuts");
     trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
     trackCuts->SetRequireTPCRefit(kTRUE);
     trackCuts->SetRequireITSRefit(kTRUE);
-    fDiele->GetTrackFilter().AddCuts(trackCuts);
+    diele->GetTrackFilter().AddCuts(trackCuts);
   }
   
   //Pt cut
@@ -56,20 +66,20 @@ void SetupTrackCuts()
   pt->AddCut(AliDielectronVarManager::kPt,.6,1e30);
   pt->AddCut(AliDielectronVarManager::kTPCsignal,60.,100.);
 
-  if (fIsAOD){
+  if (isAOD){
       // TPC #clusteres cut
     pt->AddCut(AliDielectronVarManager::kNclsTPC,90.,160.);
-    pt->AddCut(AliDielectronVarManager::kEta,-0.8,0.8);
+//     pt->AddCut(AliDielectronVarManager::kEta,-0.88,0.88);
     //TODO: DCA cuts to be investigated!!!
 //     pt->AddCut(AliDielectronVarManager::kImpactParXY,-1.,1.);
 //     pt->AddCut(AliDielectronVarManager::kImpactParZ,-3.,3.);
   }
   
-  fDiele->GetTrackFilter().AddCuts(pt);
+  diele->GetTrackFilter().AddCuts(pt);
 }
 
 //______________________________________________________________________________________
-void SetupPairCuts()
+void SetupPairCutsDieleFilter(AliDielectron *diele, Bool_t isAOD)
 {
   //
   // Setup the pair cuts
@@ -80,12 +90,12 @@ void SetupPairCuts()
   AliDielectronVarCuts *invMassCut=new AliDielectronVarCuts("InvMass","2<M<4");
   invMassCut->AddCut(AliDielectronVarManager::kM,2.,1e30);
 //   invMassCut->AddCut(AliDielectronVarManager::kPairType,1.);
-  fDiele->GetPairFilter().AddCuts(invMassCut);
+  diele->GetPairFilter().AddCuts(invMassCut);
 
 }
 
 //______________________________________________________________________________________
-AliESDtrackCuts *SetupESDtrackCuts()
+AliESDtrackCuts *SetupESDtrackCutsDieleFilter()
 {
   //
   // Setup default AliESDtrackCuts
@@ -107,7 +117,7 @@ AliESDtrackCuts *SetupESDtrackCuts()
 
 
 //______________________________________________________________________________________
-void InitHistograms()
+void InitHistogramsDieleFilter(AliDielectron *diele, Bool_t isAOD)
 {
   //
   // Initialise the histograms
@@ -115,12 +125,13 @@ void InitHistograms()
   
 //Setup histogram classes
   AliDielectronHistos *histos=
-    new AliDielectronHistos(fDiele->GetName(),
-                            fDiele->GetTitle());
+    new AliDielectronHistos(diele->GetName(),
+                            diele->GetTitle());
   
   //Initialise histogram classes
   histos->SetReservedWords("Track;Pair");
-  
+
+  histos->AddClass("Event");
   //Track classes
   //to fill also track info from 2nd event loop until 2
   for (Int_t i=0; i<2; ++i){
@@ -133,6 +144,9 @@ void InitHistograms()
     histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
   }
 
+  //add histograms to event class
+  histos->UserHistogram("Event","VtxZ","Vertex Z;Z[cm]",300,-15.,15.,AliDielectronVarManager::kZvPrim);
+  
   //add histograms to Track classes
   histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",400,0,20.,AliDielectronVarManager::kPt);
   histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",160,-0.5,159.5,AliDielectronVarManager::kNclsTPC);
@@ -155,5 +169,5 @@ void InitHistograms()
   histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
                         100,0.,3.15,AliDielectronVarManager::kOpeningAngle);
   
-  fDiele->SetHistogramManager(histos);
+  diele->SetHistogramManager(histos);
 }
index 01eaf74..7652498 100644 (file)
@@ -323,7 +323,7 @@ void DrawUnbinned(){
 Int_t baseColors[5]={kRed, kGreen+1, kAzure-4, kMagenta, kCyan+1};
   Int_t sigmaColorOffset=0;
 
-  Double_t sigmas[5]={2,2,2,2,2};
+  Double_t sigmas[5]={3,3,3,3,3};
   Double_t masses[5];
 
   for (Int_t i=0; i<AliPID::kSPECIES; ++i) masses[i]=AliPID::ParticleMass(i);
@@ -372,8 +372,8 @@ for (Int_t i=0; i<5; ++i){
 
 for (Int_t i=0; i<5; ++i){
   fBethe[i]->Draw("same");
-  fBetheP[i]->Draw("same");
-  fBetheM[i]->Draw("same");
+//   fBetheP[i]->Draw("same");
+//   fBetheM[i]->Draw("same");
 }
 }