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$
// $MpId: AliMpDEManager.cxx,v 1.4 2006/05/24 13:58:34 ivana Exp $
// Category: management

//-----------------------------------------------------------------------------
// Class AliMpDEManager
// --------------------
// The manager class for definition of detection element types
// Authors: Ivana Hrivnacova, IPN Orsay
//          Laurent Aphecetche, SUBATECH Nantes
//-----------------------------------------------------------------------------

#include "AliMpDEManager.h"
#include "AliMpDEStore.h"
#include "AliMpDetElement.h"
#include "AliMpConstants.h"
#include "AliMpCathodType.h"
#include "AliMpEncodePair.h"

#include "AliLog.h"

#include <Riostream.h>
#include <TClass.h>

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

const Int_t AliMpDEManager::fgkCoefficient = 100;

//
// static private methods
//
//______________________________________________________________________________
TArrayI& AliMpDEManager::GetNofDEPerChamber() 
{
  /// number of detElemId per chamber
  static TArrayI nofDEPerChamber;
  return nofDEPerChamber;
}

//
// static public methods
//

//______________________________________________________________________________
AliMpDetElement* AliMpDEManager::GetDetElement(Int_t detElemId, Bool_t warn)
{
/// Return det element for given detElemId

  return AliMpDEStore::Instance()->GetDetElement(detElemId, warn);
}    

//______________________________________________________________________________
AliMpDetElement* AliMpDEManager::GetDetElement(const TString& deName, Bool_t warn)
{
/// Return det element for given deName

  return AliMpDEStore::Instance()->GetDetElement(deName, warn);
}    

//
// static public methods
//

//______________________________________________________________________________
Bool_t AliMpDEManager::IsValidDetElemId(Int_t detElemId, Bool_t warn)
{
/// Return true if detElemId is valid
/// (is present in the DE map)

  if ( GetDetElement(detElemId, warn) ) return true;

  return false;
}    

//______________________________________________________________________________
Bool_t AliMpDEManager::IsValidChamberId(Int_t chamberId, Bool_t warn)
{
/// Return true if chamberId is valid

  if ( chamberId >= 0 && chamberId < AliMpConstants::NofChambers() ) 
    return true;
 
  if (warn) 
    AliErrorClassStream() << "Wrong chamber Id " << chamberId << endl;
  
  return false;
}    

//______________________________________________________________________________
Bool_t AliMpDEManager::IsValidGeomModuleId(Int_t moduleId, Bool_t warn)
{
/// Return true if moduleId is valid

  if ( moduleId >= 0 && moduleId < AliMpConstants::NofGeomModules() ) 
    return true;
 
  if (warn) 
    AliErrorClassStream() << "Wrong module Id " << moduleId << endl;
  
  return false;
}    

//______________________________________________________________________________
Int_t  AliMpDEManager::GetChamberId(Int_t detElemId, Bool_t warn)
{
/// Return chamber Id for given detElemId

  if ( ! IsValidDetElemId(detElemId, warn) ) return -1;
  
  return detElemId/fgkCoefficient - 1;
}  

//______________________________________________________________________________
Int_t AliMpDEManager::GetGeomModuleId(Int_t detElemId, Bool_t warn)
{
/// <pre>
/// Get module Id from detection element Id                 
/// !!! moduleId != chamberId
/// Station 1:   Chamber:  1   Module:  0   Det elements:  100-103
///              Chamber:  2   Module:  1   Det elements:  200-203
/// Station 2:   Chamber:  3   Module:  2   Det elements:  300-303
///              Chamber:  4   Module:  3   Det elements:  400-403
/// Station 3:   Chamber:  5   Module:  4   Det elements:  500-504, 514-517
///                            Module:  5   Det elements:  505-513,
///              Chamber:  6   Module:  6   Det elements:  600-604, 614-617
///                            Module:  7   Det elements:  605-613
/// Station 4:   Chamber:  7   Module:  8   Det elements:  700-706, 720-725
///                            Module:  9   Det elements:  707-719
///              Chamber:  8   Module: 10   Det elements:  800-806, 820-825
///                            Module: 11   Det elements:  807-819
/// Station 5:   Chamber:  9   Module: 12   Det elements:  900-906, 920-925
///                            Module: 13   Det elements:  907-919        
///              Chamber: 10   Module: 14   Det elements: 1000-1006,1020-1025
///                            Module: 15   Det elements: 1007-1019
/// Station 6:   Chamber: 11   Module: 16   Det elements: 1100-1117
///              Chamber: 12   Module: 17   Det elements: 1200-1217
/// Station 7:   Chamber: 13   Module: 18   Det elements: 1300-1317
///              Chamber: 14   Module: 19   Det elements: 1400-1417
/// </pre>

  if ( ! IsValidDetElemId(detElemId, warn) ) return -1;
  
  return detElemId/fgkCoefficient 
    + ((detElemId >=  505 && detElemId <=  513) || detElemId >= 600 )
    + ((detElemId >=  605 && detElemId <=  613) || detElemId >= 700 )
    + ((detElemId >=  707 && detElemId <=  719) || detElemId >= 800 )
    + ((detElemId >=  807 && detElemId <=  819) || detElemId >= 900 )
    + ((detElemId >=  907 && detElemId <=  919) || detElemId >= 1000 )
    + ((detElemId >= 1007 && detElemId <= 1019) || detElemId >= 1100 ) - 1;
}  

