#include <TClonesArray.h>
#include <TRefArray.h>
#include <TList.h>
+#include <TArrayF.h>
#include "AliLog.h"
#include "AliMCEvent.h"
+#include "AliMCVertex.h"
#include "AliStack.h"
#include "AliTrackReference.h"
#include "AliHeader.h"
AliMCEvent::AliMCEvent():
AliVEvent(),
fStack(0),
- fMCParticles(new TClonesArray("AliMCParticle",1000)),
+ fMCParticles(0),
fMCParticleMap(0),
fHeader(new AliHeader()),
fTRBuffer(0),
fNparticles(-1),
fSubsidiaryEvents(0),
fPrimaryOffset(0),
- fSecondaryOffset(0)
+ fSecondaryOffset(0),
+ fExternal(0),
+ fVertex(0)
{
// Default constructor
}
fNparticles(mcEvnt.fNparticles),
fSubsidiaryEvents(0),
fPrimaryOffset(0),
- fSecondaryOffset(0)
+ fSecondaryOffset(0),
+ fExternal(0),
+ fVertex(mcEvnt.fVertex)
{
// Copy constructor
}
void AliMCEvent::ConnectTreeK (TTree* tree)
{
// Connect the kinematics tree to the stack
+ if (!fMCParticles) fMCParticles = new TClonesArray("AliMCParticle",1000);
+ //
fStack = fHeader->Stack();
fStack->ConnectTree(tree);
//
void AliMCEvent::Clean()
{
// Clean-up before new trees are connected
-// if (fHeader) {
-// delete fHeader;
-// fHeader = 0;
-// }
-
delete fStack; fStack = 0;
// Clear TR
fTreeTR = fTmpTreeTR;
}
-AliMCParticle* AliMCEvent::GetTrack(Int_t i) const
+AliVParticle* AliMCEvent::GetTrack(Int_t i) const
{
// Get MC Particle i
//
+
+ if (fExternal) {
+ return ((AliVParticle*) (fMCParticles->At(i)));
+ }
+
//
// Check first if this explicitely accesses the subsidiary event
+
if (i >= BgLabelOffset()) {
if (fSubsidiaryEvents) {
AliMCEvent* bgEvent = (AliMCEvent*) (fSubsidiaryEvents->At(1));
return mcParticle;
}
- AliGenEventHeader* AliMCEvent::GenEventHeader() {return (fHeader->GenEventHeader());}
+AliGenEventHeader* AliMCEvent::GenEventHeader() const {return (fHeader->GenEventHeader());}
void AliMCEvent::AddSubsidiaryEvent(AliMCEvent* event)
void AliMCEvent::InitEvent()
{
+//
+// Initialize the subsidiary event structure
if (fSubsidiaryEvents) {
TIter next(fSubsidiaryEvents);
AliMCEvent* evt;
}
}
}
+void AliMCEvent::PreReadAll()
+{
+ // Preread the MC information
+ Int_t i;
+ // secondaries
+ for (i = fStack->GetNprimary(); i < fStack->GetNtrack(); i++)
+ {
+ GetTrack(i);
+ }
+ // primaries
+ for (i = 0; i < fStack->GetNprimary(); i++)
+ {
+ GetTrack(i);
+ }
+
+
+}
+
+
+const AliVVertex * AliMCEvent::GetPrimaryVertex() const
+{
+ // Create a MCVertex object from the MCHeader information
+ TArrayF v;
+ GenEventHeader()->PrimaryVertex(v) ;
+ if (!fVertex) {
+ fVertex = new AliMCVertex(v[0], v[1], v[2]);
+ } else {
+ ((AliMCVertex*) fVertex)->SetPosition(v[0], v[1], v[2]);
+ }
+ return fVertex;
+}
ClassImp(AliMCEvent)