Changes taht allow to
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 29 Feb 2012 19:30:50 +0000 (19:30 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 29 Feb 2012 19:30:50 +0000 (19:30 +0000)
a) Have the correct track-cluster residuals
b) Have the information of track eta,phi on the emcal surface which in PbPb
is very time-consuming to obtain (and one would have to start propagating
from the vertex).

Constantin, Rongrong

ANALYSIS/AliAnalysisTaskESDfilter.cxx
ANALYSIS/AliAnalysisTaskESDfilter.h
EMCAL/AliEMCALTracker.cxx
STEER/AOD/AliAODTrack.cxx
STEER/AOD/AliAODTrack.h
STEER/ESD/AliESDtrack.cxx
STEER/ESD/AliESDtrack.h
STEER/STEERBase/AliVTrack.h

index d9b0404..3ea4eb7 100644 (file)
 #include "AliV0vertexer.h"\r
 #include "AliCascadeVertexer.h"\r
 #include "Riostream.h"\r
+#include "AliExternalTrackParam.h"\r
+#include "AliTrackerBase.h"\r
+#include "TVector3.h"\r
 \r
 ClassImp(AliAnalysisTaskESDfilter)\r
 \r
 ////////////////////////////////////////////////////////////////////////\r
 \r
 AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter():\r
-    AliAnalysisTaskSE(),\r
-    fTrackFilter(0x0),\r
-    fKinkFilter(0x0),\r
-    fV0Filter(0x0),\r
-    fCascadeFilter(0x0),\r
-    fHighPthreshold(0),\r
-    fPtshape(0x0),\r
-    fEnableFillAOD(kTRUE),\r
-    fUsedTrack(0x0),\r
-    fUsedKink(0x0),\r
-    fUsedV0(0x0),\r
-    fAODTrackRefs(0x0),\r
-    fAODV0VtxRefs(0x0),\r
-    fAODV0Refs(0x0),\r
-    fMChandler(0x0),\r
-    fNumberOfTracks(0),\r
-    fNumberOfPositiveTracks(0),\r
-    fNumberOfV0s(0),\r
-    fNumberOfVertices(0),\r
-    fNumberOfCascades(0),\r
-    fNumberOfKinks(0),\r
-    fOldESDformat(kFALSE),\r
-    fPrimaryVertex(0x0),\r
+  AliAnalysisTaskSE(),\r
+  fTrackFilter(0x0),\r
+  fKinkFilter(0x0),\r
+  fV0Filter(0x0),\r
+  fCascadeFilter(0x0),\r
+  fHighPthreshold(0),\r
+  fPtshape(0x0),\r
+  fEnableFillAOD(kTRUE),\r
+  fUsedTrack(0x0),\r
+  fUsedKink(0x0),\r
+  fUsedV0(0x0),\r
+  fAODTrackRefs(0x0),\r
+  fAODV0VtxRefs(0x0),\r
+  fAODV0Refs(0x0),\r
+  fMChandler(0x0),\r
+  fNumberOfTracks(0),\r
+  fNumberOfPositiveTracks(0),\r
+  fNumberOfV0s(0),\r
+  fNumberOfVertices(0),\r
+  fNumberOfCascades(0),\r
+  fNumberOfKinks(0),\r
+  fOldESDformat(kFALSE),\r
+  fPrimaryVertex(0x0),\r
   fTPCConstrainedFilterMask(0),\r
   fHybridFilterMaskTPCCG(0),\r
   fWriteHybridTPCCOnly(kFALSE),\r
   fGlobalConstrainedFilterMask(0),\r
   fHybridFilterMaskGCG(0),\r
   fWriteHybridGCOnly(kFALSE),\r
