// of tracks and track selection criteria
// Output: Histograms for different set of cuts
//-----------------------------------------------------------------------
-// Author : Marta Verweij - UU
+// Author : M. Verweij - UU
//-----------------------------------------------------------------------
#ifndef ALIPWG4HIGHPTTRACKQA_CXX
#include "AliCentrality.h"
#include "AliAODVertex.h"
#include "AliAODEvent.h"
-//#include "AliAnalysisHelperJetTasks.h"
using namespace std; //required for resolving the 'cout' symbol
fEvent(0x0),
fESD(0x0),
fVtx(0x0),
+ fVtxAOD(0x0),
fTrackCuts(0x0),
fTrackCutsITSLoose(0x0),
fTrackCutsTPConly(0x0),
fPtMax(100.),
fIsPbPb(0),
fCentClass(10),
- fNVariables(25),
+ fNVariables(26),
fVariables(0x0),
fITSClusterMap(0),
fAvgTrials(1),
fPtRelUncertainty1PtChi2(0x0),
fPtRelUncertainty1PtChi2Iter1(0x0),
fPtRelUncertainty1PtPhi(0x0),
- fPtUncertainty1Pt(0x0),
fPtChi2PerClusterTPC(0x0),
fPtChi2PerClusterTPCIter1(0x0),
fPtNCrossedRows(0x0),
fPtChi2GoldPhi(0x0),
fPtChi2GGCPhi(0x0),
fChi2GoldChi2GGC(0x0),
+ fPtChi2ITSPhi(0x0),
fPtSigmaY2(0x0),
fPtSigmaZ2(0x0),
fPtSigmaSnp2(0x0),
//
// Constructor
//
- SetNVariables(25);
+ SetNVariables(26);
fPtBinEdges[0][0] = 10.;
fPtBinEdges[0][1] = 1.;
fEvent(0x0),
fESD(0x0),
fVtx(0x0),
+ fVtxAOD(0x0),
fTrackCuts(0x0),
fTrackCutsITSLoose(0x0),
fTrackCutsTPConly(0x0),
fPtMax(100.),
fIsPbPb(0),
fCentClass(10),
- fNVariables(25),
+ fNVariables(26),
fVariables(0x0),
fITSClusterMap(0),
fAvgTrials(1),
fPtRelUncertainty1PtChi2(0x0),
fPtRelUncertainty1PtChi2Iter1(0x0),
fPtRelUncertainty1PtPhi(0x0),
- fPtUncertainty1Pt(0x0),
fPtChi2PerClusterTPC(0x0),
fPtChi2PerClusterTPCIter1(0x0),
fPtNCrossedRows(0x0),
fPtChi2GoldPhi(0x0),
fPtChi2GGCPhi(0x0),
fChi2GoldChi2GGC(0x0),
+ fPtChi2ITSPhi(0x0),
fPtSigmaY2(0x0),
fPtSigmaZ2(0x0),
fPtSigmaSnp2(0x0),
//
AliDebug(2,Form("AliPWG4HighPtTrackQA Calling Constructor"));
- SetNVariables(25);
+ SetNVariables(26);
fPtBinEdges[0][0] = 10.;
fPtBinEdges[0][1] = 1.;
fPtRelUncertainty1PtPhi = new TH3F("fPtRelUncertainty1PtPhi","fPtRelUncertainty1PtPhi",fgkNPtBins,binsPt,fgkNRel1PtUncertaintyBins,binsRel1PtUncertainty,fgkNPhiBins,binsPhi);
fHistList->Add(fPtRelUncertainty1PtPhi);
- fPtUncertainty1Pt = new TH2F("fPtUncertainty1Pt","fPtUncertainty1Pt",fgkNPtBins,binsPt,fgkNUncertainty1PtBins,binsUncertainty1Pt);
- fHistList->Add(fPtUncertainty1Pt);
-
fPtChi2PerClusterTPC = new TH2F("fPtChi2PerClusterTPC","fPtChi2PerClusterTPC",fgkNPtBins,binsPt,fgkNChi2PerClusBins,binsChi2PerClus);
fHistList->Add(fPtChi2PerClusterTPC);
fChi2GoldChi2GGC = new TH2F("fChi2GoldChi2GGC","fChi2GoldChi2GGC;#chi^{2}_{gold};#chi^{2}_{ggc}",fgkNChi2CBins,binsChi2C,fgkNChi2CBins,binsChi2C);
fHistList->Add(fChi2GoldChi2GGC);
+ fPtChi2ITSPhi = new TH3F("fPtChi2ITSPhi","fPtChi2ITSPhi;p_{T};#chi^{2}_{ITS};#varphi",fgkNPtBins,binsPt,fgkNChi2CBins,binsChi2C,fgkNPhiBins,binsPhi);
+ fHistList->Add(fPtChi2ITSPhi);
fPtSigmaY2 = new TH2F("fPtSigmaY2","fPtSigmaY2",fgkN1PtBins,bins1Pt,fgkNSigmaY2Bins,binsSigmaY2);
fHistList->Add(fPtSigmaY2);
}
}
else if(fDataType==kAOD&&dynamic_cast<AliAODEvent*>(fEvent)) {
- const AliAODVertex *vtx = ((AliAODEvent*)fEvent)->GetPrimaryVertexSPD();
- if(!vtx) {
+ fVtxAOD = ((AliAODEvent*)fEvent)->GetPrimaryVertex();
+ if(!fVtxAOD) {
fNEventReject->Fill("noVTX",1);
selectEvent = kFALSE;
return selectEvent;
}
// Need vertex cut
- if(vtx->GetNContributors()<2) {
+ if(fVtxAOD->GetNContributors()<2) {
fNEventReject->Fill("NCont<2",1);
selectEvent = kFALSE;
return selectEvent;
//Check if z-vertex < 10 cm
double primVtx[3];
- vtx->GetXYZ(primVtx);
+ fVtxAOD->GetXYZ(primVtx);
if(TMath::Sqrt(primVtx[0]*primVtx[0] + primVtx[1]*primVtx[1])>1. || TMath::Abs(primVtx[2]>10.)){
fNEventReject->Fill("ZVTX>10",1);
selectEvent = kFALSE;
22: Chi2 between global and global constrained
23: #crossed rows from fit map
24: (#crossed rows)/(#findable clusters) from fit map
+ 25: chi2ITS
*/
for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
if(track->GetTPCNclsF()>0.) crossedRowsTPCNClsFFit = fVariables->At(23)/track->GetTPCNclsF();
fVariables->SetAt(crossedRowsTPCNClsFFit,24);
+ fVariables->SetAt(track->GetITSchi2(),25);
+
TBits fitmap = track->GetTPCFitMap();
fPtNClustersNClustersFitMap->Fill(track->Pt(),track->GetTPCNcls(),(float)fitmap.CountBits());
for (Int_t iTrack = 0; iTrack < fEvent->GetNumberOfTracks(); iTrack++) {
AliAODTrack *aodtrack = aod->GetTrack(iTrack);
- // if(aodtrack->GetFilterMap()>128 && aodtrack->GetFilterMap()<1333)
- // Printf("filterMask = %d",aodtrack->GetFilterMap());
- // if(aodtrack->IsHybridGlobalConstrainedGlobal()) {
- // Printf("hybrid filterMask = %d",aodtrack->GetFilterMap());
- // if(aodtrack->IsGlobalConstrained())
- // Printf("global constrained filterMask = %d",aodtrack->GetFilterMap());
- // }
if( !aodtrack->TestFilterMask(fFilterMask) ) {
fh1NTracksReject->Fill("noHybridTrack",1);
continue;
fVariables->SetAt(aodtrack->Phi(),1);
fVariables->SetAt(aodtrack->Eta(),2);
- Double_t dca[2] = {1e6,1e6};
- Double_t covar[3] = {1e6,1e6,1e6};
- if(aodtrack->PropagateToDCA(fEvent->GetPrimaryVertex(),fEvent->GetMagneticField(),100.,dca,covar)) {
- fVariables->SetAt(dca[0],3);
- fVariables->SetAt(dca[1],4);
+ Double_t dca[2] = {0.,0.};
+ if(aodtrack->IsGlobalConstrained()) {
+ dca[0] = aodtrack->DCA();
+ dca[1] = aodtrack->ZAtDCA();
+ } else {
+ Double_t v[3] = {0};
+ Double_t pos[3] = {0};
+ fVtxAOD->GetXYZ(v);
+ aodtrack->GetXYZ(pos);
+ dca[0] = pos[0] - v[0];
+ dca[1] = pos[1] - v[1];
}
-
+ fVariables->SetAt(dca[0],3);
+ fVariables->SetAt(dca[1],4);
fVariables->SetAt((float)aodtrack->GetTPCNcls(),5);
fVariables->SetAt((float)aodtrack->GetITSNcls(),6);
fVariables->SetAt(aodtrack->Chi2perNDF(),7);
if(aodtrack->GetTPCNclsF()>0.) crossedRowsTPCNClsFFit = fVariables->At(23)/aodtrack->GetTPCNclsF();
fVariables->SetAt(crossedRowsTPCNClsFFit,24); //(#crossed rows)/(#findable clusters) from fit map
+ fVariables->SetAt(0.,25);
+
fPtAll->Fill(fVariables->At(0));
FillHistograms();
-
}
-
}
//________________________________________________________________________
fPtRelUncertainty1PtChi2Iter1->Fill(fVariables->At(0),fVariables->At(0)*TMath::Sqrt(fVariables->At(17)),fVariables->At(19)/fVariables->At(18));
fPtRelUncertainty1PtPhi->Fill(fVariables->At(0),fVariables->At(0)*TMath::Sqrt(fVariables->At(17)),fVariables->At(1));
- fPtUncertainty1Pt->Fill(fVariables->At(0),TMath::Sqrt(fVariables->At(17)));
fPtSigmaY2->Fill(1./fVariables->At(0),TMath::Sqrt(fVariables->At(13)));
fPtSigmaZ2->Fill(1./fVariables->At(0),TMath::Sqrt(fVariables->At(14)));
fPtSigmaSnp2->Fill(1./fVariables->At(0),TMath::Sqrt(fVariables->At(15)));
fPtRelUncertainty1PtNCrossedRows->Fill(fVariables->At(0),fVariables->At(0)*TMath::Sqrt(fVariables->At(17)),fVariables->At(11));
fPtRelUncertainty1PtNCrossedRowsFit->Fill(fVariables->At(0),fVariables->At(0)*TMath::Sqrt(fVariables->At(17)),fVariables->At(23));
+ if(fVariables->At(6)>0.)
+ fPtChi2ITSPhi->Fill(fVariables->At(0),fVariables->At(25)/fVariables->At(6),fVariables->At(1));
+
}
//________________________________________________________________________
// not an archive take the basename....
file.ReplaceAll(gSystem->BaseName(file.Data()),"");
}
- // Printf("%s",file.Data());
-
TFile *fxsec = TFile::Open(Form("%s%s",file.Data(),"pyxsec.root")); // problem that we cannot really test the existance of a file in a archive so we have to lvie with open error message from root
if(!fxsec){