update for INEL>0 analysis
authorjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 21 Apr 2010 14:17:03 +0000 (14:17 +0000)
committerjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 21 Apr 2010 14:17:03 +0000 (14:17 +0000)
PWG0/dNdEta/AlidNdEtaTask.cxx
PWG0/dNdEta/AlidNdEtaTask.h
PWG0/dNdEta/correct.C
PWG0/dNdEta/drawPlots.C
PWG0/dNdEta/drawSystematics.C
PWG0/dNdEta/run.C

index ae33c25..d27e18b 100644 (file)
@@ -53,7 +53,7 @@
 ClassImp(AlidNdEtaTask)
 
 AlidNdEtaTask::AlidNdEtaTask(const char* opt) :
-  AliAnalysisTask("AlidNdEtaTask", ""),
+  AliAnalysisTaskSE("AlidNdEtaTask"),
   fESD(0),
   fOutput(0),
   fOption(opt),
@@ -72,7 +72,6 @@ AlidNdEtaTask::AlidNdEtaTask(const char* opt) :
   fMultAxisEta1(kFALSE),
   fDiffTreatment(AliPWG0Helper::kMCFlags),
   fEsdTrackCuts(0),
-  fTriggerAnalysis(0),
   fdNdEtaAnalysisESD(0),
   fMult(0),
   fMultVtx(0),
@@ -105,8 +104,8 @@ AlidNdEtaTask::AlidNdEtaTask(const char* opt) :
   //
 
   // Define input and output slots here
-  DefineInput(0, TChain::Class());
-  DefineOutput(0, TList::Class());
+  //DefineInput(0, TChain::Class());
+  DefineOutput(1, TList::Class());
   
   fZPhi[0] = 0;
   fZPhi[1] = 0;
@@ -129,7 +128,7 @@ AlidNdEtaTask::~AlidNdEtaTask()
   }
 }
 
-Bool_t AlidNdEtaTask::Notify()
+Bool_t AlidNdEtaTask::UserNotify()
 {
   static Int_t count = 0;
   count++;
@@ -138,13 +137,16 @@ Bool_t AlidNdEtaTask::Notify()
 }
 
 //________________________________________________________________________
-void AlidNdEtaTask::ConnectInputData(Option_t *)
+void AlidNdEtaTask::ConnectInputData(Option_t *opt)
 {
   // Connect ESD
   // Called once
+  
+  AliAnalysisTaskSE::ConnectInputData(opt);
 
   Printf("AlidNdEtaTask::ConnectInputData called");
 
+  /*
   AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
 
   if (!esdH) {
@@ -163,6 +165,7 @@ void AlidNdEtaTask::ConnectInputData(Option_t *)
     // Enable only the needed branches
     esdH->SetActiveBranches(branches);
   }
+  */
 
   // disable info messages of AliMCEvent (per event)
   AliLog::SetClassDebugLevel("AliMCEvent", AliLog::kWarning - AliLog::kDebug + 1);
@@ -183,7 +186,7 @@ void AlidNdEtaTask::ConnectInputData(Option_t *)
   #endif
 }
 
-void AlidNdEtaTask::CreateOutputObjects()
+void AlidNdEtaTask::UserCreateOutputObjects()
 {
   // create result objects and add to output list
 
@@ -237,7 +240,7 @@ void AlidNdEtaTask::CreateOutputObjects()
   fStats->GetXaxis()->SetBinLabel(5, "physics events after veto");
   fOutput->Add(fStats);
   
-  fStats2 = new TH2F("fStats2", "fStats2", 7, -0.5, 6.5, 10, -0.5, 9.5);
+  fStats2 = new TH2F("fStats2", "fStats2", 7, -0.5, 6.5, 12, -0.5, 11.5);
   
   fStats2->GetXaxis()->SetBinLabel(1, "No trigger");
   fStats2->GetXaxis()->SetBinLabel(2, "No Vertex");
@@ -257,6 +260,8 @@ void AlidNdEtaTask::CreateOutputObjects()
   fStats2->GetYaxis()->SetBinLabel(8, "BGA BGC");
   fStats2->GetYaxis()->SetBinLabel(9, "BBA BGC");
   fStats2->GetYaxis()->SetBinLabel(10, "BGA BBC");
+  fStats2->GetYaxis()->SetBinLabel(11, "GFO");
+  fStats2->GetYaxis()->SetBinLabel(12, "NO GFO");
   fOutput->Add(fStats2);
 
   fTrackletsVsClusters = new TH2F("fTrackletsVsClusters", ";tracklets;clusters in ITS", 50, -0.5, 49.5, 1000, -0.5, 999.5);
@@ -331,16 +336,53 @@ void AlidNdEtaTask::CreateOutputObjects()
   //AliLog::SetClassDebugLevel("AliPhysicsSelection", AliLog::kDebug);
 }
 
