- // cast TObject into ESDtrack
- AliESDtrack* esdTrack = dynamic_cast<AliESDtrack *>(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;
+ }
+
+ Bool_t isESDTrack = strcmp(obj->ClassName(),"AliESDtrack") == 0 ? kTRUE : kFALSE ;
+ Bool_t isAODTrack = strcmp(obj->ClassName(),"AliAODTrack") == 0 ? kTRUE : kFALSE ;
+
+ AliESDtrack * esdTrack = 0x0 ;
+ AliAODTrack * aodTrack = 0x0 ;
+ if (isESDTrack) esdTrack = dynamic_cast<AliESDtrack*>(obj);
+ if (isAODTrack) aodTrack = dynamic_cast<AliAODTrack*>(obj);
+
+ // 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);
+ 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]);
+