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 "AliMUONChamberPainter.h"

#include "AliMUONDEPainter.h"
#include "AliMUONContour.h"
#include "AliMUONPainterHelper.h"
#include "AliMUONVCalibParam.h"
#include "AliMUONVTrackerData.h"
#include "AliMpConstants.h"
#include "AliMpDEIterator.h"
#include "AliMpDEManager.h"
#include "AliMpPlaneType.h"
#include "AliMpSegmentation.h"
#include "AliMpStationType.h"
#include "AliMpVSegmentation.h"
#include "AliMUONObjectPair.h"
#include "AliLog.h"
#include <Riostream.h>
#include <TObjString.h>
#include <TArrayI.h>
#include <cassert>
#include <float.h>

/// \class AliMUONChamberPainter
///
/// Painter for one plane/cathode of one chamber
///
/// \author Laurent Aphecetche, Subatech

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

//_____________________________________________________________________________
AliMUONChamberPainter::AliMUONChamberPainter()
: AliMUONVPainter(),
fChamberId(-1)
{
  /// ctor
}

//_____________________________________________________________________________
AliMUONChamberPainter::AliMUONChamberPainter(TRootIOCtor* ioCtor)
: AliMUONVPainter(ioCtor),
fChamberId(-1)
{
  /// ctor
}

//_____________________________________________________________________________
AliMUONChamberPainter::AliMUONChamberPainter(const AliMUONAttPainter& att, 
                                             Int_t chamberId)
: AliMUONVPainter("Chamber"),
fChamberId(chamberId)
{
  /// ctor

  AliMUONPainterHelper* h = AliMUONPainterHelper::Instance(); // to be sure mapping is loaded...

  AliMUONAttPainter chAtt(att);
  
  chAtt.SetCathodeAndPlaneMutuallyExclusive(kTRUE);
  
  SetAttributes(chAtt);
  
  SetID(chamberId,-1);
  SetName(h->ChamberName(fChamberId).Data());
  SetPathName(h->ChamberPathName(fChamberId).Data());
              
  AliMpDEIterator deIt;
  
  deIt.First(fChamberId);
  
  AliMUONContour* contour = h->GetContour(ContourName());
  TObjArray contourArray;
  
  while (!deIt.IsDone())
  {
    Int_t detElemId = deIt.CurrentDEId();

    AliMUONAttPainter deAtt(att);
    
    if ( att.IsCathodeDefined() ) 
    {
      deAtt.SetCathode(kFALSE,kFALSE);
      AliMp::PlaneType planeType;
      
      if ( att.IsCathode0() ) planeType = AliMpDEManager::GetPlaneType(detElemId,AliMp::kCath0);
      else planeType = AliMpDEManager::GetPlaneType(detElemId,AliMp::kCath1);
      
      Bool_t bending = ( planeType == AliMp::kBendingPlane );
      
      deAtt.SetPlane(bending,!bending);
    }
    
    assert(deAtt.IsPlaneDefined());
    
    AliMUONVPainter* painter = new AliMUONDEPainter(deAtt,detElemId);

    Add(painter);
    
    if (!contour)
    {
      contourArray.Add(painter->Contour());
    }
    
    deIt.Next();
  }
  
  Double_t xmin(1E9), xmax(-1E9), ymin(1E9), ymax(-1E9);
  TIter next(Children());
  AliMUONVPainter* painter;
  
  while ( ( painter = static_cast<AliMUONVPainter*>(next()) ) )
  {
    const AliMpArea& area = painter->Area();
    xmin = TMath::Min(xmin,area.LeftBorder());
    xmax = TMath::Max(xmax,area.RightBorder());
    ymin = TMath::Min(ymin,area.DownBorder());
    ymax = TMath::Max(ymax,area.UpBorder());
  }
  
  if ( contourArray.GetLast() >= 0 ) 
  {
    contour = h->MergeContours(contourArray,ContourName());
  }
  
  SetContour(contour);    
}

//_____________________________________________________________________________
AliMUONChamberPainter::AliMUONChamberPainter(const AliMUONChamberPainter& rhs)
: AliMUONVPainter(rhs),
fChamberId(rhs.fChamberId)
{
  /// copy ctor
  rhs.Copy(*this);
}

//_____________________________________________________________________________
AliMUONChamberPainter&
AliMUONChamberPainter::operator=(const AliMUONChamberPainter& rhs)
{
  /// assignment operator
  if ( this != &rhs )
  {
    rhs.Copy(*this);
  }
  return *this;
}

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

//_____________________________________________________________________________
void 
AliMUONChamberPainter::ComputeDataRange(const AliMUONVTrackerData& data, Int_t dataIndex, 
                                        Double_t& dataMin, Double_t& dataMax) const
{
  /// Compute data range spanned by this (plane of that) chamber
  dataMin = dataMax = data.Chamber(fChamberId, dataIndex);
}


