ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// Class that can be plugged in the simulation to monitor transport timing per 
// particle for each geometry volume.
//
//  andrei.gheata@cern.ch 

#include "AliTransportMonitor.h"

#include "TDatabasePDG.h"
#include "TCanvas.h"
#include "TMath.h"
#include "TFile.h"
#include "TROOT.h"
#include "THashList.h"
#include "TH2F.h"
#include "TGeoManager.h"
#include "AliPDG.h"
#include "TVirtualMC.h"

ClassImp(AliTransportMonitor)
ClassImp(AliTransportMonitor::AliTransportMonitorVol)
ClassImp(AliTransportMonitor::AliTransportMonitorVol::AliPMonData)

typedef AliTransportMonitor::AliTransportMonitorVol::AliPMonData PMonData;

//______________________________________________________________________________
AliTransportMonitor::AliTransportMonitorVol::AliTransportMonitorVol()
                    :TNamed(),
                     fNtypes(0),
                     fTotalTime(0),
                     fNSteps(0),
                     fPData(0),
                     fTimeRZ(0),
                     fParticles()
{
// Default constructor
}

//______________________________________________________________________________
AliTransportMonitor::AliTransportMonitorVol::~AliTransportMonitorVol()
{
// Destructor
  delete [] fPData;
  delete fTimeRZ;
}

//______________________________________________________________________________
void AliTransportMonitor::AliTransportMonitorVol::StepInfo(
                                    Int_t pdg,
                                    Double_t energy, 
                                    Double_t dt,
                                    Double_t x, Double_t y, Double_t z)
{
// This method is called at each N steps to store timing info.
  PMonData &data = GetPMonData(pdg);
  data.fEdt += energy*dt;
  data.fTime += dt;
  fTotalTime += dt;
  fNSteps += 1.;
  if (!fTimeRZ) {
    Bool_t status = TH1::AddDirectoryStatus();
    TH1::AddDirectory(kFALSE);
    fTimeRZ = new TH2F("h2rz", "", 100, -5000., 5000, 100, 0., 1000.);
    TH1::AddDirectory(status);
  }
  Double_t r = TMath::Sqrt(x*x+y*y);
  fTimeRZ->Fill(z,r,dt);
}

//______________________________________________________________________________
PMonData &AliTransportMonitor::AliTransportMonitorVol::GetPMonData(Int_t pdg)
{
// Retrieve stored monitoring object for a given pdg type. If not existing 
// create one.

  // The object could have been retrieved from file, in which case we have to 
  // build the map.
  //
  // unknown heavy fragment ?
  //  TParticlePDG* pdgP = (TDatabasePDG::Instance())->GetParticle(pdg);
  Int_t apdg = TMath::Abs(pdg);
  if ((apdg > 10000) 
      && (apdg != 1000010020)
      && (apdg != 1000010030)
      && (apdg != 1000020030)
      && (apdg != 1000020040)
      && (apdg != 50000050)
      && (apdg != 50000051)
      ) 
    pdg = 1111111111; 

  PMonData *data;
  if (fNtypes) {
    if (fParticles.empty()) {
      for (Int_t i=0; i<fNtypes; i++) {
        data = &fPData[i];
        fParticles[i] = data->fPDG;
      }
    }
    ParticleMapIt_t it = fParticles.find(pdg);
    if (it == fParticles.end()) {
      data = &fPData[fNtypes]; 
      data->fPDG = pdg;
      fParticles[pdg] = fNtypes++;
    } else {
      data = &fPData[it->second];
    }  
  } else {
     TDatabasePDG *pdgDB = TDatabasePDG::Instance();
     if (!pdgDB->ParticleList()) AliPDG::AddParticlesToPdgDataBase();
     Int_t size = pdgDB->ParticleList()->GetSize();
     // account for heavy fragments coded as "1111111111"
     //
     fPData = new PMonData[size+10];
     data = &fPData[fNtypes];
     data->fPDG = pdg;
     fParticles[pdg] = fNtypes++;
  }
  return *data;
}

