ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, 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.                  *
 **************************************************************************/

/* $Id$ */
/*
 Analysis Task 
 for Dijet Analysis
 based on AOD
*/

#include "AliAnalysisTaskDiJets.h"
#include "AliAODEvent.h"
#include "AliAODJet.h"
#include "AliAODDiJet.h"
#include <TClonesArray.h>
#include <TLorentzVector.h>
#include <TStyle.h>


ClassImp(AliAnalysisTaskDiJets)

////////////////////////////////////////////////////////////////////////

AliAnalysisTaskDiJets::AliAnalysisTaskDiJets():
    AliAnalysisTaskSE(),
    fDiJets(0),
    fDiJetsIn(0),
    fUseAODInput(kFALSE),
    fFillAOD(kFALSE),
    fJetBranch("jets"),
    fAOD(0),
    fHistList(0),
    fH1DeltaPt(0),
    fH1DeltaPhi(0),
    fH1PhiImbal(0),
    fH1Asym(0),
    fH2Pt2vsPt1(0),
    fH2DifvsSum(0)
{
  // Default constructor
}

//----------------------------------------------------------------------
AliAnalysisTaskDiJets::AliAnalysisTaskDiJets(const char* name):
    AliAnalysisTaskSE(name),
    fDiJets(0),
    fDiJetsIn(0),
    fUseAODInput(kFALSE),
    fFillAOD(kFALSE),
    fJetBranch("jets"),
    fAOD(0),
    fHistList(0),
    fH1DeltaPt(0),
    fH1DeltaPhi(0),
    fH1PhiImbal(0),
    fH1Asym(0),
    fH2Pt2vsPt1(0),
    fH2DifvsSum(0)
{
  // Default constructor
    DefineOutput(1, TList::Class());  
}

//----------------------------------------------------------------------
void AliAnalysisTaskDiJets::UserCreateOutputObjects()
{
// Create the output container
//
    if (fDebug) printf("AnalysisTaskDiJets::CreateOutPutData() \n");
    fDiJets = new TClonesArray("AliAODDiJet", 0);
    if (fFillAOD){
      fDiJets->SetName(Form("dijets_%s",fJetBranch.Data()));
      AddAODBranch("TClonesArray", &fDiJets);
	}

    if (!fHistList) fHistList = new TList();
    fHistList->SetOwner();
    Float_t pi=TMath::Pi();
    gStyle->SetPalette(1);

    fH1DeltaPt  = new TH1F("DeltaPt","Difference between the jets' Pt;#Deltap_{T} (GeV/c);Entries",150,0.,150.);
    fH1DeltaPt->SetMarkerSize(0.6);
    fH1DeltaPt->SetMarkerColor(4);
    fH1DeltaPt->SetMarkerStyle(21);
    fH1DeltaPt->SetOption("E");

    fH1DeltaPhi = new TH1F("DeltaPhi","Difference in the azimuthal angle;#Delta#phi;Entries",100,0.,pi);
    fH1DeltaPhi->SetMarkerSize(0.6);
    fH1DeltaPhi->SetMarkerColor(4);
    fH1DeltaPhi->SetMarkerStyle(21);
    fH1DeltaPhi->SetOption("E");

    fH1PhiImbal = new TH1F("PhiImb","Phi imbalance;#phi;Entries",100,-pi,pi);
    fH1PhiImbal->SetMarkerSize(0.6);
    fH1PhiImbal->SetMarkerColor(4);
    fH1PhiImbal->SetMarkerStyle(21);
    fH1PhiImbal->SetOption("E");

    fH1Asym     = new TH1F("Asym","Pt asymmetry;#Deltap_{T}/(p_{T,1}+p_{T,2});Entries",50,0.,1.);
    fH1Asym->SetMarkerSize(0.6);
    fH1Asym->SetMarkerColor(4);
    fH1Asym->SetMarkerStyle(21);
    fH1Asym->SetOption("E");

    fH2Pt2vsPt1 = new TH2F("Pt2vsPt1","Pt2 versus Pt1;p_{T,1} (GeV/c);p_{T,2} (GeV/c)",250,0.,250.,250,0.,250.);
    fH2Pt2vsPt1->SetOption("cont0");

    fH2DifvsSum = new TH2F("DifvsSum","Pt difference vs Pt sum;p_{T,1}+p_{T,2} (GeV/c);#Deltap_{T} (GeV/c)",400,0.,400.,150,0.,150.);
    fH2DifvsSum->SetOption("cont0");

    fHistList->Add(fH1DeltaPt);
    fHistList->Add(fH1DeltaPhi);
    fHistList->Add(fH1PhiImbal);
    fHistList->Add(fH1Asym);
    fHistList->Add(fH2Pt2vsPt1);
    fHistList->Add(fH2DifvsSum);
}

