1 // Class AliAnalysisTaskJetShape
2 // Author martin.poghosyan@cern.ch
12 #include "TParticlePDG.h"
13 #include "TParticle.h"
15 #include "TDatabasePDG.h"
17 #include "THnSparse.h"
22 #include <TClonesArray.h>
25 #include "AliCDBManager.h"
26 #include "AliGeomManager.h"
27 #include "AliCDBEntry.h"
28 #include "AliCDBPath.h"
29 #include "AliAlignObjParams.h"
30 #include "AliAnalysisTaskSE.h"
31 #include "AliAnalysisManager.h"
32 #include "AliESDEvent.h"
33 #include "AliESDInputHandler.h"
34 #include "AliMultiplicity.h"
35 #include "AliESDFMD.h"
36 #include "AliESDVZERO.h"
37 #include "AliESDInputHandler.h"
38 #include "AliVEvent.h"
39 #include "AliCentrality.h"
40 #include "AliAnalysisHelperJetTasks.h"
41 #include "AliInputEventHandler.h"
42 #include "AliAODJetEventBackground.h"
43 #include "AliAODEvent.h"
44 #include "AliAODHandler.h"
45 #include "AliAODJet.h"
46 #include "AliAODEvent.h"
47 #include "AliAODTrack.h"
48 #include "AliAODMCParticle.h"
49 #include "AliGenEventHeader.h"
50 #include "AliHeader.h"
52 #include "AliMCEvent.h"
53 #include "AliMCEventHandler.h"
54 #include "AliInputEventHandler.h"
55 #include "AliLHCData.h"
56 #include "AliGenPythiaEventHeader.h"
57 #include "AliGenDPMjetEventHeader.h"
58 #include "AliESDtrackCuts.h"
59 #include "AliTriggerAnalysis.h"
63 #include "AliAnalysisTaskJetShape.h"
65 /////////////////////////////////////
67 ClassImp(AliAnalysisTaskJetShape)
70 AliAnalysisTaskJetShape::AliAnalysisTaskJetShape(const char *name)
71 : AliAnalysisTaskSE(name),
84 fOfflineTrgMask(AliVEvent::kAny),
100 fanalJetSubStrMCHM(0)
104 fgkbinCent[0] = -0.099;
113 fBackgroundBranch[0] = "",
114 fBackgroundBranch[1] = "",
115 fJetBranchName[0] = "";
116 fJetBranchName[1] = "";
118 // fkIsPbPb = kFALSE;
123 fanalJetSubStrHM = new AliAnalysisTaskJetShapeHM("rec");
124 fanalJetSubStrMCHM = new AliAnalysisTaskJetShapeHM("truth", kTRUE);
126 DefineOutput(1, TList::Class());
128 // DefineOutput(1, TTree::Class());
132 AliAnalysisTaskJetShape::~AliAnalysisTaskJetShape()
134 if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
135 printf("Deleteing output\n");
142 // if(fTriggerAnalysis)
143 // delete fTriggerAnalysis;
149 AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeTool::AliAnalysisTaskJetShapeTool():TObject(),
158 fList = new TClonesArray("TVector3",10000);
168 for(Int_t i1=0; i1<fgkbinR; i1++)
170 for(Int_t i2=0; i2<2; i2++)
172 fListJ[i1][i2].Set(1000);
173 fListB1[i1][i2].Set(1000);
174 fListB2[i1][i2].Set(1000);
176 fListB1c[i1][i2] = 0;
177 fListB2c[i1][i2] = 0;
178 // fListJ[i1][i2]("TVector3",10000);
179 // fListB1[i1][i2] = TClonesArray("TVector3",10000);
180 // fListB2[i1][i2] = TClonesArray("TVector3",10000);
182 fListJ[i1][i2].Reset(-1);
183 fListB1[i1][i2].Reset(-1);
184 fListB2[i1][i2].Reset(-1);
186 fPRecJ[i1][i2].SetXYZ(0,0,0);
191 fPRecInRJ.SetXYZ(0,0,0);
199 AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeTool::AliAnalysisTaskJetShapeTool(TClonesArray *list):TObject(),
217 for(Int_t i1=0; i1<fgkbinR; i1++)
219 for(Int_t i2=0; i2<2; i2++)
221 fListJ[i1][i2].Set(1000);
222 fListB1[i1][i2].Set(1000);
223 fListB2[i1][i2].Set(1000);
225 fListB1c[i1][i2] = 0;
226 fListB2c[i1][i2] = 0;
227 // fListJ[i1][i2]("TVector3",10000);
228 // fListB1[i1][i2] = TClonesArray("TVector3",10000);
229 // fListB2[i1][i2] = TClonesArray("TVector3",10000);
230 fListJ[i1][i2].Reset(-1);
231 fListB1[i1][i2].Reset(-1);
232 fListB2[i1][i2].Reset(-1);
233 fPRecJ[i1][i2].SetXYZ(0,0,0);
238 fPRecInRJ.SetXYZ(0,0,0);
248 AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeTool::~AliAnalysisTaskJetShapeTool()
259 void AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeTool::SetVecJ(TVector3 v)
261 fvecJ.SetXYZ(v.X(), v.Y(), v.Z());
262 fvecB1.SetXYZ(-v.Y(), v.X(), v.Z());
263 fvecB2.SetXYZ(v.Y(),-v.X(), v.Z());
267 void AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeTool::Clean()
269 // printf("AnalJetSubStrTool::Clean()\n");
272 for(Int_t i1=0; i1<fgkbinR; i1++)
274 for(Int_t i2=0; i2<2; i2++)
276 fListJ[i1][i2]->Delete();
277 fListB1[i1][i2]->Delete();
278 fListB2[i1][i2]->Delete();
287 fPRecInRJ.SetXYZ(0,0,0);
289 for(Int_t i1=0; i1<fgkbinR; i1++)
291 for(Int_t i2=0; i2<2; i2++)
293 fListJ[i1][i2].Reset(-1);
294 fListB1[i1][i2].Reset(-1);
295 fListB2[i1][i2].Reset(-1);
296 // fListJ[i1][i2].Set(0);
297 // fListB1[i1][i2].Set(0);
298 // fListB2[i1][i2].Set(0);
300 fListB1c[i1][i2] = 0;
301 fListB2c[i1][i2] = 0;
303 fPRecJ[i1][i2].SetXYZ(0,0,0);
310 //void AnalJetSubStrTool::Print(Option_t* /*option*/) const
311 void AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeTool::PRINT() const
314 // PRINT(fList, "all");
317 for(Int_t i1=0; i1<fgkbinR; i1++)
321 for(Int_t i2=0; i2<2; i2++)
324 // printf("# %d %d\n",i1, i2);
325 PRINT(fListJ[i1][i2], fListJc[i1][i2], Form("J_%d_%d",i1,i2));
326 // PRINT(fListB1[i1][i2], Form("B1_%d_%d",i1,i2));
327 // PRINT(fListB2[i1][i2], Form("B2_%d_%d",i1,i2));
328 // fListJ[i1][i2].Print("",1);
329 // fListB1[i1][i2]->Print();
330 // fListB2[i1][i2]->Print();
336 void AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeTool::PRINT(TArrayI a, Int_t n, const char *txt) const
338 printf("%s :%d \n",txt, n);
340 for(Int_t i=0; i<n; i++){
341 printf("%4d ", a.At(i));
350 if(count!=20) printf("\n");
356 void AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeTool::Init()
358 Int_t Nev = fEntries;
362 // printf("Nev = %d\n",Nev);
364 for(Int_t iP=0; iP<Nev; iP++)
366 TVector3 *v = (TVector3*) fList->At(iP);
368 printf("ERROR : entry #%d not found\n",iP);
372 // printf("#%3d ",iP); v->Print();
374 Double_t R = CalcR(fvecJ, *v);
375 // printf("R = %f\n",R);
378 for(Int_t iT = 0; iT < fgkbinR; iT++)
381 if(R>fR[iT]) type = 1;
383 if(v->Pt() < fPtMinTr[type]) continue;
384 fPRecJ[iT][type]+=*v;
385 AddToJ(iT, type, iP);
388 if(v->Pt() < fPtMinTr[0]) continue;
394 R = CalcR(fvecB1, *v);
397 for(Int_t iT = 0; iT < fgkbinR; iT++)
400 if(R>fR[iT]) type = 1;
402 if(v->Pt() < fPtMinTr[type]) continue;
404 AddToB1(iT, type, iP);
409 R = CalcR(fvecB2, *v);
412 for(Int_t iT = 0; iT < fgkbinR; iT++)
415 if(R>fR[iT]) type = 1;
417 if(v->Pt() < fPtMinTr[type]) continue;
419 AddToB2(iT, type, iP);
428 for(Int_t i1=0; i1<fgkbinR; i1++)
430 for(Int_t i2=0; i2<2; i2++)
432 // if(fListJc[i1][i2]<2) fListJc[i1][i2]=0;
433 // if(fListB1c[i1][i2]<2) fListB1c[i1][i2]=0;
434 // if(fListB2c[i1][i2]<2) fListB2c[i1][i2]=0;
435 fListJ[i1][i2].Set(fListJc[i1][i2]);
436 fListB1[i1][i2].Set(fListB1c[i1][i2]);
437 fListB2[i1][i2].Set(fListB2c[i1][i2]);
446 Double_t AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeTool::CalcR(TVector3 v1, TVector3 v2)
449 Double_t dphi = CalcdPhi(v1.Phi(), v2.Phi());
450 // dphi*=(0.9/TMath::Pi());
451 Double_t deta = v1.Eta() - v2.Eta();
452 Double_t RB = TMath::Sqrt(dphi*dphi+deta*deta);
457 Double_t AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeTool::CalcdPhi(Double_t phi1, Double_t phi2)
460 while(phi1<0) phi1+=TMath::TwoPi();
461 while(phi1>TMath::TwoPi()) phi1-=TMath::TwoPi();
463 while(phi2<0) phi2+=TMath::TwoPi();
464 while(phi2>TMath::TwoPi()) phi2-=TMath::TwoPi();
466 Double_t dphi = phi1- phi2;
467 if(dphi>TMath::Pi())dphi = dphi - 2.*TMath::Pi();
468 if(dphi<(-1.*TMath::Pi()))dphi = dphi + 2.*TMath::Pi();
474 void AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeTool::GetLocalMom(TVector3 vecJ, TVector3 *q)
476 // theta and phi of a particle in loc.syst of fvecJ
479 Double_t PT = vecJ.Perp();
480 Double_t P0 = vecJ.Mag();
486 Double_t qx1 = vecJ(2)/P0/PT*(vecJ(0)*q0+vecJ(1)*q1) - PT/P0*q2;
487 Double_t qy1 = -vecJ(1)/PT*q0 + vecJ(0)/PT*q1;
488 Double_t qz1 = 1/P0*(vecJ(0)*q0+vecJ(1)*q1+vecJ(2)*q2);
490 // Double_t q00 = TMath::Sqrt(qx1*qx1 + qy1*qy1 + qz1*qz1);
491 // phi = TMath::ATan2(qy1, qx1);
492 // if(phi<0) phi+=fTwoPi;
493 // theta = TMath::ACos(qz1/q00);
495 q->SetXYZ(qx1, qy1, qz1);
503 Bool_t AnalJetSubStrTool::FindCorrelationAxesAnd(TArrayI list, TVector3 vec, Double_t &Phi, Int_t scenario)
505 Double_t TwoPi = TMath::TwoPi();
508 // 1st track loop to determine the sphericity matrix
510 // Initialize Shericity matrix
523 Int_t Nev = list.GetSize();
524 if( Nev <2) return kFALSE;
526 Int_t indexpmax = -1;
528 Double_t phipmax = 0;
530 Int_t indexpzmax = -1;
532 Double_t phipzmax = 0;
535 Int_t indexthetamin = -1;
536 Double_t thetamin = 1000;
537 Double_t phithetamin = 0;
539 for(Int_t ip=0; ip< Nev; ip++) {
541 TVector3* part = (TVector3*) GetAt(list.At(ip));
544 TVector3 vtmp(*part);
545 GetLocalMom(vec, &vtmp);
547 Float_t ppjX = vtmp.X();
548 Float_t ppjY = vtmp.Y();
549 Float_t ppjT = TMath::Sqrt(ppjX * ppjX + ppjY * ppjY);
552 Float_t pt = ppjT;//part->Z();
553 Float_t deta = part->Eta();
554 Float_t dphi = part->Phi();
556 mxx += (ppjX * ppjX / ppjT);
557 myy += (ppjY * ppjY / ppjT);
558 mxy += (ppjX * ppjY / ppjT);
576 if(vtmp.Theta()<thetamin)
578 thetamin=vtmp.Theta();
580 phithetamin=vtmp.Phi();
590 // At this point we have mxx, myy, mxy
591 if (nc == 0) return kFALSE;
593 const Double_t ele[4] = {mxx / sump2, mxy / sump2, mxy / sump2, myy / sump2};
594 TMatrixDSym m0(2, ele);
596 TMatrixDSymEigen m(m0);
598 TMatrixD evecm = m.GetEigenVectors();
599 eval = m.GetEigenValues();
600 // Largest eigenvector
602 if (eval[0] < eval[1]) jev = 1;
605 evec0 = TMatrixDColumn(evecm, jev);
606 TVector2 evec(evec0[0], evec0[1]);
607 // Principle axis from leading partice
609 // Float_t phiM = TMath::ATan2(phiMax, etaMax);
610 // TVector2 evecM(TMath::Cos(phiM), TMath::Sin(phiM));
611 // Float_t phistM = evecM.DeltaPhi(evec);
612 // if (TMath::Abs(phistM) > TMath::Pi()/2.) evec*=(-1.);
615 Double_t phiTA = evec.Phi();
623 else if(scenario ==1)
628 else if(scenario ==2)
630 phiDir = phithetamin;
638 if( TMath::Abs(CalcdPhi(phiDir, phiTA)) <TMath::Pi()/2)
642 if(Phi>TwoPi) Phi-=TwoPi;
651 Bool_t AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeTool::FindCorrelationAxes(TArrayI list, TVector3 vec, Double_t &Phi, Int_t scenario)
653 // scenario 0- Pmax, 1-Pzmax_Local, 2->cosMin, 3-PTmac, 4->PTmax_Local
655 Double_t xmean , ymean;
657 Double_t TwoPi = TMath::TwoPi();
670 // Double_t phiLoc, thetaLoc;
674 Int_t Nev = list.GetSize();
675 if( Nev <2) return kFALSE;
682 if(scenario==2) val = 100;
683 Double_t phiDir = -99;
687 for(Int_t ip=0; ip< Nev; ip++) {
688 if(list.At(ip)<0) break;
690 TVector3* part = (TVector3*) GetAt(list.At(ip));
696 TVector3 vtmp(*part);
697 GetLocalMom(vec, &vtmp);
698 Double_t xx=vtmp.X(); //part->Mag()*TMath::Sin(thetaLoc)*TMath::Cos(phiLoc);
699 Double_t yy=vtmp.Y(); //part->Mag()*TMath::Sin(thetaLoc)*TMath::Sin(phiLoc);
702 xx = CalcdPhi(part->Phi(), vec.Phi());
703 yy = part->Eta() - vec.Eta();
722 else if(scenario ==1)
731 else if(scenario ==2)
748 // phiDir=vtmp.Phi();
749 phiDir=TMath::ATan2(yy, xx); //vtmp.Phi();
756 if(N<2) return kFALSE;
768 Double_t B = x2-x*x+y*y-y2;
769 Double_t D = TMath::Sqrt(B*B+4*A*A);
771 // printf("N = %d A = %f\n",N, A);
774 Double_t a1 = (-B+D)/2/A;
775 // Double_t a2 = (-B-D)/2/A;
776 // Double_t b1 = y-a1*x;
777 // Double_t b2 = y-a2*x;
778 // Double_t phiDir = TMath::ATan2(y, x);
779 // while(phiDir<0) phiDir+=TwoPi;
780 Double_t phi = TMath::ATan(a1);
782 while(phi>TwoPi) phi-=TwoPi;
783 while(phi< 0 ) phi+=TwoPi;
785 Phi=CalcdPhi0To2pi(phi, 0);
787 if(scenario!=4 && Index<0) return kFALSE;
791 if( TMath::Abs(CalcdPhi(phiDir, phi)) <TMath::Pi()/2)
796 Phi = CalcdPhi0To2pi(phi);
802 Double_t xmax = -100;
809 for(Int_t ip=0; ip< Nev; ip++) {
810 if(list.At(ip)<0) break;
812 TVector3* part = (TVector3*) GetAt(list.At(ip));
815 TVector3 vtmp(*part);
816 GetLocalMom(vec, &vtmp);
818 Double_t xx=vtmp.X(); //part->Mag()*TMath::Sin(thetaLoc)*TMath::Cos(phiLoc);
819 Double_t yy=vtmp.Y(); //part->Mag()*TMath::Sin(thetaLoc)*TMath::Sin(phiLoc);
821 Double_t x1 = (xx-xmean)*TMath::Cos(Phi) +(yy-ymean)*TMath::Sin(Phi);
822 if(x1 > xmax) xmax = x1;
823 if(x1 < xmin) xmin = x1;
827 if(TMath::Abs(xmin) > xmax) Phi+=TMath::Pi();
832 while(Phi>TwoPi) Phi-=TwoPi;
840 Bool_t AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeTool::FindCorrelationAxesCorr(TArrayI list, TVector3 vec, Double_t &Phi, Int_t scenario, Double_t R)
842 // scenario 0- Pmax, 1-Pzmax_Local, 2->cosMin, 3-PTmac, 4->PTmax_Local
844 Double_t xmean , ymean;
846 Double_t TwoPi = TMath::TwoPi();
859 // Double_t phiLoc, thetaLoc;
863 Int_t Nev = list.GetSize();
864 if( Nev <2) return kFALSE;
871 if(scenario==2) val = 100;
872 Double_t phiDir = -99;
876 for(Int_t ip=0; ip< Nev; ip++) {
877 if(list.At(ip)<0) break;
879 TVector3* part = (TVector3*) GetAt(list.At(ip));
884 TVector3 vtmp(*part);
885 GetLocalMom(vec, &vtmp);
886 Double_t xx=vtmp.X(); //part->Mag()*TMath::Sin(thetaLoc)*TMath::Cos(phiLoc);
887 Double_t yy=vtmp.Y(); //part->Mag()*TMath::Sin(thetaLoc)*TMath::Sin(phiLoc);
890 xx = CalcdPhi(part->Phi(), vec.Phi());
891 yy = part->Eta() - vec.Eta();
910 else if(scenario ==1)
919 else if(scenario ==2)
936 // phiDir=vtmp.Phi();
937 phiDir=TMath::ATan2(yy, xx); //vtmp.Phi();
944 if(N<2) return kFALSE;
945 if(scenario!=4 && Index<0) return kFALSE;
957 Double_t B = x2-x*x+y*y-y2;
958 Double_t D = TMath::Sqrt(B*B+4*A*A);
960 // printf("N = %d A = %f\n",N, A);
963 Double_t a1 = (-B+D)/2/A;
964 // Double_t a2 = (-B-D)/2/A;
965 // Double_t b1 = y-a1*x;
966 // Double_t b2 = y-a2*x;
967 // Double_t phiDir = TMath::ATan2(y, x);
968 // while(phiDir<0) phiDir+=TwoPi;
969 Double_t phi = TMath::ATan(a1);
971 Phi=CalcdPhi0To2pi(phi, 0);
972 if( TMath::Abs(CalcdPhi(phiDir, phi)) > TMath::Pi()/2)
973 Phi=CalcdPhi0To2pi(phi+TMath::Pi(), 0);
985 Double_t phiMinus = 0;
987 for(Int_t ip=0; ip< Nev; ip++)
989 if(list.At(ip)<0) break;
991 TVector3* part = (TVector3*) GetAt(list.At(ip));
993 Double_t xx0 = CalcdPhi(part->Phi(), vec.Phi());
994 Double_t yy0 = part->Eta() - vec.Eta();
996 Double_t xx = (x*N - xx0)/(N-1);
997 Double_t yy = (y*N - yy0)/(N-1);
998 Double_t xx2 = (x2*N - xx0*xx0)/(N-1);
999 Double_t yy2 = (y2*N - yy0*yy0)/(N-1);
1000 Double_t xxyy= (xy*N - xx0*yy0)/(N-1);
1003 Double_t AA = xxyy-xx*yy;
1004 Double_t BB = xx2-xx*xx+yy*yy-yy2;
1005 Double_t DD = TMath::Sqrt(BB*BB+4*AA*AA);
1006 Double_t aa1 = (-BB+DD)/2/AA;
1007 Double_t phi1 = TMath::ATan(aa1);
1009 if( TMath::Abs(CalcdPhi(phiDir, phi1)) > TMath::Pi()/2)
1012 phiMinus+=CalcdPhi(Phi, phi1);
1018 Double_t phiPlus = 0;
1020 for(Int_t ip=0; ip< -Nev; ip++)
1022 if(list.At(ip)<0) break;
1024 TVector3* part = (TVector3*) GetAt(list.At(ip));
1026 Double_t rtmp = gRandom->Uniform(0, R);
1027 Double_t phitmp = gRandom->Uniform(0, TMath::TwoPi());
1028 Double_t xx0 = rtmp*TMath::Cos(phitmp);
1029 Double_t yy0 = rtmp*TMath::Sin(phitmp);
1031 Double_t xx = (x*N + xx0)/(N+1);
1032 Double_t yy = (y*N + yy0)/(N+1);
1033 Double_t xx2 = (x2*N + xx0*xx0)/(N+1);
1034 Double_t yy2 = (y2*N + yy0*yy0)/(N+1);
1035 Double_t xxyy= (xy*N + xx0*yy0)/(N+1);
1038 Double_t AA = xxyy-xx*yy;
1039 Double_t BB = xx2-xx*xx+yy*yy-yy2;
1040 Double_t DD = TMath::Sqrt(BB*BB+4*AA*AA);
1041 Double_t aa1 = (-BB+DD)/2/AA;
1042 Double_t phi1 = TMath::ATan(aa1);
1044 if( TMath::Abs(CalcdPhi(phiDir, phi1)) > TMath::Pi()/2)
1047 phiPlus+=CalcdPhi(Phi, phi1);
1053 Phi+=((phiMinus+phiPlus)/(Nminus+Nplus+1));
1055 if( TMath::Abs(CalcdPhi(phiDir, Phi)) > TMath::Pi()/2)
1058 Phi=CalcdPhi0To2pi(Phi, 0);
1064 Double_t xmax = -100;
1065 Double_t xmin = 100;
1071 for(Int_t ip=0; ip< Nev; ip++) {
1072 if(list.At(ip)<0) break;
1074 TVector3* part = (TVector3*) GetAt(list.At(ip));
1077 TVector3 vtmp(*part);
1078 GetLocalMom(vec, &vtmp);
1080 Double_t xx=vtmp.X(); //part->Mag()*TMath::Sin(thetaLoc)*TMath::Cos(phiLoc);
1081 Double_t yy=vtmp.Y(); //part->Mag()*TMath::Sin(thetaLoc)*TMath::Sin(phiLoc);
1083 Double_t x1 = (xx-xmean)*TMath::Cos(Phi) +(yy-ymean)*TMath::Sin(Phi);
1084 if(x1 > xmax) xmax = x1;
1085 if(x1 < xmin) xmin = x1;
1089 if(TMath::Abs(xmin) > xmax) Phi+=TMath::Pi();
1094 while(Phi>TwoPi) Phi-=TwoPi;
1100 /////////////////////////////////////
1102 TH2F *fhPhiEtaTrack;//!
1104 TH1F *fhTMA_JAA[3];//!
1105 TH1F *fhTMA_JAp[3];//!
1106 TH1F *fhTMA_B1AA[3];//!
1107 TH1F *fhTMA_B1Ap[3];//!
1108 TH1F *fhTMA_B2AA[3];//!
1109 TH1F *fhTMA_B2Ap[3];//!
1113 TArrayD fPtJetArray;
1116 Int_t fPsiVsPhiNbin;
1119 Double_t fEtaTrackMax;
1120 Double_t fPtTrackMin;
1121 Double_t fPtTrackMax;
1129 AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeHM::AliAnalysisTaskJetShapeHM(TString comment, Bool_t kMC):TObject(),
1154 for(Int_t i=0; i<3; i++)
1175 fJvec.SetXYZ(0,0,0);
1180 AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeHM::~AliAnalysisTaskJetShapeHM()
1184 delete [] fPtJetArray;
1190 void AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeHM::SetPtJetBins(Int_t Nbin, Double_t *array)
1195 delete [] fPtJetArray;
1199 fPtJetArray = new Double_t[fPtJetNbin+1];
1200 for(Int_t i=0; i<= fPtJetNbin; i++) fPtJetArray[i]= array[i];
1205 fPtJetArray.Set(fPtJetNbin+1, array);
1209 void AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeHM::InitHistos()
1212 fhEvent = Hist1D("hEvent" , 3 , -0.5, 2.5, "Event");
1213 fhMult = Hist1D("hMult" , 101, -0.5, 100.5, "N_{ch}");
1215 fhPhiEtaTrack = Hist2D("hPhiEtaTrack", 100, 0, TMath::TwoPi(), 20, -1, 1., "#phi_{tr}", "#eta_{tr}");
1219 Double_t array[]= {0., 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 130, 160, 200};
1220 SetPtJetBins(Nbin, array);
1223 fhPtJ = Hist1D("hPtJ" , fPtJetNbin, fPtJetArray.GetArray(), "Pt_{J} GeV/c");
1224 fhPsiVsR = Hist1D("hPsiVsR", fPsiVsRNbin, 0., fRmax, "R", 1, "#Psi(R)");
1225 fhPsiVsRPtJ = Hist2D("hPsiVsRPtJ", fPsiVsRNbin, 0., fRmax, fPtJetNbin, fPtJetArray.GetArray(), "R", "P_{tJ} GeV/c", 1, "#Psi(R)");
1227 fhPtJvsPtCorr = Hist2D("fhPtJvsPtCorr", fPtJetNbin, fPtJetArray.GetArray(), 100, -100, 100, "P_{tJ} GeV/c", "P_{tJ} - P_{tJ,corr} GeV/c" , 1);
1229 for(Int_t i=0; i<3; i++)
1231 fhTMA_JAA[i] = Hist1D(Form("fhTMA_JAA_%d",i), fPsiVsPhiNbin, 0, TMath::TwoPi(), "#phi_{R}", 1, "#Psi(#phi_{R})");
1232 fhTMA_JAp[i] = Hist1D(Form("fhTMA_JAp_%d",i), fPsiVsPhiNbin, 0, TMath::TwoPi(), "#phi_{R}", 1, "#Psi(#phi_{R})");
1234 fhTMA_B1AA[i] = Hist1D(Form("fhTMA_B1AA_%d",i), fPsiVsPhiNbin, 0, TMath::TwoPi(), "#phi_{R}", 1, "#Psi(#phi_{R})");
1235 fhTMA_B1Ap[i] = Hist1D(Form("fhTMA_B1Ap_%d",i), fPsiVsPhiNbin, 0, TMath::TwoPi(), "#phi_{R}", 1, "#Psi(#phi_{R})");
1237 fhTMA_B2AA[i] = Hist1D(Form("fhTMA_B2AA_%d",i), fPsiVsPhiNbin, 0, TMath::TwoPi(), "#phi_{R}", 1, "#Psi(#phi_{R})");
1238 fhTMA_B2Ap[i] = Hist1D(Form("fhTMA_B2Ap_%d",i), fPsiVsPhiNbin, 0, TMath::TwoPi(), "#phi_{R}", 1, "#Psi(#phi_{R})");
1248 void AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeHM::AddToList(TList *list)
1252 list->Add(fhPhiEtaTrack);
1254 list->Add(fhPsiVsR);
1255 list->Add(fhPsiVsRPtJ);
1256 list->Add(fhPtJvsPtCorr);
1258 for(Int_t i=0; i<3; i++)
1260 list->Add(fhTMA_JAA[i]);
1261 list->Add(fhTMA_JAp[i]);
1263 list->Add(fhTMA_B1AA[i]);
1264 list->Add(fhTMA_B1Ap[i]);
1266 list->Add(fhTMA_B2AA[i]);
1267 list->Add(fhTMA_B2Ap[i]);
1276 Bool_t AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeHM::AddEvent(AliAODEvent* aodE, AliAODJet *jet, Double_t DeltaPtJ)
1281 Int_t size = aodE->GetNumberOfTracks();
1283 TClonesArray *arrP = 0;
1287 arrP = dynamic_cast<TClonesArray*>(aodE->FindListObject(AliAODMCParticle::StdBranchName()));
1290 printf("ERROR: no Info about particles in AOD\n");
1293 size = arrP->GetEntriesFast();
1297 Int_t IndexArray[size];
1299 TClonesArray farray("TVector3", size);
1302 Int_t counterAll = 0;
1303 Double_t pJ[3] = {0, 0, 0};
1306 TVector3 vecJ(jet->Px(),jet->Py(),jet->Pz());
1308 for(int it = 0;it < size;++it){
1314 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(arrP->At(it));
1316 if(!part->IsPhysicalPrimary())continue;
1317 if(part->Charge()==0)continue;
1318 vec.SetXYZ(part->Px(), part->Py(), part->Pz());
1322 AliAODTrack *tr = aodE->GetTrack(it);
1324 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue;
1325 vec.SetXYZ(tr->Px(), tr->Py(), tr->Pz());
1329 if(TMath::Abs(vec.Eta())>fEtaTrackMax)continue;
1330 if(vec.Pt()< fPtTrackMin)continue;
1331 if(vec.Pt()> fPtTrackMax) {return kFALSE;}
1334 new(farray[counterAll]) TVector3(vec);
1338 Double_t R = CalcR(vecJ, vec);
1339 if(R> fRmax) continue;
1345 IndexArray[counter] = it;
1349 fhMult->Fill(counter);
1350 if(counter<1) return kFALSE;
1352 fJvec.SetXYZ(pJ[0], pJ[1], pJ[2]);
1354 fPtJ = TMath::Sqrt(pJ[0]*pJ[0] + pJ[1]*pJ[1]);
1355 if((fPtJ < fPtJmin) || (fPtJ > fPtJmax)) return kFALSE;
1358 fhPtJvsPtCorr->Fill(fPtJ, jet->Px() - DeltaPtJ);
1360 for(Int_t it = 0; it<counter; it++)
1366 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(arrP->At(IndexArray[it]));
1367 vec.SetXYZ(part->Px(), part->Py(), part->Pz());
1371 AliAODTrack *tr = aodE->GetTrack(IndexArray[it]);
1372 vec.SetXYZ(tr->Px(), tr->Py(), tr->Pz());
1375 Double_t R = CalcR(fJvec, vec);
1376 // Double_t pt = (tr->Px()*pJ[0] + tr->Py()*pJ[1])/PtJ;
1377 Double_t probL = fJvec.Dot(vec)/fJvec.Mag2();
1378 fhPsiVsR->Fill(R, probL);
1379 fhPsiVsRPtJ->Fill(R, fPtJ, probL);
1381 Double_t phi = vec.Phi();
1382 while(phi<0) phi+=TMath::TwoPi();
1383 while(phi>TMath::TwoPi()) phi-=TMath::TwoPi();
1384 fhPhiEtaTrack->Fill(phi, vec.Eta());
1390 // fMyTool->Clean();
1391 AliAnalysisTaskJetShapeTool *fMyTool = new AliAnalysisTaskJetShapeTool(&farray);
1393 fMyTool->SetNEntries(counterAll);
1394 fMyTool->SetVecJ(vecJ);
1395 fMyTool->SetPtMinTr(fPtTrackMin,fPtTrackMin);
1400 to be added!!!!!!!!!
1405 for(Int_t l=0; l<3; l++)
1407 Double_t phiA, phi1;
1409 // Double_t ptRJ0= fMyTool->GetPRecInRJ().Pt();
1410 // Double_t ptRJ = fMyTool->GetPRecJ(l,0).Pt();
1411 Int_t N1 = fMyTool->GetSizeJ(l,1);
1412 Double_t dphi = -999;
1415 if(!fMyTool->FindCorrelationAxes(fMyTool->GetListJ(l, 0) , vecJ, phiA, scenario))
1418 // f2JEvent->SetPhiJL(l,0, phiA);
1420 if(fMyTool->FindCorrelationAxes(fMyTool->GetListJ(l, 1) , vecJ, phi1, scenario))
1422 fhTMA_JAA[l]->Fill(fMyTool->CalcdPhi0To2pi(phiA-phi1));
1426 for(Int_t ip =0; ip<N1; ip++)
1428 phi1 = fMyTool->GetLocPhiJ(l,1,ip);
1429 dphi = fMyTool->CalcdPhi0To2pi(phiA, phi1);
1430 fhTMA_JAp[l]->Fill(dphi);
1434 Int_t NB1 = fMyTool->GetSizeB1(l, 1);
1435 for(Int_t ip =0; ip<NB1; ip++)
1437 phi1 = fMyTool->GetLocPhiB1(l,1,ip);
1438 dphi = fMyTool->CalcdPhi0To2pi(phiA, phi1);
1439 fhTMA_B1Ap[l]->Fill(dphi);
1442 Int_t NB2 = fMyTool->GetSizeB2(l, 1);
1443 for(Int_t ip =0; ip<NB2; ip++)
1445 phi1 = fMyTool->GetLocPhiB2(l,1,ip);
1446 dphi = fMyTool->CalcdPhi0To2pi(phiA, phi1);
1447 fhTMA_B2Ap[l]->Fill(dphi);
1460 Double_t AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeHM::CalcR(TVector3 v1, TVector3 v2)
1463 Double_t dphi = CalcdPhi(v1.Phi(), v2.Phi());
1464 Double_t deta = v1.Eta() - v2.Eta();
1465 Double_t RB = TMath::Sqrt(dphi*dphi+deta*deta);
1470 Double_t AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeHM::CalcdPhi(Double_t phi1, Double_t phi2)
1473 while(phi1<0) phi1+=TMath::TwoPi();
1474 while(phi1>TMath::TwoPi()) phi1-=TMath::TwoPi();
1476 while(phi2<0) phi2+=TMath::TwoPi();
1477 while(phi2>TMath::TwoPi()) phi2-=TMath::TwoPi();
1479 Double_t dphi = phi1- phi2;
1480 if(dphi>TMath::Pi())dphi = dphi - 2.*TMath::Pi();
1481 if(dphi<(-1.*TMath::Pi()))dphi = dphi + 2.*TMath::Pi();
1489 TH1F* AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeHM::Hist1D(const char* name, Int_t nBins, Double_t xMin, Double_t xMax, const char* xLabel, Int_t color, const char* yLabel)
1491 // create a 1D histogram
1493 TH1F* res = new TH1F(Form("%s_%s",fComment.Data(), name), Form("%s_%s",fComment.Data(), name), nBins, xMin, xMax);
1494 if (xLabel) res->GetXaxis()->SetTitle(xLabel);
1495 if (yLabel) res->GetYaxis()->SetTitle(yLabel);
1496 res->SetLineColor(color);
1501 TH1F* AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeHM::Hist1D(const char* name, Int_t nBins, Double_t *xArray, const char* xLabel, Int_t color, const char* yLabel)
1503 // create a 1D histogram
1505 TH1F* res = new TH1F(Form("%s_%s",fComment.Data(), name), Form("%s_%s",fComment.Data(), name), nBins, xArray);
1506 if (xLabel) res->GetXaxis()->SetTitle(xLabel);
1507 if (yLabel) res->GetYaxis()->SetTitle(yLabel);
1508 res->SetLineColor(color);
1512 TH2F *AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeHM::Hist2D(const char* name, Int_t nBinsx, Double_t xMin, Double_t xMax, Int_t nBinsy, Double_t yMin, Double_t yMax, const char* xLabel, const char* yLabel, Int_t color)
1514 // create a 2D histogram
1516 TH2F *res = new TH2F(Form("%s_%s",fComment.Data(), name), Form("%s_%s",fComment.Data(), name), nBinsx, xMin, xMax, nBinsy, yMin, yMax);
1517 if (xLabel) res->GetXaxis()->SetTitle(xLabel);
1518 if (yLabel) res->GetYaxis()->SetTitle(yLabel);
1519 // res->SetMarkerStyle(kFullCircle);
1520 // res->SetOption("E");
1521 res->SetLineColor(color);
1522 // fOutputList->Add(res);
1527 TH2F *AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeHM::Hist2D(const char* name, Int_t nBinsx, Double_t xMin, Double_t xMax, Int_t nBinsy, Double_t *yArray, const char* xLabel, const char* yLabel, Int_t color, const char* zLabel)
1529 // create a 2D histogram
1531 TH2F *res = new TH2F(Form("%s_%s",fComment.Data(), name), Form("%s_%s",fComment.Data(), name), nBinsx, xMin, xMax, nBinsy, yArray);
1532 if (xLabel) res->GetXaxis()->SetTitle(xLabel);
1533 if (yLabel) res->GetYaxis()->SetTitle(yLabel);
1534 if (zLabel) res->GetZaxis()->SetTitle(zLabel);
1535 // res->SetMarkerStyle(kFullCircle);
1536 // res->SetOption("E");
1537 res->SetLineColor(color);
1538 // fOutputList->Add(res);
1542 TH2F *AliAnalysisTaskJetShape::AliAnalysisTaskJetShapeHM::Hist2D(const char* name, Int_t nBinsx, Double_t *yArrax, Int_t nBinsy, Double_t yMin, Double_t yMax, const char* xLabel, const char* yLabel, Int_t color, const char* zLabel)
1544 // create a 2D histogram
1546 TH2F *res = new TH2F(Form("%s_%s",fComment.Data(), name), Form("%s_%s",fComment.Data(), name), nBinsx, yArrax, nBinsy, yMin, yMax);
1547 if (xLabel) res->GetXaxis()->SetTitle(xLabel);
1548 if (yLabel) res->GetYaxis()->SetTitle(yLabel);
1549 if (zLabel) res->GetZaxis()->SetTitle(zLabel);
1550 // res->SetMarkerStyle(kFullCircle);
1551 // res->SetOption("E");
1552 res->SetLineColor(color);
1553 // fOutputList->Add(res);
1559 //////////////////////////////////////
1563 //________________________________________________________________________
1564 void AnalysisJetMain::ConnectInputData(Option_t *)
1569 fESD=dynamic_cast<AliESDEvent*>(InputEvent());
1571 // AliError("ESD not available");
1572 // fAODIn = dynamic_cast<AliAODEvent*>(InputEvent());}
1573 // fAODOut = dynamic_cast<AliAODEvent*>(AODEvent());
1575 fAODIn = dynamic_cast<AliAODEvent*>(InputEvent());
1576 // assume that the AOD is in the general output...
1577 fAODOut = AODEvent();
1583 void AliAnalysisTaskJetShape::SetBranchNames(const TString &branch1, const TString &branch2)
1585 fJetBranchName[0] = branch1;
1586 fJetBranchName[1] = branch2;
1589 //________________________________________________________________________
1590 void AliAnalysisTaskJetShape::UserCreateOutputObjects()
1592 //printf("Open1\n");
1593 // const char *nameF = OpenFile(1)->GetName();
1594 //printf("Open2 %s\n",nameF);
1596 // fTriggerAnalysis = new AliTriggerAnalysis();
1597 // if (fkMC) fTriggerAnalysis->SetAnalyzeMC(1);
1600 fOutputList = new TList();
1601 fOutputList->SetOwner();
1603 fhPtJL = Hist1D("hPtJL", 100, 0, 200, "Pt_{JL}"); fOutputList->Add(fhPtJL);
1604 fhAreaJL = Hist1D("hAreaJL", 100, 0., 4, "AreaJL"); fOutputList->Add(fhAreaJL);
1607 fanalJetSubStrHM->SetFilterMask(fFilterMask);
1608 fanalJetSubStrHM->InitHistos();
1609 fanalJetSubStrHM->AddToList(fOutputList);
1611 printf("AliAnalysisTaskJetShape::UserCreateOutputObjects() \n");
1616 printf("AliAnalysisTaskJetShape::UserCreateOutputObjects() MC\n");
1617 fanalJetSubStrMCHM->InitHistos();
1618 fanalJetSubStrMCHM->AddToList(fOutputList);
1624 PostData(1, fOutputList);
1629 fOutputTree = new TTree("tree","Tree with Ali2JEvent");
1630 fOutputTree->Branch("event",&f2JEvent);
1633 // PostData(1, fOutputTree);
1637 Bool_t AliAnalysisTaskJetSpectrum2::Notify()
1640 // Fetch the aod also from the input in,
1641 // have todo it in notify
1644 fAODIn = dynamic_cast<AliAODEvent*>(InputEvent());
1645 // assume that the AOD is in the general output...
1646 fAODOut = AODEvent();
1648 if(fNonStdFile.Length()!=0){
1649 // case that we have an AOD extension we need can fetch the jets from the extended output
1650 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
1651 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
1653 if(fDebug>1)Printf("AODExtension found for %s",fNonStdFile.Data());
1666 //________________________________________________________________________
1667 void AliAnalysisTaskJetShape::UserExec(Option_t *)
1672 // f2JEvent = new Ali2JEvent();
1676 if(fDebug) printf("NEW EVENT 0\n");
1678 if(!IsGoodEvent()) return;
1680 if(fDebug) printf("NEW EVENT 1\n");
1682 // printf("\n\n\n NEW EVENT\n");
1683 if(fDebug) Printf("Event #%5d", (Int_t) fEntry);
1685 AliAODEvent* aodE = 0;
1687 if(!fESD)aodE = fAODIn;
1688 else aodE = fAODOut;}
1692 // centrality selection
1693 AliCentrality *cent = 0x0;
1694 Double_t centrality = 0.;
1696 if(fESD) {cent = fESD->GetCentrality();
1697 if(cent) centrality = cent->GetCentralityPercentile("V0M");}
1698 else centrality=aodE->GetHeader()->GetCentrality();
1705 if(fDebug) printf("NEW EVENT 2\n");
1707 Bool_t fUseAOD049 = kFALSE;// kTRUE;//
1708 if(fUseAOD049&¢rality>=0){
1710 AliAODVZERO* aodV0 = aodE->GetVZEROData();
1711 v0+=aodV0->GetMTotV0A();
1712 v0+=aodV0->GetMTotV0C();
1713 if(centrality==0 && v0 < 19500) return ;//filtering issue
1714 Float_t tkl = (Float_t)(aodE->GetTracklets()->GetNumberOfTracklets());
1715 Float_t val= 1.30552 + 0.147931 * v0;
1716 Float_t tklSigma[101]={176.644, 156.401, 153.789, 153.015, 142.476, 137.951, 136.127, 129.852, 127.436, 124.86, 120.788, 115.611, 113.172, 110.496,
1717 109.127, 104.421, 102.479, 99.9766, 97.5152, 94.0654, 92.4602, 89.3364, 87.1342, 83.3497, 82.6216, 81.1084, 78.0793, 76.1234, 72.9434, 72.1334,
1718 68.0056, 68.2755, 66.0376, 62.9666, 62.4274, 59.65, 58.3776, 56.6361, 54.5184, 53.4224, 51.932, 50.8922, 48.2848, 47.912, 46.5717, 43.4114,
1719 43.2083, 41.3065, 40.1863, 38.5255, 37.2851, 37.5396, 34.4949, 33.8366, 31.8043, 31.7412, 30.8392, 30.0274, 28.8793, 27.6398, 26.6488, 25.0183,
1720 25.1489, 24.4185, 22.9107, 21.2002, 21.6977, 20.1242, 20.4963, 19.0235, 19.298, 17.4103, 16.868, 15.2939, 15.2939, 16.0295, 14.186, 14.186, 15.2173,
1721 12.9504, 12.9504, 12.9504, 15.264, 12.3674, 12.3674, 12.3674, 12.3674, 12.3674, 18.3811, 13.7544, 13.7544, 13.7544, 13.7544, 13.7544, 13.7544, 13.7544,
1722 13.7544, 13.7544, 13.7544, 13.7544, 13.7544};
1723 if ( TMath::Abs(tkl-val) > 6.*tklSigma[(Int_t)centrality] )
1728 if(fDebug) printf("centrality: %f\n", centrality);
1729 if (centrality < fCentMin || centrality > fCentMax){
1730 // PostData(1, fOutputList);
1734 // fhNEvent->Fill(0);
1737 // -- end event selection --
1740 // aodE->GetList()->Print();
1743 AliAODJetEventBackground* externalBackground = 0;
1744 AliAODJetEventBackground* externalBackgroundMC = 0;
1752 if(fAODOut&&!externalBackground&&fBackgroundBranch[0].Length()){
1753 externalBackground = (AliAODJetEventBackground*)(fAODOut->FindListObject(fBackgroundBranch[0].Data()));
1754 if(!externalBackground)Printf("%s:%d Background branch not found %s",(char*)__FILE__,__LINE__,fBackgroundBranch[0].Data());
1756 if(fAODExtension&&!externalBackground&&fBackgroundBranch[0].Length()){
1757 externalBackground = (AliAODJetEventBackground*)(fAODExtension->GetAOD()->FindListObject(fBackgroundBranch[0].Data()));
1758 if(!externalBackground)Printf("%s:%d Background branch not found %s",(char*)__FILE__,__LINE__,fBackgroundBranch[0].Data());
1760 if(fAODIn&&!externalBackground&&fBackgroundBranch[0].Length()){
1761 externalBackground = (AliAODJetEventBackground*)(fAODIn->FindListObject(fBackgroundBranch[0].Data()));
1762 if(!externalBackground)Printf("%s:%d Background branch not found %s",(char*)__FILE__,__LINE__,fBackgroundBranch[0].Data());
1764 if(fAODOut&&!externalBackgroundMC&&fBackgroundBranch[1].Length()){
1765 externalBackgroundMC = (AliAODJetEventBackground*)(fAODOut->FindListObject(fBackgroundBranch[1].Data()));
1766 if(!externalBackgroundMC)Printf("%s:%d MC Background branch not found %s",(char*)__FILE__,__LINE__,fBackgroundBranch[1].Data());
1768 if(fAODExtension&&!externalBackgroundMC&&fBackgroundBranch[1].Length()){
1769 externalBackgroundMC = (AliAODJetEventBackground*)(fAODExtension->GetAOD()->FindListObject(fBackgroundBranch[1].Data()));
1770 if(!externalBackgroundMC)Printf("%s:%d MC Background branch not found %s",(char*)__FILE__,__LINE__,fBackgroundBranch[1].Data());
1772 if(fAODIn&&!externalBackgroundMC&&fBackgroundBranch[1].Length()){
1773 externalBackgroundMC = (AliAODJetEventBackground*)(fAODIn->FindListObject(fBackgroundBranch[1].Data()));
1774 if(!externalBackgroundMC)Printf("%s:%d MC Background branch not found %s",(char*)__FILE__,__LINE__,fBackgroundBranch[1].Data());
1776 if(externalBackground)rho = externalBackground->GetBackground(0);
1777 if(externalBackgroundMC)rho_MC = externalBackgroundMC->GetBackground(0);
1783 // printf("rho = %f\n",rho);
1787 TClonesArray *Jets[2];
1790 if(fAODOut&&!Jets[0]){
1791 Jets[0] = dynamic_cast<TClonesArray*>(fAODOut->FindListObject(fJetBranchName[0].Data()));
1792 Jets[1] = dynamic_cast<TClonesArray*>(fAODOut->FindListObject(fJetBranchName[1].Data())); }
1793 if(fAODExtension && !Jets[0]){
1794 Jets[0] = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fJetBranchName[0].Data()));
1795 Jets[1] = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fJetBranchName[1].Data())); }
1796 if(fAODIn&&!Jets[0]){
1797 Jets[0] = dynamic_cast<TClonesArray*>(fAODIn->FindListObject(fJetBranchName[0].Data()));
1798 Jets[1] = dynamic_cast<TClonesArray*>(fAODIn->FindListObject(fJetBranchName[1].Data())); }
1802 Printf("no friend!!!\n");
1805 Int_t nJ = Jets[0]->GetEntries();
1809 if(fDebug) printf("NEW EVENT 3\n");
1813 // Find highest pT jet with pt > 20 GeV
1817 Float_t etaJmax = 0.4;
1819 for (Int_t i = 0; i < nJ; i++) {
1820 AliAODJet* jet = dynamic_cast<AliAODJet*> (Jets[0]->At(i));
1823 Float_t ptJ = jet->Pt();
1824 Float_t etaJ = TMath::Abs(jet->Eta());
1826 Float_t area = jet->EffectiveAreaCharged();
1827 Float_t ptJcorr=ptJ-rho*area;
1829 if ((ptJcorr > fPtJcorrMin) && (ptJcorr > ptmax) && etaJ < etaJmax) {
1838 AliAODJet* jetL = 0;
1840 Float_t areaJL, ptJLcorr;
1844 jetL = dynamic_cast<AliAODJet*> (Jets[0]->At(imax));
1845 areaJL = jetL->EffectiveAreaCharged();
1846 ptJLcorr = jetL->Pt()-rho*areaJL;
1848 fhPtJL->Fill(ptJLcorr);
1849 fhAreaJL->Fill(areaJL);
1850 vecJ.SetXYZ(jetL->Px(), jetL->Py(), jetL->Pz());
1851 fanalJetSubStrHM->AddEvent(aodE, jetL, rho*areaJL);
1858 PostData(1, fOutputList);
1863 nJ = Jets[1]->GetEntries();
1866 Float_t areaJL_MC=0;
1868 for (Int_t i = 0; i < nJ; i++) {
1869 AliAODJet* jet = dynamic_cast<AliAODJet*> (Jets[1]->At(i));
1871 Float_t ptJ1 = jet->Pt();
1872 Float_t etaJ1 = TMath::Abs(jet->Eta());
1874 areaJL_MC = jet->EffectiveAreaCharged();
1875 Float_t ptJcorr=ptJ1-rho*areaJL_MC;
1879 if ((ptJcorr > fPtJcorrMin) && (ptJcorr > ptmax) && etaJ1 < etaJmax) {
1887 AliAODJet* jetMCL=0;
1890 jetMCL = dynamic_cast<AliAODJet*> (Jets[1]->At(imax));
1891 fanalJetSubStrMCHM->AddEvent(aodE, jetMCL, rho_MC*areaJL_MC);
1898 PostData(1, fOutputList);
1906 Double_t AliAnalysisTaskJetShape::CalcdPhi(Double_t phi1, Double_t phi2)
1908 while(phi1<0) phi1+=TMath::TwoPi();
1909 while(phi1>TMath::TwoPi()) phi1-=TMath::TwoPi();
1911 while(phi2<0) phi2+=TMath::TwoPi();
1912 while(phi2>TMath::TwoPi()) phi2-=TMath::TwoPi();
1914 Double_t dphi = phi1- phi2;
1915 if(dphi>TMath::Pi())dphi = dphi - 2.*TMath::Pi();
1916 if(dphi<(-1.*TMath::Pi()))dphi = dphi + 2.*TMath::Pi();
1918 // Double_t dphi = phi1- phi2;
1919 // while(dphi<0) dphi+=TMath::TwoPi();
1920 // while(dphi>TMath::TwoPi()) dphi-=TMath::TwoPi();
1924 Double_t AliAnalysisTaskJetShape::CalcdPhi0To2pi(Double_t phi1, Double_t phi2)
1927 Double_t dphi = CalcdPhi(phi1, phi2);
1928 while(dphi<0) dphi+=TMath::TwoPi();
1929 while(dphi>TMath::TwoPi()) dphi-=TMath::TwoPi();
1934 Bool_t AliAnalysisTaskJetShape::IsGoodEvent()
1937 fESD=dynamic_cast<AliESDEvent*>(InputEvent());
1939 // AliError("ESD not available");
1940 // fAODIn = dynamic_cast<AliAODEvent*>(InputEvent());}
1941 // fAODOut = dynamic_cast<AliAODEvent*>(AODEvent());
1943 fAODIn = dynamic_cast<AliAODEvent*>(InputEvent());
1944 // assume that the AOD is in the general output...
1945 fAODOut = AODEvent();
1948 static AliAODEvent* aod = 0;
1949 // take all other information from the aod we take the tracks from
1951 if(!fESD)aod = fAODIn;
1952 else aod = fAODOut;}
1956 if(fNonStdFile.Length()!=0){
1957 // case that we have an AOD extension we need can fetch the jets from the extended output
1958 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
1959 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
1963 if(fAODIn) printf("fAODIn\n");
1964 if(fAODOut) printf("fAODOut\n");
1965 if(fAODExtension) printf("fAODExtension\n");
1968 // -- event selection --
1970 // physics selection
1971 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
1972 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
1973 // cout<<inputHandler->IsEventSelected()<<" "<<fOfflineTrgMask<<endl;
1974 if(!(inputHandler->IsEventSelected() & fOfflineTrgMask)){
1975 if(fDebug) Printf(" Trigger Selection: event REJECTED ... ");
1981 // if(fDebug) Printf("%s:%d No AOD",(char*)__FILE__,__LINE__);
1982 // fhNEvent->Fill(3);
1983 // PostData(1, fOutputList);
1987 AliAODVertex* primVtx = aod->GetPrimaryVertex();
1990 if(fDebug) Printf("%s:%d No primVtx",(char*)__FILE__,__LINE__);
1994 Int_t nTracksPrim = primVtx->GetNContributors();
1995 if ((nTracksPrim < fVtxMinContrib) ||
1996 (primVtx->GetZ() < fVtxZMin) ||
1997 (primVtx->GetZ() > fVtxZMax) ){
1998 if(fDebug) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
2003 // event class selection (from jet helper task)
2004 Int_t eventClass = AliAnalysisHelperJetTasks::EventClass();
2005 if(fDebug) Printf("Event class %d", eventClass);
2006 if (eventClass < fEvtClassMin || eventClass > fEvtClassMax){
2018 //________________________________________________________________________
2019 void AliAnalysisTaskJetShape::Terminate(Option_t *)
2021 // Draw result to the screen
2022 // Called once at the end of the query
2023 // fModuleMap = dynamic_cast<TH1F*> (fOutput->FindObject("fModuleMap"));
2025 printf("MyTaskTestTrigger::Terminate()\n\n\n");
2028 // fOutputList = dynamic_cast<TList*> (GetOutputData(1));
2029 // fOutputTree = dynamic_cast<TTree*> (GetOutputData(1));
2036 Bool_t AnalysisJetMain::GetVertex(const AliESDEvent* esd, Double_t Vxyz[3], Int_t type)
2041 const AliESDVertex* vtx = 0;
2044 vtx = esd->GetPrimaryVertexSPD();
2045 if(!vtx) return kFALSE;
2046 if(vtx->GetNContributors() < 1) return kFALSE;
2047 TString vtxTyp = vtx->GetTitle();
2048 if (vtxTyp.Contains("vertexer: Z")) {
2049 if (vtx->GetDispersion()>0.04) return kFALSE;
2050 if (vtx->GetZRes()>0.25) return kFALSE;
2055 vtx = esd->GetPrimaryVertexTracks();
2056 if(!vtx) return kFALSE;
2057 if(vtx->GetNContributors() < 1) return kFALSE;
2061 Vxyz[0] = vtx->GetXv();
2062 Vxyz[1] = vtx->GetYv();
2063 Vxyz[2] = vtx->GetZv();
2077 TH1F* AliAnalysisTaskJetShape::Hist1D(const char* name, Int_t nBins, Double_t xMin, Double_t xMax, const char* xLabel, Int_t color)
2079 // create a 1D histogram
2081 TH1F *h = new TH1F(name, name, nBins, xMin, xMax);
2082 if (xLabel) h->GetXaxis()->SetTitle(xLabel);
2083 // res->SetMarkerStyle(kFullCircle);
2084 // res->SetOption("E");
2085 h->SetLineColor(color);
2086 // fOutputList->Add(h);
2091 TH2F *AliAnalysisTaskJetShape::Hist2D(const char* name, Int_t nBinsx, Double_t xMin, Double_t xMax, Int_t nBinsy, Double_t yMin, Double_t yMax, const char* xLabel, const char* yLabel, Int_t color)
2093 // create a 2D histogram
2095 TH2F *res = new TH2F(name, name, nBinsx, xMin, xMax, nBinsy, yMin, yMax);
2096 if (xLabel) res->GetXaxis()->SetTitle(xLabel);
2097 if (xLabel) res->GetYaxis()->SetTitle(yLabel);
2098 // res->SetMarkerStyle(kFullCircle);
2099 // res->SetOption("E");
2100 res->SetLineColor(color);
2101 // fOutputList->Add(res);
2106 TH3F *AliAnalysisTaskJetShape::Hist3D(const char* name, Int_t nBinsx, Double_t xMin, Double_t xMax,
2107 Int_t nBinsy, Double_t yMin, Double_t yMax,
2108 Int_t nBinsz, Double_t zMin, Double_t zMax, const char* xLabel, const char* yLabel, const char* zLabel, Int_t color)
2110 // create a 3D histogram
2112 TH3F *res = new TH3F(name, name, nBinsx, xMin, xMax, nBinsy, yMin, yMax, nBinsz, zMin, zMax);
2113 if (xLabel) res->GetXaxis()->SetTitle(xLabel);
2114 if (yLabel) res->GetYaxis()->SetTitle(yLabel);
2115 if (zLabel) res->GetZaxis()->SetTitle(zLabel);
2116 // res->SetMarkerStyle(kFullCircle);
2117 // res->SetOption("E");
2118 res->SetLineColor(color);
2119 // fOutputList->Add(res);