/// (authors: H.Woehri, A.de Falco)
// ROOT classes
-
-#include <TClonesArray.h>
-#include <TLorentzVector.h>
+#include "TLorentzVector.h"
class AliMUONTrack;
class AliESDMuonTrack;
-class AliRunLoader;
-
+class AliStack;
class TParticle;
+class AliMUONVTrackStore;
-class AliMUONTrackLight : public TObject {
+class AliMUONTrackLight : public TObject {
public:
AliMUONTrackLight();
AliMUONTrackLight(AliESDMuonTrack* muonTrack);
AliMUONTrackLight(const AliMUONTrackLight &muonCopy);
- virtual ~AliMUONTrackLight(){;}
+ virtual ~AliMUONTrackLight();
+ /// Set 4-momentum of the generated particle
void SetPGen(TLorentzVector pgen) {fPgen = pgen;}
+ /// Return 4-momentum of the generated particle
TLorentzVector GetPGen() const {return fPgen;}
+ /// Set reconstructed 4-momentum
void SetPRec(TLorentzVector prec) {fPrec = prec;}
+ /// Return reconstructed 4-momentum
TLorentzVector GetPRec() const {return fPrec;}
+ /// Set primary vertex position from the ITS
void SetVertex(Double_t *xyz) {for (Int_t i=0; i<3; i++) fXYZ[i]=xyz[i];}
+ /// Return primary vertex x position from the ITS
+ Double_t GetX() { return fXYZ[0]; }
+ /// Return primary vertex y position from the ITS
+ Double_t GetY() { return fXYZ[1]; }
+ /// Return primary vertex z position from the ITS
+ Double_t GetZ() { return fXYZ[2]; }
+ /// Return primary vertex position from the ITS
Double_t* GetVertex() { return fXYZ; }
+ /// Set chi2 / ndf in the MUON track fit
+ void SetChi2(Double_t chi2) {fChi2=chi2;}
+ /// Return chi2 / ndf in the MUON track fit
+ Double_t GetChi2() { return fChi2; }
+ /// Set weight assigned to the muon
+ void SetWeight(Double_t w) {fWeight=w;}
+ /// Return weight assigned to the muon
+ Double_t GetWeight() { return fWeight; }
+
+ /// Set muon charge
void SetCharge(Int_t charge) {fCharge = charge;}
+ /// Return muon charge
Int_t GetCharge() const {return fCharge;}
+ /// Return hadronised parents and grandparents
Int_t GetParentPDGCode(Int_t index = 0) const { return fParentPDGCode[index]; }
+ /// Return line of Pythia output for hadronised parents & grandparents
Int_t GetParentPythiaLine(Int_t index = 0) const { return fParentPythiaLine[index]; }
+ /// Return pdg of the string [0], quarks/gluons [1,2], sometimes proton [3]
Int_t GetQuarkPDGCode(Int_t index = 0) const { return fQuarkPDGCode[index]; }
+ /// Return line of Pythia output for string [0] and quarks [1,2], sometimes proton [3]
Int_t GetQuarkPythiaLine(Int_t index = 0) const { return fQuarkPythiaLine[index]; }
+ /// Return line of Pythia output for string [0] and quarks [1,2], sometimes proton [3]
Int_t GetTrackPythiaLine() const {return fTrackPythiaLine;}
+ /// Return pdg code of the rec. track (in general will be a muon)
Int_t GetTrackPDGCode() const {return fTrackPDGCode;}
+ /// Set line of kin. stack where rec. track (in general, the muon) is stored
void SetTrackPythiaLine(Int_t trackLine) {fTrackPythiaLine = trackLine;}
+ /// Set pdg code of the rec. track (in general will be a muon)
void SetTrackPDGCode(Int_t trackPdg) {fTrackPDGCode = trackPdg;}
- void ComputePRecAndChargeFromESD(AliESDMuonTrack* muonTrack);
+ void FillFromESD(AliESDMuonTrack* muonTrack, Double_t zvert=-9999);
+ void FillFromAliMUONTrack(AliMUONTrack *trackReco,Double_t zvert=-9999);
+ /// Return info if is a muon
Bool_t IsAMuon() const { return (TMath::Abs(fTrackPDGCode)==13); }
+ Bool_t IsParentPionOrKaon(Int_t idParent = 0);
void SetPxPyPz(Double_t px, Double_t py, Double_t pz);
+ /// Set flag for trigger
void SetTriggered(Bool_t isTriggered) { fIsTriggered = isTriggered; }
+ /// Return flag for trigger
Bool_t IsTriggered() const { return fIsTriggered; }
- TParticle* FindRefTrack(AliMUONTrack* trackReco, TClonesArray* trackRefArray, AliRunLoader *runLoader);
+ TParticle* FindRefTrack(AliMUONTrack* trackReco, AliMUONVTrackStore* trackRefArray, AliStack* stack);
Int_t TrackCheck(Bool_t *compTrack);
+ /// Return acually filled no. of *fragmented* parents
Int_t GetNParents() const {return fNParents;}
- void FillMuonHistory(AliRunLoader *runLoader, TParticle *part);
+ void FillMuonHistory(AliStack *stack, TParticle *part);
Bool_t IsB0(Int_t intTest) const;//checks if the provided PDG code corresponds to a neutral B meson
Bool_t IsMotherAResonance(Int_t index=0) const;
+ /// Return flag for oscillation
Bool_t GetOscillation() const {return fOscillation;}
virtual void PrintInfo(Option_t* opt); //"H" muon's decay history
//"K" muon kinematics
//"A" all variables
Int_t GetParentFlavour(Int_t idParent=0) const;
+ Bool_t IsDiquark(Int_t pdg);
protected:
- static const Int_t fgkNParentsMax = 5; /// maximum number of parents
- TLorentzVector fPrec; /// reconstructed 4-momentum
- Double_t fXYZ[3]; /// primary vertex position from the ITS
- Bool_t fIsTriggered; /// flag for trigger
- Int_t fCharge; /// muon charge
- Float_t fCentr; /// centrality
- TLorentzVector fPgen; /// 4-momentum of the generated particle
- Int_t fTrackPythiaLine; ///line of kin. stack where rec. track (in general, the muon) is stored
- Int_t fTrackPDGCode; ///pdg code of the rec. track (in general will be a muon)
- Int_t fParentPDGCode[fgkNParentsMax]; /// hadronised parents and grandparents
- Int_t fParentPythiaLine[fgkNParentsMax];///line of Pythia output for hadronised parents & grandparents
- Int_t fQuarkPDGCode[4]; /// pdg of the string [0], quarks/gluons [1,2], sometimes proton [3]
- Int_t fQuarkPythiaLine[4]; ///line of Pythia output for string [0] and quarks [1,2], sometimes proton [3]
- Bool_t fOscillation; /// flag for oscillation
- Int_t fNParents; ///acually filled no. of *fragmented* parents
+ static const Int_t fgkNParentsMax = 5; ///< maximum number of parents
+ TLorentzVector fPrec; ///< reconstructed 4-momentum
+ Double_t fXYZ[3]; ///< primary vertex position from the ITS
+ Bool_t fIsTriggered; ///< flag for trigger
+ Int_t fCharge; ///< muon charge
+ Double_t fChi2; ///< chi2 / ndf in the MUON track fit
+ Float_t fCentr; ///< centrality
+ TLorentzVector fPgen; ///< 4-momentum of the generated particle
+ Int_t fTrackPythiaLine; ///< line of kin. stack where rec. track (in general, the muon) is stored
+ Int_t fTrackPDGCode; ///< pdg code of the rec. track (in general will be a muon)
+ Int_t fParentPDGCode[fgkNParentsMax]; ///< hadronised parents and grandparents
+ Int_t fParentPythiaLine[fgkNParentsMax];///< line of Pythia output for hadronised parents & grandparents
+ Int_t fQuarkPDGCode[4]; ///< pdg of the string [0], quarks/gluons [1,2], sometimes proton [3]
+ Int_t fQuarkPythiaLine[4]; ///< line of Pythia output for string [0] and quarks [1,2], sometimes proton [3]
+ Bool_t fOscillation; ///< flag for oscillation
+ Int_t fNParents; ///< acually filled no. of *fragmented* parents
+ Double_t fWeight; ///< weight assigned to the muon
+ /// Set flag for oscillation
void SetOscillation(Bool_t oscillation) { fOscillation = oscillation; }
+ /// Set hadronised parents and grandparents
void SetParentPDGCode(Int_t index, Int_t pdg) { fParentPDGCode[index] = pdg; }
+ /// Set line of Pythia output for hadronised parents & grandparents
void SetParentPythiaLine(Int_t index, Int_t line) { fParentPythiaLine[index] = line; }
+ /// Set pdg of the string [0], quarks/gluons [1,2], sometimes proton [3]
void SetQuarkPDGCode(Int_t index, Int_t pdg){ fQuarkPDGCode[index] = pdg; }
+ /// Set line of Pythia output for string [0] and quarks [1,2], sometimes proton [3]
void SetQuarkPythiaLine(Int_t index, Int_t line){ fQuarkPythiaLine[index] = line; }
void ResetQuarkInfo();