* provided "as is" without express or implied warranty. *
**************************************************************************/
-/*
-$Log$
-Revision 1.3 2001/09/28 16:27:03 hristov
-A pointer is initialised to zero
-
-Revision 1.2 2001/03/28 07:32:51 hristov
-Loop variables declared only once, old style include (HP,Sun)
-
-Revision 1.1 2001/03/25 10:15:23 morsch
-Root interface to MevSim code as TGenerator realisation (Sylwester Radomski et al.)
-
-*/
+/* $Id$ */
////////////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////////////
-
-
#include <Riostream.h>
-#include "TMevSim.h"
-#include "MevSimCommon.h"
+#include "TMevSim.h"
+#include"TMevSimPartTypeParams.h"
#include "TParticle.h"
-#include "TFile.h"
#ifndef WIN32
# define multgen multgen_
}
}
//______________________________________________________________________________
-TMevSim::TMevSim(TMevSim& mevsim) {
+TMevSim::TMevSim(TMevSim& mevsim) : TGenerator(mevsim) {
// The copy constructor
*this = mevsim;
}
//______________________________________________________________________________
-TMevSim& TMevSim::operator=(TMevSim& mevsim) {
+
+TMevSim& TMevSim::operator=(const TMevSim& mevsim) {
// An assignment operator: initializes all the event-wide variables of MevSim with
// the ones from a copied object. It also copies the parameters specific to
// each particle species.
}
//______________________________________________________________________________
-void TMevSim::GenerateEvent() {
+void TMevSim::GenerateEvent() {
// Generates one MevSim event. TMevSim::Initialize() must be called prior
// to calling this function.
- cout << "Calling FORTRAN multgen()" << endl;
+ Info("GenerateEvent","Calling FORTRAN multgen()");
multgen();
}
//______________________________________________________________________________
-Int_t TMevSim::ImportParticles(TClonesArray *particles, Option_t *option)
+Int_t TMevSim::ImportParticles(TClonesArray *particles, Option_t */*option*/)
{
// Read in particles created by MevSim into the TClonesArray(). The Initialize()
// and GenrateEvent() functions must be called prior to calling this funtion.
// information is Geant PID, 3 momentum components and the energy of the particle.
if (particles == 0) return 0;
- TClonesArray &Particles = *particles;
- Particles.Clear();
+ TClonesArray &aParticles = *particles;
+ aParticles.Clear();
Int_t totpart = 0;
for (Int_t nrpidtype=0; nrpidtype < (fParticleTypeParameters->GetLast() + 1); nrpidtype++) {
Float_t pz = TRACK.pout[poffset];
poffset += NPID;
Float_t mass = TRACK.pout[poffset];
- new(Particles[totpart+nrpart]) TParticle(
+ new(aParticles[totpart+nrpart]) TParticle(
PDGFromId(pidcode), // Get the PDG ID from GEANT ID
0,
0,
return totpart;
}
//______________________________________________________________________________
+TObjArray * TMevSim::ImportParticles(Option_t */*option*/)
+{
+// Read in particles created by MevSim into the TClonesArray(). The Initialize()
+// and GenrateEvent() functions must be called prior to calling this funtion.
+// The particles are read from the COMMON POUT. Right now the only provided
+// information is Geant PID, 3 momentum components and the energy of the particle.
+
+ fParticles->Clear();
+
+ for (Int_t nrpidtype=0; nrpidtype < (fParticleTypeParameters->GetLast() + 1); nrpidtype++) {
+ Int_t nrpart = 0;
+ Int_t pidcode = ((TMevSimPartTypeParams *) (*fParticleTypeParameters)[nrpidtype])->GetGPid();
+ while ((TRACK.pout[(4*nrpart+3)*NPID+nrpidtype] > 0.0) || (TRACK.pout[(4*nrpart)*NPID+nrpidtype] != 0.0)) {
+ int poffset = 4*nrpart*NPID+nrpidtype;
+ Float_t px = TRACK.pout[poffset];
+ poffset += NPID;
+ Float_t py = TRACK.pout[poffset];
+ poffset += NPID;
+ Float_t pz = TRACK.pout[poffset];
+ poffset += NPID;
+ Float_t mass = TRACK.pout[poffset];
+ TParticle * p = new TParticle(
+ PDGFromId(pidcode), // Get the PDG ID from GEANT ID
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ px,
+ py,
+ pz,
+ sqrt(mass*mass+px*px+py*py+pz*pz),
+ 0,
+ 0,
+ 0,
+ 0);
+ fParticles->Add(p);
+ nrpart++;
+ }
+ }
+ return fParticles;
+}
+//______________________________________________________________________________
void TMevSim::SetNEvents(Int_t nEvents ) {
// Sets the number of events to be generated by MevSim.
// Caution: Setting nEvents > 1 will have no effect, since only the last generated
*((TMevSimPartTypeParams *) ((*fParticleTypeParameters)[index])) = *params;
}
//______________________________________________________________________________
-void TMevSim::GetPartTypeParamsByIndex(Int_t index, TMevSimPartTypeParams *params)
+void TMevSim::GetPartTypeParamsByIndex(Int_t index, TMevSimPartTypeParams *params) const
{
// Return the particle parameters stored in the list at the postion index.
// Returns NULL if index is out of bounds.
params = NULL;
}
//______________________________________________________________________________
-void TMevSim::GetPartTypeParamsByGPid(Int_t gpid, TMevSimPartTypeParams *params)
+void TMevSim::GetPartTypeParamsByGPid(Int_t gpid, TMevSimPartTypeParams *params) const
{
// Return the particle parameters for the particle with Geant PID gpid.
// Returns NULL if the parameters for such particle do not exist in the list.