]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVGEN/AliGenParam.cxx
Coding conventions
[u/mrichter/AliRoot.git] / EVGEN / AliGenParam.cxx
index fd3d5ed7f7e706d5fcb4d499150ee07eea85d747..775c8a75c9fb4eff2c0fffe8643b1515661ab295 100644 (file)
 // Decays are performed using Pythia.
 // andreas.morsch@cern.ch
 
-#include "AliGenParam.h"
-#include "AliDecayer.h"
-#include "AliGenMUONlib.h"
-#include "AliRun.h"
-#include <TParticle.h>
-#include <TParticlePDG.h>
+#include <TCanvas.h>
 #include <TDatabasePDG.h>
+#include <TF1.h>
+#include <TH1F.h>
 #include <TLorentzVector.h>
+#include <TMath.h>
+#include <TParticle.h>
+#include <TParticlePDG.h>
+#include <TROOT.h>
 #include <TVirtualMC.h>
 
-#include <TF1.h>
-#include <TCanvas.h>
-#include <TH1.h>
+#include "AliDecayer.h"
+#include "AliGenMUONlib.h"
+#include "AliGenParam.h"
 #include "AliMC.h"
+#include "AliRun.h"
 
 ClassImp(AliGenParam)
 
@@ -46,7 +48,6 @@ ClassImp(AliGenParam)
   */
   //End_Html
 
-//____________________________________________________________
 //____________________________________________________________
 AliGenParam::AliGenParam()
 {
@@ -60,7 +61,7 @@ AliGenParam::AliGenParam()
 
 
 }
-
+//____________________________________________________________
 AliGenParam::AliGenParam(Int_t npart, AliGenLib * Library,  Int_t param, char* tname):AliGenMC(npart)
 {
 // Constructor using number of particles parameterisation id and library
@@ -78,15 +79,13 @@ AliGenParam::AliGenParam(Int_t npart, AliGenLib * Library,  Int_t param, char* t
     SetForceDecay();
     SetDeltaPt(); 
 }
-
 //____________________________________________________________
-
-AliGenParam::AliGenParam(Int_t npart, Int_t param, char* tname):AliGenMC(npart)
+AliGenParam::AliGenParam(Int_t npart, Int_t param, const char* tname, const char* name):AliGenMC(npart)
 {
 // Constructor using parameterisation id and number of particles
 //
-    fName = "Param";
-    fTitle= "Particle Generator using pT and y parameterisation";
+  fName = name;
+  fTitle= "Particle Generator using pT and y parameterisation";
       
     AliGenLib* pLibrary = new AliGenMUONlib();
  
@@ -108,6 +107,7 @@ AliGenParam::AliGenParam(Int_t npart, Int_t param, char* tname):AliGenMC(npart)
     SetChildThetaRange(); 
     SetDeltaPt(); 
 }
+//____________________________________________________________
 
 AliGenParam::AliGenParam(Int_t npart, Int_t param,
                          Double_t (*PtPara) (Double_t*, Double_t*),
@@ -166,16 +166,27 @@ void AliGenParam::Init()
     <img src="picts/AliGenParam.gif">
   */
   //End_Html
-    fPtPara = new TF1("Pt-Parametrization",fPtParaFunc,fPtMin,fPtMax,0);
+    char name[256];
+    sprintf(name, "pt-parameterisation for %s", GetName());
+    
+    if (fPtPara) fPtPara->Delete();
+    fPtPara = new TF1(name, fPtParaFunc, fPtMin, fPtMax,0);
+    gROOT->GetListOfFunctions()->Remove(fPtPara);
 //  Set representation precision to 10 MeV
-    Int_t npx= Int_t((fPtMax-fPtMin)/fDeltaPt);
+    Int_t npx= Int_t((fPtMax - fPtMin) / fDeltaPt);
     
     fPtPara->SetNpx(npx);
+
+    sprintf(name, "y-parameterisation  for %s", GetName());
+    if (fYPara) fYPara->Delete();
+    fYPara  = new TF1(name, fYParaFunc, fYMin, fYMax, 0);
+    gROOT->GetListOfFunctions()->Remove(fYPara);
+
     
-    fYPara  = new TF1("Y-Parametrization",fYParaFunc,fYMin,fYMax,0);
-    TF1 ptPara("Pt-Parametrization(0,15)",fPtParaFunc,0,15,0);
-    TF1 yPara("Y-Parametrization(-6,6)",fYParaFunc,-6,6,0);
+    sprintf(name, "pt-for-%s", GetName());
+    TF1 ptPara(name ,fPtParaFunc, 0, 15, 0);
+    sprintf(name, "y-for-%s", GetName());
+    TF1 yPara(name, fYParaFunc, -6, 6, 0);
 
 //
 // dN/dy| y=0
@@ -222,7 +233,9 @@ void AliGenParam::Generate()
 //
 //
 //  Reinitialize decayer
-    fDecayer->Init();
+  fDecayer->SetForceDecay(fForceDecay);
+  fDecayer->Init();
+
 //
   Float_t polar[3]= {0,0,0};  // Polarisation of the parent particle (for GEANT tracking)
   Float_t origin0[3];         // Origin of the generated parent particle (for GEANT tracking)
@@ -255,7 +268,7 @@ void AliGenParam::Generate()
   while (ipa<fNpart) {
       while(1) {
 //
-// particle type
+// particle type 
          Int_t iPart = fIpParaFunc(fRandom);
          fChildWeight=(fDecayer->GetPartialBranchingRatio(iPart))*fParentWeight;          
          TParticlePDG *particle = pDataBase->GetParticle(iPart);
@@ -453,6 +466,20 @@ void AliGenParam::Generate()
   } // event loop
   SetHighWaterMark(nt);
 }
+//____________________________________________________________________________________
+Float_t AliGenParam::GetRelativeArea(Float_t ptMin, Float_t ptMax, Float_t yMin, Float_t yMax, Float_t phiMin, Float_t phiMax)
+{
+//
+// Normalisation for selected kinematic region
+//
+  Float_t ratio =  
+    fPtPara->Integral(ptMin,ptMax) / fPtPara->Integral( fPtPara->GetXmin(), fPtPara->GetXmax()) *
+    fYPara->Integral(yMin,yMax)/fYPara->Integral(fYPara->GetXmin(),fYPara->GetXmax())   *
+    (phiMax-phiMin)/360.;
+  return TMath::Abs(ratio);
+}
+
+//____________________________________________________________________________________
 
 void AliGenParam::Draw( const char * /*opt*/)
 {