ROOT logo
// @(#)root/vmc:$Id: TMCVerbose.cxx 20882 2007-11-19 11:31:26Z rdm $
// 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 for printing detailed info from MC application.
// Defined levels:
//  0  no output
//  1  info up to event level
//  2  info up to tracking level
//  3  detailed info for each step
//______________________________________________________________________________


ClassImp(TMCVerbose)

//_____________________________________________________________________________
TMCVerbose::TMCVerbose(Int_t level)
  : TObject(),
    fLevel(level),
    fStepNumber(0)
{
// Standard constructor
// ---

}

//_____________________________________________________________________________
TMCVerbose::TMCVerbose()
  : TObject(),
    fLevel(0),
    fStepNumber(0)
{
// Default constructor
// ---
}

//_____________________________________________________________________________
TMCVerbose::~TMCVerbose()
{
// Destructor
// ---
}

//
// private methods
//

//_____________________________________________________________________________
void TMCVerbose::PrintBanner() const
{
// Prints banner for track information
// ---

   cout << endl;
   for (Int_t i=0; i<10; i++) cout << "**********";
   cout << endl;
}

//_____________________________________________________________________________
void TMCVerbose::PrintTrackInfo() const
{
// Prints track information
// ---

   // Particle
   //
   cout << "  Particle = ";
   TParticlePDG* particle = TDatabasePDG::Instance()->GetParticle(gMC->TrackPid());
   if (particle)
      cout << particle->GetName() << "  ";
   else
      cout << "unknown" << "  ";

   // Track ID
   //
   cout << "   Track ID = " << gMC->GetStack()->GetCurrentTrackNumber() << "  ";

   // Parent ID
   //
   cout << "   Parent ID = " << gMC->GetStack()->GetCurrentParentTrackNumber();
}

//_____________________________________________________________________________
void TMCVerbose::PrintStepHeader() const
{
// Prints the header for stepping information
// ---

   cout << "Step#     "
        << "X(cm)    "
        << "Y(cm)    "
        << "Z(cm)  "
        << "KinE(MeV)   "
        << "dE(MeV) "
        << "Step(cm) "
        << "TrackL(cm) "
        << "Volume  "
        << "Process "
        << endl;
}

//
// public methods
//

//_____________________________________________________________________________
void TMCVerbose::InitMC()
{
// Initialize MC info.
// ---

   if (fLevel>0)
      cout << "--- Init MC " << endl;
}

//_____________________________________________________________________________
void TMCVerbose::RunMC(Int_t nofEvents)
{
// MC run info.
// ---

   if (fLevel>0)
      cout << "--- Run MC for " << nofEvents << " events" << endl;
}

//_____________________________________________________________________________
void TMCVerbose::FinishRun()
{
// Finish MC run info.
// ---

   if (fLevel>0)
      cout << "--- Finish Run MC " << endl;
}

//_____________________________________________________________________________
void TMCVerbose::ConstructGeometry()
{
// Construct geometry info
// ---

   if (fLevel>0)
      cout << "--- Construct geometry " << endl;
}

//_____________________________________________________________________________
void TMCVerbose::ConstructOpGeometry()
{
// Construct geometry for optical physics info
// ---

   if (fLevel>0)
      cout << "--- Construct geometry for optical processes" << endl;
}

//_____________________________________________________________________________
void TMCVerbose::InitGeometry()
{
// Initialize geometry info
// ---

   if (fLevel>0)
      cout << "--- Init geometry " << endl;
}

//_____________________________________________________________________________
void TMCVerbose::AddParticles()
{
// Add particles info
// ---

   if (fLevel>0)
      cout << "--- Add particles " << endl;
}

//_____________________________________________________________________________
void TMCVerbose::AddIons()
{
// Add ions info
// ---

   if (fLevel>0)
      cout << "--- Add ions " << endl;
}

//_____________________________________________________________________________
void TMCVerbose::GeneratePrimaries()
{
// Generate primaries info
// ---

   if (fLevel>0)
      cout << "--- Generate primaries " << endl;
}

