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.                  *
**************************************************************************/

// $Id$

///
/// \class AliMUONContourHandler
/// 
/// Class used to create contours of the muon tracker parts :
/// manu, bus patches, detection elements, chambers.
///
/// \author Laurent Aphecetche, Subatech
///

#include "AliMUONContourHandler.h"

#include "AliCodeTimer.h"
#include "AliLog.h"
#include "AliMUONContour.h"
#include "AliMUONContourMaker.h"
#include "AliMUONGeometryDetElement.h"
#include "AliMUONGeometryTransformer.h"
#include "AliMUONManuContourMaker.h"
#include "AliMUONPolygon.h"
#include "AliMUONSegment.h"
#include "AliMpArea.h"
#include "AliMpCDB.h"
#include "AliMpDDLStore.h"
#include "AliMpDEManager.h"
#include "AliMpExMap.h"
#include <float.h>
#include "Riostream.h"
#include "TArrow.h"
#include "TCanvas.h"
#include "TFile.h"
#include "TGeoMatrix.h"
#include "TLine.h"
#include "TObjArray.h"
#include "TPolyLine.h"
#include "TSystem.h"

using std::cout;
using std::endl;
///\cond CLASSIMP
ClassImp(AliMUONContourHandler)
///\endcond

//_____________________________________________________________________________
AliMUONContourHandler::AliMUONContourHandler(Bool_t explodedView) 
: TObject(),
fTransformations(0x0),
fAllContourMap(0x0),
fAllContourArray(0x0)
{
  /// ctor. If explodedView=kTRUE, we generate views that will look 
  /// fine in 2D (i.e. won't show overlaps of DE as in reality)
  /// Use kFALSE if you want realistic geometry, though.
  ///
  /// IMPORTANT : as we many MUON classes, this one cannot work
  /// before you've loaded the mapping in memory (see e.g. AliMpCDB::LoadDDLStore)
  ///
  
  if ( explodedView ) 
  {
    fTransformations = GenerateTransformations(explodedView);
  }
  
  AliMUONManuContourMaker manuMaker(fTransformations);
  
  TObjArray* manus = manuMaker.GenerateManuContours(kTRUE);
  
  if (manus)
  {
    manus->SetOwner(kFALSE);
    GenerateAllContours(*manus);
  }
  delete manus;
}

//_____________________________________________________________________________
AliMUONContourHandler::~AliMUONContourHandler()
{
  /// Dtor
  delete fTransformations;
  delete fAllContourMap;
  delete fAllContourArray;
}

//______________________________________________________________________________
Bool_t 
AliMUONContourHandler::Adopt(AliMUONContour* contour)
{
  /// Adopt the given contour
  if ( GetContour(contour->GetName()) ) 
  {
    // contour already exists
    return kFALSE;
  }
  fAllContourMap->Add(new TObjString(contour->GetName()),contour);
  return kTRUE;
}

//______________________________________________________________________________
TObjArray*
AliMUONContourHandler::CreateContourList(const TObjArray& manuContours)
{    
  /// Create an array of maps of contour names
  ///
  /// Assyming that key is something like station#/chamber#/de#/buspatch#/manu#
  /// the idea here is to put one TMap for each level in mapArray :
  ///
  /// mapArray[0].key = station0
  /// mapArray[0].value = map of strings { station0/chamber0, station0/chamber1 }
  ///
  /// Then each entry in mapArray will be converted into a contour by
  /// merging its children (e.g. station0 contour will be made from the merging
  /// of station0/chamber0 and station0/chamber1 in the example above).
  ///
  
  AliCodeTimerAuto("",0);
  
  Int_t start(0);
  
  if ( !fTransformations )
  {
    start = 2; // skip chamber and station contours, as we seem to be in 3D
  }
    
  TIter next(&manuContours);
  AliMUONContour* contour;
  TObjArray* mapArray = new TObjArray;
  
  while ( ( contour = static_cast<AliMUONContour*>(next()) ) )
  {
    // Key is something like station#/chamber#/de#/buspatch#/manu#
    
    TString key(contour->GetName());
    TObjArray* s = key.Tokenize("/");
    for ( Int_t i = start; i < s->GetLast(); ++i ) 
    {
      TMap* m = static_cast<TMap*>(mapArray->At(i));
      if (!m)
      {
        m = new TMap;
        if ( i > mapArray->GetSize() ) mapArray->Expand(i);
        mapArray->AddAt(m,i);
      }
      TString parent;
      for ( Int_t k = 0; k <= i; ++k )
      {
        TObjString* str = static_cast<TObjString*>(s->At(k));
        parent += str->String();
        if ( k < i ) parent += "/";
      }
      TString child(parent);
      child += "/";
      child += static_cast<TObjString*>(s->At(i+1))->String();
      
      TObjArray* ma = static_cast<TObjArray*>(m->GetValue(parent.Data()));
      if (!ma)
      {
        ma = new TObjArray;
        m->Add(new TObjString(parent.Data()),ma);
      }
      TPair* p = static_cast<TPair*>(ma->FindObject(child.Data()));
      if ( !p ) 
      {
        ma->Add(new TObjString(child.Data()));
      }
    }
    delete s;
  }
  
  return mapArray;
}

