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

#include "AliMpDCSNamer.h"
#include "AliLog.h"
#include "AliMUONContour.h"
#include "AliMUONManuContourMaker.h"
#include "AliMUONManuPadPainter.h"
#include "AliMUONPainterHelper.h"
#include "AliMUONVCalibParam.h"
#include "AliMUONVDigit.h"
#include "AliMUONVTrackerData.h"
#include "AliMpDEManager.h"
#include "AliMpManuUID.h"
#include "AliMpMotifPosition.h"
#include "AliMpMotifType.h"
#include "AliMpSlat.h"
#include "AliMpStationType.h"
#include "AliMpVMotif.h"
#include "AliMpVPadIterator.h"
#include <TArrayI.h>
#include <float.h>

///\class AliMUONManuPainter
///
/// Implementation of AliMUONVPainter for one manu (not the pads, only the manu
/// itself).
///
///\author Laurent Aphecetche, Subatech

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

//_____________________________________________________________________________
AliMUONManuPainter::AliMUONManuPainter(TRootIOCtor* ioCtor)
: AliMUONVPainter(ioCtor),
fDetElemId(-1),
fManuId(-1)
{
  /// ctor
}

//_____________________________________________________________________________
AliMUONManuPainter::AliMUONManuPainter()
: AliMUONVPainter(),
fDetElemId(-1),
fManuId(-1)
{
  /// ctor
}

//_____________________________________________________________________________
AliMUONManuPainter::AliMUONManuPainter(const AliMUONAttPainter& att,
                                       Int_t detElemId,
                                       Int_t manuId)
: AliMUONVPainter("MANU"),
  fDetElemId(detElemId),
  fManuId(manuId)
{
    /// ctor
    
  SetAttributes(att);
    
  AliMUONPainterHelper* h = AliMUONPainterHelper::Instance();
    
  SetID(detElemId,manuId);
  SetName(h->ManuName(manuId));
  SetPathName(h->ManuPathName(detElemId,manuId));
  
  
  AliMp::StationType stationType = AliMpDEManager::GetStationType(detElemId);
  
  if ( stationType == AliMp::kStationTrigger ) 
  {
    AliError("Hu ho. Not supposed to be used for trigger !");
    Invalidate();
    return;    
  }
    
  TString name = AliMUONManuContourMaker::ManuPathName(detElemId, manuId);

  AliMUONContour* contour = h->GetContour(name.Data());
  
  if (!contour)
  {
    AliError(Form("Could not get manuId %04d from DE %04d (name=%s)",manuId,detElemId,name.Data()));
  }
  
  SetContour(contour);
  
  Add(new AliMUONManuPadPainter(*this,fDetElemId,fManuId));
}

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

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

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

//_____________________________________________________________________________
void 
AliMUONManuPainter::ComputeDataRange(const AliMUONVTrackerData& data, Int_t dataIndex, 
                                     Double_t& dataMin, Double_t& dataMax) const
{
  /// Compute data range spanned by this manu
  dataMin = dataMax = data.Manu(fDetElemId, fManuId, dataIndex);
}


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

//_____________________________________________________________________________
TString
AliMUONManuPainter::Describe(const AliMUONVTrackerData& data, Int_t dataIndex,
                             Double_t, Double_t)
{
  /// Describe data at this manu
  
  if (!data.HasManu(fDetElemId,fManuId)) return "";
  
  Double_t value = data.Manu(fDetElemId,fManuId,dataIndex);
  
  TString rv = AliMUONPainterHelper::Instance()->FormatValue(data.DimensionName(dataIndex).Data(),value);
  
  if ( TString(data.GetName()).Contains("HV") )
  {
    rv += "\n";
    
    AliMpDCSNamer hvNamer("TRACKER");
    
    if ( AliMpDEManager::GetStationType(fDetElemId) == AliMp::kStation12 )
    {
      Int_t sector = hvNamer.ManuId2Sector(fDetElemId,fManuId);

      rv += hvNamer.DCSNameFromAlias(hvNamer.DCSAliasName(fDetElemId,sector));
    }
    else
    {
        rv += hvNamer.DCSNameFromAlias(hvNamer.DCSAliasName(fDetElemId));
    }
  }
  
  return rv;
}

//_____________________________________________________________________________
void
AliMUONManuPainter::FillManuList(TObjArray& manuList) const
{
  /// Append our manu to the list
  manuList.Add(new AliMpManuUID(fDetElemId,fManuId));
}

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

//_____________________________________________________________________________
void
AliMUONManuPainter::PaintArea(const AliMUONVTrackerData& data, Int_t dataIndex,
                              Double_t min, Double_t max)
{
  /// Paint area of this manu according to data
  
  if (!data.HasManu(fDetElemId,fManuId)) return;

  Double_t value = data.Manu(fDetElemId,fManuId,dataIndex);
  
  if ( value >= AliMUONVCalibParam::InvalidFloatValue() ) return;
  
  Int_t color = AliMUONPainterHelper::Instance()->ColorFromValue(value,min,max);
  
  PaintArea(color);
}

//_____________________________________________________________________________
AliMUONAttPainter
AliMUONManuPainter::Validate(const AliMUONAttPainter& attributes) const
{
  /// Normalize the attributes
  
  /// check that cathode and plane are up-to-date, and that they are legal
  
  AliMUONAttPainter norm(attributes);

  norm.SetValid(kFALSE);
  
  if ( norm.IsCathodeDefined() ) 
  {
    if ( norm.IsCathode0() != Attributes().IsCathode0() ) return norm;
  }
  
  if ( norm.IsPlaneDefined() ) 
  {
    if ( norm.IsBendingPlane() != Attributes().IsBendingPlane() ) return norm;
  }
  
  norm.SetValid(kTRUE);
  
  if ( norm.IsCathodeDefined() && !norm.IsPlaneDefined() ) 
  {
    // derive plane from cathode
    
    AliMp::CathodType cathode = ( norm.IsCathode0() ? AliMp::kCath0 : AliMp::kCath1 ) ;

    AliMp::PlaneType planeType = AliMpDEManager::GetPlaneType(fDetElemId,cathode);
    
    Bool_t bending = ( planeType == AliMp::kBendingPlane );
    
    norm.SetPlane(bending,!bending);    
  }
  else if ( norm.IsPlaneDefined() && !norm.IsCathodeDefined() )
  {
    // derive cathode from plane

    AliMp::PlaneType planeType = ( norm.IsBendingPlane() ? AliMp::kBendingPlane : AliMp::kNonBendingPlane );

    AliMp::CathodType cathode = AliMpDEManager::GetCathod(fDetElemId,planeType);
          
    Bool_t cath0 = ( cathode == AliMp::kCath0 );
    
    norm.SetCathode(cath0,!cath0);    
  }
  else if ( norm.IsPlaneDefined() && norm.IsCathodeDefined() ) 
  {
    // check that cathode and plane matches
    
    AliMp::CathodType cathode = ( norm.IsCathode0() ? AliMp::kCath0 : AliMp::kCath1 ) ;

    AliMp::PlaneType planeType = AliMpDEManager::GetPlaneType(fDetElemId,cathode);
    
    Bool_t bending = ( planeType == AliMp::kBendingPlane );
    
    if ( bending != norm.IsBendingPlane() ) 
    {
      norm.SetValid(kFALSE);
    }
  }
  
  return norm;
}


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