X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TMEVSIM%2FTMevSim.cxx;h=9c9d807f5fa9ead79bebafe9044926902618f900;hb=5ab6fc5d1286a858dca1ff84b5910379b6805f30;hp=3323e1f22fbf54bd8bc2aabcf54bd8d1584da6f3;hpb=4319640b6614c166751c99855f7ab0273a7ae736;p=u%2Fmrichter%2FAliRoot.git diff --git a/TMEVSIM/TMevSim.cxx b/TMEVSIM/TMevSim.cxx index 3323e1f22fb..9c9d807f5fa 100644 --- a/TMEVSIM/TMevSim.cxx +++ b/TMEVSIM/TMevSim.cxx @@ -13,15 +13,7 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* -$Log$ -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$ */ //////////////////////////////////////////////////////////////////////////// // @@ -399,15 +391,11 @@ Root interface to MevSim code as TGenerator realisation (Sylwester Radomski et a /////////////////////////////////////////////////////////////////////////////// +#include - -#include -#include #include "TMevSim.h" - -#include "MevSimCommon.h" +#include"TMevSimPartTypeParams.h" #include "TParticle.h" -#include "TFile.h" #ifndef WIN32 # define multgen multgen_ @@ -471,13 +459,14 @@ TMevSim::~TMevSim() } } //______________________________________________________________________________ -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. @@ -573,16 +562,16 @@ void TMevSim::Initialize() { } //______________________________________________________________________________ -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. @@ -590,8 +579,8 @@ Int_t TMevSim::ImportParticles(TClonesArray *particles, Option_t *option) // 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++) { @@ -606,7 +595,7 @@ Int_t TMevSim::ImportParticles(TClonesArray *particles, Option_t *option) 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, @@ -628,6 +617,49 @@ Int_t TMevSim::ImportParticles(TClonesArray *particles, Option_t *option) 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 @@ -818,7 +850,7 @@ void TMevSim::SetPartTypeParams(Int_t index, TMevSimPartTypeParams *param *((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. @@ -829,7 +861,7 @@ void TMevSim::GetPartTypeParamsByIndex(Int_t index, TMevSimPartTypeParams 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.