//----------------------------------------------------------------------
void AliAnalysisTaskDiJets::Init()
{
    // Initialization
    if (fDebug) printf("AnalysisTaskDiJets::Init() \n");
}

//----------------------------------------------------------------------
void AliAnalysisTaskDiJets::UserExec(Option_t */*option*/)
{
// Execute analysis for current event
//
    if (fDiJets) fDiJets->Delete();

    if(fUseAODInput){
      fAOD = dynamic_cast<AliAODEvent*> (InputEvent());
      if(!fAOD){
        // We do not have an input AOD, look in the output
        if (fDebug) printf("%s:%d No AOD event in the input\n",(char*)__FILE__,__LINE__);
        return;
      }
    } else {
      fAOD = AODEvent();
      if(!fAOD){
        if (fDebug) printf("%s:%d AODEvent not found in the Output",(char*)__FILE__,__LINE__);
        return;
      }
    }

    TClonesArray* jets = (TClonesArray*) fAOD->FindListObject(fJetBranch.Data());
    // N.B. if we take the aod from the output this is always
    // empty and since it is the same as fDiJets 
    fDiJetsIn = (TClonesArray*) (fAOD->GetList()->FindObject("dijets"));

    if (fDiJetsIn) {
      if (fDebug) printf("Found %d dijets in old list \n", fDiJetsIn->GetEntries());
      AliAODJet* jj1, *jj2;
      AliAODDiJet* testJ;

      if (fDiJetsIn->GetEntries() > 0) {
        testJ = (AliAODDiJet*) (fDiJetsIn->At(0));
        jj1 = testJ->Jet(0);
        jj1->Print("");
        jj2 = testJ->Jet(1);
        jj2->Print("");
      }
    }

    Int_t nj = jets->GetEntriesFast();
    if (fDebug) printf("There are %5d jets in the event \n", nj);

    if (nj < 2){
      PostData(1, fHistList);
      return;
    }
    AliAODJet* jet1 = (AliAODJet*) (jets->At(0));
    TLorentzVector v1 = *(jet1->MomentumVector());
    AliAODJet* jet2 = (AliAODJet*) (jets->At(1));
    TLorentzVector v2 = *(jet2->MomentumVector());
    TLorentzVector v = v1 + v2;
    if (fDiJets) {
	Int_t ndi = fDiJets->GetEntriesFast();
	TClonesArray &lref = *fDiJets;
	new(lref[ndi]) AliAODDiJet(v);
	AliAODDiJet* dijet = (AliAODDiJet*) (fDiJets->At(ndi));
	dijet->SetJetRefs(jet1, jet2);
	fH1DeltaPhi->Fill(dijet->DeltaPhi());
	fH1PhiImbal->Fill(dijet->PhiImbalance());

    }
    
    fH1DeltaPt->Fill(jet1->Pt()-jet2->Pt());
    fH1Asym->Fill((jet1->Pt()-jet2->Pt())/(jet1->Pt()+jet2->Pt()));
    fH2Pt2vsPt1->Fill(jet1->Pt(),jet2->Pt());
    fH2DifvsSum->Fill(jet1->Pt()+jet2->Pt(),jet1->Pt()-jet2->Pt());

    PostData(1, fHistList);
    return;
}

//----------------------------------------------------------------------
void AliAnalysisTaskDiJets::Terminate(Option_t */*option*/)
{
// Terminate analysis
//
    if (fDebug) printf("AnalysisDiJets: Terminate() \n");
}

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