ROOT logo
// $Id$
//
// Jet embedding task.
//
// Author: S.Aiola, C.Loizides

#include "AliJetEmbeddingFromGenTask.h"

#include <TClonesArray.h>
#include <TFolder.h>
#include <TLorentzVector.h>
#include <TParticle.h>
#include <TParticlePDG.h>
#include <TRandom3.h>
#include <TProfile.h>
#include "AliAnalysisManager.h"
#include "AliEMCALDigit.h"
#include "AliEMCALGeometry.h"
#include "AliEMCALRecPoint.h"
#include "AliGenerator.h"
#include "AliHeader.h"
#include "AliLog.h"
#include "AliPicoTrack.h"
#include "AliRun.h"
#include "AliRunLoader.h"
#include "AliStack.h"
#include "AliVCluster.h"
#include "AliVEvent.h"
#include "AliGenPythiaEventHeader.h"
#include "AliPythiaInfo.h"
#include "AliPythiaRndm.h"
ClassImp(AliJetEmbeddingFromGenTask)

//________________________________________________________________________
AliJetEmbeddingFromGenTask::AliJetEmbeddingFromGenTask() : 
  AliJetModelBaseTask("AliJetEmbeddingFromGenTask"),
  fGen(0),
  fMassless(kFALSE),
  fChargedOnly(kFALSE),
  fHistPt(0),
  fHistEtaPhi(0),
  fHistTrials(0),
  fHistXsection(0),
  fHistPtHard(0)
{
  // Default constructor.
  SetSuffix("EmbeddedFromGen");
}

//________________________________________________________________________
AliJetEmbeddingFromGenTask::AliJetEmbeddingFromGenTask(const char *name, Bool_t drawqa) :
  AliJetModelBaseTask(name,drawqa),
  fGen(0),
  fMassless(kFALSE),
  fChargedOnly(kFALSE),
  fHistPt(0),
  fHistEtaPhi(0),
  fHistTrials(0),
  fHistXsection(0),
  fHistPtHard(0)
{
  // Standard constructor.
  SetSuffix("EmbeddedFromGen");
}

//________________________________________________________________________
AliJetEmbeddingFromGenTask::~AliJetEmbeddingFromGenTask()
{
  // Destructor
}

//________________________________________________________________________
void AliJetEmbeddingFromGenTask::UserCreateOutputObjects()
{
  // Create user output.

  if (!fQAhistos)
    return;

  AliJetModelBaseTask::UserCreateOutputObjects();

  fHistPt = new TH1F("fHistpt","fHistPt;#it{p}_{T};N",100,0.,100.);
  fOutput->Add(fHistPt);

  fHistEtaPhi = new TH2F("fHistEtapHI","fHistEtaPhi;#eta;#varphi",100,-3.,3.,100.,0.,TMath::TwoPi());
  fOutput->Add(fHistEtaPhi);

  fHistTrials = new TH1F("fHistTrials", "fHistTrials", 1, 0, 1);
  fHistTrials->GetYaxis()->SetTitle("trials");
  fOutput->Add(fHistTrials);

  fHistXsection = new TProfile("fHistXsection", "fHistXsection", 1, 0, 1);
  fHistXsection->GetYaxis()->SetTitle("xsection");
  fOutput->Add(fHistXsection);

  fHistPtHard = new TH1F("fHistPtHard", "fHistPtHard", 500, 0., 500.);
  fHistPtHard->GetXaxis()->SetTitle("p_{T,hard} (GeV/c)");
  fHistPtHard->GetYaxis()->SetTitle("counts");
  fOutput->Add(fHistPtHard);

  PostData(1, fOutput);
}

//________________________________________________________________________
Bool_t AliJetEmbeddingFromGenTask::ExecOnce() 
{
  // Exec only once.

  if (!gAlice) {
    new AliRun("gAlice","The ALICE Off-line Simulation Framework");
    delete gRandom;
    gRandom = new TRandom3(0);
  }

  TFolder *folder = new TFolder(GetName(),GetName());
  AliRunLoader *rl = new AliRunLoader(folder);
  gAlice->SetRunLoader(rl);
  rl->MakeHeader();
  rl->MakeStack();
  AliStack *stack = rl->Stack();
  fGen->SetStack(stack);
  fGen->Init();

  if (!(InputEvent()->FindListObject(fTracksName))) {
    fOutTracks = new TClonesArray("AliPicoTrack", 1000);
    fOutTracks->SetName(fTracksName);
    InputEvent()->AddObject(fOutTracks);
    fNTracks = 0;
  }

  if(!fPythiaInfoName.IsNull()) {
    if (!(InputEvent()->FindListObject(fPythiaInfoName))) {
      fPythiaInfo = new AliPythiaInfo("PythiaInfo");
      fPythiaInfo->SetName(fPythiaInfoName);
      InputEvent()->AddObject(fPythiaInfo);
    }
  }
  return kTRUE;
}