//_____________________________________________________________________________
void
AliMUONChamberPainter::Copy(TObject& object) const
{
  /// Copy this to object
  AliMUONVPainter::Copy((AliMUONVPainter&)(object));
  ((AliMUONChamberPainter&)(object)).fChamberId = fChamberId;
}

//_____________________________________________________________________________
TString
AliMUONChamberPainter::Describe(const AliMUONVTrackerData& data, Int_t dataIndex,
                           Double_t, Double_t)
{
  /// Describe data at this chamber
  
  if (!data.HasChamber(fChamberId)) return "";
  
  Double_t value = data.Chamber(fChamberId,dataIndex);
  
  return AliMUONPainterHelper::Instance()->FormatValue(data.DimensionName(dataIndex).Data(),value);
}

//_____________________________________________________________________________
Bool_t 
AliMUONChamberPainter::IsIncluded() const
{
  /// whether this chamber is included in the readout or not
  return ( InteractiveReadOutConfig()->Chamber(fChamberId) > 0 );
}

//_____________________________________________________________________________
void
AliMUONChamberPainter::PaintArea(const AliMUONVTrackerData& data, Int_t dataIndex,
                                 Double_t min, Double_t max)
{
  /// Paint area of this chamber according to data
  
  if (!data.HasChamber(fChamberId)) return;
  
  Double_t value = data.Chamber(fChamberId,dataIndex);
  
  if ( value >= AliMUONVCalibParam::InvalidFloatValue() ) return;
  
  Int_t color = AliMUONPainterHelper::Instance()->ColorFromValue(value,min,max);
  
  PaintArea(color);
}

