bug #99301: Consolidating headers for AliGenCocktail
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 13 Dec 2012 09:13:25 +0000 (09:13 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 13 Dec 2012 09:13:25 +0000 (09:13 +0000)
https://savannah.cern.ch/bugs/?99301
Marco van Leeuwen

EVGEN/AliGenBox.cxx
EVGEN/AliGenBox.h
EVGEN/AliGenCocktail.cxx
EVGEN/AliGenParam.cxx
EVGEN/AliGenParam.h
STEER/STEER/AliGenerator.cxx
STEER/STEER/AliGenerator.h

index c3ae3ad..34cbeac 100644 (file)
@@ -62,10 +62,19 @@ AliGenBox::AliGenBox(Int_t npart)
 
 //_____________________________________________________________________________
 
-void AliGenBox::Generate()
+void AliGenBox::Generate() {
+  //
+  // Generate one trigger (fNpart particles)
+  //
+  GenerateN(1);
+}
+//_____________________________________________________________________________
+void AliGenBox::GenerateN(Int_t ntimes)
 {
   //
-  // Generate one trigger
+  // Generate ntimes triggers
+  //   total ntimes*fNpart particles
   //
   
     Float_t polar[3]= {0,0,0};
@@ -89,7 +98,8 @@ void AliGenBox::Generate()
 
     Double_t m = TDatabasePDG::Instance()->GetParticle(fIpart)->Mass();
 
-    for(i=0;i<fNpart;i++) {
+    Int_t mult = fNpart*ntimes;
+    for(i=0;i<mult;i++) {
        Rndm(random,3);
        
        if (TestBit(kYRange)) {
@@ -148,7 +158,7 @@ void AliGenBox::Generate()
 
     AliGenEventHeader* header = new AliGenEventHeader("BOX");
     header->SetPrimaryVertex(fVertex);
-    header->SetNProduced(fNpart);
+    header->SetNProduced(mult);
     header->SetInteractionTime(fTime);
     
  // Passes header either to the container or to gAlice
index 07b277b..6996b9f 100644 (file)
@@ -19,6 +19,7 @@ class AliGenBox : public AliGenerator
   AliGenBox();
   AliGenBox(Int_t npart);
   virtual ~AliGenBox() {}
+  virtual void GenerateN(Int_t ntimes);
   virtual void Generate();
   virtual void Init();
   virtual void SetEtaRange(Float_t etamin, Float_t etamax)
index 800602e..ec044f9 100644 (file)
@@ -233,7 +233,7 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp, TFormul
            }
          gen->SetVertex(fVertex.At(0), fVertex.At(1), fVertex.At(2), fTime);
          
-         for (Int_t i = 0; i < ntimes; i++) gen->Generate();
+         gen->GenerateN(ntimes);
          entry->SetLast(partArray->GetEntriesFast());
          preventry = entry;
        }
index 2c78f83..717dae0 100644 (file)
@@ -273,8 +273,16 @@ void AliGenParam::Init()
 //____________________________________________________________
 void AliGenParam::Generate()
 {
+  // 
+  // Generate 1 event (see Generate(Int_t ntimes) for details
   //
-  // Generate 'npart' of light and heavy mesons (J/Psi, upsilon or phi, Pion,
+  GenerateN(1);
+}
+//____________________________________________________________
+void AliGenParam::GenerateN(Int_t ntimes)
+{
+  //
+  // Generate ntimes*'npart' light and heavy mesons (J/Psi, upsilon or phi, Pion,
   // Kaons, Etas, Omegas) and Baryons (proton, antiprotons, neutrons and 
   // antineutrons in the the desired theta, phi and momentum windows; 
   // Gaussian smearing on the vertex is done if selected. 
@@ -322,7 +330,8 @@ void AliGenParam::Generate()
   // Generating fNpart particles
   fNprimaries = 0;
   
-  while (ipa<fNpart) {
+  Int_t nGen = fNpart*ntimes;
+  while (ipa<nGen) {
       while(1) {
       //
       // particle type 
index 29c8f7f..591ed79 100644 (file)
@@ -35,6 +35,7 @@ public:
                Int_t    (*IpPara)(TRandom*)           );
      
     virtual ~AliGenParam();
+    virtual void GenerateN(Int_t ntimes);
     virtual void Generate();
     virtual void Init();
     // select particle type
index 1d082c5..7dfba31 100644 (file)
@@ -216,6 +216,20 @@ void AliGenerator::Init()
 }
 
 //_______________________________________________________________________
+void AliGenerator::GenerateN(Int_t ntimes)
+{
+// 
+//  Run generator n times
+//    Used by AliGenCocktail for adding extra signals in proportion to 
+//    multiplicity/centrality
+//  By default generates one AliGenHeader for each call to Generate()
+//   Can be overloaded (e.g. AliGenBox and AliGenParam) to consolidate headers
+//
+  for (Int_t i=0; i < ntimes; i++) {
+    Generate();
+  }
+}
+//_______________________________________________________________________
 void AliGenerator::SetOrigin(Float_t ox, Float_t oy, Float_t oz)
 {
   //
index 52e3ae1..0bfd1be 100644 (file)
@@ -53,6 +53,7 @@ class AliGenerator : public TNamed, public AliRndm
     virtual void SetNumberParticles(Int_t npart=100) {fNpart=npart;}
     virtual Int_t NumberParticles() const {return fNpart;}
     virtual void SetThetaRange(Float_t thetamin=0, Float_t thetamax=180);
+    virtual void GenerateN(Int_t ntimes);
     virtual void Generate()=0;
     virtual void SetParentWeight(Float_t wgt) {fParentWeight=wgt;}
     virtual void SetChildWeight(Float_t wgt)  {fChildWeight=wgt;}