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: AliMUONPainterDataRegistry.cxx 26812 2008-06-20 15:22:59Z laphecet $

#include "AliMUONPainterDataRegistry.h"

#include "AliMpManuIterator.h"
#include "AliMUON2DMap.h"
#include "AliMUONCalibParamND.h"
#include "AliMUONTrackerData.h"
#include "AliMUONVTrackerDataMaker.h"
#include "AliLog.h"
#include <THashList.h>
#include <TObjArray.h>
#include <TString.h>
#include <Riostream.h>

///\class AliMUONPainterDataRegistry
///
/// Registry for AliMUONVPainter related stuff : painter data sources
/// and painter matrices
///
///\author Laurent Aphecetche, Subatech

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

AliMUONPainterDataRegistry* AliMUONPainterDataRegistry::fgInstance(0x0);

//_____________________________________________________________________________
AliMUONPainterDataRegistry::AliMUONPainterDataRegistry() : TObject(), TQObject(),
fDataMakers(new TObjArray),
fZombies(new TObjArray),
fInteractiveReadOutConfig(0x0)
{
  /// ctor
  fDataMakers->SetOwner(kTRUE);
  fZombies->SetOwner(kTRUE);
}

//_____________________________________________________________________________
AliMUONPainterDataRegistry::~AliMUONPainterDataRegistry()
{
  /// dtor
  delete fDataMakers;
  delete fInteractiveReadOutConfig;
}

//_____________________________________________________________________________
void
AliMUONPainterDataRegistry::CreateInteractiveReadOutConfig() const
{
  /// Create a base config
  
  fInteractiveReadOutConfig = new AliMUONTrackerData("IROC","IROC",1);
  fInteractiveReadOutConfig->SetDimensionName(0,"Switch");
  fInteractiveReadOutConfig->DisableChannelLevel();
  AliMpManuIterator it;
  Int_t detElemId;
  Int_t manuId;
  AliMUON2DMap store(true);

  while ( it.Next(detElemId,manuId) )
  {
    AliMUONVCalibParam* param = new AliMUONCalibParamND(1,64,detElemId,manuId,1);
    store.Add(param);
  }
  fInteractiveReadOutConfig->Add(store);
}

//_____________________________________________________________________________
AliMUONVTrackerDataMaker* 
AliMUONPainterDataRegistry::DataMaker(Int_t i) const
{
  /// Get one data source
  if ( i >= 0 && i <= fDataMakers->GetLast() )
  {
    return static_cast<AliMUONVTrackerDataMaker*>(fDataMakers->At(i));
  }
  else
  {
    AliError(Form("Index out of bounds : %d / %d",i,fDataMakers->GetLast()+1));
    return 0x0;
  }
}

//_____________________________________________________________________________
AliMUONVTrackerData* 
AliMUONPainterDataRegistry::DataSource(Int_t i) const
{
  /// Get one data source
  
  AliMUONVTrackerDataMaker* maker = DataMaker(i);
  if ( maker ) return maker->Data();
  return 0x0;
}

//_____________________________________________________________________________
void 
AliMUONPainterDataRegistry::DataMakerWasRegistered(const AliMUONVTrackerDataMaker* data)
{
  /// A new reader source was registered
  Long_t param[] = { (Long_t)data };
  
  Emit("DataMakerWasRegistered(AliMUONVTrackerDataMaker*)",param);
}

//_____________________________________________________________________________
void
AliMUONPainterDataRegistry::DataMakerWasUnregistered(const AliMUONVTrackerDataMaker* data)
{
  /// A data reader was unregistered
  Long_t param[] = { (Long_t)data };
  
  Emit("DataMakerWasUnregistered(AliMUONVTrackerDataMaker*)",param);
  
}

//_____________________________________________________________________________
void 
AliMUONPainterDataRegistry::DataSourceWasRegistered(const AliMUONVTrackerData* data)
{
  /// A new data source was registered
  Long_t param[] = { (Long_t)data };
  
  Emit("DataSourceWasRegistered(AliMUONVTrackerData*)",param);
}

//_____________________________________________________________________________
void
AliMUONPainterDataRegistry::DataSourceWasUnregistered(const AliMUONVTrackerData* data)
{
  /// A data source was unregistered
  Long_t param[] = { (Long_t)data };
  
  Emit("DataSourceWasUnregistered(AliMUONVTrackerData*)",param);
  
}

//_____________________________________________________________________________
AliMUONVTrackerData*
AliMUONPainterDataRegistry::DataSource(const char* name) const
{
  /// Find a data source by name
  for ( Int_t i = 0; i < NumberOfDataMakers(); ++i )
  {
    AliMUONVTrackerData* data = DataMaker(i)->Data();
    if ( data ) 
    {
      TString dname(data->GetName());
      if ( dname == name ) return data;
    }
  }
  return 0x0;
}

//_____________________________________________________________________________
AliMUONPainterDataRegistry*
AliMUONPainterDataRegistry::Instance()
{
  /// Get unique instance of this class
  if ( !fgInstance ) fgInstance = new AliMUONPainterDataRegistry;
  return fgInstance;
}

//_____________________________________________________________________________
AliMUONVTrackerData*
AliMUONPainterDataRegistry::InteractiveReadOutConfig() const
{
  /// Return an object that contains the parts of the detector selected
  /// (using the mouse) to be part of the readout.

  if (!fInteractiveReadOutConfig) CreateInteractiveReadOutConfig();
  return fInteractiveReadOutConfig;
}

//_____________________________________________________________________________
void 
AliMUONPainterDataRegistry::Print(Option_t* opt) const
{
  /// Printout
  TString sopt(opt);
  sopt.ToUpper();
  
  cout << "Number of data readers = " << NumberOfDataMakers() << endl;
  
  if ( sopt.Contains("FULL") || sopt.Contains("READER") || sopt.Contains("DATA") )
  {
    TIter next(fDataMakers);
    AliMUONVTrackerDataMaker* reader;
    
    while ( ( reader = static_cast<AliMUONVTrackerDataMaker*>(next()) ) )
    {
      if ( sopt.Contains("DATA") ) 
      {
        AliMUONVTrackerData* data = reader->Data();
        if ( data ) data->Print();
      }
      else
      {
        reader->Print();
      }
    }
  }
}

//_____________________________________________________________________________
void
AliMUONPainterDataRegistry::Register(AliMUONVTrackerDataMaker* reader)
{
  /// reader is adopted, i.e. the registry becomes the owner of it.
  fDataMakers->AddLast(reader);
  DataMakerWasRegistered(reader);
  if ( reader->Data() ) DataSourceWasRegistered(reader->Data());
}

//_____________________________________________________________________________
Int_t 
AliMUONPainterDataRegistry::NumberOfDataMakers() const
{
  /// The number of data readers we handle
  return fDataMakers->GetLast()+1;
}

//_____________________________________________________________________________
void 
AliMUONPainterDataRegistry::DeleteZombies()
{
  /// Delete zombies
  fZombies->Delete();
}

//_____________________________________________________________________________
Bool_t 
AliMUONPainterDataRegistry::Unregister(AliMUONVTrackerDataMaker* reader)
{
  /// Unregister some reader
  
  if (!reader) return kFALSE;
  
  if ( reader->Data() ) 
  {
    DataSourceWasUnregistered(reader->Data());
    reader->Data()->Destroyed(); // we pretend it's deleted now, even
    // if it will be only later on when zombie are killed, so that
    // for instance painters depending on it will no longer try to access it
  }

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