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$

#include "AliMUONManuPadPainter.h"

#include "AliLog.h"
#include "AliMUONPainterGroup.h"
#include "AliMUONPainterHelper.h"
#include "AliMUONTrackerDataHistogrammer.h"
#include "AliMUONVCalibParam.h"
#include "AliMUONVDigit.h"
#include "AliMUONVTrackerData.h"
#include "AliMpConnection.h"
#include "AliMpConstants.h"
#include "AliMpDDLStore.h"
#include "AliMpPad.h"
#include "AliMpSegmentation.h"
#include "AliMpVSegmentation.h"
#include <TCanvas.h>
#include <TH1.h>
#include <TVirtualPad.h>
#include <TVirtualX.h>
#include <float.h>

///\class AliMUONManuPadPainter
///
/// Painter for the pads of one manu
///
///\author Laurent Aphecetche, Subatech

///\cond CLASSIMP
ClassImp(AliMUONManuPadPainter)
///\endcond

//_____________________________________________________________________________
AliMUONManuPadPainter::AliMUONManuPadPainter()
: AliMUONVPainter(), 
fDetElemId(-1), 
fManuId(-1),
fLineColorBck(-1),
fLineWidthBck(-1),
fFillColorBck(-1),
fFillStyleBck(-1)
{
  /// ctor
}

//_____________________________________________________________________________
AliMUONManuPadPainter::AliMUONManuPadPainter(TRootIOCtor* ioCtor)
: AliMUONVPainter(ioCtor), 
fDetElemId(-1), 
fManuId(-1),
fLineColorBck(-1),
fLineWidthBck(-1),
fFillColorBck(-1),
fFillStyleBck(-1)
{
  /// ctor
}

//_____________________________________________________________________________
AliMUONManuPadPainter::AliMUONManuPadPainter(const AliMUONVPainter& mother,
                                             Int_t detElemId,
                                             Int_t manuId)
: AliMUONVPainter("PAD"),
fDetElemId(detElemId),
fManuId(manuId),
fLineColorBck(-1),
fLineWidthBck(-1),
fFillColorBck(-1),
fFillStyleBck(-1)
{
  /// ctor
  SetID(detElemId,manuId);
  SetName(Form("%s/PAD",mother.GetName()));
  SetPathName(Form("%s/PAD",mother.PathName().Data()));
  SetContour(mother.Contour());
}

//_____________________________________________________________________________
AliMUONManuPadPainter::~AliMUONManuPadPainter()
{
  /// dtor
}

//_____________________________________________________________________________
void
AliMUONManuPadPainter::BackupStyle()
{
  /// Remember line and fill style values
  
  fFillStyleBck = gVirtualX->GetFillStyle();
  fFillColorBck = gVirtualX->GetFillColor();
  fLineColorBck = gVirtualX->GetLineColor();
  fLineWidthBck = gVirtualX->GetLineWidth();
}

//_____________________________________________________________________________
void
AliMUONManuPadPainter::ComputeDataRange(const AliMUONVTrackerData& data,
                                        Int_t dataIndex,
                                        Double_t& dataMin, Double_t& dataMax) const
{
  /// Compute data range spanned by this manu pads
  const AliMpVSegmentation* seg = AliMpSegmentation::Instance()->GetMpSegmentationByElectronics(fDetElemId,fManuId);
  
  dataMin = FLT_MAX;
  dataMax = -FLT_MAX;
  
  for ( Int_t manuChannel = 0; manuChannel < AliMpConstants::ManuNofChannels(); 
        ++manuChannel )
  {
    if ( seg->HasPadByLocation(fManuId,manuChannel) )
    {
      Double_t value = data.Channel(fDetElemId, fManuId, manuChannel, dataIndex);
      dataMin = TMath::Min(value,dataMin);
      dataMax = TMath::Max(value,dataMax);
    }
  }
}

//_____________________________________________________________________________
char* 
AliMUONManuPadPainter::GetObjectInfo(Int_t px, Int_t py) const
{
  /// Get object info
  return const_cast<char*>(Form("%s:%d:%d",GetName(),px,py));
}

//_____________________________________________________________________________
TString
AliMUONManuPadPainter::NameAtPosition(Double_t x, Double_t y) const
{
  /// Specific name, dependent on the position within this painter
  
  TString name("invalid");

  AliMpPad pad = PadByPosition(x,y);
  
  if ( pad.IsValid() )
  {  
    name = Form("%s%d",PathName().Data(),pad.GetManuChannel());
  }
  
  return name;
}

//_____________________________________________________________________________
Bool_t
AliMUONManuPadPainter::IsIncluded() const
{
  /// whether this manu is included in the readout or not
  return ( InteractiveReadOutConfig()->Manu(fDetElemId,fManuId) > 0 );
}

//_____________________________________________________________________________
TString 
AliMUONManuPadPainter::Describe(const AliMUONVTrackerData& data, Int_t dataIndex,
                                Double_t x, Double_t y)
{
  /// Describe data at given location
  
  if ( ! data.HasManu(fDetElemId,fManuId) ) return "";

  AliMpPad pad = PadByPosition(x,y);
  
  if ( pad.IsValid() ) 
  {
    Double_t value = data.Channel(fDetElemId,fManuId,pad.GetManuChannel(),dataIndex);
  
    return AliMUONPainterHelper::Instance()->FormatValue(data.DimensionName(dataIndex).Data(),value);
  }
  else
  {
    return "invalid";
  }
}

