char title[256];
// set pt measurable range
- fDCAHisto->GetAxis(3)->SetRangeUser(0.10,10.);
+ //fDCAHisto->GetAxis(3)->SetRangeUser(0.10,10.);
//
h2D = fDCAHisto->Projection(0,1); // inverse projection convention
aFolderObj->Add(h2D);
*/
-
-
-
-
-
-
// export objects to analysis folder
fAnalysisFolder = ExportToFolder(aFolderObj);
esdTrack->GetImpactParametersTPC(dca,cov);
if((esdTrack->GetStatus()&AliESDtrack::kTPCrefit)==0) return; // TPC refit
- if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ())
- {
- Float_t dedx = esdTrack->GetTPCsignal();
- Int_t ncls = esdTrack->GetTPCNcls();
-
- Double_t pt = innerParam->Pt();
- Double_t lam = TMath::ATan2(innerParam->Pz(),innerParam->Pt());
- Double_t p = pt/TMath::Cos(lam);
- //Double_t alpha = innerParam->GetAlpha();
- Double_t phi = TMath::ATan2(innerParam->Py(),innerParam->Px());
- //if(phi<0.) phi += 2.*TMath::Phi();
- Double_t y = innerParam->GetY();
- Double_t z = innerParam->GetZ();
- Double_t snp = innerParam->GetSnp();
- Double_t tgl = innerParam->GetTgl();
-
- //Double_t vDeDxHisto[8] = {dedx,alpha,y,z,snp,tgl,ncls,p};
- Double_t vDeDxHisto[8] = {dedx,phi,y,z,snp,tgl,ncls,p};
- fDeDxHisto->Fill(vDeDxHisto);
+
+ //
+ // select primaries
+ //
+ Double_t dcaToVertex = -1;
+ if( fCutsRC->GetDCAToVertex2D() )
+ {
+ dcaToVertex = TMath::Sqrt(dca[0]*dca[0]/fCutsRC->GetMaxDCAToVertexXY()/fCutsRC->GetMaxDCAToVertexXY() + dca[1]*dca[1]/fCutsRC->GetMaxDCAToVertexZ()/fCutsRC->GetMaxDCAToVertexZ());
}
+ if(fCutsRC->GetDCAToVertex2D() && dcaToVertex > 1) return;
+ if(!fCutsRC->GetDCAToVertex2D() && TMath::Abs(dca[0]) > fCutsRC->GetMaxDCAToVertexXY()) return;
+ if(!fCutsRC->GetDCAToVertex2D() && TMath::Abs(dca[1]) > fCutsRC->GetMaxDCAToVertexZ()) return;
+
+ Float_t dedx = esdTrack->GetTPCsignal();
+ Int_t ncls = esdTrack->GetTPCNcls();
+
+ Double_t pt = innerParam->Pt();
+ Double_t lam = TMath::ATan2(innerParam->Pz(),innerParam->Pt());
+ Double_t p = pt/TMath::Cos(lam);
+ //Double_t alpha = innerParam->GetAlpha();
+ Double_t phi = TMath::ATan2(innerParam->Py(),innerParam->Px());
+ //if(phi<0.) phi += 2.*TMath::Phi();
+ Double_t y = innerParam->GetY();
+ Double_t z = innerParam->GetZ();
+ Double_t snp = innerParam->GetSnp();
+ Double_t tgl = innerParam->GetTgl();
+
+ //Double_t vDeDxHisto[8] = {dedx,alpha,y,z,snp,tgl,ncls,p};
+ Double_t vDeDxHisto[8] = {dedx,phi,y,z,snp,tgl,ncls,p};
+ fDeDxHisto->Fill(vDeDxHisto);
if(!stack) return;
}
}
// resolution histograms for mips
+ //dedx:phi:y:z:snp:tgl:ncls:p
fDeDxHisto->GetAxis(2)->SetRangeUser(-15.,14.999);
fDeDxHisto->GetAxis(3)->SetRangeUser(-120.,119.999);
fDeDxHisto->GetAxis(4)->SetRangeUser(-0.4, 0.399);
- fDeDxHisto->GetAxis(5)->SetRangeUser(-1.,0.999);
- fDeDxHisto->GetAxis(6)->SetRangeUser(60.,140.);
+ fDeDxHisto->GetAxis(5)->SetRangeUser(-0.9,0.89);
+ fDeDxHisto->GetAxis(6)->SetRangeUser(60.,160.);
fDeDxHisto->GetAxis(7)->SetRangeUser(0.4,0.499);
h1D=(TH1F*)fDeDxHisto->Projection(0);
// export objects to analysis folder
fAnalysisFolder = ExportToFolder(aFolderObj);
- // delete only TObjrArray
+ // delete only TObjArray
if(aFolderObj) delete aFolderObj;
}
fPullHisto->GetAxis(10)->SetTitle("isReconstructed");
fPullHisto->Sumw2();
- // -> has match:y:z:snp:tgl:pt:ITSclusters
- Int_t binsTrackingEffHisto[7] = { 2, 50, 250, 50, 50, 100, 7};
- Double_t minTrackingEffHisto[7] = {-0.5, -25, -250, -1, -2, 0, -0.5};
- Double_t maxTrackingEffHisto[7] = { 1.5, 25, 250, 1, 2, 20, 6.5};
+ // -> has match:y:z:snp:tgl:phi:pt:ITSclusters
+ Int_t binsTrackingEffHisto[8] = { 2, 50, 100, 50, 50, 90, 100, 7 };
+ Double_t minTrackingEffHisto[8] = {-0.5, -25, -50, -1, -2, 0., 0, -0.5 };
+ Double_t maxTrackingEffHisto[8] = { 1.5, 25, 50, 1, 2, 2*TMath::Pi(), 20, 6.5 };
- fTrackingEffHisto = new THnSparseF("fTrackingEffHisto","has match:y:z:snp:tgl:pt:ITSclusters",7,binsTrackingEffHisto,minTrackingEffHisto,maxTrackingEffHisto);
+ fTrackingEffHisto = new THnSparseF("fTrackingEffHisto","has match:y:z:snp:tgl:phi:pt:ITSclusters",8,binsTrackingEffHisto,minTrackingEffHisto,maxTrackingEffHisto);
fTrackingEffHisto->GetAxis(0)->SetTitle("IsMatching");
fTrackingEffHisto->GetAxis(1)->SetTitle("local y (cm)");
fTrackingEffHisto->GetAxis(2)->SetTitle("z (cm)");
fTrackingEffHisto->GetAxis(3)->SetTitle("sin(#phi)");
fTrackingEffHisto->GetAxis(4)->SetTitle("tan(#lambda)");
- fTrackingEffHisto->GetAxis(5)->SetTitle("p_{T}");
- fTrackingEffHisto->GetAxis(6)->SetTitle("number of ITS clusters");
+ fTrackingEffHisto->GetAxis(5)->SetTitle("phi (rad)");
+ fTrackingEffHisto->GetAxis(6)->SetTitle("p_{T}");
+ fTrackingEffHisto->GetAxis(7)->SetTitle("number of ITS clusters");
+ fTrackingEffHisto->Sumw2();
// Init cuts
if(!fCutsMC)
AliDebug(AliLog::kError, "ERROR: Cannot find AliRecInfoCuts object");
// init folder
- fAnalysisFolder = CreateFolder("folderRes","Analysis Resolution Folder");
+ fAnalysisFolder = CreateFolder("folderMatch","Analysis Matching Folder");
}
//_____________________________________________________________________________
{
//
// addition to standard analysis - check if ITS stand-alone tracks have a match in the TPC
- // Author: A. Kalwait
- //
+ // Origin: A. Kalwait
+ // Modified: J. Otwinowski
if(!esdTrack) return;
if(!esdFriendTrack) return;
//
if (esdTrack->GetInnerParam()) return; // ITS stand-alone tracks have not TPC inner param
- if (esdTrack->GetITSclusters(0) < 2) return;
+ if (esdTrack->GetITSclusters(0) < fCutsRC->GetMinNClustersITS()) return;
//AliTracker::PropagateTrackToBxByBz(esdTrack,80.0,0.1056,1.0,kTRUE); // we propagate the ITS stand-alone to the inner TPC radius
Bool_t hasMatch = kFALSE;
for (Int_t jTrack = 0; jTrack < esdEvent->GetNumberOfTracks(); jTrack++) {
if (jTrack==iTrack) continue;
AliESDtrack *trackTPC = esdEvent->GetTrack(jTrack);
if (!trackTPC) continue;
- if (!trackTPC->GetInnerParam()) continue;
+ if (!trackTPC->GetTPCInnerParam()) continue;
AliExternalTrackParam *innerTPC = new AliExternalTrackParam(*(trackTPC->GetTPCInnerParam()));
+ if(!innerTPC) continue;
+
AliTracker::PropagateTrackToBxByBz(innerTPC,2.8,trackTPC->GetMass(),1.0,kTRUE);
Double_t x[3]; trackTPC->GetXYZ(x);
Double_t b[3]; AliTracker::GetBxByBz(x,b);
printf("innerTPC->GetY() %f, innerTPC->GetSnp() %f, innerTPC->GetTgl() %f \n",
innerTPC->GetY() , innerTPC->GetSnp() , innerTPC->GetTgl());
*/
-
- /*
- if (TMath::Abs(esdTrack->GetY() - trackTPC->GetInnerParam()->GetY()) > 3) continue;
- if (TMath::Abs(esdTrack->GetSnp() - trackTPC->GetInnerParam()->GetSnp()) > 0.2) continue;
- if (TMath::Abs(esdTrack->GetTgl() - trackTPC->GetInnerParam()->GetTgl()) > 0.2) continue;
- */
- if (TMath::Abs(esdTrack->GetY() - innerTPC->GetY()) > 3) continue;
- if (TMath::Abs(esdTrack->GetSnp() - innerTPC->GetSnp()) > 0.2) continue;
- if (TMath::Abs(esdTrack->GetTgl() - innerTPC->GetTgl()) > 0.2) continue;
+ if (TMath::Abs(esdTrack->GetY() - innerTPC->GetY()) > 3) { delete innerTPC; continue; }
+ if (TMath::Abs(esdTrack->GetSnp() - innerTPC->GetSnp()) > 0.2) { delete innerTPC; continue; }
+ if (TMath::Abs(esdTrack->GetTgl() - innerTPC->GetTgl()) > 0.2) { delete innerTPC; continue; }
hasMatch = kTRUE;
if(innerTPC) delete innerTPC;
}
- //has match:y:z:snp:tgl:pt:ITSclusters
- Double_t vecTrackingEff[7] = {hasMatch,esdTrack->GetY(),esdTrack->GetZ(),esdTrack->GetSnp(),esdTrack->GetTgl(),esdTrack->Pt(),esdTrack->GetITSclusters(0)};
+ //has match:y:z:snp:tgl:phi:pt:ITSclusters
+ Double_t vecTrackingEff[8] = { hasMatch,esdTrack->GetY(),esdTrack->GetZ(),esdTrack->GetSnp(),esdTrack->GetTgl(),esdTrack->Phi(), esdTrack->Pt(),esdTrack->GetITSclusters(0) };
fTrackingEffHisto->Fill(vecTrackingEff);
}
Double_t mass = esdTrack->GetMass();
Double_t step=1.0; // cm
-
//
// Propagate TPCinner (reference detector)
//
Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
esdTrack->GetImpactParametersTPC(dca,cov);
+ //
+ // select primaries
+ //
+ Double_t dcaToVertex = -1;
+ if( fCutsRC->GetDCAToVertex2D() )
+ {
+ dcaToVertex = TMath::Sqrt(dca[0]*dca[0]/fCutsRC->GetMaxDCAToVertexXY()/fCutsRC->GetMaxDCAToVertexXY() + dca[1]*dca[1]/fCutsRC->GetMaxDCAToVertexZ()/fCutsRC->GetMaxDCAToVertexZ());
+ }
+ if(fCutsRC->GetDCAToVertex2D() && dcaToVertex > 1) return;
+ if(!fCutsRC->GetDCAToVertex2D() && TMath::Abs(dca[0]) > fCutsRC->GetMaxDCAToVertexXY()) return;
+ if(!fCutsRC->GetDCAToVertex2D() && TMath::Abs(dca[1]) > fCutsRC->GetMaxDCAToVertexZ()) return;
+
if( (esdTrack->GetNcls(1)>fCutsRC->GetMinNClustersTPC()) &&
- (TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ()) &&
(esdTrack->GetTPCInnerParam()) &&
(innerTPC=new AliExternalTrackParam(*(esdTrack->GetTPCInnerParam()))))
{
Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
esdTrack->GetImpactParametersTPC(dca,cov);
+ //
+ // select primaries
+ //
+ Double_t dcaToVertex = -1;
+ if( fCutsRC->GetDCAToVertex2D() )
+ {
+ dcaToVertex = TMath::Sqrt(dca[0]*dca[0]/fCutsRC->GetMaxDCAToVertexXY()/fCutsRC->GetMaxDCAToVertexXY() + dca[1]*dca[1]/fCutsRC->GetMaxDCAToVertexZ()/fCutsRC->GetMaxDCAToVertexZ());
+ }
+ if(fCutsRC->GetDCAToVertex2D() && dcaToVertex > 1) return;
+ if(!fCutsRC->GetDCAToVertex2D() && TMath::Abs(dca[0]) > fCutsRC->GetMaxDCAToVertexXY()) return;
+ if(!fCutsRC->GetDCAToVertex2D() && TMath::Abs(dca[1]) > fCutsRC->GetMaxDCAToVertexZ()) return;
+
if( (esdTrack->GetNcls(1)>fCutsRC->GetMinNClustersTPC()) &&
- (TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ()) &&
(esdFriendTrack->GetTPCOut()) &&
(outerTPC=new AliExternalTrackParam(*(esdFriendTrack->GetTPCOut()))))
{
if(!(trdTrack = dynamic_cast<AliTRDtrackV1*>(calObject))) break;
}
- //if( (esdTrack->GetNcls(2)>fCutsRC->GetMinNClustersTRD()) &&
if( (trdTrack) &&
(trdTrack->GetNumberOfTracklets()>fCutsRC->GetMinNTrackletsTRD()) &&
(trdTrack->GetTracklet(0)) &&
char name[256];
char title[256];
+ if(GetAnalysisMode()==0 || GetAnalysisMode()==1) {
+
fResolHisto->GetAxis(10)->SetRangeUser(1.0,2.0); // only reconstructed
fPullHisto->GetAxis(10)->SetRangeUser(1.0,2.0); // only reconstructed
for(Int_t i=0; i<5; i++)
//if(j!=8) fResolHisto->GetAxis(8)->SetRangeUser(-0.9,0.89); // eta window
if(j!=8) fResolHisto->GetAxis(8)->SetRangeUser(0.0,0.89); // eta window
else fResolHisto->GetAxis(8)->SetRangeUser(-1.5,1.49);
- fResolHisto->GetAxis(9)->SetRangeUser(0.16,100.); // pt threshold
+ fResolHisto->GetAxis(9)->SetRangeUser(0.1,100.); // pt threshold
h2D = (TH2F*)fResolHisto->Projection(i,j);
sprintf(title,"%s vs %s",title,fResolHisto->GetAxis(j)->GetTitle());
h->SetTitle(title);
- if(j==9) h->SetBit(TH1::kLogX);
+ //if(j==9) h->SetBit(TH1::kLogX);
aFolderObj->Add(h);
h = AliPerformanceMatch::MakeResol(h2D,1,1,100);
aFolderObj->Add(h);
//
- //if(j!=8) fPullHisto->GetAxis(8)->SetRangeUser(-0.9,0.89); // eta window
if(j!=8) fPullHisto->GetAxis(8)->SetRangeUser(0.0,0.89); // eta window
else fPullHisto->GetAxis(8)->SetRangeUser(-1.5,1.49); // eta window
- fPullHisto->GetAxis(9)->SetRangeUser(0.16,100.); // pt threshold
+ fPullHisto->GetAxis(9)->SetRangeUser(0.1,100.); // pt threshold
h2D = (TH2F*)fPullHisto->Projection(i,j);
sprintf(title,"%s vs %s",title,fPullHisto->GetAxis(j)->GetTitle());
h->SetTitle(title);
- //if(j==9) h->SetBit(TH1::kLogX);
+ if(j==9) h->SetBit(TH1::kLogX);
aFolderObj->Add(h);
h = AliPerformanceMatch::MakeResol(h2D,1,1,100);
{
if(i!=8) fResolHisto->GetAxis(8)->SetRangeUser(-0.9,0.89); // eta window
else fResolHisto->GetAxis(8)->SetRangeUser(-1.5,1.49);
- fResolHisto->GetAxis(9)->SetRangeUser(0.16,100.); // pt threshold
+ fResolHisto->GetAxis(9)->SetRangeUser(0.1,100.); // pt threshold
fResolHisto->GetAxis(10)->SetRange(1,fResolHisto->GetAxis(10)->GetNbins()); // all
h = (TH1F*)fResolHisto->Projection(i);
- fResolHisto->GetAxis(10)->SetRangeUser(1.0,2.0); // only reconstructed
+ fResolHisto->GetAxis(10)->SetRange(2,2); // only reconstructed
h2 = (TH1F*)fResolHisto->Projection(i);
TH1F* h2c = (TH1F*)h2->Clone();
- h2c->Divide(h2c,h,1,1,"B");
+ h2c->Divide(h2,h,1,1,"B");
sprintf(name,"h_eff_%d",i);
h2c->SetName(name);
aFolderObj->Add(h2c);
}
+
+ }
+
+ //
+ // TPC efficiency wrt ITS
+ //
+ if(GetAnalysisMode()==2) {
+
+ h = (TH1F*)fTrackingEffHisto->Projection(0);
+ aFolderObj->Add(h);
+
+ for(Int_t i=1; i<7; i++)
+ {
+ //
+ //
+ // calculate efficiency
+ //
+
+ // all ITS standalone tracks
+ fTrackingEffHisto->GetAxis(0)->SetRange(1,fTrackingEffHisto->GetAxis(0)->GetNbins());
+ h = (TH1F*)fTrackingEffHisto->Projection(i);
+
+ // TPC tracks which has matching with TPC
+ fTrackingEffHisto->GetAxis(0)->SetRange(2,2);
+ h2 = (TH1F*)fTrackingEffHisto->Projection(i);
+
+ TH1F* h2c = (TH1F*)h2->Clone();
+ h2c->Divide(h2,h,1,1,"B");
+
+ sprintf(name,"h_TPC_eff_%d",i);
+ h2c->SetName(name);
+
+ h2c->GetXaxis()->SetTitle(h2c->GetXaxis()->GetTitle());
+ h2c->GetYaxis()->SetTitle("efficiency");
+ h2c->SetTitle("TPC effciency wrt ITS");
+
+ aFolderObj->Add(h2c);
+ }
+
+ }
+
// export objects to analysis folder
fAnalysisFolder = ExportToFolder(aFolderObj);
fResolHisto->Add(entry->fResolHisto);
fPullHisto->Add(entry->fPullHisto);
+ fTrackingEffHisto->Add(entry->fTrackingEffHisto);
count++;
}
THnSparseF *fPullHisto; //-> pull_y:pull_z:pull_snp:pull_tgl:pull_1pt:y:z:snp:tgl:1pt:isRec
// tracking efficiency using ITS stand-alone tracks histogram
- THnSparseF *fTrackingEffHisto; // -> has match:y:z:snp:tgl:pt:ITSclusters
+ THnSparseF *fTrackingEffHisto; //-> has match:y:z:snp:tgl:phi:pt:ITSclusters
// Global cuts objects
AliRecInfoCuts* fCutsRC; // selection cuts for reconstructed tracks
//_____________________________________________________________________________
AliPerformanceTPC::AliPerformanceTPC():
AliPerformanceObject("AliPerformanceTPC"),
- fTPCHisto(0),
+ fTPCEventHisto(0),
+ fTPCTrackHisto(0),
// Cuts
fCutsRC(0),
//_____________________________________________________________________________
AliPerformanceTPC::AliPerformanceTPC(Char_t* name="AliPerformanceTPC", Char_t* title="AliPerformanceTPC",Int_t analysisMode=0,Bool_t hptGenerator=kFALSE):
AliPerformanceObject(name,title),
- fTPCHisto(0),
+ fTPCEventHisto(0),
+ fTPCTrackHisto(0),
// Cuts
fCutsRC(0),
{
// destructor
- if(fTPCHisto) delete fTPCHisto; fTPCHisto=0;
+ if(fTPCEventHisto) delete fTPCEventHisto; fTPCEventHisto=0;
+ if(fTPCTrackHisto) delete fTPCTrackHisto; fTPCTrackHisto=0;
if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;
}
}
*/
- // nTPCClust:chi2PerTPCClust:nTPCClustFindRatio:eta:phi:pt
- Int_t binsTPCHisto[6]={160,100,100,30,90,nPtBins};
- Double_t minTPCHisto[6]={0., 0., 0., -1.5, 0., ptMin};
- Double_t maxTPCHisto[6]={160.,10.,1.2, 1.5, 2.*TMath::Pi(), ptMax};
-
- fTPCHisto = new THnSparseF("fTPCHisto","nClust:chi2PerClust:nClust/nFindableClust:eta:phi:pt",6,binsTPCHisto,minTPCHisto,maxTPCHisto);
- fTPCHisto->SetBinEdges(5,binsPt);
-
- fTPCHisto->GetAxis(0)->SetTitle("nClust");
- fTPCHisto->GetAxis(1)->SetTitle("chi2PerClust");
- fTPCHisto->GetAxis(2)->SetTitle("nClust/nFindableClust");
- fTPCHisto->GetAxis(3)->SetTitle("#eta");
- fTPCHisto->GetAxis(4)->SetTitle("#phi (rad)");
- fTPCHisto->GetAxis(5)->SetTitle("p_{T} (GeV/c)");
- fTPCHisto->Sumw2();
+ // Xv:Yv:Zv:mult:multP:multN
+ Int_t binsTPCEventHisto[6]= {100, 100, 100, 101, 101, 101 };
+ Double_t minTPCEventHisto[6]={-10., -10., -30., -0.5, -0.5, -0.5 };
+ Double_t maxTPCEventHisto[6]={ 10., 10., 30., 100.5, 100.5, 100.5 };
+
+ fTPCEventHisto = new THnSparseF("fTPCEventHisto","Xv:Yv:Zv:mult:multP:multN",6,binsTPCEventHisto,minTPCEventHisto,maxTPCEventHisto);
+ fTPCEventHisto->GetAxis(0)->SetTitle("Xv (cm)");
+ fTPCEventHisto->GetAxis(1)->SetTitle("Yv (cm)");
+ fTPCEventHisto->GetAxis(2)->SetTitle("Zv (cm)");
+ fTPCEventHisto->GetAxis(3)->SetTitle("mult");
+ fTPCEventHisto->GetAxis(4)->SetTitle("multP");
+ fTPCEventHisto->GetAxis(5)->SetTitle("multN");
+ fTPCEventHisto->Sumw2();
+
+
+ // nTPCClust:chi2PerTPCClust:nTPCClustFindRatio:DCAr:DCAz:eta:phi:pt:charge
+ Int_t binsTPCTrackHisto[9]= { 160, 50, 60, 100, 100, 30, 90, nPtBins, 3 };
+ Double_t minTPCTrackHisto[9]={ 0., 0., 0., -10, -10., -1.5, 0., ptMin, -1.5};
+ Double_t maxTPCTrackHisto[9]={ 160., 10., 1.2, 10, 10., 1.5, 2.*TMath::Pi(), ptMax, 1.5};
+
+ fTPCTrackHisto = new THnSparseF("fTPCTrackHisto","nClust:chi2PerClust:nClust/nFindableClust:DCAr:DCAz:eta:phi:pt:charge",9,binsTPCTrackHisto,minTPCTrackHisto,maxTPCTrackHisto);
+ fTPCTrackHisto->SetBinEdges(7,binsPt);
+
+ fTPCTrackHisto->GetAxis(0)->SetTitle("nClust");
+ fTPCTrackHisto->GetAxis(1)->SetTitle("chi2PerClust");
+ fTPCTrackHisto->GetAxis(2)->SetTitle("nClust/nFindableClust");
+ fTPCTrackHisto->GetAxis(3)->SetTitle("DCAr (cm)");
+ fTPCTrackHisto->GetAxis(4)->SetTitle("DCAz (cm)");
+ fTPCTrackHisto->GetAxis(5)->SetTitle("#eta");
+ fTPCTrackHisto->GetAxis(6)->SetTitle("#phi (rad)");
+ fTPCTrackHisto->GetAxis(7)->SetTitle("p_{T} (GeV/c)");
+ fTPCTrackHisto->GetAxis(8)->SetTitle("charge");
+ fTPCTrackHisto->Sumw2();
// Init cuts
if(!fCutsMC)
Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
esdTrack->GetImpactParametersTPC(dca,cov);
- //Float_t q = esdTrack->Charge();
+ Float_t q = esdTrack->Charge();
Float_t pt = track->Pt();
Float_t eta = track->Eta();
Float_t phi = track->Phi();
Float_t clustPerFindClust = 0.;
if(nFindableClust>0.) clustPerFindClust = Float_t(nClust)/nFindableClust;
- if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ()) {
- Double_t vTPCHisto[6] = {nClust,chi2PerCluster,clustPerFindClust,eta,phi,pt};
- fTPCHisto->Fill(vTPCHisto);
+ //
+ // select primaries
+ //
+ Double_t dcaToVertex = -1;
+ if( fCutsRC->GetDCAToVertex2D() )
+ {
+ dcaToVertex = TMath::Sqrt(dca[0]*dca[0]/fCutsRC->GetMaxDCAToVertexXY()/fCutsRC->GetMaxDCAToVertexXY() + dca[1]*dca[1]/fCutsRC->GetMaxDCAToVertexZ()/fCutsRC->GetMaxDCAToVertexZ());
}
+ if(fCutsRC->GetDCAToVertex2D() && dcaToVertex > 1) return;
+ if(!fCutsRC->GetDCAToVertex2D() && TMath::Abs(dca[0]) > fCutsRC->GetMaxDCAToVertexXY()) return;
+ if(!fCutsRC->GetDCAToVertex2D() && TMath::Abs(dca[1]) > fCutsRC->GetMaxDCAToVertexZ()) return;
+
+ Double_t vTPCTrackHisto[9] = {nClust,chi2PerCluster,clustPerFindClust,dca[0],dca[1],eta,phi,pt,q};
+ fTPCTrackHisto->Fill(vTPCTrackHisto);
//
// Fill rec vs MC information
}
// Process events
+ Int_t mult=0; Int_t multP=0; Int_t multN=0;
for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++)
{
- AliESDtrack*track = esdEvent->GetTrack(iTrack);
+ AliESDtrack *track = esdEvent->GetTrack(iTrack);
if(!track) continue;
if(GetAnalysisMode() == 0) ProcessTPC(stack,track);
printf("ERROR: AnalysisMode %d \n",fAnalysisMode);
return;
}
+
+ // TPC only
+ AliESDtrack *tpcTrack = AliESDtrackCuts::GetTPCOnlyTrack(esdEvent,iTrack);
+ if(!tpcTrack) continue;
+
+ // track selection
+ if( fCutsRC->AcceptTrack(tpcTrack) ) {
+ mult++;
+ if(tpcTrack->Charge()>0.) multP++;
+ if(tpcTrack->Charge()<0.) multN++;
+ }
+
+ if(tpcTrack) delete tpcTrack;
}
+ //
+ const AliESDVertex *vtxESD = esdEvent->GetPrimaryVertexTPC();
+ Double_t vTPCEvent[6] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv(),mult,multP,multN};
+ fTPCEventHisto->Fill(vTPCEvent);
}
//_____________________________________________________________________________
// in the folder "folderTPC"
//
TH1::AddDirectory(kFALSE);
- //TH1F *h=0;
+ TH1F *h=0;
TH2F *h2D=0;
TObjArray *aFolderObj = new TObjArray;
-
char name[256];
char title[256];
- for(Int_t i=0; i<5; i++)
+
+ //
+ // event histograms
+ //
+ for(Int_t i=0; i<6; i++)
+ {
+ h = (TH1F*)fTPCEventHisto->Projection(i);
+ sprintf(name,"h_tpc_event_%d",i);
+ h->SetName(name);
+ h->GetXaxis()->SetTitle(fTPCEventHisto->GetAxis(i)->GetTitle());
+ h->GetYaxis()->SetTitle("events");
+ sprintf(title,"%s",fTPCEventHisto->GetAxis(i)->GetTitle());
+ h->SetTitle(title);
+
+ aFolderObj->Add(h);
+ }
+
+ //
+ // Track histograms
+ //
+ for(Int_t i=0; i<9; i++)
+ {
+ h = (TH1F*)fTPCTrackHisto->Projection(i);
+ sprintf(name,"h_tpc_track_%d",i);
+ h->SetName(name);
+ h->GetXaxis()->SetTitle(fTPCTrackHisto->GetAxis(i)->GetTitle());
+ h->GetYaxis()->SetTitle("tracks");
+ sprintf(title,"%s",fTPCTrackHisto->GetAxis(i)->GetTitle());
+ h->SetTitle(title);
+
+ if(i==7) h->Scale(1,"width");
+ aFolderObj->Add(h);
+ }
+
+ //
+ for(Int_t i=0; i<8; i++)
{
- for(Int_t j=i+1; j<6; j++)
+ for(Int_t j=i+1; j<9; j++)
{
- if(j==5) fTPCHisto->GetAxis(5)->SetRangeUser(0.1,10.);
- h2D = (TH2F*)fTPCHisto->Projection(i,j);
- sprintf(name,"h_tpc_%d_vs_%d",i,j);
+ h2D = (TH2F*)fTPCTrackHisto->Projection(i,j);
+ sprintf(name,"h_tpc_track_%d_vs_%d",i,j);
h2D->SetName(name);
- h2D->GetXaxis()->SetTitle(fTPCHisto->GetAxis(j)->GetTitle());
- h2D->GetYaxis()->SetTitle(fTPCHisto->GetAxis(i)->GetTitle());
- sprintf(title,"%s vs %s",fTPCHisto->GetAxis(j)->GetTitle(),fTPCHisto->GetAxis(i)->GetTitle());
+ h2D->GetXaxis()->SetTitle(fTPCTrackHisto->GetAxis(j)->GetTitle());
+ h2D->GetYaxis()->SetTitle(fTPCTrackHisto->GetAxis(i)->GetTitle());
+ sprintf(title,"%s vs %s",fTPCTrackHisto->GetAxis(j)->GetTitle(),fTPCTrackHisto->GetAxis(i)->GetTitle());
h2D->SetTitle(title);
- if(j==5) h2D->SetBit(TH1::kLogX);
+ if(j==7) h2D->SetBit(TH1::kLogX);
aFolderObj->Add(h2D);
}
}
Int_t count=0;
while((obj = iter->Next()) != 0)
{
- AliPerformanceTPC* entry = dynamic_cast<AliPerformanceTPC*>(obj);
- if (entry == 0) continue;
+ AliPerformanceTPC* entry = dynamic_cast<AliPerformanceTPC*>(obj);
+ if (entry == 0) continue;
- fTPCHisto->Add(entry->fTPCHisto);
+ fTPCEventHisto->Add(entry->fTPCEventHisto);
+ fTPCTrackHisto->Add(entry->fTPCTrackHisto);
- count++;
+ count++;
}
return count;
// getters
//
- THnSparse *GetTPCHisto() const { return fTPCHisto; }
+ THnSparse *GetTPCEventHisto() const { return fTPCEventHisto; }
+ THnSparse *GetTPCTrackHisto() const { return fTPCTrackHisto; }
private:
// TPC histogram
- THnSparseF *fTPCHisto; //-> nClust:chi2PerClust:nClust/nFindableClust:eta:phi:pt
+ THnSparseF *fTPCEventHisto; //-> Xv:Yv:Zv:mult:multP:multN
+ THnSparseF *fTPCTrackHisto; //-> nClust:chi2PerClust:nClust/nFindableClust:DCAr:DCAz:eta:phi:pt:charge
// Global cuts objects
AliRecInfoCuts* fCutsRC; // selection cuts for reconstructed tracks