fEvent(0x0),
fESD(0x0),
fVtx(0x0),
+ fVtxAOD(0x0),
fTrackCuts(0x0),
fTrackCutsITSLoose(0x0),
fTrackCutsTPConly(0x0),
fPtDCA2D(0x0),
fPtDCAZ(0x0),
fPtNClustersTPC(0x0),
+ fPtNClustersTPCPhi(0x0),
fPtNClustersTPCIter1(0x0),
fPtNClustersTPCIter1Phi(0x0),
fPtNClustersTPCShared(0x0),
fEvent(0x0),
fESD(0x0),
fVtx(0x0),
+ fVtxAOD(0x0),
fTrackCuts(0x0),
fTrackCutsITSLoose(0x0),
fTrackCutsTPConly(0x0),
fPtDCA2D(0x0),
fPtDCAZ(0x0),
fPtNClustersTPC(0x0),
+ fPtNClustersTPCPhi(0x0),
fPtNClustersTPCIter1(0x0),
fPtNClustersTPCIter1Phi(0x0),
fPtNClustersTPCShared(0x0),
}
//________________________________________________________________________
-void AliPWG4HighPtTrackQA::SetPtBinEdges(Int_t region, Double_t ptmax, Double_t ptBinWidth) {
+void AliPWG4HighPtTrackQA::SetPtBinEdges(Int_t region, Double_t ptmax, Double_t ptBinWidth)
+{
//
// Set variable bin sizes for pT axis in histos
//
}
//________________________________________________________________________
-void AliPWG4HighPtTrackQA::UserCreateOutputObjects() {
+void AliPWG4HighPtTrackQA::UserCreateOutputObjects()
+{
//Create output objects
AliDebug(2,Form(">> AliPWG4HighPtTrackQA::UserCreateOutputObjects \n"));
fPtNClustersTPC = new TH2F("fPtNClustersTPC","fPtNClustersTPC",fgkNPtBins,binsPt,fgkNNClustersTPCBins,binsNClustersTPC);
fHistList->Add(fPtNClustersTPC);
+ fPtNClustersTPCPhi = new TH2F("fPtNClustersTPCPhi","fPtNClustersTPCPhi",fgkNPhiBins,binsPhi,fgkNNClustersTPCBins,binsNClustersTPC);
+ fHistList->Add(fPtNClustersTPCPhi);
+
fPtNClustersTPCIter1 = new TH2F("fPtNClustersTPCIter1","fPtNClustersTPCIter1",fgkNPtBins,binsPt,fgkNNClustersTPCBins,binsNClustersTPC);
fHistList->Add(fPtNClustersTPCIter1);
}
//________________________________________________________________________
-Bool_t AliPWG4HighPtTrackQA::SelectEvent() {
+Bool_t AliPWG4HighPtTrackQA::SelectEvent()
+{
//
// Decide if event should be selected for analysis
//
}
}
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;
}
//________________________________________________________________________
-Int_t AliPWG4HighPtTrackQA::CalculateCentrality(AliVEvent *ev){
+Int_t AliPWG4HighPtTrackQA::CalculateCentrality(AliVEvent *ev)
+{
//
// Get centrality from ESD or AOD
//
}
//________________________________________________________________________
-Int_t AliPWG4HighPtTrackQA::CalculateCentrality(AliESDEvent *esd){
+Int_t AliPWG4HighPtTrackQA::CalculateCentrality(AliESDEvent *esd)
+{
//
// Get centrality from ESD
//
}
//________________________________________________________________________
-Int_t AliPWG4HighPtTrackQA::CalculateCentrality(const AliAODEvent *aod){
+Int_t AliPWG4HighPtTrackQA::CalculateCentrality(const AliAODEvent *aod)
+{
//
// Get centrality from AOD
//
}
//________________________________________________________________________
-Int_t AliPWG4HighPtTrackQA::GetCentralityClass(Float_t cent) const {
+Int_t AliPWG4HighPtTrackQA::GetCentralityClass(Float_t cent) const
+{
//
// Get centrality class
//
}
//________________________________________________________________________
-void AliPWG4HighPtTrackQA::UserExec(Option_t *) {
+void AliPWG4HighPtTrackQA::UserExec(Option_t *)
+{
// Main loop
// Called for each event
AliDebug(2,Form(">> AliPWG4HighPtTrackQA::UserExec \n"));
}
//________________________________________________________________________
-void AliPWG4HighPtTrackQA::DoAnalysisESD() {
+void AliPWG4HighPtTrackQA::DoAnalysisESD()
+{
//
// Run analysis on ESD
//
}
//________________________________________________________________________
-void AliPWG4HighPtTrackQA::DoAnalysisAOD() {
+void AliPWG4HighPtTrackQA::DoAnalysisAOD()
+{
//
// Do QA on AOD input
//
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);
+ fVariables->SetAt(0.,7); //ConstrainedChi2TPC -> not available in AOD
fVariables->SetAt(0.,8);
fVariables->SetAt(GetTrackLengthTPC(aodtrack),9);
- fVariables->SetAt(aodtrack->Chi2perNDF(),10);
+ Float_t chi2pndf = aodtrack->Chi2perNDF();
+ //if(fVariables->At(5)>0.) chi2pndf = aodtrack->GetTPCchi2()/fVariables->At(5);
+ fVariables->SetAt(chi2pndf,10);
fVariables->SetAt(GetTPCClusterInfo(aodtrack,2,1,0,159,kFALSE),11);
Float_t crossedRowsTPCNClsF = 0.;
if(aodtrack->GetTPCNclsF()>0.) crossedRowsTPCNClsF = fVariables->At(11)/aodtrack->GetTPCNclsF();
fPtAll->Fill(fVariables->At(0));
FillHistograms();
-
}
-
}
//________________________________________________________________________
-void AliPWG4HighPtTrackQA::FillHistograms() {
+void AliPWG4HighPtTrackQA::FillHistograms()
+{
//
// Fill all QA histograms
//
fPtDCA2D->Fill(fVariables->At(0),fVariables->At(3));
fPtDCAZ->Fill(fVariables->At(0),fVariables->At(4));
fPtNClustersTPC->Fill(fVariables->At(0),fVariables->At(5));
+ fPtNClustersTPCPhi->Fill(fVariables->At(1),fVariables->At(5));
fPtNPointITS->Fill(fVariables->At(0),fVariables->At(6));
fPtNPointITSPhi->Fill(fVariables->At(0),fVariables->At(6),fVariables->At(1));
}
//________________________________________________________________________
-Bool_t AliPWG4HighPtTrackQA::PythiaInfoFromFile(const char* currFile,Float_t &fXsec,Float_t &fTrials){
+Bool_t AliPWG4HighPtTrackQA::PythiaInfoFromFile(const char* currFile,Float_t &fXsec,Float_t &fTrials)
+{
//
// get the cross section and the trails either from pyxsec.root or from pysec_hists.root
// This is to called in Notify and should provide the path to the AOD/ESD file
}
return kTRUE;
}
+
//________________________________________________________________________
Bool_t AliPWG4HighPtTrackQA::Notify()
{
}
//________________________________________________________________________
-AliGenPythiaEventHeader* AliPWG4HighPtTrackQA::GetPythiaEventHeader(const AliMCEvent *mcEvent){
+AliGenPythiaEventHeader* AliPWG4HighPtTrackQA::GetPythiaEventHeader(const AliMCEvent *mcEvent)
+{
if(!mcEvent)return 0;
AliGenEventHeader* genHeader = mcEvent->GenEventHeader();
}
//_______________________________________________________________________
-Int_t AliPWG4HighPtTrackQA::GetTrackLengthTPC(const AliESDtrack *track) const {
+Int_t AliPWG4HighPtTrackQA::GetTrackLengthTPC(const AliESDtrack *track) const
+{
//
// returns distance between 1st and last hit in TPC
// distance given in number of padrows
}
//_______________________________________________________________________
-Int_t AliPWG4HighPtTrackQA::GetTrackLengthTPC(const AliAODTrack *track) const {
+Int_t AliPWG4HighPtTrackQA::GetTrackLengthTPC(const AliAODTrack *track) const
+{
//
// returns distance between 1st and last hit in TPC
// distance given in number of padrows
}
//_______________________________________________________________________
-Float_t AliPWG4HighPtTrackQA::GetGoldenChi2(AliESDtrack *origtrack) {
+Float_t AliPWG4HighPtTrackQA::GetGoldenChi2(AliESDtrack *origtrack)
+{
//
// Return chi2 between global and TPC constrained track
// track should be the global unconstrained track
}
//_______________________________________________________________________
-Float_t AliPWG4HighPtTrackQA::GetGGCChi2(AliESDtrack *origtrack) {
+Float_t AliPWG4HighPtTrackQA::GetGGCChi2(AliESDtrack *origtrack)
+{
//
// Return chi2 between global and global constrained track
// track should be the global unconstrained track