]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Added classes to perform deuteron v2 with Scalar Product
authorlramona <Ramona.Lea@cern.ch>
Mon, 23 Jun 2014 13:00:22 +0000 (15:00 +0200)
committerlramona <Ramona.Lea@cern.ch>
Mon, 23 Jun 2014 13:00:22 +0000 (15:00 +0200)
PWGLF/CMakelibPWGLFSTRANGENESS.pkg
PWGLF/PWGLFSTRANGENESSLinkDef.h
PWGLF/STRANGENESS/Hypernuclei/AddTaskNucleiv2SP.C [new file with mode: 0644]
PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskNucleiv2.h
PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskNucleiv2SP.cxx [new file with mode: 0644]
PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskNucleiv2SP.h [new file with mode: 0644]

index f2d42269ee108b2c0725bf853f14a084cc5f51bd..c74cd2999afe3c941b69e8ed538502df6da31400 100644 (file)
@@ -66,7 +66,7 @@ set ( SRCS
   STRANGENESS/Hypernuclei/AliAnalysisTaskReadNuclexAOD.cxx
   STRANGENESS/Hypernuclei/AliAnalysisTaskAntiHe4.cxx
   STRANGENESS/Hypernuclei/AliAnalysisTaskNucleiv2.cxx
-
+  STRANGENESS/Hypernuclei/AliAnalysisTaskNucleiv2SP.cxx
 )
 
 string ( REPLACE ".cxx" ".h" HDRS "${SRCS}" )
@@ -75,7 +75,7 @@ set ( DHDR PWGLFSTRANGENESSLinkDef.h)
 
 set ( EXPORT )
 
-set ( EINCLUDE  PWGLF/STRANGENESS/Cascades PWGLF/STRANGENESS/LambdaK0 PWGLF/STRANGENESS/LambdaK0PbPb PWGLF/STRANGENESS/Correlations PWGLF/STRANGENESS/Hypernuclei STEER/ESD STEER/AOD STEER/STEERBase ANALYSIS)
+set ( EINCLUDE  PWGLF/STRANGENESS/Cascades PWGLF/STRANGENESS/LambdaK0 PWGLF/STRANGENESS/LambdaK0PbPb PWGLF/STRANGENESS/Correlations PWGLF/STRANGENESS/Hypernuclei STEER/ESD STEER/AOD STEER/STEERBase ANALYSIS PWG/FLOW/Base PWG/FLOW/Tasks)
 
 #install (DIRECTORY PWGLF/STRANGENESS/Cascades/macros
 #         DESTINATION PWGLF/STRANGENESS 
index 298103edaea10e8ade4240662b980c349722f7ae..86a8a4b496702e6697ec2c4c4e2a518c0aea4942 100644 (file)
@@ -45,4 +45,5 @@
 #pragma link C++ class AliAnalysisTaskReadNuclexAOD+;
 #pragma link C++ class AliAnalysisTaskAntiHe4+;
 #pragma link C++ class AliAnalysisTaskNucleiv2+;
+#pragma link C++ class AliAnalysisTaskNucleiv2SP+;
 #endif
diff --git a/PWGLF/STRANGENESS/Hypernuclei/AddTaskNucleiv2SP.C b/PWGLF/STRANGENESS/Hypernuclei/AddTaskNucleiv2SP.C
new file mode 100644 (file)
index 0000000..5b8c4f2
--- /dev/null
@@ -0,0 +1,35 @@
+class AliAnalysisDataContainer;
+
+AliAnalysisTask *AddTaskNucleiv2SP(TString name="name"){
+  
+  //get the current analysis manager
+  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+  if (!mgr) {
+    Error("AddTaskNucleiv2", "No analysis manager found.");
+    return 0;
+  }
+  
+  //========= Add task to the ANALYSIS manager =====
+
+  AliAnalysisTaskNucleiv2SP *task = new   AliAnalysisTaskNucleiv2SP(name);
+
+  //================================================
+  //              data containers
+  //================================================
+  //            find input container
+
+  AliAnalysisDataContainer *cinput   = mgr->GetCommonInputContainer();
+  
+  TString outputFileName = AliAnalysisManager::GetCommonFileName();
+  AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("clisthist", TList::Class(), AliAnalysisManager::kOutputContainer, outputFileName);
+    //           connect containers
+  mgr->ConnectInput  (task,  0, cinput );
+  mgr->ConnectOutput (task,  1, coutput1);
+  mgr->AddTask(task);
+  return task;
+}
+
index 501f33e3c89c0aa64944cbeac42445df40271799..66da86025fa25ac78461b844164528357aa6d2fa 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef ALIANALYSISTASKOVERPROTON_H
-#define ALIANALYSISTASKOVERPROTON_H
+#ifndef ALIANALYSISTASKNUCLEIV2_H
+#define ALIANALYSISTASKNUCLEIV2_H
 
 /*  See cxx source for full Copyright notice */
 
