#include <TClonesArray.h>
#include <TH1F.h>
#include <TH2F.h>
+#include <TH3F.h>
#include <TList.h>
#include <TLorentzVector.h>
#include "AliVCluster.h"
#include "AliAODCaloCluster.h"
+#include "AliESDCaloCluster.h"
#include "AliVTrack.h"
#include "AliEmcalJet.h"
#include "AliRhoParameter.h"
#include "AliJetContainer.h"
#include "AliParticleContainer.h"
#include "AliClusterContainer.h"
+#include "AliPicoTrack.h"
#include "AliAnalysisTaskEmcalJetSample.h"
fHistJetsPtArea(0),
fHistJetsPtLeadHad(0),
fHistJetsCorrPtArea(0),
+ fHistPtDEtaDPhiTrackClus(0),
+ fHistPtDEtaDPhiClusTrack(0),
+ fHistClustDx(0),
+ fHistClustDz(0),
fJetsCont(0),
fTracksCont(0),
fCaloClustersCont(0)
fHistJetsPtArea(0),
fHistJetsPtLeadHad(0),
fHistJetsCorrPtArea(0),
+ fHistPtDEtaDPhiTrackClus(0),
+ fHistPtDEtaDPhiClusTrack(0),
+ fHistClustDx(0),
+ fHistClustDz(0),
fJetsCont(0),
fTracksCont(0),
fCaloClustersCont(0)
fTracksCont = GetParticleContainer(0);
fCaloClustersCont = GetClusterContainer(0);
}
- fTracksCont->SetClassName("AliVTrack");
- fCaloClustersCont->SetClassName("AliAODCaloCluster");
+ if(fTracksCont) fTracksCont->SetClassName("AliVTrack");
+ if(fCaloClustersCont) fCaloClustersCont->SetClassName("AliVCluster");
TString histname;
}
}
}
+
+ histname = "fHistPtDEtaDPhiTrackClus";
+ fHistPtDEtaDPhiTrackClus = new TH3F(histname.Data(),Form("%s;#it{p}_{T}^{track};#Delta#eta;#Delta#varphi",histname.Data()),100,0.,100.,100,-0.1,0.1,100,-0.1,0.1);
+ fOutput->Add(fHistPtDEtaDPhiTrackClus);
+
+ histname = "fHistPtDEtaDPhiClusTrack";
+ fHistPtDEtaDPhiClusTrack = new TH3F(histname.Data(),Form("%s;#it{p}_{T}^{clus};#Delta#eta;#Delta#varphi",histname.Data()),100,0.,100.,100,-0.1,0.1,100,-0.1,0.1);
+ fOutput->Add(fHistPtDEtaDPhiClusTrack);
+
+ fHistClustDx = new TH1F("fHistClustDx","fHistClustDx;Dx",1000,0.,1.);
+ fOutput->Add(fHistClustDx);
+
+ fHistClustDz = new TH1F("fHistClustDz","fHistClustDz;Dz",1000,0.,1.);
+ fOutput->Add(fHistClustDz);
+
PostData(1, fOutput); // Post data for ALL output slots > 0 here.
}
AliVTrack *track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle(0));
while(track) {
fHistTracksPt[fCentBin]->Fill(track->Pt());
- Int_t emc1 = track->GetEMCALcluster();
- Printf("EMCAL cluster %d",emc1);
track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle());
}
}
-
+
if (fCaloClustersCont) {
- // AliVCluster *cluster = fCaloClustersCont->GetNextAcceptCluster(0);
- AliAODCaloCluster *cluster = static_cast<AliAODCaloCluster*>(fCaloClustersCont->GetNextAcceptCluster(0));
+ AliVCluster *cluster = fCaloClustersCont->GetNextAcceptCluster(0);
while(cluster) {
-
TLorentzVector nPart;
cluster->GetMomentum(nPart, fVertex);
fHistClustersPt[fCentBin]->Fill(nPart.Pt());
-
- AliVTrack *mt = NULL;
- Printf("N matched tracks: %d",cluster->GetNTracksMatched());
- if(cluster->GetNTracksMatched()>1)
- mt = static_cast<AliVTrack*>(cluster->GetTrackMatched(0));
- if(mt) Printf("matched track pt: %f eta: %f phi: %f",mt->Pt(),mt->Eta(),mt->Phi());
- cluster = static_cast<AliAODCaloCluster*>(fCaloClustersCont->GetNextAcceptCluster());
+ Double_t dx = cluster->GetTrackDx();
+ Double_t dz = cluster->GetTrackDz();
+ fHistClustDx->Fill(dx);
+ fHistClustDz->Fill(dz);
+ cluster = fCaloClustersCont->GetNextAcceptCluster();
}
}
Float_t ptLeading = fJetsCont->GetLeadingHadronPt(jet);
fHistJetsPtLeadHad[fCentBin]->Fill(jet->Pt(), ptLeading);
- Float_t corrPt = jet->Pt() - fJetsCont->GetRhoVal() * jet->Area();
- fHistJetsCorrPtArea[fCentBin]->Fill(corrPt, jet->Area());
-
+ if (fHistJetsCorrPtArea[fCentBin]) {
+ Float_t corrPt = jet->Pt() - fJetsCont->GetRhoVal() * jet->Area();
+ fHistJetsCorrPtArea[fCentBin]->Fill(corrPt, jet->Area());
+ }
jet = fJetsCont->GetNextAcceptJet();
}
if(jet) fHistLeadingJetPt[fCentBin]->Fill(jet->Pt());
}
+ CheckClusTrackMatching();
+
return kTRUE;
}
+//________________________________________________________________________
+void AliAnalysisTaskEmcalJetSample::CheckClusTrackMatching()
+{
+
+ if(!fTracksCont || !fCaloClustersCont)
+ return;
+
+ Double_t deta = 999;
+ Double_t dphi = 999;
+
+ //Get closest cluster to track
+ AliVTrack *track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle(0));
+ while(track) {
+ //Get matched cluster
+ Int_t emc1 = track->GetEMCALcluster();
+ if(fCaloClustersCont && emc1>=0) {
+ AliVCluster *clusMatch = fCaloClustersCont->GetCluster(emc1);
+ if(clusMatch) {
+ AliPicoTrack::GetEtaPhiDiff(track, clusMatch, dphi, deta);
+ fHistPtDEtaDPhiTrackClus->Fill(track->Pt(),deta,dphi);
+ }
+ }
+ track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle());
+ }
+
+ //Get closest track to cluster
+ AliVCluster *cluster = fCaloClustersCont->GetNextAcceptCluster(0);
+ while(cluster) {
+ TLorentzVector nPart;
+ cluster->GetMomentum(nPart, fVertex);
+ fHistClustersPt[fCentBin]->Fill(nPart.Pt());
+
+ //Get matched track
+ AliVTrack *mt = NULL;
+ AliAODCaloCluster *acl = dynamic_cast<AliAODCaloCluster*>(cluster);
+ if(acl) {
+ if(acl->GetNTracksMatched()>1)
+ mt = static_cast<AliVTrack*>(acl->GetTrackMatched(0));
+ }
+ else {
+ AliESDCaloCluster *ecl = dynamic_cast<AliESDCaloCluster*>(cluster);
+ Int_t im = ecl->GetTrackMatchedIndex();
+ if(fTracksCont && im>=0) {
+ mt = static_cast<AliVTrack*>(fTracksCont->GetParticle(im));
+ }
+ }
+ if(mt) {
+ AliPicoTrack::GetEtaPhiDiff(mt, cluster, dphi, deta);
+ fHistPtDEtaDPhiClusTrack->Fill(nPart.Pt(),deta,dphi);
+
+ /* //debugging
+ if(mt->IsEMCAL()) {
+ Int_t emc1 = mt->GetEMCALcluster();
+ Printf("current id: %d emc1: %d",fCaloClustersCont->GetCurrentID(),emc1);
+ AliVCluster *clm = fCaloClustersCont->GetCluster(emc1);
+ AliPicoTrack::GetEtaPhiDiff(mt, clm, dphi, deta);
+ Printf("deta: %f dphi: %f",deta,dphi);
+ }
+ */
+ }
+ cluster = fCaloClustersCont->GetNextAcceptCluster();
+ }
+}
+
//________________________________________________________________________
void AliAnalysisTaskEmcalJetSample::ExecOnce() {