//______________________________________________________________________________
void
AliMUONContourHandler::GenerateAllContours(const TObjArray& manuContours)
{
  /// From a map of manu contours, generate the compound contours (bp, de, etc...)
  /// by merging them.
  /// Note that manuContours should NOT be the owner of its contours,
  /// as they are adopted by the array returned by this method.
  
  AliCodeTimerAuto("",0);
  
  // Get the list of contours to create
  TObjArray* mapArray = CreateContourList(manuContours);
  
  fAllContourMap = new TMap(20000,1);
  fAllContourMap->SetOwnerKeyValue(kTRUE,kTRUE);
  
  fAllContourArray = new TObjArray;
  fAllContourArray->SetOwner(kFALSE); // the map is the real owner of the contours
  
  TIter nextContour(&manuContours);  
  AliMUONContour* contour(0x0);
  
  // start by adding the manu contours we begin with
  while ( ( contour = static_cast<AliMUONContour*>(nextContour()) ) )
  {
    fAllContourMap->Add(new TObjString(contour->GetName()),contour);
  }
  
  AliMUONContourMaker maker;
  
  for ( Int_t i = mapArray->GetLast(); i >= 1; --i ) 
    // end at 1 to avoid merging different cathodes together, which
    // would not work...
  {
    TMap* a = static_cast<TMap*>(mapArray->At(i));
    TIter next3(a);
    TObjString* str;
    while ( ( str = static_cast<TObjString*>(next3()) ) )
    {
      TObjArray* m = static_cast<TObjArray*>(a->GetValue(str->String().Data()));
      TIter next4(m);
      TObjString* k;
      TObjArray subcontours;
      subcontours.SetOwner(kFALSE);
      while ( ( k = static_cast<TObjString*>(next4()) ) )
      {
        contour = static_cast<AliMUONContour*>(fAllContourMap->GetValue(k->String().Data()));
        if ( contour ) 
        {
          subcontours.Add(contour);
        }
        else
        {
          AliError(Form("Did not find contour %s",k->String().Data()));
          continue;
        }
      }
      
      contour = maker.MergeContour(subcontours,str->String().Data());
      
      bool error(kFALSE);
      
      if (!contour)
      {
        error=kTRUE;
        AliError(Form("ERROR : could not merge into %s",str->String().Data()));
      }
      else
      {
        if ( contour->Area().IsValid() == kFALSE ) 
        {
          error=kTRUE;
          AliError(Form("ERROR : area of contour %s is invalid",str->String().Data()));
        }
      }
      
      if (!error)
      {
        fAllContourMap->Add(new TObjString(str->String().Data()),contour);
        fAllContourArray->Add(contour);
      }
    }
  }
}

//_____________________________________________________________________________
AliMpExMap* 
AliMUONContourHandler::GenerateTransformations(Bool_t exploded)
{
  /// Generate geometric transformations to be used to compute the contours
  /// If exploded=kFALSE then we generate real transformations, otherwise
  /// we generate tweaked ones that look fine on screen.
  
  AliCodeTimerAuto("",0);
  
  AliMUONGeometryTransformer transformer;
  Bool_t ok = transformer.LoadGeometryData("transform.dat");
  //  transformer.LoadGeometryData("geometry.root"); //FIXME: add a protection if geometry.root file does not exist
  if (!ok)
  {
    cout << "ERROR : cannot get geometry !" << endl;
    return 0x0;
  }
  AliMpExMap* transformations = new AliMpExMap;
  AliMpDEIterator deIt;
  deIt.First();
  while ( !deIt.IsDone() )
  {
    Int_t detElemId = deIt.CurrentDEId();
    const AliMUONGeometryDetElement* de = transformer.GetDetElement(detElemId);
    
    TGeoHMatrix* matrix = static_cast<TGeoHMatrix*>(de->GetGlobalTransformation()->Clone());

    if (exploded)
    {
      Double_t* translation = matrix->GetTranslation();
      Double_t xscale = 1.0;
      Double_t yscale = 1.5;
      Double_t shift = 5.0; // cm
          
      if ( AliMpDEManager::GetStationType(detElemId) == AliMp::kStation345 ) 
      {
        translation[0] *= xscale;
        translation[1] *= yscale; 
      }
      else
      {
        Double_t xshift[] = { shift, -shift, -shift, shift };
        Double_t yshift[] = { shift, shift, -shift, -shift };
        Int_t ishift = detElemId % 100;
        
        translation[0] += xshift[ishift];
        translation[1] += yshift[ishift];
      }
      matrix->SetTranslation(translation);
    }
    transformations->Add(detElemId,matrix);
    deIt.Next();
  }
  return transformations;
}

//_____________________________________________________________________________
AliMUONContour* 
AliMUONContourHandler::GetContour(const char* contourname) const
{
  /// Get a given contour
  return static_cast<AliMUONContour*>(fAllContourMap->GetValue(contourname));
}

//_____________________________________________________________________________
void
AliMUONContourHandler::Print(Option_t* opt) const
{
  /// printout
  
  if ( ! fAllContourMap )  return;
  
  cout << Form("Contour map : collisions = %5.3f size = %d capacity = %d", 
               fAllContourMap->AverageCollisions(),
               fAllContourMap->GetSize(),
               fAllContourMap->Capacity()) << endl;

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