//_____________________________________________________________________________
AliMUONAttPainter 
AliMUONChamberPainter::Validate(const AliMUONAttPainter& attributes) const
{
  /// Normalize attributes
  
  AliMUONAttPainter norm(attributes);
  
  // A chamber painter must be either cathode defined or plane defined
  
  if ( norm.IsCathodeDefined() && norm.IsPlaneDefined() ) 
  {
    norm.SetValid(kFALSE);
  }

  if ( !norm.IsCathodeDefined() && !norm.IsPlaneDefined() ) 
  {
    norm.SetValid(kFALSE);
  }
  
  return norm;
}
 AliMUONChamberPainter.cxx:1
 AliMUONChamberPainter.cxx:2
 AliMUONChamberPainter.cxx:3
 AliMUONChamberPainter.cxx:4
 AliMUONChamberPainter.cxx:5
 AliMUONChamberPainter.cxx:6
 AliMUONChamberPainter.cxx:7
 AliMUONChamberPainter.cxx:8
 AliMUONChamberPainter.cxx:9
 AliMUONChamberPainter.cxx:10
 AliMUONChamberPainter.cxx:11
 AliMUONChamberPainter.cxx:12
 AliMUONChamberPainter.cxx:13
 AliMUONChamberPainter.cxx:14
 AliMUONChamberPainter.cxx:15
 AliMUONChamberPainter.cxx:16
 AliMUONChamberPainter.cxx:17
 AliMUONChamberPainter.cxx:18
 AliMUONChamberPainter.cxx:19
 AliMUONChamberPainter.cxx:20
 AliMUONChamberPainter.cxx:21
 AliMUONChamberPainter.cxx:22
 AliMUONChamberPainter.cxx:23
 AliMUONChamberPainter.cxx:24
 AliMUONChamberPainter.cxx:25
 AliMUONChamberPainter.cxx:26
 AliMUONChamberPainter.cxx:27
 AliMUONChamberPainter.cxx:28
 AliMUONChamberPainter.cxx:29
 AliMUONChamberPainter.cxx:30
 AliMUONChamberPainter.cxx:31
 AliMUONChamberPainter.cxx:32
 AliMUONChamberPainter.cxx:33
 AliMUONChamberPainter.cxx:34
 AliMUONChamberPainter.cxx:35
 AliMUONChamberPainter.cxx:36
 AliMUONChamberPainter.cxx:37
 AliMUONChamberPainter.cxx:38
 AliMUONChamberPainter.cxx:39
 AliMUONChamberPainter.cxx:40
 AliMUONChamberPainter.cxx:41
 AliMUONChamberPainter.cxx:42
 AliMUONChamberPainter.cxx:43
 AliMUONChamberPainter.cxx:44
 AliMUONChamberPainter.cxx:45
 AliMUONChamberPainter.cxx:46
 AliMUONChamberPainter.cxx:47
 AliMUONChamberPainter.cxx:48
 AliMUONChamberPainter.cxx:49
 AliMUONChamberPainter.cxx:50
 AliMUONChamberPainter.cxx:51
 AliMUONChamberPainter.cxx:52
 AliMUONChamberPainter.cxx:53
 AliMUONChamberPainter.cxx:54
 AliMUONChamberPainter.cxx:55
 AliMUONChamberPainter.cxx:56
 AliMUONChamberPainter.cxx:57
 AliMUONChamberPainter.cxx:58
 AliMUONChamberPainter.cxx:59
 AliMUONChamberPainter.cxx:60
 AliMUONChamberPainter.cxx:61
 AliMUONChamberPainter.cxx:62
 AliMUONChamberPainter.cxx:63
 AliMUONChamberPainter.cxx:64
 AliMUONChamberPainter.cxx:65
 AliMUONChamberPainter.cxx:66
 AliMUONChamberPainter.cxx:67
 AliMUONChamberPainter.cxx:68
 AliMUONChamberPainter.cxx:69
 AliMUONChamberPainter.cxx:70
 AliMUONChamberPainter.cxx:71
 AliMUONChamberPainter.cxx:72
 AliMUONChamberPainter.cxx:73
 AliMUONChamberPainter.cxx:74
 AliMUONChamberPainter.cxx:75
 AliMUONChamberPainter.cxx:76
 AliMUONChamberPainter.cxx:77
 AliMUONChamberPainter.cxx:78
 AliMUONChamberPainter.cxx:79
 AliMUONChamberPainter.cxx:80
 AliMUONChamberPainter.cxx:81
 AliMUONChamberPainter.cxx:82
 AliMUONChamberPainter.cxx:83
 AliMUONChamberPainter.cxx:84
 AliMUONChamberPainter.cxx:85
 AliMUONChamberPainter.cxx:86
 AliMUONChamberPainter.cxx:87
 AliMUONChamberPainter.cxx:88
 AliMUONChamberPainter.cxx:89
 AliMUONChamberPainter.cxx:90
 AliMUONChamberPainter.cxx:91
 AliMUONChamberPainter.cxx:92
 AliMUONChamberPainter.cxx:93
 AliMUONChamberPainter.cxx:94
 AliMUONChamberPainter.cxx:95
 AliMUONChamberPainter.cxx:96
 AliMUONChamberPainter.cxx:97
 AliMUONChamberPainter.cxx:98
 AliMUONChamberPainter.cxx:99
 AliMUONChamberPainter.cxx:100
 AliMUONChamberPainter.cxx:101
 AliMUONChamberPainter.cxx:102
 AliMUONChamberPainter.cxx:103
 AliMUONChamberPainter.cxx:104
 AliMUONChamberPainter.cxx:105
 AliMUONChamberPainter.cxx:106
 AliMUONChamberPainter.cxx:107
 AliMUONChamberPainter.cxx:108
 AliMUONChamberPainter.cxx:109
 AliMUONChamberPainter.cxx:110
 AliMUONChamberPainter.cxx:111
 AliMUONChamberPainter.cxx:112
 AliMUONChamberPainter.cxx:113
 AliMUONChamberPainter.cxx:114
 AliMUONChamberPainter.cxx:115
 AliMUONChamberPainter.cxx:116
 AliMUONChamberPainter.cxx:117
 AliMUONChamberPainter.cxx:118
 AliMUONChamberPainter.cxx:119
 AliMUONChamberPainter.cxx:120
 AliMUONChamberPainter.cxx:121
 AliMUONChamberPainter.cxx:122
 AliMUONChamberPainter.cxx:123
 AliMUONChamberPainter.cxx:124
 AliMUONChamberPainter.cxx:125
 AliMUONChamberPainter.cxx:126
 AliMUONChamberPainter.cxx:127
 AliMUONChamberPainter.cxx:128
 AliMUONChamberPainter.cxx:129
 AliMUONChamberPainter.cxx:130
 AliMUONChamberPainter.cxx:131
 AliMUONChamberPainter.cxx:132
 AliMUONChamberPainter.cxx:133
 AliMUONChamberPainter.cxx:134
 AliMUONChamberPainter.cxx:135
 AliMUONChamberPainter.cxx:136
 AliMUONChamberPainter.cxx:137
 AliMUONChamberPainter.cxx:138
 AliMUONChamberPainter.cxx:139
 AliMUONChamberPainter.cxx:140
 AliMUONChamberPainter.cxx:141
 AliMUONChamberPainter.cxx:142
 AliMUONChamberPainter.cxx:143
 AliMUONChamberPainter.cxx:144
 AliMUONChamberPainter.cxx:145
 AliMUONChamberPainter.cxx:146
 AliMUONChamberPainter.cxx:147
 AliMUONChamberPainter.cxx:148
 AliMUONChamberPainter.cxx:149
 AliMUONChamberPainter.cxx:150
 AliMUONChamberPainter.cxx:151
 AliMUONChamberPainter.cxx:152
 AliMUONChamberPainter.cxx:153
 AliMUONChamberPainter.cxx:154
 AliMUONChamberPainter.cxx:155
 AliMUONChamberPainter.cxx:156
 AliMUONChamberPainter.cxx:157
 AliMUONChamberPainter.cxx:158
 AliMUONChamberPainter.cxx:159
 AliMUONChamberPainter.cxx:160
 AliMUONChamberPainter.cxx:161
 AliMUONChamberPainter.cxx:162
 AliMUONChamberPainter.cxx:163
 AliMUONChamberPainter.cxx:164
 AliMUONChamberPainter.cxx:165
 AliMUONChamberPainter.cxx:166
 AliMUONChamberPainter.cxx:167
 AliMUONChamberPainter.cxx:168
 AliMUONChamberPainter.cxx:169
 AliMUONChamberPainter.cxx:170
 AliMUONChamberPainter.cxx:171
 AliMUONChamberPainter.cxx:172
 AliMUONChamberPainter.cxx:173
 AliMUONChamberPainter.cxx:174
 AliMUONChamberPainter.cxx:175
 AliMUONChamberPainter.cxx:176
 AliMUONChamberPainter.cxx:177
 AliMUONChamberPainter.cxx:178
 AliMUONChamberPainter.cxx:179
 AliMUONChamberPainter.cxx:180
 AliMUONChamberPainter.cxx:181
 AliMUONChamberPainter.cxx:182
 AliMUONChamberPainter.cxx:183
 AliMUONChamberPainter.cxx:184
 AliMUONChamberPainter.cxx:185
 AliMUONChamberPainter.cxx:186
 AliMUONChamberPainter.cxx:187
 AliMUONChamberPainter.cxx:188
 AliMUONChamberPainter.cxx:189
 AliMUONChamberPainter.cxx:190
 AliMUONChamberPainter.cxx:191
 AliMUONChamberPainter.cxx:192
 AliMUONChamberPainter.cxx:193
 AliMUONChamberPainter.cxx:194
 AliMUONChamberPainter.cxx:195
 AliMUONChamberPainter.cxx:196
 AliMUONChamberPainter.cxx:197
 AliMUONChamberPainter.cxx:198
 AliMUONChamberPainter.cxx:199
 AliMUONChamberPainter.cxx:200
 AliMUONChamberPainter.cxx:201
 AliMUONChamberPainter.cxx:202
 AliMUONChamberPainter.cxx:203
 AliMUONChamberPainter.cxx:204
 AliMUONChamberPainter.cxx:205
 AliMUONChamberPainter.cxx:206
 AliMUONChamberPainter.cxx:207
 AliMUONChamberPainter.cxx:208
 AliMUONChamberPainter.cxx:209
 AliMUONChamberPainter.cxx:210
 AliMUONChamberPainter.cxx:211
 AliMUONChamberPainter.cxx:212
 AliMUONChamberPainter.cxx:213
 AliMUONChamberPainter.cxx:214
 AliMUONChamberPainter.cxx:215
 AliMUONChamberPainter.cxx:216
 AliMUONChamberPainter.cxx:217
 AliMUONChamberPainter.cxx:218
 AliMUONChamberPainter.cxx:219
 AliMUONChamberPainter.cxx:220
 AliMUONChamberPainter.cxx:221
 AliMUONChamberPainter.cxx:222
 AliMUONChamberPainter.cxx:223
 AliMUONChamberPainter.cxx:224
 AliMUONChamberPainter.cxx:225
 AliMUONChamberPainter.cxx:226
 AliMUONChamberPainter.cxx:227
 AliMUONChamberPainter.cxx:228
 AliMUONChamberPainter.cxx:229
 AliMUONChamberPainter.cxx:230
 AliMUONChamberPainter.cxx:231
 AliMUONChamberPainter.cxx:232
 AliMUONChamberPainter.cxx:233
 AliMUONChamberPainter.cxx:234
 AliMUONChamberPainter.cxx:235
 AliMUONChamberPainter.cxx:236
 AliMUONChamberPainter.cxx:237
 AliMUONChamberPainter.cxx:238
 AliMUONChamberPainter.cxx:239
 AliMUONChamberPainter.cxx:240
 AliMUONChamberPainter.cxx:241
 AliMUONChamberPainter.cxx:242
 AliMUONChamberPainter.cxx:243
 AliMUONChamberPainter.cxx:244
 AliMUONChamberPainter.cxx:245
 AliMUONChamberPainter.cxx:246
 AliMUONChamberPainter.cxx:247
 AliMUONChamberPainter.cxx:248
 AliMUONChamberPainter.cxx:249
 AliMUONChamberPainter.cxx:250
 AliMUONChamberPainter.cxx:251
 AliMUONChamberPainter.cxx:252
 AliMUONChamberPainter.cxx:253
 AliMUONChamberPainter.cxx:254