1 #include "AliGenerator.h"
2 #include "AliGenCocktail.h"
5 #include <TDirectory.h>
9 ClassImp(AliGenCocktailEntry)
10 void AliGenCocktailEntry::PrintInfo()
12 printf("\n Generator: %s Generated Events: %d First: %d Last: %d",
13 (const char *) fName, fGenerator->NumberParticles(), fFirst, fLast);
16 ClassImp(AliGenCocktail)
18 AliGenCocktail::AliGenCocktail()
26 AliGenCocktail::~AliGenCocktail()
32 AddGenerator(AliGenerator *Generator, TString Name, Float_t RateExp)
35 // Forward parameters to the new generator
36 Generator->SetPtRange(fPtMin,fPtMax);
37 Generator->SetMomentumRange(fPMin,fPMax);
38 Generator->SetYRange(fYMin,fYMax);
40 SetPhiRange(fPhiMin*180/TMath::Pi(),fPhiMax*180/TMath::Pi());
42 SetThetaRange(fThetaMin*180/TMath::Pi(),fThetaMax*180/TMath::Pi());
44 SetOrigin(fOrigin[0], fOrigin[1], fOrigin[2]);
46 SetSigma(fOsigma[0], fOsigma[1], fOsigma[2]);
48 // Add generator to list
49 AliGenCocktailEntry *Entry =
50 new AliGenCocktailEntry(Generator, Name, RateExp);
55 void AliGenCocktail::Init()
58 AliGenCocktailEntry *Entry;
60 // Loop over generators and initialize
61 while((Entry = (AliGenCocktailEntry*)next())) {
62 Entry->Generator()->Init();
66 void AliGenCocktail::Generate()
69 AliGenCocktailEntry *Entry;
70 AliGenCocktailEntry *e1;
71 AliGenCocktailEntry *e2;
72 TClonesArray *PartArray = gAlice->Particles();
74 // Loop over generators and generate events
76 while((Entry = (AliGenCocktailEntry*)next())) {
81 Entry->SetFirst((PartArray->GetEntriesFast())+1);
83 Entry->Generator()->Generate();
84 Entry->SetLast(PartArray->GetEntriesFast());
87 while((Entry = (AliGenCocktailEntry*)next())) {
90 for (Entry=FirstGenerator();
96 for (FirstGeneratorPair(e1,e2);
98 NextGeneratorPair(e1,e2)
100 printf("\n -----------------------------");
106 AliGenCocktailEntry * AliGenCocktail::FirstGenerator()
108 flnk1 = fEntries->FirstLink();
110 return (AliGenCocktailEntry*) (flnk1->GetObject());
116 AliGenCocktailEntry* AliGenCocktail::NextGenerator()
118 flnk1 = flnk1->Next();
120 return (AliGenCocktailEntry*) (flnk1->GetObject());
126 void AliGenCocktail::
127 FirstGeneratorPair(AliGenCocktailEntry*& e1, AliGenCocktailEntry*& e2)
129 flnk2 = flnk1 = fEntries->FirstLink();
131 e2 = e1 = (AliGenCocktailEntry*) (flnk1->GetObject());
137 void AliGenCocktail::
138 NextGeneratorPair(AliGenCocktailEntry*& e1, AliGenCocktailEntry*& e2)
140 flnk2 = flnk2->Next();
142 e1 = (AliGenCocktailEntry*) (flnk1->GetObject());
143 e2 = (AliGenCocktailEntry*) (flnk2->GetObject());
145 flnk2 = flnk1 = flnk1->Next();
147 e1 = (AliGenCocktailEntry*) (flnk1->GetObject());
148 e2 = (AliGenCocktailEntry*) (flnk2->GetObject());
157 void AliGenCocktail::Streamer(TBuffer &R__b)
159 // Stream an object of class AliGenCocktail.
160 TIter next(fEntries);
161 AliGenCocktailEntry *Entry;
163 if (R__b.IsReading()) {
164 Version_t R__v = R__b.ReadVersion(); if (R__v) { }
165 AliGenerator::Streamer(R__b);
166 R__b >> fNGenerators;
168 // Stream generation related information
169 while((Entry = (AliGenCocktailEntry*)next())) {
170 Entry->Streamer(R__b);
173 R__b.WriteVersion(AliGenCocktail::IsA());
174 AliGenerator::Streamer(R__b);
175 R__b << fNGenerators;
177 // Stream generation related information
178 while((Entry = (AliGenCocktailEntry*)next())) {
179 Entry->Streamer(R__b);