ROOT logo
#ifndef ALIGENCOCKTAIL_H
#define ALIGENCOCKTAIL_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

// Container class for AliGenerator through recursion.
// (Container is itself an AliGenerator)
// Author: andreas.morsch@cern.ch 
//

#include "AliGenerator.h"
#include <TArrayF.h>
#include <TList.h>

class AliGenCocktailEntry;
class AliGenCocktailEventHeader;
class TArrayF;
class TFormula;

class AliGenCocktail : public AliGenerator
{
 public:
    AliGenCocktail();
     
    virtual ~AliGenCocktail();
    virtual void Init();
    virtual void FinishRun();
    virtual void Generate();
    virtual void SetVertexSmear(VertexSmear_t smear);
    virtual void SetRandomise(Bool_t flag) {fSRandom = flag;}
    virtual void UsePerEventRates() {fUsePerEventRate  = kTRUE;}
	    
    //
    // Add a new generator to the list
    virtual void AddGenerator
      (AliGenerator *Generator, const char* Name, Float_t RateExp, TFormula* formula = 0, Int_t ntimes = 1);
    virtual TList* Entries() {return fEntries;}
    // Iterators
    AliGenCocktailEntry*  FirstGenerator();
    AliGenCocktailEntry*  NextGenerator();
    void FirstGeneratorPair(AliGenCocktailEntry*&e1, AliGenCocktailEntry*&e2);
    void NextGeneratorPair (AliGenCocktailEntry*&e1, AliGenCocktailEntry*&e2);
    virtual void AddHeader(AliGenEventHeader* header);
	    
 protected:
    Int_t fNGenerators;                 // Number of generators booked
    Float_t fTotalRate;                 // Total rate of the generators booked
    Bool_t fSRandom;                    // 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 fSRandom == kTRUE)
    TList  *fEntries;                   // List of Generators
    TObjLink *flnk1;                    // ! Iterator for first generator
    TObjLink *flnk2;                    // ! Iterator for second generator
    AliGenCocktailEventHeader* fHeader; // !Header container  
			   
//
 private:
    AliGenCocktail(const AliGenCocktail &cocktail);
    AliGenCocktail & operator=(const AliGenCocktail & rhs);

    ClassDef(AliGenCocktail, 2) // Particle cocktail generator a la SHAKER
};

#endif





 AliGenCocktail.h:1
 AliGenCocktail.h:2
 AliGenCocktail.h:3
 AliGenCocktail.h:4
 AliGenCocktail.h:5
 AliGenCocktail.h:6
 AliGenCocktail.h:7
 AliGenCocktail.h:8
 AliGenCocktail.h:9
 AliGenCocktail.h:10
 AliGenCocktail.h:11
 AliGenCocktail.h:12
 AliGenCocktail.h:13
 AliGenCocktail.h:14
 AliGenCocktail.h:15
 AliGenCocktail.h:16
 AliGenCocktail.h:17
 AliGenCocktail.h:18
 AliGenCocktail.h:19
 AliGenCocktail.h:20
 AliGenCocktail.h:21
 AliGenCocktail.h:22
 AliGenCocktail.h:23
 AliGenCocktail.h:24
 AliGenCocktail.h:25
 AliGenCocktail.h:26
 AliGenCocktail.h:27
 AliGenCocktail.h:28
 AliGenCocktail.h:29
 AliGenCocktail.h:30
 AliGenCocktail.h:31
 AliGenCocktail.h:32
 AliGenCocktail.h:33
 AliGenCocktail.h:34
 AliGenCocktail.h:35
 AliGenCocktail.h:36
 AliGenCocktail.h:37
 AliGenCocktail.h:38
 AliGenCocktail.h:39
 AliGenCocktail.h:40
 AliGenCocktail.h:41
 AliGenCocktail.h:42
 AliGenCocktail.h:43
 AliGenCocktail.h:44
 AliGenCocktail.h:45
 AliGenCocktail.h:46
 AliGenCocktail.h:47
 AliGenCocktail.h:48
 AliGenCocktail.h:49
 AliGenCocktail.h:50
 AliGenCocktail.h:51
 AliGenCocktail.h:52
 AliGenCocktail.h:53
 AliGenCocktail.h:54
 AliGenCocktail.h:55
 AliGenCocktail.h:56
 AliGenCocktail.h:57
 AliGenCocktail.h:58
 AliGenCocktail.h:59
 AliGenCocktail.h:60
 AliGenCocktail.h:61
 AliGenCocktail.h:62
 AliGenCocktail.h:63
 AliGenCocktail.h:64
 AliGenCocktail.h:65
 AliGenCocktail.h:66
 AliGenCocktail.h:67
 AliGenCocktail.h:68
 AliGenCocktail.h:69
 AliGenCocktail.h:70
 AliGenCocktail.h:71