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 for tracks in jets of MC particles where the jet has a given
 * minimum pt
 *
 *   Author: Markus Fasel
 */
#include <string>
#include <vector>

#include <TMath.h>
#include <TString.h>

#include "AliEmcalJet.h"
#include "AliJetContainer.h"
#include "AliMCParticle.h"
#include "AliMCEvent.h"
#include "AliParticleContainer.h"
#include "AliVEvent.h"
#include "AliVParticle.h"
#include "AliVVertex.h"

#include "AliEMCalHistoContainer.h"
#include "AliEMCalTriggerAnaTriggerDecision.h"
#include "AliEMCalTriggerBinningComponent.h"
#include "AliEMCalTriggerKineCuts.h"
#include "AliEMCalTriggerEventData.h"
#include "AliEMCalTriggerMCJetAnalysisComponent.h"

ClassImp(EMCalTriggerPtAnalysis::AliEMCalTriggerMCJetAnalysisComponent)

namespace EMCalTriggerPtAnalysis {

//______________________________________________________________________________
AliEMCalTriggerMCJetAnalysisComponent::AliEMCalTriggerMCJetAnalysisComponent():
  AliEMCalTriggerTracksAnalysisComponent(),
  fMinimumJetPt(20.),
  fUsePatches(kFALSE)
{
  /*
   * Dummy (I/O) constructor, not to be used
   */
}

//______________________________________________________________________________
AliEMCalTriggerMCJetAnalysisComponent::AliEMCalTriggerMCJetAnalysisComponent(const char* name) :
  AliEMCalTriggerTracksAnalysisComponent(name),
  fMinimumJetPt(20.),
  fUsePatches(kFALSE)
{
  /*
   * Main constructor, to be used
   */
}

//______________________________________________________________________________
void AliEMCalTriggerMCJetAnalysisComponent::CreateHistos() {
  /*
   * Create histograms for the MC jet analysis
   */
  AliEMCalTriggerTracksAnalysisComponent::CreateHistos();

  TString jetptstring = Form("jetPt%03d", int(fMinimumJetPt));
  // 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)"));

  // Create axis definitions
  const AliEMCalTriggerBinningDimension *ptbinning = fBinning->GetBinning("pt"),
      *etabinning = fBinning->GetBinning("eta"),
      *phibinning = fBinning->GetBinning("phi"),
      *vertexbinning = fBinning->GetBinning("zvertex");

  const TAxis *trackaxes[6] = {
      DefineAxis("trackpt", ptbinning),
      DefineAxis("jettpt", ptbinning),
      DefineAxis("eta", etabinning),
      DefineAxis("phi", phibinning),
      DefineAxis("zvertex", vertexbinning),
      DefineAxis("mbtrigger", 2, -0.5, 1.5)
  };

  // Build histograms
  for(std::map<std::string,std::string>::iterator it = triggerCombinations.begin(); it != triggerCombinations.end(); ++it){
    const std::string name = it->first, &title = it->second;
    fHistos->CreateTHnSparse(Form("hParticleJetHist%s%s", jetptstring.Data(), name.c_str()), Form("Track-based data for tracks in jets in %s events", title.c_str()), 6, trackaxes, "s");
  }

  for(int iaxis = 0; iaxis < 6; iaxis++) delete trackaxes[iaxis];
}

//______________________________________________________________________________
void AliEMCalTriggerMCJetAnalysisComponent::Process(const AliEMCalTriggerEventData* const data) {
  /*
   * Analyse particles in a jet with a given minimum jet pt
   */
  std::vector<std::string> triggernames;
  this->GetMachingTriggerNames(triggernames, fUsePatches);
  TString jetptstring = Form("jetPt%03d", int(fMinimumJetPt));

  AliJetContainer *cont = data->GetJetContainerData();
  AliEmcalJet *reconstructedJet = cont->GetNextAcceptJet(0);
  AliVParticle *foundtrack(NULL);
  while(reconstructedJet){
    if(TMath::Abs(reconstructedJet->Pt()) > fMinimumJetPt){
      // Jet selected, loop over particles
      for(int ipart = 0; ipart < reconstructedJet->GetNumberOfTracks(); ipart++){
        foundtrack = dynamic_cast<AliVParticle *>(reconstructedJet->TrackAt(ipart, cont->GetParticleContainer()->GetArray()));
        if(!fKineCuts->IsSelected(foundtrack)) continue;
        if(!foundtrack->Charge()) continue;
        if(!data->GetMCEvent()->IsPhysicalPrimary(foundtrack->GetLabel())) continue;
        // track selected, fill histogram
        for(std::vector<std::string>::iterator name = triggernames.begin(); name != triggernames.end(); ++name){
          FillHistogram(Form("hParticleJetHist%s%s", jetptstring.Data(), name->c_str()), foundtrack,  reconstructedJet, data->GetRecEvent()->GetPrimaryVertex()->GetZ());
        }
      }
    }
    reconstructedJet = cont->GetNextAcceptJet();
  }
}

//______________________________________________________________________________
void AliEMCalTriggerMCJetAnalysisComponent::FillHistogram(
    const TString& histname, const AliVParticle* track, const AliEmcalJet* jet,
    double vz) {
  /*
   * Fill Histogram with relevant information
   */
  if(!fTriggerDecision) return;
  double data[6] = {TMath::Abs(track->Pt()), TMath::Abs(jet->Pt()), track->Eta(), track->Phi(), vz, fTriggerDecision->IsMinBias() ? 1. : 0.};
  fHistos->FillTHnSparse(histname.Data(), data);
}

} /* namespace EMCalTriggerPtAnalysis */
 AliEMCalTriggerMCJetAnalysisComponent.cxx:1
 AliEMCalTriggerMCJetAnalysisComponent.cxx:2
 AliEMCalTriggerMCJetAnalysisComponent.cxx:3
 AliEMCalTriggerMCJetAnalysisComponent.cxx:4
 AliEMCalTriggerMCJetAnalysisComponent.cxx:5
 AliEMCalTriggerMCJetAnalysisComponent.cxx:6
 AliEMCalTriggerMCJetAnalysisComponent.cxx:7
 AliEMCalTriggerMCJetAnalysisComponent.cxx:8
 AliEMCalTriggerMCJetAnalysisComponent.cxx:9
 AliEMCalTriggerMCJetAnalysisComponent.cxx:10
 AliEMCalTriggerMCJetAnalysisComponent.cxx:11
 AliEMCalTriggerMCJetAnalysisComponent.cxx:12
 AliEMCalTriggerMCJetAnalysisComponent.cxx:13
 AliEMCalTriggerMCJetAnalysisComponent.cxx:14
 AliEMCalTriggerMCJetAnalysisComponent.cxx:15
 AliEMCalTriggerMCJetAnalysisComponent.cxx:16
 AliEMCalTriggerMCJetAnalysisComponent.cxx:17
 AliEMCalTriggerMCJetAnalysisComponent.cxx:18
 AliEMCalTriggerMCJetAnalysisComponent.cxx:19
 AliEMCalTriggerMCJetAnalysisComponent.cxx:20
 AliEMCalTriggerMCJetAnalysisComponent.cxx:21
 AliEMCalTriggerMCJetAnalysisComponent.cxx:22
 AliEMCalTriggerMCJetAnalysisComponent.cxx:23
 AliEMCalTriggerMCJetAnalysisComponent.cxx:24
 AliEMCalTriggerMCJetAnalysisComponent.cxx:25
 AliEMCalTriggerMCJetAnalysisComponent.cxx:26
 AliEMCalTriggerMCJetAnalysisComponent.cxx:27
 AliEMCalTriggerMCJetAnalysisComponent.cxx:28
 AliEMCalTriggerMCJetAnalysisComponent.cxx:29
 AliEMCalTriggerMCJetAnalysisComponent.cxx:30
 AliEMCalTriggerMCJetAnalysisComponent.cxx:31
 AliEMCalTriggerMCJetAnalysisComponent.cxx:32
 AliEMCalTriggerMCJetAnalysisComponent.cxx:33
 AliEMCalTriggerMCJetAnalysisComponent.cxx:34
 AliEMCalTriggerMCJetAnalysisComponent.cxx:35
 AliEMCalTriggerMCJetAnalysisComponent.cxx:36
 AliEMCalTriggerMCJetAnalysisComponent.cxx:37
 AliEMCalTriggerMCJetAnalysisComponent.cxx:38
 AliEMCalTriggerMCJetAnalysisComponent.cxx:39
 AliEMCalTriggerMCJetAnalysisComponent.cxx:40
 AliEMCalTriggerMCJetAnalysisComponent.cxx:41
 AliEMCalTriggerMCJetAnalysisComponent.cxx:42
 AliEMCalTriggerMCJetAnalysisComponent.cxx:43
 AliEMCalTriggerMCJetAnalysisComponent.cxx:44
 AliEMCalTriggerMCJetAnalysisComponent.cxx:45
 AliEMCalTriggerMCJetAnalysisComponent.cxx:46
 AliEMCalTriggerMCJetAnalysisComponent.cxx:47
 AliEMCalTriggerMCJetAnalysisComponent.cxx:48
 AliEMCalTriggerMCJetAnalysisComponent.cxx:49
 AliEMCalTriggerMCJetAnalysisComponent.cxx:50
 AliEMCalTriggerMCJetAnalysisComponent.cxx:51
 AliEMCalTriggerMCJetAnalysisComponent.cxx:52
 AliEMCalTriggerMCJetAnalysisComponent.cxx:53
 AliEMCalTriggerMCJetAnalysisComponent.cxx:54
 AliEMCalTriggerMCJetAnalysisComponent.cxx:55
 AliEMCalTriggerMCJetAnalysisComponent.cxx:56
 AliEMCalTriggerMCJetAnalysisComponent.cxx:57
 AliEMCalTriggerMCJetAnalysisComponent.cxx:58
 AliEMCalTriggerMCJetAnalysisComponent.cxx:59
 AliEMCalTriggerMCJetAnalysisComponent.cxx:60
 AliEMCalTriggerMCJetAnalysisComponent.cxx:61
 AliEMCalTriggerMCJetAnalysisComponent.cxx:62
 AliEMCalTriggerMCJetAnalysisComponent.cxx:63
 AliEMCalTriggerMCJetAnalysisComponent.cxx:64
 AliEMCalTriggerMCJetAnalysisComponent.cxx:65
 AliEMCalTriggerMCJetAnalysisComponent.cxx:66
 AliEMCalTriggerMCJetAnalysisComponent.cxx:67
 AliEMCalTriggerMCJetAnalysisComponent.cxx:68
 AliEMCalTriggerMCJetAnalysisComponent.cxx:69
 AliEMCalTriggerMCJetAnalysisComponent.cxx:70
 AliEMCalTriggerMCJetAnalysisComponent.cxx:71
 AliEMCalTriggerMCJetAnalysisComponent.cxx:72
 AliEMCalTriggerMCJetAnalysisComponent.cxx:73
 AliEMCalTriggerMCJetAnalysisComponent.cxx:74
 AliEMCalTriggerMCJetAnalysisComponent.cxx:75
 AliEMCalTriggerMCJetAnalysisComponent.cxx:76
 AliEMCalTriggerMCJetAnalysisComponent.cxx:77
 AliEMCalTriggerMCJetAnalysisComponent.cxx:78
 AliEMCalTriggerMCJetAnalysisComponent.cxx:79
 AliEMCalTriggerMCJetAnalysisComponent.cxx:80
 AliEMCalTriggerMCJetAnalysisComponent.cxx:81
 AliEMCalTriggerMCJetAnalysisComponent.cxx:82
 AliEMCalTriggerMCJetAnalysisComponent.cxx:83
 AliEMCalTriggerMCJetAnalysisComponent.cxx:84
 AliEMCalTriggerMCJetAnalysisComponent.cxx:85
 AliEMCalTriggerMCJetAnalysisComponent.cxx:86
 AliEMCalTriggerMCJetAnalysisComponent.cxx:87
 AliEMCalTriggerMCJetAnalysisComponent.cxx:88
 AliEMCalTriggerMCJetAnalysisComponent.cxx:89
 AliEMCalTriggerMCJetAnalysisComponent.cxx:90
 AliEMCalTriggerMCJetAnalysisComponent.cxx:91
 AliEMCalTriggerMCJetAnalysisComponent.cxx:92
 AliEMCalTriggerMCJetAnalysisComponent.cxx:93
 AliEMCalTriggerMCJetAnalysisComponent.cxx:94
 AliEMCalTriggerMCJetAnalysisComponent.cxx:95
 AliEMCalTriggerMCJetAnalysisComponent.cxx:96
 AliEMCalTriggerMCJetAnalysisComponent.cxx:97
 AliEMCalTriggerMCJetAnalysisComponent.cxx:98
 AliEMCalTriggerMCJetAnalysisComponent.cxx:99
 AliEMCalTriggerMCJetAnalysisComponent.cxx:100
 AliEMCalTriggerMCJetAnalysisComponent.cxx:101
 AliEMCalTriggerMCJetAnalysisComponent.cxx:102
 AliEMCalTriggerMCJetAnalysisComponent.cxx:103
 AliEMCalTriggerMCJetAnalysisComponent.cxx:104
 AliEMCalTriggerMCJetAnalysisComponent.cxx:105
 AliEMCalTriggerMCJetAnalysisComponent.cxx:106
 AliEMCalTriggerMCJetAnalysisComponent.cxx:107
 AliEMCalTriggerMCJetAnalysisComponent.cxx:108
 AliEMCalTriggerMCJetAnalysisComponent.cxx:109
 AliEMCalTriggerMCJetAnalysisComponent.cxx:110
 AliEMCalTriggerMCJetAnalysisComponent.cxx:111
 AliEMCalTriggerMCJetAnalysisComponent.cxx:112
 AliEMCalTriggerMCJetAnalysisComponent.cxx:113
 AliEMCalTriggerMCJetAnalysisComponent.cxx:114
 AliEMCalTriggerMCJetAnalysisComponent.cxx:115
 AliEMCalTriggerMCJetAnalysisComponent.cxx:116
 AliEMCalTriggerMCJetAnalysisComponent.cxx:117
 AliEMCalTriggerMCJetAnalysisComponent.cxx:118
 AliEMCalTriggerMCJetAnalysisComponent.cxx:119
 AliEMCalTriggerMCJetAnalysisComponent.cxx:120
 AliEMCalTriggerMCJetAnalysisComponent.cxx:121
 AliEMCalTriggerMCJetAnalysisComponent.cxx:122
 AliEMCalTriggerMCJetAnalysisComponent.cxx:123
 AliEMCalTriggerMCJetAnalysisComponent.cxx:124
 AliEMCalTriggerMCJetAnalysisComponent.cxx:125
 AliEMCalTriggerMCJetAnalysisComponent.cxx:126
 AliEMCalTriggerMCJetAnalysisComponent.cxx:127
 AliEMCalTriggerMCJetAnalysisComponent.cxx:128
 AliEMCalTriggerMCJetAnalysisComponent.cxx:129
 AliEMCalTriggerMCJetAnalysisComponent.cxx:130
 AliEMCalTriggerMCJetAnalysisComponent.cxx:131
 AliEMCalTriggerMCJetAnalysisComponent.cxx:132
 AliEMCalTriggerMCJetAnalysisComponent.cxx:133
 AliEMCalTriggerMCJetAnalysisComponent.cxx:134
 AliEMCalTriggerMCJetAnalysisComponent.cxx:135
 AliEMCalTriggerMCJetAnalysisComponent.cxx:136
 AliEMCalTriggerMCJetAnalysisComponent.cxx:137
 AliEMCalTriggerMCJetAnalysisComponent.cxx:138
 AliEMCalTriggerMCJetAnalysisComponent.cxx:139
 AliEMCalTriggerMCJetAnalysisComponent.cxx:140
 AliEMCalTriggerMCJetAnalysisComponent.cxx:141
 AliEMCalTriggerMCJetAnalysisComponent.cxx:142
 AliEMCalTriggerMCJetAnalysisComponent.cxx:143
 AliEMCalTriggerMCJetAnalysisComponent.cxx:144
 AliEMCalTriggerMCJetAnalysisComponent.cxx:145
 AliEMCalTriggerMCJetAnalysisComponent.cxx:146
 AliEMCalTriggerMCJetAnalysisComponent.cxx:147
 AliEMCalTriggerMCJetAnalysisComponent.cxx:148
 AliEMCalTriggerMCJetAnalysisComponent.cxx:149
 AliEMCalTriggerMCJetAnalysisComponent.cxx:150
 AliEMCalTriggerMCJetAnalysisComponent.cxx:151
 AliEMCalTriggerMCJetAnalysisComponent.cxx:152
 AliEMCalTriggerMCJetAnalysisComponent.cxx:153
 AliEMCalTriggerMCJetAnalysisComponent.cxx:154
 AliEMCalTriggerMCJetAnalysisComponent.cxx:155
 AliEMCalTriggerMCJetAnalysisComponent.cxx:156
 AliEMCalTriggerMCJetAnalysisComponent.cxx:157
 AliEMCalTriggerMCJetAnalysisComponent.cxx:158
 AliEMCalTriggerMCJetAnalysisComponent.cxx:159
 AliEMCalTriggerMCJetAnalysisComponent.cxx:160
 AliEMCalTriggerMCJetAnalysisComponent.cxx:161