fPtMax(100.),
fIsPbPb(0),
fCentClass(10),
- fNVariables(20),
+ fNVariables(23),
fVariables(0x0),
fAvgTrials(1),
fNEventAll(0),
fPtDCAZ(0x0),
fPtNClustersTPC(0x0),
fPtNClustersTPCIter1(0x0),
+ fPtNClustersTPCShared(0x0),
+ fPtNClustersTPCSharedFrac(0x0),
fPtNPointITS(0x0),
fPtChi2C(0x0),
fPtNSigmaToVertex(0x0),
fPtRelUncertainty1PtChi2(0x0),
fPtRelUncertainty1PtChi2Iter1(0x0),
fPtRelUncertainty1PtPhi(0x0),
- fPtRelUncertainty1PtTrkLength(0x0),
fPtUncertainty1Pt(0x0),
fPtChi2PerClusterTPC(0x0),
fPtChi2PerClusterTPCIter1(0x0),
fPtNCrossedRows(0x0),
fPtNCrossedRowsNClusF(0x0),
fPtNCrRNCrRNClusF(0x0),
+ fPtChi2Gold(0x0),
+ fPtChi2GGC(0x0),
+ fPtChi2GoldPhi(0x0),
+ fPtChi2GGCPhi(0x0),
+ fChi2GoldChi2GGC(0x0),
fPtSigmaY2(0x0),
fPtSigmaZ2(0x0),
fPtSigmaSnp2(0x0),
fSystTrackCuts(0x0),
fHistList(0)
{
- SetNVariables(20);
+ SetNVariables(23);
fPtBinEdges[0][0] = 10.;
fPtBinEdges[0][1] = 1.;
fPtMax(100.),
fIsPbPb(0),
fCentClass(10),
- fNVariables(20),
+ fNVariables(23),
fVariables(0x0),
fAvgTrials(1),
fNEventAll(0),
fPtDCAZ(0x0),
fPtNClustersTPC(0x0),
fPtNClustersTPCIter1(0x0),
+ fPtNClustersTPCShared(0x0),
+ fPtNClustersTPCSharedFrac(0x0),
fPtNPointITS(0x0),
fPtChi2C(0x0),
fPtNSigmaToVertex(0x0),
fPtRelUncertainty1PtChi2(0x0),
fPtRelUncertainty1PtChi2Iter1(0x0),
fPtRelUncertainty1PtPhi(0x0),
- fPtRelUncertainty1PtTrkLength(0x0),
fPtUncertainty1Pt(0x0),
fPtChi2PerClusterTPC(0x0),
fPtChi2PerClusterTPCIter1(0x0),
fPtNCrossedRows(0x0),
fPtNCrossedRowsNClusF(0x0),
fPtNCrRNCrRNClusF(0x0),
+ fPtChi2Gold(0x0),
+ fPtChi2GGC(0x0),
+ fPtChi2GoldPhi(0x0),
+ fPtChi2GGCPhi(0x0),
+ fChi2GoldChi2GGC(0x0),
fPtSigmaY2(0x0),
fPtSigmaZ2(0x0),
fPtSigmaSnp2(0x0),
//
AliDebug(2,Form("AliPWG4HighPtTrackQA Calling Constructor"));
- SetNVariables(20);
+ SetNVariables(23);
fPtBinEdges[0][0] = 10.;
fPtBinEdges[0][1] = 1.;
Int_t fgkNDCA2DBins=80;
Float_t fgkDCA2DMin = -0.2;
Float_t fgkDCA2DMax = 0.2;
- if(fTrackType==1 || fTrackType==2 || fTrackType==4) {
+ if(fTrackType==1 || fTrackType==2 || fTrackType==4 || fTrackType==7) {
fgkDCA2DMin = -2.;
fgkDCA2DMax = 2.;
}
Double_t *binsNPointITS=new Double_t[fgkNNPointITSBins+1];
for(Int_t i=0; i<=fgkNNPointITSBins; i++) binsNPointITS[i]=(Double_t)fgkNPointITSMin + (fgkNPointITSMax-fgkNPointITSMin)/fgkNNPointITSBins*(Double_t)i ;
- Int_t fgkNNSigmaToVertexBins=20;
+ Int_t fgkNNSigmaToVertexBins=9;
Float_t fgkNSigmaToVertexMin = 0.;
- Float_t fgkNSigmaToVertexMax = 8.;
+ Float_t fgkNSigmaToVertexMax = 9.;
Double_t *binsNSigmaToVertex=new Double_t[fgkNNSigmaToVertexBins+1];
for(Int_t i=0; i<=fgkNNSigmaToVertexBins; i++) binsNSigmaToVertex[i]=(Double_t)fgkNSigmaToVertexMin + (fgkNSigmaToVertexMax-fgkNSigmaToVertexMin)/fgkNNSigmaToVertexBins*(Double_t)i ;
- Int_t fgkNChi2CBins=20;
- Float_t fgkChi2CMin = 0.;
- Float_t fgkChi2CMax = 100.;
+ Int_t fgkNChi2CBins=10;
+ // Float_t fgkChi2CMin = 0.;
+ // Float_t fgkChi2CMax = 100.; //10 sigma
Double_t *binsChi2C=new Double_t[fgkNChi2CBins+1];
- for(Int_t i=0; i<=fgkNChi2CBins; i++) binsChi2C[i]=(Double_t)fgkChi2CMin + (fgkChi2CMax-fgkChi2CMin)/fgkNChi2CBins*(Double_t)i ;
+ for(Int_t i=0; i<=fgkNChi2CBins; i++) binsChi2C[i] = (Double_t)i * (Double_t)i;
- Int_t fgkNRel1PtUncertaintyBins=30;
+ Int_t fgkNRel1PtUncertaintyBins=50;
Float_t fgkRel1PtUncertaintyMin = 0.;
- Float_t fgkRel1PtUncertaintyMax = 0.3;
+ Float_t fgkRel1PtUncertaintyMax = 1.;
if(fTrackType!=0 && fTrackType!=3) {
fgkNRel1PtUncertaintyBins = 50;
fgkRel1PtUncertaintyMax = 1.;
fPtNClustersTPCIter1 = new TH2F("fPtNClustersTPCIter1","fPtNClustersTPCIter1",fgkNPtBins,binsPt,fgkNNClustersTPCBins,binsNClustersTPC);
fHistList->Add(fPtNClustersTPCIter1);
+
+ fPtNClustersTPCShared = new TH2F("fPtNClustersTPCShared","fPtNClustersTPCShared",fgkNPtBins,binsPt,fgkNNClustersTPCBins,binsNClustersTPC);
+ fHistList->Add(fPtNClustersTPCShared);
+
+ fPtNClustersTPCSharedFrac = new TH2F("fPtNClustersTPCSharedFrac","fPtNClustersTPCSharedFrac",fgkNPtBins,binsPt,fgkNSigma1Pt2Bins,binsSigma1Pt2);
+ fHistList->Add(fPtNClustersTPCSharedFrac);
fPtNPointITS = new TH2F("fPtNPointITS","fPtNPointITS",fgkNPtBins,binsPt,fgkNNPointITSBins,binsNPointITS);
fHistList->Add(fPtNPointITS);
fPtRelUncertainty1PtPhi = new TH3F("fPtRelUncertainty1PtPhi","fPtRelUncertainty1PtPhi",fgkNPtBins,binsPt,fgkNRel1PtUncertaintyBins,binsRel1PtUncertainty,fgkNPhiBins,binsPhi);
fHistList->Add(fPtRelUncertainty1PtPhi);
- fPtRelUncertainty1PtTrkLength = new TH3F("fPtRelUncertainty1PtTrkLength","fPtRelUncertainty1PtTrkLength",fgkNPtBins,binsPt,fgkNRel1PtUncertaintyBins,binsRel1PtUncertainty,fgkNNClustersTPCBins,binsNClustersTPC);
- fHistList->Add(fPtRelUncertainty1PtTrkLength);
-
fPtUncertainty1Pt = new TH2F("fPtUncertainty1Pt","fPtUncertainty1Pt",fgkNPtBins,binsPt,fgkNUncertainty1PtBins,binsUncertainty1Pt);
fHistList->Add(fPtUncertainty1Pt);
fPtNCrRNCrRNClusF = new TH3F("fPtNCrRNCrRNClusF","fPtNCrRNCrRNClusF",fgkNPtBins,binsPt,fgkNNClustersTPCBins,binsNClustersTPC,fgkNCrossedRowsNClusFBins,binsNCrossedRowsNClusF);
fHistList->Add(fPtNCrRNCrRNClusF);
+ fPtChi2Gold = new TH2F("fPtChi2Gold","fPtChi2Gold",fgkNPtBins,binsPt,fgkNChi2CBins,binsChi2C);
+ fHistList->Add(fPtChi2Gold);
+
+ fPtChi2GGC = new TH2F("fPtChi2GGC","fPtChi2GGC",fgkNPtBins,binsPt,fgkNChi2CBins,binsChi2C);
+ fHistList->Add(fPtChi2GGC);
+
+ fPtChi2GoldPhi = new TH3F("fPtChi2GoldPhi","fPtChi2GoldPhi",fgkNPtBins,binsPt,fgkNChi2CBins,binsChi2C,fgkNPhiBins,binsPhi);
+ fHistList->Add(fPtChi2GoldPhi);
+
+ fPtChi2GGCPhi = new TH3F("fPtChi2GGCPhi","fPtChi2GGCPhi",fgkNPtBins,binsPt,fgkNChi2CBins,binsChi2C,fgkNPhiBins,binsPhi);
+ fHistList->Add(fPtChi2GGCPhi);
+
+ fChi2GoldChi2GGC = new TH2F("fChi2GoldChi2GGC","fChi2GoldChi2GGC;#chi^{2}_{gold};#chi^{2}_{ggc}",fgkNChi2CBins,binsChi2C,fgkNChi2CBins,binsChi2C);
+ fHistList->Add(fChi2GoldChi2GGC);
+
+
fPtSigmaY2 = new TH2F("fPtSigmaY2","fPtSigmaY2",fgkN1PtBins,bins1Pt,fgkNSigmaY2Bins,binsSigmaY2);
fHistList->Add(fPtSigmaY2);
17: Sigma1Pt2
18: NClustersTPCIter1
19: Chi2TPCIter1
+ 20: nClustersTPCShared
+ 21: Golden Chi2 - global vs TPC constrained
+ 22: Chi2 between global and global constrained
*/
for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
fh1NTracksReject->Fill("noESDtrack",1);
continue;
}
+ AliESDtrack *origtrack = new AliESDtrack(*esdtrack);
if(fTrackType==4) {
FillSystematicCutHist(esdtrack);
if (!(fTrackCuts->AcceptTrack(esdtrack))) {
fh1NTracksReject->Fill("trackCuts",1);
+ if(origtrack) delete origtrack;
continue;
}
}
track = AliESDtrackCuts::GetTPCOnlyTrack(fESD,esdtrack->GetID());
if(!track) {
fh1NTracksReject->Fill("noTPConly",1);
+ if(origtrack) delete origtrack;
continue;
}
AliExternalTrackParam exParam;
if( !relate ) {
fh1NTracksReject->Fill("relate",1);
if(track) delete track;
+ if(origtrack) delete origtrack;
continue;
}
track->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance());
}
else if(fTrackType==5 || fTrackType==6) {
if(fTrackCuts->AcceptTrack(esdtrack)) {
+ if(origtrack) delete origtrack;
continue;
}
else {
track = AliESDtrackCuts::GetTPCOnlyTrack(fESD,esdtrack->GetID());
if(!track) {
fh1NTracksReject->Fill("noTPConly",1);
+ if(origtrack) delete origtrack;
continue;
}
AliExternalTrackParam exParam;
if( !relate ) {
fh1NTracksReject->Fill("relate",1);
if(track) delete track;
+ if(origtrack) delete origtrack;
continue;
}
track->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance());
}
else if(fTrackType==6) {
//use global constrained track
- track = esdtrack;
+ track = new AliESDtrack(*esdtrack);
track->Set(esdtrack->GetConstrainedParam()->GetX(),esdtrack->GetConstrainedParam()->GetAlpha(),esdtrack->GetConstrainedParam()->GetParameter(),esdtrack->GetConstrainedParam()->GetCovariance());
}
}
else if(fTrackType==7) {
//use global constrained track
- track = esdtrack;
- // track->Set(esdtrack->GetConstrainedParam()->GetX(),esdtrack->GetConstrainedParam()->GetAlpha(),esdtrack->GetConstrainedParam()->GetParameter(),esdtrack->GetConstrainedParam()->GetCovariance());
+ track = new AliESDtrack(*esdtrack);
}
else
track = esdtrack;
if(!track) {
+ if(origtrack) delete origtrack;
continue;
}
if(track->GetConstrainedChi2TPC() > fSigmaConstrainedMax*fSigmaConstrainedMax && fSigmaConstrainedMax>0.) {
fh1NTracksReject->Fill("chi2",1);
if(track) delete track;
+ if(origtrack) delete origtrack;
continue;
}
}
if (!(fTrackCuts->AcceptTrack(track)) && fTrackType!=4 && fTrackType!=5 && fTrackType!=6) {
fh1NTracksReject->Fill("trackCuts",1);
- if(fTrackType==1 || fTrackType==2) {
+ if(fTrackType==1 || fTrackType==2 || fTrackType==7) {
if(track) delete track;
}
+ if(origtrack) delete origtrack;
continue;
}
if(fTrackType==7) {
if(fTrackCutsITSLoose ) {
- if(fTrackCutsITSLoose->AcceptTrack(track) )
+ if(fTrackCutsITSLoose->AcceptTrack(track) ) {
+ if(track) delete track;
+ if(origtrack) delete origtrack;
continue;
+ }
}
if(esdtrack->GetConstrainedParam())
track->Set(esdtrack->GetConstrainedParam()->GetX(),esdtrack->GetConstrainedParam()->GetAlpha(),esdtrack->GetConstrainedParam()->GetParameter(),esdtrack->GetConstrainedParam()->GetCovariance());
}
- if(!track) continue;
-
+ if(!track) {
+ if(fTrackType==1 || fTrackType==2 || fTrackType==4 || fTrackType==5 || fTrackType==6 || fTrackType==7) {
+ if(track) delete track;
+ }
+ if(origtrack) delete origtrack;
+ continue;
+ }
+
fh1NTracksSel->Fill(0.);
fVariables->Reset(0.);
track->GetImpactParameters(dca2D,dcaz); //Global
fVariables->SetAt(dca2D,3);
- fVariables->SetAt(dcaz,5);
+ fVariables->SetAt(dcaz,4);
fVariables->SetAt((float)track->GetTPCNcls(),5);
fVariables->SetAt(track->GetTPCNclsIter1(),18);
fVariables->SetAt(track->GetTPCchi2Iter1(),19);
+
+ fVariables->SetAt(track->GetTPCnclsS(),20);
+
+ Float_t chi2Gold = GetGoldenChi2(origtrack);
+ Float_t chi2GGC = GetGGCChi2(origtrack);
+
+ fVariables->SetAt(chi2Gold,21);
+ fVariables->SetAt(chi2GGC,22);
FillHistograms();
// int mult = fTrackCuts->CountAcceptedTracks(fESD);
- if(fTrackType==1 || fTrackType==2 || fTrackType==4 || fTrackType==5) {
+ if(fTrackType==1 || fTrackType==2 || fTrackType==4 || fTrackType==5 || fTrackType==6 || fTrackType==7) {
if(track) delete track;
}
+ if(origtrack) delete origtrack;
}//track loop
fVariables->SetAt(0.,18);
fVariables->SetAt(0.,19);
+
+ TBits sharedClusterMap = aodtrack->GetTPCSharedMap();
+ fVariables->SetAt(sharedClusterMap.CountBits(),20);
+ fVariables->SetAt(0.,21); //not available in AOD
+ fVariables->SetAt(0.,22); //not available in AOD
+
fPtAll->Fill(fVariables->At(0));
FillHistograms();
fPtNClustersTPCIter1->Fill(fVariables->At(0),fVariables->At(18));
+ fPtNClustersTPCShared->Fill(fVariables->At(0),fVariables->At(20));
+ if(fVariables->At(5)>0.)
+ fPtNClustersTPCSharedFrac->Fill(fVariables->At(0),fVariables->At(20)/fVariables->At(5));
+
if(fVariables->At(18)>0.)
fPtChi2PerClusterTPCIter1->Fill(fVariables->At(0),fVariables->At(19)/fVariables->At(18));
if(fVariables->At(18)>0.)
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));
- fPtRelUncertainty1PtTrkLength->Fill(fVariables->At(0),fVariables->At(0)*TMath::Sqrt(fVariables->At(17)),fVariables->At(9));
fPtUncertainty1Pt->Fill(fVariables->At(0),TMath::Sqrt(fVariables->At(17)));
fPtSigmaY2->Fill(1./fVariables->At(0),TMath::Sqrt(fVariables->At(13)));
fPtNCrossedRows->Fill(fVariables->At(0),fVariables->At(11));
fPtNCrossedRowsNClusF->Fill(fVariables->At(0),fVariables->At(12));
fPtNCrRNCrRNClusF->Fill(fVariables->At(0),fVariables->At(11),fVariables->At(12));
+
+ fPtChi2Gold->Fill(fVariables->At(0),fVariables->At(21));
+ fPtChi2GGC->Fill(fVariables->At(0),fVariables->At(22));
+
+ fPtChi2GoldPhi->Fill(fVariables->At(0),fVariables->At(21),fVariables->At(1));
+ fPtChi2GGCPhi->Fill(fVariables->At(0),fVariables->At(22),fVariables->At(1));
+
+ fChi2GoldChi2GGC->Fill(fVariables->At(21),fVariables->At(22));
+
+
}
//________________________________________________________________________
return trackLength;
}
+//_______________________________________________________________________
+Float_t AliPWG4HighPtTrackQA::GetGoldenChi2(AliESDtrack *origtrack) {
+ //
+ // Return chi2 between global and TPC constrained track
+ // track should be the global unconstrained track
+ //
+
+ Float_t chi2Gold = 0.;
+
+ AliESDtrack *tpcTrack = 0x0;
+ tpcTrack = AliESDtrackCuts::GetTPCOnlyTrack(fESD,origtrack->GetID());
+ if(tpcTrack) {
+ AliExternalTrackParam exParam;
+ Bool_t relate = tpcTrack->RelateToVertexTPC(fVtx,fESD->GetMagneticField(),kVeryBig,&exParam);
+ if( relate ) {
+ tpcTrack->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance());
+ // Double_t pTPC[2],covTPC[3]; tpcTrack->PropagateToDCA(fVtx, fESD->GetMagneticField(), 10000, pTPC, covTPC);
+ }
+
+ tpcTrack->Propagate(origtrack->GetAlpha(), origtrack->GetX(), fESD->GetMagneticField());
+ chi2Gold = (Float_t)origtrack->GetPredictedChi2(tpcTrack);
+ }
+
+ if(tpcTrack) delete tpcTrack;
+
+ return chi2Gold;
+
+}
+
+//_______________________________________________________________________
+Float_t AliPWG4HighPtTrackQA::GetGGCChi2(AliESDtrack *origtrack) {
+ //
+ // Return chi2 between global and global constrained track
+ // track should be the global unconstrained track
+ //
+
+ Float_t chi2GGC = 0.;
+
+ AliESDtrack *esdtrackC = new AliESDtrack(*origtrack);
+ if(esdtrackC) {
+ if(origtrack->GetConstrainedParam()) {
+ esdtrackC->Set(origtrack->GetConstrainedParam()->GetX(),origtrack->GetConstrainedParam()->GetAlpha(),origtrack->GetConstrainedParam()->GetParameter(),origtrack->GetConstrainedParam()->GetCovariance());
+ chi2GGC = (Float_t)origtrack->GetPredictedChi2(esdtrackC);
+ }
+ delete esdtrackC;
+ }
+
+ return chi2GGC;
+
+}
+
//_______________________________________________________________________
void AliPWG4HighPtTrackQA::FillSystematicCutHist(AliESDtrack *track) {