void AliTransportMonitor::AliTransportMonitorVol::Merge(AliTransportMonitorVol* volM) 
{
  //
  // Merging
  //
  fTotalTime = (fTotalTime + volM->GetTotalTime());
  if (fTimeRZ && volM->GetHistogram()) {
    fTimeRZ->Add(volM->GetHistogram()); 
  } else if (volM->GetHistogram()) {
    fTimeRZ = (TH2F*)(volM->GetHistogram()->Clone());
  }

  Int_t ntypes = volM->GetNtypes();
  for (Int_t i = 0; i < ntypes; i++) {
    Int_t pdg = volM->GetPDG(i);
     PMonData &data  = GetPMonData(pdg);
     data.fEdt  += (volM->GetEmed(i) * volM->GetTotalTime());
     data.fTime += (volM->GetTime(i));
  }
}

ClassImp(AliTransportMonitor)

//______________________________________________________________________________
AliTransportMonitor::AliTransportMonitor()
                    :TObject(),
                     fTotalTime(0),
                     fTimer(),
                     fVolumeMon(0)
{
// Default constructor
}

//______________________________________________________________________________
AliTransportMonitor::AliTransportMonitor(Int_t nvolumes)
                    :TObject(),
                     fTotalTime(0),
                     fTimer(),
                     fVolumeMon(0)
{
// Default constructor
  fVolumeMon = new TObjArray(nvolumes);
  fVolumeMon->SetOwner();
  for (Int_t i=0; i<nvolumes; i++) {
    AliTransportMonitorVol *volMon = new AliTransportMonitorVol();
    if (TVirtualMC::GetMC()) volMon->SetName(TVirtualMC::GetMC()->VolName(i));
    fVolumeMon->Add(volMon);
  }   
}

//______________________________________________________________________________
AliTransportMonitor::~AliTransportMonitor()
{
// Destructor
  delete fVolumeMon;
}

//______________________________________________________________________________
void AliTransportMonitor::Print(Option_t *volName) const
{
// Inspect the timing statistics for a single volume or for all the setup
  Int_t uid = -1;
  Int_t ntotal = 0;
  if (!fVolumeMon || !(ntotal=fVolumeMon->GetEntriesFast())) {
     Info("Inspect", "Transport monitor is empty !");
     return;
  }   
  if (strlen(volName)) {
    TString svname = volName;
    Int_t i = 0;
    for (i=1; i<ntotal; i++) if (svname == fVolumeMon->At(i)->GetName()) break;
    if (i==ntotal) {
       Error("Inspect", "No monitoring info stored for volume %s", volName);
       return;
    }
    uid = i;
    AliTransportMonitorVol *volMon = (AliTransportMonitorVol*)fVolumeMon->At(uid);
    Int_t ntypes = volMon->GetNtypes();
    if (!ntypes) {
      Info("Inspect", "No particles crossed volume %s", volName);
      return;
    }  
    Double_t *timeperpart = new Double_t[ntypes];
    Int_t *isort = new Int_t[ntypes];
    Double_t timepervol = 0.;
    for (i=0; i<ntypes; i++) {
      timeperpart[i] = volMon->GetTime(i); 
      timepervol += timeperpart[i];
    }
    printf("Volume %s: Transport time: %g%% of %g %g [s]\n", volMon->GetName(), 100.*timepervol/fTotalTime, fTotalTime,
	   volMon->GetTotalTime());
    TMath::Sort(ntypes, timeperpart, isort, kTRUE);
    TString particle;
    TDatabasePDG *pdgDB = TDatabasePDG::Instance();    
    if (!pdgDB->ParticleList()) AliPDG::AddParticlesToPdgDataBase();
    for (i=0; i<ntypes; i++)  {
       timeperpart[i] /=  timepervol;
       TParticlePDG* pdgP =  pdgDB->GetParticle(volMon->GetPDG(isort[i]));
       if (pdgP) {
	 particle = pdgDB->GetParticle(volMon->GetPDG(isort[i]))->GetName();
       } else {
	 particle = Form("pdg code not in DB: %d", volMon->GetPDG(isort[i]));
       }
       printf("   %s: %g%%  mean energy: %g\n", particle.Data(), 100.*timeperpart[i], volMon->GetEmed(i));
    }
    if (volMon->GetHistogram()) {
      TCanvas *c1 = (TCanvas*)gROOT->GetListOfCanvases()->FindObject("crz");
      if (!c1) c1 = new TCanvas("crz");
      c1->cd();
      volMon->GetHistogram()->GetXaxis()->SetTitle("z [cm]");
      volMon->GetHistogram()->GetYaxis()->SetTitle("r [cm]");
      volMon->GetHistogram()->SetTitle(Form("RZ plot weighted by time spent in %s",volMon->GetName()));
      volMon->GetHistogram()->Draw();
    }  
    return;
  }
  // General view
  TIter next(fVolumeMon);
  AliTransportMonitorVol *volMon;
  Int_t ncrossed = 0;
  TH1F *hnames = new TH1F("volume_timing", "relative volume timing", 3,0,3);
  hnames->SetStats(0);
  hnames->SetFillColor(38);
  hnames->SetBit(TH1::kCanRebin);
  while ((volMon=(AliTransportMonitorVol*)next())) {
    if (volMon->GetNtypes()) {
      hnames->Fill(volMon->GetName(), volMon->GetTotalTime());
      ncrossed++;
    }
  }
  
  hnames->LabelsDeflate();
  hnames->GetXaxis()->LabelsOption(">");
  
  TCanvas *c = (TCanvas*)gROOT->GetListOfCanvases()->FindObject("cvol_timing");
  if (!c) c = new TCanvas("cvol_timing");
  c->cd();
  c->SetLogy();
  hnames->Draw();
  
  printf("=============================================================================\n");
  printf("Effective transport time:  %6.2f minutes\n", fTotalTime/60.);
  printf("Number of crossed volumes: %d from %d\n", ncrossed, fVolumeMon->GetEntriesFast());
  printf("=============================================================================\n");  
}     