-void AlidNdEtaTask::Exec(Option_t*)
+Bool_t AlidNdEtaTask::IsEventInBinZero()
+{
+  // checks if the event goes to the 0 bin
+  
+  fESD = (AliESDEvent*) fInputEvent;
+  
+  AliInputEventHandler* inputHandler = static_cast<AliInputEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
+  if (!inputHandler)
+  {
+    Printf("ERROR: Could not receive input handler");
+    return kFALSE;
+  }
+    
+  static AliTriggerAnalysis* triggerAnalysis = 0;
+  if (!triggerAnalysis)
+  {
+    AliPhysicsSelection* physicsSelection = dynamic_cast<AliPhysicsSelection*> (inputHandler->GetEventSelection());
+    if (physicsSelection)
+      triggerAnalysis = physicsSelection->GetTriggerAnalysis();
+  }
+  
+  if (!triggerAnalysis)
+  {
+    Printf("ERROR: Could not receive trigger analysis object");
+    return kFALSE;
+  }
+  
+  if (!triggerAnalysis->IsTriggerFired(fESD, fTrigger))
+    return kFALSE;
+  
+  // TODO 0 bin check
+  
+  return kTRUE;
+}
+
+void AlidNdEtaTask::UserExec(Option_t*)
 {
   // process the event
 
+  fESD = (AliESDEvent*) fInputEvent;
+  
   // these variables are also used in the MC section below; however, if ESD is off they stay with their default values
   Bool_t eventTriggered = kFALSE;
   const AliESDVertex* vtxESD = 0;
 
   // post the data already here
-  PostData(0, fOutput);
+  PostData(1, fOutput);
 
   // ESD analysis
   if (fESD)
@@ -361,18 +403,20 @@ void AlidNdEtaTask::Exec(Option_t*)
     
     eventTriggered = inputHandler->IsEventSelected();
         
-    if (!fTriggerAnalysis)
+    static AliTriggerAnalysis* triggerAnalysis = 0;
+    if (!triggerAnalysis)
     {
       AliPhysicsSelection* physicsSelection = dynamic_cast<AliPhysicsSelection*> (inputHandler->GetEventSelection());
       if (physicsSelection)
-        fTriggerAnalysis = physicsSelection->GetTriggerAnalysis();
+        triggerAnalysis = physicsSelection->GetTriggerAnalysis();
     }
       
     if (eventTriggered)
-      eventTriggered = fTriggerAnalysis->IsTriggerFired(fESD, fTrigger);
+      eventTriggered = triggerAnalysis->IsTriggerFired(fESD, fTrigger);
     
-    AliTriggerAnalysis::V0Decision v0A = fTriggerAnalysis->V0Trigger(fESD, AliTriggerAnalysis::kASide, kFALSE);
-    AliTriggerAnalysis::V0Decision v0C = fTriggerAnalysis->V0Trigger(fESD, AliTriggerAnalysis::kCSide, kFALSE);
+    AliTriggerAnalysis::V0Decision v0A = triggerAnalysis->V0Trigger(fESD, AliTriggerAnalysis::kASide, kFALSE);
+    AliTriggerAnalysis::V0Decision v0C = triggerAnalysis->V0Trigger(fESD, AliTriggerAnalysis::kCSide, kFALSE);
+    Bool_t fastORHW = (triggerAnalysis->SPDFiredChips(fESD, 1) > 0);
     
     Int_t vZero = 0;
     if (v0A != AliTriggerAnalysis::kV0Invalid && v0C != AliTriggerAnalysis::kV0Invalid)
@@ -396,6 +440,7 @@ void AlidNdEtaTask::Exec(Option_t*)
     if (!eventTriggered)
     {
       fStats2->Fill(0.0, vZero);
+      fStats2->Fill(0.0, (fastORHW) ? 10 : 11);
       filled = kTRUE;
     }
     
@@ -463,6 +508,7 @@ isManager()->GetInputEventHandler());
       if (!filled)
       {
         fStats2->Fill(1, vZero);
+        fStats2->Fill(1, (fastORHW) ? 10 : 11);
         filled = kTRUE;
       }
     }