//________________________________________________________________________
void AliJetEmbeddingFromGenTask::Run() 
{
  // Embed particles.

  if (fCopyArray) 
    CopyTracks();
  AliPythiaRndm::SetPythiaRandom(new TRandom3());
  AliPythiaRndm::GetPythiaRandom()->SetSeed(clock()+gSystem->GetPid());
  AliStack *stack = fGen->GetStack();
  stack->Reset();
  fGen->Generate();
  const Int_t nprim = stack->GetNprimary();
  // reject if partons are missing from stack for some reason
  if(nprim < 8) return;
  if(fPythiaInfo) {
    TParticle *part6 = stack->Particle(6);
    TParticle *part7 = stack->Particle(7);
    
    fPythiaInfo->SetPartonFlag6(TMath::Abs(part6->GetPdgCode()));
    fPythiaInfo->SetPartonPt6(part6->Pt());
    fPythiaInfo->SetPartonEta6(part6->Eta());
    fPythiaInfo->SetPartonPhi6(part6->Phi());
    
    fPythiaInfo->SetPartonFlag7(TMath::Abs(part7->GetPdgCode()));
    fPythiaInfo->SetPartonPt7(part7->Pt());
    fPythiaInfo->SetPartonEta7(part7->Eta());
    fPythiaInfo->SetPartonPhi7(part7->Phi());
  }

  for (Int_t i=0;i<nprim;++i) {
    if (!stack->IsPhysicalPrimary(i))
      continue;
    TParticle *part = stack->Particle(i);
    TParticlePDG *pdg = part->GetPDG(1);
    if (!pdg) 
      continue;
    Int_t c = (Int_t)(TMath::Abs(pdg->Charge()));
    if (fChargedOnly && c==0)  continue;
    Double_t pt = part->Pt();
    Double_t eta = part->Eta();
    Double_t phi = part->Phi();
    if (eta<fEtaMin)
      continue;
    if (eta>fEtaMax)
      continue;
    if (phi<fPhiMin)
      continue;
    if (phi>fPhiMax)
      continue;
    if (pt<fPtMin)
      continue;
    if (pt>fPtMax)
      continue;
    Double_t mass = part->GetMass();
    if(fMassless) mass = 0.;
    fHistPt->Fill(pt);
    fHistEtaPhi->Fill(eta,phi);
    AddTrack(pt, eta, phi,0,0,0,0,0,0,c,mass);
  }

  FillPythiaHistograms();
}

