From: hristov Date: Wed, 29 Feb 2012 19:30:50 +0000 (+0000) Subject: Changes taht allow to X-Git-Url: http://git.uio.no/git/?a=commitdiff_plain;h=ed15417e832455267ce494ee168b031f18fbe45c;p=u%2Fmrichter%2FAliRoot.git Changes taht allow to 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 --- diff --git a/ANALYSIS/AliAnalysisTaskESDfilter.cxx b/ANALYSIS/AliAnalysisTaskESDfilter.cxx index d9b0404fbb6..3ea4eb74877 100644 --- a/ANALYSIS/AliAnalysisTaskESDfilter.cxx +++ b/ANALYSIS/AliAnalysisTaskESDfilter.cxx @@ -54,60 +54,64 @@ #include "AliV0vertexer.h" #include "AliCascadeVertexer.h" #include "Riostream.h" +#include "AliExternalTrackParam.h" +#include "AliTrackerBase.h" +#include "TVector3.h" ClassImp(AliAnalysisTaskESDfilter) //////////////////////////////////////////////////////////////////////// AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(): - AliAnalysisTaskSE(), - fTrackFilter(0x0), - fKinkFilter(0x0), - fV0Filter(0x0), - fCascadeFilter(0x0), - fHighPthreshold(0), - fPtshape(0x0), - fEnableFillAOD(kTRUE), - fUsedTrack(0x0), - fUsedKink(0x0), - fUsedV0(0x0), - fAODTrackRefs(0x0), - fAODV0VtxRefs(0x0), - fAODV0Refs(0x0), - fMChandler(0x0), - fNumberOfTracks(0), - fNumberOfPositiveTracks(0), - fNumberOfV0s(0), - fNumberOfVertices(0), - fNumberOfCascades(0), - fNumberOfKinks(0), - fOldESDformat(kFALSE), - fPrimaryVertex(0x0), + AliAnalysisTaskSE(), + fTrackFilter(0x0), + fKinkFilter(0x0), + fV0Filter(0x0), + fCascadeFilter(0x0), + fHighPthreshold(0), + fPtshape(0x0), + fEnableFillAOD(kTRUE), + fUsedTrack(0x0), + fUsedKink(0x0), + fUsedV0(0x0), + fAODTrackRefs(0x0), + fAODV0VtxRefs(0x0), + fAODV0Refs(0x0), + fMChandler(0x0), + fNumberOfTracks(0), + fNumberOfPositiveTracks(0), + fNumberOfV0s(0), + fNumberOfVertices(0), + fNumberOfCascades(0), + fNumberOfKinks(0), + fOldESDformat(kFALSE), + fPrimaryVertex(0x0), fTPCConstrainedFilterMask(0), fHybridFilterMaskTPCCG(0), fWriteHybridTPCCOnly(kFALSE), fGlobalConstrainedFilterMask(0), fHybridFilterMaskGCG(0), fWriteHybridGCOnly(kFALSE), - fIsVZEROEnabled(kTRUE), - fIsTZEROEnabled(kTRUE), - fIsZDCEnabled(kTRUE), - fIsV0CascadeRecoEnabled(kFALSE), - fAreCascadesEnabled(kTRUE), - fAreV0sEnabled(kTRUE), - fAreKinksEnabled(kTRUE), - fAreTracksEnabled(kTRUE), - fArePmdClustersEnabled(kTRUE), - fAreCaloClustersEnabled(kTRUE), - fAreEMCALCellsEnabled(kTRUE), - fArePHOSCellsEnabled(kTRUE), - fAreEMCALTriggerEnabled(kTRUE), - fArePHOSTriggerEnabled(kTRUE), - fAreTrackletsEnabled(kTRUE), - fESDpid(0x0), - fIsPidOwner(kFALSE), - fTimeZeroType(AliESDpid::kTOF_T0), - fTPCaloneTrackCuts(0) + fIsVZEROEnabled(kTRUE), + fIsTZEROEnabled(kTRUE), + fIsZDCEnabled(kTRUE), + fIsV0CascadeRecoEnabled(kFALSE), + fAreCascadesEnabled(kTRUE), + fAreV0sEnabled(kTRUE), + fAreKinksEnabled(kTRUE), + fAreTracksEnabled(kTRUE), + fArePmdClustersEnabled(kTRUE), + fAreCaloClustersEnabled(kTRUE), + fAreEMCALCellsEnabled(kTRUE), + fArePHOSCellsEnabled(kTRUE), + fAreEMCALTriggerEnabled(kTRUE), + fArePHOSTriggerEnabled(kTRUE), + fAreTrackletsEnabled(kTRUE), + fESDpid(0x0), + fIsPidOwner(kFALSE), + fTimeZeroType(AliESDpid::kTOF_T0), + fTPCaloneTrackCuts(0), + fDoPropagateTrackToEMCal(kTRUE) { // Default constructor fV0Cuts[0] = 33. ; // max allowed chi2 @@ -177,7 +181,8 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(const char* name): fESDpid(0x0), fIsPidOwner(kFALSE), fTimeZeroType(AliESDpid::kTOF_T0), - fTPCaloneTrackCuts(0) + fTPCaloneTrackCuts(0), + fDoPropagateTrackToEMCal(kTRUE) { // Constructor @@ -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; cout << spaces.Data() << Form("PHOS triggers are %s",fArePHOSTriggerEnabled ? "ENABLED":"DISABLED") << endl; cout << spaces.Data() << Form("Tracklets are %s",fAreTrackletsEnabled ? "ENABLED":"DISABLED") << endl; + cout << spaces.Data() << Form("PropagateTrackToEMCal is %s", fDoPropagateTrackToEMCal ? "ENABLED":"DISABLED") << endl; } //______________________________________________________________________________ @@ -1333,6 +1339,7 @@ void AliAnalysisTaskESDfilter::ConvertTracks(const AliESDEvent& esd) const AliESDVertex *vtx = esd.GetPrimaryVertex(); Double_t p[3] = { 0. }; Double_t pos[3] = { 0. }; + Double_t trkPos[3] = {0.,0.,0.}; Double_t covTr[21] = { 0. }; Double_t pid[10] = { 0. }; AliAODTrack* aodTrack(0x0); @@ -1382,6 +1389,31 @@ void AliAnalysisTaskESDfilter::ConvertTracks(const AliESDEvent& esd) if(esdTrack->IsEMCAL()) aodTrack->SetEMCALcluster(esdTrack->GetEMCALcluster()); if(esdTrack->IsPHOS()) aodTrack->SetPHOScluster(esdTrack->GetPHOScluster()); + //Perform progagation of tracks if needed + if(fDoPropagateTrackToEMCal) + { + Double_t EMCalEta, EMCalPhi; + Double_t trkphi = esdTrack->Phi()*TMath::RadToDeg(); + if(TMath::Abs(esdTrack->Eta())<0.9 && trkphi > 10 && trkphi < 250 ) + { + AliExternalTrackParam *trkParam = const_cast(esdTrack->GetInnerParam()); + if(trkParam) + { + AliExternalTrackParam trkParamTmp(*trkParam); + if(AliTrackerBase::PropagateTrackToBxByBz(&trkParamTmp, 430, esdTrack->GetMass(), 20, kTRUE, 0.8, -1)) + { + trkParamTmp.GetXYZ(trkPos); + TVector3 trkPosVec(trkPos[0],trkPos[1],trkPos[2]); + EMCalEta = trkPosVec.Eta(); + EMCalPhi = trkPosVec.Phi(); + if(EMCalPhi<0) EMCalPhi += 2*TMath::Pi(); + esdTrack->SetTrackPhiEtaOnEMCal(EMCalPhi,EMCalEta); + } + } + } + } + aodTrack->SetTrackPhiEtaOnEMCal(esdTrack->GetTrackPhiOnEMCal(),esdTrack->GetTrackEtaOnEMCal()); + fAODTrackRefs->AddAt(aodTrack, nTrack); @@ -1413,6 +1445,7 @@ void AliAnalysisTaskESDfilter::ConvertPmdClusters(const AliESDEvent& esd) } } + //______________________________________________________________________________ void AliAnalysisTaskESDfilter::ConvertCaloClusters(const AliESDEvent& esd) { @@ -1461,15 +1494,19 @@ void AliAnalysisTaskESDfilter::ConvertCaloClusters(const AliESDEvent& esd) caloCluster->SetTrackDistance(cluster->GetTrackDx(), cluster->GetTrackDz()); + Int_t nMatchCount = 0; TArrayI* matchedT = cluster->GetTracksMatched(); if (fNumberOfTracks>0 && matchedT && cluster->GetTrackMatchedIndex() >= 0) { for (Int_t im = 0; im < matchedT->GetSize(); im++) { Int_t iESDtrack = matchedT->At(im);; if (fAODTrackRefs->At(iESDtrack) != 0) { caloCluster->AddTrackMatched((AliAODTrack*)fAODTrackRefs->At(iESDtrack)); + nMatchCount++; } } } + if(nMatchCount==0) + caloCluster->SetTrackDistance(-999,-999); } caloClusters.Expand(jClusters); // resize TObjArray to 'remove' slots for pseudo clusters diff --git a/ANALYSIS/AliAnalysisTaskESDfilter.h b/ANALYSIS/AliAnalysisTaskESDfilter.h index 1319257a19a..d31f29c65c2 100644 --- a/ANALYSIS/AliAnalysisTaskESDfilter.h +++ b/ANALYSIS/AliAnalysisTaskESDfilter.h @@ -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 diff --git a/EMCAL/AliEMCALTracker.cxx b/EMCAL/AliEMCALTracker.cxx index 39b2b913187..50973ef36e6 100644 --- a/EMCAL/AliEMCALTracker.cxx +++ b/EMCAL/AliEMCALTracker.cxx @@ -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 diff --git a/STEER/AOD/AliAODTrack.cxx b/STEER/AOD/AliAODTrack.cxx index c0c58590801..4ebed0f8821 100644 --- a/STEER/AOD/AliAODTrack.cxx +++ b/STEER/AOD/AliAODTrack.cxx @@ -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); diff --git a/STEER/AOD/AliAODTrack.h b/STEER/AOD/AliAODTrack.h index ce536a147c5..53605085e29 100644 --- a/STEER/AOD/AliAODTrack.h +++ b/STEER/AOD/AliAODTrack.h @@ -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 diff --git a/STEER/ESD/AliESDtrack.cxx b/STEER/ESD/AliESDtrack.cxx index 7b80878247d..aa32089f609 100644 --- a/STEER/ESD/AliESDtrack.cxx +++ b/STEER/ESD/AliESDtrack.cxx @@ -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; } diff --git a/STEER/ESD/AliESDtrack.h b/STEER/ESD/AliESDtrack.h index 4b6c0f5e3d7..d5831a7835b 100644 --- a/STEER/ESD/AliESDtrack.h +++ b/STEER/ESD/AliESDtrack.h @@ -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 }; diff --git a/STEER/STEERBase/AliVTrack.h b/STEER/STEERBase/AliVTrack.h index 5a5ca56679a..64d080c4183 100644 --- a/STEER/STEERBase/AliVTrack.h +++ b/STEER/STEERBase/AliVTrack.h @@ -63,6 +63,10 @@ public: virtual void SetEMCALcluster(Int_t) {;} virtual Bool_t IsEMCAL() const {return kFALSE;} + virtual Double_t GetTrackPhiOnEMCal() const {return -999;} + virtual Double_t GetTrackEtaOnEMCal() const {return -999;} + virtual void SetTrackPhiEtaOnEMCal(Double_t,Double_t) {;} + virtual Int_t GetPHOScluster() const {return -1;} virtual void SetPHOScluster(Int_t) {;} virtual Bool_t IsPHOS() const {return kFALSE;}