1 #include "AliGenerator.h"
2 #include "AliGenCocktail.h"
4 #include <TDirectory.h>
8 ClassImp(AliGenCocktailEntry)
9 void AliGenCocktailEntry::PrintInfo()
11 printf("\n Generator: %s Generated Events: %d First: %d Last: %d",
12 (const char *) fName, fGenerator->NumberParticles(), fFirst, fLast);
15 ClassImp(AliGenCocktail)
17 AliGenCocktail::AliGenCocktail()
25 AliGenCocktail::~AliGenCocktail()
31 AddGenerator(AliGenerator *Generator, TString Name, Float_t RateExp)
34 // Forward parameters to the new generator
35 Generator->SetPtRange(fPtMin,fPtMax);
36 Generator->SetMomentumRange(fPMin,fPMax);
37 Generator->SetYRange(fYMin,fYMax);
39 SetPhiRange(fPhiMin*180/TMath::Pi(),fPhiMax*180/TMath::Pi());
41 SetThetaRange(fThetaMin*180/TMath::Pi(),fThetaMax*180/TMath::Pi());
43 SetOrigin(fOrigin[0], fOrigin[1], fOrigin[2]);
45 SetSigma(fOsigma[0], fOsigma[1], fOsigma[2]);
46 Generator->SetVertexSmear(fVertexSmear);
47 Generator->SetTrackingFlag(fTrackIt);
49 // Add generator to list
50 AliGenCocktailEntry *Entry =
51 new AliGenCocktailEntry(Generator, Name, RateExp);
56 void AliGenCocktail::Init()
59 AliGenCocktailEntry *Entry;
61 // Loop over generators and initialize
62 while((Entry = (AliGenCocktailEntry*)next())) {
63 Entry->Generator()->Init();
67 void AliGenCocktail::Generate()
70 AliGenCocktailEntry *Entry;
71 AliGenCocktailEntry *e1;
72 AliGenCocktailEntry *e2;
73 TClonesArray *PartArray = gAlice->Particles();
75 // Loop over generators and generate events
77 while((Entry = (AliGenCocktailEntry*)next())) {
82 Entry->SetFirst((PartArray->GetEntriesFast())+1);
84 Entry->Generator()->Generate();
85 Entry->SetLast(PartArray->GetEntriesFast());
88 while((Entry = (AliGenCocktailEntry*)next())) {
91 for (Entry=FirstGenerator();
97 for (FirstGeneratorPair(e1,e2);
99 NextGeneratorPair(e1,e2)
101 printf("\n -----------------------------");
107 AliGenCocktailEntry * AliGenCocktail::FirstGenerator()
109 flnk1 = fEntries->FirstLink();
111 return (AliGenCocktailEntry*) (flnk1->GetObject());
117 AliGenCocktailEntry* AliGenCocktail::NextGenerator()
119 flnk1 = flnk1->Next();
121 return (AliGenCocktailEntry*) (flnk1->GetObject());
127 void AliGenCocktail::
128 FirstGeneratorPair(AliGenCocktailEntry*& e1, AliGenCocktailEntry*& e2)
130 flnk2 = flnk1 = fEntries->FirstLink();
132 e2 = e1 = (AliGenCocktailEntry*) (flnk1->GetObject());
138 void AliGenCocktail::
139 NextGeneratorPair(AliGenCocktailEntry*& e1, AliGenCocktailEntry*& e2)
141 flnk2 = flnk2->Next();
143 e1 = (AliGenCocktailEntry*) (flnk1->GetObject());
144 e2 = (AliGenCocktailEntry*) (flnk2->GetObject());
146 flnk2 = flnk1 = flnk1->Next();
148 e1 = (AliGenCocktailEntry*) (flnk1->GetObject());
149 e2 = (AliGenCocktailEntry*) (flnk2->GetObject());
158 void AliGenCocktail::Streamer(TBuffer &R__b)
160 // Stream an object of class AliGenCocktail.
161 TIter next(fEntries);
162 AliGenCocktailEntry *Entry;
164 if (R__b.IsReading()) {
165 Version_t R__v = R__b.ReadVersion(); if (R__v) { }
166 AliGenerator::Streamer(R__b);
167 R__b >> fNGenerators;
169 // Stream generation related information
170 while((Entry = (AliGenCocktailEntry*)next())) {
171 Entry->Streamer(R__b);
174 R__b.WriteVersion(AliGenCocktail::IsA());
175 AliGenerator::Streamer(R__b);
176 R__b << fNGenerators;
178 // Stream generation related information
179 while((Entry = (AliGenCocktailEntry*)next())) {
180 Entry->Streamer(R__b);