ROOT logo
// @(#)root/eve:$Id$
// Author: Matevz Tadel 2007

/**************************************************************************
 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

#include "AliEveTrackCounter.h"

#include "TEveManager.h"
#include "AliEveEventManager.h"
#include "AliEveTrack.h"
#include "AliEveTracklet.h"

#include "AliESDEvent.h"
#include "AliESDtrack.h"
#include "AliMultiplicity.h"

#include <TEveGedEditor.h>

#include <TFile.h>

//==============================================================================
// AliEveTrackCounter
//==============================================================================

//______________________________________________________________________________
//
// Provides event-based method for tagging of good / bad (or primary /
// secondary) tracks. A report can be written into a text file.
//
// AliEveTrack status is toggled by using secondary-selection / ctrl-click
// functionality of the GL viewer.
//
// Some of the functionality is implemented in AliEveTrackCounterEditor
// class.

ClassImp(AliEveTrackCounter)

//______________________________________________________________________________
AliEveTrackCounter* AliEveTrackCounter::fgInstance = 0;

Bool_t AliEveTrackCounter::IsActive()
{
  // Check if instance exists and is active.

  return fgInstance && fgInstance->fActive;
}

//______________________________________________________________________________
AliEveTrackCounter::AliEveTrackCounter(const Text_t* name, const Text_t* title) :
  TEveElement(),
  TNamed(name, title),

  fBadLineStyle (6),
  fClickAction  (kCA_ToggleTrack),
  fEventId      (-1),
  fAllTracks    (0), fGoodTracks   (0),
  fAllTracklets (0), fGoodTracklets(0),
  fTrackLists   (),  fTrackletLists(),
  fActive       (kFALSE)
{
  // Constructor.
  // Connects to global signal "AliEveTrack", "SecSelected(AliEveTrack*)".

  if (fgInstance == 0) fgInstance = this;

  TQObject::Connect("AliEveTrack", "SecSelectedTrack(AliEveTrack*)",
                    "AliEveTrackCounter", this, "DoTrackAction(AliEveTrack*)");
  TQObject::Connect("AliEveTracklet", "SecSelectedTracklet(AliEveTracklet*)",
                    "AliEveTrackCounter", this, "DoTrackletAction(AliEveTracklet*)");

  AliEveEventManager::GetMaster()->Connect("NewEventDataLoaded()", "AliEveTrackCounter", this, "Reset()");
}

//______________________________________________________________________________
AliEveTrackCounter::~AliEveTrackCounter()
{
  // Destructor.
  // Disconnect from the global track signals.

  AliEveEventManager::GetMaster()->Disconnect("NewEventDataLoaded()", this);

  TQObject::Disconnect("AliEveTrack", "DoTrackAction(AliEveTrack*)");
  TQObject::Disconnect("AliEveTracklet", "DoTrackletAction(AliEveTracklet*)");
  if (fgInstance == this) fgInstance = 0;
}

/******************************************************************************/

//______________________________________________________________________________
void AliEveTrackCounter::Reset()
{
  // Reset internal track-counters and track-list.

  fAllTracks     = fGoodTracks    = 0;
  fAllTracklets  = fGoodTracklets = 0;
  {
    TIter next(&fTrackLists);
    TEveTrackList* tlist;
    while ((tlist = dynamic_cast<TEveTrackList*>(next())))
      tlist->DecDenyDestroy();
    //fTrackLists.Clear("nodelete");
        fTrackLists.Clear();
  }
  {
    TIter next(&fTrackletLists);
    TEveTrackList* tlist;
    while ((tlist = dynamic_cast<TEveTrackList*>(next())))
      tlist->DecDenyDestroy();
    //fTrackletLists.Clear("nodelete");
        fTrackletLists.Clear();
  }

  fEventId = AliEveEventManager::GetMaster()->GetEventId();
}

