X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=CORRFW%2FAliCFTrackQualityCuts.cxx;h=44700b5da8ea42e8fd48cfc3ae5b398955a8e97d;hb=1db2829e706062f23a2a642f3ddcc30cc8b8a84f;hp=6d204393354fa6b2004465d23aed935c29bf3131;hpb=db6722a584a90cc09f0b76e25de365b2c152c56c;p=u%2Fmrichter%2FAliRoot.git diff --git a/CORRFW/AliCFTrackQualityCuts.cxx b/CORRFW/AliCFTrackQualityCuts.cxx index 6d204393354..44700b5da8e 100644 --- a/CORRFW/AliCFTrackQualityCuts.cxx +++ b/CORRFW/AliCFTrackQualityCuts.cxx @@ -21,10 +21,16 @@ // ESD and AOD data. // It mainly consists of a IsSelected function that returns a boolean. // This function checks whether the considered track passes a set of cuts: -// - number of clusters in the TPC // - number of clusters in the ITS -// - chi2 / cluster in the TPC +// - number of clusters in the TPC +// - number of clusters in the TRD +// - ratio of found / finable number of clusters in the TPC +// - number of tracklets in the TRD +// - number TRD tracklets used for pid // - chi2 / cluster in the ITS +// - chi2 / cluster in the TPC +// - chi2 / tracklet in the TRD +// - number of clusters in the TPC used for dEdx calculation // - successful TPC refit // - successful ITS refit // - covariance matrix diagonal elements @@ -46,8 +52,10 @@ #include #include +#include #include #include "AliCFTrackQualityCuts.h" +#include "AliAODTrack.h" ClassImp(AliCFTrackQualityCuts) @@ -56,24 +64,34 @@ AliCFTrackQualityCuts::AliCFTrackQualityCuts() : AliCFCutBase(), fMinNClusterTPC(0), fMinNClusterITS(0), + fMinNClusterTRD(0), + fMinFoundClusterTPC(0), + fMinNTrackletTRD(0), + fMinNTrackletTRDpid(0), fMaxChi2PerClusterTPC(0), fMaxChi2PerClusterITS(0), - fRequireTPCRefit(0), - fRequireITSRefit(0), + fMaxChi2PerTrackletTRD(0), + fMinNdEdxClusterTPC(0), fCovariance11Max(0), fCovariance22Max(0), fCovariance33Max(0), fCovariance44Max(0), fCovariance55Max(0), + fStatus(0), fhCutStatistics(0), fhCutCorrelation(0), fBitmap(0x0), + fTrackCuts(0x0), fhNBinsClusterTPC(0), fhNBinsClusterITS(0), + fhNBinsClusterTRD(0), + fhNBinsFoundClusterTPC(0), + fhNBinsTrackletTRD(0), + fhNBinsTrackletTRDpid(0), fhNBinsChi2TPC(0), fhNBinsChi2ITS(0), - fhNBinsRefitTPC(0), - fhNBinsRefitITS(0), + fhNBinsChi2TRD(0), + fhNBinsdEdxClusterTPC(0), fhNBinsCovariance11(0), fhNBinsCovariance22(0), fhNBinsCovariance33(0), @@ -81,10 +99,14 @@ AliCFTrackQualityCuts::AliCFTrackQualityCuts() : fhNBinsCovariance55(0), fhBinLimClusterTPC(0x0), fhBinLimClusterITS(0x0), + fhBinLimClusterTRD(0x0), + fhBinLimFoundClusterTPC(0x0), + fhBinLimTrackletTRD(0x0), + fhBinLimTrackletTRDpid(0x0), fhBinLimChi2TPC(0x0), fhBinLimChi2ITS(0x0), - fhBinLimRefitTPC(0x0), - fhBinLimRefitITS(0x0), + fhBinLimChi2TRD(0x0), + fhBinLimdEdxClusterTPC(0x0), fhBinLimCovariance11(0x0), fhBinLimCovariance22(0x0), fhBinLimCovariance33(0x0), @@ -101,24 +123,34 @@ AliCFTrackQualityCuts::AliCFTrackQualityCuts(Char_t* name, Char_t* title) : AliCFCutBase(name,title), fMinNClusterTPC(0), fMinNClusterITS(0), + fMinNClusterTRD(0), + fMinFoundClusterTPC(0), + fMinNTrackletTRD(0), + fMinNTrackletTRDpid(0), fMaxChi2PerClusterTPC(0), fMaxChi2PerClusterITS(0), - fRequireTPCRefit(0), - fRequireITSRefit(0), + fMaxChi2PerTrackletTRD(0), + fMinNdEdxClusterTPC(0), fCovariance11Max(0), fCovariance22Max(0), fCovariance33Max(0), fCovariance44Max(0), fCovariance55Max(0), + fStatus(0), fhCutStatistics(0), fhCutCorrelation(0), fBitmap(0x0), + fTrackCuts(0x0), fhNBinsClusterTPC(0), fhNBinsClusterITS(0), + fhNBinsClusterTRD(0), + fhNBinsFoundClusterTPC(0), + fhNBinsTrackletTRD(0), + fhNBinsTrackletTRDpid(0), fhNBinsChi2TPC(0), fhNBinsChi2ITS(0), - fhNBinsRefitTPC(0), - fhNBinsRefitITS(0), + fhNBinsChi2TRD(0), + fhNBinsdEdxClusterTPC(0), fhNBinsCovariance11(0), fhNBinsCovariance22(0), fhNBinsCovariance33(0), @@ -126,10 +158,14 @@ AliCFTrackQualityCuts::AliCFTrackQualityCuts(Char_t* name, Char_t* title) : fhNBinsCovariance55(0), fhBinLimClusterTPC(0x0), fhBinLimClusterITS(0x0), + fhBinLimClusterTRD(0x0), + fhBinLimFoundClusterTPC(0x0), + fhBinLimTrackletTRD(0x0), + fhBinLimTrackletTRDpid(0x0), fhBinLimChi2TPC(0x0), fhBinLimChi2ITS(0x0), - fhBinLimRefitTPC(0x0), - fhBinLimRefitITS(0x0), + fhBinLimChi2TRD(0x0), + fhBinLimdEdxClusterTPC(0x0), fhBinLimCovariance11(0x0), fhBinLimCovariance22(0x0), fhBinLimCovariance33(0x0), @@ -146,24 +182,34 @@ AliCFTrackQualityCuts::AliCFTrackQualityCuts(const AliCFTrackQualityCuts& c) : AliCFCutBase(c), fMinNClusterTPC(c.fMinNClusterTPC), fMinNClusterITS(c.fMinNClusterITS), + fMinNClusterTRD(c.fMinNClusterTRD), + fMinFoundClusterTPC(c.fMinFoundClusterTPC), + fMinNTrackletTRD(c.fMinNTrackletTRD), + fMinNTrackletTRDpid(c.fMinNTrackletTRDpid), fMaxChi2PerClusterTPC(c.fMaxChi2PerClusterTPC), fMaxChi2PerClusterITS(c.fMaxChi2PerClusterITS), - fRequireTPCRefit(c.fRequireTPCRefit), - fRequireITSRefit(c.fRequireITSRefit), + fMaxChi2PerTrackletTRD(c.fMaxChi2PerTrackletTRD), + fMinNdEdxClusterTPC(c.fMinNdEdxClusterTPC), fCovariance11Max(c.fCovariance11Max), fCovariance22Max(c.fCovariance22Max), fCovariance33Max(c.fCovariance33Max), fCovariance44Max(c.fCovariance44Max), fCovariance55Max(c.fCovariance55Max), + fStatus(c.fStatus), fhCutStatistics(c.fhCutStatistics), fhCutCorrelation(c.fhCutCorrelation), fBitmap(c.fBitmap), + fTrackCuts(c.fTrackCuts), fhNBinsClusterTPC(c.fhNBinsClusterTPC), fhNBinsClusterITS(c.fhNBinsClusterITS), + fhNBinsClusterTRD(c.fhNBinsClusterTRD), + fhNBinsFoundClusterTPC(c.fhNBinsFoundClusterTPC), + fhNBinsTrackletTRD(c.fhNBinsTrackletTRD), + fhNBinsTrackletTRDpid(c.fhNBinsTrackletTRDpid), fhNBinsChi2TPC(c.fhNBinsChi2TPC), fhNBinsChi2ITS(c.fhNBinsChi2ITS), - fhNBinsRefitTPC(c.fhNBinsRefitTPC), - fhNBinsRefitITS(c.fhNBinsRefitITS), + fhNBinsChi2TRD(c.fhNBinsChi2TRD), + fhNBinsdEdxClusterTPC(c.fhNBinsdEdxClusterTPC), fhNBinsCovariance11(c.fhNBinsCovariance11), fhNBinsCovariance22(c.fhNBinsCovariance22), fhNBinsCovariance33(c.fhNBinsCovariance33), @@ -171,10 +217,14 @@ AliCFTrackQualityCuts::AliCFTrackQualityCuts(const AliCFTrackQualityCuts& c) : fhNBinsCovariance55(c.fhNBinsCovariance55), fhBinLimClusterTPC(c.fhBinLimClusterTPC), fhBinLimClusterITS(c.fhBinLimClusterITS), + fhBinLimClusterTRD(c.fhBinLimClusterTRD), + fhBinLimFoundClusterTPC(c.fhBinLimFoundClusterTPC), + fhBinLimTrackletTRD(c.fhBinLimTrackletTRD), + fhBinLimTrackletTRDpid(c.fhBinLimTrackletTRDpid), fhBinLimChi2TPC(c.fhBinLimChi2TPC), fhBinLimChi2ITS(c.fhBinLimChi2ITS), - fhBinLimRefitTPC(c.fhBinLimRefitTPC), - fhBinLimRefitITS(c.fhBinLimRefitITS), + fhBinLimChi2TRD(c.fhBinLimChi2TRD), + fhBinLimdEdxClusterTPC(c.fhBinLimdEdxClusterTPC), fhBinLimCovariance11(c.fhBinLimCovariance11), fhBinLimCovariance22(c.fhBinLimCovariance22), fhBinLimCovariance33(c.fhBinLimCovariance33), @@ -196,24 +246,34 @@ AliCFTrackQualityCuts& AliCFTrackQualityCuts::operator=(const AliCFTrackQualityC AliCFCutBase::operator=(c) ; fMinNClusterTPC = c.fMinNClusterTPC ; fMinNClusterITS = c.fMinNClusterITS ; + fMinNClusterTRD = c.fMinNClusterTRD ; + fMinFoundClusterTPC = c.fMinFoundClusterTPC ; + fMinNTrackletTRD = c.fMinNTrackletTRD ; + fMinNTrackletTRDpid = c.fMinNTrackletTRDpid ; fMaxChi2PerClusterTPC = c.fMaxChi2PerClusterTPC ; fMaxChi2PerClusterITS = c.fMaxChi2PerClusterITS ; - fRequireTPCRefit = c.fRequireTPCRefit ; - fRequireITSRefit = c.fRequireITSRefit ; + fMaxChi2PerTrackletTRD = c.fMaxChi2PerTrackletTRD ; + fMinNdEdxClusterTPC = c.fMinNdEdxClusterTPC; fCovariance11Max = c.fCovariance11Max ; fCovariance22Max = c.fCovariance22Max ; fCovariance33Max = c.fCovariance33Max ; fCovariance44Max = c.fCovariance44Max ; fCovariance55Max = c.fCovariance55Max ; + fStatus = c.fStatus ; fhCutStatistics = c.fhCutStatistics ; fhCutCorrelation = c.fhCutCorrelation ; fBitmap = c.fBitmap ; + fTrackCuts = c.fTrackCuts ; fhNBinsClusterTPC = c.fhNBinsClusterTPC ; fhNBinsClusterITS = c.fhNBinsClusterITS ; + fhNBinsClusterTRD = c.fhNBinsClusterTRD ; + fhNBinsFoundClusterTPC = c.fhNBinsFoundClusterTPC ; + fhNBinsTrackletTRD = c.fhNBinsTrackletTRD ; + fhNBinsTrackletTRDpid = c.fhNBinsTrackletTRDpid ; fhNBinsChi2TPC = c.fhNBinsChi2TPC ; fhNBinsChi2ITS = c.fhNBinsChi2ITS ; - fhNBinsRefitTPC = c.fhNBinsRefitTPC ; - fhNBinsRefitITS = c.fhNBinsRefitITS ; + fhNBinsChi2TRD = c.fhNBinsChi2TRD ; + fhNBinsdEdxClusterTPC = c.fhNBinsdEdxClusterTPC ; fhNBinsCovariance11 = c.fhNBinsCovariance11 ; fhNBinsCovariance22 = c.fhNBinsCovariance22 ; fhNBinsCovariance33 = c.fhNBinsCovariance33 ; @@ -221,10 +281,14 @@ AliCFTrackQualityCuts& AliCFTrackQualityCuts::operator=(const AliCFTrackQualityC fhNBinsCovariance55 = c.fhNBinsCovariance55 ; fhBinLimClusterTPC = c.fhBinLimClusterTPC ; fhBinLimClusterITS = c.fhBinLimClusterITS ; + fhBinLimClusterTRD = c.fhBinLimClusterTRD ; + fhBinLimFoundClusterTPC = c.fhBinLimFoundClusterTPC ; + fhBinLimTrackletTRD = c.fhBinLimTrackletTRD ; + fhBinLimTrackletTRDpid = c.fhBinLimTrackletTRDpid ; fhBinLimChi2TPC = c.fhBinLimChi2TPC ; fhBinLimChi2ITS = c.fhBinLimChi2ITS ; - fhBinLimRefitTPC = c.fhBinLimRefitTPC ; - fhBinLimRefitITS = c.fhBinLimRefitITS ; + fhBinLimChi2TRD = c.fhBinLimChi2TRD ; + fhBinLimdEdxClusterTPC = c.fhBinLimdEdxClusterTPC ; fhBinLimCovariance11 = c.fhBinLimCovariance11 ; fhBinLimCovariance22 = c.fhBinLimCovariance22 ; fhBinLimCovariance33 = c.fhBinLimCovariance33 ; @@ -246,8 +310,8 @@ AliCFTrackQualityCuts::~AliCFTrackQualityCuts() // // destructor // - if (fhCutStatistics) delete fhCutStatistics; - if (fhCutCorrelation) delete fhCutCorrelation; + if (fhCutStatistics) delete fhCutStatistics; + if (fhCutCorrelation) delete fhCutCorrelation; for (Int_t i=0; iSetBitNumber(i,kFALSE); - // cast TObject into ESDtrack - AliESDtrack* esdTrack = dynamic_cast(obj); - if ( !esdTrack ) return fBitmap ; + if (!obj) return; + if (!obj->InheritsFrom("AliVParticle")) { + AliError("object must derived from AliVParticle !"); + return; + } - for(Int_t i=0; iSetBitNumber(i,kTRUE); + AliESDtrack * esdTrack = dynamic_cast(obj); + AliAODTrack * aodTrack = dynamic_cast(obj); - // get cut quantities - Int_t fIdxInt[200]; - Int_t nClustersTPC = esdTrack->GetTPCclusters(fIdxInt); - Int_t nClustersITS = esdTrack->GetITSclusters(fIdxInt); + if (!(esdTrack || aodTrack)) { + AliError("object must be an ESDtrack or an AODtrack !"); + return; + } - Float_t chi2PerClusterTPC = -1; - Float_t chi2PerClusterITS = -1; + Bool_t isESDTrack = kFALSE; + Bool_t isAODTrack = kFALSE; - if (nClustersTPC != 0) - chi2PerClusterTPC = esdTrack->GetTPCchi2() / Float_t(nClustersTPC); - if (nClustersITS!=0) - chi2PerClusterITS = esdTrack->GetITSchi2() / Float_t(nClustersITS); + if (esdTrack) isESDTrack = strcmp(obj->ClassName(),"AliESDtrack") == 0 ? kTRUE : kFALSE ; + if (aodTrack) isAODTrack = strcmp(obj->ClassName(),"AliAODTrack") == 0 ? kTRUE : kFALSE ; - Double_t extCov[15]; - esdTrack->GetExternalCovariance(extCov); + fTrackCuts->SetMinNClustersTPC(fMinNClusterTPC); + fTrackCuts->SetMinNClustersITS(fMinNClusterITS); + fTrackCuts->SetMaxChi2PerClusterTPC(fMaxChi2PerClusterTPC); + fTrackCuts->SetMaxChi2PerClusterITS(fMaxChi2PerClusterITS); + fTrackCuts->SetMaxCovDiagonalElements(fCovariance11Max,fCovariance22Max,fCovariance33Max,fCovariance44Max,fCovariance55Max); + +// // // remove following 5 lines when AliESDtrackCuts is updated + Int_t nClustersTPC = 0; + Int_t nClustersITS = 0 ; + Float_t chi2PerClusterTPC = 0 ; + Float_t chi2PerClusterITS = 0 ; + Double_t extCov[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + + // get cut quantities + Int_t nClustersTRD = 0; + Int_t nTrackletsTRD = 0; + Float_t chi2PerTrackletTRD = 0; + Float_t fractionFoundClustersTPC = 0; + + if (isESDTrack) { + nClustersTRD = esdTrack->GetTRDncls(); + nTrackletsTRD = esdTrack->GetTRDntracklets(); + if (nTrackletsTRD != 0) chi2PerTrackletTRD = esdTrack->GetTRDchi2() / Float_t(nTrackletsTRD); +// // // include following line when AliESDtrackCuts is updated +// if (esdTrack->GetTPCNclsF() != 0) fractionFoundClustersTPC = fTrackCuts->GetCutVariable(2) / float(esdTrack->GetTPCNclsF()); + +// // // remove following 6 lines when AliESDtrackCuts is updated + nClustersTPC = esdTrack->GetTPCclusters(0x0); + nClustersITS = esdTrack->GetITSclusters(0x0); + if (nClustersTPC != 0) chi2PerClusterTPC = esdTrack->GetTPCchi2() / Float_t(nClustersTPC); + if (nClustersITS != 0) chi2PerClusterITS = esdTrack->GetITSchi2() / Float_t(nClustersITS); + esdTrack->GetExternalCovariance(extCov); + if (esdTrack->GetTPCNclsF() != 0) fractionFoundClustersTPC = float(nClustersTPC) / float(esdTrack->GetTPCNclsF()); + } // fill the bitmap Int_t iCutBit = 0; - if (nClustersTPC < fMinNClusterTPC) - fBitmap->SetBitNumber(iCutBit,kFALSE); - iCutBit++; - if (nClustersITS < fMinNClusterITS) - fBitmap->SetBitNumber(iCutBit,kFALSE); +// // // include following lines when AliESDtrackCuts is updated +// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(2)); iCutBit++; // nClustersTPC +// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(3)); iCutBit++; // nClustersITS +// // // remove following 6 lines when AliESDtrackCuts is updated + if (nClustersTPC >= fMinNClusterTPC) + fBitmap->SetBitNumber(iCutBit,kTRUE); + iCutBit++; + if (nClustersITS >= fMinNClusterITS) + fBitmap->SetBitNumber(iCutBit,kTRUE); + iCutBit++; + + if (nClustersTRD >= fMinNClusterTRD) + fBitmap->SetBitNumber(iCutBit,kTRUE); iCutBit++; - if (chi2PerClusterTPC > fMaxChi2PerClusterTPC) - fBitmap->SetBitNumber(iCutBit,kFALSE); +// // // if ((fMinFoundClusterTPC <= 0) || (fTrackCuts->GetCutVariable(2) > 0 && (fractionFoundClustersTPC >= fMinFoundClusterTPC))) + if ((fMinFoundClusterTPC <= 0) || (nClustersTPC > 0 && (fractionFoundClustersTPC >= fMinFoundClusterTPC))) + fBitmap->SetBitNumber(iCutBit,kTRUE); iCutBit++; - if (chi2PerClusterITS > fMaxChi2PerClusterITS) - fBitmap->SetBitNumber(iCutBit,kFALSE); + if (nTrackletsTRD >= fMinNTrackletTRD) + fBitmap->SetBitNumber(iCutBit,kTRUE); iCutBit++; - if (fRequireTPCRefit && (esdTrack->GetStatus()&AliESDtrack::kTPCrefit)==0) - fBitmap->SetBitNumber(iCutBit,kFALSE); + if (!isESDTrack || esdTrack->GetTRDntrackletsPID() >= fMinNTrackletTRDpid) + fBitmap->SetBitNumber(iCutBit,kTRUE); iCutBit++; - if (fRequireITSRefit && (esdTrack->GetStatus()&AliESDtrack::kITSrefit)==0) - fBitmap->SetBitNumber(iCutBit,kFALSE); - iCutBit++; - if (extCov[0] > fCovariance11Max) - fBitmap->SetBitNumber(iCutBit,kFALSE); - iCutBit++; - if (extCov[2] > fCovariance22Max) - fBitmap->SetBitNumber(iCutBit,kFALSE); - iCutBit++; - if (extCov[5] > fCovariance33Max) - fBitmap->SetBitNumber(iCutBit,kFALSE); + +// // // include following lines when AliESDtrackCuts is updated +// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(4)); iCutBit++; // chi2PerClusterTPC +// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(5)); iCutBit++; // chi2PerClusterITS +// // // remove following 6 lines when AliESDtrackCuts is updated + if (chi2PerClusterTPC <= fMaxChi2PerClusterTPC) + fBitmap->SetBitNumber(iCutBit,kTRUE); + iCutBit++; + if (chi2PerClusterITS <= fMaxChi2PerClusterITS) + fBitmap->SetBitNumber(iCutBit,kTRUE); + iCutBit++; + + if (chi2PerTrackletTRD <= fMaxChi2PerTrackletTRD) + fBitmap->SetBitNumber(iCutBit,kTRUE); iCutBit++; - if (extCov[9] > fCovariance44Max) - fBitmap->SetBitNumber(iCutBit,kFALSE); + if (!isESDTrack || esdTrack->GetTPCsignalN() >= fMinNdEdxClusterTPC) + fBitmap->SetBitNumber(iCutBit,kTRUE); iCutBit++; - if (extCov[14] > fCovariance55Max) - fBitmap->SetBitNumber(iCutBit,kFALSE); - return fBitmap; +// // // include following lines when AliESDtrackCuts is updated +// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(6)); iCutBit++; // extCov[0] +// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(7)); iCutBit++; // extCov[2] +// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(8)); iCutBit++; // extCov[5] +// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(9)); iCutBit++; // extCov[9] +// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(10)); iCutBit++; // extCov[14] +// // // remove following lines when AliESDtrackCuts is updated + if (extCov[0] <= fCovariance11Max) + fBitmap->SetBitNumber(iCutBit,kTRUE); + iCutBit++; + if (extCov[2] <= fCovariance22Max) + fBitmap->SetBitNumber(iCutBit,kTRUE); + iCutBit++; + if (extCov[5] <= fCovariance33Max) + fBitmap->SetBitNumber(iCutBit,kTRUE); + iCutBit++; + if (extCov[9] <= fCovariance44Max) + fBitmap->SetBitNumber(iCutBit,kTRUE); + iCutBit++; + if (extCov[14] <= fCovariance55Max) + fBitmap->SetBitNumber(iCutBit,kTRUE); + iCutBit++; + + + if (isESDTrack) { + if ( (esdTrack->GetStatus() & fStatus) == fStatus ) fBitmap->SetBitNumber(iCutBit,kTRUE); + } + else { + if ( (aodTrack->GetStatus() & fStatus) == fStatus ) fBitmap->SetBitNumber(iCutBit,kTRUE); + } + + return; } //__________________________________________________________________________________ Bool_t AliCFTrackQualityCuts::IsSelected(TObject* obj) { // // loops over decisions of single cuts and returns if the track is accepted // - TBits* bitmap = SelectionBitMap(obj); + SelectionBitMap(obj); + if (fIsQAOn) FillHistograms(obj,0); Bool_t isSelected = kTRUE; - for (UInt_t icut=0; icutGetNbits();icut++) - if(!bitmap->TestBitNumber(icut)) isSelected = kFALSE; - - return isSelected; -} -//__________________________________________________________________________________ -void AliCFTrackQualityCuts::Init() { - // - // initialises all histograms and the TList which holds the histograms - // - if(fIsQAOn) - DefineHistograms(); + for (UInt_t icut=0; icutGetNbits();icut++) { + if(!fBitmap->TestBitNumber(icut)) { + isSelected = kFALSE; + break; + } + } + if (!isSelected) return kFALSE ; + if (fIsQAOn) FillHistograms(obj,1); + return kTRUE; } //__________________________________________________________________________________ void AliCFTrackQualityCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_t *bins) @@ -443,6 +591,11 @@ void AliCFTrackQualityCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_t // if(!fIsQAOn) return; + if (index<0 || index>=kNHist) { + Error("SetHistogramBins","could not determine histogram from index %d",index); + return; + } + switch(index){ case kCutClusterTPC: fhNBinsClusterTPC=nbins+1; @@ -456,6 +609,30 @@ void AliCFTrackQualityCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_t for(Int_t i=0;i=kNHist) { + Error("SetHistogramBins","could not determine histogram from index %d",index); + return; + } + switch(index){ case kCutClusterTPC: fhNBinsClusterTPC=nbins+1; @@ -530,6 +712,30 @@ void AliCFTrackQualityCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_t for(Int_t i=0;iSetLineWidth(2); - fhCutStatistics->GetXaxis()->SetBinLabel(1,"nClustersTPC"); - fhCutStatistics->GetXaxis()->SetBinLabel(2,"nClustersITS"); - fhCutStatistics->GetXaxis()->SetBinLabel(3,"chi2PerClusterTPC"); - fhCutStatistics->GetXaxis()->SetBinLabel(4,"chi2PerClusterITS"); - fhCutStatistics->GetXaxis()->SetBinLabel(5,"refitTPC"); - fhCutStatistics->GetXaxis()->SetBinLabel(6,"refitITS"); - fhCutStatistics->GetXaxis()->SetBinLabel(7,"covElement11"); - fhCutStatistics->GetXaxis()->SetBinLabel(8,"covElement22"); - fhCutStatistics->GetXaxis()->SetBinLabel(9,"covElement33"); - fhCutStatistics->GetXaxis()->SetBinLabel(10,"covElement44"); - fhCutStatistics->GetXaxis()->SetBinLabel(11,"covElement55"); + fhCutStatistics->GetXaxis()->SetBinLabel(1, "nClustersTPC"); + fhCutStatistics->GetXaxis()->SetBinLabel(2, "nClustersITS"); + fhCutStatistics->GetXaxis()->SetBinLabel(3, "nClustersTRD"); + fhCutStatistics->GetXaxis()->SetBinLabel(4, "fractionClustersTPC"); + fhCutStatistics->GetXaxis()->SetBinLabel(5, "ntrackletsTRD"); + fhCutStatistics->GetXaxis()->SetBinLabel(6, "ntrackletsTRDpid"); + fhCutStatistics->GetXaxis()->SetBinLabel(7, "chi2PerClusterTPC"); + fhCutStatistics->GetXaxis()->SetBinLabel(8, "chi2PerClusterITS"); + fhCutStatistics->GetXaxis()->SetBinLabel(9, "chi2PerTrackletTRD"); + fhCutStatistics->GetXaxis()->SetBinLabel(10, "ndEdxClusterTPC"); + fhCutStatistics->GetXaxis()->SetBinLabel(11, "covElement11"); + fhCutStatistics->GetXaxis()->SetBinLabel(12, "covElement22"); + fhCutStatistics->GetXaxis()->SetBinLabel(13, "covElement33"); + fhCutStatistics->GetXaxis()->SetBinLabel(14, "covElement44"); + fhCutStatistics->GetXaxis()->SetBinLabel(15, "covElement55"); + fhCutStatistics->GetXaxis()->SetBinLabel(16, "status"); fhCutCorrelation = new TH2F(Form("%s_cut_correlation",GetName()), Form("%s cut correlation",GetName()), kNCuts,0.5,kNCuts+0.5,kNCuts,0.5,kNCuts+0.5); fhCutCorrelation->SetLineWidth(2); - fhCutCorrelation->GetXaxis()->SetBinLabel(1,"nClustersTPC"); - fhCutCorrelation->GetXaxis()->SetBinLabel(2,"nClustersITS"); - fhCutCorrelation->GetXaxis()->SetBinLabel(3,"chi2PerClusterTPC"); - fhCutCorrelation->GetXaxis()->SetBinLabel(4,"chi2PerClusterITS"); - fhCutCorrelation->GetXaxis()->SetBinLabel(5,"refitTPC"); - fhCutCorrelation->GetXaxis()->SetBinLabel(6,"refitITS"); - fhCutCorrelation->GetXaxis()->SetBinLabel(7,"covElement11"); - fhCutCorrelation->GetXaxis()->SetBinLabel(8,"covElement22"); - fhCutCorrelation->GetXaxis()->SetBinLabel(9,"covElement33"); - fhCutCorrelation->GetXaxis()->SetBinLabel(10,"covElement44"); - fhCutCorrelation->GetXaxis()->SetBinLabel(11,"covElement55"); - - fhCutCorrelation->GetYaxis()->SetBinLabel(1,"nClustersTPC"); - fhCutCorrelation->GetYaxis()->SetBinLabel(2,"nClustersITS"); - fhCutCorrelation->GetYaxis()->SetBinLabel(3,"chi2PerClusterTPC"); - fhCutCorrelation->GetYaxis()->SetBinLabel(4,"chi2PerClusterITS"); - fhCutCorrelation->GetYaxis()->SetBinLabel(5,"refitTPC"); - fhCutCorrelation->GetYaxis()->SetBinLabel(6,"refitITS"); - fhCutCorrelation->GetYaxis()->SetBinLabel(7,"covElement11"); - fhCutCorrelation->GetYaxis()->SetBinLabel(8,"covElement22"); - fhCutCorrelation->GetYaxis()->SetBinLabel(9,"covElement33"); - fhCutCorrelation->GetYaxis()->SetBinLabel(10,"covElement44"); - fhCutCorrelation->GetYaxis()->SetBinLabel(11,"covElement55"); + fhCutCorrelation->GetXaxis()->SetBinLabel(1, "nClustersTPC"); + fhCutCorrelation->GetXaxis()->SetBinLabel(2, "nClustersITS"); + fhCutCorrelation->GetXaxis()->SetBinLabel(3, "nClustersTRD"); + fhCutCorrelation->GetXaxis()->SetBinLabel(4, "fractionClustersTPC"); + fhCutCorrelation->GetXaxis()->SetBinLabel(5, "ntrackletsTRD"); + fhCutCorrelation->GetXaxis()->SetBinLabel(6, "ntrackletsTRDpid"); + fhCutCorrelation->GetXaxis()->SetBinLabel(7, "chi2PerClusterTPC"); + fhCutCorrelation->GetXaxis()->SetBinLabel(8, "chi2PerClusterITS"); + fhCutCorrelation->GetXaxis()->SetBinLabel(9, "chi2PerTrackletTRD"); + fhCutCorrelation->GetXaxis()->SetBinLabel(10, "ndEdxClustersTPC"); + fhCutCorrelation->GetXaxis()->SetBinLabel(11, "covElement11"); + fhCutCorrelation->GetXaxis()->SetBinLabel(12, "covElement22"); + fhCutCorrelation->GetXaxis()->SetBinLabel(13, "covElement33"); + fhCutCorrelation->GetXaxis()->SetBinLabel(14, "covElement44"); + fhCutCorrelation->GetXaxis()->SetBinLabel(15, "covElement55"); + fhCutCorrelation->GetXaxis()->SetBinLabel(16, "status"); + + fhCutCorrelation->GetYaxis()->SetBinLabel(1, "nClustersTPC"); + fhCutCorrelation->GetYaxis()->SetBinLabel(2, "nClustersITS"); + fhCutCorrelation->GetYaxis()->SetBinLabel(3, "nClustersTRD"); + fhCutCorrelation->GetYaxis()->SetBinLabel(4, "fractionClustersTPC"); + fhCutCorrelation->GetYaxis()->SetBinLabel(5, "ntrackletsTRD"); + fhCutCorrelation->GetYaxis()->SetBinLabel(6, "ntrackletsTRDpid"); + fhCutCorrelation->GetYaxis()->SetBinLabel(7, "chi2PerClusterTPC"); + fhCutCorrelation->GetYaxis()->SetBinLabel(8, "chi2PerClusterITS"); + fhCutCorrelation->GetYaxis()->SetBinLabel(9, "chi2PerTrackletTRD"); + fhCutCorrelation->GetYaxis()->SetBinLabel(10, "ndEdxClustersTPC"); + fhCutCorrelation->GetYaxis()->SetBinLabel(11, "covElement11"); + fhCutCorrelation->GetYaxis()->SetBinLabel(12, "covElement22"); + fhCutCorrelation->GetYaxis()->SetBinLabel(13, "covElement33"); + fhCutCorrelation->GetYaxis()->SetBinLabel(14, "covElement44"); + fhCutCorrelation->GetYaxis()->SetBinLabel(15, "covElement55"); + fhCutCorrelation->GetYaxis()->SetBinLabel(16, "status"); // book QA histograms - Char_t str[256]; + Char_t str[5]; for (Int_t i=0; iSetXTitle("n TPC clusters"); fhQA[kCutClusterITS][i] ->SetXTitle("n ITS clusters"); + fhQA[kCutClusterTRD][i] ->SetXTitle("n TRD clusters"); + fhQA[kCutMinFoundClusterTPC][i]->SetXTitle("fraction TPC clusters"); + fhQA[kCutTrackletTRD][i] ->SetXTitle("n tracklets TRD"); + fhQA[kCutTrackletTRDpid][i]->SetXTitle("n tracklets TRD pid"); fhQA[kCutChi2TPC][i] ->SetXTitle("#chi^{2} per TPC cluster"); fhQA[kCutChi2ITS][i] ->SetXTitle("#chi^{2} per ITS cluster"); - fhQA[kCutRefitTPC][i] ->SetXTitle("refit TPC"); - fhQA[kCutRefitITS][i] ->SetXTitle("refit ITS"); + fhQA[kCutChi2TRD][i] ->SetXTitle("#chi^{2} per TRD tracklet"); + fhQA[kCutdEdxClusterTPC][i] ->SetXTitle("n dEdx TPC clusters"); fhQA[kCutCovElement11][i] ->SetXTitle("cov 11 : #sigma_{y}^{2} (cm^{2})"); fhQA[kCutCovElement22][i] ->SetXTitle("cov 22 : #sigma_{z}^{2} (cm^{2})"); fhQA[kCutCovElement33][i] ->SetXTitle("cov 33 : #sigma_{sin(#phi)}^{2}"); @@ -673,65 +902,108 @@ void AliCFTrackQualityCuts::FillHistograms(TObject* obj, Bool_t b) // // fill the QA histograms // - if(!fIsQAOn) return; - // cast TObject into ESDtrack - AliESDtrack* esdTrack = dynamic_cast(obj); - if ( !esdTrack ) return; - - // index = 0: fill histograms before cuts - // index = 1: fill histograms after cuts - Int_t index = -1; - index = ((b) ? 1 : 0); - - Int_t fIdxInt[200]; - Int_t nClustersTPC = esdTrack->GetTPCclusters(fIdxInt); - fhQA[kCutClusterTPC][index]->Fill((float)nClustersTPC); - Float_t chi2PerClusterTPC = -1.; - if (nClustersTPC!=0) - chi2PerClusterTPC = esdTrack->GetTPCchi2()/((float)nClustersTPC); - fhQA[kCutChi2TPC][index]->Fill(chi2PerClusterTPC); - - Int_t nClustersITS = esdTrack->GetITSclusters(fIdxInt); - fhQA[kCutClusterITS][index]->Fill((float)nClustersITS); - Float_t chi2PerClusterITS = -1.; - if (nClustersITS!=0) - chi2PerClusterITS = esdTrack->GetITSchi2()/((float)nClustersITS); - fhQA[kCutChi2ITS][index]->Fill(chi2PerClusterITS); - - if ((esdTrack->GetStatus()&AliESDtrack::kTPCrefit)==0) - fhQA[kCutRefitTPC][index]->Fill(0.); - if (!((esdTrack->GetStatus()&AliESDtrack::kTPCrefit)==0)) - fhQA[kCutRefitTPC][index]->Fill(1.); - - if ((esdTrack->GetStatus()&AliESDtrack::kITSrefit)==0) - fhQA[kCutRefitITS][index]->Fill(0.); - if (!((esdTrack->GetStatus()&AliESDtrack::kITSrefit)==0)) - fhQA[kCutRefitITS][index]->Fill(1.); - - Double_t extCov[15]; - esdTrack->GetExternalCovariance(extCov); - - fhQA[kCutCovElement11][index]->Fill(extCov[0]); - fhQA[kCutCovElement22][index]->Fill(extCov[2]); - fhQA[kCutCovElement33][index]->Fill(extCov[5]); - fhQA[kCutCovElement44][index]->Fill(extCov[9]); - fhQA[kCutCovElement55][index]->Fill(extCov[14]); + if (!obj) return; + if (!obj->InheritsFrom("AliVParticle")) { + AliError("object must derived from AliVParticle !"); + return; + } + + AliESDtrack * esdTrack = dynamic_cast(obj); + AliAODTrack * aodTrack = dynamic_cast(obj); + + if (!(esdTrack || aodTrack)) { + AliError("object must be an ESDtrack or an AODtrack !"); + return; + } + + Bool_t isESDTrack = kFALSE; + Bool_t isAODTrack = kFALSE; + + if (esdTrack) isESDTrack = strcmp(obj->ClassName(),"AliESDtrack") == 0 ? kTRUE : kFALSE ; + if (aodTrack) isAODTrack = strcmp(obj->ClassName(),"AliAODTrack") == 0 ? kTRUE : kFALSE ; + + + // b = 0: fill histograms before cuts + // b = 1: fill histograms after cuts + +// // // remove following 5 lines when AliESDtrackCuts is updated + Int_t nClustersTPC = 0; + Int_t nClustersITS = 0 ; + Float_t chi2PerClusterTPC = 0 ; + Float_t chi2PerClusterITS = 0 ; + Double_t extCov[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + + Int_t nClustersTRD = 0 ; + Int_t nTrackletsTRD = 0 ; + Float_t chi2PerTrackletTRD = 0 ; + Float_t fractionFoundClustersTPC = 0; + + if (isESDTrack) { + nClustersTRD = esdTrack->GetTRDncls(); + nTrackletsTRD = esdTrack->GetTRDntracklets(); + if (nTrackletsTRD != 0) chi2PerTrackletTRD = esdTrack->GetTRDchi2() / Float_t(nTrackletsTRD); + +// // // include following line when AliESDtrackCuts is updated +// if (esdTrack->GetTPCNclsF() != 0) fractionFoundClustersTPC = fTrackCuts->GetCutVariable(2) / float(esdTrack->GetTPCNclsF()); + +// // // remove following 6 lines when AliESDtrackCuts is updated + nClustersTPC = esdTrack->GetTPCclusters(0x0); + nClustersITS = esdTrack->GetITSclusters(0x0); + if (nClustersTPC != 0) chi2PerClusterTPC = esdTrack->GetTPCchi2() / Float_t(nClustersTPC); + if (nClustersITS != 0) chi2PerClusterITS = esdTrack->GetITSchi2() / Float_t(nClustersITS); + esdTrack->GetExternalCovariance(extCov); + if (esdTrack->GetTPCNclsF() != 0) fractionFoundClustersTPC = float(nClustersTPC) / float(esdTrack->GetTPCNclsF()); + } + +// // // include following lines when AliESDtrackCuts is updated +// fhQA[kCutClusterTPC][b]->Fill(fTrackCuts->GetCutVariable(2)); +// fhQA[kCutClusterITS][b]->Fill(fTrackCuts->GetCutVariable(3)); +// fhQA[kCutChi2TPC][b]->Fill(fTrackCuts->GetCutVariable(4)); +// fhQA[kCutChi2ITS][b]->Fill(fTrackCuts->GetCutVariable(5)); +// // // remove following 4 lines when AliESDtrackCuts is updated + fhQA[kCutClusterTPC][b]->Fill((float)nClustersTPC); + fhQA[kCutChi2TPC][b]->Fill(chi2PerClusterTPC); + fhQA[kCutClusterITS][b]->Fill((float)nClustersITS); + fhQA[kCutChi2ITS][b]->Fill(chi2PerClusterITS); + + + fhQA[kCutClusterTRD][b]->Fill((float)nClustersTRD); + fhQA[kCutChi2TRD][b]->Fill(chi2PerTrackletTRD); +// if (b==0 || (b==1 && fTrackCuts->GetCutVariable(2)>0)) fhQA[kCutMinFoundClusterTPC][b]->Fill((float)fractionFoundClustersTPC); + if (b==0 || (b==1 && nClustersTPC>0)) fhQA[kCutMinFoundClusterTPC][b]->Fill((float)fractionFoundClustersTPC); + fhQA[kCutTrackletTRD][b]->Fill((float)nTrackletsTRD); + if (isESDTrack) { + fhQA[kCutTrackletTRDpid][b]->Fill((float)esdTrack->GetTRDntrackletsPID()); + fhQA[kCutdEdxClusterTPC][b]->Fill((float)esdTrack->GetTPCsignalN()); + } +// // // include following lines when AliESDtrackCuts is updated +// fhQA[kCutCovElement11][b]->Fill(fTrackCuts->GetCutVariable(6)); +// fhQA[kCutCovElement22][b]->Fill(fTrackCuts->GetCutVariable(7)); +// fhQA[kCutCovElement33][b]->Fill(fTrackCuts->GetCutVariable(8)); +// fhQA[kCutCovElement44][b]->Fill(fTrackCuts->GetCutVariable(9)); +// fhQA[kCutCovElement55][b]->Fill(fTrackCuts->GetCutVariable(10)); +// // // remove following 5 lines when AliESDtrackCuts is updated + fhQA[kCutCovElement11][b]->Fill(extCov[0]); + fhQA[kCutCovElement22][b]->Fill(extCov[2]); + fhQA[kCutCovElement33][b]->Fill(extCov[5]); + fhQA[kCutCovElement44][b]->Fill(extCov[9]); + fhQA[kCutCovElement55][b]->Fill(extCov[14]); + // fill cut statistics and cut correlation histograms with information from the bitmap if (b) return; // Get the bitmap of the single cuts - if ( !obj ) return; - TBits* bitmap = SelectionBitMap(obj); + SelectionBitMap(obj); // Number of single cuts in this class - UInt_t ncuts = bitmap->GetNbits(); + UInt_t ncuts = fBitmap->GetNbits(); for(UInt_t bit=0; bitTestBitNumber(bit)) { + if (!fBitmap->TestBitNumber(bit)) { fhCutStatistics->Fill(bit+1); for (UInt_t bit2=bit; bit2TestBitNumber(bit2)) + if (!fBitmap->TestBitNumber(bit2)) fhCutCorrelation->Fill(bit+1,bit2+1); } } @@ -809,7 +1081,7 @@ void AliCFTrackQualityCuts::DrawHistograms(Bool_t drawLogScale) // ----- TCanvas* canvas2 = new TCanvas("Track_QA_Quality_2", "Track QA Quality 2", 1200, 800); - canvas2->Divide(3, 2); + canvas2->Divide(2, 2); canvas2->cd(1); gPad->SetRightMargin(right); @@ -834,20 +1106,11 @@ void AliCFTrackQualityCuts::DrawHistograms(Bool_t drawLogScale) gPad->SetLeftMargin(left); gPad->SetTopMargin(top); gPad->SetBottomMargin(bottom); - fhQA[kCutRefitTPC][0]->SetStats(kFALSE); - fhQA[kCutRefitTPC][0]->Draw(); - fhQA[kCutRefitTPC][1]->Draw("same"); - - canvas2->cd(4); - gPad->SetRightMargin(right); - gPad->SetLeftMargin(left); - gPad->SetTopMargin(top); - gPad->SetBottomMargin(bottom); fhQA[kCutClusterITS][0]->SetStats(kFALSE); fhQA[kCutClusterITS][0]->Draw(); fhQA[kCutClusterITS][1]->Draw("same"); - canvas2->cd(5); + canvas2->cd(4); gPad->SetRightMargin(right); gPad->SetLeftMargin(left); gPad->SetTopMargin(top); @@ -856,15 +1119,6 @@ void AliCFTrackQualityCuts::DrawHistograms(Bool_t drawLogScale) fhQA[kCutChi2ITS][0]->Draw(); fhQA[kCutChi2ITS][1]->Draw("same"); - canvas2->cd(6); - gPad->SetRightMargin(right); - gPad->SetLeftMargin(left); - gPad->SetTopMargin(top); - gPad->SetBottomMargin(bottom); - fhQA[kCutRefitITS][0]->SetStats(kFALSE); - fhQA[kCutRefitITS][0]->Draw(); - fhQA[kCutRefitITS][1]->Draw("same"); - canvas2->SaveAs(Form("%s.eps", canvas2->GetName())); canvas2->SaveAs(Form("%s.ps", canvas2->GetName())); @@ -927,11 +1181,11 @@ void AliCFTrackQualityCuts::DrawHistograms(Bool_t drawLogScale) canvas3->SaveAs(Form("%s.ps", canvas3->GetName())); } //__________________________________________________________________________________ -void AliCFTrackQualityCuts::AddQAHistograms(TList *qaList) const { +void AliCFTrackQualityCuts::AddQAHistograms(TList *qaList) { // // saves the histograms in a TList // - if(!fIsQAOn) return; + DefineHistograms(); qaList->Add(fhCutStatistics); qaList->Add(fhCutCorrelation);