X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=CORRFW%2FAliCFTrackQualityCuts.cxx;h=44700b5da8ea42e8fd48cfc3ae5b398955a8e97d;hb=b083a6b3ca9a47c72b3ed060f6a9674f22cc9dda;hp=2ada7ba998112fc7a78a1a215e7e8109e07db09b;hpb=8edd0c2cd658fcb7a539926eaaa28763f0f31434;p=u%2Fmrichter%2FAliRoot.git diff --git a/CORRFW/AliCFTrackQualityCuts.cxx b/CORRFW/AliCFTrackQualityCuts.cxx index 2ada7ba9981..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,6 +52,7 @@ #include #include +#include #include #include "AliCFTrackQualityCuts.h" #include "AliAODTrack.h" @@ -57,8 +64,14 @@ AliCFTrackQualityCuts::AliCFTrackQualityCuts() : AliCFCutBase(), fMinNClusterTPC(0), fMinNClusterITS(0), + fMinNClusterTRD(0), + fMinFoundClusterTPC(0), + fMinNTrackletTRD(0), + fMinNTrackletTRDpid(0), fMaxChi2PerClusterTPC(0), fMaxChi2PerClusterITS(0), + fMaxChi2PerTrackletTRD(0), + fMinNdEdxClusterTPC(0), fCovariance11Max(0), fCovariance22Max(0), fCovariance33Max(0), @@ -68,10 +81,17 @@ AliCFTrackQualityCuts::AliCFTrackQualityCuts() : fhCutStatistics(0), fhCutCorrelation(0), fBitmap(0x0), + fTrackCuts(0x0), fhNBinsClusterTPC(0), fhNBinsClusterITS(0), + fhNBinsClusterTRD(0), + fhNBinsFoundClusterTPC(0), + fhNBinsTrackletTRD(0), + fhNBinsTrackletTRDpid(0), fhNBinsChi2TPC(0), fhNBinsChi2ITS(0), + fhNBinsChi2TRD(0), + fhNBinsdEdxClusterTPC(0), fhNBinsCovariance11(0), fhNBinsCovariance22(0), fhNBinsCovariance33(0), @@ -79,8 +99,14 @@ AliCFTrackQualityCuts::AliCFTrackQualityCuts() : fhNBinsCovariance55(0), fhBinLimClusterTPC(0x0), fhBinLimClusterITS(0x0), + fhBinLimClusterTRD(0x0), + fhBinLimFoundClusterTPC(0x0), + fhBinLimTrackletTRD(0x0), + fhBinLimTrackletTRDpid(0x0), fhBinLimChi2TPC(0x0), fhBinLimChi2ITS(0x0), + fhBinLimChi2TRD(0x0), + fhBinLimdEdxClusterTPC(0x0), fhBinLimCovariance11(0x0), fhBinLimCovariance22(0x0), fhBinLimCovariance33(0x0), @@ -97,8 +123,14 @@ 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), + fMaxChi2PerTrackletTRD(0), + fMinNdEdxClusterTPC(0), fCovariance11Max(0), fCovariance22Max(0), fCovariance33Max(0), @@ -108,10 +140,17 @@ AliCFTrackQualityCuts::AliCFTrackQualityCuts(Char_t* name, Char_t* title) : fhCutStatistics(0), fhCutCorrelation(0), fBitmap(0x0), + fTrackCuts(0x0), fhNBinsClusterTPC(0), fhNBinsClusterITS(0), + fhNBinsClusterTRD(0), + fhNBinsFoundClusterTPC(0), + fhNBinsTrackletTRD(0), + fhNBinsTrackletTRDpid(0), fhNBinsChi2TPC(0), fhNBinsChi2ITS(0), + fhNBinsChi2TRD(0), + fhNBinsdEdxClusterTPC(0), fhNBinsCovariance11(0), fhNBinsCovariance22(0), fhNBinsCovariance33(0), @@ -119,8 +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), + fhBinLimChi2TRD(0x0), + fhBinLimdEdxClusterTPC(0x0), fhBinLimCovariance11(0x0), fhBinLimCovariance22(0x0), fhBinLimCovariance33(0x0), @@ -137,8 +182,14 @@ 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), + fMaxChi2PerTrackletTRD(c.fMaxChi2PerTrackletTRD), + fMinNdEdxClusterTPC(c.fMinNdEdxClusterTPC), fCovariance11Max(c.fCovariance11Max), fCovariance22Max(c.fCovariance22Max), fCovariance33Max(c.fCovariance33Max), @@ -148,10 +199,17 @@ AliCFTrackQualityCuts::AliCFTrackQualityCuts(const AliCFTrackQualityCuts& c) : 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), + fhNBinsChi2TRD(c.fhNBinsChi2TRD), + fhNBinsdEdxClusterTPC(c.fhNBinsdEdxClusterTPC), fhNBinsCovariance11(c.fhNBinsCovariance11), fhNBinsCovariance22(c.fhNBinsCovariance22), fhNBinsCovariance33(c.fhNBinsCovariance33), @@ -159,8 +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), + fhBinLimChi2TRD(c.fhBinLimChi2TRD), + fhBinLimdEdxClusterTPC(c.fhBinLimdEdxClusterTPC), fhBinLimCovariance11(c.fhBinLimCovariance11), fhBinLimCovariance22(c.fhBinLimCovariance22), fhBinLimCovariance33(c.fhBinLimCovariance33), @@ -182,8 +246,14 @@ 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 ; + fMaxChi2PerTrackletTRD = c.fMaxChi2PerTrackletTRD ; + fMinNdEdxClusterTPC = c.fMinNdEdxClusterTPC; fCovariance11Max = c.fCovariance11Max ; fCovariance22Max = c.fCovariance22Max ; fCovariance33Max = c.fCovariance33Max ; @@ -193,10 +263,17 @@ AliCFTrackQualityCuts& AliCFTrackQualityCuts::operator=(const AliCFTrackQualityC 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 ; + fhNBinsChi2TRD = c.fhNBinsChi2TRD ; + fhNBinsdEdxClusterTPC = c.fhNBinsdEdxClusterTPC ; fhNBinsCovariance11 = c.fhNBinsCovariance11 ; fhNBinsCovariance22 = c.fhNBinsCovariance22 ; fhNBinsCovariance33 = c.fhNBinsCovariance33 ; @@ -204,8 +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 ; + fhBinLimChi2TRD = c.fhBinLimChi2TRD ; + fhBinLimdEdxClusterTPC = c.fhBinLimdEdxClusterTPC ; fhBinLimCovariance11 = c.fhBinLimCovariance11 ; fhBinLimCovariance22 = c.fhBinLimCovariance22 ; fhBinLimCovariance33 = c.fhBinLimCovariance33 ; @@ -236,10 +319,17 @@ AliCFTrackQualityCuts::~AliCFTrackQualityCuts() } } if(fBitmap) delete fBitmap; + if(fTrackCuts) delete fTrackCuts; if(fhBinLimClusterTPC) delete fhBinLimClusterTPC; if(fhBinLimClusterITS) delete fhBinLimClusterITS; + if(fhBinLimClusterTRD) delete fhBinLimClusterTRD; + if(fhBinLimFoundClusterTPC) delete fhBinLimFoundClusterTPC; + if(fhBinLimTrackletTRD) delete fhBinLimTrackletTRD; + if(fhBinLimTrackletTRDpid) delete fhBinLimTrackletTRDpid; if(fhBinLimChi2TPC) delete fhBinLimChi2TPC; if(fhBinLimChi2ITS) delete fhBinLimChi2ITS; + if(fhBinLimChi2TRD) delete fhBinLimChi2TRD; + if(fhBinLimdEdxClusterTPC) delete fhBinLimdEdxClusterTPC; if(fhBinLimCovariance11) delete fhBinLimCovariance11; if(fhBinLimCovariance22) delete fhBinLimCovariance22; if(fhBinLimCovariance33) delete fhBinLimCovariance33; @@ -254,8 +344,14 @@ void AliCFTrackQualityCuts::Initialise() // fMinNClusterTPC = 0; fMinNClusterITS = 0; + fMinNClusterTRD = 0; + fMinFoundClusterTPC = 0; + fMinNTrackletTRD = 0; + fMinNTrackletTRDpid = 0; fMaxChi2PerClusterTPC = 0; fMaxChi2PerClusterITS = 0; + fMaxChi2PerTrackletTRD = 0; + fMinNdEdxClusterTPC = 0; fCovariance11Max = 0; fCovariance22Max = 0; fCovariance33Max = 0; @@ -265,8 +361,14 @@ void AliCFTrackQualityCuts::Initialise() SetMinNClusterTPC(); SetMinNClusterITS(); + SetMinNClusterTRD(); + SetMinFoundClusterTPC(); + SetMinNTrackletTRD(); + SetMinNTrackletTRDpid(); SetMaxChi2PerClusterTPC(); SetMaxChi2PerClusterITS(); + SetMaxChi2PerTrackletTRD(); + SetMinNdEdxClusterTPC(); SetMaxCovDiagonalElements(); SetStatus(); @@ -277,12 +379,19 @@ void AliCFTrackQualityCuts::Initialise() fhCutStatistics = 0; fhCutCorrelation = 0; fBitmap=new TBits(0); + fTrackCuts=new AliESDtrackCuts("aliESDtrackCuts","aliESDtrackCuts"); //set default bining for QA histograms SetHistogramBins(kCutClusterTPC,165,-0.5,164.5); SetHistogramBins(kCutClusterITS,8,-0.5,7.5); + SetHistogramBins(kCutClusterTRD,120,-0.5,119.5); + SetHistogramBins(kCutMinFoundClusterTPC,110,-0.05,1.05); + SetHistogramBins(kCutTrackletTRD,7,-0.5,6.5); + SetHistogramBins(kCutTrackletTRDpid,7,-0.5,6.5); SetHistogramBins(kCutChi2TPC,500,0.,10.); SetHistogramBins(kCutChi2ITS,500,0.,10.); + SetHistogramBins(kCutChi2TRD,500,0.,10.); + SetHistogramBins(kCutdEdxClusterTPC,165,-0.5,164.5); SetHistogramBins(kCutCovElement11,200,0.,20.); SetHistogramBins(kCutCovElement22,200,0.,20.); SetHistogramBins(kCutCovElement33,100,0.,1.); @@ -326,61 +435,125 @@ void AliCFTrackQualityCuts::SelectionBitMap(TObject* obj) return; } - Bool_t isESDTrack = strcmp(obj->ClassName(),"AliESDtrack") == 0 ? kTRUE : kFALSE ; - Bool_t isAODTrack = strcmp(obj->ClassName(),"AliAODTrack") == 0 ? kTRUE : kFALSE ; + 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 ; - AliESDtrack * esdTrack = 0x0 ; - AliAODTrack * aodTrack = 0x0 ; - if (isESDTrack) esdTrack = dynamic_cast(obj); - if (isAODTrack) aodTrack = dynamic_cast(obj); + 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 fIdxInt[200]; - 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) { - nClustersTPC = esdTrack->GetTPCclusters(fIdxInt); - nClustersITS = esdTrack->GetITSclusters(fIdxInt); - if (nClustersTPC != 0) chi2PerClusterTPC = esdTrack->GetTPCchi2() / Float_t(nClustersTPC); - if (nClustersITS != 0) chi2PerClusterITS = esdTrack->GetITSchi2() / Float_t(nClustersITS); - esdTrack->GetExternalCovariance(extCov); + 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,kTRUE); - iCutBit++; - if (nClustersITS >= fMinNClusterITS) - fBitmap->SetBitNumber(iCutBit,kTRUE); - iCutBit++; - if (chi2PerClusterTPC <= fMaxChi2PerClusterTPC) - fBitmap->SetBitNumber(iCutBit,kTRUE); - iCutBit++; - if (chi2PerClusterITS <= fMaxChi2PerClusterITS) +// // // 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 (extCov[0] <= fCovariance11Max) +// // // if ((fMinFoundClusterTPC <= 0) || (fTrackCuts->GetCutVariable(2) > 0 && (fractionFoundClustersTPC >= fMinFoundClusterTPC))) + if ((fMinFoundClusterTPC <= 0) || (nClustersTPC > 0 && (fractionFoundClustersTPC >= fMinFoundClusterTPC))) fBitmap->SetBitNumber(iCutBit,kTRUE); iCutBit++; - if (extCov[2] <= fCovariance22Max) + if (nTrackletsTRD >= fMinNTrackletTRD) fBitmap->SetBitNumber(iCutBit,kTRUE); iCutBit++; - if (extCov[5] <= fCovariance33Max) + if (!isESDTrack || esdTrack->GetTRDntrackletsPID() >= fMinNTrackletTRDpid) fBitmap->SetBitNumber(iCutBit,kTRUE); iCutBit++; - if (extCov[9] <= fCovariance44Max) + +// // // 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[14] <= fCovariance55Max) + if (!isESDTrack || esdTrack->GetTPCsignalN() >= fMinNdEdxClusterTPC) fBitmap->SetBitNumber(iCutBit,kTRUE); iCutBit++; - + +// // // 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); } @@ -436,6 +609,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,"covElement11"); - fhCutStatistics->GetXaxis()->SetBinLabel(6,"covElement22"); - fhCutStatistics->GetXaxis()->SetBinLabel(7,"covElement33"); - fhCutStatistics->GetXaxis()->SetBinLabel(8,"covElement44"); - fhCutStatistics->GetXaxis()->SetBinLabel(9,"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,"covElement11"); - fhCutCorrelation->GetXaxis()->SetBinLabel(6,"covElement22"); - fhCutCorrelation->GetXaxis()->SetBinLabel(7,"covElement33"); - fhCutCorrelation->GetXaxis()->SetBinLabel(8,"covElement44"); - fhCutCorrelation->GetXaxis()->SetBinLabel(9,"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,"covElement11"); - fhCutCorrelation->GetYaxis()->SetBinLabel(6,"covElement22"); - fhCutCorrelation->GetYaxis()->SetBinLabel(7,"covElement33"); - fhCutCorrelation->GetYaxis()->SetBinLabel(8,"covElement44"); - fhCutCorrelation->GetYaxis()->SetBinLabel(9,"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[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}"); @@ -631,46 +909,92 @@ void AliCFTrackQualityCuts::FillHistograms(TObject* obj, Bool_t b) return; } - Bool_t isESDTrack = strcmp(obj->ClassName(),"AliESDtrack") == 0 ? kTRUE : kFALSE ; - Bool_t isAODTrack = strcmp(obj->ClassName(),"AliAODTrack") == 0 ? kTRUE : kFALSE ; + 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 ; - AliESDtrack * esdTrack = 0x0 ; - AliAODTrack * aodTrack = 0x0 ; - if (isESDTrack) esdTrack = dynamic_cast(obj); - if (isAODTrack) aodTrack = dynamic_cast(obj); // b = 0: fill histograms before cuts // b = 1: fill histograms after cuts - Int_t fIdxInt[200]; - 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}; - +// // // 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) { - nClustersTPC = esdTrack->GetTPCclusters(fIdxInt); - nClustersITS = esdTrack->GetITSclusters(fIdxInt); - if (nClustersTPC != 0) chi2PerClusterTPC = esdTrack->GetTPCchi2() / Float_t(nClustersTPC); - if (nClustersITS!=0) chi2PerClusterITS = esdTrack->GetITSchi2() / Float_t(nClustersITS); - esdTrack->GetExternalCovariance(extCov); + 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()); } - fhQA[kCutClusterTPC][b]->Fill((float)nClustersTPC); - fhQA[kCutChi2TPC][b]->Fill(chi2PerClusterTPC); - fhQA[kCutClusterITS][b]->Fill((float)nClustersITS); - fhQA[kCutChi2ITS][b]->Fill(chi2PerClusterITS); - 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]); + +// // // 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; SelectionBitMap(obj); // Number of single cuts in this class