]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG0/dNdPt/AlidNdPtTrackDumpTask.cxx
Transition PWG0 -> PWGUD
[u/mrichter/AliRoot.git] / PWG0 / dNdPt / AlidNdPtTrackDumpTask.cxx
diff --git a/PWG0/dNdPt/AlidNdPtTrackDumpTask.cxx b/PWG0/dNdPt/AlidNdPtTrackDumpTask.cxx
deleted file mode 100644 (file)
index 75ff5f8..0000000
+++ /dev/null
@@ -1,874 +0,0 @@
-/**************************************************************************\r
-* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
-*                                                                        *\r
-* Author: The ALICE Off-line Project.                                    *\r
-* Contributors are mentioned in the code where appropriate.              *\r
-*                                                                        *\r
-* Permission to use, copy, modify and distribute this software and its   *\r
-* documentation strictly for non-commercial purposes is hereby granted   *\r
-* without fee, provided that the above copyright notice appears in all   *\r
-* copies and that both the copyright notice and this permission notice   *\r
-* appear in the supporting documentation. The authors make no claims     *\r
-* about the suitability of this software for any purpose. It is          *\r
-* provided "as is" without express or implied warranty.                  *\r
-**************************************************************************/\r
-\r
-#include "iostream"\r
-\r
-#include <TPDGCode.h>\r
-\r
-#include "TChain.h"\r
-#include "TTreeStream.h"\r
-#include "TTree.h"\r
-#include "TH1F.h"\r
-#include "TCanvas.h"\r
-#include "TList.h"\r
-#include "TFile.h"\r
-#include "TMatrixD.h"\r
-#include "TRandom.h"\r
-\r
-#include "AliHeader.h"  \r
-#include "AliGenEventHeader.h"  \r
-#include "AliInputEventHandler.h"  \r
-#include "AliStack.h"  \r
-#include "AliTrackReference.h"  \r
-\r
-#include "AliPhysicsSelection.h"\r
-#include "AliAnalysisTask.h"\r
-#include "AliAnalysisManager.h"\r
-#include "AliESDEvent.h"\r
-#include "AliESDfriend.h"\r
-#include "AliMCEvent.h"\r
-#include "AliESDInputHandler.h"\r
-#include "AliESDVertex.h"\r
-#include "AliTracker.h"\r
-#include "AliGeomManager.h"\r
-\r
-#include "AliCentrality.h"\r
-#include "AliESDVZERO.h"\r
-#include "AliMultiplicity.h"\r
-\r
-#include "AliESDtrackCuts.h"\r
-#include "AliMCEventHandler.h"\r
-#include "dNdPt/AlidNdPt.h"\r
-#include "dNdPt/AlidNdPtEventCuts.h"\r
-#include "dNdPt/AlidNdPtAcceptanceCuts.h"\r
-\r
-#include "dNdPt/AlidNdPtTrackDumpTask.h"\r
-\r
-using namespace std;\r
-\r
-ClassImp(AlidNdPtTrackDumpTask)\r
-\r
-//_____________________________________________________________________________\r
-AlidNdPtTrackDumpTask::AlidNdPtTrackDumpTask(const char *name) \r
-  : AliAnalysisTaskSE(name)\r
-  , fESD(0)\r
-  , fMC(0)\r
-  , fESDfriend(0)\r
-  , fOutput(0)\r
-  , fPitList(0)\r
-  , fUseMCInfo(kFALSE)\r
-  , fdNdPtEventCuts(0)\r
-  , fdNdPtAcceptanceCuts(0)\r
-  , fdNdPtRecAcceptanceCuts(0)\r
-  , fEsdTrackCuts(0)\r
-  , fTrigger(AliTriggerAnalysis::kMB1) \r
-  , fAnalysisMode(AlidNdPtHelper::kTPC) \r
-  , fOutputSummary(0)\r
-  , fTreeSRedirector(0)\r
-  , fCentralityEstimator(0)\r
-{\r
-  // Constructor\r
-\r
-  // Define input and output slots here\r
-  DefineOutput(0, TTree::Class());\r
-  //DefineOutput(1, TList::Class());\r
-\r
-}\r
-\r
-//_____________________________________________________________________________\r
-AlidNdPtTrackDumpTask::~AlidNdPtTrackDumpTask()\r
-{\r
-  if(fOutput) delete fOutput;  fOutput =0; \r
-  //if(fOutputSummary) delete fOutputSummary;  fOutputSummary =0; \r
-  if(fTreeSRedirector) delete fTreeSRedirector;  fTreeSRedirector =0; \r
-\r
-  if(fdNdPtEventCuts) delete fdNdPtEventCuts; fdNdPtEventCuts=NULL; \r
-  if(fdNdPtAcceptanceCuts) delete fdNdPtAcceptanceCuts; fdNdPtAcceptanceCuts=NULL;\r
-  if(fdNdPtRecAcceptanceCuts) delete fdNdPtRecAcceptanceCuts; fdNdPtRecAcceptanceCuts=NULL;  \r
-  if(fEsdTrackCuts) delete fEsdTrackCuts; fEsdTrackCuts=NULL;\r
-}\r
-\r
-//____________________________________________________________________________\r
-Bool_t AlidNdPtTrackDumpTask::Notify()\r
-{\r
-  static Int_t count = 0;\r
-  count++;\r
-  TTree *chain = (TChain*)GetInputData(0);\r
-  if(chain)\r
-  {\r
-    Printf("Processing %d. file: %s", count, chain->GetCurrentFile()->GetName());\r
-  }\r
-\r
-return kTRUE;\r
-}\r
-\r
-//_____________________________________________________________________________\r
-void AlidNdPtTrackDumpTask::UserCreateOutputObjects()\r
-{\r
-  // Create histograms\r
-  // Called once\r
-  fOutput = new TList;\r
-  fOutput->SetOwner();\r
-\r
-  //\r
-  // create output tree\r
-  //\r
-  fTreeSRedirector = new TTreeSRedirector("dNdPtOutliersAnalysisPbPb.root");\r
-\r
-  PostData(0, fOutputSummary);\r
-  //PostData(1, fOutput);\r
-}\r
-\r
-//_____________________________________________________________________________\r
-void AlidNdPtTrackDumpTask::UserExec(Option_t *) \r
-{\r
-  //\r
-  // Called for each event\r
-  //\r
-\r
-  // ESD event\r
-  fESD = (AliESDEvent*) (InputEvent());\r
-  if (!fESD) {\r
-    Printf("ERROR: ESD event not available");\r
-    return;\r
-  }\r
-\r
-  // MC event\r
-  if(fUseMCInfo) {\r
-    fMC = MCEvent();\r
-    if (!fMC) {\r
-      Printf("ERROR: MC event not available");\r
-      return;\r
-    }\r
-  }\r
-\r
-  fESDfriend = static_cast<AliESDfriend*>(fESD->FindListObject("AliESDfriend"));\r
-  if(!fESDfriend) {\r
-    Printf("ERROR: ESD friends not available");\r
-  }\r
-\r
-  //\r
-  Process(fESD,fMC,fESDfriend);\r
-\r
-  // Post output data.\r
-  PostData(0, fOutputSummary);\r
-  //PostData(1, fOutput);\r
-}\r
-\r
-//_____________________________________________________________________________\r
-void AlidNdPtTrackDumpTask::Process(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent, AliESDfriend *const esdFriend)\r
-{\r
-  //\r
-  // Process real and/or simulated events\r
-  //\r
-  if(!esdEvent) {\r
-    AliDebug(AliLog::kError, "esdEvent not available");\r
-    return;\r
-  }\r
-\r
-  // get selection cuts\r
-  AlidNdPtEventCuts *evtCuts = GetEventCuts(); \r
-  AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); \r
-  AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); \r
-\r
-  if(!evtCuts || !accCuts  || !esdTrackCuts) {\r
-    AliDebug(AliLog::kError, "cuts not available");\r
-    return;\r
-  }\r
-\r
-  // trigger selection\r
-  Bool_t isEventTriggered = kTRUE;\r
-  AliPhysicsSelection *physicsSelection = NULL;\r
-  AliTriggerAnalysis* triggerAnalysis = NULL;\r
-\r
-  // \r
-  AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();\r
-  if (!inputHandler)\r
-  {\r
-    Printf("ERROR: Could not receive input handler");\r
-    return;\r
-  }\r
-\r
-  if(evtCuts->IsTriggerRequired())  \r
-  {\r
-    // always MB\r
-    isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB;\r
-\r
-    physicsSelection = static_cast<AliPhysicsSelection*> (inputHandler->GetEventSelection());\r
-    if(!physicsSelection) return;\r
-    //SetPhysicsTriggerSelection(physicsSelection);\r
-\r
-    if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) {\r
-      // set trigger (V0AND)\r
-      triggerAnalysis = physicsSelection->GetTriggerAnalysis();\r
-      if(!triggerAnalysis) return;\r
-      isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
-    }\r
-  }\r
-\r
-  // centrality determination\r
-  Float_t centralityF = -1;\r
-  AliCentrality *esdCentrality = esdEvent->GetCentrality();\r
-  centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data());\r
-\r
-  // use MC information\r
-  AliHeader* header = 0;\r
-  AliGenEventHeader* genHeader = 0;\r
-  AliStack* stack = 0;\r
-  TArrayF vtxMC(3);\r
-\r
-  Int_t multMCTrueTracks = 0;\r
-  if(IsUseMCInfo())\r
-  {\r
-    //\r
-    if(!mcEvent) {\r
-      AliDebug(AliLog::kError, "mcEvent not available");\r
-      return;\r
-    }\r
-    // get MC event header\r
-    header = mcEvent->Header();\r
-    if (!header) {\r
-      AliDebug(AliLog::kError, "Header not available");\r
-      return;\r
-    }\r
-    // MC particle stack\r
-    stack = mcEvent->Stack();\r
-    if (!stack) {\r
-      AliDebug(AliLog::kError, "Stack not available");\r
-      return;\r
-    }\r
-\r
-    // get MC vertex\r
-    genHeader = header->GenEventHeader();\r
-    if (!genHeader) {\r
-      AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");\r
-      return;\r
-    }\r
-    genHeader->PrimaryVertex(vtxMC);\r
-\r
-    // multipliticy of all MC primary tracks\r
-    // in Zv, pt and eta ranges)\r
-    multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);\r
-\r
-  } // end bUseMC\r
-\r
-  // get reconstructed vertex  \r
-  //const AliESDVertex* vtxESD = 0; \r
-  const AliESDVertex* vtxESD = 0; \r
-  if(GetAnalysisMode() == AlidNdPtHelper::kTPC) {\r
-        vtxESD = esdEvent->GetPrimaryVertexTPC();\r
-  }\r
-  else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) {\r
-     vtxESD = esdEvent->GetPrimaryVertexTracks();\r
-  }\r
-  else {\r
-       return;\r
-  }\r
-\r
-  if(!vtxESD) return;\r
-\r
-  Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); \r
-  //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);\r
-  //printf("GetAnalysisMode() %d \n",GetAnalysisMode());\r
-\r
-  // check event cuts\r
-  if(isEventOK && isEventTriggered)\r
-  {\r
-    TRandom random;\r
-\r
-    for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++)\r
-    {\r
-      AliESDtrack *track = esdEvent->GetTrack(iTrack);\r
-      if(!track) continue;\r
-      if(track->Charge()==0) continue;\r
-      if(!esdTrackCuts->AcceptTrack(track)) continue;\r
-      if(!accCuts->AcceptTrack(track)) continue;\r
-\r
-      // downscale low-pT tracks\r
-      if(TMath::Exp(2*track->Pt())<1000*random.Rndm()) continue;\r
-\r
-      // Dump to the tree \r
-      // vertex\r
-      // TPC constrained tracks\r
-      // InnerParams constrained tracks\r
-      // TPC-ITS tracks\r
-      // ITSout-InnerParams tracks\r
-      // chi2 distance between TPC constrained and TPC-ITS tracks\r
-      // chi2 distance between TPC refitted constrained and TPC-ITS tracks\r
-      // chi2 distance between ITSout and InnerParams tracks\r
-      // MC information\r
-      \r
-      Double_t x[3]; track->GetXYZ(x);\r
-      Double_t b[3]; AliTracker::GetBxByBz(x,b);\r
-      Bool_t isOK = kFALSE;\r
-\r
-      //\r
-      // Constrain TPC-only tracks (TPCinner) to vertex\r
-      //\r
-      AliExternalTrackParam * tpcInner = (AliExternalTrackParam *)(track->GetTPCInnerParam());\r
-      if (!tpcInner) continue;\r
-      // transform to the track reference frame \r
-      isOK = tpcInner->Rotate(track->GetAlpha());\r
-      isOK = tpcInner->PropagateTo(track->GetX(),esdEvent->GetMagneticField());\r
-      if(!isOK) continue;\r
-\r
-      // clone TPCinner has to be deleted\r
-      AliExternalTrackParam * tpcInnerC = new AliExternalTrackParam(*(track->GetTPCInnerParam()));\r
-      if (!tpcInnerC) continue;\r
\r
-      // constrain TPCinner \r
-      //isOK = ConstrainTPCInner(tpcInnerC,vtxESD,esdEvent->GetMagneticField());\r
-      isOK = ConstrainTPCInner(tpcInnerC,vtxESD,b);\r
-\r
-      // transform to the track reference frame \r
-      isOK = tpcInnerC->Rotate(track->GetAlpha());\r
-      isOK = tpcInnerC->PropagateTo(track->GetX(),esdEvent->GetMagneticField());\r
-\r
-      if(!isOK) {\r
-        if(tpcInnerC) delete tpcInnerC;\r
-       continue;\r
-      }\r
-\r
-\r
-      //\r
-      // Constrain TPC refitted tracks at inner TPC wall (InnerParams) \r
-      // to vertex\r
-      //\r
-      // clone track InnerParams has to be deleted\r
-      AliExternalTrackParam * trackInnerC =  new AliExternalTrackParam(*(track->GetInnerParam()));\r
-      if (!trackInnerC) continue;\r
\r
-      // constrain track InnerParams \r
-      isOK = ConstrainTrackInner(trackInnerC,vtxESD,track->GetMass(),b);\r
-\r
-      // transform to the track reference frame \r
-      isOK = trackInnerC->Rotate(track->GetAlpha());\r
-      isOK = trackInnerC->PropagateTo(track->GetX(),esdEvent->GetMagneticField());\r
-\r
-      if(!isOK) {\r
-        if(trackInnerC) delete trackInnerC;\r
-       continue;\r
-      }\r
-      \r
-      //\r
-      // calculate chi2 between vi and vj vectors\r
-      // with covi and covj covariance matrices\r
-      // chi2ij = (vi-vj)^(T)*(covi+covj)^(-1)*(vi-vj)\r
-      //\r
-      TMatrixD deltaT(5,1), deltaTtrackC(5,1);\r
-      TMatrixD delta(1,5),  deltatrackC(1,5);\r
-      TMatrixD covarM(5,5), covarMtrackC(5,5);\r
-\r
-      for (Int_t ipar=0; ipar<5; ipar++) {\r
-        deltaT(ipar,0)=tpcInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];\r
-       delta(0,ipar)=tpcInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];\r
-\r
-        deltaTtrackC(ipar,0)=trackInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];\r
-       deltatrackC(0,ipar)=trackInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];\r
-\r
-        for (Int_t jpar=0; jpar<5; jpar++) {\r
-         Int_t index=track->GetIndex(ipar,jpar);\r
-         covarM(ipar,jpar)=track->GetCovariance()[index]+tpcInnerC->GetCovariance()[index];\r
-         covarMtrackC(ipar,jpar)=track->GetCovariance()[index]+trackInnerC->GetCovariance()[index];\r
-        }\r
-      }\r
-      // chi2 distance TPC constrained and TPC+ITS\r
-      TMatrixD covarMInv = covarM.Invert();\r
-      TMatrixD mat2 = covarMInv*deltaT;\r
-      TMatrixD chi2 = delta*mat2; \r
-      //chi2.Print();\r
-\r
-      // chi2 distance TPC refitted constrained and TPC+ITS\r
-      TMatrixD covarMInvtrackC = covarMtrackC.Invert();\r
-      TMatrixD mat2trackC = covarMInvtrackC*deltaTtrackC;\r
-      TMatrixD chi2trackC = deltatrackC*mat2trackC; \r
-      //chi2trackC.Print();\r
-\r
-\r
-      //\r
-      // Propagate ITSout to TPC inner wall \r
-      // and calculate chi2 distance to track (InnerParams)\r
-      //\r
-      const Double_t kTPCRadius=85; \r
-      const Double_t kStep=3; \r
-\r
-      // clone track InnerParams has to be deleted\r
-      AliExternalTrackParam *trackInnerC2 = new AliExternalTrackParam(*(track->GetInnerParam()));\r
-      if (!trackInnerC2) continue;\r
-      if(!AliTracker::PropagateTrackToBxByBz(trackInnerC2,kTPCRadius,track->GetMass(),kStep,kFALSE))\r
-      {\r
-         if(trackInnerC2) delete trackInnerC2;\r
-         continue;\r
-      }\r
-\r
-      AliExternalTrackParam *outerITSc = new AliExternalTrackParam();\r
-      if(!outerITSc) continue;\r
-\r
-      TMatrixD chi2OuterITS(1,1);\r
-      chi2OuterITS(0,0) = 0;\r
-\r
-      if(esdFriend && esdFriend->TestSkipBit()==kFALSE) \r
-      {\r
-        // propagate ITSout to TPC inner wall\r
-        AliESDfriendTrack *friendTrack = esdFriend->GetTrack(iTrack);\r
-\r
-        if(friendTrack) \r
-       {\r
-          if( (outerITSc = new AliExternalTrackParam(*friendTrack->GetITSOut())) ) \r
-         {\r
-           if(AliTracker::PropagateTrackToBxByBz(outerITSc,kTPCRadius,track->GetMass(),kStep,kFALSE))\r
-           {\r
-              // transform ITSout to the track InnerParams reference frame \r
-             isOK = kFALSE;\r
-              isOK = outerITSc->Rotate(trackInnerC2->GetAlpha());\r
-              isOK = outerITSc->PropagateTo(trackInnerC2->GetX(),esdEvent->GetMagneticField());\r
-\r
-              if(!isOK) {\r
-                if(outerITSc) delete outerITSc;\r
-               if(trackInnerC2) delete trackInnerC2;\r
-               continue;\r
-              }\r
-              \r
-             //\r
-              // calculate chi2 between outerITS and innerParams\r
-             // cov without z-coordinate at the moment\r
-             //\r
-              TMatrixD deltaTouterITS(4,1);\r
-              TMatrixD deltaouterITS(1,4);\r
-              TMatrixD covarMouterITS(4,4);\r
-\r
-             Int_t kipar = 0;\r
-             Int_t kjpar = 0;\r
-              for (Int_t ipar=0; ipar<5; ipar++) {\r
-               if(ipar!=1) {\r
-                  deltaTouterITS(kipar,0)=outerITSc->GetParameter()[ipar]-trackInnerC2->GetParameter()[ipar];\r
-                 deltaouterITS(0,kipar)=outerITSc->GetParameter()[ipar]-trackInnerC2->GetParameter()[ipar];\r
-               }\r
-\r
-                kjpar=0;\r
-                for (Int_t jpar=0; jpar<5; jpar++) {\r
-                 Int_t index=outerITSc->GetIndex(ipar,jpar);\r
-                 if(ipar !=1 || jpar!=1) {\r
-                   covarMouterITS(kipar,kjpar)=outerITSc->GetCovariance()[index]+trackInnerC2->GetCovariance()[index];\r
-                 }\r
-                  if(jpar!=1)  kjpar++;\r
-               }\r
-               if(ipar!=1) kipar++;\r
-             }\r
-\r
-              // chi2 distance ITSout and InnerParams\r
-              TMatrixD covarMInvouterITS = covarMouterITS.Invert();\r
-              TMatrixD mat2outerITS = covarMInvouterITS*deltaTouterITS;\r
-              chi2OuterITS = deltaouterITS*mat2outerITS; \r
-              //chi2OuterITS.Print();\r
-           } \r
-          }\r
-        }\r
-      }\r
-\r
-      //\r
-      // MC info\r
-      //\r
-      TParticle *particle=NULL, *particleTPC=NULL, *particleITS=NULL;\r
-      TParticle *particleMother=NULL, *particleMotherTPC=NULL, *particleMotherITS=NULL;\r
-      Int_t mech=-1, mechTPC=-1, mechITS=-1;\r
-      Bool_t isPrim=kFALSE, isPrimTPC=kFALSE, isPrimITS=kFALSE;\r
-      Bool_t isFromStrangess=kFALSE, isFromStrangessTPC=kFALSE, isFromStrangessITS=kFALSE;\r
-      Bool_t isFromConversion=kFALSE, isFromConversionTPC=kFALSE, isFromConversionITS=kFALSE;\r
-      Bool_t isFromMaterial=kFALSE, isFromMaterialTPC=kFALSE, isFromMaterialITS=kFALSE;\r
-\r
-      AliTrackReference *refTPCIn = NULL;\r
-      AliTrackReference *refITS = NULL;\r
-      AliExternalTrackParam *trackInnerC3 = new AliExternalTrackParam(*(track->GetInnerParam()));\r
-      if(!trackInnerC3) continue;\r
-\r
-      if(IsUseMCInfo()) \r
-      {\r
-        if(!stack) return;\r
-\r
-        //\r
-        // global track\r
-       //\r
-        Int_t label = TMath::Abs(track->GetLabel()); \r
-        particle = stack->Particle(label);\r
-        if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0.)\r
-       {\r
-         particleMother = GetMother(particle,stack);\r
-          mech = particle->GetUniqueID();\r
-          isPrim = stack->IsPhysicalPrimary(label);\r
-         isFromStrangess  = IsFromStrangeness(label,stack);\r
-         isFromConversion = IsFromConversion(label,stack);\r
-          isFromMaterial   = IsFromMaterial(label,stack);\r
-       }\r
-\r
-        //\r
-       // TPC track\r
-       //\r
-       Int_t labelTPC = TMath::Abs(track->GetTPCLabel()); \r
-        particleTPC = stack->Particle(labelTPC);\r
-        if(particleTPC && particleTPC->GetPDG() && particleTPC->GetPDG()->Charge()!=0.)\r
-       {\r
-         particleMotherTPC = GetMother(particleTPC,stack);\r
-          mechTPC = particleTPC->GetUniqueID();\r
-          isPrimTPC = stack->IsPhysicalPrimary(labelTPC);\r
-         isFromStrangessTPC  = IsFromStrangeness(labelTPC,stack);\r
-         isFromConversionTPC = IsFromConversion(labelTPC,stack);\r
-          isFromMaterialTPC   = IsFromMaterial(labelTPC,stack);\r
-       }\r
-\r
-        //\r
-        // store first track reference\r
-       // for TPC track\r
-       //\r
-        TParticle *part=0;\r
-        TClonesArray *trefs=0;\r
-        Int_t status = mcEvent->GetParticleAndTR(track->GetTPCLabel(), part, trefs);\r
-\r
-       if(status>0 && part && trefs && part->GetPDG() && part->GetPDG()->Charge()!=0.) \r
-       {\r
-         Int_t nTrackRef = trefs->GetEntries();\r
-         //printf("nTrackRef %d \n",nTrackRef);\r
-\r
-          Int_t countITS = 0;\r
-         for (Int_t iref = 0; iref < nTrackRef; iref++) \r
-          {\r
-            AliTrackReference *ref = (AliTrackReference *)trefs->At(iref);\r
-           //printf("ref %p \n",ref);\r
-           //if(ref) printf("ref->DetectorId() %d \n",ref->DetectorId());\r
-           //printf("AliTrackReference::kTPC  %d \n",AliTrackReference::kTPC);\r
-\r
-\r
-             // Ref. in the middle ITS \r
-            if(ref && ref->DetectorId()==AliTrackReference::kITS)\r
-            {\r
-             if(!refITS && countITS==2) {\r
-               refITS = ref;\r
-               //printf("refITS %p \n",refITS);\r
-             }\r
-             countITS++;\r
-            }\r
-\r
-            // TPC\r
-            if(ref && ref->DetectorId()==AliTrackReference::kTPC)\r
-            {\r
-             if(!refTPCIn) {\r
-               refTPCIn = ref;\r
-               //printf("refTPCIn %p \n",refTPCIn);\r
-               //break;\r
-             }\r
-            }\r
-         }\r
-\r
-          // transform inner params to TrackRef\r
-         // reference frame\r
-          if(refTPCIn && trackInnerC3) \r
-         {\r
-           Double_t kRefPhi = TMath::ATan2(refTPCIn->Y(),refTPCIn->X());\r
-           isOK = kFALSE;\r
-            isOK = trackInnerC3->Rotate(kRefPhi);\r
-            isOK = AliTracker::PropagateTrackToBxByBz(trackInnerC3,refTPCIn->R(),track->GetMass(),kStep,kFALSE);\r
-\r
-            if(!isOK){\r
-             if(trackInnerC3) delete trackInnerC3;\r
-             if(refTPCIn) delete refTPCIn;\r
-            }\r
-         }\r
-        }\r
-\r
-        //\r
-       // ITS track\r
-       //\r
-       Int_t labelITS = TMath::Abs(track->GetITSLabel()); \r
-        particleITS = stack->Particle(labelITS);\r
-        if(particleITS && particleITS->GetPDG() && particleITS->GetPDG()->Charge()!=0.)\r
-       {\r
-         particleMotherITS = GetMother(particleITS,stack);\r
-          mechITS = particleITS->GetUniqueID();\r
-          isPrimITS = stack->IsPhysicalPrimary(labelITS);\r
-         isFromStrangessITS  = IsFromStrangeness(labelITS,stack);\r
-         isFromConversionITS = IsFromConversion(labelITS,stack);\r
-          isFromMaterialITS   = IsFromMaterial(labelITS,stack);\r
-        }\r
-      }\r
-\r
-      //\r
-      Double_t vert[3] = {0}; \r
-      vert[0] = vtxESD->GetXv();\r
-      vert[1] = vtxESD->GetYv();\r
-      vert[2] = vtxESD->GetZv();\r
-      Int_t mult = vtxESD->GetNContributors();\r
-      Double_t bz = esdEvent->GetMagneticField();\r
-      Double_t runNumber = esdEvent->GetRunNumber();\r
-      Double_t evtTimeStamp = esdEvent->GetTimeStamp();\r
-\r
-      //\r
-      if(!fTreeSRedirector) return;\r
-      (*fTreeSRedirector)<<"dNdPtTree"<<\r
-        "runNumber="<<runNumber<<\r
-        "evtTimeStamp="<<evtTimeStamp<<\r
-        "Bz="<<bz<<\r
-       "vertX="<<vert[0]<<\r
-       "vertY="<<vert[1]<<\r
-       "vertZ="<<vert[2]<<\r
-        "mult="<<mult<<\r
-        "esdTrack.="<<track<<\r
-        "extTPCInnerC.="<<tpcInnerC<<\r
-        "extInnerParamC.="<<trackInnerC<<\r
-        "extInnerParam.="<<trackInnerC2<<\r
-        "extOuterITS.="<<outerITSc<<\r
-        "extInnerParamRef.="<<trackInnerC3<<\r
-        "refTPCIn.="<<refTPCIn<<\r
-        "refITS.="<<refITS<<\r
-        "chi2TPCInnerC="<<chi2(0,0)<<\r
-        "chi2InnerC="<<chi2trackC(0,0)<<\r
-        "chi2OuterITS="<<chi2OuterITS(0,0)<<\r
-        "centralityF="<<centralityF<<\r
-        "particle.="<<particle<<\r
-               "particleMother.="<<particleMother<<\r
-        "mech="<<mech<<\r
-        "isPrim="<<isPrim<<\r
-       "isFromStrangess="<<isFromStrangess<<\r
-       "isFromConversion="<<isFromConversion<<\r
-        "isFromMaterial="<<isFromMaterial<<\r
-        "particleTPC.="<<particleTPC<<\r
-               "particleMotherTPC.="<<particleMotherTPC<<\r
-        "mechTPC="<<mechTPC<<\r
-        "isPrimTPC="<<isPrimTPC<<\r
-       "isFromStrangessTPC="<<isFromStrangessTPC<<\r
-       "isFromConversionTPC="<<isFromConversionTPC<<\r
-        "isFromMaterialTPC="<<isFromMaterialTPC<<\r
-        "particleITS.="<<particleITS<<\r
-               "particleMotherITS.="<<particleMotherITS<<\r
-        "mechITS="<<mechITS<<\r
-        "isPrimITS="<<isPrimITS<<\r
-       "isFromStrangessITS="<<isFromStrangessITS<<\r
-       "isFromConversionITS="<<isFromConversionITS<<\r
-        "isFromMaterialITS="<<isFromMaterialITS<<\r
-        "\n";\r
-\r
-       if(tpcInnerC) delete tpcInnerC;\r
-       if(trackInnerC) delete trackInnerC;\r
-       if(trackInnerC2) delete trackInnerC2;\r
-       if(outerITSc) delete outerITSc;\r
-\r
-       if(trackInnerC3) delete trackInnerC3;\r
-    }\r
-  }\r
-\r
-  PostData(0, fOutputSummary);\r
-  //PostData(1, fOutput);\r
-}\r
-\r
-\r
-//_____________________________________________________________________________\r
-Bool_t AlidNdPtTrackDumpTask::ConstrainTPCInner(AliExternalTrackParam *const tpcInnerC, const AliESDVertex* vtx, Double_t b[3])\r
-{\r
- // Constrain TPC inner params constrained\r
- //\r
-      if(!tpcInnerC) return kFALSE; \r
-      if(!vtx) return kFALSE;\r
-\r
-      Double_t dz[2],cov[3];\r
-      //AliESDVertex *vtx= (AliESDVertex *)esdEvent->GetPrimaryVertex();\r
-      //if(!tpcInnerC->PropagateToDCA(vtx, esdEvent->GetMagneticField(), 3, dz, cov)) return kFALSE; \r
-      //if(!tpcInnerC->PropagateToDCA(vtx, Bz, 3, dz, cov)) return kFALSE; \r
-      if(!tpcInnerC->PropagateToDCABxByBz(vtx, b, 3, dz, cov)) return kFALSE; \r
-\r
-\r
-      Double_t covar[6]; vtx->GetCovMatrix(covar);\r
-      Double_t p[2]={tpcInnerC->GetParameter()[0]-dz[0],tpcInnerC->GetParameter()[1]-dz[1]};\r
-      Double_t c[3]={covar[2],0.,covar[5]};\r
-      Double_t chi2C=tpcInnerC->GetPredictedChi2(p,c);\r
-      if (chi2C>kVeryBig) return kFALSE; \r
-\r
-      if(!tpcInnerC->Update(p,c)) return kFALSE;\r
-\r
-  return kTRUE;\r
-}\r
-\r
-//_____________________________________________________________________________\r
-Bool_t AlidNdPtTrackDumpTask::ConstrainTrackInner(AliExternalTrackParam *const trackInnerC, const AliESDVertex* vtx, Double_t mass, Double_t b[3])\r
-{\r
- // Constrain TPC inner params constrained\r
- //\r
-      if(!trackInnerC) return kFALSE; \r
-      if(!vtx) return kFALSE;\r
-\r
-      const Double_t kRadius  = 2.8; \r
-      const Double_t kMaxStep = 1.0; \r
-\r
-      Double_t dz[2],cov[3];\r
-\r
-      //AliESDVertex *vtx= (AliESDVertex *)esdEvent->GetPrimaryVertex();\r
-      //if(!trackInnerC->PropagateToDCA(vtx, esdEvent->GetMagneticField(), 3, dz, cov)) return kFALSE; \r
-      //if(!trackInnerC->PropagateToDCA(vtx, Bz, 3, dz, cov)) return kFALSE; \r
-\r
-      if(!AliTracker::PropagateTrackToBxByBz(trackInnerC,kRadius,mass,kMaxStep,kFALSE)) return kFALSE;\r
-      if(!trackInnerC->PropagateToDCABxByBz(vtx, b, 3, dz, cov)) return kFALSE; \r
-\r
-      //\r
-      Double_t covar[6]; vtx->GetCovMatrix(covar);\r
-      Double_t p[2]={trackInnerC->GetParameter()[0]-dz[0],trackInnerC->GetParameter()[1]-dz[1]};\r
-      Double_t c[3]={covar[2],0.,covar[5]};\r
-      Double_t chi2C=trackInnerC->GetPredictedChi2(p,c);\r
-      if (chi2C>kVeryBig) return kFALSE; \r
-\r
-      if(!trackInnerC->Update(p,c)) return kFALSE;\r
-\r
-  return kTRUE;\r
-}\r
-\r
-\r
-//_____________________________________________________________________________\r
-TParticle *AlidNdPtTrackDumpTask::GetMother(TParticle *const particle, AliStack *const stack) \r
-{\r
-  if(!particle) return NULL;\r
-  if(!stack) return NULL;\r
-\r
-  Int_t motherLabel = TMath::Abs(particle->GetMother(0));  \r
-  TParticle* mother = NULL; \r
-  mother = stack->Particle(motherLabel); \r
-\r
-return mother;\r
-}\r
-\r
-//_____________________________________________________________________________\r
-Bool_t AlidNdPtTrackDumpTask::IsFromConversion(const Int_t label, AliStack *const stack) \r
-{\r
-  Bool_t isFromConversion = kFALSE;\r
-\r
-  if(stack) {\r
-    TParticle* particle = stack->Particle(label);\r
-\r
-    if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0) \r
-    {\r
-       Int_t mech = particle->GetUniqueID(); // production mechanism \r
-       Bool_t isPrim = stack->IsPhysicalPrimary(label);\r
-\r
-       Int_t motherLabel = TMath::Abs(particle->GetMother(0));  \r
-       TParticle* mother = stack->Particle(motherLabel); \r
-       if(mother) {\r
-          Int_t motherPdg = mother->GetPdgCode();\r
-\r
-          if(!isPrim && mech==5 && motherPdg==kGamma) { \r
-            isFromConversion=kTRUE; \r
-          }\r
-       }\r
-    } \r
-  } \r
-\r
-  return isFromConversion;\r
-}\r
-\r
-//_____________________________________________________________________________\r
-Bool_t AlidNdPtTrackDumpTask::IsFromMaterial(const Int_t label, AliStack *const stack) \r
-{\r
-  Bool_t isFromMaterial = kFALSE;\r
-\r
-  if(stack) {\r
-    TParticle* particle = stack->Particle(label);\r
-\r
-    if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0) \r
-    {\r
-       Int_t mech = particle->GetUniqueID(); // production mechanism \r
-       Bool_t isPrim = stack->IsPhysicalPrimary(label);\r
-\r
-       Int_t motherLabel = TMath::Abs(particle->GetMother(0));  \r
-       TParticle* mother = stack->Particle(motherLabel); \r
-       if(mother) {\r
-          if(!isPrim && mech==13) { \r
-            isFromMaterial=kTRUE; \r
-          }\r
-       }\r
-     } \r
-  } \r
-\r
-  return isFromMaterial;\r
-}\r
-\r
-//_____________________________________________________________________________\r
-Bool_t AlidNdPtTrackDumpTask::IsFromStrangeness(const Int_t label, AliStack *const stack) \r
-{\r
-  Bool_t isFromStrangeness = kFALSE;\r
-\r
-  if(stack) {\r
-    TParticle* particle = stack->Particle(label);\r
-\r
-    if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0) \r
-    {\r
-       Int_t mech = particle->GetUniqueID(); // production mechanism \r
-       Bool_t isPrim = stack->IsPhysicalPrimary(label);\r
-\r
-       Int_t motherLabel = TMath::Abs(particle->GetMother(0));  \r
-       TParticle* mother = stack->Particle(motherLabel); \r
-       if(mother) {\r
-          Int_t motherPdg = mother->GetPdgCode();\r
-\r
-          // K+-, lambda, antilambda, K0s decays\r
-          if(!isPrim && mech==4 && \r
-             (TMath::Abs(motherPdg)==kKPlus || TMath::Abs(motherPdg)==kLambda0 || motherPdg==kK0Short))\r
-          {\r
-            isFromStrangeness = kTRUE;\r
-          } \r
-       }\r
-    } \r
-  } \r
-\r
-  return isFromStrangeness;\r
-}\r
-\r
-\r
-//_____________________________________________________________________________\r
-void AlidNdPtTrackDumpTask::FinishTaskOutput() \r
-{\r
-  //\r
-  // Called one at the end \r
-  // locally on working node\r
-  //\r
-\r
-  // Post output data.\r
-  PostData(1, fOutput);\r
-  //PostData(0, fOutputSummary);\r
-}\r
-\r
-//_____________________________________________________________________________\r
-void AlidNdPtTrackDumpTask::Terminate(Option_t *) \r
-{\r
-  // Called one at the end \r
-  \r
-  // check output data\r
-  fOutputSummary = dynamic_cast<TTree*> (GetOutputData(0));\r
-  if(fOutputSummary) delete fOutputSummary; fOutputSummary=0;\r
-  if(fTreeSRedirector)  delete fTreeSRedirector; fTreeSRedirector=0;\r
-\r
-  TChain* chain = new TChain("dNdPtTree");\r
-  if(!chain) return;\r
-  chain->Add("dNdPtOutliersAnalysisPbPb.root");\r
-  TTree *tree = chain->CopyTree("1");\r
-  if (chain) { delete chain; chain=0; }\r
-  if(!tree) return;\r
-  tree->Print();\r
-  fOutputSummary = tree;\r
-\r
-  if (!fOutputSummary) {\r
-    Printf("ERROR: AlidNdPtTrackDumpTask::Terminate(): Output data not avaiable GetOutputData(0)==0x0 ..." );\r
-    return;\r
-  }\r
-  \r
-\r
-\r
-  PostData(0, fOutputSummary);\r
-  //PostData(1, fOutput);\r
-}\r