]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskHelium3Pi.cxx
added snippets to save histos in header
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / Hypernuclei / AliAnalysisTaskHelium3Pi.cxx
index e1d3072a8bd4c93ac9b73eca71bfc345376aaa9b..9a9ebf39183fa7ef1bcc865f628d9b70cce20610 100644 (file)
@@ -60,6 +60,7 @@ class AliCascadeVertexer;
 #include <TDatime.h>
 #include <TRandom3.h>
 #include <TLorentzVector.h>
+//#include <AliVTrack.h>
 
 const Int_t AliAnalysisTaskHelium3Pi::fgNrot = 15;
 
@@ -70,8 +71,9 @@ AliAnalysisTaskHelium3Pi::AliAnalysisTaskHelium3Pi()
 : AliAnalysisTaskSE(),
   fAnalysisType("ESD"), 
   fCollidingSystems(0), 
+  fESDtrackCuts(0),
   fDataType("REAL"),
-  fListHistCascade(0), 
+  fListHist(0), 
   fHistEventMultiplicity(0),         
   fHistTrackMultiplicity(0),      
   fHistTrackMultiplicityCent(0),      
@@ -80,7 +82,6 @@ AliAnalysisTaskHelium3Pi::AliAnalysisTaskHelium3Pi()
   fHistTrackMultiplicityPVCent(0),      
   fHistTrackMultiplicityPVSemiCent(0),  
   fHistTrackMultiplicityPVMB(0),        
-  fHistMult(0),
   fhBB(0),    
   fhTOF(0),   
   fhMassTOF(0),
@@ -90,60 +91,249 @@ AliAnalysisTaskHelium3Pi::AliAnalysisTaskHelium3Pi()
   fhNaNeg(0),  
   fBetavsTPCsignalPos(0),  
   fBetavsTPCsignalNeg(0),  
-  fHelium3TOF(0),   
   fNtuple1(0),
-  fNtuple4(0)
-
+  trunNumber(0),
+  tbunchcross(0),
+  torbit(0),
+  tperiod(0),
+  teventtype(0),
+  tTrackNumber(0),
+  tpercentile(0),
+  txPrimaryVertex(0),
+  tyPrimaryVertex(0),
+  tzPrimaryVertex(0),
+  txSecondaryVertex(0),
+  tySecondaryVertex(0),
+  tzSecondaryVertex(0),
+  tdcaTracks(0),
+  tCosPointingAngle(0),
+  tDCAV0toPrimaryVertex(0),
+  tHeSign(0),
+  tHepInTPC(0),
+  tHeTPCsignal(0),
+  tDcaHeToPrimVertex(0),
+  tHeEta(0),
+  tmomHex(0),
+  tmomHey(0),
+  tmomHez(0),
+  tmomHeAtSVx(0),
+  tmomHeAtSVy(0),
+  tmomHeAtSVz(0),
+  tHeTPCNcls(0),
+  tHeimpactXY(0),
+  tHeimpactZ(0),
+  tHeITSClusterMap(0),
+  tIsHeITSRefit(0),
+  tPionSign(0),
+  tPionpInTPC(0),
+  tPionTPCsignal(0),
+  tDcaPionToPrimVertex(0),
+  tPionEta(0),
+  tmomPionx(0),
+  tmomPiony(0),
+  tmomPionz(0),
+  tmomNegPionAtSVx(0),
+  tmomNegPionAtSVy(0),
+  tmomNegPionAtSVz(0),
+  tPionTPCNcls(0),
+  tPionimpactXY(0),
+  tPionimpactZ(0),
+  tPionITSClusterMap(0),
+  tIsPiITSRefit(0),
+  txn(0),
+  txp(0),
+  tchi2He(0),
+  tchi2Pi(0),
+  fNtuple4(0),
+  tHelrunNumber(0),
+  tHelBCNumber(0),
+  tHelOrbitNumber(0),
+  tHelPeriodNumber(0),
+  tHeleventtype(0),
+  tHelisHeITSrefit(0),
+  tHelpercentile(0),
+  tHelSign(0),
+  tHelpinTPC(0),
+  tHelGetTPCsignal(0),
+  tHelPx(0),
+  tHelPy(0),
+  tHelPz(0),
+  tHelEta(0),
+  tHelisTOF(0),
+  tHelpoutTPC(0),
+  tHeltimeTOF(0),
+  tHeltrackLenghtTOF(0),
+  tHelimpactXY(0),
+  tHelimpactZ(0),
+  tHelmapITS(0),
+  tHelTPCNcls(0),
+  tHelTRDsignal(0),
+  tHelxPrimaryVertex(0),
+  tHelyPrimaryVertex(0),
+  tHelzPrimaryVertex(0),
+  tHelchi2PerClusterTPC(0),
+  fPIDResponse(0)
+  
 {
-  // Dummy Constructor 
+  // Dummy Constructor
+  
+  //  printf("Dummy Constructor");
+  
+  fESDtrackCuts = new AliESDtrackCuts("fESDtrackCuts");
+  fESDtrackCuts->SetRequireITSStandAlone(kFALSE);
+  fESDtrackCuts->SetRequireITSPureStandAlone(kFALSE);
+      
+  fESDtrackCuts->SetRequireTPCRefit(kTRUE);
+  fESDtrackCuts->SetAcceptKinkDaughters(kFALSE);
+  fESDtrackCuts->SetMinNClustersTPC(60);
+  fESDtrackCuts->SetMaxChi2PerClusterTPC(5);
+  fESDtrackCuts->SetEtaRange(-0.9,0.9);
+
 }
 
 //________________________________________________________________________
 AliAnalysisTaskHelium3Pi::AliAnalysisTaskHelium3Pi(const char *name) 
