From ed15ef4f96f183c6a90edb3dfb4fcf70c5c374d7 Mon Sep 17 00:00:00 2001 From: hristov Date: Thu, 19 Mar 2009 10:22:30 +0000 Subject: [PATCH] Store number of TRD tracklets on ESD for tracking and PID. Reuse data member fTRDpidQuality as fTRDntracklets to store both scalers. Alex --- STEER/AliESDtrack.cxx | 12 +++--- STEER/AliESDtrack.h | 9 +++-- TRD/AliTRDQADataMakerRec.cxx | 4 +- TRD/AliTRDpidESD.cxx | 2 +- TRD/AliTRDtrackV1.cxx | 43 ++++++++++++---------- TRD/AliTRDtracker.cxx | 17 +++++---- TRD/AliTRDtrackerV1.cxx | 10 ++--- TRD/qaAnalysis/AliTRDqaESDFriends.cxx | 2 +- TRD/qaAnalysis/AliTRDqaElectronSpectra.cxx | 2 +- TRD/qaAnalysis/AliTRDqaEnergyDeposit.cxx | 2 +- TRD/qaAnalysis/AliTRDqaJPsi.cxx | 2 +- TRD/qaRec/AliTRDcheckESD.cxx | 4 +- TRD/qaRec/AliTRDtrackInfoGen.cxx | 2 +- 13 files changed, 58 insertions(+), 53 deletions(-) diff --git a/STEER/AliESDtrack.cxx b/STEER/AliESDtrack.cxx index 44669f7b2c2..e62d1fe183f 100644 --- a/STEER/AliESDtrack.cxx +++ b/STEER/AliESDtrack.cxx @@ -211,7 +211,7 @@ AliESDtrack::AliESDtrack() : fITSClusterMap(0), fTRDncls(0), fTRDncls0(0), - fTRDpidQuality(0), + fTRDntracklets(0), fTRDnSlices(0), fTRDslices(0x0) @@ -299,7 +299,7 @@ AliESDtrack::AliESDtrack(const AliESDtrack& track): fITSClusterMap(track.fITSClusterMap), fTRDncls(track.fTRDncls), fTRDncls0(track.fTRDncls0), - fTRDpidQuality(track.fTRDpidQuality), + fTRDntracklets(track.fTRDntracklets), fTRDnSlices(track.fTRDnSlices), fTRDslices(0x0) { @@ -398,7 +398,7 @@ AliESDtrack::AliESDtrack(const AliVTrack *track) : fITSClusterMap(0), fTRDncls(0), fTRDncls0(0), - fTRDpidQuality(0), + fTRDntracklets(0), fTRDnSlices(0), fTRDslices(0x0) { @@ -516,7 +516,7 @@ AliESDtrack::AliESDtrack(TParticle * part) : fITSClusterMap(0), fTRDncls(0), fTRDncls0(0), - fTRDpidQuality(0), + fTRDntracklets(0), fTRDnSlices(0), fTRDslices(0x0) { @@ -823,7 +823,7 @@ AliESDtrack &AliESDtrack::operator=(const AliESDtrack &source){ fITSClusterMap = source.fITSClusterMap; fTRDncls = source.fTRDncls; fTRDncls0 = source.fTRDncls0; - fTRDpidQuality = source.fTRDpidQuality; + fTRDntracklets = source.fTRDntracklets; return *this; } @@ -994,7 +994,7 @@ void AliESDtrack::MakeMiniESDtrack(){ for (Int_t i=0;i>3)&7;} + UChar_t GetTRDntracklets() const {return fTRDntracklets&7;} // end A.Bercuci void SetNumberOfTRDslices(Int_t n); @@ -407,7 +408,7 @@ protected: UChar_t fITSClusterMap; // map of clusters, one bit per a layer UChar_t fTRDncls; // number of clusters assigned in the TRD UChar_t fTRDncls0; // number of clusters assigned in the TRD before first material cross - UChar_t fTRDpidQuality; // TRD PID quality according to number of planes. 6 is the best + UChar_t fTRDntracklets; // number of TRD tracklets used for tracking/PID Int_t fTRDnSlices; // number of slices used for PID in the TRD Double32_t *fTRDslices; //[fTRDnSlices] @@ -417,7 +418,7 @@ protected: private: AliESDtrack & operator=(const AliESDtrack & ); - ClassDef(AliESDtrack,47) //ESDtrack + ClassDef(AliESDtrack,48) //ESDtrack }; #endif diff --git a/TRD/AliTRDQADataMakerRec.cxx b/TRD/AliTRDQADataMakerRec.cxx index 26686886935..4a525bdaed5 100644 --- a/TRD/AliTRDQADataMakerRec.cxx +++ b/TRD/AliTRDQADataMakerRec.cxx @@ -504,7 +504,7 @@ void AliTRDQADataMakerRec::MakeESDs(AliESDEvent * esd) GetESDsData(28)->Fill(track->GetTRDBudget()); GetESDsData(29)->Fill(track->GetTRDchi2()); GetESDsData(30)->Fill(track->GetTRDTimBin(0)); - GetESDsData(31)->Fill(track->GetTRDpidQuality()); + GetESDsData(31)->Fill(track->GetTRDntrackletsPID()); // dedx @@ -523,7 +523,7 @@ void AliTRDQADataMakerRec::MakeESDs(AliESDEvent * esd) } // probabilities uniformity - if (track->GetTRDpidQuality() < 6) continue; + if (track->GetTRDntrackletsPID() < 6) continue; GetESDsData(35)->Fill(paramOut->GetZ()/paramOut->GetX()); Int_t idx = 5 * sector + stack; diff --git a/TRD/AliTRDpidESD.cxx b/TRD/AliTRDpidESD.cxx index a09ea31d97c..32c1be35307 100644 --- a/TRD/AliTRDpidESD.cxx +++ b/TRD/AliTRDpidESD.cxx @@ -212,7 +212,7 @@ Int_t AliTRDpidESD::MakePID(AliESDEvent *event) // book PID to the track t->SetTRDpid(p); - t->SetTRDpidQuality(nPlanePID); + t->SetTRDntracklets(nPlanePID<<3); } return 0; diff --git a/TRD/AliTRDtrackV1.cxx b/TRD/AliTRDtrackV1.cxx index 9b042eb72ba..bdf9f45e1c3 100644 --- a/TRD/AliTRDtrackV1.cxx +++ b/TRD/AliTRDtrackV1.cxx @@ -293,7 +293,7 @@ Bool_t AliTRDtrackV1::CookPID() for(int ip=0; ipIsOK()) continue; - if(!(prob = fTracklet[ip]->GetProbability())) return kFALSE; + if(!(prob = fTracklet[ip]->GetProbability(kTRUE))) return kFALSE; Int_t nspec = 0; // quality check of tracklet dEdx for(int ispec=0; ispecGetX0(); - Double_t p[2] = { trklt->GetYat(x) - , trklt->GetZat(x) }; - Double_t cov[3]; - trklt->GetCovAt(x, cov); - - const Double_t *cc = GetCovariance(); - Double_t dy = p[0]-GetY(); dy*=dy; - Double_t s2 = cov[0]+cc[0]; - return s2 > 0. ? dy/s2 : 0.; - //return AliExternalTrackParam::GetPredictedChi2(p, cov); +// Compute chi2 between tracklet and track. The value is calculated at the radial position of the track +// equal to the reference radial position of the tracklet (see AliTRDseedV1) +// +// The chi2 estimator is computed according to the following formula +// BEGIN_LATEX +// #chi^{2}=(X_{trklt}-X_{track})(C_{trklt}+C_{track})^{-1}(X_{trklt}-X_{track})^{T} +// END_LATEX +// where X=(y z), the position of the track/tracklet in the yz plane +// + + Double_t x = GetX(); + Double_t p[2] = { trklt->GetYat(x), trklt->GetZat(x)}; + Double_t cov[3]; trklt->GetCovAt(x, cov); + return AliExternalTrackParam::GetPredictedChi2(p, cov); } //_______________________________________________________________ @@ -791,16 +790,20 @@ void AliTRDtrackV1::UpdateESDtrack(AliESDtrack *track) Int_t nslices = fReconstructor->IsEightSlices() ? (Int_t)AliTRDpidUtil::kNNslices : (Int_t)AliTRDpidUtil::kLQslices; track->SetNumberOfTRDslices(nslices); + Int_t n = 0; for (Int_t ip = 0; ip < kNplane; ip++) { if(fTrackletIndex[ip] == 0xffff) continue; + n++; if(!fTracklet[ip]->IsOK()) continue; fTracklet[ip]->CookdEdx(nslices); Float_t *dedx = fTracklet[ip]->GetdEdx(); for (Int_t js = 0; js < nslices; js++, dedx++) track->SetTRDslice(*dedx, ip, js); } - // copy PID to ESD - if(!fPIDquality) return; - track->SetTRDpid(fPID); - track->SetTRDpidQuality(fPIDquality); + if(!fPIDquality) track->SetTRDntracklets(n); + else { + track->SetTRDpid(fPID); + n |= (fPIDquality<<3); + track->SetTRDntracklets(n); + } } diff --git a/TRD/AliTRDtracker.cxx b/TRD/AliTRDtracker.cxx index 6656ffa4d28..2ff6df2e365 100644 --- a/TRD/AliTRDtracker.cxx +++ b/TRD/AliTRDtracker.cxx @@ -736,7 +736,7 @@ Int_t AliTRDtracker::RefitInward(AliESDEvent *event) pt->SetPIDMethod(AliTRDtrack::kLQ); pt->CookPID(pidQ); seed->SetTRDpid(pt->GetPID()); - seed->SetTRDpidQuality(pidQ); + seed->SetTRDntracklets(pidQ<<3); // update calibration if(calibra->GetHisto2d()) calibra->UpdateHistograms(pt); @@ -3730,14 +3730,15 @@ Int_t AliTRDtracker::Freq(Int_t n, const Int_t *inlist // The size of output array has is 2*n // - if (n <= 0) return 0; + if (n <= 0) { + return 0; + } - // Temporary array for sorting - Int_t *sindexS = new Int_t[n]; - Int_t *sindexF = new Int_t[2*n]; - memset(outlist, 0, 2*n*sizeof(Int_t)); - memset(sindexS, 0, n*sizeof(Int_t)); - memset(sindexF, 0, 2*n*sizeof(Int_t)); + Int_t *sindexS = new Int_t[n]; // Temporary array for sorting + Int_t *sindexF = new Int_t[2*n]; + for (Int_t i = 0; i < n; i++) { + sindexF[i] = 0; + } TMath::Sort(n,inlist,sindexS,down); diff --git a/TRD/AliTRDtrackerV1.cxx b/TRD/AliTRDtrackerV1.cxx index 041a257c5b7..d32fee1b4d2 100644 --- a/TRD/AliTRDtrackerV1.cxx +++ b/TRD/AliTRDtrackerV1.cxx @@ -404,7 +404,7 @@ Int_t AliTRDtrackerV1::PropagateBack(AliESDEvent *event) if(quality) delete [] quality; - AliInfo(Form("Number of seeds: %d", nSeed)); + AliInfo(Form("Number of TPC seeds: %d", nSeed)); AliInfo(Form("Number of back propagated TRD tracks: %d", found)); // run stand alone tracking @@ -988,13 +988,13 @@ Float_t AliTRDtrackerV1::FitTiltedRieman(AliTRDseedV1 *tracklets, Bool_t sigErro // Containers for Least-square fitter for(Int_t ipl = 0; ipl < kNPlanes; ipl++){ if(!tracklets[ipl].IsOK()) continue; + tilt = tracklets[ipl].GetTilt(); for(Int_t itb = 0; itb < AliTRDseedV1::kNclusters; itb++){ if(!(cl = tracklets[ipl].GetClusters(itb))) continue; if (!tracklets[ipl].IsUsable(itb)) continue; x = cl->GetX(); y = cl->GetY(); z = cl->GetZ(); - tilt = tracklets[ipl].GetTilt(); dx = x - xref; // Transformation t = 1./(x*x + y*y); @@ -2169,15 +2169,15 @@ Double_t AliTRDtrackerV1::BuildSeedingConfigs(AliTRDtrackingChamber **stack, Int // The overall chamber quality is given by the product of this 2 contributions. // - Double_t chamberQ[kNPlanes]; memset(chamberQ, 0, kNPlanes*sizeof(Double_t)); + Double_t chamberQ[kNPlanes]; AliTRDtrackingChamber *chamber = 0x0; for(int iplane=0; iplaneGetQuality() : 0.; } - Double_t tconfig[kNConfigs]; memset(tconfig, 0, kNConfigs*sizeof(Double_t)); - Int_t planes[] = {0, 0, 0, 0}; + Double_t tconfig[kNConfigs]; + Int_t planes[4]; for(int iconf=0; iconfGetStatus(); if (!(status & AliESDtrack::kTRDrefit)) continue; if (!(status & AliESDtrack::kTRDpid)) continue; - if (track->GetTRDpidQuality() < 6) continue; + if (track->GetTRDntrackletsPID() < 6) continue; // standard selection AliESDfriend *fr = (AliESDfriend*)fESD->FindListObject("AliESDfriend"); diff --git a/TRD/qaAnalysis/AliTRDqaElectronSpectra.cxx b/TRD/qaAnalysis/AliTRDqaElectronSpectra.cxx index 4ea7bfbc5b4..a75e13abad7 100644 --- a/TRD/qaAnalysis/AliTRDqaElectronSpectra.cxx +++ b/TRD/qaAnalysis/AliTRDqaElectronSpectra.cxx @@ -226,7 +226,7 @@ void AliTRDqaElectronSpectra::Exec(Option_t *) UInt_t status = track->GetStatus(); if (!(status & AliESDtrack::kTRDrefit)) continue; if (!(status & AliESDtrack::kTRDpid)) continue; - if (track->GetTRDpidQuality() < 6) continue; + if (track->GetTRDntrackletsPID() < 6) continue; Int_t sm = AliTRDqaAT::GetSector(paramOut->GetAlpha()); Int_t stack = 5*sm + AliTRDqaAT::GetStack(paramOut); diff --git a/TRD/qaAnalysis/AliTRDqaEnergyDeposit.cxx b/TRD/qaAnalysis/AliTRDqaEnergyDeposit.cxx index e963c4bf46b..04816e5780d 100644 --- a/TRD/qaAnalysis/AliTRDqaEnergyDeposit.cxx +++ b/TRD/qaAnalysis/AliTRDqaEnergyDeposit.cxx @@ -177,7 +177,7 @@ void AliTRDqaEnergyDeposit::Exec(Option_t *) UInt_t status = track->GetStatus(); if (!(status & AliESDtrack::kTRDrefit)) continue; if (!(status & AliESDtrack::kTRDpid)) continue; - if (track->GetTRDpidQuality() < 6) continue; + if (track->GetTRDntrackletsPID() < 6) continue; // standard selection diff --git a/TRD/qaAnalysis/AliTRDqaJPsi.cxx b/TRD/qaAnalysis/AliTRDqaJPsi.cxx index 6a609fa53ea..a445807d752 100644 --- a/TRD/qaAnalysis/AliTRDqaJPsi.cxx +++ b/TRD/qaAnalysis/AliTRDqaJPsi.cxx @@ -225,7 +225,7 @@ void AliTRDqaJPsi::Exec(Option_t *) FillHist(track, step++); if (!(status & AliESDtrack::kTRDpid)) continue; - if (track->GetTRDpidQuality() < 6) continue; + if (track->GetTRDntracklets() < 6) continue; cTracks[knSteps *charge + step]++; FillHist(track, step++); diff --git a/TRD/qaRec/AliTRDcheckESD.cxx b/TRD/qaRec/AliTRDcheckESD.cxx index 6c8f01d2b73..a5fa2a5949e 100644 --- a/TRD/qaRec/AliTRDcheckESD.cxx +++ b/TRD/qaRec/AliTRDcheckESD.cxx @@ -184,7 +184,7 @@ void AliTRDcheckESD::Exec(Option_t *){ // TRD PID Double_t p[AliPID::kSPECIES]; esdTrack->GetTRDpid(p); // pid quality - esdTrack->GetTRDpidQuality(); + //esdTrack->GetTRDntrackletsPID(); // look at external track param const AliExternalTrackParam *op = esdTrack->GetOuterParam(); @@ -233,7 +233,7 @@ void AliTRDcheckESD::Exec(Option_t *){ } else { TRDin=1; if(esdTrack->GetNcls(2)) TRDout=1; - if(esdTrack->GetTRDpidQuality()>=4) TRDpid=1; + if(esdTrack->GetTRDntrackletsPID()>=4) TRDpid=1; } } else { // track stopped in TPC ref = mcParticle->GetTrackReference(TMath::Max(iref-1, 0)); diff --git a/TRD/qaRec/AliTRDtrackInfoGen.cxx b/TRD/qaRec/AliTRDtrackInfoGen.cxx index 3ee8dff9244..d462867fdb1 100644 --- a/TRD/qaRec/AliTRDtrackInfoGen.cxx +++ b/TRD/qaRec/AliTRDtrackInfoGen.cxx @@ -251,7 +251,7 @@ void AliTRDtrackInfoGen::Exec(Option_t *){ fTrackInfo->SetTrackId(esdTrack->GetID()); Double_t p[AliPID::kSPECIES]; esdTrack->GetTRDpid(p); fTrackInfo->SetESDpid(p); - fTrackInfo->SetESDpidQuality(esdTrack->GetTRDpidQuality()); + fTrackInfo->SetESDpidQuality(esdTrack->GetTRDntrackletsPID()); fTrackInfo->SetLabel(label); fTrackInfo->SetNumberOfClustersRefit(esdTrack->GetNcls(2)); // some other Informations which we may wish to store in order to find problematic cases -- 2.43.0