X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=EVGEN%2FAliGenCocktailAfterBurner.cxx;h=25948e2b423111e8331b72b5e8ce6adc4737a625;hb=97bd035cb992736a33de2bd9ea472610a4611abe;hp=abf0d6cdd67fb696169684465284a1974275c00f;hpb=2b9786f4f10ef7f55d9248cc9ac4e290b1e59d6e;p=u%2Fmrichter%2FAliRoot.git diff --git a/EVGEN/AliGenCocktailAfterBurner.cxx b/EVGEN/AliGenCocktailAfterBurner.cxx index abf0d6cdd67..25948e2b423 100644 --- a/EVGEN/AliGenCocktailAfterBurner.cxx +++ b/EVGEN/AliGenCocktailAfterBurner.cxx @@ -13,6 +13,8 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ +/* $Id$ */ + // // Container class for AliGenerator and AfterBurners // (which are AliGenerators as well) through recursion. @@ -27,36 +29,44 @@ // debug -> gDebug, // fNEvents replaced with gAlice->GetEventsPerRun() // -#include "AliGenCocktailAfterBurner.h" -#include "AliGenCocktailEntry.h" -#include "AliStack.h" -#include + +#include + #include +#include #include -#include + +#include "AliGenCocktailAfterBurner.h" +#include "AliGenCocktailEntry.h" +#include "AliCollisionGeometry.h" +#include "AliStack.h" +#include "AliMC.h" ClassImp(AliGenCocktailAfterBurner) /*********************************************************************/ /*********************************************************************/ -AliGenCocktailAfterBurner::AliGenCocktailAfterBurner() + AliGenCocktailAfterBurner::AliGenCocktailAfterBurner(): + fNAfterBurners(0), + fAfterBurnerEntries(new TList()), + fGenerationDone(kFALSE), + fInternalStacks(0), + fCollisionGeometries(0), + fCurrentEvent(0), + fActiveStack(0), + fActiveEvent(-1), + fCurrentGenerator(0), + fNBgEvents(0) { // Constructor if (gDebug > 0) cout<<"AliGenCocktailAfterBurner::AliGenCocktailAfterBurner()"<SetMomentumRange(fPMin,fPMax); AfterBurner->SetYRange(fYMin,fYMax); - AfterBurner-> - SetPhiRange(fPhiMin*180/TMath::Pi(),fPhiMax*180/TMath::Pi()); - AfterBurner-> - SetThetaRange(fThetaMin*180/TMath::Pi(),fThetaMax*180/TMath::Pi()); - AfterBurner-> - SetOrigin(fOrigin[0], fOrigin[1], fOrigin[2]); - AfterBurner-> - SetSigma(fOsigma[0], fOsigma[1], fOsigma[2]); + AfterBurner->SetPhiRange(fPhiMin*180/TMath::Pi(),fPhiMax*180/TMath::Pi()); + AfterBurner->SetThetaRange(fThetaMin*180/TMath::Pi(),fThetaMax*180/TMath::Pi()); + AfterBurner->SetOrigin(fOrigin[0], fOrigin[1], fOrigin[2]); + AfterBurner->SetSigma(fOsigma[0], fOsigma[1], fOsigma[2]); AfterBurner->SetVertexSmear(fVertexSmear); AfterBurner->SetTrackingFlag(fTrackIt); // @@ -114,6 +121,16 @@ void AliGenCocktailAfterBurner::Init() { // Initialisation fGenerationDone = kFALSE; + if (fInternalStacks) //delete stacks + { + fInternalStacks->SetOwner(); + fInternalStacks->Delete(); //clean after previous generation cycle + } + +// ANDREAS MORSCH ---------------------------------------------------( + if (fCollisionGeometries) delete[] fCollisionGeometries; +// ANDREAS MORSCH ---------------------------------------------------) + this->AliGenCocktail::Init(); if (gDebug>0) cout<<"AliGenCocktailAfterBurner::Init"<GetEventsPerRun(); //Create stacks - fInternalStacks = new TObjArray(numberOfEvents); //Create array of internal stacks - for(i=0;iReset(); @@ -182,7 +200,7 @@ void AliGenCocktailAfterBurner::Generate() cout<<"Generator "<GetName()<Generate(); entry->SetLast(partArray->GetEntriesFast()); + +// ANDREAS MORSCH ---------------------------------------------------( + if (fCurrentGenerator->ProvidesCollisionGeometry()) fCollisionGeometries[i] = fCurrentGenerator->CollisionGeometry(); +// ANDREAS MORSCH ---------------------------------------------------) + } /***********************************************/ } @@ -249,24 +272,35 @@ void AliGenCocktailAfterBurner::Generate() /*********************************************************************/ /*********************************************************************/ -AliGenCocktailAfterBurner& AliGenCocktailAfterBurner::operator=(const AliGenCocktailAfterBurner& rhs) +AliStack* AliGenCocktailAfterBurner::GetStack(Int_t n) const { -// Assignment operator - return *this; +//Returns the pointer to the N'th stack (event) + if( ( n<0 ) || ( n>=GetNumberOfEvents() ) ) + { + Fatal("AliGenCocktailAfterBurner::GetStack","Asked for non existing stack (%d)",n); + return 0; + } + return ((AliStack*) fInternalStacks->At(n) ); } -/*********************************************************************/ + /*********************************************************************/ +/*********************************************************************/ + +// ANDREAS MORSCH ---------------------------------------------------( -AliStack* AliGenCocktailAfterBurner::GetStack(Int_t n) +AliCollisionGeometry* AliGenCocktailAfterBurner::GetCollisionGeometry(Int_t n) const { //Returns the pointer to the N'th stack (event) if( ( n<0 ) || ( n>=GetNumberOfEvents() ) ) { - Fatal("AliGenCocktailAfterBurner::GetStack","Asked for non existing stack (%d)",n); + Fatal("AliGenCocktailAfterBurner::GetCollisionGeometry","Asked for non existing stack (%d)",n); return 0; } - return ((AliStack*) fInternalStacks->At(n) ); + return fCollisionGeometries[n]; } + +// ANDREAS MORSCH ---------------------------------------------------) + /*********************************************************************/ /*********************************************************************/ @@ -291,19 +325,19 @@ void AliGenCocktailAfterBurner::SetTracks(Int_t stackno) Int_t parent; Int_t pdg; Double_t px, py, pz, e, vx, vy, vz, tof, polx, poly, polz; - AliMCProcess mech; + TMCProcess mech; Int_t ntr; Float_t weight; TVector3 pol; TParticle * p; - Int_t N = instack->GetNtrack(); + Int_t n = instack->GetNtrack(); if (gDebug) { - cout<<"AliGenCocktailAfterBurner::SetTracks("<Particle(i); @@ -325,17 +359,21 @@ void AliGenCocktailAfterBurner::SetTracks(Int_t stackno) mech = AliGenCocktailAfterBurner::IntToMCProcess(p->GetUniqueID()); weight = p->GetWeight(); - gAlice->SetTrack(done, parent, pdg, px, py, pz, e, vx, vy, vz, tof, - polx, poly, polz, mech, ntr, weight); + gAlice->GetMCApp()->PushTrack(done, parent, pdg, px, py, pz, e, vx, vy, vz, tof,polx, poly, polz, mech, ntr, weight); + +// ANDREAS MORSCH ---------------------------------------------------( + SetHighWaterMark(ntr) ; +// ANDREAS MORSCH ---------------------------------------------------) + } } /*********************************************************************/ /*********************************************************************/ -AliMCProcess AliGenCocktailAfterBurner::IntToMCProcess(Int_t no) +TMCProcess AliGenCocktailAfterBurner::IntToMCProcess(Int_t no) { - //Mothod used to convert uniqueID (integer) to AliMCProcess type - const AliMCProcess MCprocesses[kMaxMCProcess] = + //Mothod used to convert uniqueID (integer) to TMCProcess type + const TMCProcess kMCprocesses[kMaxMCProcess] = { kPNoProcess, kPMultipleScattering, kPEnergyLoss, kPMagneticFieldL, kPDecay, kPPair, kPCompton, kPPhotoelectric, kPBrem, kPDeltaRay, @@ -347,11 +385,11 @@ AliMCProcess AliGenCocktailAfterBurner::IntToMCProcess(Int_t no) for (Int_t i = 0;i