X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=EMCAL%2FAliEMCALTracker.cxx;h=167cd9fa2aaa28215e205bc85066f55f11bb2165;hb=5fea9f9b2c3b66a15c129501b88448f0e9428e9c;hp=7a02eb112a0429889ae112917c00f939ae944319;hpb=bd36717eebe4107013cdd38f117126c6d36ece83;p=u%2Fmrichter%2FAliRoot.git diff --git a/EMCAL/AliEMCALTracker.cxx b/EMCAL/AliEMCALTracker.cxx index 7a02eb112a0..167cd9fa2aa 100644 --- a/EMCAL/AliEMCALTracker.cxx +++ b/EMCAL/AliEMCALTracker.cxx @@ -55,26 +55,32 @@ #include "AliCDBEntry.h" #include "AliCDBManager.h" #include "AliEMCALReconstructor.h" +#include "AliEMCALRecoUtils.h" #include "AliEMCALTracker.h" +using std::cerr; +using std::endl; ClassImp(AliEMCALTracker) // //------------------------------------------------------------------------------ // AliEMCALTracker::AliEMCALTracker() - : AliTracker(), - fCutPt(0), - fCutNITS(0), - fCutNTPC(50), - fStep(50), - fTrackCorrMode(kTrackCorrMMB), - fCutEta(0.025), - fCutPhi(0.05), - fTracks(0), - fClusters(0), - fGeom(0) +: AliTracker(), + fCutPt(0), + fCutNITS(0), + fCutNTPC(50), + fStep(20), + fTrackCorrMode(kTrackCorrMMB), + fEMCalSurfaceDistance(440), + fClusterWindow(50), + fCutEta(0.025), + fCutPhi(0.05), + fITSTrackSA(kFALSE), + fTracks(0), + fClusters(0), + fGeom(0) { // // Default constructor. @@ -94,8 +100,11 @@ AliEMCALTracker::AliEMCALTracker(const AliEMCALTracker& copy) fCutNTPC(copy.fCutNTPC), fStep(copy.fStep), fTrackCorrMode(copy.fTrackCorrMode), + fEMCalSurfaceDistance(copy.fEMCalSurfaceDistance), + fClusterWindow(copy.fClusterWindow), fCutEta(copy.fCutEta), fCutPhi(copy.fCutPhi), + fITSTrackSA(copy.fITSTrackSA), fTracks((TObjArray*)copy.fTracks->Clone()), fClusters((TObjArray*)copy.fClusters->Clone()), fGeom(copy.fGeom) @@ -108,27 +117,12 @@ AliEMCALTracker::AliEMCALTracker(const AliEMCALTracker& copy) // //------------------------------------------------------------------------------ // -AliEMCALTracker& AliEMCALTracker::operator=(const AliEMCALTracker& copy) -{ - // - // Assignment operator. - // Besides copying all parameters, duplicates all collections. - // - - fCutPt = copy.fCutPt; - fCutEta = copy.fCutEta; - fCutPhi = copy.fCutPhi; - fStep = copy.fStep; - fTrackCorrMode = copy.fTrackCorrMode; +AliEMCALTracker& AliEMCALTracker::operator=(const AliEMCALTracker& source) +{ // assignment operator; use copy ctor + if (&source == this) return *this; - fCutNITS = copy.fCutNITS; - fCutNTPC = copy.fCutNTPC; - - fTracks = (TObjArray*)copy.fTracks->Clone(); - fClusters = (TObjArray*)copy.fClusters->Clone(); - fGeom = copy.fGeom; - - return (*this); + new (this) AliEMCALTracker(source); + return *this; } // //------------------------------------------------------------------------------ @@ -149,10 +143,10 @@ void AliEMCALTracker::InitParameters() fCutEta = recParam->GetMthCutEta(); fCutPhi = recParam->GetMthCutPhi(); - fStep = recParam->GetExtrapolateStep(); + fStep = recParam->GetExtrapolateStep(); fCutPt = recParam->GetTrkCutPt(); - fCutNITS = recParam->GetTrkCutNITS(); - fCutNTPC = recParam->GetTrkCutNTPC(); + fCutNITS = recParam->GetTrkCutNITS(); + fCutNTPC = recParam->GetTrkCutNTPC(); } } @@ -267,33 +261,38 @@ Int_t AliEMCALTracker::LoadTracks(AliESDEvent *esd) // // Load ESD tracks. // - + + UInt_t mask1 = esd->GetESDRun()->GetDetectorsInDAQ(); + UInt_t mask2 = esd->GetESDRun()->GetDetectorsInReco(); + Bool_t desc1 = (mask1 >> 3) & 0x1; + Bool_t desc2 = (mask2 >> 3) & 0x1; + if (desc1==0 || desc2==0) { +// AliError(Form("TPC not in DAQ/RECO: %u (%u)/%u (%u)", +// mask1, esd->GetESDRun()->GetDetectorsInReco(), +// mask2, esd->GetESDRun()->GetDetectorsInDAQ())); + fITSTrackSA = kTRUE; + } + Clear("TRACKS"); fTracks = new TObjArray(0); Int_t nTracks = esd->GetNumberOfTracks(); - Bool_t isKink=kFALSE; + //Bool_t isKink=kFALSE; for (Int_t i = 0; i < nTracks; i++) { AliESDtrack *esdTrack = esd->GetTrack(i); // set by default the value corresponding to "no match" esdTrack->SetEMCALcluster(kUnmatched); + esdTrack->ResetStatus(AliESDtrack::kEMCALmatch); //Select good quaulity tracks if(esdTrack->Pt()GetNcls(1)GetKinkIndex(j) != 0) isKink = kTRUE; - } - if (isKink) continue; + if(!fITSTrackSA) + if(esdTrack->GetNcls(1)Phi()*TMath::RadToDeg(); - if(TMath::Abs(esdTrack->Eta())>1 || phi <= 60 || phi >= 200 ) continue; + if(TMath::Abs(esdTrack->Eta())>0.8 || phi <= 20 || phi >= 240 ) continue; fTracks->AddLast(esdTrack); } @@ -370,6 +369,7 @@ Int_t AliEMCALTracker::PropagateBack(AliESDEvent* esd) { AliEMCALMatchCluster *cluster = (AliEMCALMatchCluster*)fClusters->At(index); track->SetEMCALcluster(cluster->Index()); + track->SetStatus(AliESDtrack::kEMCALmatch); } } @@ -386,56 +386,63 @@ Int_t AliEMCALTracker::FindMatchedCluster(AliESDtrack *track) // Find the closest one as matched if the residuals (dEta, dPhi) satisfy the cuts // - Double_t maxEta=fCutEta; - Double_t maxPhi=fCutPhi; + Float_t maxEta=fCutEta; + Float_t maxPhi=fCutPhi; Int_t index = -1; // If the esdFriend is available, use the TPCOuter point as the starting point of extrapolation // Otherwise use the TPCInner point - AliExternalTrackParam *trkParam; - const AliESDfriendTrack* friendTrack = track->GetFriendTrack(); - if(friendTrack && friendTrack->GetTPCOut()) - trkParam = const_cast(friendTrack->GetTPCOut()); + AliExternalTrackParam *trkParam = 0; + + if(!fITSTrackSA){ + const AliESDfriendTrack* friendTrack = track->GetFriendTrack(); + if(friendTrack && friendTrack->GetTPCOut()) + trkParam = const_cast(friendTrack->GetTPCOut()); + else if(track->GetInnerParam()) + trkParam = const_cast(track->GetInnerParam()); + } else - trkParam = const_cast(track->GetInnerParam()); + trkParam = new AliExternalTrackParam(*track); + if(!trkParam) return index; + + AliExternalTrackParam trkParamTmp(*trkParam); + Float_t eta, phi, pt; + if(!AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(&trkParamTmp, fEMCalSurfaceDistance, track->GetMass(kTRUE), fStep, eta, phi, pt)) { + if(fITSTrackSA) delete trkParam; + return index; + } + track->SetTrackPhiEtaPtOnEMCal(phi,eta,pt); + if(TMath::Abs(eta)>0.75 || (phi) < 70*TMath::DegToRad() || (phi) > 190*TMath::DegToRad()){ + if(fITSTrackSA) delete trkParam; + return index; + } //Perform extrapolation Double_t trkPos[3]; + trkParamTmp.GetXYZ(trkPos); Int_t nclusters = fClusters->GetEntries(); for(Int_t ic=0; icAt(ic); - TVector3 vec(cluster->X(),cluster->Y(),cluster->Z()); - Double_t alpha = ((int)(vec.Phi()*TMath::RadToDeg()/20)+0.5)*20*TMath::DegToRad(); - //Rotate to proper local coordinate - vec.RotateZ(-alpha); - trkParamTmp->Rotate(alpha); - //extrapolation is done here - if(!AliTrackerBase::PropagateTrackToBxByBz(trkParamTmp, vec.X(), track->GetMass(), fStep, kFALSE, 0.8, -1)) continue; - - //Calculate the residuals - trkParamTmp->GetXYZ(trkPos); - TVector3 clsPosVec(cluster->X(),cluster->Y(),cluster->Z()); - TVector3 trkPosVec(trkPos[0],trkPos[1],trkPos[2]); + Float_t clsPos[3] = {cluster->X(),cluster->Y(),cluster->Z()}; + Double_t dR = TMath::Sqrt(TMath::Power(trkPos[0]-clsPos[0],2)+TMath::Power(trkPos[1]-clsPos[1],2)+TMath::Power(trkPos[2]-clsPos[2],2)); +// printf("\n dR=%f,wind=%f\n",dR,fClusterWindow); //MARCEL + if(dR > fClusterWindow) continue; - Double_t clsPhi = clsPosVec.Phi(); - if(clsPhi<0) clsPhi+=2*TMath::Pi(); - Double_t trkPhi = trkPosVec.Phi(); - if(trkPhi<0) trkPhi+=2*TMath::Pi(); + AliExternalTrackParam trkParTmp(trkParamTmp); - Double_t tmpPhi = clsPhi-trkPhi; - Double_t tmpEta = clsPosVec.Eta()-trkPosVec.Eta(); - + Float_t tmpEta, tmpPhi; + if(!AliEMCALRecoUtils::ExtrapolateTrackToPosition(&trkParTmp, clsPos,track->GetMass(kTRUE), 5, tmpEta, tmpPhi)) continue; if(TMath::Abs(tmpPhi)