//
// Authors: R.Reed, S.Aiola
-
#include <TList.h>
#include <TH1F.h>
#include <TH2F.h>
#include <TClonesArray.h>
#include <TF1.h>
+#include <TMath.h>
#include "AliLog.h"
#include "AliAnalysisManager.h"
fEtaMin(0),
fEtaMax(0),
fAreaCut(0),
+ fNExclLeadJets(0),
fScaleFunction(0),
+ fCreateHisto(kFALSE),
fOutputList(0),
fHistCentrality(0),
fHistJetPt(0),
fHistJetPtvsNtrack(0),
fHistJetAreavsNtrack(0),
fHistNjetvsNtrack(0),
- fRhoScaled(0),
- fNewRhoFunction(0)
+ fRhoScaled(0)
{
// Constructor
}
fEtaMin(0),
fEtaMax(0),
fAreaCut(0),
+ fNExclLeadJets(0),
fScaleFunction(0),
+ fCreateHisto(kFALSE),
fOutputList(0),
fHistCentrality(0),
fHistJetPt(0),
fHistJetPtvsNtrack(0),
fHistJetAreavsNtrack(0),
fHistNjetvsNtrack(0),
- fRhoScaled(0),
- fNewRhoFunction(0)
+ fRhoScaled(0)
{
// Constructor
fRhoScaledName = fRhoName;
fRhoScaledName += "_Scaled";
- fRhoScaled = new TParameter<Double_t>(fRhoScaledName, 0);
+ fRhoScaled = new TParameter<Double_t>(fRhoScaledName, 0);
OpenFile(1);
fOutputList = new TList();
fOutputList->SetOwner();
+ if (!fCreateHisto) {
+ PostData(1, fOutputList);
+ return;
+ }
+
fHistCentrality = new TH1F("Centrality", "Centrality", 101, -1, 100);
fHistRhovsCent = new TH2F("RhovsCent", "RhovsCent", 101, -1, 100, 500, 0, 500);
fHistDeltaRhovsCent = new TH2F("DeltaRhovsCent", "DetlaRhovsCent", 101, -1, 100, 500, -250, 250);
fHistJetPt = new TH1F("JetPt", "Jet Pt", 100, 0, 250);
fHistJetArea = new TH1F("JetArea", "Jet Area", 100, 0.0, 1.0);
-
- fNewRhoFunction = new TF1("rfunc","pol4", -1, 100);
fOutputList->Add(fHistCentrality);
fOutputList->Add(fHistRhovsCent);
fOutputList->Add(fHistJetPtvsNtrack);
fOutputList->Add(fHistJetAreavsNtrack);
fOutputList->Add(fHistNjetvsNtrack);
-
- //fOutputList->Add(fNewRhoFunction);
PostData(1, fOutputList);
return scale;
}
+
//________________________________________________________________________
void AliAnalysisTaskRho::UserExec(Option_t *)
{
AliAnalysisTaskRhoBase::UserExec("");
- // add rho to event if not yet there
+ fRho->SetVal(-1);
+
+ // add rho to event if not yet there
if (!(InputEvent()->FindListObject(fRhoScaledName))) {
- new(fRhoScaled) TParameter<Double_t>(fRhoScaledName, 0);
+ new(fRhoScaled) TParameter<Double_t>(fRhoScaledName, -1);
InputEvent()->AddObject(fRhoScaled);
}
+ else {
+ fRhoScaled->SetVal(-1);
+ }
// optimization in case autobranch loading is off
AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
jets = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fJetsName));
if (!jets) {
- AliError(Form("Pointer to jets %s == 0", fTracksName.Data() ));
+ AliError(Form("Pointer to jets %s == 0", fJetsName.Data() ));
return;
}
-
- fHistCentrality->Fill(fCent);
+
+ if (fCreateHisto)
+ fHistCentrality->Fill(fCent);
const Int_t Ntracks = tracks->GetEntries();
const Int_t Njets = jets->GetEntries();
+
+ Int_t maxJetIds[] = {-1, -1};
+ Int_t maxJetPts[] = {0, 0};
+ if (fNExclLeadJets > 0) {
+ for (Int_t ij = 0; ij < Njets; ij++) {
+
+ AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ij));
+
+ if (!jet) {
+ AliError(Form("Could not receive jet %d", ij));
+ continue;
+ }
+
+ if (jet->Pt() > maxJetPts[0]) {
+ maxJetPts[1] = maxJetPts[0];
+ maxJetIds[1] = maxJetPts[0];
+ maxJetPts[0] = jet->Pt();
+ maxJetIds[0] = ij;
+ }
+
+ if (jet->Pt() > maxJetPts[1]) {
+ maxJetPts[1] = jet->Pt();
+ maxJetIds[1] = ij;
+ }
+ }
+ if (fNExclLeadJets < 2) {
+ maxJetIds[1] = -1;
+ maxJetPts[1] = -1;
+ }
+ }
+
+ static Double_t rhovec[999];
Int_t NjetAcc = 0;
- vector<Double_t> rhovec;
+ // push all jets within selected acceptance into stack
for (Int_t iJets = 0; iJets < Njets; ++iJets) {
- //push all jets within selected acceptance into stack
+
+ // exlcuding lead jets
+ if (iJets == maxJetIds[0] || iJets == maxJetIds[1])
+ continue;
+
AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(iJets));
+
if (!jet)
continue;
+
+ // applying some other cuts
if (jet->Area() < fAreaCut)
continue;
if ((jet->Phi() < fPhiMin) || (jet->Phi() > fPhiMax))
continue;
if (jet->Area() == 0)
continue;
+
+ rhovec[NjetAcc] = jet->Pt() / jet->Area();
+
NjetAcc++;
- rhovec.push_back(jet->Pt() / jet->Area());
- fHistJetPt->Fill(jet->Pt());
- fHistJetArea->Fill(jet->Area());
- fHistJetPtvsCent->Fill(fCent, jet->Pt());
- fHistJetPtvsNtrack->Fill(Ntracks, jet->Pt());
- fHistJetAreavsCent->Fill(fCent, jet->Area());
- fHistJetAreavsNtrack->Fill(Ntracks, jet->Area());
+
+ if (fCreateHisto) {
+ // filling histograms
+ fHistJetPt->Fill(jet->Pt());
+ fHistJetArea->Fill(jet->Area());
+ fHistJetPtvsCent->Fill(fCent, jet->Pt());
+ fHistJetPtvsNtrack->Fill(Ntracks, jet->Pt());
+ fHistJetAreavsCent->Fill(fCent, jet->Area());
+ fHistJetAreavsNtrack->Fill(Ntracks, jet->Area());
+ }
}
- fHistNjetvsCent->Fill(fCent,NjetAcc);
- fHistNjetvsNtrack->Fill(Ntracks,NjetAcc);
+ if (fCreateHisto) {
+ fHistNjetvsCent->Fill(fCent, NjetAcc);
+ fHistNjetvsNtrack->Fill(Ntracks, NjetAcc);
+ }
Double_t scale = GetScaleFactor(fCent);
Double_t rhochem = GetRhoFactor(fCent);
Double_t rho0 = -1;
- if (rhovec.size() > 0){
+ if (NjetAcc > 0){
//find median value
- Sort(rhovec);
- rho0 = GetMedian(rhovec,0);
- fHistRhovsCent->Fill(fCent, rho0);
- fHistDeltaRhovsCent->Fill(fCent, rho0 - rhochem);
- fHistDeltaRhoScalevsCent->Fill(fCent, rho0 * scale - rhochem);
- fHistRhovsNtrack->Fill(Ntracks, rho0);
- fHistDeltaRhovsNtrack->Fill(Ntracks, rho0 - rhochem);
- fHistDeltaRhoScalevsNtrack->Fill(Ntracks, rho0 * scale - rhochem);
- }
-
- fRho->SetVal(rho0);
+ rho0 = TMath::Median(NjetAcc, rhovec);
- Double_t rho_scaled = rho0 * scale;
+ Double_t rhoScaled = rho0 * scale;
- fRhoScaled->SetVal(rho_scaled);
-
- PostData(1, fOutputList);
-}
+ fRho->SetVal(rho0);
+ fRhoScaled->SetVal(rhoScaled);
-//________________________________________________________________________
-void AliAnalysisTaskRho::Sort(vector<Double_t>& v)
-{
- vector<Double_t> temp;
- temp.push_back(v[0]);
- for (UInt_t i = 1; i < v.size(); i++) {
- Bool_t insert = kFALSE;
- for (vector<Double_t>::iterator j = temp.begin(); j < temp.end(); j++){
- if (v[i]> * j) {
- temp.insert(j, v[i]);
- insert = kTRUE;
- j = temp.end();
- }
+ if (fCreateHisto) {
+ // filling other histograms
+ fHistRhovsCent->Fill(fCent, rho0);
+ fHistDeltaRhovsCent->Fill(fCent, rho0 - rhochem);
+ fHistDeltaRhoScalevsCent->Fill(fCent, rhoScaled - rhochem);
+ fHistRhovsNtrack->Fill(Ntracks, rho0);
+ fHistDeltaRhovsNtrack->Fill(Ntracks, rho0 - rhochem);
+ fHistDeltaRhoScalevsNtrack->Fill(Ntracks, rhoScaled - rhochem);
}
- if (!insert)
- temp.insert(temp.end(), v[i]);
}
- v = temp;
- return;
-}
-//________________________________________________________________________
-Double_t AliAnalysisTaskRho::GetMedian(vector<Double_t> v, Int_t c)
-{
- if (v.size() == 0)
- return -1;
- if ((v.size() < 2) && (c == 1))
- return -1;
- if ((v.size() < 3) && ( c== 2))
- return -1;
-
- if (c == 1)
- v.erase(v.begin());
-
- if (c == 2) {
- v.erase(v.begin());
- v.erase(v.begin());
- }
+ if (fCreateHisto)
+ PostData(1, fOutputList);
+}
- Float_t middle = (Float_t)v.size() / 2.0;
- if (middle != ceil(middle)) {
- //odd number
- return v[floor(middle)];
- }
- else{
- //even
- return (v[middle] + v[middle-1]) / 2.0;
- }
-}
//________________________________________________________________________
void AliAnalysisTaskRho::Terminate(Option_t *)
{
- /*
- fHistRhovsCent->Fit(fNewRhoFunction, "NO");
- PostData(1, fOutputList);
- */
+
}