ROOT logo
// $Id$
//
// Calculation of rho from a collection of jets.
// If scale function is given the scaled rho will be exported
// with the name as "fOutRhoName".apppend("_Scaled").
//
// Authors: R.Reed, S.Aiola, M.Connors

#include "AliAnalysisTaskRhoSparse.h"

#include <TClonesArray.h>
#include <TMath.h>

#include "AliAnalysisManager.h"
#include "AliEmcalJet.h"
#include "AliLog.h"
#include "AliRhoParameter.h"
#include "AliJetContainer.h"

ClassImp(AliAnalysisTaskRhoSparse)

//________________________________________________________________________
AliAnalysisTaskRhoSparse::AliAnalysisTaskRhoSparse() : 
  AliAnalysisTaskRhoBase("AliAnalysisTaskRhoSparse"),
  fNExclLeadJets(0),
  fRhoCMS(0),
  fHistOccCorrvsCent(0)
{
  // Constructor.
}

//________________________________________________________________________
AliAnalysisTaskRhoSparse::AliAnalysisTaskRhoSparse(const char *name, Bool_t histo) :
  AliAnalysisTaskRhoBase(name, histo),
  fNExclLeadJets(0),
  fRhoCMS(0),
  fHistOccCorrvsCent(0)
{
  // Constructor.
}

//________________________________________________________________________
void AliAnalysisTaskRhoSparse::UserCreateOutputObjects()
{
  if (!fCreateHisto) return;

  AliAnalysisTaskRhoBase::UserCreateOutputObjects();
  
  fHistOccCorrvsCent = new TH2F("OccCorrvsCent", "OccCorrvsCent", 101, -1, 100, 2000, 0 , 2);
  fOutput->Add(fHistOccCorrvsCent);
}

//________________________________________________________________________
Bool_t AliAnalysisTaskRhoSparse::IsJetOverlapping(AliEmcalJet* jet1, AliEmcalJet* jet2)
{
  for (Int_t i = 0; i < jet1->GetNumberOfTracks(); ++i)
  {
    Int_t jet1Track = jet1->TrackAt(i);
    for (Int_t j = 0; j < jet2->GetNumberOfTracks(); ++j)
    {
      Int_t jet2Track = jet2->TrackAt(j);
      if (jet1Track == jet2Track)
        return kTRUE;
    }
  }
  return kFALSE;
}

//________________________________________________________________________
Bool_t AliAnalysisTaskRhoSparse::IsJetSignal(AliEmcalJet* jet)
{
  if(jet->Pt()>5){
      return kTRUE;
  }else{
    return kFALSE;
  }
}


//________________________________________________________________________
Bool_t AliAnalysisTaskRhoSparse::Run() 
{
  // Run the analysis.

  fOutRho->SetVal(0);
  if (fOutRhoScaled)
    fOutRhoScaled->SetVal(0);

  if (!fJets)
    return kFALSE;

  const Int_t Njets = fJets->GetEntries();

  AliJetContainer *sigjets = static_cast<AliJetContainer*>(fJetCollArray.At(1));

  Int_t NjetsSig = 0;
  if (sigjets) NjetsSig = sigjets->GetNJets();

  Int_t maxJetIds[]   = {-1, -1};
  Float_t maxJetPts[] = { 0,  0};

  if (fNExclLeadJets > 0) {
    for (Int_t ij = 0; ij < Njets; ++ij) {
      AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(ij));
      if (!jet) {
	AliError(Form("%s: Could not receive jet %d", GetName(), ij));
	continue;
      } 

      if (!AcceptJet(jet))
        continue;

      if (jet->Pt() > maxJetPts[0]) {
	maxJetPts[1] = maxJetPts[0];
	maxJetIds[1] = maxJetIds[0];
	maxJetPts[0] = jet->Pt();
	maxJetIds[0] = ij;
      } else if (jet->Pt() > maxJetPts[1]) {
	maxJetPts[1] = jet->Pt();
	maxJetIds[1] = ij;
      }
    }
    if (fNExclLeadJets < 2) {
      maxJetIds[1] = -1;
      maxJetPts[1] = 0;
    }
  }

  static Double_t rhovec[999];
  Int_t NjetAcc = 0;
  Double_t TotaljetArea=0;
  Double_t TotaljetAreaPhys=0;

  // push all jets within selected acceptance into stack
  for (Int_t iJets = 0; iJets < Njets; ++iJets) {

    // exlcuding lead jets
    if (iJets == maxJetIds[0] || iJets == maxJetIds[1])
      continue;

    AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(iJets));
    if (!jet) {
      AliError(Form("%s: Could not receive jet %d", GetName(), iJets));
      continue;
    } 

    TotaljetArea+=jet->Area();
    
    if(jet->Pt()>0.1){
      TotaljetAreaPhys+=jet->Area();
    }

    if (!AcceptJet(jet))
      continue;

   // Search for overlap with signal jets
    Bool_t isOverlapping = kFALSE;
    if (sigjets) {
      for(Int_t j=0;j<NjetsSig;j++)
	{
	  AliEmcalJet* signalJet = sigjets->GetAcceptJet(j);
	  if(!signalJet)
	    continue;
	  if(!IsJetSignal(signalJet))     
	    continue;
	  
	  if(IsJetOverlapping(signalJet, jet))
	    {
	      isOverlapping = kTRUE;
	      break;
	    }
	}
    }

    if(isOverlapping) 
      continue;

    if(jet->Pt()>0.1){
      rhovec[NjetAcc] = jet->Pt() / jet->Area();
      ++NjetAcc;
    }
  }

  Double_t OccCorr=0.0;
  if(TotaljetArea>0) OccCorr=TotaljetAreaPhys/TotaljetArea;
 
  if (fCreateHisto)
    fHistOccCorrvsCent->Fill(fCent, OccCorr);

  if (NjetAcc > 0) {
    //find median value
    Double_t rho = TMath::Median(NjetAcc, rhovec);

    if(fRhoCMS){
      rho = rho * OccCorr;
    }

    fOutRho->SetVal(rho);

    if (fOutRhoScaled) {
      Double_t rhoScaled = rho * GetScaleFactor(fCent);
      fOutRhoScaled->SetVal(rhoScaled);
    }
  }

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