void AliAnalysisTaskMuonCollisionMultiplicity::FillHistosAOD(Int_t triggerClass)
{
// Fill histos for AOD events
- Int_t nTracks = fAOD->GetNTracks();
+ Int_t nTracks = fAOD->GetNumberOfTracks();
Int_t nDimuons = fAOD->GetNDimuons();
// Fill histos
// Loop on the muons tracks
- for (Int_t ii = 0; ii < nTracks; ii++)
- if (IsUsableMuon(fAOD->GetTrack(ii)))
+ for (Int_t ii = 0; ii < nTracks; ii++){
+ AliAODTrack * aodtrack = dynamic_cast<AliAODTrack*>(fAOD->GetTrack(ii));
+ if(!aodtrack) AliFatal("Not a standard AOD");
+ if (IsUsableMuon(aodtrack))
{
- Double_t matchTrigger = fAOD->GetTrack(ii)->GetMatchTrigger();
+ Double_t matchTrigger = aodtrack->GetMatchTrigger();
if (matchTrigger > 1.0)
matchTrigger = 1.0; // We don't care what type of trigger it is (low or high pT)
- Double_t thetaAbs = (180.0 / TMath::Pi()) * TMath::ATan(fAOD->GetTrack(ii)->GetRAtAbsorberEnd()/505.0);
- Double_t eta = fAOD->GetTrack(ii)->Eta();
- Double_t p = fAOD->GetTrack(ii)->P();
- Double_t pT = fAOD->GetTrack(ii)->Pt();
+ Double_t thetaAbs = (180.0 / TMath::Pi()) * TMath::ATan(aodtrack->GetRAtAbsorberEnd()/505.0);
+ Double_t eta = aodtrack->Eta();
+ Double_t p = aodtrack->P();
+ Double_t pT = aodtrack->Pt();
// For the p used in the pDCA, we want the mean between the p before the muon go through the absorber (p corrected) and after (p uncorrected)
// However p uncorrected is not saved in the AODs
// Instead we define p uncorrected as p corrected minus the mean p lost when a muon go through the absorber
// 2.0 < theta_abs < 3.0 ---> 2.98 GeV
// 3.0 < theta_abs < 10.0 ---> 2.4 GeV
// No correction applied otherwise
- Double_t pDCA = p*fAOD->GetTrack(ii)->DCA();
+ Double_t pDCA = p*aodtrack->DCA();
if (2.0 < thetaAbs && thetaAbs < 3.0)
- pDCA = (p-2.98/2.0) * fAOD->GetTrack(ii)->DCA();
+ pDCA = (p-2.98/2.0) * aodtrack->DCA();
if (3.0 < thetaAbs && thetaAbs < 10.0)
- pDCA = (p-2.4/2.0) * fAOD->GetTrack(ii)->DCA();
+ pDCA = (p-2.4/2.0) * aodtrack->DCA();
Double_t valuesMuon[9] = {static_cast<Double_t>(fTrackletMultiplicity), vertexPosition, pileUp, matchTrigger, thetaAbs, eta, pDCA, static_cast<Double_t>(p), static_cast<Double_t>(pT)};
((THnSparseD *)fSingleMuonList->At(triggerClass))->Fill(valuesMuon);
}
-
+ }
// Loop on Dimuons
for (Int_t ii = 0; ii < nDimuons; ii++)
if (fAOD->GetDimuon(ii)->Charge() == 0.0)
isGoodMult = kFALSE;
// Check if the distance to vertex is inferior to 1 cm
- Double_t distanceToVertex = TMath::Sqrt((particle->Xv() - vertex->GetXv())*(particle->Xv() - vertex->GetXv()) +
- (particle->Yv() - vertex->GetYv())*(particle->Yv() - vertex->GetYv()) +
- (particle->Zv() - vertex->GetZv())*(particle->Zv() - vertex->GetZv()));
+ Double_t distanceToVertex = TMath::Sqrt((particle->Xv() - vertex->GetX())*(particle->Xv() - vertex->GetX()) +
+ (particle->Yv() - vertex->GetY())*(particle->Yv() - vertex->GetY()) +
+ (particle->Zv() - vertex->GetZ())*(particle->Zv() - vertex->GetZ()));
if (distanceToVertex > 1.0)
isGoodMult = kFALSE;