EMCALJetTasks/Tracks/AliAnalysisTaskPtEMCalTriggerV1.cxx
EMCALJetTasks/Tracks/AliEMCalTriggerMCParticleAnalysisComponent.cxx
EMCALJetTasks/Tracks/AliEMCalTriggerClusterAnalysisComponent.cxx
+ EMCALJetTasks/Tracks/AliEMCalTriggerEventCounterAnalysisComponent.cxx
+ EMCALJetTasks/Tracks/AliEMCalTriggerPatchAnalysisComponent.cxx
EMCALJetTasks/Tracks/AliEMCalTriggerRecTrackAnalysisComponent.cxx
EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalTriggerTreeWriter.cxx
)
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+/*
+ * Analysis component counting events for different trigger classes. Task needs
+ * to be grouped with a global event selection
+ *
+ * Author: Markus Fasel
+ */
+#include <map>
+#include <string>
+
+#include "AliVEvent.h"
+#include "AliVVertex.h"
+
+#include "AliEMCalTriggerAnaTriggerDecision.h"
+#include "AliEMCalTriggerBinningComponent.h"
+#include "AliEMCalTriggerEventData.h"
+#include "AliEMCalHistoContainer.h"
+#include "AliEMCalTriggerEventCounterAnalysisComponent.h"
+
+ClassImp(EMCalTriggerPtAnalysis::AliEMCalTriggerEventCounterAnalysisComponent)
+
+namespace EMCalTriggerPtAnalysis {
+
+//______________________________________________________________________________
+AliEMCalTriggerEventCounterAnalysisComponent::AliEMCalTriggerEventCounterAnalysisComponent():
+ AliEMCalTriggerTracksAnalysisComponent()
+{
+ /*
+ * Default (I/O) constructor, not to be used
+ */
+}
+
+//______________________________________________________________________________
+AliEMCalTriggerEventCounterAnalysisComponent::AliEMCalTriggerEventCounterAnalysisComponent(const char *name):
+ AliEMCalTriggerTracksAnalysisComponent(name)
+{
+ /*
+ * Main constructor
+ */
+}
+
+//______________________________________________________________________________
+void AliEMCalTriggerEventCounterAnalysisComponent::CreateHistos() {
+ /*
+ * Create event counter histograms
+ */
+ AliEMCalTriggerTracksAnalysisComponent::CreateHistos();
+
+ // Create trigger definitions
+ std::map<std::string, std::string> triggerCombinations;
+ const char *triggernames[11] = {"MinBias", "EMCJHigh", "EMCJLow", "EMCGHigh",
+ "EMCGLow", "EMCHighBoth", "EMCHighGammaOnly", "EMCHighJetOnly",
+ "EMCLowBoth", "EMCLowGammaOnly", "EMCLowJetOnly"};
+ // Define names and titles for different triggers in the histogram container
+ triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[0], "min. bias events"));
+ triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[1], "jet-triggered events (high threshold)"));
+ triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[2], "jet-triggered events (low threshold)"));
+ triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[3], "gamma-triggered events (high threshold)"));
+ triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[4], "gamma-triggered events (low threshold)"));
+ triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[5], "jet and gamma triggered events (high threshold)"));
+ triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[6], "exclusively gamma-triggered events (high threshold)"));
+ triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[7], "exclusively jet-triggered events (high threshold)"));
+ triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[8], "jet and gamma triggered events (low threshold)"));
+ triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[9], "exclusively gamma-triggered events (low threshold)"));
+ triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[10], "exclusively-triggered events (low threshold)"));
+
+ AliEMCalTriggerBinningDimension *vertexbinning = fBinning->GetBinning("zvertex");
+
+ for(std::map<std::string,std::string>::iterator it = triggerCombinations.begin(); it != triggerCombinations.end(); ++it){
+ const std::string name = it->first, &title = it->second;
+ // Create event-based histogram
+ fHistos->CreateTH1(Form("hEventHist%s", name.c_str()), Form("Event-based data for %s events; pileup rejection; z_{V} (cm)", title.c_str()), vertexbinning->GetNumberOfBins(), vertexbinning->GetBinLimits());
+ }
+
+ // Make correlation histogram for different trigger classes
+ const TAxis *triggeraxis[5]; memset(triggeraxis, 0, sizeof(const TAxis *) * 5);
+ const char *binlabels[2] = {"OFF", "ON"};
+ TAxis mytrgaxis[5];
+ for(int itrg = 0; itrg < 5; ++itrg){
+ DefineAxis(mytrgaxis[itrg], triggernames[itrg], triggernames[itrg], 2, -0.5, 1.5, binlabels);
+ triggeraxis[itrg] = mytrgaxis+itrg;
+ }
+ fHistos->CreateTHnSparse("hEventTriggers", "Trigger type per event", 5, triggeraxis);
+}
+
+//______________________________________________________________________________
+void AliEMCalTriggerEventCounterAnalysisComponent::Process(const AliEMCalTriggerEventData* const data) {
+ /*
+ * Do event counting
+ */
+ if(!fTriggerDecision) return;
+
+ double vz = data->GetRecEvent()->GetPrimaryVertex()->GetZ();
+ double triggerCorrelation[5]; memset(triggerCorrelation, 0, sizeof(double) * 5);
+
+ if(fTriggerDecision->IsMinBias()){
+ triggerCorrelation[0] = 1.;
+ fHistos->FillTH1("hEventHistMinBias", vz);
+ }
+ if(fTriggerDecision->IsTriggered(AliEMCalTriggerAnaTriggerDecision::kTAEMCJHigh)){
+ triggerCorrelation[2] = 1.;
+ fHistos->FillTH1("hEventHistEMCJHigh", vz);
+ // Check whether also the gamma high-threshold trigger fired
+ if(fTriggerDecision->IsTriggered(AliEMCalTriggerAnaTriggerDecision::kTAEMCGHigh)){
+ fHistos->FillTH1("hEventHistEMCHighBoth", vz);
+ } else {
+ fHistos->FillTH1("hEventHistEMCHighJetOnly", vz);
+ }
+ }
+ if(fTriggerDecision->IsTriggered(AliEMCalTriggerAnaTriggerDecision::kTAEMCJLow)){
+ triggerCorrelation[1] = 1.;
+ fHistos->FillTH1("hEventHistEMCJLow", vz);
+ // Check whether also the gamma high-threshold trigger fired
+ if(fTriggerDecision->IsTriggered(AliEMCalTriggerAnaTriggerDecision::kTAEMCGLow)){
+ fHistos->FillTH1("hEventHistEMCLowBoth", vz);
+ } else {
+ fHistos->FillTH1("hEventHistEMCLowJetOnly", vz);
+ }
+ }
+ if(fTriggerDecision->IsTriggered(AliEMCalTriggerAnaTriggerDecision::kTAEMCGHigh)){
+ triggerCorrelation[3] = 1.;
+ fHistos->FillTH1("hEventHistEMCGHigh", vz);
+ if(!fTriggerDecision->IsTriggered(AliEMCalTriggerAnaTriggerDecision::kTAEMCJHigh))
+ fHistos->FillTH1("hEventHistEMCHighGammaOnly", vz);
+ }
+ if(fTriggerDecision->IsTriggered(AliEMCalTriggerAnaTriggerDecision::kTAEMCGLow)){
+ triggerCorrelation[4] = 1.;
+ fHistos->FillTH1("hEventHistEMCGLow", vz);
+ if(!fTriggerDecision->IsTriggered(AliEMCalTriggerAnaTriggerDecision::kTAEMCJLow))
+ fHistos->FillTH1("hEventHistEMCLowGammaOnly", vz);
+ }
+
+ fHistos->FillTHnSparse("hEventTriggers", triggerCorrelation);
+}
+
+//______________________________________________________________________________
+void AliEMCalTriggerEventCounterAnalysisComponent::DefineAxis(TAxis& axis, const char* name,
+ const char* title, int nbins, double min, double max,
+ const char** labels) const {
+ /*
+ * Define an axis with number of bins from min to max
+ *
+ * @param axis: Axis to be defined
+ * @param name: Name of the axis
+ * @param title: Title of the axis
+ * @param nbins: Number of bins
+ * @param min: lower limit of the axis
+ * @param max: upper limit of the axis
+ * @param labels (@optional): array of bin labels
+ */
+ axis.Set(nbins, min, max);
+ axis.SetName(name);
+ axis.SetTitle(title);
+ if(labels){
+ for(int ib = 1; ib <= axis.GetNbins(); ++ib)
+ axis.SetBinLabel(ib, labels[ib-1]);
+ }
+}
+
+} /* namespace EMCalTriggerPtAnalysis */
--- /dev/null
+#ifndef ALIEMCALTRIGGEREVENTCOUNTERANALYSISCOMPONENT_H
+#define ALIEMCALTRIGGEREVENTCOUNTERANALYSISCOMPONENT_H
+/* Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+// Author: Markus Fasel
+
+#include "AliEMCalTriggerTracksAnalysisComponent.h"
+
+namespace EMCalTriggerPtAnalysis {
+
+class AliEMCalTriggerEventData;
+
+class AliEMCalTriggerEventCounterAnalysisComponent: public AliEMCalTriggerTracksAnalysisComponent {
+public:
+ AliEMCalTriggerEventCounterAnalysisComponent();
+ AliEMCalTriggerEventCounterAnalysisComponent(const char *name);
+ virtual ~AliEMCalTriggerEventCounterAnalysisComponent() {}
+
+ virtual void CreateHistos();
+ virtual void Process(const AliEMCalTriggerEventData * const data);
+
+protected:
+ void DefineAxis(TAxis& axis, const char* name,
+ const char* title, int nbins, double min, double max,
+ const char** labels) const;
+
+ ClassDef(AliEMCalTriggerEventCounterAnalysisComponent, 1); // Analysis component for event counting
+};
+
+} /* namespace EMCalTriggerPtAnalysis */
+
+#endif /* ALIEMCALTRIGGEREVENTCOUNTERANALYSISCOMPONENT_H */
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+/*
+ * Analysis component for different trigger patches
+ *
+ * Author: Markus Fasel
+ */
+#include <TClonesArray.h>
+
+#include "AliEmcalTriggerPatchInfo.h"
+#include "AliEMCalTriggerBinningComponent.h"
+#include "AliEMCalTriggerEventData.h"
+#include "AliEMCalTriggerPatchAnalysisComponent.h"
+
+ClassImp(EMCalTriggerPtAnalysis::AliEMCalTriggerPatchAnalysisComponent)
+
+namespace EMCalTriggerPtAnalysis {
+
+//______________________________________________________________________________
+AliEMCalTriggerPatchAnalysisComponent::AliEMCalTriggerPatchAnalysisComponent() :
+ AliEMCalTriggerTracksAnalysisComponent()
+{
+ /*
+ * Dummy (I/O) constructor, not to be used
+ */
+}
+
+//______________________________________________________________________________
+AliEMCalTriggerPatchAnalysisComponent::AliEMCalTriggerPatchAnalysisComponent(const char *name) :
+ AliEMCalTriggerTracksAnalysisComponent(name)
+{
+ /*
+ * Main constructor, to be used by the users
+ */
+}
+
+//______________________________________________________________________________
+void AliEMCalTriggerPatchAnalysisComponent::CreateHistos() {
+ /*
+ * Create histograms for the trigger patch analysis
+ */
+ AliEMCalTriggerBinningDimension *etabinning = fBinning->GetBinning("eta"),
+ *phibinning = fBinning->GetBinning("phi");
+ const TAxis *patchenergyaxes[4] = {
+ DefineAxis("energy", 100, 0., 100),
+ DefineAxis("eta", etabinning),
+ DefineAxis("phi", phibinning),
+ DefineAxis("isMain", 2, -0.5, 1.5)
+ };
+ const TAxis *patchampaxes[4] = {
+ DefineAxis("amplitude", 10000, 0., 10000.),
+ DefineAxis("eta", etabinning),
+ DefineAxis("phi", phibinning),
+ DefineAxis("isMain", 2, -0.5, 1.5)
+ };
+
+ std::string patchnames[] = {"Level0", "JetHigh", "JetLow", "GammaHigh", "GammaLow"};
+ for(std::string * triggerpatch = patchnames; triggerpatch < patchnames + sizeof(patchnames)/sizeof(std::string); ++triggerpatch){
+ fHistos->CreateTHnSparse(Form("Energy%s", triggerpatch->c_str()), Form("Patch energy for %s trigger patches", triggerpatch->c_str()), 4, patchenergyaxes, "s");
+ fHistos->CreateTHnSparse(Form("EnergyRough%s", triggerpatch->c_str()), Form("Rough patch energy for %s trigger patches", triggerpatch->c_str()), 4, patchenergyaxes, "s");
+ fHistos->CreateTHnSparse(Form("Amplitude%s", triggerpatch->c_str()), Form("Patch amplitude for %s trigger patches", triggerpatch->c_str()), 4, patchampaxes, "s");
+ }
+
+}
+
+//______________________________________________________________________________
+void AliEMCalTriggerPatchAnalysisComponent::Process(const AliEMCalTriggerEventData* const data) {
+ /*
+ * Run trigger patch analysis
+ */
+ AliEmcalTriggerPatchInfo *triggerpatch(NULL);
+ TIter patchIter(data->GetTriggerPatchContainer());
+ while((triggerpatch = dynamic_cast<AliEmcalTriggerPatchInfo *>(patchIter()))){
+ double triggerpatchinfo[4] = {triggerpatch->GetPatchE(), triggerpatch->GetEtaGeo(), triggerpatch->GetPhiGeo(), triggerpatch->IsMainTrigger() ? 1. : 0.};
+ double triggerpatchinfoamp[4] = {static_cast<double>(triggerpatch->GetADCAmp()), triggerpatch->GetEtaGeo(), triggerpatch->GetPhiGeo(), triggerpatch->IsMainTrigger() ? 1. : 0.};
+ double triggerpatchinfoer[4] = {triggerpatch->GetADCAmpGeVRough(), triggerpatch->GetEtaGeo(), triggerpatch->GetPhiGeo(), triggerpatch->IsMainTrigger() ? 1. : 0.};
+ if(triggerpatch->IsJetHigh()){
+ fHistos->FillTHnSparse("EnergyJetHigh", triggerpatchinfo);
+ fHistos->FillTHnSparse("AmplitudeJetHigh", triggerpatchinfoamp);
+ fHistos->FillTHnSparse("EnergyRoughJetHigh", triggerpatchinfoer);
+ }
+ if(triggerpatch->IsJetLow()){
+ fHistos->FillTHnSparse("EnergyJetLow", triggerpatchinfo);
+ fHistos->FillTHnSparse("AmplitudeJetLow", triggerpatchinfoamp);
+ fHistos->FillTHnSparse("EnergyRoughJetLow", triggerpatchinfoer);
+ }
+ if(triggerpatch->IsGammaHigh()){
+ fHistos->FillTHnSparse("EnergyGammaHigh", triggerpatchinfo);
+ fHistos->FillTHnSparse("AmplitudeGammaHigh", triggerpatchinfoamp);
+ fHistos->FillTHnSparse("EnergyRoughGammaHigh", triggerpatchinfoer);
+ }
+ if(triggerpatch->IsGammaLow()){
+ fHistos->FillTHnSparse("EnergyGammaLow", triggerpatchinfo);
+ fHistos->FillTHnSparse("AmplitudeGammaLow", triggerpatchinfoamp);
+ fHistos->FillTHnSparse("EnergyRoughGammaLow", triggerpatchinfoer);
+ }
+ if(triggerpatch->IsLevel0()){
+ fHistos->FillTHnSparse("EnergyLevel0", triggerpatchinfo);
+ fHistos->FillTHnSparse("AmplitudeLevel0", triggerpatchinfoamp);
+ fHistos->FillTHnSparse("EnergyRoughLevel0", triggerpatchinfoer);
+ }
+ }
+}
+
+} /* namespace EMCalTriggerPtAnalysis */
--- /dev/null
+#ifndef ALIEMCALTRIGGERPATCHANALYSISCOMPONENT_H
+#define ALIEMCALTRIGGERPATCHANALYSISCOMPONENT_H
+/* Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+// Author: Markus Fasel
+
+#include "AliEMCalTriggerTracksAnalysisComponent.h"
+
+namespace EMCalTriggerPtAnalysis {
+
+class AliEMCalTriggerEventData;
+
+class AliEMCalTriggerPatchAnalysisComponent: public AliEMCalTriggerTracksAnalysisComponent {
+public:
+ AliEMCalTriggerPatchAnalysisComponent();
+ AliEMCalTriggerPatchAnalysisComponent(const char *name);
+ virtual ~AliEMCalTriggerPatchAnalysisComponent() { }
+
+ virtual void CreateHistos();
+ virtual void Process(const AliEMCalTriggerEventData * const data);
+
+protected:
+
+ ClassDef(AliEMCalTriggerPatchAnalysisComponent, 1); // Component for trigger patch analysis
+};
+
+} /* namespace EMCalTriggerPtAnalysis */
+
+#endif /* ALIEMCALTRIGGERPATCHANALYSISCOMPONENT_H */
*/
// Create trigger definitions
std::map<std::string, std::string> triggerCombinations;
- const char *triggernames[12] = {"MinBias", "EMCJHigh", "EMCJLow", "EMCGHigh",
- "EMCGLow", "NoEMCal", "EMCHighBoth", "EMCHighGammaOnly", "EMCHighJetOnly",
+ const char *triggernames[11] = {"MinBias", "EMCJHigh", "EMCJLow", "EMCGHigh",
+ "EMCGLow", "EMCHighBoth", "EMCHighGammaOnly", "EMCHighJetOnly",
"EMCLowBoth", "EMCLowGammaOnly", "EMCLowJetOnly"};
// Define names and titles for different triggers in the histogram container
triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[0], "min. bias events"));
triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[2], "jet-triggered events (low threshold)"));
triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[3], "gamma-triggered events (high threshold)"));
triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[4], "gamma-triggered events (low threshold)"));
- triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[5], "non-EMCal-triggered events"));
- triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[6], "jet and gamma triggered events (high threshold)"));
- triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[7], "exclusively gamma-triggered events (high threshold)"));
- triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[8], "exclusively jet-triggered events (high threshold)"));
- triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[9], "jet and gamma triggered events (low threshold)"));
- triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[10], "exclusively gamma-triggered events (low threshold)"));
- triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[11], "exclusively-triggered events (low threshold)"));
+ triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[5], "jet and gamma triggered events (high threshold)"));
+ triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[6], "exclusively gamma-triggered events (high threshold)"));
+ triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[7], "exclusively jet-triggered events (high threshold)"));
+ triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[8], "jet and gamma triggered events (low threshold)"));
+ triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[9], "exclusively gamma-triggered events (low threshold)"));
+ triggerCombinations.insert(std::pair<std::string,std::string>(triggernames[10], "exclusively-triggered events (low threshold)"));
// Create axis definitions
const AliEMCalTriggerBinningDimension *ptbinning = fBinning->GetBinning("pt"),
#pragma link C++ class EMCalTriggerPtAnalysis::AliEMCalTriggerAnaTriggerDecision+;
#pragma link C++ class EMCalTriggerPtAnalysis::AliEMCalTriggerMCParticleAnalysisComponent+;
#pragma link C++ class EMCalTriggerPtAnalysis::AliEMCalTriggerClusterAnalysisComponent+;
+#pragma link C++ class EMCalTriggerPtAnalysis::AliEMCalTriggerEventCounterAnalysisComponent+;
+#pragma link C++ class EMCalTriggerPtAnalysis::AliEMCalTriggerPatchAnalysisComponent+;
#pragma link C++ class EMCalTriggerPtAnalysis::AliEMCalTriggerRecTrackAnalysisComponent+;
#pragma link C++ class AliAnalysisTaskEmcalTriggerTreeWriter+;