//______________________________________________________________________________
void AliTransportMonitor::DummyStep()
{
// Reset timer for zero-length steps
   fTimer.Stop();
   fTimer.Start(kTRUE);
}   

//______________________________________________________________________________
void AliTransportMonitor::StepInfo( Int_t volId,
                                    Int_t pdg,
                                    Double_t energy, 
                                    Double_t x, Double_t y, Double_t z)
{
// This method is called at each N steps to store timing info.
  fTimer.Stop();
  Double_t dt = fTimer.RealTime();
  fTotalTime += dt;
  AliTransportMonitorVol *volMon = (AliTransportMonitorVol*)fVolumeMon->At(volId);
  volMon->StepInfo(pdg,energy,dt,x,y,z);
  fTimer.Start(kTRUE);
}

//______________________________________________________________________________
void AliTransportMonitor::Start()
{
// Start collecting timing information
  if (fTotalTime > 0) {
    Info("Start", "Cannot start twice");
    return;
  }
  fTimer.Start(kTRUE);
}

//______________________________________________________________________________
void AliTransportMonitor::Stop()
{
// Stop the global timer
  fTimer.Stop();
}

//______________________________________________________________________________
void AliTransportMonitor::Export(const char *fname)
{
// Export information to file
  TFile *file = TFile::Open(fname, "RECREATE");
  Write();
  file->Write();
  file->Close();
}  
//______________________________________________________________________________
void AliTransportMonitor::Merge(AliTransportMonitor* mergeMon)
{

  // merge with monitor 
  if (!fVolumeMon) 
    {
      TObjArray* arr = mergeMon->GetVolumes();
      Int_t nvol = arr->GetEntriesFast();
      fVolumeMon = new TObjArray(nvol);
      fVolumeMon->SetOwner();
      for (Int_t i = 0; i < nvol; i++) {
	AliTransportMonitorVol *volMon = new AliTransportMonitorVol();
	volMon->SetName(arr->At(i)->GetName());
	fVolumeMon->Add(volMon);
      }
    } // first time


  Int_t n = fVolumeMon->GetEntriesFast();
  TObjArray* mergeVols = mergeMon->GetVolumes();
  fTotalTime = 0;
  for (Int_t i = 0; i < n; i++)
    {
      AliTransportMonitorVol *volMon1 = (AliTransportMonitorVol*)fVolumeMon->At(i);      
      AliTransportMonitorVol *volMon2 = (AliTransportMonitorVol*)mergeVols->At(i);      
      volMon1->Merge(volMon2);
      fTotalTime += (volMon1->GetTotalTime());
    }
}
//______________________________________________________________________________
AliTransportMonitor *AliTransportMonitor::Import(const char *fname)
{
// Import information from a file
  TFile *file = TFile::Open(fname);
  if (!file) {
    ::Error("Import", "File %s could not be opened", fname);
    return 0;
  }
  AliTransportMonitor *mon = (AliTransportMonitor *)file->Get("AliTransportMonitor");
  if (!mon) {
    ::Error("Import", "No AliTransportMonitor object found n file %s", fname);
    return 0;
  }
  AliPDG::AddParticlesToPdgDataBase();
  return mon;
}

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