]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVGEN/AliDimuCombinator.cxx
Add the number of local boards
[u/mrichter/AliRoot.git] / EVGEN / AliDimuCombinator.cxx
index 12f70e2283f2c5b6a46d4aa6786fc5495a272856..0933aeda574ef42bb88cc9e280dacfd3cb7c0401 100644 (file)
@@ -1,4 +1,4 @@
-/**************************************************************************
+ /**************************************************************************
  * 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) (gAlice->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.;
 }
 
 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()
@@ -190,7 +183,7 @@ void AliDimuCombinator::NextPartnerSelected()
 }
 
 
-TParticle*  AliDimuCombinator::Partner()
+TParticle*  AliDimuCombinator::Partner() const
 {
 // Returns current partner for muon to form a dimuon
     return fMuon2;
@@ -265,7 +258,7 @@ void AliDimuCombinator::SetSecondRange(Int_t from, Int_t to)
 //                       Selection
 //
 
-Bool_t AliDimuCombinator::Selected(TParticle* part)
+Bool_t AliDimuCombinator::Selected(TParticle* part) const
 {
 // Selection cut for single muon 
 //
@@ -278,7 +271,7 @@ Bool_t AliDimuCombinator::Selected(TParticle* part)
     }
 }
 
-Bool_t AliDimuCombinator::Selected(TParticle* part1, TParticle* part2)
+Bool_t AliDimuCombinator::Selected(TParticle* part1, TParticle* part2) const
 {
 // Selection cut for dimuons
 //
@@ -287,7 +280,7 @@ Bool_t AliDimuCombinator::Selected(TParticle* part1, TParticle* part2)
 //
 //                       Kinematics
 //
-Float_t AliDimuCombinator::Mass(TParticle* part1, TParticle* part2)
+Float_t AliDimuCombinator::Mass(TParticle* part1, TParticle* part2) const
 {
 // Invariant mass
 //
@@ -304,7 +297,7 @@ Float_t AliDimuCombinator::Mass(TParticle* part1, TParticle* part2)
     }
 }
 
-Float_t AliDimuCombinator::PT(TParticle* part1, TParticle* part2)
+Float_t AliDimuCombinator::PT(TParticle* part1, TParticle* part2) const
 {
 // Transverse momentum of dimuons
 //
@@ -314,14 +307,14 @@ Float_t AliDimuCombinator::PT(TParticle* part1, TParticle* part2)
     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
 //
@@ -332,7 +325,7 @@ Float_t AliDimuCombinator::Y(TParticle* part1, TParticle* part2)
 }
 //                  Response
 //
-void AliDimuCombinator::SmearGauss(Float_t width, Float_t & value)
+void AliDimuCombinator::SmearGauss(Float_t width, Float_t & value) const
 {
 // Apply gaussian smearing
 //
@@ -341,7 +334,7 @@ void AliDimuCombinator::SmearGauss(Float_t width, Float_t & value)
 //              Weighting
 // 
 
-Float_t AliDimuCombinator::DecayProbability(TParticle* part)
+Float_t AliDimuCombinator::DecayProbability(TParticle* part) const
 {
 // Calculate decay probability for muons from pion and kaon decays
 // 
@@ -390,7 +383,7 @@ Float_t AliDimuCombinator::DecayProbability(TParticle* part)
 //End_Html
 
 
-Float_t AliDimuCombinator::Weight(TParticle* part1, TParticle* part2)
+Float_t AliDimuCombinator::Weight(TParticle* part1, TParticle* part2) const
 {
 // Dimuon weight
 
@@ -457,39 +450,32 @@ Indeed the 2 muons come from the same mother so the
 //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
 //
@@ -507,7 +493,7 @@ Int_t AliDimuCombinator::Origin(TParticle* part)
     return iparent;
 }
 
-Int_t AliDimuCombinator::Type(TParticle *part) 
+Int_t AliDimuCombinator::Type(TParticle *part)  const
 {
 // Return particle type for 
 return part->GetPdgCode();
@@ -516,14 +502,15 @@ 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");
 }