//_____________________________________________________________________________
void 
AliMUONManuPadPainter::DrawHistogramClone(Double_t* values) const
{
  /// Draw histogram for pad at (values[0],values[1])
  
  if ( !values ) return;

  AliMUONPainterGroup* group = Master()->PlotterGroup();
  
  if ( !group ) return; // no data to histogram in this painter
    
  AliMpPad pad = PadByPosition(values[0],values[1]);
  
  AliMUONVTrackerData* data = group->Data();
  
  AliMUONTrackerDataHistogrammer tdh(*data,0,-1);

  fHistogram = tdh.CreateChannelHisto(fDetElemId, fManuId,pad.GetManuChannel());

  if (fHistogram) 
  {
    new TCanvas();
    fHistogram->Draw();
  }  
}

//_____________________________________________________________________________
void
AliMUONManuPadPainter::PaintArea(const AliMUONVTrackerData& data,
                                 Int_t dataIndex,
                                 Double_t min,
                                 Double_t max)
{
    /// Paint area of this manu pads according to the data
  
  if ( !gPad ) return;
  
  if ( ! data.HasManu(fDetElemId,fManuId) ) return;
  
  AliMUONPainterHelper* h = AliMUONPainterHelper::Instance();
  
  BackupStyle();
    
  gVirtualX->SetLineColor(-1);
  gVirtualX->SetFillStyle(1001);
  
  const AliMpVSegmentation* seg = AliMpSegmentation::Instance()->GetMpSegmentationByElectronics(fDetElemId,fManuId);
  
  for ( Int_t i = 0; i < AliMpConstants::ManuNofChannels(); ++i ) 
  {    
    AliMpPad pad = seg->PadByLocation(fManuId,i,kFALSE);
    
    if ( pad.IsValid() )
    {
      Double_t value = data.Channel(fDetElemId,fManuId,i,dataIndex);
      
      if ( value >= AliMUONVCalibParam::InvalidFloatValue() ) continue;
      
      Int_t color = h->ColorFromValue(value,min,max);
      
      if ( value > 0 )
      {
        AliDebug(1,Form("DE %d manuId %d channel %d value %e min %e max %e color %d",
                        fDetElemId,fManuId,i,value,min,max,
                        color));
      }

      gVirtualX->SetFillColor(color);
      
      PaintPad(pad);
      
    }
  }
  
  RestoreStyle();
}
                      
//_____________________________________________________________________________
void
AliMUONManuPadPainter::PaintPad(const AliMpPad& pad) const
{
  Double_t blx = pad.GetPositionX()-pad.GetDimensionX();
  Double_t bly = pad.GetPositionY()-pad.GetDimensionY();
  
  Double_t urx = pad.GetPositionX()+pad.GetDimensionX();
  Double_t ury = pad.GetPositionY()+pad.GetDimensionY();
  
  Double_t xe1,ye1,xe2,ye2,z;

  AliMUONPainterHelper::Instance()->Local2Global(fDetElemId,blx,bly,0,xe1,ye1,z);
  AliMUONPainterHelper::Instance()->Local2Global(fDetElemId,urx,ury,0,xe2,ye2,z);
  
  gPad->PaintBox(xe1,ye1,xe2,ye2);
}

//_____________________________________________________________________________
void
AliMUONManuPadPainter::PaintOutline(Int_t color, Int_t, Double_t x, Double_t y)
{
  /// Paint the outline of our pads

  if ( !gPad ) return;
  
  Int_t lineColor = color >= 0 ? color : GetLineColor();
  
  if ( lineColor > 0 )
  {
    BackupStyle();
    
    gVirtualX->SetLineColor(lineColor);
    gVirtualX->SetFillStyle(0);
    
    if ( x < FLT_MAX && y < FLT_MAX ) 
    {
      // find pad to be drawn
      AliMpPad pad = PadByPosition(x,y);
      
      PaintPad(pad);        
    }
    else
    {
      const AliMpVSegmentation* seg = AliMpSegmentation::Instance()->GetMpSegmentationByElectronics(fDetElemId,fManuId);

      for ( Int_t i = 0; i < AliMpConstants::ManuNofChannels(); ++i ) 
      {    
        AliMpPad pad = seg->PadByLocation(fManuId,i,kFALSE);
        
        if (pad.IsValid()) PaintPad(pad);
      
        PaintPad(pad);        
      }
    }
    RestoreStyle();
  }  
  
}

//_____________________________________________________________________________
AliMpPad
AliMUONManuPadPainter::PadByPosition(Double_t x, Double_t y) const
{
  /// Find the pad at given exploded-position (x,y)
  
  const AliMpVSegmentation* seg = AliMpSegmentation::Instance()->GetMpSegmentationByElectronics(fDetElemId,fManuId);
  
  Double_t xg,yg,zg;
  Double_t xl,yl,zl;
  
  AliMUONPainterHelper::Instance()->Local2Global(fDetElemId,0.0,0.0,0.0,xg,yg,zg); // to get zg
  
  AliMUONPainterHelper::Instance()->Global2Local(fDetElemId,x,y,zg,xl,yl,zl);
  
  return seg->PadByPosition(xl,yl);
}

//_____________________________________________________________________________
void
AliMUONManuPadPainter::RestoreStyle()
{
  /// Restore line and fill style values
  
  gVirtualX->SetFillStyle(fFillStyleBck);
  gVirtualX->SetFillColor(fFillColorBck);
  gVirtualX->SetLineColor(fLineColorBck);
  gVirtualX->SetLineWidth(fLineWidthBck);
}


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