+ }
+ gen = entry->Generator();
+ if (gen->ProvidesCollisionGeometry()) collentry = entry;
+ //
+ // Handle case in which current generator needs collision geometry from previous generator
+ //
+ if (gen->NeedsCollisionGeometry() && (entry->Formula() == 0))
+ {
+ if (preventry && preventry->Generator()->ProvidesCollisionGeometry())
+ {
+ gen->SetCollisionGeometry(preventry->Generator()->CollisionGeometry());
+ } else {
+ Fatal("Generate()", "No Collision Geometry Provided");
+ }
+ }
+ //
+ // Number of signals is calculated from Collision Geometry
+ // and entry with given centrality bin is selected
+ //
+ if (entry->Formula() != 0)
+ {
+ if (!collentry) {
+ Fatal("Generate()", "No Collision Geometry Provided");
+ return;
+ }
+ AliCollisionGeometry* coll = (collentry->Generator())->CollisionGeometry();
+ Float_t b = coll->ImpactParameter();
+ Int_t nsig = Int_t(entry->Formula()->Eval(b));
+ Int_t bin = entry->Bin() - 100;
+ if (bin > 0) {
+ if (bin != nsig) continue;
+ } else {
+ if (nsig < 1) nsig = 1;
+ AliInfo(Form("Signal Events %13.3f %5d %5d\n", b, coll->HardScatters(), nsig));
+ ntimes = nsig;
+ }
+ }
+
+ gen->SetVertex(fVertex.At(0), fVertex.At(1), fVertex.At(2));
+
+ for (Int_t i = 0; i < ntimes; i++) gen->Generate();
+ entry->SetLast(partArray->GetEntriesFast());
+ preventry = entry;