//_____________________________________________________________________________
void TMCVerbose::BeginEvent()
{
// Begin event info
// ---

   if (fLevel>0)
      cout << "--- Begin event " << endl;
}

//_____________________________________________________________________________
void TMCVerbose::BeginPrimary()
{
// Begin of a primary track info
// ---

   if (fLevel>1)
      cout << "--- Begin primary " << endl;
}

//_____________________________________________________________________________
void TMCVerbose::PreTrack()
{
// Begin of each track info
// ---

   if (fLevel>2) {
      PrintBanner();
      PrintTrackInfo();
      PrintBanner();
      PrintStepHeader();

      fStepNumber = 0;

      return;
   }

   if (fLevel>1)
      cout << "--- Pre track " << endl;
}

//_____________________________________________________________________________
void TMCVerbose::Stepping()
{
// Stepping info
// ---

   if (fLevel>2) {

#if __GNUC__ >= 3
      cout << std::fixed;
#endif

      // Step number
      //
      cout << "#" << setw(4) << fStepNumber++ << "  ";

      // Position
      //
      Double_t x, y, z;
      gMC->TrackPosition(x, y, z);
      cout << setw(8) << setprecision(3) << x << " "
           << setw(8) << setprecision(3) << y << " "
           << setw(8) << setprecision(3) << z << "  ";

      // Kinetic energy
      //
      Double_t px, py, pz, etot;
      gMC->TrackMomentum(px, py, pz, etot);
      Double_t ekin = etot - gMC->TrackMass();
      cout << setw(9) << setprecision(4) << ekin*1e03 << " ";

      // Energy deposit
      //
      cout << setw(9) << setprecision(4) << gMC->Edep()*1e03 << " ";

      // Step length
      //
      cout << setw(8) << setprecision(3) << gMC->TrackStep() << " ";

      // Track length
      //
      cout << setw(8) << setprecision(3) << gMC->TrackLength() << "     ";

      // Volume
      //
      if (gMC->CurrentVolName() != 0)
         cout << setw(4) << gMC->CurrentVolName() << "  ";
      else
         cout << setw(4) << "None"  << "  ";

      // Process
      //
      TArrayI processes;
      Int_t nofProcesses = gMC->StepProcesses(processes);
      if (nofProcesses > 0)
         cout << TMCProcessName[processes[nofProcesses-1]];

      cout << endl;
   }
}

//_____________________________________________________________________________
void TMCVerbose::PostTrack()
{
// Finish of each track info
// ---

   if (fLevel==2)
      cout << "--- Post track " << endl;
}

//_____________________________________________________________________________
void TMCVerbose::FinishPrimary()
{
// Finish of a primary track info
// ---

   if (fLevel==2)
      cout << "--- Finish primary " << endl;
}

