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]);
47 Generator->SetVertexSmear(fVertexSmear);
48 Generator->SetTrackingFlag(fTrackIt);
50 // Add generator to list
51 AliGenCocktailEntry *Entry =
52 new AliGenCocktailEntry(Generator, Name, RateExp);
57 void AliGenCocktail::Init()
60 AliGenCocktailEntry *Entry;
62 // Loop over generators and initialize
63 while((Entry = (AliGenCocktailEntry*)next())) {
64 Entry->Generator()->Init();
68 void AliGenCocktail::Generate()
71 AliGenCocktailEntry *Entry;
72 AliGenCocktailEntry *e1;
73 AliGenCocktailEntry *e2;
74 TClonesArray *PartArray = gAlice->Particles();
76 // Loop over generators and generate events
78 while((Entry = (AliGenCocktailEntry*)next())) {
83 Entry->SetFirst((PartArray->GetEntriesFast())+1);
85 Entry->Generator()->Generate();
86 Entry->SetLast(PartArray->GetEntriesFast());
89 while((Entry = (AliGenCocktailEntry*)next())) {
92 for (Entry=FirstGenerator();
98 for (FirstGeneratorPair(e1,e2);
100 NextGeneratorPair(e1,e2)
102 printf("\n -----------------------------");
108 AliGenCocktailEntry * AliGenCocktail::FirstGenerator()
110 flnk1 = fEntries->FirstLink();
112 return (AliGenCocktailEntry*) (flnk1->GetObject());
118 AliGenCocktailEntry* AliGenCocktail::NextGenerator()
120 flnk1 = flnk1->Next();
122 return (AliGenCocktailEntry*) (flnk1->GetObject());
128 void AliGenCocktail::
129 FirstGeneratorPair(AliGenCocktailEntry*& e1, AliGenCocktailEntry*& e2)
131 flnk2 = flnk1 = fEntries->FirstLink();
133 e2 = e1 = (AliGenCocktailEntry*) (flnk1->GetObject());
139 void AliGenCocktail::
140 NextGeneratorPair(AliGenCocktailEntry*& e1, AliGenCocktailEntry*& e2)
142 flnk2 = flnk2->Next();
144 e1 = (AliGenCocktailEntry*) (flnk1->GetObject());
145 e2 = (AliGenCocktailEntry*) (flnk2->GetObject());
147 flnk2 = flnk1 = flnk1->Next();
149 e1 = (AliGenCocktailEntry*) (flnk1->GetObject());
150 e2 = (AliGenCocktailEntry*) (flnk2->GetObject());
159 void AliGenCocktail::Streamer(TBuffer &R__b)
161 // Stream an object of class AliGenCocktail.
162 TIter next(fEntries);
163 AliGenCocktailEntry *Entry;
165 if (R__b.IsReading()) {
166 Version_t R__v = R__b.ReadVersion(); if (R__v) { }
167 AliGenerator::Streamer(R__b);
168 R__b >> fNGenerators;
170 // Stream generation related information
171 while((Entry = (AliGenCocktailEntry*)next())) {
172 Entry->Streamer(R__b);
175 R__b.WriteVersion(AliGenCocktail::IsA());
176 AliGenerator::Streamer(R__b);
177 R__b << fNGenerators;
179 // Stream generation related information
180 while((Entry = (AliGenCocktailEntry*)next())) {
181 Entry->Streamer(R__b);