-/**************************************************************************
+ /**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* *
* Author: The ALICE Off-line Project. *
* provided "as is" without express or implied warranty. *
**************************************************************************/
-/*
-$Log$
-Revision 1.10 2001/03/27 11:14:54 morsch
-Weight calculation for correlated particles updated:
-- Decay probability is counted once if muons are decay products
-of the same mother particle. Otherwise, it's counted twice.
-
-Revision 1.9 2001/03/08 13:30:43 morsch
-Make it work with particle stack of V3.05.
-
-Revision 1.8 2000/12/21 16:24:06 morsch
-Coding convention clean-up
-
-Revision 1.7 2000/10/02 15:16:37 morsch
-Correct coding rule violation for member data names of type fi -> fI.
-
-Revision 1.6 2000/06/14 15:19:47 morsch
-Include clean-up (IH)
-
-Revision 1.5 2000/06/09 20:35:32 morsch
-All coding rule violations except RS3 corrected
+/* $Id$ */
-Revision 1.4 2000/03/20 18:03:24 morsch
-Change muon particle code to PDG code.
-
-Revision 1.3 1999/09/29 09:24:08 fca
-Introduction of the Copyright and cvs Log
-
-*/
-
-/*
- 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 "AliDimuCombinator.h"
-#include "AliPDG.h"
-#include "AliRun.h"
-#include <TRandom.h>
#include <TClonesArray.h>
#include <TParticle.h>
+#include <TPDGCode.h>
+#include <TRandom.h>
#include <TTree.h>
+#include "AliDimuCombinator.h"
+#include "AliRun.h"
+#include "AliMC.h"
+
//
ClassImp(AliDimuCombinator)
- AliDimuCombinator::AliDimuCombinator()
+
+AliDimuCombinator::AliDimuCombinator():
+ fNParticle((Int_t) (AliRunLoader::Instance()->TreeK())->GetEntries()),
+ fImuon1(0),
+ fImuon2(0),
+ fImin1(0),
+ fImin2(0),
+ fImax1(fNParticle),
+ fImax2(fNParticle),
+ fRate1(1.),
+ fRate2(1.),
+ fMuon1(0),
+ fMuon2(0),
+ fPtMin(0.),
+ fEtaMin(-10.),
+ fEtaMax(10.)
{
// Constructor
- fNParticle = (Int_t) (gAlice->TreeK())->GetEntries();
- fImuon1 = 0;
- fImuon2 = 0;
- fMuon1 = 0;
- fMuon2 = 0;
- fImin1 = 0;
- fImin2 = 0;
- fImax1 = fNParticle;
- fImax2 = fNParticle;
- fPtMin = 0;
- fEtaMin = -10;
- fEtaMax = -10;
- fRate1 = 1.;
- fRate2 = 1.;
+ fNParticle = (Int_t) (AliRunLoader::Instance()->TreeK())->GetEntries();
}
AliDimuCombinator::AliDimuCombinator(const AliDimuCombinator & combinator)
+ :TObject(combinator),
+ fNParticle(0),
+ fImuon1(0),
+ fImuon2(0),
+ fImin1(0),
+ fImin2(0),
+ fImax1(0),
+ fImax2(0),
+ fRate1(0),
+ fRate2(0),
+ fMuon1(0),
+ fMuon2(0),
+ fPtMin(0.),
+ fEtaMin(0.),
+ fEtaMax(0.)
{
// Dummy copy constructor
+ combinator.Copy(*this);
}
//
// Iterators
//
-TParticle* AliDimuCombinator::Particle(Int_t i)
+TParticle* AliDimuCombinator::Particle(Int_t i) const
{
- return gAlice->Particle(i);
+// Return next particle
+//
+ return gAlice->GetMCApp()->Particle(i);
}
TParticle* AliDimuCombinator::FirstMuon()
}
-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(const TParticle* part) const
{
// Selection cut for single muon
//
}
}
-Bool_t AliDimuCombinator::Selected(TParticle* part1, TParticle* part2)
+Bool_t AliDimuCombinator::Selected(const TParticle* part1, const TParticle* part2) const
{
// Selection cut for dimuons
//
//
// Kinematics
//
-Float_t AliDimuCombinator::Mass(TParticle* part1, TParticle* part2)
+Float_t AliDimuCombinator::Mass(const TParticle* part1, const TParticle* part2) const
{
// Invariant mass
//
}
}
-Float_t AliDimuCombinator::PT(TParticle* part1, TParticle* part2)
+Float_t AliDimuCombinator::PT(const TParticle* part1, const 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(const TParticle* part1, const TParticle* part2) const
{
// Pz of dimuon system
//
return part1->Pz()+part2->Pz();
}
-Float_t AliDimuCombinator::Y(TParticle* part1, TParticle* part2)
+Float_t AliDimuCombinator::Y(const TParticle* part1, const 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(const 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(const TParticle* part1, const TParticle* part2) const
{
// Dimuon weight
//End_Html
-Float_t AliDimuCombinator::Weight(TParticle* part)
+Float_t AliDimuCombinator::Weight(const 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(const TParticle* part1, const 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(const TParticle* part) const
{
// Return pointer to parent
//
return Particle(part->GetFirstMother());
}
-Int_t AliDimuCombinator::Origin(TParticle* part)
+Int_t AliDimuCombinator::Origin(const TParticle* part) const
{
// Return pointer to primary particle
//
return iparent;
}
-Int_t AliDimuCombinator::Type(TParticle *part)
+Int_t AliDimuCombinator::Type(const TParticle *part) const
{
// Return particle type for
return part->GetPdgCode();
AliDimuCombinator& AliDimuCombinator::operator=(const AliDimuCombinator& rhs)
{
// Assignment operator
+ rhs.Copy(*this);
return *this;
}
-void AliDimuCombinator::Copy(AliDimuCombinator &combi) const
+void AliDimuCombinator::Copy(TObject&) const
{
//
- // Copy *this onto lego -- not implemented
+ // Copy
//
Fatal("Copy","Not implemented!\n");
}