3 #include "AliHadCorrTask.h"
4 #include <TClonesArray.h>
6 #include "AliEmcalJet.h"
7 #include "AliAnalysisManager.h"
8 #include "AliESDtrack.h"
9 #include "AliFJWrapper.h"
10 #include "AliESDCaloCluster.h"
15 #include <TLorentzVector.h>
16 #include <AliCentrality.h>
17 #include "AliPicoTrack.h"
19 ClassImp(AliHadCorrTask)
21 //________________________________________________________________________
22 AliHadCorrTask::AliHadCorrTask(const char *name) :
23 AliAnalysisTaskSE("AliHadCorrTask"),
24 fTracksName("Tracks"),
25 fCaloName("CaloClusters"),
31 fHistNclusMatchvsCent(0),
32 fOutCaloName("CaloClustersOut"),
36 for(Int_t i=0; i<4; i++){
37 fHistMatchEtaPhi[i]=0x0;
38 fHistMatchEvsP[i]=0x0;
39 fHistMatchdRvsEP[i]=0x0;
42 // Standard constructor.
43 cout << "Constructor for HadCorrTask " << name <<endl;
48 fBranchNames="ESD:AliESDRun.,AliESDHeader.,PrimaryVertex.";
50 DefineInput(0,TChain::Class());
51 DefineOutput(1,TList::Class());
54 AliHadCorrTask::AliHadCorrTask() :
55 AliAnalysisTaskSE("AliHadCorrTask"),
56 fTracksName("Tracks"),
57 fCaloName("CaloClusters"),
60 // Standard constructor.
62 fBranchNames="ESD:AliESDRun.,AliESDHeader.,PrimaryVertex.";
66 //________________________________________________________________________
67 AliHadCorrTask::~AliHadCorrTask()
72 //________________________________________________________________________
73 void AliHadCorrTask::UserCreateOutputObjects()
76 fOutClusters = new TClonesArray("AliESDCaloCluster");
77 fOutClusters->SetName(fOutCaloName);
80 fOutputList = new TList();
81 fOutputList->SetOwner();
85 for(int icent=0; icent<4; icent++){
86 sprintf(name,"fHistMatchEtaPhi_%i",icent);
87 fHistMatchEtaPhi[icent] = new TH2F(name,name,400,-0.2,0.2,1600,-0.8,0.8);
88 sprintf(name,"fHistMatchEvsP_%i",icent);
89 fHistMatchEvsP[icent]=new TH2F(name,name,400,0.,200.,1000,0.,10.);
90 sprintf(name,"fHistMatchdRvsEP_%i",icent);
91 fHistMatchdRvsEP[icent]=new TH2F(name,name,1000,0.,1.,1000,0.,10.);
94 fOutputList->Add(fHistMatchEtaPhi[icent]);
95 fOutputList->Add(fHistMatchEvsP[icent]);
96 fOutputList->Add(fHistMatchdRvsEP[icent]);
99 fHistNclusvsCent=new TH1F("Nclusvscent","NclusVsCent",100,0,100);
100 fHistNclusMatchvsCent=new TH1F("NclusMatchvscent","NclusMatchVsCent",100,0,100);
101 fHistEbefore=new TH1F("Ebefore","Ebefore",100,0,100);
102 fHistEafter=new TH1F("Eafter","Eafter",100,0,100);
104 fOutputList->Add(fHistNclusMatchvsCent);
105 fOutputList->Add(fHistNclusvsCent);
106 fOutputList->Add(fHistEbefore);
107 fOutputList->Add(fHistEafter);
109 PostData(1, fOutputList);
112 //________________________________________________________________________
113 void AliHadCorrTask::UserExec(Option_t *)
116 if (!(InputEvent()->FindListObject(fOutCaloName)))
117 InputEvent()->AddObject(fOutClusters);
118 else fOutClusters->Delete();
121 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
122 TClonesArray *tracks = 0;
123 TClonesArray *clus = 0;
124 TList *l = InputEvent()->GetList();
126 AliCentrality *centrality = 0;
127 centrality = dynamic_cast<AliCentrality*>(l->FindObject("Centrality"));
130 fCent = centrality->GetCentralityPercentile("V0M");
132 fCent=99;//probably pp data
136 if (fTracksName == "Tracks")
137 am->LoadBranch("Tracks");
138 tracks = dynamic_cast<TClonesArray*>(l->FindObject(fTracksName));
140 AliError(Form("Pointer to tracks %s == 0", fTracksName.Data() ));
143 const Int_t Ntrks = tracks->GetEntries();
145 if (fCaloName == "CaloClusters")
146 am->LoadBranch("CaloClusters");
147 clus = dynamic_cast<TClonesArray*>(l->FindObject(fCaloName));
149 AliError(Form("Pointer to clus %s == 0", fCaloName.Data() ));
154 if(fCent>=0 && fCent<10) centbin=0;
155 else if(fCent>=10 && fCent<30) centbin=1;
156 else if(fCent>=30 && fCent<50) centbin=2;
157 else if(fCent>=50 && fCent<100) centbin=3;
160 Double_t vertex[3] = {0, 0, 0};
161 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
162 const Int_t Nclus = clus->GetEntries();
163 for (Int_t iClus = 0, iN = 0, clusCount=0; iClus < Nclus; ++iClus) {
164 AliVCluster *c = dynamic_cast<AliVCluster*>(clus->At(iClus));
169 TLorentzVector nPart;
171 c->SetEmcCpvDistance(-1);
172 c->SetTrackDistance(999,999);
173 Double_t dEtaMin = 1e9;
174 Double_t dPhiMin = 1e9;
176 for(Int_t t = 0; t<Ntrks; ++t) {
177 AliVTrack *track = dynamic_cast<AliVTrack*>(tracks->At(t));
178 Double_t etadiff=999;
179 Double_t phidiff=999;
180 AliPicoTrack::GetEtaPhiDiff(track,c,phidiff,etadiff);
181 Double_t dR = TMath::Sqrt(etadiff*etadiff+phidiff*phidiff);
182 Double_t dRmin = TMath::Sqrt(dEtaMin*dEtaMin+dPhiMin*dPhiMin);
191 c->SetEmcCpvDistance(imin);
192 c->SetTrackDistance(dPhiMin, dEtaMin);
193 c->GetMomentum(nPart, vertex);
194 Double_t energy = nPart.P();
195 if(energy<fMinPt) continue;
197 Double_t dPhiMin = c->GetTrackDx();
198 Double_t dEtaMin = c->GetTrackDz();
199 fHistMatchEtaPhi[centbin]->Fill(dEtaMin,dPhiMin);
202 fHistNclusvsCent->Fill(fCent);
206 Double_t dPhiMin = c->GetTrackDx();
207 Double_t dEtaMin = c->GetTrackDz();
208 Double_t dR=TMath::Sqrt(dEtaMin*dEtaMin+dPhiMin*dPhiMin);
210 AliVTrack *t = dynamic_cast<AliVTrack*>(tracks->At(imin));
214 if (t->P()>0) fHistMatchEvsP[centbin]->Fill(energy,energy/t->P());
215 if (t->P()>0) fHistMatchdRvsEP[centbin]->Fill(dR,energy/t->P());
216 fHistEbefore->Fill(fCent,energy);
217 if (dPhiMin<0.05 && dEtaMin<0.025) { // pp cuts!!!
218 energy -= fHadCorr*t->P();
219 fHistNclusMatchvsCent->Fill(fCent);
225 fHistEafter->Fill(fCent,energy);
227 }//end had correction if
228 if (energy>0){//Output new corrected clusters
229 AliESDCaloCluster *oc = new ((*fOutClusters)[clusCount]) AliESDCaloCluster(*(dynamic_cast<AliESDCaloCluster*>(c)));
240 //________________________________________________________________________
241 void AliHadCorrTask::Terminate(Option_t *)
246 //________________________________________________________________________