//______________________________________________________________________________
void AliEveTrackCounter::RegisterTracks(TEveTrackList* tlist, Bool_t goodTracks)
{
  // Register tracks from tlist and tlist itself.
  // If goodTracks is true, they are considered as primary/good
  // tracks.

  tlist->IncDenyDestroy();
  fTrackLists.Add(tlist);

  List_i i = tlist->BeginChildren();
  while (i != tlist->EndChildren())
  {
    AliEveTrack* t = dynamic_cast<AliEveTrack*>(*i);
    if (t != 0)
    {
      if (goodTracks)
      {
        ++fGoodTracks;
	t->GetESDTrack()->SetLabel(3);
      } else {
        t->SetLineStyle(fBadLineStyle);
	t->GetESDTrack()->SetLabel(0);
      }
      ++fAllTracks;
    }
    ++i;
  }
}

//______________________________________________________________________________
void AliEveTrackCounter::RegisterTracklets(TEveTrackList* tlist, Bool_t goodTracks)
{
  // Register tracklets from tlist and tlist itself.
  // If goodTracks is true, they are considered as primary/good
  // tracks.

  AliESDEvent     *esd = AliEveEventManager::AssertESD();
  AliMultiplicity *mul = const_cast<AliMultiplicity*>(esd->GetMultiplicity());

  tlist->IncDenyDestroy();
  fTrackletLists.Add(tlist);

  List_i i = tlist->BeginChildren();
  while (i != tlist->EndChildren())
  {
    AliEveTracklet* t = dynamic_cast<AliEveTracklet*>(*i);
    if (t != 0)
    {
      if (goodTracks)
      {
	mul->SetLabel(t->GetIndex(), 0, 3);
        ++fGoodTracklets;
      } else {
	mul->SetLabel(t->GetIndex(), 0, 0);
        t->SetLineStyle(fBadLineStyle);
      }
      ++fAllTracklets;
    }
    ++i;
  }
}

//______________________________________________________________________________
void AliEveTrackCounter::DoTrackAction(AliEveTrack* track)
{
   // Slot called when track is secondary selected.
   //
   // No check is done if track actually belongs to one of the
   // registered track-lists.
   //
   // Probably it would be safer to copy good/bad tracks into special
   // sub-containers.
   // In this case one should also override RemoveElementLocal.

   static const TEveException eh("AliEveTrackCounter::DoTrackAction ");

   if (!fActive)
     return;

   switch (fClickAction)
   {

      case kCA_PrintTrackInfo:
      {
         printf("AliEveTrack '%s'\n", track->GetObject(eh)->GetName());
         const TEveVector &v = track->GetVertex();
         const TEveVector &p = track->GetMomentum();;
         printf("  Vx=%f, Vy=%f, Vz=%f; Pt=%f, Pz=%f, phi=%f)\n",
                v.fX, v.fY, v.fZ, p.Perp(), p.fZ, TMath::RadToDeg()*p.Phi());
         break;
      }

      case kCA_ToggleTrack:
      {
	 AliESDtrack *esdt = track->GetESDTrack();
         if (track->GetLineStyle() == 1)
         {
            track->SetLineStyle(fBadLineStyle);
	    esdt->SetLabel(esdt->GetLabel() & ~1);
            --fGoodTracks;
         } else {
            track->SetLineStyle(1);
	    esdt->SetLabel(esdt->GetLabel() | 1);
            ++fGoodTracks;
         }
         track->ElementChanged();
         gEve->Redraw3D();

         //printf("AliEveTrackCounter::DoTrackAction All=%d, Good=%d, Bad=%d\n",
         //       fAllTracks, fGoodTracks, fAllTracks-fGoodTracks);

         if (gEve->GetEditor()->GetModel() == GetObject(eh))
            gEve->EditElement(this);

         break;
      }

   } // end switch fClickAction
}