@@ -473,6 +519,7 @@ isManager()->GetInputEventHandler());
         if (!filled)
         {
           fStats2->Fill(2, vZero);
+          fStats2->Fill(2, (fastORHW) ? 10 : 11);
           filled = kTRUE;
         }
       }
@@ -487,6 +534,7 @@ isManager()->GetInputEventHandler());
         if (!filled)
         {
           fStats2->Fill(3, vZero);
+          fStats2->Fill(3, (fastORHW) ? 10 : 11);
           filled = kTRUE;
         }
       }
@@ -496,6 +544,7 @@ isManager()->GetInputEventHandler());
         if (!filled)
         {
           fStats2->Fill(4, vZero);
+          fStats2->Fill(4, (fastORHW) ? 10 : 11);
           filled = kTRUE;
         }
       }
@@ -509,6 +558,7 @@ isManager()->GetInputEventHandler());
         if (!filled)
         {
           fStats2->Fill(5, vZero);
+          fStats2->Fill(5, (fastORHW) ? 10 : 11);
           filled = kTRUE;
         }
       }
@@ -517,6 +567,7 @@ isManager()->GetInputEventHandler());
     if (!filled)
     {
       fStats2->Fill(6, vZero);
+      fStats2->Fill(6, (fastORHW) ? 10 : 11);
       //Printf("File: %s, IEV: %d, TRG: ---, Orbit: 0x%x, Period: %d, BC: %d", ((TTree*) GetInputData(0))->GetCurrentFile()->GetName(), fESD->GetEventNumberInFile(), fESD->GetOrbitNumber(),fESD->GetPeriodNumber(),fESD->GetBunchCrossNumber());
     }
       
@@ -1099,7 +1150,7 @@ void AlidNdEtaTask::Terminate(Option_t *)
   // a query. It always runs on the client, it can be used to present
   // the results graphically or save the results to file.
 
-  fOutput = dynamic_cast<TList*> (GetOutputData(0));
+  fOutput = dynamic_cast<TList*> (GetOutputData(1));
   if (!fOutput)
     Printf("ERROR: fOutput not available");
 
index 66298a5..96a63d5 100644 (file)
@@ -3,7 +3,7 @@
 #ifndef AlidNdEtaTask_H
 #define AlidNdEtaTask_H
 
-#include "AliAnalysisTask.h"
+#include "AliAnalysisTaskSE.h"
 #include "AliPWG0Helper.h"
 #include "AliTriggerAnalysis.h"
 #include <TString.h>
@@ -16,16 +16,18 @@ class TH3F;
 class AliESDEvent;
 class AliTriggerAnalysis;
 