-    fIsVZEROEnabled(kTRUE),\r
-    fIsTZEROEnabled(kTRUE),\r
-    fIsZDCEnabled(kTRUE),\r
-    fIsV0CascadeRecoEnabled(kFALSE),\r
-    fAreCascadesEnabled(kTRUE),\r
-    fAreV0sEnabled(kTRUE),\r
-    fAreKinksEnabled(kTRUE),\r
-    fAreTracksEnabled(kTRUE),\r
-    fArePmdClustersEnabled(kTRUE),\r
-    fAreCaloClustersEnabled(kTRUE),\r
-    fAreEMCALCellsEnabled(kTRUE),\r
-    fArePHOSCellsEnabled(kTRUE),\r
-               fAreEMCALTriggerEnabled(kTRUE),\r
-               fArePHOSTriggerEnabled(kTRUE),\r
-               fAreTrackletsEnabled(kTRUE),\r
-    fESDpid(0x0),\r
-    fIsPidOwner(kFALSE),\r
-    fTimeZeroType(AliESDpid::kTOF_T0),\r
-    fTPCaloneTrackCuts(0)\r
+  fIsVZEROEnabled(kTRUE),\r
+  fIsTZEROEnabled(kTRUE),\r
+  fIsZDCEnabled(kTRUE),\r
+  fIsV0CascadeRecoEnabled(kFALSE),\r
+  fAreCascadesEnabled(kTRUE),\r
+  fAreV0sEnabled(kTRUE),\r
+  fAreKinksEnabled(kTRUE),\r
+  fAreTracksEnabled(kTRUE),\r
+  fArePmdClustersEnabled(kTRUE),\r
+  fAreCaloClustersEnabled(kTRUE),\r
+  fAreEMCALCellsEnabled(kTRUE),\r
+  fArePHOSCellsEnabled(kTRUE),\r
+  fAreEMCALTriggerEnabled(kTRUE),\r
+  fArePHOSTriggerEnabled(kTRUE),\r
+  fAreTrackletsEnabled(kTRUE),\r
+  fESDpid(0x0),\r
+  fIsPidOwner(kFALSE),\r
+  fTimeZeroType(AliESDpid::kTOF_T0),\r
+  fTPCaloneTrackCuts(0),\r
+  fDoPropagateTrackToEMCal(kTRUE)\r
 {\r
   // Default constructor\r
     fV0Cuts[0] =  33.   ;   // max allowed chi2\r
@@ -177,7 +181,8 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(const char* name):
     fESDpid(0x0),\r
     fIsPidOwner(kFALSE),\r
     fTimeZeroType(AliESDpid::kTOF_T0),\r
-    fTPCaloneTrackCuts(0)\r
+    fTPCaloneTrackCuts(0),\r
+  fDoPropagateTrackToEMCal(kTRUE)\r
 {\r
   // Constructor\r
 \r
@@ -249,6 +254,7 @@ void AliAnalysisTaskESDfilter::PrintTask(Option_t *option, Int_t indent) const
        cout << spaces.Data() << Form("EMCAL triggers are %s",fAreEMCALTriggerEnabled ? "ENABLED":"DISABLED") << endl;\r
        cout << spaces.Data() << Form("PHOS triggers  are %s",fArePHOSTriggerEnabled ? "ENABLED":"DISABLED") << endl;\r
        cout << spaces.Data() << Form("Tracklets      are %s",fAreTrackletsEnabled ? "ENABLED":"DISABLED") << endl;  \r
+       cout << spaces.Data() << Form("PropagateTrackToEMCal  is %s", fDoPropagateTrackToEMCal ? "ENABLED":"DISABLED") << endl; \r
 }\r
 \r
 //______________________________________________________________________________\r
@@ -1333,6 +1339,7 @@ void AliAnalysisTaskESDfilter::ConvertTracks(const AliESDEvent& esd)
   const AliESDVertex *vtx = esd.GetPrimaryVertex();\r
   Double_t p[3] = { 0. };\r
   Double_t pos[3] = { 0. };\r
+  Double_t trkPos[3] = {0.,0.,0.};\r
   Double_t covTr[21] = { 0. };\r
   Double_t pid[10] = { 0. };\r
   AliAODTrack* aodTrack(0x0);\r
@@ -1382,6 +1389,31 @@ void AliAnalysisTaskESDfilter::ConvertTracks(const AliESDEvent& esd)
     if(esdTrack->IsEMCAL()) aodTrack->SetEMCALcluster(esdTrack->GetEMCALcluster());\r
     if(esdTrack->IsPHOS())  aodTrack->SetPHOScluster(esdTrack->GetPHOScluster());\r
 \r
+    //Perform progagation of tracks if needed\r
+    if(fDoPropagateTrackToEMCal)\r
+      {\r
+       Double_t EMCalEta, EMCalPhi;\r
+       Double_t trkphi = esdTrack->Phi()*TMath::RadToDeg();\r
+       if(TMath::Abs(esdTrack->Eta())<0.9 && trkphi > 10 && trkphi < 250 )\r
+         {\r
+           AliExternalTrackParam *trkParam = const_cast<AliExternalTrackParam*>(esdTrack->GetInnerParam());\r
+           if(trkParam)\r
+             {\r
+               AliExternalTrackParam trkParamTmp(*trkParam);\r
+               if(AliTrackerBase::PropagateTrackToBxByBz(&trkParamTmp, 430, esdTrack->GetMass(), 20, kTRUE, 0.8, -1))\r
+                 {\r
+                   trkParamTmp.GetXYZ(trkPos);\r
+                   TVector3 trkPosVec(trkPos[0],trkPos[1],trkPos[2]);\r
+                   EMCalEta = trkPosVec.Eta();\r
+                   EMCalPhi = trkPosVec.Phi();\r
+                   if(EMCalPhi<0)  EMCalPhi += 2*TMath::Pi();\r
+                   esdTrack->SetTrackPhiEtaOnEMCal(EMCalPhi,EMCalEta);\r
+                 }\r
+             }\r
+         }\r
+      }\r
+    aodTrack->SetTrackPhiEtaOnEMCal(esdTrack->GetTrackPhiOnEMCal(),esdTrack->GetTrackEtaOnEMCal());\r
+\r
     fAODTrackRefs->AddAt(aodTrack, nTrack);\r
     \r
     \r
@@ -1413,6 +1445,7 @@ void AliAnalysisTaskESDfilter::ConvertPmdClusters(const AliESDEvent& esd)
   }\r
 }\r
 \r
