Skip to content
Snippets Groups Projects
TMCVerbose.cxx 7.86 KiB
Newer Older
// @(#)root/vmc:$Id$
// Author: Ivana Hrivnacova, 27/03/2002

/*************************************************************************
 * Copyright (C) 2006, Rene Brun and Fons Rademakers.                    *
 * Copyright (C) 2002, ALICE Experiment at CERN.                         *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#include "Riostream.h"
#include "TVirtualMC.h"
#include "TVirtualMCStack.h"
#include "TDatabasePDG.h"
#include "TParticlePDG.h"
#include "TArrayI.h"

#include "TMCVerbose.h"

/** \class TMCVerbose
Class for printing a detailed infomation from MC application.
Rene Brun's avatar
Rene Brun committed

Defined levels:
- 0  no output
- 1  info up to event level
- 2  info up to tracking level
- 3  detailed info for each step
*/
Rene Brun's avatar
Rene Brun committed

ClassImp(TMCVerbose)

////////////////////////////////////////////////////////////////////////////////
/// Standard constructor

TMCVerbose::TMCVerbose(Int_t level)
  : TObject(),
    fLevel(level),
    fStepNumber(0)
{
}

////////////////////////////////////////////////////////////////////////////////
/// Default constructor

TMCVerbose::TMCVerbose()
  : TObject(),
    fLevel(0),
    fStepNumber(0)
////////////////////////////////////////////////////////////////////////////////
/// Destructor

{
}

//
// private methods
//

////////////////////////////////////////////////////////////////////////////////
/// Prints banner for track information