//_____________________________________________________________________________
void TMCVerbose::FinishEvent()
{
// Finish of an event info
// ---

   if (fLevel>0)
      cout << "--- Finish event " << endl;
}

 TMCVerbose.cxx:1
 TMCVerbose.cxx:2
 TMCVerbose.cxx:3
 TMCVerbose.cxx:4
 TMCVerbose.cxx:5
 TMCVerbose.cxx:6
 TMCVerbose.cxx:7
 TMCVerbose.cxx:8
 TMCVerbose.cxx:9
 TMCVerbose.cxx:10
 TMCVerbose.cxx:11
 TMCVerbose.cxx:12
 TMCVerbose.cxx:13
 TMCVerbose.cxx:14
 TMCVerbose.cxx:15
 TMCVerbose.cxx:16
 TMCVerbose.cxx:17
 TMCVerbose.cxx:18
 TMCVerbose.cxx:19
 TMCVerbose.cxx:20
 TMCVerbose.cxx:21
 TMCVerbose.cxx:22
 TMCVerbose.cxx:23
 TMCVerbose.cxx:24
 TMCVerbose.cxx:25
 TMCVerbose.cxx:26
 TMCVerbose.cxx:27
 TMCVerbose.cxx:28
 TMCVerbose.cxx:29
 TMCVerbose.cxx:30
 TMCVerbose.cxx:31
 TMCVerbose.cxx:32
 TMCVerbose.cxx:33
 TMCVerbose.cxx:34
 TMCVerbose.cxx:35
 TMCVerbose.cxx:36
 TMCVerbose.cxx:37
 TMCVerbose.cxx:38
 TMCVerbose.cxx:39
 TMCVerbose.cxx:40
 TMCVerbose.cxx:41
 TMCVerbose.cxx:42
 TMCVerbose.cxx:43
 TMCVerbose.cxx:44
 TMCVerbose.cxx:45
 TMCVerbose.cxx:46
 TMCVerbose.cxx:47
 TMCVerbose.cxx:48
 TMCVerbose.cxx:49
 TMCVerbose.cxx:50
 TMCVerbose.cxx:51
 TMCVerbose.cxx:52
 TMCVerbose.cxx:53
 TMCVerbose.cxx:54
 TMCVerbose.cxx:55
 TMCVerbose.cxx:56
 TMCVerbose.cxx:57
 TMCVerbose.cxx:58
 TMCVerbose.cxx:59
 TMCVerbose.cxx:60
 TMCVerbose.cxx:61
 TMCVerbose.cxx:62
 TMCVerbose.cxx:63
 TMCVerbose.cxx:64
 TMCVerbose.cxx:65
 TMCVerbose.cxx:66
 TMCVerbose.cxx:67
 TMCVerbose.cxx:68
 TMCVerbose.cxx:69
 TMCVerbose.cxx:70
 TMCVerbose.cxx:71
 TMCVerbose.cxx:72
 TMCVerbose.cxx:73
 TMCVerbose.cxx:74
 TMCVerbose.cxx:75
 TMCVerbose.cxx:76
 TMCVerbose.cxx:77
 TMCVerbose.cxx:78
 TMCVerbose.cxx:79
 TMCVerbose.cxx:80
 TMCVerbose.cxx:81
 TMCVerbose.cxx:82
 TMCVerbose.cxx:83
 TMCVerbose.cxx:84
 TMCVerbose.cxx:85
 TMCVerbose.cxx:86
 TMCVerbose.cxx:87
 TMCVerbose.cxx:88
 TMCVerbose.cxx:89
 TMCVerbose.cxx:90
 TMCVerbose.cxx:91
 TMCVerbose.cxx:92
 TMCVerbose.cxx:93
 TMCVerbose.cxx:94
 TMCVerbose.cxx:95
 TMCVerbose.cxx:96
 TMCVerbose.cxx:97
 TMCVerbose.cxx:98
 TMCVerbose.cxx:99
 TMCVerbose.cxx:100
 TMCVerbose.cxx:101
 TMCVerbose.cxx:102
 TMCVerbose.cxx:103
 TMCVerbose.cxx:104
 TMCVerbose.cxx:105
 TMCVerbose.cxx:106
 TMCVerbose.cxx:107
 TMCVerbose.cxx:108
 TMCVerbose.cxx:109
 TMCVerbose.cxx:110
 TMCVerbose.cxx:111
 TMCVerbose.cxx:112
 TMCVerbose.cxx:113
 TMCVerbose.cxx:114
 TMCVerbose.cxx:115
 TMCVerbose.cxx:116
 TMCVerbose.cxx:117
 TMCVerbose.cxx:118
 TMCVerbose.cxx:119
 TMCVerbose.cxx:120
 TMCVerbose.cxx:121
 TMCVerbose.cxx:122
 TMCVerbose.cxx:123
 TMCVerbose.cxx:124
 TMCVerbose.cxx:125
 TMCVerbose.cxx:126
 TMCVerbose.cxx:127
 TMCVerbose.cxx:128
 TMCVerbose.cxx:129
 TMCVerbose.cxx:130
 TMCVerbose.cxx:131
 TMCVerbose.cxx:132
 TMCVerbose.cxx:133
 TMCVerbose.cxx:134
 TMCVerbose.cxx:135
 TMCVerbose.cxx:136
 TMCVerbose.cxx:137
 TMCVerbose.cxx:138
 TMCVerbose.cxx:139
 TMCVerbose.cxx:140
 TMCVerbose.cxx:141
 TMCVerbose.cxx:142
 TMCVerbose.cxx:143
 TMCVerbose.cxx:144
 TMCVerbose.cxx:145
 TMCVerbose.cxx:146
 TMCVerbose.cxx:147
 TMCVerbose.cxx:148
 TMCVerbose.cxx:149
 TMCVerbose.cxx:150
 TMCVerbose.cxx:151
 TMCVerbose.cxx:152
 TMCVerbose.cxx:153
 TMCVerbose.cxx:154
 TMCVerbose.cxx:155
 TMCVerbose.cxx:156
 TMCVerbose.cxx:157
 TMCVerbose.cxx:158
 TMCVerbose.cxx:159
 TMCVerbose.cxx:160
 TMCVerbose.cxx:161
 TMCVerbose.cxx:162
 TMCVerbose.cxx:163
 TMCVerbose.cxx:164
 TMCVerbose.cxx:165
 TMCVerbose.cxx:166
 TMCVerbose.cxx:167
 TMCVerbose.cxx:168
 TMCVerbose.cxx:169
 TMCVerbose.cxx:170
 TMCVerbose.cxx:171
 TMCVerbose.cxx:172
 TMCVerbose.cxx:173
 TMCVerbose.cxx:174
 TMCVerbose.cxx:175
 TMCVerbose.cxx:176
 TMCVerbose.cxx:177
 TMCVerbose.cxx:178
 TMCVerbose.cxx:179
 TMCVerbose.cxx:180
 TMCVerbose.cxx:181
 TMCVerbose.cxx:182
 TMCVerbose.cxx:183
 TMCVerbose.cxx:184
 TMCVerbose.cxx:185
 TMCVerbose.cxx:186
 TMCVerbose.cxx:187
 TMCVerbose.cxx:188
 TMCVerbose.cxx:189
 TMCVerbose.cxx:190
 TMCVerbose.cxx:191
 TMCVerbose.cxx:192
 TMCVerbose.cxx:193
 TMCVerbose.cxx:194
 TMCVerbose.cxx:195
 TMCVerbose.cxx:196
 TMCVerbose.cxx:197
 TMCVerbose.cxx:198
 TMCVerbose.cxx:199
 TMCVerbose.cxx:200
 TMCVerbose.cxx:201
 TMCVerbose.cxx:202
 TMCVerbose.cxx:203
 TMCVerbose.cxx:204
 TMCVerbose.cxx:205
 TMCVerbose.cxx:206
 TMCVerbose.cxx:207
 TMCVerbose.cxx:208
 TMCVerbose.cxx:209
 TMCVerbose.cxx:210
 TMCVerbose.cxx:211
 TMCVerbose.cxx:212
 TMCVerbose.cxx:213
 TMCVerbose.cxx:214
 TMCVerbose.cxx:215
 TMCVerbose.cxx:216
 TMCVerbose.cxx:217
 TMCVerbose.cxx:218
 TMCVerbose.cxx:219
 TMCVerbose.cxx:220
 TMCVerbose.cxx:221
 TMCVerbose.cxx:222
 TMCVerbose.cxx:223
 TMCVerbose.cxx:224
 TMCVerbose.cxx:225
 TMCVerbose.cxx:226
 TMCVerbose.cxx:227
 TMCVerbose.cxx:228
 TMCVerbose.cxx:229
 TMCVerbose.cxx:230
 TMCVerbose.cxx:231
 TMCVerbose.cxx:232
 TMCVerbose.cxx:233
 TMCVerbose.cxx:234
 TMCVerbose.cxx:235
 TMCVerbose.cxx:236
 TMCVerbose.cxx:237
 TMCVerbose.cxx:238
 TMCVerbose.cxx:239
 TMCVerbose.cxx:240
 TMCVerbose.cxx:241
 TMCVerbose.cxx:242
 TMCVerbose.cxx:243
 TMCVerbose.cxx:244
 TMCVerbose.cxx:245
 TMCVerbose.cxx:246
 TMCVerbose.cxx:247
 TMCVerbose.cxx:248
 TMCVerbose.cxx:249
 TMCVerbose.cxx:250
 TMCVerbose.cxx:251
 TMCVerbose.cxx:252
 TMCVerbose.cxx:253
 TMCVerbose.cxx:254
 TMCVerbose.cxx:255
 TMCVerbose.cxx:256
 TMCVerbose.cxx:257
 TMCVerbose.cxx:258
 TMCVerbose.cxx:259
 TMCVerbose.cxx:260
 TMCVerbose.cxx:261
 TMCVerbose.cxx:262
 TMCVerbose.cxx:263
 TMCVerbose.cxx:264
 TMCVerbose.cxx:265
 TMCVerbose.cxx:266
 TMCVerbose.cxx:267
 TMCVerbose.cxx:268
 TMCVerbose.cxx:269
 TMCVerbose.cxx:270
 TMCVerbose.cxx:271
 TMCVerbose.cxx:272
 TMCVerbose.cxx:273
 TMCVerbose.cxx:274
 TMCVerbose.cxx:275
 TMCVerbose.cxx:276
 TMCVerbose.cxx:277
 TMCVerbose.cxx:278
 TMCVerbose.cxx:279
 TMCVerbose.cxx:280
 TMCVerbose.cxx:281
 TMCVerbose.cxx:282
 TMCVerbose.cxx:283
 TMCVerbose.cxx:284
 TMCVerbose.cxx:285
 TMCVerbose.cxx:286
 TMCVerbose.cxx:287
 TMCVerbose.cxx:288
 TMCVerbose.cxx:289
 TMCVerbose.cxx:290
 TMCVerbose.cxx:291
 TMCVerbose.cxx:292
 TMCVerbose.cxx:293
 TMCVerbose.cxx:294
 TMCVerbose.cxx:295
 TMCVerbose.cxx:296
 TMCVerbose.cxx:297
 TMCVerbose.cxx:298
 TMCVerbose.cxx:299
 TMCVerbose.cxx:300
 TMCVerbose.cxx:301
 TMCVerbose.cxx:302
 TMCVerbose.cxx:303
 TMCVerbose.cxx:304
 TMCVerbose.cxx:305
 TMCVerbose.cxx:306
 TMCVerbose.cxx:307
 TMCVerbose.cxx:308
 TMCVerbose.cxx:309
 TMCVerbose.cxx:310
 TMCVerbose.cxx:311
 TMCVerbose.cxx:312
 TMCVerbose.cxx:313
 TMCVerbose.cxx:314
 TMCVerbose.cxx:315
 TMCVerbose.cxx:316
 TMCVerbose.cxx:317
 TMCVerbose.cxx:318
 TMCVerbose.cxx:319
 TMCVerbose.cxx:320
 TMCVerbose.cxx:321
 TMCVerbose.cxx:322
 TMCVerbose.cxx:323
 TMCVerbose.cxx:324
 TMCVerbose.cxx:325
 TMCVerbose.cxx:326
 TMCVerbose.cxx:327
 TMCVerbose.cxx:328
 TMCVerbose.cxx:329
 TMCVerbose.cxx:330
 TMCVerbose.cxx:331
 TMCVerbose.cxx:332
 TMCVerbose.cxx:333
 TMCVerbose.cxx:334
 TMCVerbose.cxx:335
 TMCVerbose.cxx:336
 TMCVerbose.cxx:337
 TMCVerbose.cxx:338
 TMCVerbose.cxx:339
 TMCVerbose.cxx:340
 TMCVerbose.cxx:341
 TMCVerbose.cxx:342
 TMCVerbose.cxx:343
 TMCVerbose.cxx:344
 TMCVerbose.cxx:345
 TMCVerbose.cxx:346