-class AlidNdEtaTask : public AliAnalysisTask {
+class AlidNdEtaTask : public AliAnalysisTaskSE {
   public:
     AlidNdEtaTask(const char* opt = "");
     virtual ~AlidNdEtaTask();
 
-    virtual void   ConnectInputData(Option_t *);
-    virtual void   CreateOutputObjects();
-    virtual void   Exec(Option_t*);
+    virtual void   ConnectInputData(Option_t *opt);
+    virtual void   UserCreateOutputObjects();
+    virtual void   UserExec(Option_t*);
     virtual void   Terminate(Option_t*);
-    virtual Bool_t   Notify();
+    virtual Bool_t UserNotify();
+    
+    Bool_t IsEventInBinZero();
 
     void SetTrackCuts(AliESDtrackCuts* cuts) { fEsdTrackCuts = cuts; }
     void SetAnalysisMode(AliPWG0Helper::AnalysisMode mode) { fAnalysisMode = mode; }
@@ -66,7 +68,6 @@ class AlidNdEtaTask : public AliAnalysisTask {
     AliPWG0Helper::DiffTreatment  fDiffTreatment;  // how to identify SD events (see AliPWG0Helper::GetEventProcessType)
 
     AliESDtrackCuts* fEsdTrackCuts;         // Object containing the parameters of the esd track cuts
-    AliTriggerAnalysis* fTriggerAnalysis;
 
     // Gathered from ESD
     dNdEtaAnalysis* fdNdEtaAnalysisESD;     //! contains the dndeta from the ESD
index 058cf5f..c24a4f6 100644 (file)
@@ -34,14 +34,14 @@ void FinishAnalysisAll(const char* dataInput = "analysis_esd_raw.root", const ch
   
   //backgroundEvents = 1162+434; // Michele for MB1, run 104892, 15.02.10
   //backgroundEvents = 842;    // JF estimate for V0 systematic case 1
-  backgroundEvents = 6;          // Michele for V0AND, run 104892, 15.02.10
+  //backgroundEvents = 6;          // Michele for V0AND, run 104892, 15.02.10
   
   //backgroundEvents = 1758+434; // MB1, run 104867-92
   
   //backgroundEvents = 4398+961;   // Michele for MB1, run 104824-52, 16.02.10
   //backgroundEvents = 19;         // Michele for V0AND, run 104824-52, 16.02.10
   
-  //backgroundEvents = -1;    // use 0 bin from MC! for 2.36 TeV
+  backgroundEvents = -1;    // use 0 bin from MC! for 2.36 TeV
   //backgroundEvents = 900; // my estimate for 2.36 TeV
   
   //backgroundEvents = 918;   // V0OR for run 114786 w/o bunch intensities w/o proper 0 checking!
@@ -55,6 +55,8 @@ void FinishAnalysisAll(const char* dataInput = "analysis_esd_raw.root", const ch
   {
     TFile::Open("corrComb.root");
     combinatoricsCorrection = (TH1*) gFile->Get("ratioofratios");
+    if (!combinatoricsCorrection)
+      combinatoricsCorrection = (TH1*) gFile->Get("correctiondNdEta");
     file->cd();
   }
   
index d574d82..636f952 100644 (file)
@@ -447,6 +447,8 @@ void dNdEta(Bool_t onlyESD = kFALSE, Bool_t save = kTRUE)
   TH1* histESDnsd = (TH1*) file->Get("dndetaNSD/dNdEta_corrected");
   TH1* histESDnsdNoPt = (TH1*) file->Get("dndetaNSD/dNdEta");
   TH1* histESDonePart = (TH1*) file->Get("dndetaOnePart/dNdEta_corrected");
+  if (!histESDonePart)
+    histESDonePart = new TH1F;
   TH1* histESDNoPt = (TH1*) file->Get("dndeta/dNdEta");
   TH1* histESDMB = (TH1*) file->Get("dndetaTr/dNdEta_corrected");
   TH1* histESDMBNoPt = (TH1*) file->Get("dndetaTr/dNdEta");
@@ -633,6 +635,8 @@ void dNdEta(Bool_t onlyESD = kFALSE, Bool_t save = kTRUE)
   histESD2->SetLineColor(4);
   histESD2->DrawCopy("SAME");
   
+  PrintIntegratedDeviation(histESDnsd, histESDMB, "factor MB / NSD");
+  
   if (onlyESD)
     return;
 
@@ -3823,4 +3827,4 @@ void PrintAverageNSDCorrectionFactors()
   
   dNdEtaCorrection->GetTriggerBiasCorrectionNSD()->PrintInfo(0.0);
 }
-    
\ No newline at end of file
+    
index f2870e0..c26a266 100644 (file)
@@ -1146,11 +1146,11 @@ void GetRelativeFractions(Int_t origin, Float_t& ref_SD, Float_t& ref_DD, Float_
 
   switch (origin)
   {
-    case -10: // Pythia default at 900 GeV, 50% error
+    case -10: // Pythia default at 7 GeV, 50% error
       Printf("PYTHIA x-sections");
-      ref_SD = 0.223788; error_SD = ref_SD * 0.5;
-      ref_DD = 0.123315; error_DD = ref_DD * 0.5;
-      ref_ND = 0.652897; error_ND = 0;
+      ref_SD = 0.192637; error_SD = ref_SD * 0.5;
+      ref_DD = 0.129877; error_DD = ref_DD * 0.5;
+      ref_ND = 0.677486; error_ND = 0;
       break;
 
     case -1: // Pythia default at 900 GeV, as test
index 8c54df8..342d2b9 100644 (file)
@@ -125,8 +125,8 @@ void run(Int_t runWhat, const Char_t* data, Int_t nRuns=20, Int_t offset=0, Bool
   //AliPWG0Helper::AnalysisMode analysisMode = AliPWG0Helper::kSPD | AliPWG0Helper::kFieldOn | AliPWG0Helper::kSPDOnlyL0;
   //AliPWG0Helper::AnalysisMode analysisMode = AliPWG0Helper::kTPCITS | AliPWG0Helper::kFieldOn;
   
-  AliTriggerAnalysis::Trigger trigger      = AliTriggerAnalysis::kAcceptAll | AliTriggerAnalysis::kOfflineFlag;
-  //AliTriggerAnalysis::Trigger trigger      = AliTriggerAnalysis::kAcceptAll | AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kOneParticle;
+  //AliTriggerAnalysis::Trigger trigger      = AliTriggerAnalysis::kAcceptAll | AliTriggerAnalysis::kOfflineFlag;
+  AliTriggerAnalysis::Trigger trigger      = AliTriggerAnalysis::kAcceptAll | AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kOneParticle;
   
   //AliTriggerAnalysis::Trigger trigger      = AliTriggerAnalysis::kSPDGFOBits | AliTriggerAnalysis::kOfflineFlag;
   //AliTriggerAnalysis::Trigger trigger      = AliTriggerAnalysis::kSPDGFOBits | AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kOneParticle;
@@ -202,14 +202,14 @@ void run(Int_t runWhat, const Char_t* data, Int_t nRuns=20, Int_t offset=0, Bool
   if (1 && requiredData != 2)
   {
     //const char* fastORFile = "spdFOEff_run104824_52.root";
-    const char* fastORFile = "spdFOEff_run104867_92.root";
+    //const char* fastORFile = "spdFOEff_run104867_92.root";
     //const char* fastORFile = "spdFOEff_run105054_7.root";
-    //const char* fastORFile = "spdFOEff_run114931.root";
+    const char* fastORFile = "spdFOEff_run114931.root";
   
     Printf("NOTE: Simulating FAST-OR efficiency on the analysis level using file %s", fastORFile);
     TFile::Open(fastORFile);
     spdFOEff = (TH1F*) gFile->Get("spdFOEff");
-    physicsSelectionTask->GetPhysicsSelection()->Initialize(104867);
+    physicsSelectionTask->GetPhysicsSelection()->Initialize(114931);
     physicsSelectionTask->GetPhysicsSelection()->GetTriggerAnalysis()->SetSPDGFOEfficiency(spdFOEff);
   }
   
@@ -241,6 +241,8 @@ void run(Int_t runWhat, const Char_t* data, Int_t nRuns=20, Int_t offset=0, Bool
 
     if (requiredData == 1)
       task->SetReadMC();
+      
+    //physicsSelectionTask->GetPhysicsSelection()->SetBin0Callback("AlidNdEtaTask");
 
     // syst. error flags
     //task->SetUseMCVertex();
@@ -250,7 +252,8 @@ void run(Int_t runWhat, const Char_t* data, Int_t nRuns=20, Int_t offset=0, Bool
     //task->SetSymmetrize();
 
     // INEL>0 definition
-    //task->SetMultAxisEta1();
+    if (trigger & AliTriggerAnalysis::kOneParticle)
+      task->SetMultAxisEta1();
 
     task->SetTrigger(trigger);
     task->SetAnalysisMode(analysisMode);
@@ -269,7 +272,7 @@ void run(Int_t runWhat, const Char_t* data, Int_t nRuns=20, Int_t offset=0, Bool
 
     // Attach output
     cOutput = mgr->CreateContainer("cOutput", TList::Class(), AliAnalysisManager::kOutputContainer);
-    mgr->ConnectOutput(task, 0, cOutput);
+    mgr->ConnectOutput(task, 1, cOutput);
   }
 
   if (runWhat == 1 || runWhat == 2)
@@ -286,7 +289,8 @@ void run(Int_t runWhat, const Char_t* data, Int_t nRuns=20, Int_t offset=0, Bool
     task2->SetSkipParticles();
 
     // INEL>0 definition
-    //task2->SetMultAxisEta1();
+    if (trigger & AliTriggerAnalysis::kOneParticle)
+      task2->SetMultAxisEta1();
 
     task2->SetTrigger(trigger);
     task2->SetAnalysisMode(analysisMode);