+\r
 //______________________________________________________________________________\r
 void AliAnalysisTaskESDfilter::ConvertCaloClusters(const AliESDEvent& esd)\r
 {\r
@@ -1461,15 +1494,19 @@ void AliAnalysisTaskESDfilter::ConvertCaloClusters(const AliESDEvent& esd)
 \r
     caloCluster->SetTrackDistance(cluster->GetTrackDx(), cluster->GetTrackDz());\r
     \r
+    Int_t nMatchCount = 0;\r
     TArrayI* matchedT =        cluster->GetTracksMatched();\r
     if (fNumberOfTracks>0 && matchedT && cluster->GetTrackMatchedIndex() >= 0) {       \r
       for (Int_t im = 0; im < matchedT->GetSize(); im++) {\r
         Int_t iESDtrack = matchedT->At(im);;\r
         if (fAODTrackRefs->At(iESDtrack) != 0) {\r
           caloCluster->AddTrackMatched((AliAODTrack*)fAODTrackRefs->At(iESDtrack));\r
+         nMatchCount++;\r
         }\r
       }\r
     }\r
+    if(nMatchCount==0)\r
+      caloCluster->SetTrackDistance(-999,-999);\r
     \r
   } \r
   caloClusters.Expand(jClusters); // resize TObjArray to 'remove' slots for pseudo clusters     \r
index 1319257..d31f29c 100644 (file)
@@ -85,6 +85,8 @@ class AliAnalysisTaskESDfilter : public AliAnalysisTaskSE
 
   void EnableV0CascadeVerticesReco() { fIsV0CascadeRecoEnabled = kTRUE; }
 
+  void SetPropagateTrackToEMCal(Bool_t propagate) {fDoPropagateTrackToEMCal = propagate;}
+
   virtual void SetTimeZeroType(AliESDpid::EStartTimeType_t tofTimeZeroType) {fTimeZeroType = tofTimeZeroType;}
   
 private:
@@ -169,9 +171,10 @@ private:
   AliESDtrackCuts* fTPCaloneTrackCuts; // TPC stand-alone track cuts
   Double_t        fV0Cuts[7];       // Array to store the values for the different reco selections V0 related
   Double_t        fCascadeCuts[8];  // Array to store the values for the different reco selections cascades related
+  Bool_t fDoPropagateTrackToEMCal;  // whether or not to propagate the tracks to EMCal surface (430cm) -- true by default
   
   
-  ClassDef(AliAnalysisTaskESDfilter, 13); // Analysis task for standard ESD filtering
+  ClassDef(AliAnalysisTaskESDfilter, 14); // Analysis task for standard ESD filtering
 };
 
 #endif
index 39b2b91..50973ef 100644 (file)
@@ -385,7 +385,8 @@ Int_t AliEMCALTracker::FindMatchedCluster(AliESDtrack *track)
 
   AliExternalTrackParam trkParamTmp(*trkParam);
   Float_t eta, phi;
-  if(!AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(&trkParamTmp, 430., track->GetMass(), fStep, eta, phi)) return index;
+  if(!AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(&trkParamTmp, 430., track->GetMass(), fStep, eta, phi))  return index;
+  track->SetTrackPhiEtaOnEMCal(phi,eta);
   if(TMath::Abs(eta)>0.75 || (phi) < 70*TMath::DegToRad() || (phi) > 190*TMath::DegToRad()) return index;
 
   //Perform extrapolation
index c0c5859..4ebed0f 100644 (file)
@@ -48,7 +48,9 @@ AliAODTrack::AliAODTrack() :
   fCaloIndex(kEMCALNoMatch),
   fCovMatrix(NULL),
   fDetPid(NULL),
