Option for generation according to subevent rates added.
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 7 Mar 2006 13:52:01 +0000 (13:52 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 7 Mar 2006 13:52:01 +0000 (13:52 +0000)
EVGEN/AliGenCocktail.cxx
EVGEN/AliGenCocktail.h

index 084f332..96fa73a 100644 (file)
@@ -41,12 +41,13 @@ AliGenCocktail::AliGenCocktail()
 // Constructor
     fName = "Cocktail";
     fTitle= "Particle Generator using cocktail of generators";
-    flnk1 = 0;
-    flnk2 = 0;
-    fNGenerators=0;
-    fEntries = 0;
-    fRandom  = kFALSE;
-    fHeader  = 0;
+    flnk1            = 0;
+    flnk2            = 0;
+    fNGenerators     = 0;
+    fEntries         = 0;
+    fHeader          = 0;
+    fRandom          = kFALSE;
+    fUsePerEventRate = kFALSE;
 }
 
 AliGenCocktail::AliGenCocktail(const AliGenCocktail & cocktail):
@@ -167,6 +168,8 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp)
     AliGenCocktailEntry *preventry = 0;
     AliGenerator* gen = 0;
     if (fHeader) delete fHeader;
+
+    
     fHeader = new AliGenCocktailEventHeader("Cocktail Header");
 
     TObjArray *partArray = gAlice->GetMCApp()->Particles();
@@ -184,8 +187,10 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp)
        //
        // Loop over generators and generate events
        Int_t igen=0;
-       
        while((entry = (AliGenCocktailEntry*)next())) {
+
+           if (fUsePerEventRate && (gRandom->Rndm() > entry->Rate())) continue;
+           
            igen++;
            if (igen ==1) {
                entry->SetFirst(0);
@@ -210,7 +215,7 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp)
            entry->SetLast(partArray->GetEntriesFast());
            preventry = entry;
        }  
-    } else {
+    } else if (fRandom) {
        //
        // Select a generator randomly
        //
@@ -227,8 +232,7 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp)
        entry->Generator()->SetVertex(fVertex.At(0), fVertex.At(1), fVertex.At(2));
        entry->Generator()->Generate();
        entry->SetLast(partArray->GetEntriesFast());
-    }
-    
+    } 
     
     next.Reset();
 
index 013d271..4015e77 100644 (file)
@@ -30,6 +30,7 @@ class AliGenCocktail : public AliGenerator
     virtual void Generate();
     virtual void SetVertexSmear(VertexSmear_t smear);
     virtual void SetRandomise(Bool_t flag) {fRandom = flag;}
+    virtual void UsePerEventRates() {fUsePerEventRate  = kTRUE;}
            
     //
     // Add a new generator to the list
@@ -47,6 +48,7 @@ class AliGenCocktail : public AliGenerator
  protected:
     Int_t fNGenerators;                 // Number of generators booked
     Bool_t fRandom;                     // Flag to select random generator from list
+    Bool_t fUsePerEventRate;            // Flag to generate the events according to the rate per event    
     TArrayF  fProb;                     // Probability of an event (if fRandom == kTRUE)
     TList  *fEntries;                   // List of Generators
     TObjLink *flnk1;                    // ! Iterator for first generator