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 AliMUONPCBPainter
///
/// Implementation of AliMUONVPainter for slat's PCBs
/// 
/// \author Laurent Aphecetche, Subatech

#include "AliMUONPCBPainter.h"

#include "AliMUONManuPainter.h"
#include "AliMUONContour.h"
#include "AliMUONPainterHelper.h"
#include "AliMUONVCalibParam.h"
#include "AliMUONVTrackerData.h"
#include "AliMpDEManager.h"
#include "AliMpMotifPosition.h"
#include "AliMpPCB.h"
#include "AliMpPlaneType.h"
#include "AliMpSlat.h"
#include "AliLog.h"

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

//_____________________________________________________________________________
AliMUONPCBPainter::AliMUONPCBPainter(TRootIOCtor* ioCtor)
: AliMUONVPainter(ioCtor),
fDetElemId(-1),
fPCBIndex(-1)
{
  /// root streaming ctor
}

//_____________________________________________________________________________
AliMUONPCBPainter::AliMUONPCBPainter()
: AliMUONVPainter(),
fDetElemId(-1),
fPCBIndex(-1)
{
  /// empty ctor
}

//_____________________________________________________________________________
AliMUONPCBPainter::AliMUONPCBPainter(const AliMUONAttPainter& att,
                                     Int_t detElemId,
                                     Int_t pcbNumber)
: AliMUONVPainter("PCB"),
  fDetElemId(detElemId),
  fPCBIndex(pcbNumber)
{
  /// Ctor
  
  SetAttributes(att);
  
  AliMUONPainterHelper* h = AliMUONPainterHelper::Instance();
  
  AliMp::PlaneType planeType = ( att.IsBendingPlane() ? AliMp::kBendingPlane : AliMp::kNonBendingPlane );
  
  const AliMpSlat* slat = AliMUONPainterHelper::Instance()->GetSlat(fDetElemId,planeType);
  
  SetID(detElemId,pcbNumber);
  SetName(h->PCBName(pcbNumber));
  SetPathName(h->PCBPathName(detElemId,pcbNumber));
  
  AliMpPCB* pcb = slat->GetPCB(fPCBIndex);
  
  AliMUONContour* contour = h->GetContour(ContourName());
  TObjArray contourArray;
  
  for ( Int_t imp = 0 ; imp < pcb->GetSize(); ++imp ) 
  {
    AliMpMotifPosition* mp = pcb->GetMotifPosition(imp);
    AliDebug(1,Form("Adding manu %d to PCB %d of DE %d",
                    mp->GetID(),fPCBIndex,fDetElemId));
    AliMUONVPainter* painter = new AliMUONManuPainter(Attributes(),fDetElemId,mp->GetID());
    Add(painter);
    if (!contour)
    {
      contourArray.Add(painter->Contour());
    }
  }
  
  Double_t x,y,z;
  
  h->Local2Global(fDetElemId,
                  pcb->X()-slat->GetPositionX(),
                  pcb->Y()-slat->GetPositionY(),
                  0.0,
                  x,y,z);
  
  if (!contour)
  {
    contour = h->MergeContours(contourArray,ContourName());
  }
  
  SetContour(contour);
}

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

//_____________________________________________________________________________
AliMUONPCBPainter::AliMUONPCBPainter(const AliMUONPCBPainter& rhs)
: AliMUONVPainter(rhs),
  fDetElemId(-1),
  fPCBIndex(-1)
{
    /// copy ctor
    rhs.Copy(*this);
}

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

//_____________________________________________________________________________
void 
AliMUONPCBPainter::ComputeDataRange(const AliMUONVTrackerData& data, Int_t dataIndex, 
                                   Double_t& dataMin, Double_t& dataMax) const
{
  /// Compute the min and max of this PCB data 
  dataMin = dataMax = data.PCB(fDetElemId, fPCBIndex,dataIndex);
}

//_____________________________________________________________________________
void
AliMUONPCBPainter::Copy(TObject& object) const
{
  /// Copy this to object
  AliMUONVPainter::Copy((AliMUONVPainter&)(object));
  ((AliMUONPCBPainter&)(object)).fDetElemId = fDetElemId;
  ((AliMUONPCBPainter&)(object)).fPCBIndex = fPCBIndex;
}

//_____________________________________________________________________________
TString
AliMUONPCBPainter::Describe(const AliMUONVTrackerData& data, Int_t dataIndex,
                                Double_t, Double_t)
{
  /// Describe data at this PCB
  
  if (!data.HasPCB(fDetElemId,fPCBIndex)) return "";
  
  Double_t value = data.PCB(fDetElemId,fPCBIndex,dataIndex);
  
  return AliMUONPainterHelper::Instance()->FormatValue(data.DimensionName(dataIndex).Data(),value);
}

//_____________________________________________________________________________
Bool_t
AliMUONPCBPainter::IsIncluded() const
{
  /// Whether this PCB is included in the read out or not
  return ( InteractiveReadOutConfig()->PCB(fDetElemId,fPCBIndex) > 0 );
}

