* provided "as is" without express or implied warranty. *
**************************************************************************/
+/* $Id$ */
+
//
// Container class for AliGenerator and AfterBurners
// (which are AliGenerators as well) through recursion.
// debug -> gDebug,
// fNEvents replaced with gAlice->GetEventsPerRun()
//
-#include "AliGenCocktailAfterBurner.h"
-#include "AliGenCocktailEntry.h"
-#include "AliStack.h"
-#include <TObjArray.h>
+
+#include <Riostream.h>
+
#include <TList.h>
+#include <TObjArray.h>
#include <TParticle.h>
-#include <iostream.h>
+
+#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()"<<endl;
SetName("AliGenCocktailAfterBurner");
SetTitle("AliGenCocktailAfterBurner");
- fInternalStacks =0;
- fActiveStack = 0;
- fCurrentGenerator = 0;
- fCurrentEvent =0;
- fAfterBurnerEntries = new TList();
- fNAfterBurners = 0;
- fGenerationDone = kFALSE;
-
- fActiveEvent = -1;
- fNBgEvents = 0;
}
-/*********************************************************************/
+
/*********************************************************************/
AliGenCocktailAfterBurner::~AliGenCocktailAfterBurner()
delete fInternalStacks;
}
if (fAfterBurnerEntries) delete fAfterBurnerEntries; //delete entries
+ delete[] fCollisionGeometries;
}
/*********************************************************************/
/*********************************************************************/
fInternalStacks->Delete(); //clean after previous generation cycle
}
+// ANDREAS MORSCH ---------------------------------------------------(
+ if (fCollisionGeometries) delete[] fCollisionGeometries;
+// ANDREAS MORSCH ---------------------------------------------------)
+
this->AliGenCocktail::Init();
if (gDebug>0) cout<<"AliGenCocktailAfterBurner::Init"<<endl;
fCurrentEvent=0;
Int_t numberOfEvents = gAlice->GetEventsPerRun();
//Create stacks
- fInternalStacks = new TObjArray(numberOfEvents + fNBgEvents); //Create array of internal stacks
+ fInternalStacks = new TObjArray(numberOfEvents + fNBgEvents); //Create array of internal stacks
+ fCollisionGeometries = new AliCollisionGeometry*[numberOfEvents + fNBgEvents]; //Create array of collision geometries
for(i=0;i<numberOfEvents + fNBgEvents;i++)
{
stack = new AliStack(10000);
}
fCurrentGenerator->Generate();
entry->SetLast(partArray->GetEntriesFast());
+
+// ANDREAS MORSCH ---------------------------------------------------(
+ if (fCurrentGenerator->ProvidesCollisionGeometry()) fCollisionGeometries[i] = fCurrentGenerator->CollisionGeometry();
+// ANDREAS MORSCH ---------------------------------------------------)
+
}
/***********************************************/
}
/*********************************************************************/
/*********************************************************************/
-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) );
}
-/*********************************************************************/
+
+/*********************************************************************/
/*********************************************************************/
-AliStack* AliGenCocktailAfterBurner::GetStack(Int_t n)
+// ANDREAS MORSCH ---------------------------------------------------(
+
+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 ---------------------------------------------------)
+
/*********************************************************************/
/*********************************************************************/
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("<<stackno<<"). Number of particles is: "<<N<<"\n";
+ cout<<"AliGenCocktailAfterBurner::SetTracks("<<stackno<<"). Number of particles is: "<<n<<"\n";
}
- for(Int_t i = 0; i < N; i++)
+ for(Int_t i = 0; i < n; i++)
{
p = instack->Particle(i);
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,
for (Int_t i = 0;i<kMaxMCProcess;i++)
{
- if (MCprocesses[i] == no)
+ if (kMCprocesses[i] == no)
{
- //if (debug) cout<<"IntToMCProcess("<<no<<") returned AliMCProcess Named \""<<AliMCProcessName[MCprocesses[i]]<<"\""<<endl;
- return MCprocesses[i];
+ return kMCprocesses[i];
}
}
return kPNoProcess;
}
+