void TMCVerbose::PrintBanner() const
{
Axel Naumann's avatar
Axel Naumann committed
   std::cout << std::endl;
   for (Int_t i=0; i<10; i++) std::cout << "**********";
   std::cout << std::endl;
////////////////////////////////////////////////////////////////////////////////
/// Prints track information

void TMCVerbose::PrintTrackInfo() const
{
Axel Naumann's avatar
Axel Naumann committed
   std::cout << "  Particle = ";
   TParticlePDG* particle = TDatabasePDG::Instance()->GetParticle(gMC->TrackPid());
   if (particle)
Axel Naumann's avatar
Axel Naumann committed
      std::cout << particle->GetName() << "  ";
Axel Naumann's avatar
Axel Naumann committed
      std::cout << "unknown" << "  ";
Axel Naumann's avatar
Axel Naumann committed
   std::cout << "   Track ID = " << gMC->GetStack()->GetCurrentTrackNumber() << "  ";
Axel Naumann's avatar
Axel Naumann committed
   std::cout << "   Parent ID = " << gMC->GetStack()->GetCurrentParentTrackNumber();
////////////////////////////////////////////////////////////////////////////////
/// Prints the header for stepping information

void TMCVerbose::PrintStepHeader() const
{
Axel Naumann's avatar
Axel Naumann committed
   std::cout << "Step#     "
        << "X(cm)    "
        << "Y(cm)    "
        << "Z(cm)  "
        << "KinE(MeV)   "
        << "dE(MeV) "
        << "Step(cm) "
        << "TrackL(cm) "
        << "Volume  "
Axel Naumann's avatar
Axel Naumann committed
        << std::endl;
////////////////////////////////////////////////////////////////////////////////
/// Initialize MC info.

void TMCVerbose::InitMC()
Axel Naumann's avatar
Axel Naumann committed
      std::cout << "--- Init MC " << std::endl;
////////////////////////////////////////////////////////////////////////////////
/// MC run info.

void TMCVerbose::RunMC(Int_t nofEvents)
Axel Naumann's avatar
Axel Naumann committed
      std::cout << "--- Run MC for " << nofEvents << " events" << std::endl;
////////////////////////////////////////////////////////////////////////////////
/// Finish MC run info.

void TMCVerbose::FinishRun()
Axel Naumann's avatar
Axel Naumann committed
      std::cout << "--- Finish Run MC " << std::endl;
////////////////////////////////////////////////////////////////////////////////
/// Construct geometry info

void TMCVerbose::ConstructGeometry()
Axel Naumann's avatar
Axel Naumann committed
      std::cout << "--- Construct geometry " << std::endl;
////////////////////////////////////////////////////////////////////////////////
/// Construct geometry for optical physics info

Rene Brun's avatar
Rene Brun committed
void TMCVerbose::ConstructOpGeometry()
Axel Naumann's avatar
Axel Naumann committed
      std::cout << "--- Construct geometry for optical processes" << std::endl;
Rene Brun's avatar
Rene Brun committed
}

////////////////////////////////////////////////////////////////////////////////
/// Initialize geometry info

void TMCVerbose::InitGeometry()
Axel Naumann's avatar
Axel Naumann committed
      std::cout << "--- Init geometry " << std::endl;
////////////////////////////////////////////////////////////////////////////////
/// Add particles info

Rene Brun's avatar
Rene Brun committed
void TMCVerbose::AddParticles()
Axel Naumann's avatar
Axel Naumann committed
      std::cout << "--- Add particles " << std::endl;
Rene Brun's avatar
Rene Brun committed
}

////////////////////////////////////////////////////////////////////////////////
/// Add ions info

Axel Naumann's avatar
Axel Naumann committed
      std::cout << "--- Add ions " << std::endl;
////////////////////////////////////////////////////////////////////////////////
/// Generate primaries info

void TMCVerbose::GeneratePrimaries()
Axel Naumann's avatar
Axel Naumann committed
      std::cout << "--- Generate primaries " << std::endl;
////////////////////////////////////////////////////////////////////////////////
/// Begin event info

void TMCVerbose::BeginEvent()
Axel Naumann's avatar
Axel Naumann committed
      std::cout << "--- Begin event " << std::endl;
////////////////////////////////////////////////////////////////////////////////
/// Begin of a primary track info

void TMCVerbose::BeginPrimary()
Axel Naumann's avatar
Axel Naumann committed
      std::cout << "--- Begin primary " << std::endl;
////////////////////////////////////////////////////////////////////////////////
/// Begin of each track info

void TMCVerbose::PreTrack()
      PrintBanner();
      PrintTrackInfo();
      PrintBanner();
      PrintStepHeader();
      fStepNumber = 0;
      return;
Axel Naumann's avatar
Axel Naumann committed
      std::cout << "--- Pre track " << std::endl;
////////////////////////////////////////////////////////////////////////////////
/// Stepping info

void TMCVerbose::Stepping()
   if (fLevel>2) {
#if __GNUC__ >= 3
Axel Naumann's avatar
Axel Naumann committed
      std::cout << std::fixed;
#endif
      // Step number
Axel Naumann's avatar
Axel Naumann committed
      std::cout << "#" << std::setw(4) << fStepNumber++ << "  ";

      // Position
      //
      Double_t x, y, z;
      gMC->TrackPosition(x, y, z);
Axel Naumann's avatar
Axel Naumann committed
      std::cout << std::setw(8) << std::setprecision(3) << x << " "
           << std::setw(8) << std::setprecision(3) << y << " "
           << std::setw(8) << std::setprecision(3) << z << "  ";

      // Kinetic energy
      Double_t px, py, pz, etot;
      gMC->TrackMomentum(px, py, pz, etot);
      Double_t ekin = etot - gMC->TrackMass();
Axel Naumann's avatar
Axel Naumann committed
      std::cout << std::setw(9) << std::setprecision(4) << ekin*1e03 << " ";
      // Energy deposit
Axel Naumann's avatar
Axel Naumann committed
      std::cout << std::setw(9) << std::setprecision(4) << gMC->Edep()*1e03 << " ";
      // Step length
Axel Naumann's avatar
Axel Naumann committed
      std::cout << std::setw(8) << std::setprecision(3) << gMC->TrackStep() << " ";

      // Track length
Axel Naumann's avatar
Axel Naumann committed
      std::cout << std::setw(8) << std::setprecision(3) << gMC->TrackLength() << "     ";
      if (gMC->CurrentVolName() != 0)
Axel Naumann's avatar
Axel Naumann committed
         std::cout << std::setw(4) << gMC->CurrentVolName() << "  ";
Axel Naumann's avatar
Axel Naumann committed
         std::cout << std::setw(4) << "None"  << "  ";
      TArrayI processes;
      Int_t nofProcesses = gMC->StepProcesses(processes);
      if (nofProcesses > 0)
Axel Naumann's avatar
Axel Naumann committed
         std::cout << TMCProcessName[processes[nofProcesses-1]];
Axel Naumann's avatar
Axel Naumann committed
      std::cout << std::endl;
////////////////////////////////////////////////////////////////////////////////
/// Finish of each track info

void TMCVerbose::PostTrack()
Axel Naumann's avatar
Axel Naumann committed
      std::cout << "--- Post track " << std::endl;
////////////////////////////////////////////////////////////////////////////////
/// Finish of a primary track info

void TMCVerbose::FinishPrimary()
Axel Naumann's avatar
Axel Naumann committed
      std::cout << "--- Finish primary " << std::endl;
////////////////////////////////////////////////////////////////////////////////
/// Finish of an event info

void TMCVerbose::FinishEvent()
Axel Naumann's avatar
Axel Naumann committed
      std::cout << "--- Finish event " << std::endl;