3 #include <TClonesArray.h>
9 #include <TLorentzVector.h>
11 #include "AliCentrality.h"
12 #include "AliEmcalJet.h"
13 #include "AliAnalysisManager.h"
14 #include "AliESDtrack.h"
15 #include "AliFJWrapper.h"
16 #include "AliESDCaloCluster.h"
17 #include "AliAODCaloCluster.h"
18 #include "AliPicoTrack.h"
19 #include "AliVEventHandler.h"
21 #include "AliHadCorrTask.h"
23 ClassImp(AliHadCorrTask)
25 //________________________________________________________________________
26 AliHadCorrTask::AliHadCorrTask(const char *name) :
27 AliAnalysisTaskSE("AliHadCorrTask"),
28 fTracksName("Tracks"),
29 fCaloName("CaloClusters"),
33 fOutCaloName("CaloClustersOut"),
37 fHistNclusMatchvsCent(0),
42 for(Int_t i=0; i<4; i++){
43 fHistMatchEtaPhi[i]=0x0;
44 fHistMatchEvsP[i]=0x0;
45 fHistMatchdRvsEP[i]=0x0;
48 // Standard constructor.
49 cout << "Constructor for HadCorrTask " << name <<endl;
54 fBranchNames="ESD:AliESDRun.,AliESDHeader.,PrimaryVertex.";
56 DefineInput(0,TChain::Class());
57 DefineOutput(1,TList::Class());
60 AliHadCorrTask::AliHadCorrTask() :
61 AliAnalysisTaskSE("AliHadCorrTask"),
62 fTracksName("Tracks"),
63 fCaloName("CaloClusters"),
67 fOutCaloName("CaloClustersOut"),
71 fHistNclusMatchvsCent(0),
75 // Standard constructor.
77 fBranchNames="ESD:AliESDRun.,AliESDHeader.,PrimaryVertex.";
81 //________________________________________________________________________
82 AliHadCorrTask::~AliHadCorrTask()
87 //________________________________________________________________________
88 void AliHadCorrTask::UserCreateOutputObjects()
91 AliVEventHandler* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
94 AliError("Input handler not available!");
98 if (handler->InheritsFrom("AliESDInputHandler")) {
99 fOutClusters = new TClonesArray("AliESDCaloCluster");
101 else if (handler->InheritsFrom("AliAODInputHandler")) {
102 fOutClusters = new TClonesArray("AliAODCaloCluster");
105 AliError("Input handler not recognized!");
109 fOutClusters->SetName(fOutCaloName);
112 fOutputList = new TList();
113 fOutputList->SetOwner();
117 for(int icent=0; icent<4; icent++){
118 sprintf(name,"fHistMatchEtaPhi_%i",icent);
119 fHistMatchEtaPhi[icent] = new TH2F(name,name,400,-0.2,0.2,1600,-0.8,0.8);
120 sprintf(name,"fHistMatchEvsP_%i",icent);
121 fHistMatchEvsP[icent]=new TH2F(name,name,400,0.,200.,1000,0.,10.);
122 sprintf(name,"fHistMatchdRvsEP_%i",icent);
123 fHistMatchdRvsEP[icent]=new TH2F(name,name,1000,0.,1.,1000,0.,10.);
126 fOutputList->Add(fHistMatchEtaPhi[icent]);
127 fOutputList->Add(fHistMatchEvsP[icent]);
128 fOutputList->Add(fHistMatchdRvsEP[icent]);
131 fHistNclusvsCent=new TH1F("Nclusvscent","NclusVsCent",100,0,100);
132 fHistNclusMatchvsCent=new TH1F("NclusMatchvscent","NclusMatchVsCent",100,0,100);
133 fHistEbefore=new TH1F("Ebefore","Ebefore",100,0,100);
134 fHistEafter=new TH1F("Eafter","Eafter",100,0,100);
136 fOutputList->Add(fHistNclusMatchvsCent);
137 fOutputList->Add(fHistNclusvsCent);
138 fOutputList->Add(fHistEbefore);
139 fOutputList->Add(fHistEafter);
141 PostData(1, fOutputList);
144 //________________________________________________________________________
145 void AliHadCorrTask::UserExec(Option_t *)
148 if (!(InputEvent()->FindListObject(fOutCaloName)))
149 InputEvent()->AddObject(fOutClusters);
150 else fOutClusters->Delete();
153 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
154 TClonesArray *tracks = 0;
155 TClonesArray *clus = 0;
156 TList *l = InputEvent()->GetList();
158 AliCentrality *centrality = 0;
159 centrality = dynamic_cast<AliCentrality*>(l->FindObject("Centrality"));
162 fCent = centrality->GetCentralityPercentile("V0M");
164 fCent=99;//probably pp data
168 if (fTracksName == "Tracks")
169 am->LoadBranch("Tracks");
170 tracks = dynamic_cast<TClonesArray*>(l->FindObject(fTracksName));
172 AliError(Form("Pointer to tracks %s == 0", fTracksName.Data() ));
175 const Int_t Ntrks = tracks->GetEntries();
177 if (fCaloName == "CaloClusters")
178 am->LoadBranch("CaloClusters");
179 clus = dynamic_cast<TClonesArray*>(l->FindObject(fCaloName));
181 AliError(Form("Pointer to clus %s == 0", fCaloName.Data() ));
186 if(fCent>=0 && fCent<10) centbin=0;
187 else if(fCent>=10 && fCent<30) centbin=1;
188 else if(fCent>=30 && fCent<50) centbin=2;
189 else if(fCent>=50 && fCent<100) centbin=3;
192 Double_t vertex[3] = {0, 0, 0};
193 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
194 const Int_t Nclus = clus->GetEntries();
195 for (Int_t iClus = 0, clusCount=0; iClus < Nclus; ++iClus) {
196 AliVCluster *c = dynamic_cast<AliVCluster*>(clus->At(iClus));
201 TLorentzVector nPart;
203 c->SetEmcCpvDistance(-1);
204 c->SetTrackDistance(999,999);
205 Double_t dEtaMin = 1e9;
206 Double_t dPhiMin = 1e9;
208 for(Int_t t = 0; t<Ntrks; ++t) {
209 AliVTrack *track = dynamic_cast<AliVTrack*>(tracks->At(t));
210 Double_t etadiff=999;
211 Double_t phidiff=999;
212 AliPicoTrack::GetEtaPhiDiff(track,c,phidiff,etadiff);
213 Double_t dR = TMath::Sqrt(etadiff*etadiff+phidiff*phidiff);
214 Double_t dRmin = TMath::Sqrt(dEtaMin*dEtaMin+dPhiMin*dPhiMin);
223 c->SetEmcCpvDistance(imin);
224 c->SetTrackDistance(dPhiMin, dEtaMin);
225 c->GetMomentum(nPart, vertex);
226 Double_t energy = nPart.P();
227 if(energy<fMinPt) continue;
229 dPhiMin = c->GetTrackDx();
230 dEtaMin = c->GetTrackDz();
231 fHistMatchEtaPhi[centbin]->Fill(dEtaMin,dPhiMin);
234 fHistNclusvsCent->Fill(fCent);
238 dPhiMin = c->GetTrackDx();
239 dEtaMin = c->GetTrackDz();
240 Double_t dR=TMath::Sqrt(dEtaMin*dEtaMin+dPhiMin*dPhiMin);
242 AliVTrack *t = dynamic_cast<AliVTrack*>(tracks->At(imin));
246 if (t->P()>0) fHistMatchEvsP[centbin]->Fill(energy,energy/t->P());
247 if (t->P()>0) fHistMatchdRvsEP[centbin]->Fill(dR,energy/t->P());
248 fHistEbefore->Fill(fCent,energy);
249 if (dPhiMin<0.05 && dEtaMin<0.025) { // pp cuts!!!
250 energy -= fHadCorr*t->P();
251 fHistNclusMatchvsCent->Fill(fCent);
257 fHistEafter->Fill(fCent,energy);
259 }//end had correction if
260 if (energy>0){//Output new corrected clusters
262 if (c->InheritsFrom("AliESDCaloCluster")) {
263 oc = new ((*fOutClusters)[clusCount]) AliESDCaloCluster(*(dynamic_cast<AliESDCaloCluster*>(c)));
265 else if (c->InheritsFrom("AliAODCaloCluster")) {
266 oc = new ((*fOutClusters)[clusCount]) AliAODCaloCluster(*(dynamic_cast<AliAODCaloCluster*>(c)));
269 AliError("Cluster type not recognized (nor ESD neither AOD)!");
282 //________________________________________________________________________
283 void AliHadCorrTask::Terminate(Option_t *)
288 //________________________________________________________________________