ROOT logo
/**************************************************************************
 * 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(),
  fUsePatches(kFALSE)
{
  /*
   * Default (I/O) constructor, not to be used
   */
}

//______________________________________________________________________________
AliEMCalTriggerEventCounterAnalysisComponent::AliEMCalTriggerEventCounterAnalysisComponent(const char *name):
  AliEMCalTriggerTracksAnalysisComponent(name),
  fUsePatches(kFALSE)
{
  /*
   * 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, fUsePatches)){
    triggerCorrelation[2] = 1.;
    fHistos->FillTH1("hEventHistEMCJHigh", vz);
    // Check whether also the gamma high-threshold trigger fired
    if(fTriggerDecision->IsTriggered(AliEMCalTriggerAnaTriggerDecision::kTAEMCGHigh, fUsePatches)){
      fHistos->FillTH1("hEventHistEMCHighBoth", vz);
    } else {
      fHistos->FillTH1("hEventHistEMCHighJetOnly", vz);
    }
  }
  if(fTriggerDecision->IsTriggered(AliEMCalTriggerAnaTriggerDecision::kTAEMCJLow, fUsePatches)){
    triggerCorrelation[1] = 1.;
    fHistos->FillTH1("hEventHistEMCJLow", vz);
    // Check whether also the gamma high-threshold trigger fired
    if(fTriggerDecision->IsTriggered(AliEMCalTriggerAnaTriggerDecision::kTAEMCGLow, fUsePatches)){
      fHistos->FillTH1("hEventHistEMCLowBoth", vz);
    } else {
      fHistos->FillTH1("hEventHistEMCLowJetOnly", vz);
    }
  }
  if(fTriggerDecision->IsTriggered(AliEMCalTriggerAnaTriggerDecision::kTAEMCGHigh, fUsePatches)){
    triggerCorrelation[3] = 1.;
    fHistos->FillTH1("hEventHistEMCGHigh", vz);
    if(!fTriggerDecision->IsTriggered(AliEMCalTriggerAnaTriggerDecision::kTAEMCJHigh, fUsePatches))
      fHistos->FillTH1("hEventHistEMCHighGammaOnly", vz);
  }
  if(fTriggerDecision->IsTriggered(AliEMCalTriggerAnaTriggerDecision::kTAEMCGLow, fUsePatches)){
    triggerCorrelation[4] = 1.;
    fHistos->FillTH1("hEventHistEMCGLow", vz);
    if(!fTriggerDecision->IsTriggered(AliEMCalTriggerAnaTriggerDecision::kTAEMCJLow, fUsePatches))
      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 */
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:1
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:2
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:3
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:4
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:5
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:6
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:7
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:8
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:9
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:10
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:11
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:12
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:13
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:14
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:15
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:16
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:17
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:18
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:19
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:20
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:21
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:22
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:23
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:24
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:25
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:26
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:27
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:28
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:29
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:30
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:31
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:32
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:33
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:34
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:35
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:36
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:37
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:38
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:39
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:40
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:41
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:42
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:43
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:44
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:45
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:46
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:47
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:48
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:49
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:50
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:51
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:52
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:53
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:54
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:55
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:56
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:57
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:58
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:59
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:60
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:61
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:62
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:63
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:64
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:65
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:66
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:67
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:68
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:69
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:70
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:71
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:72
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:73
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:74
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:75
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:76
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:77
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:78
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:79
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:80
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:81
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:82
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:83
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:84
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:85
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:86
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:87
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:88
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:89
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:90
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:91
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:92
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:93
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:94
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:95
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:96
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:97
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:98
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:99
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:100
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:101
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:102
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:103
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:104
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:105
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:106
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:107
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:108
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:109
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:110
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:111
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:112
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:113
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:114
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:115
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:116
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:117
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:118
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:119
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:120
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:121
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:122
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:123
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:124
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:125
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:126
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:127
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:128
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:129
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:130
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:131
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:132
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:133
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:134
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:135
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:136
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:137
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:138
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:139
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:140
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:141
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:142
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:143
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:144
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:145
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:146
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:147
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:148
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:149
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:150
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:151
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:152
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:153
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:154
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:155
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:156
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:157
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:158
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:159
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:160
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:161
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:162
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:163
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:164
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:165
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:166
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:167
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:168
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:169
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:170
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:171
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:172
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:173
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:174
 AliEMCalTriggerEventCounterAnalysisComponent.cxx:175