-  : AliAnalysisTaskSE(name), 
-    fAnalysisType("ESD"), 
-    fCollidingSystems(0), 
-    fDataType("REAL"),
-    fListHistCascade(0), 
-    fHistEventMultiplicity(0),    
-    fHistTrackMultiplicity(0),            
-    fHistTrackMultiplicityCent(0),      
-    fHistTrackMultiplicitySemiCent(0),  
-    fHistTrackMultiplicityMB(0),        
-    fHistTrackMultiplicityPVCent(0),      
-    fHistTrackMultiplicityPVSemiCent(0),  
-    fHistTrackMultiplicityPVMB(0),        
-    fHistMult(0),
-    fhBB(0),    
-    fhTOF(0),   
-    fhMassTOF(0),
-    fhBBPions(0),
-    fhBBHe(0),   
-    fhNaPos(0),  
-    fhNaNeg(0),  
-    fBetavsTPCsignalPos(0),  
-    fBetavsTPCsignalNeg(0),  
-    fHelium3TOF(0),                       
-    fNtuple1(0),
-    fNtuple4(0)  
-  
-{
+: AliAnalysisTaskSE(name), 
+  fAnalysisType("ESD"), 
+  fCollidingSystems(0), 
+  fESDtrackCuts(0),
+  fDataType("REAL"),
+  fListHist(0), 
+  fHistEventMultiplicity(0),         
+  fHistTrackMultiplicity(0),      
+  fHistTrackMultiplicityCent(0),      
+  fHistTrackMultiplicitySemiCent(0),  
+  fHistTrackMultiplicityMB(0),        
+  fHistTrackMultiplicityPVCent(0),      
+  fHistTrackMultiplicityPVSemiCent(0),  
+  fHistTrackMultiplicityPVMB(0),        
+  fhBB(0),    
+  fhTOF(0),   
+  fhMassTOF(0),
+  fhBBPions(0),
+  fhBBHe(0),   
+  fhNaPos(0),  
+  fhNaNeg(0),  
+  fBetavsTPCsignalPos(0),  
+  fBetavsTPCsignalNeg(0),  
+  fNtuple1(0),
+  trunNumber(0),
+  tbunchcross(0),
+  torbit(0),
+  tperiod(0),
+  teventtype(0),
+  tTrackNumber(0),
+  tpercentile(0),
+  txPrimaryVertex(0),
+  tyPrimaryVertex(0),
+  tzPrimaryVertex(0),
+  txSecondaryVertex(0),
+  tySecondaryVertex(0),
+  tzSecondaryVertex(0),
+  tdcaTracks(0),
+  tCosPointingAngle(0),
+  tDCAV0toPrimaryVertex(0),
+  tHeSign(0),
+  tHepInTPC(0),
+  tHeTPCsignal(0),
+  tDcaHeToPrimVertex(0),
+  tHeEta(0),
+  tmomHex(0),
+  tmomHey(0),
+  tmomHez(0),
+  tmomHeAtSVx(0),
+  tmomHeAtSVy(0),
+  tmomHeAtSVz(0),
+  tHeTPCNcls(0),
+  tHeimpactXY(0),
+  tHeimpactZ(0),
+  tHeITSClusterMap(0),
+  tIsHeITSRefit(0),
+  tPionSign(0),
+  tPionpInTPC(0),
+  tPionTPCsignal(0),
+  tDcaPionToPrimVertex(0),
+  tPionEta(0),
+  tmomPionx(0),
+  tmomPiony(0),
+  tmomPionz(0),
+  tmomNegPionAtSVx(0),
+  tmomNegPionAtSVy(0),
+  tmomNegPionAtSVz(0),
+  tPionTPCNcls(0),
+  tPionimpactXY(0),
+  tPionimpactZ(0),
+  tPionITSClusterMap(0),
+  tIsPiITSRefit(0),
+  txn(0),
+  txp(0),
+  tchi2He(0),
+  tchi2Pi(0),
+  fNtuple4(0),
+  tHelrunNumber(0),
+  tHelBCNumber(0),
+  tHelOrbitNumber(0),
+  tHelPeriodNumber(0),
+  tHeleventtype(0),
+  tHelisHeITSrefit(0),
+  tHelpercentile(0),
+  tHelSign(0),
+  tHelpinTPC(0),
+  tHelGetTPCsignal(0),
+  tHelPx(0),
+  tHelPy(0),
+  tHelPz(0),
+  tHelEta(0),
+  tHelisTOF(0),
+  tHelpoutTPC(0),
+  tHeltimeTOF(0),
+  tHeltrackLenghtTOF(0),
+  tHelimpactXY(0),
+  tHelimpactZ(0),
+  tHelmapITS(0),
+  tHelTPCNcls(0),
+  tHelTRDsignal(0),
+  tHelxPrimaryVertex(0),
+  tHelyPrimaryVertex(0),
+  tHelzPrimaryVertex(0),
+  tHelchi2PerClusterTPC(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 (Cascade)
+  // Output slot #0 writes into a TList container ()
+
+  DefineInput(0, TChain::Class());
 
   DefineOutput(1, TList::Class());
+  DefineOutput(2, TTree::Class());
+  DefineOutput(3, TTree::Class());
+
+  fESDtrackCuts = new AliESDtrackCuts("fESDtrackCuts");
+  fESDtrackCuts->SetRequireITSStandAlone(kFALSE);
+  fESDtrackCuts->SetRequireITSPureStandAlone(kFALSE);
+      
+  fESDtrackCuts->SetRequireTPCRefit(kTRUE);
+  fESDtrackCuts->SetAcceptKinkDaughters(kFALSE);
+  fESDtrackCuts->SetMinNClustersTPC(60);
+  fESDtrackCuts->SetMaxChi2PerClusterTPC(5);
+  fESDtrackCuts->SetEtaRange(-0.9,0.9);
+
 }
 //_______________________________________________________
 AliAnalysisTaskHelium3Pi::~AliAnalysisTaskHelium3Pi() 
 { 
   // Destructor
-  if (fListHistCascade) {
-    delete fListHistCascade;
-    fListHistCascade = 0;
+  if (fListHist) {
+    delete fListHist;
+    fListHist = 0;
   }
-
+  
+  if (fESDtrackCuts) delete fESDtrackCuts;
+  if(fNtuple1) delete fNtuple1;
+  if(fNtuple4) delete fNtuple4;
 }
 //=================DEFINITION BETHE BLOCH==============================
 
@@ -192,8 +382,8 @@ Double_t AliAnalysisTaskHelium3Pi::BetheBloch(Double_t betaGamma,Double_t charge
 void AliAnalysisTaskHelium3Pi::UserCreateOutputObjects()
 {
 
-  fListHistCascade = new TList();
-  fListHistCascade->SetOwner();  // IMPORTANT!
+  fListHist = new TList();
+  fListHist->SetOwner();  // IMPORTANT!
 
   if(! fHistEventMultiplicity ){
     fHistEventMultiplicity   = new TH1F( "fHistEventMultiplicity" , "Nb of Events" , 10 , 0, 10);
@@ -207,150 +397,222 @@ void AliAnalysisTaskHelium3Pi::UserCreateOutputObjects()
     fHistEventMultiplicity->GetXaxis()->SetBinLabel(8,"SemiCentral Events  w/|Vz|<10cm");
     fHistEventMultiplicity->GetXaxis()->SetBinLabel(9,"MB Events   w/|Vz|<10cm");
 
-    fListHistCascade->Add(fHistEventMultiplicity);
+    fListHist->Add(fHistEventMultiplicity);
   }
 
   if(! fHistTrackMultiplicity ){
-    fHistTrackMultiplicity   = new TH2F( "fHistTrackMultiplicity" , "Nb of Tracks", 25000,0, 25000,105,-1,104);
+    fHistTrackMultiplicity   = new TH2F( "fHistTrackMultiplicity" , "Nb of Tracks", 2500,0, 25000,210,-1,104);
     fHistTrackMultiplicity->GetXaxis()->SetTitle("Number of tracks");
     fHistTrackMultiplicity->GetYaxis()->SetTitle("Percentile");
-    fListHistCascade->Add(fHistTrackMultiplicity);
+    fListHist->Add(fHistTrackMultiplicity);
   } 
 
   if(! fHistTrackMultiplicityCent ){
-    fHistTrackMultiplicityCent   = new TH2F( "fHistTrackMultiplicityCent", "Nb of Tracks Central Events", 25000,0, 25000,105,-1,104 );
+    fHistTrackMultiplicityCent   = new TH2F( "fHistTrackMultiplicityCent", "Nb of Tracks Central Events", 2500,0, 25000,210,-1,104 );
     fHistTrackMultiplicityCent->GetXaxis()->SetTitle("Number of tracks");
     fHistTrackMultiplicityCent->GetYaxis()->SetTitle("Percentile");
-    fListHistCascade->Add(fHistTrackMultiplicityCent);
+    fListHist->Add(fHistTrackMultiplicityCent);
   } 
 
   if(! fHistTrackMultiplicitySemiCent ){
-    fHistTrackMultiplicitySemiCent   = new TH2F( "fHistTrackMultiplicitySemiCent" , "Nb of Tracks SemiCentral Events", 25000,0, 25000 ,105,-1,104);
+    fHistTrackMultiplicitySemiCent   = new TH2F( "fHistTrackMultiplicitySemiCent" , "Nb of Tracks SemiCentral Events", 2500,0, 25000 ,210,-1,104);
     fHistTrackMultiplicitySemiCent->GetXaxis()->SetTitle("Number of tracks");
     fHistTrackMultiplicitySemiCent->GetYaxis()->SetTitle("Percentile");
-    fListHistCascade->Add(fHistTrackMultiplicitySemiCent);
+    fListHist->Add(fHistTrackMultiplicitySemiCent);
   } 
  
   if(! fHistTrackMultiplicityMB ){
-    fHistTrackMultiplicityMB   = new TH2F( "fHistTrackMultiplicityMB" , "Nb of Tracks MBral Events", 25000,0, 25000,105,-1,104 );
+    fHistTrackMultiplicityMB   = new TH2F( "fHistTrackMultiplicityMB" , "Nb of Tracks MBral Events", 2500,0, 25000,210,-1,104 );
     fHistTrackMultiplicityMB->GetXaxis()->SetTitle("Number of tracks");
     fHistTrackMultiplicityMB->GetYaxis()->SetTitle("Percentile");
-    fListHistCascade->Add(fHistTrackMultiplicityMB);
+    fListHist->Add(fHistTrackMultiplicityMB);
   } 
 
   if(! fHistTrackMultiplicityPVCent ){
-    fHistTrackMultiplicityPVCent   = new TH2F( "fHistTrackMultiplicityPVCent" , "Nb of Tracks Central Events", 25000,0, 25000,105,-1,104 );
+    fHistTrackMultiplicityPVCent   = new TH2F( "fHistTrackMultiplicityPVCent" , "Nb of Tracks Central Events", 2500,0, 25000,210,-1,104 );
     fHistTrackMultiplicityPVCent->GetXaxis()->SetTitle("Number of tracks");
     fHistTrackMultiplicityPVCent->GetYaxis()->SetTitle("Percentile");
-    fListHistCascade->Add(fHistTrackMultiplicityPVCent);
+    fListHist->Add(fHistTrackMultiplicityPVCent);
   } 
 
   if(! fHistTrackMultiplicityPVSemiCent ){
-    fHistTrackMultiplicityPVSemiCent   = new TH2F( "fHistTrackMultiplicityPVSemiCent" , "Nb of Tracks SemiCentral Events", 25000,0, 25000 ,105,-1,104);
+    fHistTrackMultiplicityPVSemiCent   = new TH2F( "fHistTrackMultiplicityPVSemiCent" , "Nb of Tracks SemiCentral Events", 2500,0, 25000 ,210,-1,104);
     fHistTrackMultiplicityPVSemiCent->GetXaxis()->SetTitle("Number of tracks");
     fHistTrackMultiplicityPVSemiCent->GetYaxis()->SetTitle("Percentile");
-    fListHistCascade->Add(fHistTrackMultiplicityPVSemiCent);
+    fListHist->Add(fHistTrackMultiplicityPVSemiCent);
   } 
  
   if(! fHistTrackMultiplicityPVMB ){
-    fHistTrackMultiplicityPVMB   = new TH2F( "fHistTrackMultiplicityPVMB" , "Nb of Tracks MBral Events", 25000,0, 25000,105,-1,104 );
+    fHistTrackMultiplicityPVMB   = new TH2F( "fHistTrackMultiplicityPVMB" , "Nb of Tracks MBral Events", 2500,0, 25000,210,-1,104 );
     fHistTrackMultiplicityPVMB->GetXaxis()->SetTitle("Number of tracks");
     fHistTrackMultiplicityPVMB->GetYaxis()->SetTitle("Percentile");
-    fListHistCascade->Add(fHistTrackMultiplicityPVMB);
+    fListHist->Add(fHistTrackMultiplicityPVMB);
   } 
 
-  if(! fHistMult){
-    fHistMult=new TH1F ("fHistMult","Number neg-pos", 10, -1,9);
-    fHistMult->GetXaxis()->SetTitle("Type of tracks");
-    fListHistCascade->Add(fHistMult);
-  }
   if(! fhBB ){
-    fhBB = new TH2F( "fhBB" , "BetheBlochTPC" , 1000,-6,6,1500,0,5000);
+    fhBB = new TH2F( "fhBB" , "BetheBlochTPC" , 120,-6,6,150,0,1500);
     fhBB->GetXaxis()->SetTitle("p/z (GeV/#it{c})");
     fhBB->GetYaxis()->SetTitle("TPC Signal");
-    fListHistCascade->Add(fhBB);
+    fListHist->Add(fhBB);
   }
 
   if(! fhTOF ){
-    fhTOF = new TH2F( "fhTOF" , "Scatter Plot TOF" , 1000,-6,6,1000,0,1.2);
+    fhTOF = new TH2F( "fhTOF" , "Scatter Plot TOF" , 120,-6,6,100,0,1.2);
     fhTOF->GetXaxis()->SetTitle("p/z (GeV/#it{c})");
     fhTOF->GetYaxis()->SetTitle("#beta");
-    fListHistCascade->Add(fhTOF);
+    fListHist->Add(fhTOF);
   }
 
   if(! fhMassTOF){
     fhMassTOF=new TH1F ("fhMassTOF","Particle Mass - TOF", 300,0 ,5);
     fhMassTOF->GetXaxis()->SetTitle("Mass (GeV/#it{c}^{2})");
-    fListHistCascade->Add(fhMassTOF);
+    fListHist->Add(fhMassTOF);
   }
 
   if(! fhBBPions ){
-    fhBBPions = new TH2F( "fhBBPions" , "Bethe-Bloch TPC Pions" , 1000,-6,6,1500,0,5000);
+    fhBBPions = new TH2F( "fhBBPions" , "Bethe-Bloch TPC Pions" , 120,-6,6,150,0,1500);
     fhBBPions->GetXaxis()->SetTitle("p/z (GeV/#it{c})");
     fhBBPions->GetYaxis()->SetTitle("TPC Signal");
-    fListHistCascade->Add(fhBBPions);
+    fListHist->Add(fhBBPions);
   }
   
   if(! fhBBHe ){
-    fhBBHe = new TH2F( "fhBBHe" , "Bethe-Bloch TPC He" , 1000,-6,6,1500,0,5000);
+    fhBBHe = new TH2F( "fhBBHe" , "Bethe-Bloch TPC He" , 120,-6,6,150,0,1500);
     fhBBHe->GetXaxis()->SetTitle("p/z (GeV/#it{c})");
     fhBBHe->GetYaxis()->SetTitle("TPC Signal");
-    fListHistCascade->Add(fhBBHe);
+    fListHist->Add(fhBBHe);
   }
   
   if(! fhNaPos ){
-    fhNaPos = new TH2F( "fhNaPos" , "Distribution Pos" , 500,0,5,500,-2,2);
+    fhNaPos = new TH2F( "fhNaPos" , "Distribution Pos" , 500,0,5,40,-10,10);
     fhNaPos->GetXaxis()->SetTitle("p/z (GeV/#it{c})");
     fhNaPos->GetYaxis()->SetTitle("(TPCSignal-bbtheo)/bbtheo (He)");
-    fListHistCascade->Add(fhNaPos);
+    fListHist->Add(fhNaPos);
   }
   
   if(! fhNaNeg ){
-    fhNaNeg = new TH2F( "fhNaNeg" , "Distribution Neg" , 500,0,5,500,-2,2);
+    fhNaNeg = new TH2F( "fhNaNeg" , "Distribution Neg" , 500,0,5,40,-10,10);
     fhNaNeg->GetXaxis()->SetTitle("p/z (GeV/#it{c})");
     fhNaNeg->GetYaxis()->SetTitle("(TPCSignal-bbtheo)/bbtheo (He)");
-    fListHistCascade->Add(fhNaNeg);
+    fListHist->Add(fhNaNeg);
   }
 
   if(! fBetavsTPCsignalPos ){
-    fBetavsTPCsignalPos = new TH2F("fBetavsTPCsignalPos","fBetavsTPCsignalPos",1000,0,1.2,1500,0,5000);
+    fBetavsTPCsignalPos = new TH2F("fBetavsTPCsignalPos","fBetavsTPCsignalPos",100,0,1.2,150,0,1500);
     fBetavsTPCsignalPos->GetXaxis()->SetTitle("#beta");
     fBetavsTPCsignalPos->GetYaxis()->SetTitle("TPC Signal");
-    fListHistCascade->Add(fBetavsTPCsignalPos);
+    fListHist->Add(fBetavsTPCsignalPos);
   }
   
   if(! fBetavsTPCsignalNeg ){
-    fBetavsTPCsignalNeg = new TH2F("fBetavsTPCsignalNeg","fBetavsTPCsignalNeg",1000,0,1.2,1500,0,5000);
+    fBetavsTPCsignalNeg = new TH2F("fBetavsTPCsignalNeg","fBetavsTPCsignalNeg",100,0,1.2,150,0,1500);
     fBetavsTPCsignalNeg->GetXaxis()->SetTitle("#beta");
     fBetavsTPCsignalNeg->GetYaxis()->SetTitle("TPC Signal");
-    fListHistCascade->Add(fBetavsTPCsignalNeg);
+    fListHist->Add(fBetavsTPCsignalNeg);
   }
   
-  if(! fHelium3TOF){
-    fHelium3TOF = new TH2F("fHelium3massTOF","Helium3 beta vs p/z",1000,0,6,1000,0,1.2);
-    fHelium3TOF->GetXaxis()->SetTitle("p/z (GeV/#it{c})");
-    fHelium3TOF->GetYaxis()->SetTitle("#beta");
-    fListHistCascade->Add(fHelium3TOF);
-  }
+
   
   if(! fNtuple1 ) {
-    fNtuple1 = new TNtuple("fNtuple1","Ntuple1","runNumber:bunchcross:orbit:period:eventtype:TrackNumber:percentile:xPrimaryVertex:yPrimaryVertex:zPrimaryVertex:xSecondaryVertex:ySecondaryVertex:zSecondaryVertex:dcaTracks:CosPointingAngle:DCAV0toPrimaryVertex:HeSign:HepInTPC:HeTPCsignal:DcaHeToPrimVertex:HeEta:momHex:momHey:momHez:momHeAtSVx:momHeAtSVy:momHeAtSVz:HeTPCNcls:HeimpactXY:HeimpactZ:HeITSClusterMap:IsHeITSRefit:PionSign:PionpInTPC:PionTPCsignal:DcaPionToPrimVertex:PionEta:momPionx:momPiony:momPionz:momNegPionAtSVx:momNegPionAtSVy:momNegPionAtSVz:PionTPCNcls:PionimpactXY:PionimpactZ:PionITSClusterMap:IsPiITSRefit:xn:xp");
     
-    fListHistCascade->Add(fNtuple1);
+    fNtuple1 = new TTree("fNtuple1","fNtuple1");
+    
+    fNtuple1->Branch("trunNumber"           ,&trunNumber           ,"trunNumber/F");
+    fNtuple1->Branch("tbunchcross"          ,&tbunchcross          ,"tbunchcross/F");
+    fNtuple1->Branch("torbit"               ,&torbit               ,"torbit/F");
+    fNtuple1->Branch("tperiod"              ,&tperiod              ,"tperiod/F");
+    fNtuple1->Branch("teventtype"           ,&teventtype           ,"teventtype/F");
+    fNtuple1->Branch("tTrackNumber"         ,&tTrackNumber         ,"tTrackNumber/F");
+    fNtuple1->Branch("tpercentile"          ,&tpercentile          ,"tpercentile/F") ;
+    fNtuple1->Branch("txPrimaryVertex"      ,&txPrimaryVertex      ,"txPrimaryVertex/F");
+    fNtuple1->Branch("tyPrimaryVertex"      ,&tyPrimaryVertex      ,"tyPrimaryVertex/F");
+    fNtuple1->Branch("tzPrimaryVertex"      ,&tzPrimaryVertex      ,"tzPrimaryVertex/F");
+    fNtuple1->Branch("txSecondaryVertex"    ,&txSecondaryVertex    ,"txSecondaryVertex/F");
+    fNtuple1->Branch("tySecondaryVertex"    ,&tySecondaryVertex    ,"tySecondaryVertex/F");
+    fNtuple1->Branch("tzSecondaryVertex"    ,&tzSecondaryVertex    ,"tzSecondaryVertex/F");
+    fNtuple1->Branch("tdcaTracks"           ,&tdcaTracks           ,"tdcaTracks/F");
+    fNtuple1->Branch("tCosPointingAngle"    ,&tCosPointingAngle    ,"tCosPointingAngle/F");
+    fNtuple1->Branch("tDCAV0toPrimaryVertex",&tDCAV0toPrimaryVertex,"tDCAV0toPrimaryVertex/F");
+    fNtuple1->Branch("tHeSign"              ,&tHeSign              ,"tHeSign/F");
+    fNtuple1->Branch("tHepInTPC"            ,&tHepInTPC            ,"tHepInTPC/F");
+    fNtuple1->Branch("tHeTPCsignal"         ,&tHeTPCsignal         ,"tHeTPCsignal/F");
+    fNtuple1->Branch("tDcaHeToPrimVertex"   ,&tDcaHeToPrimVertex   ,"tDcaHeToPrimVertex/F");
+    fNtuple1->Branch("tHeEta"               ,&tHeEta               ,"tHeEta/F");
+    fNtuple1->Branch("tmomHex"              ,&tmomHex              ,"tmomHex/F");
+    fNtuple1->Branch("tmomHey"              ,&tmomHey              ,"tmomHey/F");
+    fNtuple1->Branch("tmomHez"              ,&tmomHez              ,"tmomHez/F");
+    fNtuple1->Branch("tmomHeAtSVx"          ,&tmomHeAtSVx          ,"tmomHeAtSVx/F");
+    fNtuple1->Branch("tmomHeAtSVy"          ,&tmomHeAtSVy          ,"tmomHeAtSVy/F");
+    fNtuple1->Branch("tmomHeAtSVz"          ,&tmomHeAtSVz          ,"tmomHeAtSVz/F");
+    fNtuple1->Branch("tHeTPCNcls"           ,&tHeTPCNcls           ,"tHeTPCNcls/F");
+    fNtuple1->Branch("tHeimpactXY"          ,&tHeimpactXY          ,"tHeimpactXY/F");
+    fNtuple1->Branch("tHeimpactZ"           ,&tHeimpactZ           ,"tHeimpactZ/F");
+    fNtuple1->Branch("tHeITSClusterMap"     ,&tHeITSClusterMap     ,"tHeITSClusterMap/F");
+    fNtuple1->Branch("tIsHeITSRefit"        ,&tIsHeITSRefit        ,"tIsHeITSRefit/F");
+    fNtuple1->Branch("tPionSign"            ,&tPionSign            ,"tPionSign/F");
+    fNtuple1->Branch("tPionpInTPC"          ,&tPionpInTPC          ,"tPionpInTPC/F");
+    fNtuple1->Branch("tPionTPCsignal"       ,&tPionTPCsignal       ,"tPionTPCsignal/F");
+    fNtuple1->Branch("tDcaPionToPrimVertex" ,&tDcaPionToPrimVertex ,"tDcaPionToPrimVertex/F");
+    fNtuple1->Branch("tPionEta"             ,&tPionEta             ,"tPionEta/F");
+    fNtuple1->Branch("tmomPionx"            ,&tmomPionx            ,"tmomPionx/F");
+    fNtuple1->Branch("tmomPiony"            ,&tmomPiony            ,"tmomPiony/F");
+    fNtuple1->Branch("tmomPionz"            ,&tmomPionz            ,"tmomPionz/F");
+    fNtuple1->Branch("tmomNegPionAtSVx"     ,&tmomNegPionAtSVx     ,"tmomNegPionAtSVx/F");
+    fNtuple1->Branch("tmomNegPionAtSVy"     ,&tmomNegPionAtSVy     ,"tmomNegPionAtSVy/F");
+    fNtuple1->Branch("tmomNegPionAtSVz"     ,&tmomNegPionAtSVz     ,"tmomNegPionAtSVz/F");
+    fNtuple1->Branch("tPionTPCNcls"         ,&tPionTPCNcls         ,"tPionTPCNcls/F");
+    fNtuple1->Branch("tPionimpactXY"        ,&tPionimpactXY        ,"tPionimpactXY/F");
+    fNtuple1->Branch("tPionimpactZ"         ,&tPionimpactZ         ,"tPionimpactZ/F");
+    fNtuple1->Branch("tPionITSClusterMap"   ,&tPionITSClusterMap   ,"tPionITSClusterMap/F");
+    fNtuple1->Branch("tIsPiITSRefit"        ,&tIsPiITSRefit        ,"tIsPiITSRefit/F");
+    fNtuple1->Branch("txn"                  ,&txn                  ,"txn/F");
+    fNtuple1->Branch("txp"                  ,&txp                  ,"txp/F");
+    fNtuple1->Branch("tchi2He"              ,&tchi2He              ,"tchi2He/F");
+    fNtuple1->Branch("tchi2Pi"              ,&tchi2Pi              ,"tchi2Pi/F");
+    
   }
   
   if(! fNtuple4 ) {
-    fNtuple4 = new TNtuple("fNtuple4","Ntuple4","runNumber:BCNumber:OrbitNumber:PeriodNumber:eventtype:isHeITSrefit:percentile:Sign:pinTPC:GetTPCsignal:Px:Py:Pz:Eta:isTOF:poutTPC:timeTOF:trackLenghtTOF:impactXY:impactZ:mapITS:TPCNcls:TRDsignal:xPrimaryVertex:yPrimaryVertex:zPrimaryVertex:chi2PerClusterTPC");
-    fListHistCascade->Add(fNtuple4);
-  } 
+    fNtuple4 = new TTree("fNtuple4","fNtuple4");
+    
+    fNtuple4->Branch("tHelrunNumber"        ,&tHelrunNumber        ,"tHelrunNumber/F");
+    fNtuple4->Branch("tHelBCNumber"         ,&tHelBCNumber         ,"tHelBCNumber/F");
+    fNtuple4->Branch("tHelOrbitNumber"      ,&tHelOrbitNumber      ,"tHelOrbitNumber/F");
+    fNtuple4->Branch("tHelPeriodNumber"     ,&tHelPeriodNumber     ,"tHelPeriodNumber/F");
+    fNtuple4->Branch("tHeleventtype"        ,&tHeleventtype        ,"tHeleventtype/F");
+    fNtuple4->Branch("tHelisHeITSrefit"     ,&tHelisHeITSrefit     ,"tHelisHeITSrefit/F");
+    fNtuple4->Branch("tHelpercentile"       ,&tHelpercentile       ,"tHelpercentile/F");
+    fNtuple4->Branch("tHelSign"             ,&tHelSign             ,"tHelSign/F");
+    fNtuple4->Branch("tHelpinTPC"           ,&tHelpinTPC           ,"tHelpinTPC/F");
+    fNtuple4->Branch("tHelGetTPCsignal"     ,&tHelGetTPCsignal     ,"tHelGetTPCsignal/F");
+    fNtuple4->Branch("tHelPx"               ,&tHelPx               ,"tHelPx/F");
+    fNtuple4->Branch("tHelPy"               ,&tHelPy               ,"tHelPy/F");
+    fNtuple4->Branch("tHelPz"               ,&tHelPz               ,"tHelPz/F");
+    fNtuple4->Branch("tHelEta"              ,&tHelEta              ,"tHelEta/F");
+    fNtuple4->Branch("tHelisTOF"            ,&tHelisTOF            ,"tHelisTOF/F");
+    fNtuple4->Branch("tHelpoutTPC"          ,&tHelpoutTPC          ,"tHelpoutTPC/F");
+    fNtuple4->Branch("tHeltimeTOF"          ,&tHeltimeTOF          ,"tHeltimeTOF/F");
+    fNtuple4->Branch("tHeltrackLenghtTOF"   ,&tHeltrackLenghtTOF   ,"tHeltrackLenghtTOF/F");
+    fNtuple4->Branch("tHelimpactXY"         ,&tHelimpactXY         ,"tHelimpactXY/F");
+    fNtuple4->Branch("tHelimpactZ"          ,&tHelimpactZ          ,"tHelimpactZ/F");
+    fNtuple4->Branch("tHelmapITS"           ,&tHelmapITS           ,"tHelmapITS/F");
+    fNtuple4->Branch("tHelTPCNcls"          ,&tHelTPCNcls          ,"tHelTPCNcls/F");
+    fNtuple4->Branch("tHelTRDsignal"        ,&tHelTRDsignal        ,"tHelTRDsignal/F");
+    fNtuple4->Branch("tHelxPrimaryVertex"   ,&tHelxPrimaryVertex   ,"tHelxPrimaryVertex/F");
+    fNtuple4->Branch("tHelyPrimaryVertex"   ,&tHelyPrimaryVertex   ,"tHelyPrimaryVertex/F");
+    fNtuple4->Branch("tHelzPrimaryVertex"   ,&tHelzPrimaryVertex   ,"tHelzPrimaryVertex/F");
+    fNtuple4->Branch("tHelchi2PerClusterTPC",&tHelchi2PerClusterTPC,"tHelchi2PerClusterTPC/F");
+    
 
-  PostData(1,  fListHistCascade);
+  } 
 
+  PostData(1,  fListHist);
+  PostData(2,  fNtuple1);
+  PostData(3,  fNtuple4);
 }// end UserCreateOutputObjects
 
 
-
 //====================== USER EXEC ========================
 
 void AliAnalysisTaskHelium3Pi::UserExec(Option_t *) 
@@ -360,36 +622,26 @@ void AliAnalysisTaskHelium3Pi::UserExec(Option_t *)
   //!*********************!//
   //!  Define variables   !//
   //!*********************!//
-  Float_t vett1[50];
-  for(Int_t i=0;i<50;i++) vett1[i]=0;
-
-  Float_t vett4[40];
-  for(Int_t i=0;i<40;i++) vett4[i]=0;
-  
-  Double_t ITSsample[4];
-  for(Int_t i=0;i<4;i++)ITSsample[i]=0;
 
-  Double_t  pinTPC=0.,poutTPC=0.,TPCSignal=0.;
+  Double_t pinTPC=0.,poutTPC=0.,TPCSignal=0.;
   Double_t xPrimaryVertex=0.,yPrimaryVertex=0.,zPrimaryVertex=0.;
   Double_t massTOF=0.,timeTOF=0.,trackLenghtTOF=0.,betaTOF=0.;
 
   ULong_t  status=0;
-  ULong_t  statusT=0;
+  //  ULong_t  statusT=0;
   ULong_t  statusPi=0;
 
-  Bool_t   isTPC=kFALSE,isTOF=kFALSE,isTOFHe=kFALSE,IsHeITSRefit=kFALSE,isTOFPi=kFALSE,IsPiITSRefit=kFALSE ;
+  Bool_t   isTPC=kFALSE,isTOF=kFALSE,IsHeITSRefit=kFALSE,IsPiITSRefit=kFALSE ;
 
   Float_t nSigmaNegPion=0.;
-  Float_t nSigmaNegPion1=0.;
-  Float_t nSigmaNegPion2=0.;
 
   Double_t cutNSigma = 3;
-  Double_t bbtheoM=0.,bbtheoP=0.,bbtheo=0.;
+  Double_t bbtheoM=0.,bbtheo=0.;
   Double_t zNathashaNeg=0;
   Double_t zNathashaPos=0;
   Double_t fPos[3]={0.,0.,0.};
   Double_t runNumber=0.;
-  Double_t evNumber=0.;
+  //  Double_t evNumber=0.;
 
   Double_t BCNumber=0.;
   Double_t OrbitNumber=0.;
@@ -451,12 +703,20 @@ void AliAnalysisTaskHelium3Pi::UserExec(Option_t *)
   fHistTrackMultiplicity->Fill(TrackNumber,percentile); //tracce per evento
 
   //****************************************
+  
+  // PID
+  
+  AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
+  AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
+  fPIDResponse=inputHandler->GetPIDResponse(); // data member di tipo "const AliPIDResponse *fPIDResponse;"
+  //  cout<<"fPIDResponse "<<fPIDResponse<<endl;
+  //===========================================
 
   Int_t eventtype=-99;
   
-  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);
+  Bool_t isSelectedCentral     = (inputHandler->IsEventSelected() & AliVEvent::kCentral);
+  Bool_t isSelectedSemiCentral = (inputHandler->IsEventSelected() & AliVEvent::kSemiCentral);
+  Bool_t isSelectedMB          = (inputHandler->IsEventSelected() & AliVEvent::kMB);
  
   if(isSelectedCentral){
     fHistEventMultiplicity->Fill(3);
@@ -533,72 +793,40 @@ void AliAnalysisTaskHelium3Pi::UserExec(Option_t *)
     
     Float_t impactXY=-999, impactZ=-999;
     Float_t impactXYpi=-999, impactZpi=-999;
-    
-    //!   SELECTIONS:
-    //! - No ITSpureSA
-    //! - ITSrefit
-    //! - TPCrefit
-    //! - ITSmap !=0
-    
-    // ******************* Track Cuts Definitions ********************//
-  
-    //! ITS
 
-    AliESDtrackCuts* esdtrackCutsITS = new AliESDtrackCuts("esdtrackCutsITS");
-    esdtrackCutsITS->SetRequireITSStandAlone(kFALSE);
-    esdtrackCutsITS->SetRequireITSPureStandAlone(kFALSE);
-    
-    //! TPC
-    
-    Int_t    minclsTPC=60;
-    Double_t maxchi2perTPCcl=5.;
-    
-    AliESDtrackCuts* esdtrackCutsTPC = new AliESDtrackCuts("esdtrackCutsTPC");
-    esdtrackCutsTPC->SetRequireTPCRefit(kTRUE);
-    esdtrackCutsTPC->SetAcceptKinkDaughters(kFALSE);
-    esdtrackCutsTPC->SetMinNClustersTPC(minclsTPC);
-    esdtrackCutsTPC->SetMaxChi2PerClusterTPC(maxchi2perTPCcl);
     
-    //*********************************************+
+    //*************************************************************
     
     runNumber = lESDevent->GetRunNumber();
-    evNumber  = lESDevent->GetEventNumberInFile();
-    
     BCNumber    = lESDevent->GetBunchCrossNumber();
     OrbitNumber = lESDevent->GetOrbitNumber();
     PeriodNumber= lESDevent->GetPeriodNumber();
     
     //*************************************************************
-    
-    TF1 *foPion=new TF1("foPion", "[0]*([1]*TMath::Power(TMath::Sqrt(1 + (x/0.13957)*(x/0.13957))/(x/0.13957) , [3]) - 1 - TMath::Power(TMath::Sqrt(1 + (x/0.13957)*(x/0.13957))/(x/0.13957) , [3])*TMath::Log([2] + 1/TMath::Power((x/0.13957), [4])))",0.01,20);
-    foPion->SetParameters(4.1,8.98482806165147636e+00,1.54000000000000005e-05,2.30445734159456084e+00,2.25624744086878559e+00);
-    
-    //--------------------------------------------
-    
+
     for (Int_t j=0; j<TrackNumber; j++) { //loop on tracks
       
       AliESDtrack *esdtrack=lESDevent->GetTrack(j);
-      
+      //      AliVTrack*  esdtrack= (AliVTrack *) fEvent->GetTrack(iT);
+
+     
       if(!esdtrack) { 
        AliError(Form("ERROR: Could not retrieve esdtrack %d",j)); 
        continue; 
       }
-      
+
       // ************** Track cuts ****************
       
-      status  = (ULong_t)esdtrack->GetStatus();
+      if (!fESDtrackCuts->AcceptTrack(esdtrack)) continue;
+
       
+      status  = (ULong_t)esdtrack->GetStatus();
       isTPC   = (((status) & AliESDtrack::kTPCin)  != 0);
       isTOF   = ((((status) & AliESDtrack::kTOFout) != 0) && (((status) & AliESDtrack::kTIME) != 0));
-      
-      Bool_t IsTrackAcceptedTPC =  esdtrackCutsTPC->AcceptTrack(esdtrack);
-      Bool_t IsTrackAcceptedITS =  esdtrackCutsITS->AcceptTrack(esdtrack);
-      
-      if (!(IsTrackAcceptedTPC && IsTrackAcceptedITS)) continue;
+
       
       UInt_t mapITS=esdtrack->GetITSClusterMap();
-      //    if(mapITS==0) continue;
-      
+            
       //----------------------------------------------
       
       //****** Cuts from  AliV0Vertex.cxx *************
@@ -612,20 +840,20 @@ void AliAnalysisTaskHelium3Pi::UserExec(Option_t *)
       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(); 
+      pinTPC= trackIn.GetP(); 
       
+      //pinTPC= esdtrack->GetTPCMomentum();
+
       poutTPC=pinTPC;
       
-      fHistMult->Fill(0);
       
       if((status) & (AliESDtrack::kITSrefit!=0)){
-       fHistMult->Fill(1);
        fhBB->Fill(pinTPC*esdtrack->GetSign(),TPCSignal);
       }
       
@@ -655,91 +883,95 @@ void AliAnalysisTaskHelium3Pi::UserExec(Option_t *)
       
       //pass2
       
-      bbtheo =BetheBloch((2*pinTPC)/3.,2,kTRUE);    //! OK
-      bbtheoM=(1 - 0.08*5)*bbtheo;                  //! OK 
-      bbtheoP=(1 + 0.08*5)*bbtheo;                  //! OK
+      // bbtheo =BetheBloch((2*pinTPC)/3.,2,kTRUE);    //! OK
+      // bbtheoM=(1 - 0.08*5)*bbtheo;                  //! OK 
+      // bbtheoP=(1 + 0.08*5)*bbtheo;                  //! OK
       
-      fHistMult->Fill(2);
+
+      bbtheo = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 7);
       
       if(esdtrack->GetSign()<0){
-       zNathashaNeg=(TPCSignal-bbtheo)/bbtheo;
+       zNathashaNeg=bbtheo;//(TPCSignal-bbtheo)/bbtheo;
+       //      cout<<"BBtheo 1 :"<<zNathashaNeg<<endl;
        fhNaNeg->Fill(pinTPC,zNathashaNeg); 
       }
       
       if(esdtrack->GetSign() > 0.){
-       zNathashaPos=(TPCSignal-bbtheo)/bbtheo;
+               zNathashaPos=bbtheo;//(TPCSignal-bbtheo)/bbtheo;
        fhNaPos->Fill(pinTPC,zNathashaPos); 
       }
       
-      nSigmaNegPion1 = TMath::Abs((TPCSignal - foPion->Eval(pinTPC))/foPion->Eval(pinTPC))/0.07; 
-      nSigmaNegPion2 = TMath::Abs((TPCSignal - foPion->Eval(pinTPC))/foPion->Eval(pinTPC))/0.04; 
-      
-      if(pinTPC<0.6)
-       nSigmaNegPion=nSigmaNegPion1;
-      if(pinTPC>=0.6)
-       nSigmaNegPion=nSigmaNegPion2;
+      nSigmaNegPion=TMath::Abs(fPIDResponse->NumberOfSigmasTPC(esdtrack,(AliPID::EParticleType) 2));
+      //2 is pion
       
       if ( (nSigmaNegPion < cutNSigma)){ 
        
+       //      cout<<"Nsigma pi: "<<nSigmaNegPion<<endl;
+       
        fhBBPions->Fill(pinTPC*esdtrack->GetSign(),TPCSignal);
        
-       if(pinTPC<3){
+       if(pinTPC<3.){
          PionsTPC[nPionsTPC++]=j;
        }
       }
+    
+      //      nSigmaNegPion=(fPIDResponse->NumberOfSigmasTPC(esdtrack,(AliPID::EParticleType) 2));
       
-      if( TPCSignal > bbtheoM ) {
+      bbtheoM = TMath::Abs((fPIDResponse->NumberOfSigmasTPC(esdtrack,(AliPID::EParticleType) 7)));
+      
+      //      if( TPCSignal > bbtheoM ) {
+      //      if( bbtheoM > -3.) {
+      if( bbtheoM < 3.) {
        
        if(pinTPC>0.6){
          
          fhBBHe->Fill(pinTPC*esdtrack->GetSign(),TPCSignal);
          HeTPC[nHeTPC++]=j;
          
-         
          Bool_t isHeITSrefit=((status) & (AliESDtrack::kITSrefit));
          
          esdtrack->GetImpactParameters(impactXY, impactZ);
-         esdtrack->GetITSdEdxSamples(ITSsample);
-         
          
          Int_t  fIdxInt[200]; //dummy array
          Int_t nClustersTPC = esdtrack->GetTPCclusters(fIdxInt);
          
          Float_t chi2PerClusterTPC = esdtrack->GetTPCchi2()/(Float_t)(nClustersTPC);
          
-         vett4[0] =(Float_t)runNumber;
-         vett4[1] =(Float_t)BCNumber;
-         vett4[2] =(Float_t)OrbitNumber;
-         vett4[3] =(Float_t)PeriodNumber;
-         vett4[4] =(Float_t)eventtype;
-         vett4[5] =(Float_t)isHeITSrefit;
-         vett4[6] =(Float_t)percentile;
-         vett4[7] =(Float_t)esdtrack->GetSign();
-         vett4[8] =(Float_t)pinTPC;
-         vett4[9] =(Float_t)esdtrack->GetTPCsignal();
-         vett4[10]=(Float_t)esdtrack->Px();
-         vett4[11]=(Float_t)esdtrack->Py();
-         vett4[12]=(Float_t)esdtrack->Pz();
-         vett4[13]=(Float_t)esdtrack->Eta();
-         vett4[14]=(Float_t)isTOF;
-         vett4[15]=(Float_t)poutTPC;
-         vett4[16]=(Float_t)timeTOF;
-         vett4[17]=(Float_t)trackLenghtTOF;
-         vett4[18]=(Float_t)impactXY;
-         vett4[19]=(Float_t)impactZ;
-         vett4[20]=(Float_t)mapITS;
-         vett4[21]=(Float_t)esdtrack->GetTPCNcls();
-         vett4[22]=(Float_t)esdtrack->GetTRDsignal();
-         vett4[23]=(Float_t)xPrimaryVertex;
-         vett4[24]=(Float_t)yPrimaryVertex;
-         vett4[25]=(Float_t)zPrimaryVertex;
-         vett4[26]=(Float_t)chi2PerClusterTPC;
-         
-         fNtuple4->Fill(vett4);
+         tHelrunNumber         =(Float_t)runNumber;
+         tHelBCNumber          =(Float_t)BCNumber;
+         tHelOrbitNumber       =(Float_t)OrbitNumber;
+         tHelPeriodNumber      =(Float_t)PeriodNumber;
+         tHeleventtype         =(Float_t)eventtype;
+         tHelisHeITSrefit      =(Float_t)isHeITSrefit;
+         tHelpercentile        =(Float_t)percentile;
+         tHelSign              =(Float_t)esdtrack->GetSign();
+         tHelpinTPC            =(Float_t)pinTPC;
+         tHelGetTPCsignal      =(Float_t)esdtrack->GetTPCsignal();
+         tHelPx                =(Float_t)esdtrack->Px();
+         tHelPy                =(Float_t)esdtrack->Py();
+         tHelPz                =(Float_t)esdtrack->Pz();
+         tHelEta               =(Float_t)esdtrack->Eta();
+         tHelisTOF             =(Float_t)isTOF;
+         tHelpoutTPC           =(Float_t)poutTPC;
+         tHeltimeTOF           =(Float_t)timeTOF;
+         tHeltrackLenghtTOF    =(Float_t)trackLenghtTOF;
+         tHelimpactXY          =(Float_t)impactXY;
+         tHelimpactZ           =(Float_t)impactZ;
+         tHelmapITS            =(Float_t)mapITS;
+         tHelTPCNcls           =(Float_t)esdtrack->GetTPCNcls();
+         tHelTRDsignal         =(Float_t)esdtrack->GetTRDsignal();
+         tHelxPrimaryVertex    =(Float_t)xPrimaryVertex;
+         tHelyPrimaryVertex    =(Float_t)yPrimaryVertex;
+         tHelzPrimaryVertex    =(Float_t)zPrimaryVertex;
+         tHelchi2PerClusterTPC =(Float_t)chi2PerClusterTPC;            
+                 
+         fNtuple4->Fill();
        }
       }
-    }       //! track
-    
+    }  //! track
+         
+    PionsTPC.Set(nPionsTPC);
+    HeTPC.Set(nHeTPC);
     
     Double_t        DcaHeToPrimVertex=0;
     Double_t        DcaPionToPrimVertex=0;
@@ -749,9 +981,6 @@ void AliAnalysisTaskHelium3Pi::UserExec(Option_t *)
     
     // Track 
     
-    AliESDtrack  *PionTrack = 0x0;
-    AliESDtrack  *HeTrack = 0x0;
-    
     // Vettors for il PxPyPz
     
     Double_t momPionVett[3];
@@ -777,16 +1006,16 @@ void AliAnalysisTaskHelium3Pi::UserExec(Option_t *)
       
       Int_t PionIdx=PionsTPC[k];
       
-      PionTrack=lESDevent->GetTrack(PionIdx);
+      AliESDtrack  *PionTrack=lESDevent->GetTrack(PionIdx);
       
       statusPi = (ULong_t)PionTrack->GetStatus();
-      isTOFPi  = ((((statusPi) & (AliESDtrack::kTOFout)) != 0) && (((statusPi) & (AliESDtrack::kTIME)) != 0));
+      //      isTOFPi  = ((((statusPi) & (AliESDtrack::kTOFout)) != 0) && (((statusPi) & (AliESDtrack::kTIME)) != 0));
       IsPiITSRefit = ((statusPi) & (AliESDtrack::kITSrefit)); 
       
       if (PionTrack) 
        DcaPionToPrimVertex = TMath::Abs(PionTrack->GetD(xPrimaryVertex, yPrimaryVertex,lMagneticField)); //OK
       
-      if(DcaPionToPrimVertex<0.2)continue; //qui
+      if(DcaPionToPrimVertex<0.2)continue; 
       
       AliExternalTrackParam trackInPion(*PionTrack);  
       
@@ -794,10 +1023,10 @@ void AliAnalysisTaskHelium3Pi::UserExec(Option_t *)
        
        Int_t HeIdx=HeTPC[i];
        
-       HeTrack=lESDevent->GetTrack(HeIdx);
+        AliESDtrack  *HeTrack=lESDevent->GetTrack(HeIdx);
        
-       statusT= (ULong_t)HeTrack->GetStatus();
-       isTOFHe   = (((statusT & AliESDtrack::kTOFout) != 0) && ((statusT & AliESDtrack::kTIME) != 0));
+       //      statusT= (ULong_t)HeTrack->GetStatus();
+       //      isTOFHe   = (((statusT & AliESDtrack::kTOFout) != 0) && ((statusT & AliESDtrack::kTIME) != 0));
        IsHeITSRefit = (status & AliESDtrack::kITSrefit); 
        
        if (HeTrack) 
@@ -876,70 +1105,80 @@ void AliAnalysisTaskHelium3Pi::UserExec(Option_t *)
        vPion.SetXYZM(momPionVettAt[0],momPionVettAt[1],momPionVettAt[2],PionMass);       
        vSum=vHelium+vPion;
        
-       if(vSum.M()>3.1)continue;
+       if(vSum.M()>3.2)
+         continue;
+
+       Int_t  fIdxInt[200]; //dummy array
+       Int_t nClustersTPCHe = HeTrack->GetTPCclusters(fIdxInt);
+       Int_t nClustersTPCPi = PionTrack->GetTPCclusters(fIdxInt);
        
        //----------------------------------------------------------------------//
-       
-       vett1[0]=(Float_t)runNumber;
-       vett1[1]=(Float_t)BCNumber;
-       vett1[2]=(Float_t)OrbitNumber;
-       vett1[3]=(Float_t)PeriodNumber;
-       vett1[4]=(Float_t)eventtype;
-       vett1[5]=(Float_t)TrackNumber;
-       vett1[6]=(Float_t)percentile;
-       vett1[7]=(Float_t)xPrimaryVertex; //PRIMARY
-       vett1[8]=(Float_t)yPrimaryVertex;
-       vett1[9]=(Float_t)zPrimaryVertex;
-       vett1[10]=(Float_t)fPos[0]; //SECONDARY
-       vett1[11]=(Float_t)fPos[1];
-       vett1[12]=(Float_t)fPos[2];
-       vett1[13]=(Float_t)dca;           //between 2 tracks
-       vett1[14]=(Float_t)CosPointingAngle;          //cosPointingAngle da V0
-       vett1[15]=(Float_t)vertex.GetD(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex);
-       vett1[16]=(Float_t)HeTrack->GetSign(); //He
-       vett1[17]=(Float_t)trackInHe.GetP();
-       vett1[18]=(Float_t)HeTrack->GetTPCsignal();
-       vett1[19]=(Float_t)DcaHeToPrimVertex;
-       vett1[20]=(Float_t)HeTrack->Eta();
-       vett1[21]=(Float_t)momHeVett[0];
-       vett1[22]=(Float_t)momHeVett[1];
-       vett1[23]=(Float_t)momHeVett[2];
-       vett1[24]=(Float_t)momHeVettAt[0];
-       vett1[25]=(Float_t)momHeVettAt[1];
-       vett1[26]=(Float_t)momHeVettAt[2];
-       vett1[27]=(Float_t)HeTrack->GetTPCNcls();
-       vett1[28]=(Float_t)impactXY;
-       vett1[29]=(Float_t)impactZ;
-       vett1[30]=(Float_t)HeTrack->GetITSClusterMap();
-       vett1[31]=(Float_t)IsHeITSRefit;
-       vett1[32]=(Float_t)PionTrack->GetSign(); //Pion
-       vett1[33]=(Float_t)trackInPion.GetP();
-       vett1[34]=(Float_t)PionTrack->GetTPCsignal();
-       vett1[35]=(Float_t)DcaPionToPrimVertex;
-       vett1[36]=(Float_t)PionTrack->Eta();
-       vett1[37]=(Float_t)momPionVett[0];
-       vett1[38]=(Float_t)momPionVett[1];
-       vett1[39]=(Float_t)momPionVett[2];
-       vett1[40]=(Float_t)momPionVettAt[0];
-       vett1[41]=(Float_t)momPionVettAt[1];
-       vett1[42]=(Float_t)momPionVettAt[2];
-       vett1[43]=(Float_t)PionTrack->GetTPCNcls();
-       vett1[44]=(Float_t)impactXYpi;
-       vett1[45]=(Float_t)impactZpi;
-       vett1[46]=(Float_t)PionTrack->GetITSClusterMap();
-       vett1[47]=(Float_t)IsPiITSRefit;
-       vett1[48]=(Float_t)xn;
-       vett1[49]=(Float_t)xp;
-       
-       fNtuple1->Fill(vett1);  
-       
+
+       trunNumber              =(Float_t)runNumber;
+       tbunchcross             =(Float_t)BCNumber;
+       torbit                  =(Float_t)OrbitNumber;
+       tperiod                 =(Float_t)PeriodNumber;
+       teventtype              =(Float_t)eventtype;
+       tTrackNumber            =(Float_t)TrackNumber;
+       tpercentile             =(Float_t)percentile;
+       txPrimaryVertex         =(Float_t)xPrimaryVertex; //PRIMARY
+       tyPrimaryVertex         =(Float_t)yPrimaryVertex;
+       tzPrimaryVertex         =(Float_t)zPrimaryVertex;
+       txSecondaryVertex       =(Float_t)fPos[0]; //SECONDARY
+       tySecondaryVertex       =(Float_t)fPos[1];
+       tzSecondaryVertex       =(Float_t)fPos[2];
+       tdcaTracks              =(Float_t)dca;           //between 2 tracks
+       tCosPointingAngle       =(Float_t)CosPointingAngle;          //cosPointingAngle da V0
+       tDCAV0toPrimaryVertex   =(Float_t)vertex.GetD(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex);
+       tHeSign                 =(Float_t)HeTrack->GetSign(); //He
+       tHepInTPC               =(Float_t)trackInHe.GetP();
+       tHeTPCsignal            =(Float_t)HeTrack->GetTPCsignal();
+       tDcaHeToPrimVertex      =(Float_t)DcaHeToPrimVertex;
+       tHeEta                  =(Float_t)HeTrack->Eta();
+       tmomHex                 =(Float_t)momHeVett[0];
+       tmomHey                 =(Float_t)momHeVett[1];
+       tmomHez                 =(Float_t)momHeVett[2];
+       tmomHeAtSVx             =(Float_t)momHeVettAt[0];
+       tmomHeAtSVy             =(Float_t)momHeVettAt[1];
+       tmomHeAtSVz             =(Float_t)momHeVettAt[2];
+       tHeTPCNcls              =(Float_t)HeTrack->GetTPCNcls();
+       tHeimpactXY             =(Float_t)impactXY;
+       tHeimpactZ              =(Float_t)impactZ;
+       tHeITSClusterMap        =(Float_t)HeTrack->GetITSClusterMap();
+       tIsHeITSRefit           =(Float_t)IsHeITSRefit;
+       tPionSign               =(Float_t)PionTrack->GetSign(); //Pion
+       tPionpInTPC             =(Float_t)trackInPion.GetP();
+       tPionTPCsignal          =(Float_t)PionTrack->GetTPCsignal();
+       tDcaPionToPrimVertex    =(Float_t)DcaPionToPrimVertex;
+       tPionEta                =(Float_t)PionTrack->Eta();
+       tmomPionx               =(Float_t)momPionVett[0];
+       tmomPiony               =(Float_t)momPionVett[1];
+       tmomPionz               =(Float_t)momPionVett[2];
+       tmomNegPionAtSVx        =(Float_t)momPionVettAt[0];
+       tmomNegPionAtSVy        =(Float_t)momPionVettAt[1];
+       tmomNegPionAtSVz        =(Float_t)momPionVettAt[2];
+       tPionTPCNcls            =(Float_t)PionTrack->GetTPCNcls();
+       tPionimpactXY           =(Float_t)impactXYpi;
+       tPionimpactZ            =(Float_t)impactZpi;
+       tPionITSClusterMap      =(Float_t)PionTrack->GetITSClusterMap();
+       tIsPiITSRefit           =(Float_t)IsPiITSRefit;
+       txn                     =(Float_t)xn;
+       txp                     =(Float_t)xp;
+       tchi2He                 =(Float_t)HeTrack->GetTPCchi2()/(Float_t)(nClustersTPCHe);
+       tchi2Pi                 =(Float_t)PionTrack->GetTPCchi2()/(Float_t)(nClustersTPCPi);
+               
+
+       fNtuple1->Fill();  
+       vertex.Delete();
       }// positive TPC
       
     } //negative tpc
     
   }
   
-  PostData(1,fListHistCascade);
+  PostData(1,fListHist);
+  PostData(2,fNtuple1);
+  PostData(3,fNtuple4);
   
 } //end userexec