#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
fESDpid(0x0),\r
fIsPidOwner(kFALSE),\r
fTimeZeroType(AliESDpid::kTOF_T0),\r
- fTPCaloneTrackCuts(0)\r
+ fTPCaloneTrackCuts(0),\r
+ fDoPropagateTrackToEMCal(kTRUE)\r
{\r
// Constructor\r
\r
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
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
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
}\r
}\r
\r
+\r
//______________________________________________________________________________\r
void AliAnalysisTaskESDfilter::ConvertCaloClusters(const AliESDEvent& esd)\r
{\r
\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
fESDEvent(0),
fCacheNCrossedRows(-10),
fCacheChi2TPCConstrainedVsGlobal(-10),
- fCacheChi2TPCConstrainedVsGlobalVertex(0)
+ fCacheChi2TPCConstrainedVsGlobalVertex(0),
+ fTrackPhiOnEMCal(-999),
+ fTrackEtaOnEMCal(-999)
{
//
// The default ESD constructor
fESDEvent(track.fESDEvent),
fCacheNCrossedRows(track.fCacheNCrossedRows),
fCacheChi2TPCConstrainedVsGlobal(track.fCacheChi2TPCConstrainedVsGlobal),
- fCacheChi2TPCConstrainedVsGlobalVertex(track.fCacheChi2TPCConstrainedVsGlobalVertex)
+ fCacheChi2TPCConstrainedVsGlobalVertex(track.fCacheChi2TPCConstrainedVsGlobalVertex),
+ fTrackPhiOnEMCal(track.fTrackPhiOnEMCal),
+ fTrackEtaOnEMCal(track.fTrackEtaOnEMCal)
{
//
//copy constructor
fESDEvent(0),
fCacheNCrossedRows(-10),
fCacheChi2TPCConstrainedVsGlobal(-10),
- fCacheChi2TPCConstrainedVsGlobalVertex(0)
+ fCacheChi2TPCConstrainedVsGlobalVertex(0),
+ fTrackPhiOnEMCal(-999),
+ fTrackEtaOnEMCal(-999)
{
//
// ESD track from AliVTrack.
fESDEvent(0),
fCacheNCrossedRows(-10),
fCacheChi2TPCConstrainedVsGlobal(-10),
- fCacheChi2TPCConstrainedVsGlobalVertex(0)
+ fCacheChi2TPCConstrainedVsGlobalVertex(0),
+ fTrackPhiOnEMCal(-999),
+ fTrackEtaOnEMCal(-999)
{
//
// ESD track from TParticle
fCacheChi2TPCConstrainedVsGlobal = source.fCacheChi2TPCConstrainedVsGlobal;
fCacheChi2TPCConstrainedVsGlobalVertex = source.fCacheChi2TPCConstrainedVsGlobalVertex;
+ fTrackPhiOnEMCal= source.fTrackPhiOnEMCal;
+ fTrackEtaOnEMCal= source.fTrackEtaOnEMCal;
+
return *this;
}