X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=EVGEN%2FAliGenCocktailAfterBurner.cxx;h=642ad5c8b1cb334e4de4ea5784b1b13fde4f16fd;hb=0660fa85d922b5d15124f8071323a1a3cbe4c7d7;hp=3f9db9231d08d07ced6c5d92415d7cd7e29c4c22;hpb=cc41459d2bbb27f472a9099b63c613b047ecbcab;p=u%2Fmrichter%2FAliRoot.git diff --git a/EVGEN/AliGenCocktailAfterBurner.cxx b/EVGEN/AliGenCocktailAfterBurner.cxx index 3f9db9231d0..642ad5c8b1c 100644 --- a/EVGEN/AliGenCocktailAfterBurner.cxx +++ b/EVGEN/AliGenCocktailAfterBurner.cxx @@ -27,7 +27,7 @@ // // 24.09.2001 Piotr Skowronski // debug -> gDebug, -// fNEvents replaced with gAlice->GetEventsPerRun() +// fNEvents replaced with AliRunLoader::GetNumberOfEvents() // @@ -39,41 +39,36 @@ #include "AliGenCocktailAfterBurner.h" #include "AliGenCocktailEntry.h" +#include "AliGenCocktailEventHeader.h" #include "AliCollisionGeometry.h" #include "AliStack.h" #include "AliMC.h" +#include "AliRun.h" - +using std::cout; +using std::endl; ClassImp(AliGenCocktailAfterBurner) /*********************************************************************/ /*********************************************************************/ -AliGenCocktailAfterBurner::AliGenCocktailAfterBurner() + AliGenCocktailAfterBurner::AliGenCocktailAfterBurner(): + fNAfterBurners(0), + fAfterBurnerEntries(0), + fGenerationDone(kFALSE), + fInternalStacks(0), + fCollisionGeometries(0), + fHeaders(0), + fCurrentEvent(0), + fActiveStack(0), + fActiveEvent(-1), + fCurrentGenerator(0), + fNBgEvents(0) { // Constructor if (gDebug > 0) - cout<<"AliGenCocktailAfterBurner::AliGenCocktailAfterBurner()"<GetNumberOfEventsPerRun(); + if (fCollisionGeometries) { + for (Int_t i = 0; i < (numberOfEvents + fNBgEvents); i++) + if (fCollisionGeometries[i]) delete fCollisionGeometries[i]; + delete[] fCollisionGeometries; + } + if (fHeaders) { + for (Int_t i = 0; i < (numberOfEvents + fNBgEvents); i++) + if (fHeaders[i]) delete fHeaders[i]; + delete[] fHeaders; + } } /*********************************************************************/ /*********************************************************************/ @@ -101,23 +106,34 @@ AddAfterBurner(AliGenerator *AfterBurner, char* Name, Float_t RateExp) if (gDebug>0)cout<<"AliGenCocktailAfterBurner::AddAfterBurner Named "<TestBit(kPtRange)) && !(AfterBurner->TestBit(kMomentumRange))) AfterBurner->SetPtRange(fPtMin,fPtMax); - if(TestBit(kMomentumRange)) + if(TestBit(kMomentumRange) && !(AfterBurner->TestBit(kPtRange)) && !(AfterBurner->TestBit(kMomentumRange))) AfterBurner->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->SetVertexSmear(fVertexSmear); - AfterBurner->SetTrackingFlag(fTrackIt); + if (TestBit(kYRange) && !(AfterBurner->TestBit(kYRange))) + AfterBurner->SetYRange(fYMin,fYMax); + if (TestBit(kPhiRange) && !(AfterBurner->TestBit(kPhiRange))) + AfterBurner->SetPhiRange(fPhiMin*180/TMath::Pi(),fPhiMax*180/TMath::Pi()); + if (TestBit(kThetaRange) && !(AfterBurner->TestBit(kThetaRange)) && !(AfterBurner->TestBit(kEtaRange))) + AfterBurner->SetThetaRange(fThetaMin*180/TMath::Pi(),fThetaMax*180/TMath::Pi()); + if (!(AfterBurner->TestBit(kVertexRange))) { + AfterBurner->SetOrigin(fOrigin[0], fOrigin[1], fOrigin[2]); + AfterBurner->SetSigma(fOsigma[0], fOsigma[1], fOsigma[2]); + AfterBurner->SetVertexSmear(fVertexSmear); + AfterBurner->SetVertexSource(kContainer); + AfterBurner->SetTimeOrigin(fTimeOrigin); + } + AfterBurner->SetTrackingFlag(fTrackIt); + //AfterBurner->SetContainer(this); + // // Add AfterBurner to list AliGenCocktailEntry *entry = new AliGenCocktailEntry(AfterBurner, Name, RateExp); + if (!fAfterBurnerEntries) fAfterBurnerEntries = new TList(); + fAfterBurnerEntries->Add(entry); fNAfterBurners++; // @@ -129,6 +145,7 @@ AddAfterBurner(AliGenerator *AfterBurner, char* Name, Float_t RateExp) void AliGenCocktailAfterBurner::Init() { // Initialisation + Int_t numberOfEvents = AliRunLoader::Instance()->GetNumberOfEventsPerRun(); fGenerationDone = kFALSE; if (fInternalStacks) //delete stacks { @@ -136,10 +153,17 @@ void AliGenCocktailAfterBurner::Init() fInternalStacks->Delete(); //clean after previous generation cycle } -// ANDREAS MORSCH ---------------------------------------------------( - if (fCollisionGeometries) delete[] fCollisionGeometries; -// ANDREAS MORSCH ---------------------------------------------------) - + if (fCollisionGeometries) { + for (Int_t i = 0; i < (numberOfEvents + fNBgEvents); i++) + if (fCollisionGeometries[i]) delete fCollisionGeometries[i]; + delete[] fCollisionGeometries; + } + if (fHeaders) { + for (Int_t i = 0; i < (numberOfEvents + fNBgEvents); i++) + if (fHeaders[i]) delete fHeaders[i]; + delete[] fHeaders; + } + this->AliGenCocktail::Init(); if (gDebug>0) cout<<"AliGenCocktailAfterBurner::Init"<SetGenEventHeader(fHeader); + cout<<"Returning event " << fCurrentEvent<GetEventsPerRun(); + Int_t numberOfEvents = AliRunLoader::Instance()->GetNumberOfEventsPerRun(); + cout << "Number of events per run" << numberOfEvents << endl; + TArrayF eventVertex; + eventVertex.Set(3 * (numberOfEvents + fNBgEvents)); + TArrayF eventTime; + eventTime.Set(numberOfEvents + fNBgEvents); + fCurrentEvent=0; //Create stacks - fInternalStacks = new TObjArray(numberOfEvents + fNBgEvents); //Create array of internal stacks - fCollisionGeometries = new AliCollisionGeometry*[numberOfEvents + fNBgEvents]; //Create array of collision geometries - for(i=0;iReset(); - fInternalStacks->Add(stack); + stack = new AliStack(10000); + stack->Reset(); + fInternalStacks->Add(stack); + Vertex(); + for (Int_t j = 0; j < 3; j++) eventVertex[3 * i + j] = fVertex[j]; + eventTime[i] = fTime; + fHeaders[i] = new AliGenCocktailEventHeader(); + fCollisionGeometries[i] = 0; } /*********************************************************************/ TIter next(fEntries); AliGenCocktailEntry *entry; AliGenCocktailEntry *e1; AliGenCocktailEntry *e2; - TObjArray *partArray; + const TObjArray *partArray; // // Loop over generators and generate events Int_t igen=0; @@ -209,31 +248,42 @@ void AliGenCocktailAfterBurner::Generate() cout<<"Generator "<GetName()<Particles(); fCurrentGenerator = entry->Generator(); fCurrentGenerator->SetStack(stack); if (igen ==1) - { + { entry->SetFirst(0); - } + } else - { + { entry->SetFirst((partArray->GetEntriesFast())+1); - } - fCurrentGenerator->Generate(); - entry->SetLast(partArray->GetEntriesFast()); - -// ANDREAS MORSCH ---------------------------------------------------( - if (fCurrentGenerator->ProvidesCollisionGeometry()) fCollisionGeometries[i] = fCurrentGenerator->CollisionGeometry(); -// ANDREAS MORSCH ---------------------------------------------------) - - } + } + // Set the vertex for the generator + Int_t ioff = 3 * i; + fCurrentGenerator->SetVertex(eventVertex.At(ioff), eventVertex.At(ioff + 1), eventVertex.At(ioff + 2)); + fCurrentGenerator->SetTime(eventTime.At(i)); + fHeader = fHeaders[i]; + // Set the vertex and time for the cocktail + TArrayF v(3); + for (Int_t j=0; j<3; j++) v[j] = eventVertex.At(ioff + j); + fHeader->SetPrimaryVertex(v); + fHeader->SetInteractionTime(eventTime.At(i)); + // Generate event + fCurrentGenerator->Generate(); + // + entry->SetLast(partArray->GetEntriesFast()); + + if (fCurrentGenerator->ProvidesCollisionGeometry()) + fCollisionGeometries[i] = + new AliCollisionGeometry(*(fCurrentGenerator->CollisionGeometry())); + } // event loop /***********************************************/ - } + } // generator loop next.Reset(); while((entry = (AliGenCocktailEntry*)next())) { @@ -275,17 +325,10 @@ void AliGenCocktailAfterBurner::Generate() SetTracks(0); //copy event 0 to gAlice stack /*********************************************************************/ - - }//else generated -} -/*********************************************************************/ -/*********************************************************************/ - -AliGenCocktailAfterBurner& AliGenCocktailAfterBurner::operator=(const AliGenCocktailAfterBurner& rhs) -{ -// Assignment operator - rhs.Copy(*this); - return (*this); + // Pass the header to gAlice + fHeader = fHeaders[0]; + gAlice->SetGenEventHeader(fHeader); + } //else generated } /*********************************************************************/ /*********************************************************************/ @@ -293,7 +336,7 @@ AliGenCocktailAfterBurner& AliGenCocktailAfterBurner::operator=(const AliGenCoc AliStack* AliGenCocktailAfterBurner::GetStack(Int_t n) const { //Returns the pointer to the N'th stack (event) - if( ( n<0 ) || ( n>=GetNumberOfEvents() ) ) + if( ( n<0 ) || ( n >= (GetNumberOfEvents()) ) ) { Fatal("AliGenCocktailAfterBurner::GetStack","Asked for non existing stack (%d)",n); return 0; @@ -304,8 +347,6 @@ AliStack* AliGenCocktailAfterBurner::GetStack(Int_t n) const /*********************************************************************/ /*********************************************************************/ -// ANDREAS MORSCH ---------------------------------------------------( - AliCollisionGeometry* AliGenCocktailAfterBurner::GetCollisionGeometry(Int_t n) const { //Returns the pointer to the N'th stack (event) @@ -317,8 +358,6 @@ AliCollisionGeometry* AliGenCocktailAfterBurner::GetCollisionGeometry(Int_t n) c return fCollisionGeometries[n]; } -// ANDREAS MORSCH ---------------------------------------------------) - /*********************************************************************/ /*********************************************************************/ @@ -379,9 +418,7 @@ void AliGenCocktailAfterBurner::SetTracks(Int_t stackno) 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 ---------------------------------------------------) } } @@ -411,7 +448,3 @@ TMCProcess AliGenCocktailAfterBurner::IntToMCProcess(Int_t no) return kPNoProcess; } -void AliGenCocktailAfterBurner::Copy(TObject &) const -{ - Fatal("Copy","Not implemented!\n"); -}