//________________________________________________________________________
void AliJetEmbeddingFromGenTask::FillPythiaHistograms() {
  //Get PYTHIA info: pt-hard, x-section, trials

  if (!fQAhistos)
    return;

  AliRunLoader *rl = AliRunLoader::Instance();
  AliGenPythiaEventHeader *genPH = dynamic_cast<AliGenPythiaEventHeader*>(rl->GetHeader()->GenEventHeader());
  if(genPH) {
    Float_t xsec = genPH->GetXsection();
    Int_t trials = genPH->Trials();
    Float_t pthard = genPH->GetPtHard();
    Float_t ptWeight=genPH->EventWeight(); 
    if(fPythiaInfo) fPythiaInfo->SetPythiaEventWeight(ptWeight);
    fHistXsection->Fill(0.5,xsec);
    fHistTrials->Fill(0.5,trials);
    fHistPtHard->Fill(pthard);
  }
}
 AliJetEmbeddingFromGenTask.cxx:1
 AliJetEmbeddingFromGenTask.cxx:2
 AliJetEmbeddingFromGenTask.cxx:3
 AliJetEmbeddingFromGenTask.cxx:4
 AliJetEmbeddingFromGenTask.cxx:5
 AliJetEmbeddingFromGenTask.cxx:6
 AliJetEmbeddingFromGenTask.cxx:7
 AliJetEmbeddingFromGenTask.cxx:8
 AliJetEmbeddingFromGenTask.cxx:9
 AliJetEmbeddingFromGenTask.cxx:10
 AliJetEmbeddingFromGenTask.cxx:11
 AliJetEmbeddingFromGenTask.cxx:12
 AliJetEmbeddingFromGenTask.cxx:13
 AliJetEmbeddingFromGenTask.cxx:14
 AliJetEmbeddingFromGenTask.cxx:15
 AliJetEmbeddingFromGenTask.cxx:16
 AliJetEmbeddingFromGenTask.cxx:17
 AliJetEmbeddingFromGenTask.cxx:18
 AliJetEmbeddingFromGenTask.cxx:19
 AliJetEmbeddingFromGenTask.cxx:20
 AliJetEmbeddingFromGenTask.cxx:21
 AliJetEmbeddingFromGenTask.cxx:22
 AliJetEmbeddingFromGenTask.cxx:23
 AliJetEmbeddingFromGenTask.cxx:24
 AliJetEmbeddingFromGenTask.cxx:25
 AliJetEmbeddingFromGenTask.cxx:26
 AliJetEmbeddingFromGenTask.cxx:27
 AliJetEmbeddingFromGenTask.cxx:28
 AliJetEmbeddingFromGenTask.cxx:29
 AliJetEmbeddingFromGenTask.cxx:30
 AliJetEmbeddingFromGenTask.cxx:31
 AliJetEmbeddingFromGenTask.cxx:32
 AliJetEmbeddingFromGenTask.cxx:33
 AliJetEmbeddingFromGenTask.cxx:34
 AliJetEmbeddingFromGenTask.cxx:35
 AliJetEmbeddingFromGenTask.cxx:36
 AliJetEmbeddingFromGenTask.cxx:37
 AliJetEmbeddingFromGenTask.cxx:38
 AliJetEmbeddingFromGenTask.cxx:39
 AliJetEmbeddingFromGenTask.cxx:40
 AliJetEmbeddingFromGenTask.cxx:41
 AliJetEmbeddingFromGenTask.cxx:42
 AliJetEmbeddingFromGenTask.cxx:43
 AliJetEmbeddingFromGenTask.cxx:44
 AliJetEmbeddingFromGenTask.cxx:45
 AliJetEmbeddingFromGenTask.cxx:46
 AliJetEmbeddingFromGenTask.cxx:47
 AliJetEmbeddingFromGenTask.cxx:48
 AliJetEmbeddingFromGenTask.cxx:49
 AliJetEmbeddingFromGenTask.cxx:50
 AliJetEmbeddingFromGenTask.cxx:51
 AliJetEmbeddingFromGenTask.cxx:52
 AliJetEmbeddingFromGenTask.cxx:53
 AliJetEmbeddingFromGenTask.cxx:54
 AliJetEmbeddingFromGenTask.cxx:55
 AliJetEmbeddingFromGenTask.cxx:56
 AliJetEmbeddingFromGenTask.cxx:57
 AliJetEmbeddingFromGenTask.cxx:58
 AliJetEmbeddingFromGenTask.cxx:59
 AliJetEmbeddingFromGenTask.cxx:60
 AliJetEmbeddingFromGenTask.cxx:61
 AliJetEmbeddingFromGenTask.cxx:62
 AliJetEmbeddingFromGenTask.cxx:63
 AliJetEmbeddingFromGenTask.cxx:64
 AliJetEmbeddingFromGenTask.cxx:65
 AliJetEmbeddingFromGenTask.cxx:66
 AliJetEmbeddingFromGenTask.cxx:67
 AliJetEmbeddingFromGenTask.cxx:68
 AliJetEmbeddingFromGenTask.cxx:69
 AliJetEmbeddingFromGenTask.cxx:70
 AliJetEmbeddingFromGenTask.cxx:71
 AliJetEmbeddingFromGenTask.cxx:72
 AliJetEmbeddingFromGenTask.cxx:73
 AliJetEmbeddingFromGenTask.cxx:74
 AliJetEmbeddingFromGenTask.cxx:75
 AliJetEmbeddingFromGenTask.cxx:76
 AliJetEmbeddingFromGenTask.cxx:77
 AliJetEmbeddingFromGenTask.cxx:78
 AliJetEmbeddingFromGenTask.cxx:79
 AliJetEmbeddingFromGenTask.cxx:80
 AliJetEmbeddingFromGenTask.cxx:81
 AliJetEmbeddingFromGenTask.cxx:82
 AliJetEmbeddingFromGenTask.cxx:83
 AliJetEmbeddingFromGenTask.cxx:84
 AliJetEmbeddingFromGenTask.cxx:85
 AliJetEmbeddingFromGenTask.cxx:86
 AliJetEmbeddingFromGenTask.cxx:87
 AliJetEmbeddingFromGenTask.cxx:88
 AliJetEmbeddingFromGenTask.cxx:89
 AliJetEmbeddingFromGenTask.cxx:90
 AliJetEmbeddingFromGenTask.cxx:91
 AliJetEmbeddingFromGenTask.cxx:92
 AliJetEmbeddingFromGenTask.cxx:93
 AliJetEmbeddingFromGenTask.cxx:94
 AliJetEmbeddingFromGenTask.cxx:95
 AliJetEmbeddingFromGenTask.cxx:96
 AliJetEmbeddingFromGenTask.cxx:97
 AliJetEmbeddingFromGenTask.cxx:98
 AliJetEmbeddingFromGenTask.cxx:99
 AliJetEmbeddingFromGenTask.cxx:100
 AliJetEmbeddingFromGenTask.cxx:101
 AliJetEmbeddingFromGenTask.cxx:102
 AliJetEmbeddingFromGenTask.cxx:103
 AliJetEmbeddingFromGenTask.cxx:104
 AliJetEmbeddingFromGenTask.cxx:105
 AliJetEmbeddingFromGenTask.cxx:106
 AliJetEmbeddingFromGenTask.cxx:107
 AliJetEmbeddingFromGenTask.cxx:108
 AliJetEmbeddingFromGenTask.cxx:109
 AliJetEmbeddingFromGenTask.cxx:110
 AliJetEmbeddingFromGenTask.cxx:111
 AliJetEmbeddingFromGenTask.cxx:112
 AliJetEmbeddingFromGenTask.cxx:113
 AliJetEmbeddingFromGenTask.cxx:114
 AliJetEmbeddingFromGenTask.cxx:115
 AliJetEmbeddingFromGenTask.cxx:116
 AliJetEmbeddingFromGenTask.cxx:117
 AliJetEmbeddingFromGenTask.cxx:118
 AliJetEmbeddingFromGenTask.cxx:119
 AliJetEmbeddingFromGenTask.cxx:120
 AliJetEmbeddingFromGenTask.cxx:121
 AliJetEmbeddingFromGenTask.cxx:122
 AliJetEmbeddingFromGenTask.cxx:123
 AliJetEmbeddingFromGenTask.cxx:124
 AliJetEmbeddingFromGenTask.cxx:125
 AliJetEmbeddingFromGenTask.cxx:126
 AliJetEmbeddingFromGenTask.cxx:127
 AliJetEmbeddingFromGenTask.cxx:128
 AliJetEmbeddingFromGenTask.cxx:129
 AliJetEmbeddingFromGenTask.cxx:130
 AliJetEmbeddingFromGenTask.cxx:131
 AliJetEmbeddingFromGenTask.cxx:132
 AliJetEmbeddingFromGenTask.cxx:133
 AliJetEmbeddingFromGenTask.cxx:134
 AliJetEmbeddingFromGenTask.cxx:135
 AliJetEmbeddingFromGenTask.cxx:136
 AliJetEmbeddingFromGenTask.cxx:137
 AliJetEmbeddingFromGenTask.cxx:138
 AliJetEmbeddingFromGenTask.cxx:139
 AliJetEmbeddingFromGenTask.cxx:140
 AliJetEmbeddingFromGenTask.cxx:141
 AliJetEmbeddingFromGenTask.cxx:142
 AliJetEmbeddingFromGenTask.cxx:143
 AliJetEmbeddingFromGenTask.cxx:144
 AliJetEmbeddingFromGenTask.cxx:145
 AliJetEmbeddingFromGenTask.cxx:146
 AliJetEmbeddingFromGenTask.cxx:147
 AliJetEmbeddingFromGenTask.cxx:148
 AliJetEmbeddingFromGenTask.cxx:149
 AliJetEmbeddingFromGenTask.cxx:150
 AliJetEmbeddingFromGenTask.cxx:151
 AliJetEmbeddingFromGenTask.cxx:152
 AliJetEmbeddingFromGenTask.cxx:153
 AliJetEmbeddingFromGenTask.cxx:154
 AliJetEmbeddingFromGenTask.cxx:155
 AliJetEmbeddingFromGenTask.cxx:156
 AliJetEmbeddingFromGenTask.cxx:157
 AliJetEmbeddingFromGenTask.cxx:158
 AliJetEmbeddingFromGenTask.cxx:159
 AliJetEmbeddingFromGenTask.cxx:160
 AliJetEmbeddingFromGenTask.cxx:161
 AliJetEmbeddingFromGenTask.cxx:162
 AliJetEmbeddingFromGenTask.cxx:163
 AliJetEmbeddingFromGenTask.cxx:164
 AliJetEmbeddingFromGenTask.cxx:165
 AliJetEmbeddingFromGenTask.cxx:166
 AliJetEmbeddingFromGenTask.cxx:167
 AliJetEmbeddingFromGenTask.cxx:168
 AliJetEmbeddingFromGenTask.cxx:169
 AliJetEmbeddingFromGenTask.cxx:170
 AliJetEmbeddingFromGenTask.cxx:171
 AliJetEmbeddingFromGenTask.cxx:172
 AliJetEmbeddingFromGenTask.cxx:173
 AliJetEmbeddingFromGenTask.cxx:174
 AliJetEmbeddingFromGenTask.cxx:175
 AliJetEmbeddingFromGenTask.cxx:176
 AliJetEmbeddingFromGenTask.cxx:177
 AliJetEmbeddingFromGenTask.cxx:178
 AliJetEmbeddingFromGenTask.cxx:179
 AliJetEmbeddingFromGenTask.cxx:180
 AliJetEmbeddingFromGenTask.cxx:181
 AliJetEmbeddingFromGenTask.cxx:182
 AliJetEmbeddingFromGenTask.cxx:183
 AliJetEmbeddingFromGenTask.cxx:184
 AliJetEmbeddingFromGenTask.cxx:185
 AliJetEmbeddingFromGenTask.cxx:186
 AliJetEmbeddingFromGenTask.cxx:187
 AliJetEmbeddingFromGenTask.cxx:188
 AliJetEmbeddingFromGenTask.cxx:189
 AliJetEmbeddingFromGenTask.cxx:190
 AliJetEmbeddingFromGenTask.cxx:191
 AliJetEmbeddingFromGenTask.cxx:192
 AliJetEmbeddingFromGenTask.cxx:193
 AliJetEmbeddingFromGenTask.cxx:194
 AliJetEmbeddingFromGenTask.cxx:195
 AliJetEmbeddingFromGenTask.cxx:196
 AliJetEmbeddingFromGenTask.cxx:197
 AliJetEmbeddingFromGenTask.cxx:198
 AliJetEmbeddingFromGenTask.cxx:199
 AliJetEmbeddingFromGenTask.cxx:200
 AliJetEmbeddingFromGenTask.cxx:201
 AliJetEmbeddingFromGenTask.cxx:202
 AliJetEmbeddingFromGenTask.cxx:203
 AliJetEmbeddingFromGenTask.cxx:204
 AliJetEmbeddingFromGenTask.cxx:205
 AliJetEmbeddingFromGenTask.cxx:206
 AliJetEmbeddingFromGenTask.cxx:207
 AliJetEmbeddingFromGenTask.cxx:208
 AliJetEmbeddingFromGenTask.cxx:209
 AliJetEmbeddingFromGenTask.cxx:210
 AliJetEmbeddingFromGenTask.cxx:211
 AliJetEmbeddingFromGenTask.cxx:212
 AliJetEmbeddingFromGenTask.cxx:213
 AliJetEmbeddingFromGenTask.cxx:214
 AliJetEmbeddingFromGenTask.cxx:215
 AliJetEmbeddingFromGenTask.cxx:216
 AliJetEmbeddingFromGenTask.cxx:217
 AliJetEmbeddingFromGenTask.cxx:218
 AliJetEmbeddingFromGenTask.cxx:219
 AliJetEmbeddingFromGenTask.cxx:220
 AliJetEmbeddingFromGenTask.cxx:221
 AliJetEmbeddingFromGenTask.cxx:222
 AliJetEmbeddingFromGenTask.cxx:223
 AliJetEmbeddingFromGenTask.cxx:224