//______________________________________________________________________________
AliMp::PlaneType  AliMpDEManager::GetPlaneType(Int_t detElemId, AliMp::CathodType cath)
{
/// Return plane type                                                      \n
/// Failure causes Fatal error - as AliMp::PlaneType has no possibility
/// to return undefined value

  if ( ! IsValidDetElemId(detElemId, true) ) {
    AliFatalClass("Cannot return AliMp::PlaneType value.");
    return AliMp::kBendingPlane;
  }  

  return GetDetElement(detElemId)->GetPlaneType(cath);
}    

//______________________________________________________________________________
AliMp::StationType AliMpDEManager::GetStationType(Int_t detElemId)
{
/// Return station type                                                      \n
/// Failure causes Fatal error - as AliMp::StationType has no possibility
/// to return undefined value

  if ( ! IsValidDetElemId(detElemId, true) ) {
    AliFatalClass("Cannot return AliMp::StationType value.");
    return AliMp::kStation12;
  }  
  
  return GetDetElement(detElemId)->GetStationType();
}

//______________________________________________________________________________
AliMq::Station12Type AliMpDEManager::GetStation12Type(Int_t detElemId)
{
/// Return station12 type                                                    \n
/// Failure causes Fatal error - as AliMp::StationNumber has no possibility
/// to return undefined value

  if ( ! IsValidDetElemId(detElemId, true) ) {
    AliFatalClass("Cannot return AliMp::Station12Type value.");
    return AliMq::kNotSt12;
  }  
  
  return GetDetElement(detElemId)->GetStation12Type();
}

//______________________________________________________________________________
AliMp::CathodType 
AliMpDEManager::GetCathod(Int_t detElemId, AliMp::PlaneType planeType)
{
/// Return cathod number for given detElemId and planeType

  if ( ! IsValidDetElemId(detElemId, true) ) {
    AliFatalClass("Cannot return AliMp::CathodType value.");
    return AliMp::kCath0;
  }  
  
  return GetDetElement(detElemId)->GetCathodType(planeType);
}

//______________________________________________________________________________
Int_t AliMpDEManager::GetNofDEInChamber(Int_t chamberId, Bool_t warn)
{
/// Return the number of detection elements in the chamber with the given 
/// chamberId

  if ( ! IsValidChamberId(chamberId,warn) ) return 0;

  // Fill array if it is empty
  if ( ! GetNofDEPerChamber().GetSize() ) {
    GetNofDEPerChamber().Set(AliMpConstants::NofChambers());
    AliMpDEIterator it;
    for ( Int_t i=0; i<AliMpConstants::NofChambers(); i++ ) {
      Int_t counter = 0;
      for ( it.First(i); ! it.IsDone(); it.Next() ) ++counter;
      GetNofDEPerChamber()[i] = counter;
    }  
  }
  
  return GetNofDEPerChamber()[chamberId];    

}

//______________________________________________________________________________
MpPair_t AliMpDEManager::GetDetElemIdRange(Int_t chamberId)
{
/// Return the detection element Id range for given chamberId
/// es encoded pair
 
  if ( ! IsValidChamberId(chamberId) ) return 0;

  return AliMp::Pair(
           (chamberId+1)*fgkCoefficient,
           (chamberId+1)*fgkCoefficient + GetNofDEInChamber(chamberId) - 1);
  
}

//
// ctors, dtor
//

//______________________________________________________________________________
AliMpDEManager::~AliMpDEManager()
{
/// Destructor
}

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