//______________________________________________________________________________
void AliEveTrackCounter::DoTrackletAction(AliEveTracklet* track)
{
   // Slot called when tracklet is secondary selected.
   //
   // No check is done if track actually belongs to one of the
   // registered track-lists.
   //
   // Probably it would be safer to copy good/bad tracks into special
   // sub-containers.
   // In this case one should also override RemoveElementLocal.

   static const TEveException eh("AliEveTrackCounter::DoTrackletAction ");

   if (!fActive)
     return;

   switch (fClickAction)
   {

      case kCA_PrintTrackInfo:
      {
         printf("AliEveTracklet '%s'\n", track->GetObject(eh)->GetName());
         const TEveVector &v = track->GetVertex();
         const TEveVector &p = track->GetMomentum();;
         printf("  Vx=%f, Vy=%f, Vz=%f; Pt=%f, Pz=%f, phi=%f)\n",
                v.fX, v.fY, v.fZ, p.Perp(), p.fZ, TMath::RadToDeg()*p.Phi());
         break;
      }

      case kCA_ToggleTrack:
      {
         AliESDEvent     *esd = AliEveEventManager::AssertESD();
	 AliMultiplicity *mul = const_cast<AliMultiplicity*>(esd->GetMultiplicity());

         if (track->GetLineStyle() == 1)
         {
            track->SetLineStyle(fBadLineStyle);
	    mul->SetLabel(track->GetIndex(), 0, mul->GetLabel(track->GetIndex(), 0) & ~1);
            --fGoodTracklets;
         } else {
            track->SetLineStyle(1);
	    mul->SetLabel(track->GetIndex(), 0, mul->GetLabel(track->GetIndex(), 0) | 1);
            ++fGoodTracklets;
         }
         track->ElementChanged();
         gEve->Redraw3D();

         // printf("AliEveTrackCounter::DoTrackletAction All=%d, Good=%d, Bad=%d\n",
         //        fAllTracklets, fGoodTracklets, fAllTracklets-fGoodTracklets);

         if (gEve->GetEditor()->GetModel() == GetObject(eh))
            gEve->EditElement(this);

         break;
      }

   } // end switch fClickAction
}

/******************************************************************************/

//______________________________________________________________________________
void AliEveTrackCounter::OutputEventTracks()
{
  // Print good-track summary into a plain-text file by iteration
  // through all registered track-lists.
  // State of each track is determined by its line-style, it is
  // considered a good track if it's line style is solid.

  {
    TFile *f = TFile::Open("scan_results.root", "UPDATE");

    AliESDEvent     *esd = AliEveEventManager::AssertESD();
    TClonesArray    *trk = static_cast<TClonesArray*>   (esd->GetList()->FindObject("Tracks"));
    AliMultiplicity *mul = const_cast <AliMultiplicity*>(esd->GetMultiplicity());

    trk->Write(TString::Format("Tracks_%04d",    fEventId), kWriteDelete | kSingleKey);
    mul->Write(TString::Format("Tracklets_%04d", fEventId), kWriteDelete);

    esd->GetPrimaryVertexTracks()->Write(TString::Format("PrimVertTracks_%04d", fEventId), kWriteDelete);
    esd->GetPrimaryVertexTPC()   ->Write(TString::Format("PrimVertTPC_%04d",    fEventId), kWriteDelete);
    esd->GetPrimaryVertexSPD()   ->Write(TString::Format("PrimVertSPD_%04d",    fEventId), kWriteDelete);

    f->Close();
  }
}

//______________________________________________________________________________
void AliEveTrackCounter::PrintEventTracks()
{
  // Print good-track summary to stdout by iteration
  // through all registered track-lists.
  // State of each track is determined by its line-style, it is
  // considered a good track if it's line style is solid.

  FILE* out = stdout;

  fprintf(out, "AliEveTrackCounter::PrintEventTracks()\n");

  fprintf(out, "Event=%d\n", fEventId);
  fprintf(out, "GoodTracks=%d  AllTracks=%d\n", fGoodTracks, fAllTracks);

  {
    TIter tlists(&fTrackLists);
    TEveTrackList* tlist;
    Int_t cnt = 0;
    while ((tlist = (TEveTrackList*) tlists()) != 0)
    {
      List_i i = tlist->BeginChildren();
      while (i != tlist->EndChildren())
      {
        AliEveTrack* t = dynamic_cast<AliEveTrack*>(*i);
        if (t != 0 && t->GetLineStyle() == 1)
        {
          ++cnt;
          fprintf(out, " %2d: chg=%+2d  pt=%8.5f  eta=%+8.5f  phi=%+8.5f\n",
                  cnt, t->GetCharge(), t->GetMomentum().Perp(),
                  t->GetMomentum().Eta(), t->GetMomentum().Phi());
        }
        ++i;
      }
    }
  }

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