diff --git a/PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskNucleiv2SP.cxx b/PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskNucleiv2SP.cxx
new file mode 100644 (file)
index 0000000..1194361
--- /dev/null
@@ -0,0 +1,672 @@
+/**************************************************************************
+ * Contributors are not mentioned at all.                                 *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright noticxse appears in all *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+//-----------------------------------------------------------------
+//                 AliAnalysisTaskNucleiv2SP class
+//-----------------------------------------------------------------
+
+class TTree;
+class TParticle;
+class TVector3;
+
+#include "AliAnalysisManager.h"
+#include <AliMCEventHandler.h>
+#include <AliMCEvent.h>
+#include <AliStack.h>
+
+class AliESDVertex;
+class AliAODVertex;
+class AliESDv0;
+class AliAODv0; 
+
+#include <iostream>
+
+#include "TList.h"
+#include "TH1.h"
+#include "TH2.h"
+#include "TH3.h"
+#include "TNtuple.h"
+#include "TGraph.h"
+#include "TF1.h"
+#include "TCanvas.h"
+#include "TMath.h"
+#include "TChain.h"
+#include "Riostream.h"
+#include "AliLog.h"
+#include "AliCascadeVertexer.h"
+#include "AliESDEvent.h"
+#include "AliESDtrack.h"
+#include "AliExternalTrackParam.h"
+#include "AliAODEvent.h"
+#include "AliInputEventHandler.h"
+#include "AliESDcascade.h"
+#include "AliAODcascade.h"
+#include "AliAnalysisTaskNucleiv2SP.h"
+#include "AliESDtrackCuts.h"
+#include "AliCentrality.h"
+
+
+ClassImp(AliAnalysisTaskNucleiv2SP)
+
+using std::cout;
+using std::endl;
+    
+//________________________________________________________________________
+AliAnalysisTaskNucleiv2SP::AliAnalysisTaskNucleiv2SP() 
+  : AliAnalysisTaskSE(), 
+    fListHist(0), 
+    fHistEventMultiplicity(0), 
+    fHistTrackMultiplicity(0),
+    fHistTrackMultiplicityCentral(0),    
+    fHistTrackMultiplicitySemiCentral(0),
+    fHistTrackMultiplicityMB(0),
+    fhBB(0),
+    fhBBDeu(0),
+    fhPtDeu(0),
+    fhTOF(0),
+    fhMassTOF(0),
+    EPVzAvsCentrality(0), 
+    EPVzCvsCentrality(0), 
+    EPTPCvsCentrality(0), 
+    EPVzvsCentrality(0), 
+    EPTPCpvsCentrality(0), 
+    EPTPCnvsCentrality(0), 
+    hEvPlaneTPCvsEvPVz05(0),                      
+    hEvPlaneTPCvsEvPVz075(0), 
+    hEvPlaneTPCvsEvPVz1530(0),
+    hEvPlaneTPCvsEvPVz3050(0),                      
+    hEvPlaneTPCvsEvPVz2040(0),                      
+    hEvPlaneTPCvsEvPVz4060(0),       
+    hCos2DeltaTPCVzAvsCentrality(0),
+    hCos2DeltaTPCVzCvsCentrality(0),
+    hCos2DeltaVzAVzCvsCentrality(0),
+    hCos2DeltaVzMVzAvsCentrality(0),
+    hCos2DeltaVzMVzCvsCentrality(0),
+    hCos2DeltaVzATPCvsCentrality(0),
+    hCos2DeltaVzCTPCvsCentrality(0),
+    hCos2DeltaVzCVzAvsCentrality(0),
+    hQVzAQVzCvsCentrality(0),
+    fHistRealTracks(0),
+    fESDtrackCuts(0),
+    fESDtrackCutsEP(0),
+    fPIDResponse(0)
+{
+  // Dummy Constructor 
+  fESDtrackCuts = new AliESDtrackCuts("AliESDtrackCuts","AliESDtrackCuts");
+  //
+  Initialize();
+}
+
+//________________________________________________________________________
+AliAnalysisTaskNucleiv2SP::AliAnalysisTaskNucleiv2SP(const char *name) 
+  :  AliAnalysisTaskSE(name), 
+     fListHist(0), 
+     fHistEventMultiplicity(0), 
+     fHistTrackMultiplicity(0),
+     fHistTrackMultiplicityCentral(0),    
+     fHistTrackMultiplicitySemiCentral(0),
+     fHistTrackMultiplicityMB(0),
+     fhBB(0),
+     fhBBDeu(0),
+     fhPtDeu(0),
+     fhTOF(0),
+     fhMassTOF(0),
+     EPVzAvsCentrality(0), 
+     EPVzCvsCentrality(0), 
+     EPTPCvsCentrality(0), 
+     EPVzvsCentrality(0), 
+     EPTPCpvsCentrality(0), 
+     EPTPCnvsCentrality(0), 
+     hEvPlaneTPCvsEvPVz05(0),                      
+     hEvPlaneTPCvsEvPVz075(0), 
+     hEvPlaneTPCvsEvPVz1530(0),
+     hEvPlaneTPCvsEvPVz3050(0),                      
+     hEvPlaneTPCvsEvPVz2040(0),                      
+     hEvPlaneTPCvsEvPVz4060(0),       
+     hCos2DeltaTPCVzAvsCentrality(0),
+     hCos2DeltaTPCVzCvsCentrality(0),
+     hCos2DeltaVzAVzCvsCentrality(0),
+     hCos2DeltaVzMVzAvsCentrality(0),
+     hCos2DeltaVzMVzCvsCentrality(0),
+     hCos2DeltaVzATPCvsCentrality(0),
+     hCos2DeltaVzCTPCvsCentrality(0),
+     hCos2DeltaVzCVzAvsCentrality(0),
+     hQVzAQVzCvsCentrality(0),
+     fHistRealTracks(0),
+     fESDtrackCuts(0),
+     fESDtrackCutsEP(0),
+     fPIDResponse(0)
+     
+     
+{
+  // Define input and output slots here
+  // Input slot #0 works with a TChain
+  //DefineInput(0, TChain::Class());
+  // Output slot #0 writes into a TList container ()
+
+  //
+  // create track cuts
+  //
+  fESDtrackCuts = new AliESDtrackCuts("AliESDtrackCuts","AliESDtrackCuts");
+  fESDtrackCutsEP = new AliESDtrackCuts("AliESDtrackCutsEP","AliESDtrackCutsEP");
+  //
+  Initialize();
+
+  DefineInput(0, TChain::Class());
+  DefineOutput(1, TList::Class());
+  
+}
+
+void AliAnalysisTaskNucleiv2SP::Initialize()
+{
+  //
+  // updating parameters in case of changes
+  //
+  fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE,kTRUE);
+  fESDtrackCuts->SetMaxDCAToVertexXY(3);
+  fESDtrackCuts->SetMaxDCAToVertexZ(2);
+  fESDtrackCuts->SetEtaRange(-0.8,0.8);
+
+  fESDtrackCutsEP = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); 
+  //  Printf("Initizialize\n");
+}
+
+//________________________________________________________________________
+Float_t AliAnalysisTaskNucleiv2SP::GetEventPlaneForCandidate(AliESDtrack* track0, const TVector2* q,AliEventplane *pl){
+  // remove autocorrelations 
+  
+  TArrayF* qx = 0x0;
+  TArrayF* qy = 0x0;
+  TVector2 qcopy; 
+  // if(!fEtaGap){
+  qx = pl->GetQContributionXArray();
+  qy = pl->GetQContributionYArray();
+  qcopy = *q;
+  
+  TVector2 q0;
+  if((track0->GetID()) < qx->fN){
+    q0.Set(qx->At(track0->GetID()),qy->At(track0->GetID()));
+  }
+  
+  qcopy = qcopy - q0;
+  
+  return qcopy.Phi()/2.;
+  
+}
+//________________________________________________________________________
+Float_t AliAnalysisTaskNucleiv2SP::GetPhi0Pi(Float_t phi){
+  // Sets the phi angle in the range 0-pi
+  Float_t result=phi;
+  while(result<0){
+    result=result+TMath::Pi();
+  }
+  while(result>TMath::Pi()){
+    result=result-TMath::Pi();
+  }
+   return result;
+}
+
+//==================DEFINITION OF OUTPUT OBJECTS==============================
+
+void AliAnalysisTaskNucleiv2SP::UserCreateOutputObjects()
+{
+  
+  //-------------------------------------------------------
+  fListHist = new TList();
+  fListHist->SetOwner();  // IMPORTANT!
+  
+  if(! fHistEventMultiplicity ){
+
+    fHistEventMultiplicity   = new TH1F( "fHistEventMultiplicity" , "Nb of Events" , 12 , -0.5,11.5);
+
+    fHistEventMultiplicity->GetXaxis()->SetBinLabel(1,"All Events");
+    fHistEventMultiplicity->GetXaxis()->SetBinLabel(2,"Events w/PV");
+    fHistEventMultiplicity->GetXaxis()->SetBinLabel(3,"Events w/|Vz|<10cm");
+    fHistEventMultiplicity->GetXaxis()->SetBinLabel(4,"Central Events");
+    fHistEventMultiplicity->GetXaxis()->SetBinLabel(5,"Semi-Central Events");
+    fHistEventMultiplicity->GetXaxis()->SetBinLabel(6,"MB Events");
+    //from HF
+    fHistEventMultiplicity->GetXaxis()->SetBinLabel(7,"nEventsAnal");
+    fHistEventMultiplicity->GetXaxis()->SetBinLabel(8,"nEvSelected");
+    fHistEventMultiplicity->GetXaxis()->SetBinLabel(9,"nCandidatesSelected");
+    fHistEventMultiplicity->GetXaxis()->SetBinLabel(10,"out of pt bounds");
+    fHistEventMultiplicity->GetXaxis()->SetBinLabel(11,"mismatch lab");
+    fHistEventMultiplicity->GetXaxis()->SetBinLabel(12,"non valid TPC EP");
+    fListHist->Add(fHistEventMultiplicity);
+  }
+
+  if(! fHistTrackMultiplicity ){
+    fHistTrackMultiplicity  = new TH2F( "fHistTrackMultiplicity", "Nb of Tracks MB Events |Vz| < 10", 25000,0, 25000,105,-0.5,104.5);
+    fHistTrackMultiplicity->GetXaxis()->SetTitle("Number of tracks");
+    fHistTrackMultiplicity->GetYaxis()->SetTitle("Percentile");
+    fListHist->Add(fHistTrackMultiplicity);
+  } 
+
+  if(! fHistTrackMultiplicityCentral ){
+    fHistTrackMultiplicityCentral  = new TH2F( "fHistTrackMultiplicityCentral", "Nb of Tracks MB Events |Vz| < 10", 25000,0, 25000,105,-0.5,104.5);
+    fHistTrackMultiplicityCentral->GetXaxis()->SetTitle("Number of tracks");
+    fHistTrackMultiplicityCentral->GetYaxis()->SetTitle("Percentile");
+    fListHist->Add(fHistTrackMultiplicityCentral);
+  } 
+  if(! fHistTrackMultiplicitySemiCentral ){
+    fHistTrackMultiplicitySemiCentral  = new TH2F( "fHistTrackMultiplicitySemiCentral", "Nb of Tracks MB Events |Vz| < 10", 25000,0, 25000,105,-0.5,104.5);
+    fHistTrackMultiplicitySemiCentral->GetXaxis()->SetTitle("Number of tracks");
+    fHistTrackMultiplicitySemiCentral->GetYaxis()->SetTitle("Percentile");
+    fListHist->Add(fHistTrackMultiplicitySemiCentral);
+  } 
+  if(! fHistTrackMultiplicityMB ){
+    fHistTrackMultiplicityMB  = new TH2F( "fHistTrackMultiplicityMB", "Nb of Tracks MB Events |Vz| < 10", 25000,0, 25000,105,-0.5,104.5);
+    fHistTrackMultiplicityMB->GetXaxis()->SetTitle("Number of tracks");
+    fHistTrackMultiplicityMB->GetYaxis()->SetTitle("Percentile");
+    fListHist->Add(fHistTrackMultiplicityMB);
+  } 
+  if(! fhBB ){
+    fhBB = new TH2F( "fhBB" , "BetheBlochTPC" , 240,-6,6,1000,0,1000);
+    fListHist->Add(fhBB);
+  }
+  
+  if(! fhBBDeu ){
+    fhBBDeu = new TH2F( "fhBBDeu" , "BetheBlochTPC - Deuteron" , 240,-6,6,1000,0,1000);
+    fListHist->Add(fhBBDeu);
+  }
+  if(!fhPtDeu  ){
+    fhPtDeu = new TH2F( "fhPtDeu" , "pt corretto vs pt track - Deuteron" , 120,0,6,120,0,6);
+    fListHist->Add(fhPtDeu);
+  }
+
+  if(! fhTOF ){
+    fhTOF = new TH2F( "fhTOF" , "Scatter Plot TOF" , 240,-6,6,1000,0,1.2);
+    fListHist->Add(fhTOF);
+  }
+  if(! fhMassTOF){
+    fhMassTOF=new TH1F ("fhMassTOF","Particle Mass - TOF", 300,-5 ,5);
+    fListHist->Add(fhMassTOF);
+  }
+  
+  EPVzAvsCentrality  = new TH2D("EPVzAvsCentrality" , "EPVzAvsCentrality" , 80, -2, 2,105,-0.5,105.5);
+  EPVzCvsCentrality  = new TH2D("EPVzCvsCentrality" , "EPVzCvsCentrality" , 80, -2, 2,105,-0.5,105.5);
+  EPTPCvsCentrality  = new TH2D("EPTPCvsCentrality" , "EPTPCvsCentrality" , 80, -2, 2,105,-0.5,105.5);
+  EPVzvsCentrality   = new TH2D("EPVzvsCentrality"  , "EPVzvsCentrality"  , 80, -2, 2,105,-0.5,105.5);
+  EPTPCpvsCentrality = new TH2D("EPTPCpvsCentrality", "EPTPCpvsCentrality", 80, -2, 2,105,-0.5,105.5);
+  EPTPCnvsCentrality = new TH2D("EPTPCnvsCentrality", "EPTPCnvsCentrality", 80, -2, 2,105,-0.5,105.5);
+
+  fListHist->Add(EPVzAvsCentrality);
+  fListHist->Add(EPVzCvsCentrality);
+  fListHist->Add(EPTPCvsCentrality);
+  fListHist->Add(EPVzvsCentrality);
+  fListHist->Add(EPTPCpvsCentrality);
+  fListHist->Add(EPTPCnvsCentrality);
+  
+  hEvPlaneTPCvsEvPVz05   = new TH2F("hEvPlaneTPCvsEvPVz05"  ,"hEvPlaneTPCvsEvPVz05"  ,100,-TMath::Pi(),TMath::Pi(),100,-TMath::Pi(),TMath::Pi());                      
+  hEvPlaneTPCvsEvPVz075  = new TH2F("hEvPlaneTPCvsEvPVz075" ,"hEvPlaneTPCvsEvPVz075" ,100,-TMath::Pi(),TMath::Pi(),100,-TMath::Pi(),TMath::Pi()); 
+  hEvPlaneTPCvsEvPVz1530 = new TH2F("hEvPlaneTPCvsEvPVz1530","hEvPlaneTPCvsEvPVz1530",100,-TMath::Pi(),TMath::Pi(),100,-TMath::Pi(),TMath::Pi());
+  hEvPlaneTPCvsEvPVz3050 = new TH2F("hEvPlaneTPCvsEvPVz3050","hEvPlaneTPCvsEvPVz3050",100,-TMath::Pi(),TMath::Pi(),100,-TMath::Pi(),TMath::Pi());                      
+  hEvPlaneTPCvsEvPVz2040 = new TH2F("hEvPlaneTPCvsEvPVz2040","hEvPlaneTPCvsEvPVz2040",100,-TMath::Pi(),TMath::Pi(),100,-TMath::Pi(),TMath::Pi());                      
+  hEvPlaneTPCvsEvPVz4060 = new TH2F("hEvPlaneTPCvsEvPVz4060","hEvPlaneTPCvsEvPVz4060",100,-TMath::Pi(),TMath::Pi(),100,-TMath::Pi(),TMath::Pi());   
+  
+  fListHist->Add(hEvPlaneTPCvsEvPVz05);                      
+  fListHist->Add(hEvPlaneTPCvsEvPVz075); 
+  fListHist->Add(hEvPlaneTPCvsEvPVz1530);
+  fListHist->Add(hEvPlaneTPCvsEvPVz3050);                      
+  fListHist->Add(hEvPlaneTPCvsEvPVz2040);                      
+  fListHist->Add(hEvPlaneTPCvsEvPVz4060);   
+
+  hCos2DeltaTPCVzAvsCentrality = new TH2F("hCos2DeltaTPCVzAvsCentrality","hCos2DeltaTPCVzAvsCentrality",100,-1.1,1.1,105,-0.5,105.5);
+  hCos2DeltaTPCVzCvsCentrality = new TH2F("hCos2DeltaTPCVzCvsCentrality","hCos2DeltaTPCVzCvsCentrality",100,-1.1,1.1,105,-0.5,105.5);
+  hCos2DeltaVzAVzCvsCentrality = new TH2F("hCos2DeltaVzAVzCvsCentrality","hCos2DeltaVzAVzCvsCentrality",100,-1.1,1.1,105,-0.5,105.5);
+  hCos2DeltaVzMVzAvsCentrality = new TH2F("hCos2DeltaVzMVzAvsCentrality","hCos2DeltaVzMVzAvsCentrality",100,-1.1,1.1,105,-0.5,105.5);
+  hCos2DeltaVzMVzCvsCentrality = new TH2F("hCos2DeltaVzMVzCvsCentrality","hCos2DeltaVzMVzCvsCentrality",100,-1.1,1.1,105,-0.5,105.5);
+  hCos2DeltaVzATPCvsCentrality = new TH2F("hCos2DeltaVzATPCvsCentrality","hCos2DeltaVzATPCvsCentrality",100,-1.1,1.1,105,-0.5,105.5);
+  hCos2DeltaVzCTPCvsCentrality = new TH2F("hCos2DeltaVzCTPCvsCentrality","hCos2DeltaVzCTPCvsCentrality",100,-1.1,1.1,105,-0.5,105.5);
+  hCos2DeltaVzCVzAvsCentrality = new TH2F("hCos2DeltaVzCVzAvsCentrality","hCos2DeltaVzCVzAvsCentrality",100,-1.1,1.1,105,-0.5,105.5);
+
+  fListHist->Add(hCos2DeltaTPCVzAvsCentrality);
+  fListHist->Add(hCos2DeltaTPCVzCvsCentrality);
+  fListHist->Add(hCos2DeltaVzAVzCvsCentrality);
+  fListHist->Add(hCos2DeltaVzMVzAvsCentrality);
+  fListHist->Add(hCos2DeltaVzMVzCvsCentrality);
+  fListHist->Add(hCos2DeltaVzATPCvsCentrality);
+  fListHist->Add(hCos2DeltaVzCTPCvsCentrality);
+  fListHist->Add(hCos2DeltaVzCVzAvsCentrality);
+
+  hQVzAQVzCvsCentrality = new TH2F("hQVzAQVzCvsCentrality","hQVzAQVzCvsCentrality",1000,-5,5,105,-0.5,105.5);
+  fListHist->Add(hQVzAQVzCvsCentrality);
+  
+  
+     Int_t binsHistReal[11] = { 105  , 120 , 100 ,  100,  100 ,   6   ,  110        ,  110       ,  110        ,  110         , 100};
+  Double_t xminHistReal[11] = {-0.5  ,  0  ,-0.6 ,  -10,  -10 ,  -2.5 ,   0         ,   0        ,   0         ,   0          , -3};
+  Double_t xmaxHistReal[11] = { 105.5,  6  , 0.6 ,   10,   10 ,   2.5 , TMath::Pi() , TMath::Pi(),TMath::Pi()  ,TMath::Pi()   ,  3};
+  fHistRealTracks = new THnSparseF("fHistRealTracks","real tracks",11,binsHistReal,xminHistReal,xmaxHistReal);
+  fListHist->Add(fHistRealTracks);
+  PostData(1,  fListHist);
+  
+}// end UserCreateOutputObjects
+
+
+//====================== USER EXEC ========================
+
+void AliAnalysisTaskNucleiv2SP::UserExec(Option_t *) 
+{
+  // Main loop
+  // Called for EACH event
+  //  cout<<"AliAnalysisTaskNucleiv2SP Starting UserExec"<<endl;
+
+  Info("AliAnalysisTaskNucleiv2SP","Starting UserExec");  
+  
+  AliVEvent *event = InputEvent();
+  if (!event) { Printf("ERROR: Could not retrieve event"); return; }
+  
+  AliESDEvent* lESDevent = dynamic_cast<AliESDEvent*>(event);
+  if (!lESDevent) {
+    AliError("Cannot get the ESD event");
+    return;
+  }  
+  
+  fHistEventMultiplicity->Fill(1);
+  fHistEventMultiplicity->Fill(7);
+  
+  //_____________________________________________________
+  //   Centrality  
+  
+  AliCentrality *centrality = lESDevent->GetCentrality();
+  Float_t percentile=centrality->GetCentralityPercentile("V0M");
+  
+  Int_t TrackNumber = lESDevent->GetNumberOfTracks();
+  fHistTrackMultiplicity->Fill(TrackNumber,percentile); //tracce per evento
+  
+  //______________________________________________________
+  // PID
+  
+  AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
+  AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
+  fPIDResponse=inputHandler->GetPIDResponse(); 
+  
+  //=================================================================
+  
+  Float_t  impactXY=-999., impactZ=-999.;
+  Double_t pinTPC=0.,poutTPC=0.,TPCSignal=0.;
+  
+  ULong_t  status=0;
+  Bool_t   isTPC=kFALSE;
+  
+  
+  // Primary vertex cut
+  
+  const AliESDVertex *vtx = lESDevent->GetPrimaryVertexTracks();
+    
+  if(vtx->GetNContributors()<1) {
+    
+    // SPD vertex cut
+    vtx = lESDevent->GetPrimaryVertexSPD();
+    
+    if(vtx->GetNContributors()<1) {
+      Info("AliAnalysisTaskHelium3Pi","No good vertex, skip event");
+      return; // NO GOOD VERTEX, SKIP EVENT 
+    }
+  }
+  
+  fHistEventMultiplicity->Fill(2); // analyzed events with PV
+  
+  if(TMath::Abs(vtx->GetZv())>10) return;
+  fHistEventMultiplicity->Fill(3);
+
+  Bool_t isSelectedCentral     = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kCentral);
+  Bool_t isSelectedSemiCentral = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kSemiCentral);
+  Bool_t isSelectedMB          = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB);
+    
+  fHistTrackMultiplicity->Fill(TrackNumber,percentile); 
+    
+  Int_t eventtype = -999;
+  
+  //  cout<<"ET 1: "<<eventtype<<endl;
+  
+  if(isSelectedCentral){
+    fHistEventMultiplicity->Fill(4);
+    fHistTrackMultiplicityCentral->Fill(TrackNumber,percentile); 
+    eventtype =1;
+  }
+  
+  if(isSelectedSemiCentral){
+    fHistEventMultiplicity->Fill(5);
+    fHistTrackMultiplicitySemiCentral->Fill(TrackNumber,percentile); 
+    eventtype =2;
+  }
+  
+  if(isSelectedMB){
+    if(percentile<0)return;
+    if(percentile>=80)return;
+    fHistEventMultiplicity->Fill(6);
+    fHistTrackMultiplicityMB->Fill(TrackNumber,percentile); 
+    eventtype =3;
+  }
+  
+  //    cout<<"ET 2: "<<eventtype<<endl;
+  
+  if(eventtype!=1 && eventtype!=2 && eventtype!=3 )return;
+  
+  //RAMONA QUI
+  
+  AliEventplane *pl=lESDevent->GetEventplane();
+  
+  
+  if(!pl ){
+    AliError("AliAnalysisTaskSENucleiv2SP::UserExec:no eventplane! v2 analysis without eventplane not possible!\n");
+    fHistEventMultiplicity->Fill(12);
+  }
+    
+  //Event plane from FLOW
+  
+  Double_t qxEPa = 0, qyEPa = 0;
+  Double_t qxEPc = 0, qyEPc = 0;
+  Double_t qxEP = 0, qyEP = 0;
+  
+  Double_t evPlAngV0A = pl->CalculateVZEROEventPlane(lESDevent, 8, 2, qxEPa, qyEPa);
+  Double_t evPlAngV0C = pl->CalculateVZEROEventPlane(lESDevent, 9, 2, qxEPc, qyEPc);
+  Double_t evPlAngV0  = pl->CalculateVZEROEventPlane(lESDevent,10, 2, qxEP,  qyEP);
+  
+  Double_t Qx2  = 0, Qy2  = 0;
+  Double_t Qx2p = 0, Qy2p = 0;
+  Double_t Qx2n = 0, Qy2n = 0;
+  
+  
+  for (Int_t iT = 0; iT < TrackNumber; iT++){
+    AliESDtrack* track = lESDevent->GetTrack(iT);
+    
+    if (!track)
+      continue;
+    
+    if ((TMath::Abs(track->Eta()) > 0.8) || (track->Pt() < 0.2) || (track->GetTPCNcls() < 70) || (track->Pt() >= 20.0))
+      continue;
+    
+    if(!fESDtrackCutsEP->AcceptTrack(track))
+      continue;
+    
+    if(track->Eta()>0 && track->Eta()<0.8){
+      
+      Qx2p += TMath::Cos(2*track->Phi());
+      Qy2p += TMath::Sin(2*track->Phi());
+    }
+    if(track->Eta()<0 && track->Eta()> -0.8){
+      
+      Qx2n += TMath::Cos(2*track->Phi());
+      Qy2n += TMath::Sin(2*track->Phi());
+    }
+    
+    Qx2 += TMath::Cos(2*track->Phi());
+    Qy2 += TMath::Sin(2*track->Phi());
+    
+  }
+  
+  Double_t evPlAngTPC  = TMath::ATan2(Qy2, Qx2)/2.;
+  Double_t evPlAngTPCn = TMath::ATan2(Qy2n, Qx2n)/2.;
+  Double_t evPlAngTPCp = TMath::ATan2(Qy2p, Qx2p)/2.;
+
+  EPVzAvsCentrality  ->Fill(evPlAngV0A  , percentile); 
+  EPVzCvsCentrality  ->Fill(evPlAngV0C  , percentile); 
+  EPVzvsCentrality   ->Fill(evPlAngV0   , percentile); 
+  EPTPCvsCentrality  ->Fill(evPlAngTPC  , percentile); 
+  EPTPCpvsCentrality ->Fill(evPlAngTPCp , percentile); 
+  EPTPCnvsCentrality ->Fill(evPlAngTPCn , percentile); 
+
+  if(percentile>=0 && percentile<=5){
+    hEvPlaneTPCvsEvPVz05  ->Fill(evPlAngTPC,evPlAngV0); 
+    cout<<"Centrality "<<percentile<<endl;
+  }
+  if(percentile>=0 && percentile<=7.5)
+    hEvPlaneTPCvsEvPVz075 ->Fill(evPlAngTPC,evPlAngV0); 
+  if(percentile>=15 && percentile<=30)
+    hEvPlaneTPCvsEvPVz1530->Fill(evPlAngTPC,evPlAngV0);
+  if(percentile>=30 && percentile<50)
+    hEvPlaneTPCvsEvPVz3050->Fill(evPlAngTPC,evPlAngV0);  
+  if(percentile>=20 && percentile<=40)                    
+    hEvPlaneTPCvsEvPVz2040->Fill(evPlAngTPC,evPlAngV0);   
+  if(percentile>=40 && percentile<=60)                   
+    hEvPlaneTPCvsEvPVz4060->Fill(evPlAngTPC,evPlAngV0);           
+
+  // For TPC, V0M, V0c and V0A resolution 
+
+  hCos2DeltaTPCVzAvsCentrality->Fill(TMath::Cos(2.*(evPlAngTPC-evPlAngV0A)), percentile);
+  hCos2DeltaTPCVzCvsCentrality->Fill(TMath::Cos(2.*(evPlAngTPC-evPlAngV0C)), percentile);
+  hCos2DeltaVzAVzCvsCentrality->Fill(TMath::Cos(2.*(evPlAngV0A-evPlAngV0C)), percentile);
+  hCos2DeltaVzMVzAvsCentrality->Fill(TMath::Cos(2.*(evPlAngV0 -evPlAngV0A)), percentile);
+  hCos2DeltaVzMVzCvsCentrality->Fill(TMath::Cos(2.*(evPlAngV0 -evPlAngV0C)), percentile);
+  hCos2DeltaVzATPCvsCentrality->Fill(TMath::Cos(2.*(evPlAngV0A-evPlAngTPC)), percentile);
+  hCos2DeltaVzCTPCvsCentrality->Fill(TMath::Cos(2.*(evPlAngV0C-evPlAngTPC)), percentile);
+  hCos2DeltaVzCVzAvsCentrality->Fill(TMath::Cos(2.*(evPlAngV0C-evPlAngV0A)), percentile);
+
+  //Scalar Product
+  
+  Double_t  QV0AQV0C = qxEPa * qxEPc + qyEPa*qyEPc;
+  hQVzAQVzCvsCentrality->Fill(QV0AQV0C,percentile);
+  
+  //====================================================================================================================
+  
+  // To remove auto-correlation
+  TVector2 *q = 0x0;
+  q = pl->GetQVector();
+
+  Int_t isTOF=0;
+  Int_t isoutTPC=0;
+  Float_t deutExp  = -999;
+  Double_t pullTPC = -999;
+  Float_t deltaphiTPC = -3;
+  Float_t deltaphiV0  = -3;
+  Float_t deltaphiV0A = -3;
+  Float_t deltaphiV0C = -3;
+
+  Float_t  uqV0A = -999;
+  Float_t  uqV0C = -999; 
+
+  for (Int_t j=0; j<TrackNumber; j++) { //loop on tracks
+      
+    AliESDtrack *esdtrack=lESDevent->GetTrack(j);
+    if (!fESDtrackCuts->AcceptTrack(esdtrack)) continue;
+      
+    status  = (ULong_t)esdtrack->GetStatus();
+    
+    isTPC    = (((status) & AliESDtrack::kTPCin)   != 0);
+    isTOF    = ((((status) & AliESDtrack::kTOFout) != 0) && (((status) & AliESDtrack::kTIME) != 0));
+    isoutTPC = (((status) & AliESDtrack::kTPCout)  != 0);
+      
+    TPCSignal=esdtrack->GetTPCsignal(); 
+      
+    if (TPCSignal<10)continue;
+    if (TPCSignal>1000)continue;
+    if (!isTPC)continue;
+      
+    if(!esdtrack->GetTPCInnerParam())continue;
+    AliExternalTrackParam trackIn(*esdtrack->GetInnerParam()); 
+    pinTPC= trackIn.GetP(); 
+
+    fhBB->Fill(pinTPC*esdtrack->GetSign(),TPCSignal);
+
+    if(isTOF){
+      if(!esdtrack->GetOuterParam())continue;    
+      AliExternalTrackParam trackOut(*esdtrack->GetOuterParam()); 
+      poutTPC = trackOut.GetP();  
+      fhTOF->Fill(poutTPC*esdtrack->GetSign(),(esdtrack->GetIntegratedLength()/esdtrack->GetTOFsignal())/2.99792458e-2);
+      
+    }
+
+    esdtrack->GetImpactParameters(impactXY, impactZ);
+    
+    deutExp  = -999;
+    deutExp  = AliExternalTrackParam::BetheBlochAleph(pinTPC/(0.938*2),1.45802,27.4992,4.00313e-15,2.48485,8.31768);
+        
+    pullTPC     = (TPCSignal - deutExp)/(0.07*deutExp);
+    
+    
+    Double_t p    = esdtrack->P();
+    Double_t tof  = esdtrack->GetTOFsignal()-fPIDResponse->GetTOFResponse().GetStartTime(p);
+    Double_t tPhi = esdtrack->Phi();
+
+    Float_t beta = 0;
+    Float_t gamma = 0;
+    Float_t deltaMass = 0;
+
+    
+    if(TMath::Abs(pinTPC) < 6 && TMath::Abs(pullTPC) < 3){
+
+      fhBBDeu->Fill(pinTPC*esdtrack->GetSign(),TPCSignal);
+       
+      deltaMass = 0;
+      
+      if(tof > 0 && pinTPC > 1.){
+       beta = esdtrack->GetIntegratedLength()/(tof * 2.99792457999999984e-02);
+       gamma = 1/TMath::Sqrt(1 - beta*beta);
+       deltaMass = poutTPC/TMath::Sqrt(gamma*gamma - 1) - 1.8756;
+       fhMassTOF->Fill(deltaMass);
+      }
+       
+      // Event Plane
+      //Remove AutoCorrelation
+      evPlAngTPC = GetEventPlaneForCandidate(esdtrack,q,pl);
+      
+      deltaphiTPC=2*GetPhi0Pi(tPhi-evPlAngTPC);
+      deltaphiV0 =2*GetPhi0Pi(tPhi-evPlAngV0);
+      deltaphiV0A=2*GetPhi0Pi(tPhi-evPlAngV0A);
+      deltaphiV0C=2*GetPhi0Pi(tPhi-evPlAngV0C);
+      
+      // SP
+      
+      uqV0A = TMath::Cos(2*tPhi)*qxEPa+TMath::Sin(2*tPhi)*qyEPa;
+      uqV0C = TMath::Cos(2*tPhi)*qxEPc+TMath::Sin(2*tPhi)*qyEPc;
+      
+      Double_t vecHistReal[11] = {percentile, esdtrack->Pt(), deltaMass , uqV0A , uqV0C , esdtrack->GetSign(),deltaphiTPC,deltaphiV0,deltaphiV0A,deltaphiV0C , impactXY};
+      fHistRealTracks->Fill(vecHistReal);
+      
+      
+      
+    } 
+  }  //track
+  
+  
+  PostData(1, fListHist);
+  
+} //end userexec
+
+
+//________________________________________________________________________
+
+void AliAnalysisTaskNucleiv2SP::Terminate(Option_t *) 
+{
+  // Draw result to the screen
+  // Called once at the end of the query
+}
+
diff --git a/PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskNucleiv2SP.h b/PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskNucleiv2SP.h
new file mode 100644 (file)
index 0000000..33e546f
--- /dev/null
@@ -0,0 +1,101 @@
+#ifndef ALIANALYSISTASKNUCLEIV2SP_H
+#define ALIANALYSISTASKNUCLEIV2SP_H
+
+/*  See cxx source for full Copyright notice */
+
+//-----------------------------------------------------------------
+//                 AliAnalysisTaskNucleiv2SP class
+//-----------------------------------------------------------------
+
+class TList;
+class TH1F;
+class TH2F;
+
+
+#include <AliPIDResponse.h>
+#include "TString.h"
+#include "AliESDtrackCuts.h"
+#include "AliAnalysisTaskSE.h"
+#include "THnSparse.h"
+
+class AliAnalysisTaskNucleiv2SP : public AliAnalysisTaskSE {
+ public:
+  AliAnalysisTaskNucleiv2SP();
+  AliAnalysisTaskNucleiv2SP(const char *name);
+  virtual ~AliAnalysisTaskNucleiv2SP() {}
+  
+  virtual void  UserCreateOutputObjects();
+  virtual void  Initialize();
+  virtual void  UserExec(Option_t *option);
+  virtual void  Terminate(Option_t *);
+  
+  Float_t GetEventPlaneForCandidate(AliESDtrack* track0, const TVector2* q,AliEventplane *pl);
+  Float_t GetPhi0Pi(Float_t phi);
+
+ private:
+  
+  TList        *fListHist;                //! List of  histograms
+  TH1F  *fHistEventMultiplicity;           //! event multiplicity
+  TH2F  *fHistTrackMultiplicity;           //! track multiplicity
+  TH2F  *fHistTrackMultiplicityCentral;    //! track multiplicity
+  TH2F  *fHistTrackMultiplicitySemiCentral;//! track multiplicity
+  TH2F  *fHistTrackMultiplicityMB;         //! track multiplicity
+
+  TH2F  *fhBB;                             //! ScatterPlot Total
+  TH2F  *fhBBDeu;                          //! ScatterPlot Total
+  TH2F  *fhPtDeu;                          //! correctet vs non correcter d pt
+  TH2F  *fhTOF;                            //! ScatterPlot Total TOF
+  TH1F  *fhMassTOF;                        //! Mass Distribution TOF
+  
+  // Event Plane vs Centrality
+
+  TH2D *EPVzAvsCentrality  ; 
+  TH2D *EPVzCvsCentrality  ; 
+  TH2D *EPTPCvsCentrality  ; 
+  TH2D *EPVzvsCentrality   ; 
+  TH2D *EPTPCpvsCentrality ; 
+  TH2D *EPTPCnvsCentrality ; 
+  
+  // EP TPC vs EP VZ for different centralities 
+
+  TH2F *hEvPlaneTPCvsEvPVz05;                      
+  TH2F *hEvPlaneTPCvsEvPVz075; 
+  TH2F *hEvPlaneTPCvsEvPVz1530;
+  TH2F *hEvPlaneTPCvsEvPVz3050;                      
+  TH2F *hEvPlaneTPCvsEvPVz2040;                      
+  TH2F *hEvPlaneTPCvsEvPVz4060;                      
+
+  // For EP Resolution
+
+  TH2F *hCos2DeltaTPCVzAvsCentrality;
+  TH2F *hCos2DeltaTPCVzCvsCentrality;
+  TH2F *hCos2DeltaVzAVzCvsCentrality;
+  TH2F *hCos2DeltaVzMVzAvsCentrality;
+  TH2F *hCos2DeltaVzMVzCvsCentrality;
+  TH2F *hCos2DeltaVzATPCvsCentrality;
+  TH2F *hCos2DeltaVzCTPCvsCentrality;
+  TH2F *hCos2DeltaVzCVzAvsCentrality;
+
+  // For SP resolution
+
+  TH2F *hQVzAQVzCvsCentrality;
+
+  // THnSparse
+  
+  THnSparse * fHistRealTracks; 
+
+  //---------------------------------------------------------------------------
+  AliESDtrackCuts *fESDtrackCuts; 
+  AliESDtrackCuts *fESDtrackCutsEP;
+  AliPIDResponse  *fPIDResponse;   //! pointer to PID response
+  //_______________________________________________________________________
+  AliAnalysisTaskNucleiv2SP(const AliAnalysisTaskNucleiv2SP&);            // not implemented
+  AliAnalysisTaskNucleiv2SP& operator=(const AliAnalysisTaskNucleiv2SP&); // not implemented
+  
+  ClassDef(AliAnalysisTaskNucleiv2SP, 0);
+};
+
+#endif