ClassImp(AlidNdEtaTask)
AlidNdEtaTask::AlidNdEtaTask(const char* opt) :
- AliAnalysisTask("AlidNdEtaTask", ""),
+ AliAnalysisTaskSE("AlidNdEtaTask"),
fESD(0),
fOutput(0),
fOption(opt),
fMultAxisEta1(kFALSE),
fDiffTreatment(AliPWG0Helper::kMCFlags),
fEsdTrackCuts(0),
- fTriggerAnalysis(0),
fdNdEtaAnalysisESD(0),
fMult(0),
fMultVtx(0),
//
// 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;
}
}
-Bool_t AlidNdEtaTask::Notify()
+Bool_t AlidNdEtaTask::UserNotify()
{
static Int_t count = 0;
count++;
}
//________________________________________________________________________
-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) {
// Enable only the needed branches
esdH->SetActiveBranches(branches);
}
+ */
// disable info messages of AliMCEvent (per event)
AliLog::SetClassDebugLevel("AliMCEvent", AliLog::kWarning - AliLog::kDebug + 1);
#endif
}
-void AlidNdEtaTask::CreateOutputObjects()
+void AlidNdEtaTask::UserCreateOutputObjects()
{
// create result objects and add to output list
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");
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);
//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)
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)
if (!eventTriggered)
{
fStats2->Fill(0.0, vZero);
+ fStats2->Fill(0.0, (fastORHW) ? 10 : 11);
filled = kTRUE;
}
if (!filled)
{
fStats2->Fill(1, vZero);
+ fStats2->Fill(1, (fastORHW) ? 10 : 11);
filled = kTRUE;
}
}
if (!filled)
{
fStats2->Fill(2, vZero);
+ fStats2->Fill(2, (fastORHW) ? 10 : 11);
filled = kTRUE;
}
}
if (!filled)
{
fStats2->Fill(3, vZero);
+ fStats2->Fill(3, (fastORHW) ? 10 : 11);
filled = kTRUE;
}
}
if (!filled)
{
fStats2->Fill(4, vZero);
+ fStats2->Fill(4, (fastORHW) ? 10 : 11);
filled = kTRUE;
}
}
if (!filled)
{
fStats2->Fill(5, vZero);
+ fStats2->Fill(5, (fastORHW) ? 10 : 11);
filled = kTRUE;
}
}
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());
}
// 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");
#ifndef AlidNdEtaTask_H
#define AlidNdEtaTask_H
-#include "AliAnalysisTask.h"
+#include "AliAnalysisTaskSE.h"
#include "AliPWG0Helper.h"
#include "AliTriggerAnalysis.h"
#include <TString.h>
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; }
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
//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;
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);
}
if (requiredData == 1)
task->SetReadMC();
+
+ //physicsSelectionTask->GetPhysicsSelection()->SetBin0Callback("AlidNdEtaTask");
// syst. error flags
//task->SetUseMCVertex();
//task->SetSymmetrize();
// INEL>0 definition
- //task->SetMultAxisEta1();
+ if (trigger & AliTriggerAnalysis::kOneParticle)
+ task->SetMultAxisEta1();
task->SetTrigger(trigger);
task->SetAnalysisMode(analysisMode);
// 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)
task2->SetSkipParticles();
// INEL>0 definition
- //task2->SetMultAxisEta1();
+ if (trigger & AliTriggerAnalysis::kOneParticle)
+ task2->SetMultAxisEta1();
task2->SetTrigger(trigger);
task2->SetAnalysisMode(analysisMode);