-  fProdVertex(NULL)
+  fProdVertex(NULL),
+  fTrackPhiOnEMCal(-999),
+  fTrackEtaOnEMCal(-999)
 {
   // default constructor
 
@@ -94,7 +96,9 @@ AliAODTrack::AliAODTrack(Short_t id,
   fCaloIndex(kEMCALNoMatch),
   fCovMatrix(NULL),
   fDetPid(NULL),
-  fProdVertex(prodVertex)
+  fProdVertex(prodVertex),
+  fTrackPhiOnEMCal(-999),
+  fTrackEtaOnEMCal(-999)
 {
   // constructor
  
@@ -144,7 +148,9 @@ AliAODTrack::AliAODTrack(Short_t id,
   fCaloIndex(kEMCALNoMatch),
   fCovMatrix(NULL),
   fDetPid(NULL),
-  fProdVertex(prodVertex)
+  fProdVertex(prodVertex),
+  fTrackPhiOnEMCal(-999),
+  fTrackEtaOnEMCal(-999)
 {
   // constructor
  
@@ -188,7 +194,9 @@ AliAODTrack::AliAODTrack(const AliAODTrack& trk) :
   fCaloIndex(trk.fCaloIndex),
   fCovMatrix(NULL),
   fDetPid(NULL),
-  fProdVertex(trk.fProdVertex)
+  fProdVertex(trk.fProdVertex),
+  fTrackPhiOnEMCal(trk.fTrackPhiOnEMCal),
+  fTrackEtaOnEMCal(trk.fTrackEtaOnEMCal)
 {
   // Copy constructor
 
@@ -231,6 +239,8 @@ AliAODTrack& AliAODTrack::operator=(const AliAODTrack& trk)
     fCharge            = trk.fCharge;
     fType              = trk.fType;
     fCaloIndex         = trk.fCaloIndex;
+    fTrackPhiOnEMCal   = trk.fTrackPhiOnEMCal;
+    fTrackEtaOnEMCal   = trk.fTrackEtaOnEMCal;
 
     delete fCovMatrix;
     if(trk.fCovMatrix) fCovMatrix=new AliAODRedCov<6>(*trk.fCovMatrix);
index ce536a1..5360508 100644 (file)
@@ -255,6 +255,10 @@ class AliAODTrack : public AliVTrack {
   void SetEMCALcluster(Int_t index) {fCaloIndex=index;}
   Bool_t IsEMCAL() const {return fFlags&kEMCALmatch;}
 
+  Double_t GetTrackPhiOnEMCal() const {return fTrackPhiOnEMCal;}
+  Double_t GetTrackEtaOnEMCal() const {return fTrackEtaOnEMCal;}
+  void SetTrackPhiEtaOnEMCal(Double_t phi,Double_t eta) {fTrackPhiOnEMCal=phi;fTrackEtaOnEMCal=eta;}
+
   Int_t GetPHOScluster() const {return fCaloIndex;}
   void SetPHOScluster(Int_t index) {fCaloIndex=index;}
   Bool_t IsPHOS() const {return fFlags&kPHOSmatch;}
@@ -390,7 +394,10 @@ class AliAODTrack : public AliVTrack {
   AliAODPid    *fDetPid;            // more detailed or detector specific pid information
   TRef          fProdVertex;        // vertex of origin
 
-  ClassDef(AliAODTrack, 15);
+  Double_t      fTrackPhiOnEMCal;   // phi of track after being propagated to 430cm
+  Double_t      fTrackEtaOnEMCal;   // eta of track after being propagated to 430cm
+
+  ClassDef(AliAODTrack, 16);
 };
 
 inline Bool_t  AliAODTrack::IsPrimaryCandidate() const
index 7b80878..aa32089 100644 (file)
@@ -235,7 +235,9 @@ AliESDtrack::AliESDtrack() :
   fESDEvent(0),
   fCacheNCrossedRows(-10),
   fCacheChi2TPCConstrainedVsGlobal(-10),
-  fCacheChi2TPCConstrainedVsGlobalVertex(0)
+  fCacheChi2TPCConstrainedVsGlobalVertex(0),
+  fTrackPhiOnEMCal(-999),
+  fTrackEtaOnEMCal(-999)
 {
   //
   // The default ESD constructor 
@@ -345,7 +347,9 @@ AliESDtrack::AliESDtrack(const AliESDtrack& track):
   fESDEvent(track.fESDEvent),
   fCacheNCrossedRows(track.fCacheNCrossedRows),
   fCacheChi2TPCConstrainedVsGlobal(track.fCacheChi2TPCConstrainedVsGlobal),
-  fCacheChi2TPCConstrainedVsGlobalVertex(track.fCacheChi2TPCConstrainedVsGlobalVertex)
+  fCacheChi2TPCConstrainedVsGlobalVertex(track.fCacheChi2TPCConstrainedVsGlobalVertex),
+  fTrackPhiOnEMCal(track.fTrackPhiOnEMCal),
+  fTrackEtaOnEMCal(track.fTrackEtaOnEMCal)
 {
   //
   //copy constructor
@@ -467,7 +471,9 @@ AliESDtrack::AliESDtrack(const AliVTrack *track) :
   fESDEvent(0),
   fCacheNCrossedRows(-10),
   fCacheChi2TPCConstrainedVsGlobal(-10),
-  fCacheChi2TPCConstrainedVsGlobalVertex(0)
+  fCacheChi2TPCConstrainedVsGlobalVertex(0),
+  fTrackPhiOnEMCal(-999),
+  fTrackEtaOnEMCal(-999)
 {
   //
   // ESD track from AliVTrack.
@@ -609,7 +615,9 @@ AliESDtrack::AliESDtrack(TParticle * part) :
   fESDEvent(0),
   fCacheNCrossedRows(-10),
   fCacheChi2TPCConstrainedVsGlobal(-10),
-  fCacheChi2TPCConstrainedVsGlobalVertex(0)  
+  fCacheChi2TPCConstrainedVsGlobalVertex(0),
+  fTrackPhiOnEMCal(-999),
+  fTrackEtaOnEMCal(-999)
 {
   //
   // ESD track from TParticle
@@ -956,6 +964,9 @@ AliESDtrack &AliESDtrack::operator=(const AliESDtrack &source){
   fCacheChi2TPCConstrainedVsGlobal = source.fCacheChi2TPCConstrainedVsGlobal;
   fCacheChi2TPCConstrainedVsGlobalVertex = source.fCacheChi2TPCConstrainedVsGlobalVertex;
 
+  fTrackPhiOnEMCal= source.fTrackPhiOnEMCal;
+  fTrackEtaOnEMCal= source.fTrackEtaOnEMCal;
+
   return *this;
 }
 
index 4b6c0f5..d5831a7 100644 (file)
@@ -346,6 +346,10 @@ public:
   Int_t GetEMCALcluster() const {return fCaloIndex;}
   void SetEMCALcluster(Int_t index) {fCaloIndex=index;}
   Bool_t IsEMCAL() const {return fFlags&kEMCALmatch;}
+  
+  Double_t GetTrackPhiOnEMCal() const {return fTrackPhiOnEMCal;}
+  Double_t GetTrackEtaOnEMCal() const {return fTrackEtaOnEMCal;}
+  void SetTrackPhiEtaOnEMCal(Double_t phi,Double_t eta) {fTrackPhiOnEMCal=phi;fTrackEtaOnEMCal=eta;}
 
   Int_t GetPHOScluster() const {return fCaloIndex;}
   void SetPHOScluster(Int_t index) {fCaloIndex=index;}
@@ -518,12 +522,15 @@ protected:
   mutable Float_t fCacheNCrossedRows; //! Cache for the number of crossed rows
   mutable Float_t fCacheChi2TPCConstrainedVsGlobal; //! Cache for the chi2 of constrained TPC vs global track
   mutable const AliESDVertex* fCacheChi2TPCConstrainedVsGlobalVertex; //! Vertex for which the cache is valid
+
+  Double_t fTrackPhiOnEMCal;   // phi of track after being propagated to 430cm
+  Double_t fTrackEtaOnEMCal;   // eta of track after being propagated to 430cm
   
  private:
   static bool fgkOnlineMode; //! indicate the online mode to skip some of the functionality
 
   AliESDtrack & operator=(const AliESDtrack & );
-  ClassDef(AliESDtrack,63)  //ESDtrack 
+  ClassDef(AliESDtrack,64)  //ESDtrack 
 };
 
 
index 5a5ca56..64d080c 100644 (file)
@@ -63,6 +63,10 @@ public:
   virtual void SetEMCALcluster(Int_t)       {;}\r
   virtual Bool_t IsEMCAL()            const {return kFALSE;}\r
 \r
+  virtual Double_t GetTrackPhiOnEMCal() const {return -999;}\r
+  virtual Double_t GetTrackEtaOnEMCal() const {return -999;}\r
+  virtual void SetTrackPhiEtaOnEMCal(Double_t,Double_t) {;}\r
+\r
   virtual Int_t GetPHOScluster()      const {return -1;}\r
   virtual void SetPHOScluster(Int_t)        {;}\r
   virtual Bool_t IsPHOS()             const {return kFALSE;}\r