//_____________________________________________________________________________
void
AliMUONPCBPainter::PaintArea(const AliMUONVTrackerData& data, Int_t dataIndex,
                            Double_t min, Double_t max)
{
  /// Fill the contour of this PCB with a color depending of the value of the data
  if (!data.HasPCB(fDetElemId,fPCBIndex)) return;
  
  Double_t value = data.PCB(fDetElemId,fPCBIndex,dataIndex);
  
  if ( value >= AliMUONVCalibParam::InvalidFloatValue() ) return;
  
  Int_t color = AliMUONPainterHelper::Instance()->ColorFromValue(value,min,max);
  
  PaintArea(color);
}

 AliMUONPCBPainter.cxx:1
 AliMUONPCBPainter.cxx:2
 AliMUONPCBPainter.cxx:3
 AliMUONPCBPainter.cxx:4
 AliMUONPCBPainter.cxx:5
 AliMUONPCBPainter.cxx:6
 AliMUONPCBPainter.cxx:7
 AliMUONPCBPainter.cxx:8
 AliMUONPCBPainter.cxx:9
 AliMUONPCBPainter.cxx:10
 AliMUONPCBPainter.cxx:11
 AliMUONPCBPainter.cxx:12
 AliMUONPCBPainter.cxx:13
 AliMUONPCBPainter.cxx:14
 AliMUONPCBPainter.cxx:15
 AliMUONPCBPainter.cxx:16
 AliMUONPCBPainter.cxx:17
 AliMUONPCBPainter.cxx:18
 AliMUONPCBPainter.cxx:19
 AliMUONPCBPainter.cxx:20
 AliMUONPCBPainter.cxx:21
 AliMUONPCBPainter.cxx:22
 AliMUONPCBPainter.cxx:23
 AliMUONPCBPainter.cxx:24
 AliMUONPCBPainter.cxx:25
 AliMUONPCBPainter.cxx:26
 AliMUONPCBPainter.cxx:27
 AliMUONPCBPainter.cxx:28
 AliMUONPCBPainter.cxx:29
 AliMUONPCBPainter.cxx:30
 AliMUONPCBPainter.cxx:31
 AliMUONPCBPainter.cxx:32
 AliMUONPCBPainter.cxx:33
 AliMUONPCBPainter.cxx:34
 AliMUONPCBPainter.cxx:35
 AliMUONPCBPainter.cxx:36
 AliMUONPCBPainter.cxx:37
 AliMUONPCBPainter.cxx:38
 AliMUONPCBPainter.cxx:39
 AliMUONPCBPainter.cxx:40
 AliMUONPCBPainter.cxx:41
 AliMUONPCBPainter.cxx:42
 AliMUONPCBPainter.cxx:43
 AliMUONPCBPainter.cxx:44
 AliMUONPCBPainter.cxx:45
 AliMUONPCBPainter.cxx:46
 AliMUONPCBPainter.cxx:47
 AliMUONPCBPainter.cxx:48
 AliMUONPCBPainter.cxx:49
 AliMUONPCBPainter.cxx:50
 AliMUONPCBPainter.cxx:51
 AliMUONPCBPainter.cxx:52
 AliMUONPCBPainter.cxx:53
 AliMUONPCBPainter.cxx:54
 AliMUONPCBPainter.cxx:55
 AliMUONPCBPainter.cxx:56
 AliMUONPCBPainter.cxx:57
 AliMUONPCBPainter.cxx:58
 AliMUONPCBPainter.cxx:59
 AliMUONPCBPainter.cxx:60
 AliMUONPCBPainter.cxx:61
 AliMUONPCBPainter.cxx:62
 AliMUONPCBPainter.cxx:63
 AliMUONPCBPainter.cxx:64
 AliMUONPCBPainter.cxx:65
 AliMUONPCBPainter.cxx:66
 AliMUONPCBPainter.cxx:67
 AliMUONPCBPainter.cxx:68
 AliMUONPCBPainter.cxx:69
 AliMUONPCBPainter.cxx:70
 AliMUONPCBPainter.cxx:71
 AliMUONPCBPainter.cxx:72
 AliMUONPCBPainter.cxx:73
 AliMUONPCBPainter.cxx:74
 AliMUONPCBPainter.cxx:75
 AliMUONPCBPainter.cxx:76
 AliMUONPCBPainter.cxx:77
 AliMUONPCBPainter.cxx:78
 AliMUONPCBPainter.cxx:79
 AliMUONPCBPainter.cxx:80
 AliMUONPCBPainter.cxx:81
 AliMUONPCBPainter.cxx:82
 AliMUONPCBPainter.cxx:83
 AliMUONPCBPainter.cxx:84
 AliMUONPCBPainter.cxx:85
 AliMUONPCBPainter.cxx:86
 AliMUONPCBPainter.cxx:87
 AliMUONPCBPainter.cxx:88
 AliMUONPCBPainter.cxx:89
 AliMUONPCBPainter.cxx:90
 AliMUONPCBPainter.cxx:91
 AliMUONPCBPainter.cxx:92
 AliMUONPCBPainter.cxx:93
 AliMUONPCBPainter.cxx:94
 AliMUONPCBPainter.cxx:95
 AliMUONPCBPainter.cxx:96
 AliMUONPCBPainter.cxx:97
 AliMUONPCBPainter.cxx:98
 AliMUONPCBPainter.cxx:99
 AliMUONPCBPainter.cxx:100
 AliMUONPCBPainter.cxx:101
 AliMUONPCBPainter.cxx:102
 AliMUONPCBPainter.cxx:103
 AliMUONPCBPainter.cxx:104
 AliMUONPCBPainter.cxx:105
 AliMUONPCBPainter.cxx:106
 AliMUONPCBPainter.cxx:107
 AliMUONPCBPainter.cxx:108
 AliMUONPCBPainter.cxx:109
 AliMUONPCBPainter.cxx:110
 AliMUONPCBPainter.cxx:111
 AliMUONPCBPainter.cxx:112
 AliMUONPCBPainter.cxx:113
 AliMUONPCBPainter.cxx:114
 AliMUONPCBPainter.cxx:115
 AliMUONPCBPainter.cxx:116
 AliMUONPCBPainter.cxx:117
 AliMUONPCBPainter.cxx:118
 AliMUONPCBPainter.cxx:119
 AliMUONPCBPainter.cxx:120
 AliMUONPCBPainter.cxx:121
 AliMUONPCBPainter.cxx:122
 AliMUONPCBPainter.cxx:123
 AliMUONPCBPainter.cxx:124
 AliMUONPCBPainter.cxx:125
 AliMUONPCBPainter.cxx:126
 AliMUONPCBPainter.cxx:127
 AliMUONPCBPainter.cxx:128
 AliMUONPCBPainter.cxx:129
 AliMUONPCBPainter.cxx:130
 AliMUONPCBPainter.cxx:131
 AliMUONPCBPainter.cxx:132
 AliMUONPCBPainter.cxx:133
 AliMUONPCBPainter.cxx:134
 AliMUONPCBPainter.cxx:135
 AliMUONPCBPainter.cxx:136
 AliMUONPCBPainter.cxx:137
 AliMUONPCBPainter.cxx:138
 AliMUONPCBPainter.cxx:139
 AliMUONPCBPainter.cxx:140
 AliMUONPCBPainter.cxx:141
 AliMUONPCBPainter.cxx:142
 AliMUONPCBPainter.cxx:143
 AliMUONPCBPainter.cxx:144
 AliMUONPCBPainter.cxx:145
 AliMUONPCBPainter.cxx:146
 AliMUONPCBPainter.cxx:147
 AliMUONPCBPainter.cxx:148
 AliMUONPCBPainter.cxx:149
 AliMUONPCBPainter.cxx:150
 AliMUONPCBPainter.cxx:151
 AliMUONPCBPainter.cxx:152
 AliMUONPCBPainter.cxx:153
 AliMUONPCBPainter.cxx:154
 AliMUONPCBPainter.cxx:155
 AliMUONPCBPainter.cxx:156
 AliMUONPCBPainter.cxx:157
 AliMUONPCBPainter.cxx:158
 AliMUONPCBPainter.cxx:159
 AliMUONPCBPainter.cxx:160
 AliMUONPCBPainter.cxx:161
 AliMUONPCBPainter.cxx:162
 AliMUONPCBPainter.cxx:163
 AliMUONPCBPainter.cxx:164
 AliMUONPCBPainter.cxx:165
 AliMUONPCBPainter.cxx:166
 AliMUONPCBPainter.cxx:167
 AliMUONPCBPainter.cxx:168
 AliMUONPCBPainter.cxx:169
 AliMUONPCBPainter.cxx:170
 AliMUONPCBPainter.cxx:171
 AliMUONPCBPainter.cxx:172
 AliMUONPCBPainter.cxx:173
 AliMUONPCBPainter.cxx:174
 AliMUONPCBPainter.cxx:175
 AliMUONPCBPainter.cxx:176
 AliMUONPCBPainter.cxx:177
 AliMUONPCBPainter.cxx:178
 AliMUONPCBPainter.cxx:179
 AliMUONPCBPainter.cxx:180
 AliMUONPCBPainter.cxx:181
 AliMUONPCBPainter.cxx:182
 AliMUONPCBPainter.cxx:183
 AliMUONPCBPainter.cxx:184
 AliMUONPCBPainter.cxx:185
 AliMUONPCBPainter.cxx:186
 AliMUONPCBPainter.cxx:187
 AliMUONPCBPainter.cxx:188
 AliMUONPCBPainter.cxx:189
 AliMUONPCBPainter.cxx:190
 AliMUONPCBPainter.cxx:191
 AliMUONPCBPainter.cxx:192
 AliMUONPCBPainter.cxx:193
 AliMUONPCBPainter.cxx:194
 AliMUONPCBPainter.cxx:195
 AliMUONPCBPainter.cxx:196
 AliMUONPCBPainter.cxx:197
 AliMUONPCBPainter.cxx:198
 AliMUONPCBPainter.cxx:199
 AliMUONPCBPainter.cxx:200
 AliMUONPCBPainter.cxx:201