]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalQGTagging.cxx
Charged jets (pPb): Jet cut changed
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / UserTasks / AliAnalysisTaskEmcalQGTagging.cxx
CommitLineData
cfa7b4df 1//
2// Jet QG tagging analysis task.
3//
4// Author: D. Caffarri, L. Cunqueiro
5
6#include <TClonesArray.h>
7#include <TH1F.h>
8#include <TH2F.h>
9#include <TH3F.h>
10#include <THnSparse.h>
11#include <TTree.h>
12#include <TList.h>
13#include <TLorentzVector.h>
14#include <TProfile.h>
15#include <TChain.h>
16#include <TSystem.h>
17#include <TFile.h>
18#include <TKey.h>
19#include "TMatrixD.h"
20#include "TMatrixDSym.h"
21#include "TMatrixDSymEigen.h"
22#include "TVector3.h"
23#include "TVector2.h"
24
25#include "AliVCluster.h"
26#include "AliVTrack.h"
27#include "AliEmcalJet.h"
28#include "AliRhoParameter.h"
29#include "AliLog.h"
30#include "AliEmcalParticle.h"
31#include "AliMCEvent.h"
32#include "AliGenPythiaEventHeader.h"
33#include "AliAODMCHeader.h"
34#include "AliMCEvent.h"
35#include "AliAnalysisManager.h"
36#include "AliJetContainer.h"
37#include "AliParticleContainer.h"
b929303d 38#include "AliPythiaInfo.h"
cfa7b4df 39
40
41#include "AliAODEvent.h"
42
43#include "AliAnalysisTaskEmcalQGTagging.h"
44
e8c28d9e 45using std::cout;
46using std::endl;
47
cfa7b4df 48ClassImp(AliAnalysisTaskEmcalQGTagging)
49
50//________________________________________________________________________
51AliAnalysisTaskEmcalQGTagging::AliAnalysisTaskEmcalQGTagging() :
52 AliAnalysisTaskEmcalJet("AliAnalysisTaskEmcalQGTagging", kTRUE),
53 fContainer(0),
54 fMinFractionShared(0),
a68b1989 55 fJetShapeType(kData),
56 fJetShapeSub(kNoSub),
cfa7b4df 57 fShapesVar(0),
34b1e79e 58 fPtThreshold(-9999.),
cfa7b4df 59 fRMatching(0.3),
60 fPhiJetCorr6(0x0),
61 fPhiJetCorr7(0x0),
62 fEtaJetCorr6(0x0),
63 fEtaJetCorr7(0x0),
64 fPtJetCorr(0x0),
65 fPtJet(0x0),
66 fTreeObservableTagging(0)
34b1e79e 67
cfa7b4df 68{
69 SetMakeGeneralHistograms(kTRUE);
70}
71
72//________________________________________________________________________
73AliAnalysisTaskEmcalQGTagging::AliAnalysisTaskEmcalQGTagging(const char *name) :
74 AliAnalysisTaskEmcalJet(name, kTRUE),
75 fContainer(0),
76 fMinFractionShared(0),
a68b1989 77 fJetShapeType(kData),
78 fJetShapeSub(kNoSub),
cfa7b4df 79 fShapesVar(0),
34b1e79e 80 fPtThreshold(-9999.),
cfa7b4df 81 fRMatching(0.3),
82 fPhiJetCorr6(0x0),
83 fPhiJetCorr7(0x0),
84 fEtaJetCorr6(0x0),
85 fEtaJetCorr7(0x0),
86 fPtJetCorr(0x0),
87 fPtJet(0x0),
88 fTreeObservableTagging(0)
34b1e79e 89
cfa7b4df 90{
91 // Standard constructor.
92
93 SetMakeGeneralHistograms(kTRUE);
94
95 DefineOutput(1, TTree::Class());
96
97}
98
99//________________________________________________________________________
100AliAnalysisTaskEmcalQGTagging::~AliAnalysisTaskEmcalQGTagging()
101{
102 // Destructor.
103}
104
105//________________________________________________________________________
106 void AliAnalysisTaskEmcalQGTagging::UserCreateOutputObjects()
107{
108 // Create user output.
109
110 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
111
112 Bool_t oldStatus = TH1::AddDirectoryStatus();
113 TH1::AddDirectory(kFALSE);
114
115 fTreeObservableTagging = new TTree("fTreeJetShape", "fTreeJetShape");
a68b1989 116 Int_t nVar = 17;
cfa7b4df 117 fShapesVar = new Float_t [nVar];
118 TString *fShapesVarNames = new TString [nVar];
119
120 fShapesVarNames[0] = "partonCode";
121 fShapesVarNames[1] = "ptJet";
122 fShapesVarNames[2] = "ptDJet";
123 fShapesVarNames[3] = "mJet";
124 fShapesVarNames[4] = "nbOfConst";
125 fShapesVarNames[5] = "angularity";
126 fShapesVarNames[6] = "circularity";
127 fShapesVarNames[7] = "lesub";
128 fShapesVarNames[8] = "sigma2";
a68b1989 129
130 fShapesVarNames[9] = "ptJetMatch";
131 fShapesVarNames[10] = "ptDJetMatch";
132 fShapesVarNames[11] = "mJetMatch";
133 fShapesVarNames[12] = "nbOfConstMatch";
134 fShapesVarNames[13] = "angularityMatch";
135 fShapesVarNames[14] = "circularityMatch";
136 fShapesVarNames[15] = "lesubMatch";
137 fShapesVarNames[16] = "sigma2Match";
cfa7b4df 138
139 for(Int_t ivar=0; ivar < nVar; ivar++){
140 cout<<"looping over variables"<<endl;
141 fTreeObservableTagging->Branch(fShapesVarNames[ivar].Data(), &fShapesVar[ivar], Form("%s/F", fShapesVarNames[ivar].Data()));
142
143 //if( ivar == 4 ) fTreeObservableTagging->Branch(fShapesVarNames[ivar].Data(), &fShapesVar[ivar], Form("%s/I", fShapesVarNames[ivar].Data()));
144
145 }
146
147 fPhiJetCorr6= new TH2F("fPhiJetCorr6", "fPhiJetCorr6", 50, 0, 2*TMath::Pi(), 50, 0, 2*TMath::Pi());
148 fOutput->Add(fPhiJetCorr6);
149 fEtaJetCorr6= new TH2F("fEtaJetCorr6", "fEtaJetCorr6", 50, -1.5, 1.5, 50, -1.5, 1.5);
150 fOutput->Add(fEtaJetCorr6);
151
152 fPhiJetCorr7= new TH2F("fPhiJetCorr7", "fPhiJetCorr7", 50, 0, 2*TMath::Pi(), 50, 0, 2*TMath::Pi());
153 fOutput->Add(fPhiJetCorr7);
154 fEtaJetCorr7= new TH2F("fEtaJetCorr7", "fEtaJetCorr7", 50, -1.5, 1.5, 50, -1.5, 1.5);
155 fOutput->Add(fEtaJetCorr7);
156
157 fPtJetCorr= new TH2F("fPtJetCorr", "fPtJetCorr", 100, 0, 200, 100, 0, 200);
158 fOutput->Add(fPtJetCorr);
159 fPtJet= new TH1F("fPtJet", "fPtJet", 100, 0, 200);
160 fOutput->Add(fPtJet);
161
162
163 fOutput->Add(fTreeObservableTagging);
164 TH1::AddDirectory(oldStatus);
165 PostData(1, fOutput); // Post data for ALL output slots > 0 here.
166
167}
168
169//________________________________________________________________________
170Bool_t AliAnalysisTaskEmcalQGTagging::Run()
171{
172 // Run analysis code here, if needed. It will be executed before FillHistograms().
173
174 return kTRUE;
175}
176
177//________________________________________________________________________
178Bool_t AliAnalysisTaskEmcalQGTagging::FillHistograms()
179{
180 // Fill histograms.
181 //cout<<"base container"<<endl;
182 AliEmcalJet* jet1 = NULL;
183 AliJetContainer *jetCont = GetJetContainer(0);
b929303d 184 Float_t kWeight=1;
cfa7b4df 185 if(jetCont) {
186 jetCont->ResetCurrentID();
187 while((jet1 = jetCont->GetNextAcceptJet())) {
188 if (!jet1) continue;
a68b1989 189 AliEmcalJet* jet2 = 0x0;
cfa7b4df 190 fPtJet->Fill(jet1->Pt());
a68b1989 191
192 if (!(fJetShapeType == kData)) {
b929303d 193 AliPythiaInfo *partonsInfo = 0x0;
a68b1989 194 if((fJetShapeType == kTrueDet) || (fJetShapeType == kDetEmb)){
cfa7b4df 195 AliJetContainer *jetContTrue = GetJetContainer(1);
196 jet2 = jet1->ClosestJet();
197 if (!jet2) {
198 Printf("jet2 not exists, returning");
199 continue;
200 }
a68b1989 201
cfa7b4df 202 Double_t fraction = jetCont->GetFractionSharedPt(jet1);
a68b1989 203 cout<<"hey a jet"<<fraction<<" "<<jet1->Pt()<<" "<<jet2->Pt()<<endl;
cfa7b4df 204 if(fraction<fMinFractionShared) continue;
b929303d 205 partonsInfo = (AliPythiaInfo*) jetContTrue->GetPythiaInfo();
a68b1989 206 if(!partonsInfo) return 0;
b929303d 207
cfa7b4df 208 }
209 else {
b929303d 210 partonsInfo = (AliPythiaInfo*) jetCont->GetPythiaInfo();
cfa7b4df 211 jet2=jet1;
be58fab7 212 if(!partonsInfo) return 0;
cfa7b4df 213 }
214
215 Double_t jp1=(jet2->Phi())-(partonsInfo->GetPartonPhi6());
216 Double_t detap1=(jet2->Eta())-(partonsInfo->GetPartonEta6());
b929303d 217 kWeight=partonsInfo->GetPythiaEventWeight();
cfa7b4df 218 if (jp1< -1*TMath::Pi()) jp1 = (-2*TMath::Pi())-jp1;
219 else if (jp1 > TMath::Pi()) jp1 = (2*TMath::Pi())-jp1;
220 Float_t dRp1 = TMath::Sqrt(jp1 * jp1 + detap1 * detap1);
221 fEtaJetCorr6->Fill(jet2->Eta(), partonsInfo->GetPartonEta6());
222 fPhiJetCorr6->Fill(jet2->Phi(), partonsInfo->GetPartonPhi6());
223 if(dRp1 < fRMatching) {
224 fShapesVar[0] = partonsInfo->GetPartonFlag6();
225 fPtJetCorr ->Fill(partonsInfo->GetPartonPt6(), jet2->Pt());
226 }
227 else {
228 jp1=(jet2->Phi())-(partonsInfo->GetPartonPhi7());
229 detap1=(jet2->Eta())-(partonsInfo->GetPartonEta7());
230 if (jp1< -1*TMath::Pi()) jp1= (-2*TMath::Pi())-jp1;
231 else if (jp1 > TMath::Pi()) jp1 = (2*TMath::Pi())-jp1;
232 dRp1 = TMath::Sqrt(jp1 * jp1 + detap1 * detap1);
233 fEtaJetCorr7->Fill(jet2->Eta(), partonsInfo->GetPartonEta7());
234 fPhiJetCorr7->Fill(jet2->Phi(), partonsInfo->GetPartonPhi7());
235 if(dRp1 < fRMatching) {
236 fShapesVar[0] = partonsInfo->GetPartonFlag7();
237 fPtJetCorr ->Fill(partonsInfo->GetPartonPt7(), jet2->Pt());
238 }
239 else continue;
240 }
241 }
242 else
243 fShapesVar[0] = 0.;
244
34b1e79e 245 Double_t ptSubtracted = 0;
cfa7b4df 246
a68b1989 247 if (((fJetShapeType == kData) || (fJetShapeType == kDetEmb)) && (fJetShapeSub == kConstSub))
248 ptSubtracted = jet1->Pt();
249 else ptSubtracted = jet1->Pt() - GetRhoVal(0)*jet1->Area();
250
251 if ((fJetShapeType == kData || fJetShapeType== kDetEmb))
252 if ( ptSubtracted < fPtThreshold) continue;
253
34b1e79e 254 fShapesVar[1] = ptSubtracted;
a68b1989 255 fShapesVar[2] = GetJetpTD(jet1,0);
e5aca8ab 256 fShapesVar[3] = GetJetMass(jet1,0);
257 fShapesVar[4] = 1.*GetJetNumberOfConstituents(jet1,0);
a68b1989 258 fShapesVar[5] = GetJetAngularity(jet1,0);
259 fShapesVar[6] = GetJetCircularity(jet1,0);
260 fShapesVar[7] = GetJetLeSub(jet1,0);
261 fShapesVar[8] = GetSigma2(jet1,0);
262
263 Float_t ptMatch=0., ptDMatch=0., massMatch=0., constMatch=0.,angulMatch=0.,circMatch=0., lesubMatch=0., sigma2Match=0.;
264 Int_t kMatched = 0;
265 if (fJetShapeType == kTrueDet || fJetShapeType == kDetEmb) {
266 kMatched = 1;
267 ptMatch=jet2->Pt();
268 ptDMatch=GetJetpTD(jet2, kMatched);
e5aca8ab 269 massMatch=GetJetMass(jet2,kMatched);
270 constMatch=1.*GetJetNumberOfConstituents(jet2,kMatched);
a68b1989 271 angulMatch=GetJetAngularity(jet2, kMatched);
272 circMatch=GetJetCircularity(jet2, kMatched);
273 lesubMatch=GetJetLeSub(jet2, kMatched);
274 sigma2Match = GetSigma2(jet2, kMatched);
275 }
276
277 if (fJetShapeType == kTrue || fJetShapeType == kData) {
278 kMatched = 0;
279 ptMatch=0.;
280 ptDMatch=0.;
281 massMatch=0.;
282 constMatch=0.;
283 angulMatch=0.;
284 circMatch=0.;
285 lesubMatch=0.;
286 sigma2Match =0.;
287 }
288
289 fShapesVar[9] = ptMatch;
290 fShapesVar[10] = ptDMatch;
291 fShapesVar[11] = massMatch;
292 fShapesVar[12] = constMatch;
293 fShapesVar[13] = angulMatch;
294 fShapesVar[14] = circMatch;
295 fShapesVar[15] = lesubMatch;
296 fShapesVar[16] = sigma2Match;
297
cfa7b4df 298 fTreeObservableTagging->Fill();
b929303d 299 fTreeObservableTagging->SetWeight(kWeight);
cfa7b4df 300 }
301
302 }
303
304 return kTRUE;
305}
306
307//________________________________________________________________________
e5aca8ab 308Float_t AliAnalysisTaskEmcalQGTagging::GetJetMass(AliEmcalJet *jet,Int_t jetContNb=0) {
cfa7b4df 309 //calc subtracted jet mass
e5aca8ab 310 if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
cfa7b4df 311 return jet->GetSecondOrderSubtracted();
312 else
313 return jet->M();
314}
315
316//________________________________________________________________________
a68b1989 317Float_t AliAnalysisTaskEmcalQGTagging::Angularity(AliEmcalJet *jet, Int_t jetContNb = 0){
cfa7b4df 318
a68b1989 319 AliJetContainer *jetCont = GetJetContainer(jetContNb);
cfa7b4df 320 if (!jet->GetNumberOfTracks())
321 return 0;
322 Double_t den=0.;
323 Double_t num = 0.;
324 AliVParticle *vp1 = 0x0;
325 for(UInt_t i = 0; i < jet->GetNumberOfTracks(); i++) {
326 vp1 = static_cast<AliVParticle*>(jet->TrackAt(i, jetCont->GetParticleContainer()->GetArray()));
327 Double_t dphi = vp1->Phi()-jet->Phi();
328 if(dphi<-1.*TMath::Pi()) dphi+=TMath::TwoPi();
329 if(dphi>TMath::Pi()) dphi-=TMath::TwoPi();
330 Double_t dr2 = (vp1->Eta()-jet->Eta())*(vp1->Eta()-jet->Eta()) + dphi*dphi;
331 Double_t dr = TMath::Sqrt(dr2);
332 num=num+vp1->Pt()*dr;
333 den=den+vp1->Pt();
334 }
335 return num/den;
336}
337
338//________________________________________________________________________
a68b1989 339Float_t AliAnalysisTaskEmcalQGTagging::GetJetAngularity(AliEmcalJet *jet, Int_t jetContNb = 0) {
cfa7b4df 340
e5aca8ab 341 if((fJetShapeSub==kDerivSub) && (jetContNb==0))
cfa7b4df 342 return jet->GetSecondOrderSubtractedAngularity();
343 else
a68b1989 344 return Angularity(jet, jetContNb);
cfa7b4df 345
346}
347
348
349//________________________________________________________________________
a68b1989 350Float_t AliAnalysisTaskEmcalQGTagging::PTD(AliEmcalJet *jet, Int_t jetContNb = 0){
cfa7b4df 351
a68b1989 352 AliJetContainer *jetCont = GetJetContainer(jetContNb);
cfa7b4df 353 if (!jet->GetNumberOfTracks())
354 return 0;
355 Double_t den=0.;
356 Double_t num = 0.;
357 AliVParticle *vp1 = 0x0;
358 for(UInt_t i = 0; i < jet->GetNumberOfTracks(); i++) {
359 vp1 = static_cast<AliVParticle*>(jet->TrackAt(i, jetCont->GetParticleContainer()->GetArray()));
360 num=num+vp1->Pt()*vp1->Pt();
361 den=den+vp1->Pt();
362 }
363 return TMath::Sqrt(num)/den;
364}
365
366//________________________________________________________________________
a68b1989 367Float_t AliAnalysisTaskEmcalQGTagging::GetJetpTD(AliEmcalJet *jet, Int_t jetContNb = 0) {
cfa7b4df 368 //calc subtracted jet mass
e5aca8ab 369 if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
cfa7b4df 370 return jet->GetSecondOrderSubtractedpTD();
371 else
a68b1989 372 return PTD(jet, jetContNb);
cfa7b4df 373
374}
375
376//_____________________________________________________________________________
a68b1989 377Float_t AliAnalysisTaskEmcalQGTagging::Circularity(AliEmcalJet *jet, Int_t jetContNb = 0){
cfa7b4df 378
a68b1989 379 AliJetContainer *jetCont = GetJetContainer(jetContNb);
cfa7b4df 380 if (!jet->GetNumberOfTracks())
381 return 0;
382 Double_t mxx = 0.;
383 Double_t myy = 0.;
384 Double_t mxy = 0.;
385 int nc = 0;
386 Double_t sump2 = 0.;
387 Double_t pxjet=jet->Px();
388 Double_t pyjet=jet->Py();
389 Double_t pzjet=jet->Pz();
390
391
392 //2 general normalized vectors perpendicular to the jet
393 TVector3 ppJ1(pxjet, pyjet, pzjet);
394 TVector3 ppJ3(- pxjet* pzjet, - pyjet * pzjet, pxjet * pxjet + pyjet * pyjet);
395 ppJ3.SetMag(1.);
396 TVector3 ppJ2(-pyjet, pxjet, 0);
397 ppJ2.SetMag(1.);
398 AliVParticle *vp1 = 0x0;
399 for(UInt_t i = 0; i < jet->GetNumberOfTracks(); i++) {
400 vp1 = static_cast<AliVParticle*>(jet->TrackAt(i, jetCont->GetParticleContainer()->GetArray()));
401
402
403 TVector3 pp(vp1->Px(), vp1->Py(), vp1->Pz());
404
405 //local frame
406 TVector3 pLong = pp.Dot(ppJ1) / ppJ1.Mag2() * ppJ1;
407 TVector3 pPerp = pp - pLong;
408 //projection onto the two perpendicular vectors defined above
409
410 Float_t ppjX = pPerp.Dot(ppJ2);
411 Float_t ppjY = pPerp.Dot(ppJ3);
412 Float_t ppjT = TMath::Sqrt(ppjX * ppjX + ppjY * ppjY);
413 if(ppjT<=0) return 0;
414
415 mxx += (ppjX * ppjX / ppjT);
416 myy += (ppjY * ppjY / ppjT);
417 mxy += (ppjX * ppjY / ppjT);
418 nc++;
419 sump2 += ppjT;}
420
421 if(nc<2) return 0;
422 if(sump2==0) return 0;
423 // Sphericity Matrix
424 Double_t ele[4] = {mxx / sump2, mxy / sump2, mxy / sump2, myy / sump2};
425 TMatrixDSym m0(2,ele);
426
427 // Find eigenvectors
428 TMatrixDSymEigen m(m0);
429 TVectorD eval(2);
430 TMatrixD evecm = m.GetEigenVectors();
431 eval = m.GetEigenValues();
432 // Largest eigenvector
433 int jev = 0;
434 // cout<<eval[0]<<" "<<eval[1]<<endl;
435 if (eval[0] < eval[1]) jev = 1;
436 TVectorD evec0(2);
437 // Principle axis
438 evec0 = TMatrixDColumn(evecm, jev);
439 Double_t compx=evec0[0];
440 Double_t compy=evec0[1];
441 TVector2 evec(compx, compy);
442 Double_t circ=0;
443 if(jev==1) circ=2*eval[0];
444 if(jev==0) circ=2*eval[1];
445
446 return circ;
447
448
449
450}
451
452
453
454
455//________________________________________________________________________
a68b1989 456Float_t AliAnalysisTaskEmcalQGTagging::GetJetCircularity(AliEmcalJet *jet, Int_t jetContNb =0 ) {
cfa7b4df 457 //calc subtracted jet mass
458
e5aca8ab 459 if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
cfa7b4df 460 return jet->GetSecondOrderSubtractedCircularity();
461 else
a68b1989 462 return Circularity(jet, jetContNb);
cfa7b4df 463
464}
465
466//________________________________________________________________________
a68b1989 467Float_t AliAnalysisTaskEmcalQGTagging::LeSub(AliEmcalJet *jet, Int_t jetContNb =0 ){
cfa7b4df 468
a68b1989 469 AliJetContainer *jetCont = GetJetContainer(jetContNb);
cfa7b4df 470 if (!jet->GetNumberOfTracks())
471 return 0;
472 Double_t den=0.;
473 Double_t num = 0.;
474 AliVParticle *vp1 = 0x0;
475 AliVParticle *vp2 = 0x0;
476 std::vector<int> ordindex;
477 ordindex=jet->SortConstituentsPt(jetCont->GetParticleContainer()->GetArray());
478
479 vp1 = static_cast<AliVParticle*>(jet->TrackAt(ordindex[0], jetCont->GetParticleContainer()->GetArray()));
480 vp2 = static_cast<AliVParticle*>(jet->TrackAt(ordindex[1], jetCont->GetParticleContainer()->GetArray()));
481
482 num=vp1->Pt();
483 den=vp2->Pt();
484
485return num-den;
486}
487
488//________________________________________________________________________
a68b1989 489Float_t AliAnalysisTaskEmcalQGTagging::GetJetLeSub(AliEmcalJet *jet, Int_t jetContNb =0) {
cfa7b4df 490 //calc subtracted jet mass
491
e5aca8ab 492 if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
cfa7b4df 493 return jet->GetSecondOrderSubtractedLeSub();
494 else
a68b1989 495 return LeSub(jet, jetContNb);
cfa7b4df 496
497}
498
499//________________________________________________________________________
e5aca8ab 500Float_t AliAnalysisTaskEmcalQGTagging::GetJetNumberOfConstituents(AliEmcalJet *jet,Int_t jetContNb=0) {
cfa7b4df 501 //calc subtracted jet mass
502
e5aca8ab 503 if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
cfa7b4df 504 return jet->GetSecondOrderSubtractedConstituent();
505 else
506 return jet->GetNumberOfTracks();
507
508}
509
510
511//______________________________________________________________________________
a68b1989 512Float_t AliAnalysisTaskEmcalQGTagging::Sigma2(AliEmcalJet *jet, Int_t jetContNb=0){
cfa7b4df 513
a68b1989 514 AliJetContainer *jetCont = GetJetContainer(jetContNb);
cfa7b4df 515 if (!jet->GetNumberOfTracks())
516 return 0;
517 Double_t mxx = 0.;
518 Double_t myy = 0.;
519 Double_t mxy = 0.;
520 int nc = 0;
521 Double_t sump2 = 0.;
522
523 AliVParticle *vp1 = 0x0;
524 for(UInt_t i = 0; i < jet->GetNumberOfTracks(); i++) {
525 vp1 = static_cast<AliVParticle*>(jet->TrackAt(i, jetCont->GetParticleContainer()->GetArray()));
526 Double_t ppt=vp1->Pt();
527 Double_t dphi = vp1->Phi()-jet->Phi();
528 if(dphi<-1.*TMath::Pi()) dphi+=TMath::TwoPi();
529 if(dphi>TMath::Pi()) dphi-=TMath::TwoPi();
530 Double_t deta = vp1->Eta()-jet->Eta();
531 mxx += ppt*ppt*deta*deta;
532 myy += ppt*ppt*dphi*dphi;
533 mxy -= ppt*ppt*deta*dphi;
534 nc++;
535 sump2 += ppt*ppt;
536
537 }
538 if(nc<2) return 0;
539 if(sump2==0) return 0;
540 // Sphericity Matrix
541 Double_t ele[4] = {mxx , mxy , mxy , myy };
542 TMatrixDSym m0(2,ele);
543
544 // Find eigenvectors
545 TMatrixDSymEigen m(m0);
546 TVectorD eval(2);
547 TMatrixD evecm = m.GetEigenVectors();
548 eval = m.GetEigenValues();
549 // Largest eigenvector
550 int jev = 0;
551 // cout<<eval[0]<<" "<<eval[1]<<endl;
552 if (eval[0] < eval[1]) jev = 1;
553 TVectorD evec0(2);
554 // Principle axis
555 evec0 = TMatrixDColumn(evecm, jev);
556 Double_t compx=evec0[0];
557 Double_t compy=evec0[1];
558 TVector2 evec(compx, compy);
559 Double_t sig=0;
560 if(jev==1) sig=TMath::Sqrt(TMath::Abs(eval[0])/sump2);
561 if(jev==0) sig=TMath::Sqrt(TMath::Abs(eval[1])/sump2);
562
563 return sig;
564
565}
566
567//________________________________________________________________________
a68b1989 568Float_t AliAnalysisTaskEmcalQGTagging::GetSigma2(AliEmcalJet *jet, Int_t jetContNb=0) {
cfa7b4df 569 //calc subtracted jet mass
570
e5aca8ab 571 if((fJetShapeSub==kDerivSub)&&(jetContNb==0))
cfa7b4df 572 return jet->GetSecondOrderSubtractedSigma2();
573 else
a68b1989 574 return Sigma2(jet, jetContNb);
cfa7b4df 575
576}
577
578//________________________________________________________________________
579Bool_t AliAnalysisTaskEmcalQGTagging::RetrieveEventObjects() {
580 //
581 // retrieve event objects
582 //
583 if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
584 return kFALSE;
585
586 return kTRUE;
587}
588
589//_______________________________________________________________________
590void AliAnalysisTaskEmcalQGTagging::Terminate(Option_t *)
591{
592 // Called once at the end of the analysis.
593
594 // fTreeObservableTagging = dynamic_cast<TTree*>(GetOutputData(1));
595 // if (!fTreeObservableTagging){
596 // Printf("ERROR: fTreeObservableTagging not available");
597 // return;
598 // }
599
600}
601