- for (Int_t iTrackNumber = 0; iTrackNumber < esd->GetNumberOfTracks(); iTrackNumber++) {
- AliESDtrack * esdTrack = esd->GetTrack(iTrackNumber);
- UInt_t status = esdTrack->GetStatus();
-
- //select only tracks with ITS refit
- if ((status&AliESDtrack::kITSrefit)==0) continue;
- //select only tracks with TPC refit
- if ((status&AliESDtrack::kTPCrefit)==0) continue;
-
- //select only tracks with the "combined PID"
- if ((status&AliESDtrack::kESDpid)==0) continue;
- Double_t p[3];
- esdTrack->GetPxPyPz(p);
- Double_t momentum = sqrt(pow(p[0],2) + pow(p[1],2) + pow(p[2],2));
- Double_t fPt = sqrt(pow(p[0],2) + pow(p[1],2));
- totalP += momentum;
- meanPt += fPt;
- if(fPt > maxPt) maxPt = fPt;
-
- if(esdTrack->GetSign() > 0) {
- nPos++;
- if(fPt > fLowPtCut) nCh1GeV++;
- if(fPt > fHighPtCut) nCh3GeV++;
- if(fPt > fVeryHighPtCut) nCh10GeV++;
- }
- if(esdTrack->GetSign() < 0) {
- nNeg++;
- if(fPt > fLowPtCut) nCh1GeV++;
- if(fPt > fHighPtCut) nCh3GeV++;
- if(fPt > fVeryHighPtCut) nCh10GeV++;
- }
- if(esdTrack->GetSign() == 0) nNeutr++;
-
- //PID
- Double_t prob[5];
- esdTrack->GetESDpid(prob);
-
- Double_t rcc = 0.0;
- for(Int_t i = 0; i < AliPID::kSPECIES; i++) rcc += prob[i]*partFrac[i];
- if(rcc == 0.0) continue;
- //Bayes' formula
- Double_t w[5];
- for(Int_t i = 0; i < AliPID::kSPECIES; i++) w[i] = prob[i]*partFrac[i]/rcc;
-
- //protons
- if ((w[4]>w[3])&&(w[4]>w[2])&&(w[4]>w[1])&&(w[4]>w[0])) nProtons++;
- //kaons
- if ((w[3]>w[4])&&(w[3]>w[2])&&(w[3]>w[1])&&(w[3]>w[0])) nKaons++;
- //pions
- if ((w[2]>w[4])&&(w[2]>w[3])&&(w[2]>w[1])&&(w[2]>w[0])) nPions++;
- //electrons
- if ((w[0]>w[4])&&(w[0]>w[3])&&(w[0]>w[2])&&(w[0]>w[1])) {
- nElectrons++;
- if(fPt > fLowPtCut) nEl1GeV++;
- if(fPt > fHighPtCut) nEl3GeV++;
- if(fPt > fVeryHighPtCut) nEl10GeV++;
- }
- ntrack++;
- }//esd track loop
-
- /////////////
- //muon code//
- ////////////
- Int_t nMuonTracks = esd->GetNumberOfMuonTracks();
- // loop over all reconstructed tracks (also first track of combination)
- for (Int_t iTrack = 0; iTrack < nMuonTracks; iTrack++) {
- AliESDMuonTrack* muonTrack = esd->GetMuonTrack(iTrack);
- if (muonTrack == 0x0) continue;
-
- // Coordinates at vertex
- fZ = muonTrack->GetZ();
- fY = muonTrack->GetBendingCoor();
- fX = muonTrack->GetNonBendingCoor();
-
- fThetaX = muonTrack->GetThetaX();
- fThetaY = muonTrack->GetThetaY();
-
- fPyz = 1./TMath::Abs(muonTrack->GetInverseBendingMomentum());
- fPzRec = - fPyz / TMath::Sqrt(1.0 + TMath::Tan(fThetaY)*TMath::Tan(fThetaY));
- fPxRec = fPzRec * TMath::Tan(fThetaX);
- fPyRec = fPzRec * TMath::Tan(fThetaY);
- fCharge = Int_t(TMath::Sign(1.,muonTrack->GetInverseBendingMomentum()));
-
- //ChiSquare of the track if needed
- fChisquare = muonTrack->GetChi2()/(2.0 * muonTrack->GetNHit() - 5);
- fEnergy = TMath::Sqrt(fMUONMASS * fMUONMASS + fPxRec * fPxRec + fPyRec * fPyRec + fPzRec * fPzRec);
- fEPvector.SetPxPyPzE(fPxRec, fPyRec, fPzRec, fEnergy);
-
- // total number of muons inside a vertex cut
- if((TMath::Abs(fZ)<fZVertexCut) && (TMath::Sqrt(fY*fY+fX*fX)<fRhoVertexCut)) {
- nMuons++;
- if(fEPvector.Pt() > fLowPtCut) {
- nMu1GeV++;
- if(fEPvector.Pt() > fHighPtCut) {
- nMu3GeV++;
- if (fEPvector.Pt() > fVeryHighPtCut) {
- nMu10GeV++;
- }
- }
- }
- }
- }//muon track loop
-
- // Fill the event tags
- if(ntrack != 0)
- meanPt = meanPt/ntrack;
-
- evTag->SetEventId(iEventNumber+1);
- evTag->SetGUID(guid);
- evTag->SetMD5(md5);
- evTag->SetTURL(turl);
- evTag->SetSize(size);
- evTag->SetVertexX(vertexIn->GetXv());
- evTag->SetVertexY(vertexIn->GetYv());
- evTag->SetVertexZ(vertexIn->GetZv());
- evTag->SetVertexZError(vertexIn->GetZRes());
- evTag->SetVertexFlag(fVertexflag);
-
- evTag->SetT0VertexZ(esd->GetT0zVertex());
-
- evTag->SetTriggerMask(esd->GetTriggerMask());
- evTag->SetTriggerCluster(esd->GetTriggerCluster());
-
- evTag->SetZDCNeutron1Energy(esd->GetZDCN1Energy());
- evTag->SetZDCProton1Energy(esd->GetZDCP1Energy());
- evTag->SetZDCEMEnergy(esd->GetZDCEMEnergy());
- evTag->SetZDCNeutron1Energy(esd->GetZDCN2Energy());
- evTag->SetZDCProton1Energy(esd->GetZDCP2Energy());
- evTag->SetNumOfParticipants(esd->GetZDCParticipants());
-
-
- evTag->SetNumOfTracks(esd->GetNumberOfTracks());
- evTag->SetNumOfPosTracks(nPos);
- evTag->SetNumOfNegTracks(nNeg);
- evTag->SetNumOfNeutrTracks(nNeutr);
-
- evTag->SetNumOfV0s(esd->GetNumberOfV0s());
- evTag->SetNumOfCascades(esd->GetNumberOfCascades());
- evTag->SetNumOfKinks(esd->GetNumberOfKinks());
- evTag->SetNumOfPMDTracks(esd->GetNumberOfPmdTracks());
-
- evTag->SetNumOfProtons(nProtons);
- evTag->SetNumOfKaons(nKaons);
- evTag->SetNumOfPions(nPions);
- evTag->SetNumOfMuons(nMuons);
- evTag->SetNumOfElectrons(nElectrons);
- evTag->SetNumOfPhotons(nGamas);
- evTag->SetNumOfPi0s(nPi0s);
- evTag->SetNumOfNeutrons(nNeutrons);
- evTag->SetNumOfKaon0s(nK0s);
-
- evTag->SetNumOfChargedAbove1GeV(nCh1GeV);
- evTag->SetNumOfChargedAbove3GeV(nCh3GeV);
- evTag->SetNumOfChargedAbove10GeV(nCh10GeV);
- evTag->SetNumOfMuonsAbove1GeV(nMu1GeV);
- evTag->SetNumOfMuonsAbove3GeV(nMu3GeV);
- evTag->SetNumOfMuonsAbove10GeV(nMu10GeV);
- evTag->SetNumOfElectronsAbove1GeV(nEl1GeV);
- evTag->SetNumOfElectronsAbove3GeV(nEl3GeV);
- evTag->SetNumOfElectronsAbove10GeV(nEl10GeV);
-
- evTag->SetNumOfPHOSClusters(esd->GetNumberOfPHOSClusters());
- evTag->SetNumOfEMCALClusters(esd->GetNumberOfEMCALClusters());
-
- evTag->SetTotalMomentum(totalP);
- evTag->SetMeanPt(meanPt);
- evTag->SetMaxPt(maxPt);