/* $Id$ */
-/*
- Class for dimuon analysis and fast dimuon simulation.
- It provides single and dimuon iterators, cuts, weighting, kinematic
- It uses the AliRun particle tree.
- Comments and suggestions to
- andreas.morsch@cern.ch
-*/
+//
+// Class for dimuon analysis and fast dimuon simulation.
+// It provides single and dimuon iterators, cuts, weighting, kinematic
+// It uses the AliRun particle tree.
+// Comments and suggestions to
+// andreas.morsch@cern.ch
+
#include <TClonesArray.h>
#include <TParticle.h>
//
// Iterators
//
-TParticle* AliDimuCombinator::Particle(Int_t i)
+TParticle* AliDimuCombinator::Particle(Int_t i) const
{
+// Return next particle
+//
return gAlice->GetMCApp()->Particle(i);
}
}
-TParticle* AliDimuCombinator::Partner()
+TParticle* AliDimuCombinator::Partner() const
{
// Returns current partner for muon to form a dimuon
return fMuon2;
// Selection
//
-Bool_t AliDimuCombinator::Selected(TParticle* part)
+Bool_t AliDimuCombinator::Selected(TParticle* part) const
{
// Selection cut for single muon
//
}
}
-Bool_t AliDimuCombinator::Selected(TParticle* part1, TParticle* part2)
+Bool_t AliDimuCombinator::Selected(TParticle* part1, TParticle* part2) const
{
// Selection cut for dimuons
//
//
// Kinematics
//
-Float_t AliDimuCombinator::Mass(TParticle* part1, TParticle* part2)
+Float_t AliDimuCombinator::Mass(TParticle* part1, TParticle* part2) const
{
// Invariant mass
//
}
}
-Float_t AliDimuCombinator::PT(TParticle* part1, TParticle* part2)
+Float_t AliDimuCombinator::PT(TParticle* part1, TParticle* part2) const
{
// Transverse momentum of dimuons
//
return TMath::Sqrt(px*px+py*py);
}
-Float_t AliDimuCombinator::Pz(TParticle* part1, TParticle* part2)
+Float_t AliDimuCombinator::Pz(TParticle* part1, TParticle* part2) const
{
// Pz of dimuon system
//
return part1->Pz()+part2->Pz();
}
-Float_t AliDimuCombinator::Y(TParticle* part1, TParticle* part2)
+Float_t AliDimuCombinator::Y(TParticle* part1, TParticle* part2) const
{
// Rapidity of dimuon system
//
}
// Response
//
-void AliDimuCombinator::SmearGauss(Float_t width, Float_t & value)
+void AliDimuCombinator::SmearGauss(Float_t width, Float_t & value) const
{
// Apply gaussian smearing
//
// Weighting
//
-Float_t AliDimuCombinator::DecayProbability(TParticle* part)
+Float_t AliDimuCombinator::DecayProbability(TParticle* part) const
{
// Calculate decay probability for muons from pion and kaon decays
//
//End_Html
-Float_t AliDimuCombinator::Weight(TParticle* part1, TParticle* part2)
+Float_t AliDimuCombinator::Weight(TParticle* part1, TParticle* part2) const
{
// Dimuon weight
//End_Html
-Float_t AliDimuCombinator::Weight(TParticle* part)
+Float_t AliDimuCombinator::Weight(TParticle* part) const
{
// Single muon weight
return (part->GetWeight())*(Parent(part)->GetWeight())*fRate1;
}
-Bool_t AliDimuCombinator::Correlated(TParticle* part1, TParticle* part2)
+Bool_t AliDimuCombinator::Correlated(TParticle* part1, TParticle* part2) const
{
// Check if muons are correlated
//
if ((Origin(part1) >= 0) && Origin(part1) == Origin(part2)) {
-/*
- printf("\n origin %d %d ",
- Type(Particle(Origin(part1))),
- Type(Particle(Origin(part2))));
- printf("\n parent %d %d \n \n ",
- Type(Parent(part1)),
- Type(Parent(part2)));
-*/
+
return kTRUE;
} else {
return kFALSE;
}
}
-TParticle* AliDimuCombinator::Parent(TParticle* part)
+TParticle* AliDimuCombinator::Parent(TParticle* part) const
{
// Return pointer to parent
//
return Particle(part->GetFirstMother());
}
-Int_t AliDimuCombinator::Origin(TParticle* part)
+Int_t AliDimuCombinator::Origin(TParticle* part) const
{
// Return pointer to primary particle
//
return iparent;
}
-Int_t AliDimuCombinator::Type(TParticle *part)
+Int_t AliDimuCombinator::Type(TParticle *part) const
{
// Return particle type for
return part->GetPdgCode();
//
// Iterators
// Access to particle stack
- TParticle* Particle(Int_t i);
+ TParticle* Particle(Int_t i) const;
// Single muons
TParticle* FirstMuon();
TParticle* NextMuon();
void SetPtMin(Float_t ptmin) {fPtMin=ptmin;}
void SetEtaCut(Float_t etamin, Float_t etamax)
{fEtaMin=etamin; fEtaMax=etamax;}
- Bool_t Selected(TParticle* part);
- Bool_t Selected(TParticle* part1, TParticle* part2);
+ Bool_t Selected(TParticle* part) const;
+ Bool_t Selected(TParticle* part1, TParticle* part2) const;
// Kinematics
- Float_t Mass(TParticle* part1, TParticle* part);
- Float_t PT(TParticle* part1, TParticle* part);
- Float_t Pz(TParticle* part1, TParticle* part);
- Float_t Y(TParticle* part1, TParticle* part);
+ Float_t Mass(TParticle* part1, TParticle* part) const;
+ Float_t PT(TParticle* part1, TParticle* part) const;
+ Float_t Pz(TParticle* part1, TParticle* part) const;
+ Float_t Y(TParticle* part1, TParticle* part) const;
// Response
- void SmearGauss(Float_t width, Float_t & value);
+ void SmearGauss(Float_t width, Float_t & value) const;
// Weight
- Bool_t Correlated(TParticle* part1, TParticle* part2);
+ Bool_t Correlated(TParticle* part1, TParticle* part2) const;
void SetRate(Float_t rate) {fRate1=rate;}
void SetRate(Float_t rate1, Float_t rate2 ) {fRate1=rate1; fRate2=rate2;}
- Float_t Weight(TParticle* part);
- Float_t Weight(TParticle* part1, TParticle* part);
- Float_t DecayProbability(TParticle* part);
+ Float_t Weight(TParticle* part) const;
+ Float_t Weight(TParticle* part1, TParticle* part) const;
+ Float_t DecayProbability(TParticle* part) const;
private:
void FirstPartner();
void NextPartner();
void FirstPartnerSelected();
void NextPartnerSelected();
- Int_t Origin(TParticle* part);
- TParticle* Parent(TParticle* part);
- TParticle* Partner();
- Int_t Type(TParticle *part);
+ Int_t Origin(TParticle* part) const;
+ TParticle* Parent(TParticle* part) const;
+ TParticle* Partner() const;
+ Int_t Type(TParticle *part) const;
AliDimuCombinator(const AliDimuCombinator &combinator);
AliDimuCombinator & operator=(const AliDimuCombinator & rhs);