// $Id$ #include "AliEmcalClusTrackMatcherTask.h" #include #include #include "AliESDCaloCluster.h" #include "AliESDtrack.h" #include "AliPicoTrack.h" ClassImp(AliEmcalClusTrackMatcherTask) //________________________________________________________________________ AliEmcalClusTrackMatcherTask::AliEmcalClusTrackMatcherTask(const char *name) : AliAnalysisTaskSE("AliEmcalClusTrackMatcherTask"), fTracksName("Tracks"), fCaloName("CaloClusters"), fDoClusTrack(1), fDoTrackClus(0) { // Standard constructor. if (!name) return; SetName(name); fBranchNames="ESD:AliESDRun.,AliESDHeader.,PrimaryVertex.,CaloClusters,Tracks"; } //________________________________________________________________________ AliEmcalClusTrackMatcherTask::~AliEmcalClusTrackMatcherTask() { // Destructor } //________________________________________________________________________ void AliEmcalClusTrackMatcherTask::UserCreateOutputObjects() { // Create user objects. } //________________________________________________________________________ void AliEmcalClusTrackMatcherTask::UserExec(Option_t *) { // Main loop, called for each event. TList *l = InputEvent()->GetList(); if (!l) return; TClonesArray *tracks = dynamic_cast(l->FindObject(fTracksName)); if (!tracks) { AliError(Form("Pointer to tracks %s == 0", fTracksName.Data() )); return; } TClonesArray *clus = dynamic_cast(l->FindObject(fCaloName)); if (!clus) { AliError(Form("Pointer to clus %s == 0", fCaloName.Data() )); return; } const Int_t Ntrks = tracks->GetEntries(); const Int_t Ncls = clus->GetEntries(); if (fDoClusTrack) { for(Int_t i=0; i < Ncls; ++i) { AliVCluster *c = dynamic_cast(clus->At(i)); if (!c) continue; c->SetEmcCpvDistance(-1); c->SetTrackDistance(999,999); Double_t dEtaMin = 1e9; Double_t dPhiMin = 1e9; Int_t imin = -1; for(Int_t t = 0; t(tracks->At(t)); Double_t etadiff=999; Double_t phidiff=999; AliPicoTrack::GetEtaPhiDiff(track,c,phidiff,etadiff); Double_t dR = TMath::Sqrt(etadiff*etadiff+phidiff*phidiff); if(dR > 25) continue; if (TMath::Abs(etadiff)SetEmcCpvDistance(imin); c->SetTrackDistance(dPhiMin, dEtaMin); } } if (fDoTrackClus) { for(Int_t t = 0; t(tracks->At(t)); if (!track) continue; Double_t dEtaMin = 1e9; Double_t dPhiMin = 1e9; Int_t imin = -1; for(Int_t i=0; i < Ncls; ++i) { AliVCluster *c = dynamic_cast(clus->At(i)); if (!c) continue; Double_t etadiff=999; Double_t phidiff=999; AliPicoTrack::GetEtaPhiDiff(track,c,phidiff,etadiff); Double_t dR = TMath::Sqrt(etadiff*etadiff+phidiff*phidiff); if(dR > 25) continue; if (TMath::Abs(etadiff)SetEMCALcluster(imin); } } } //________________________________________________________________________ void AliEmcalClusTrackMatcherTask::Terminate(Option_t *) { // Called once at the end of the analysis. }