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

//-----------------------------------------------------------------------------
// Class AliMpDDL
// --------------------
// The class defines electronics properties of DDL
// Authors: Ivana Hrivnacova, IPN Orsay
//          Christian Finck, SUBATECH Nantes
//-----------------------------------------------------------------------------

#include "AliMpDDL.h"
#include "AliMpDEManager.h"
#include "AliMpDetElement.h"

#include "AliLog.h"

#include <Riostream.h>


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

//______________________________________________________________________________
AliMpDDL::AliMpDDL(Int_t id)
  : TObject(),
    fId(id),
    fDEIds(),
    fFrtIds(false),
    fBusPatchIds(),
    fTriggerCrateIds(false)

{
/// Standard constructor
}

//______________________________________________________________________________
AliMpDDL::AliMpDDL(TRootIOCtor* /*ioCtor*/)
  : TObject(),
    fId(0),
    fDEIds(),
    fFrtIds(false),    
    fBusPatchIds(),
    fTriggerCrateIds()
{
/// Root IO constructor
}

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

//
// private methods
//

//______________________________________________________________________________
void AliMpDDL::FillBusPatchIds()
{
/// Fill array with bus patch Ids

  for ( Int_t i=0; i<GetNofDEs(); i++ ) {
    AliMpDetElement* detElement 
      = AliMpDEManager::GetDetElement(GetDEId(i));
    
    for ( Int_t j=0; j<detElement->GetNofBusPatches(); j++ )
      fBusPatchIds.Add(detElement->GetBusPatchId(j));
  }
}      

//
// public methods
//

//______________________________________________________________________________
Bool_t AliMpDDL::AddDE(Int_t detElemId)
{
/// Add detection element with given detElemId.
/// Return true if the detection element was added

  if ( ! AliMpDEManager::IsValidDetElemId(detElemId) ) return false;
 
  if ( HasDEId(detElemId) ) {
    AliWarningStream() 
      << "Detection element Id = " << detElemId << " already present."
      << endl;
    return false;
  }    

  AliDebugStream(3) << "Adding detElemId " << detElemId << endl;

  fDEIds.Add(detElemId);
  return true;
}   

//______________________________________________________________________________
Bool_t AliMpDDL::AddTriggerCrate(Int_t crateId)
{
/// Add trigger crate with given crateId.
/// Return true if the trigger crate was added

  if ( HasTriggerCrateId(crateId) ) {
    AliWarningStream() 
	<< "Trigger crate Id = " << crateId << " already present."
	<< endl;
    return false;
  }    
  
  fTriggerCrateIds.Add(crateId);

  return true;
}      

//______________________________________________________________________________
Bool_t AliMpDDL::AddFrt(Int_t frtId)
{
/// Add FRT with given frtId.
/// Return true if the FRT was added

  if ( HasFrtId(frtId) ) {
    AliWarningStream() 
	<< "FRT Id = " << frtId << " already present."
	<< endl;
    return false;
  }    
  
  fFrtIds.Add(frtId);

  return true;
}      


//______________________________________________________________________________
Int_t AliMpDDL::GetNofDEs() const
{  
/// Return the number of detection elements connected to this DDL

  return fDEIds.GetSize(); 
}

//______________________________________________________________________________
Int_t  AliMpDDL::GetDEId(Int_t index) const
{  
/// Return the detection element by index (in loop)

  return fDEIds.GetValue(index); 
}

//______________________________________________________________________________
Bool_t  AliMpDDL::HasDEId(Int_t detElemId) const
{  
/// Return true if the detection element Id is present

  return fDEIds.HasValue(detElemId);; 
}

//______________________________________________________________________________
Int_t AliMpDDL::GetNofFrts() const
{  
/// Return the number of FRT connected to this DDL

  return fFrtIds.GetSize(); 
}

//______________________________________________________________________________
Int_t  AliMpDDL::GetFrtId(Int_t index) const
{  
/// Return the FRT by index (in loop)

  return fFrtIds.GetValue(index); 
}

//______________________________________________________________________________
Bool_t  AliMpDDL::HasFrtId(Int_t frtId) const
{  
/// Return true if the FRT Id is present

  return fFrtIds.HasValue(frtId);; 
}


//______________________________________________________________________________
Int_t AliMpDDL::GetNofBusPatches() const
{  
/// Return the number of detection elements connected to this DDL

  return fBusPatchIds.GetSize(); 
}

//______________________________________________________________________________
Int_t  AliMpDDL::GetBusPatchId(Int_t index) const
{  
/// Return the detection element by index (in loop)

  return fBusPatchIds.GetValue(index); 
}

//______________________________________________________________________________
Bool_t  AliMpDDL::HasBusPatchId(Int_t busPatchId) const
{  
/// Return true if the detection element Id is present

  return fBusPatchIds.HasValue(busPatchId);; 
}

//______________________________________________________________________________
Int_t AliMpDDL::GetNofTriggerCrates() const
{  
/// Return the number of trigger crate connected to this DDL

  return fTriggerCrateIds.GetSize(); 
}

//______________________________________________________________________________
Int_t  AliMpDDL::GetTriggerCrateId(Int_t index) const
{  
/// Return the trigger crate by index (in loop)

  return fTriggerCrateIds.GetValue(index); 
}

//______________________________________________________________________________
Bool_t  AliMpDDL::HasTriggerCrateId(Int_t triggerCrateId) const
{  
/// Return true if the trigger crate Id is present

  return fTriggerCrateIds.HasValue(triggerCrateId);
}

//____________________________________________________________________
Int_t AliMpDDL::GetMaxDsp() const
{
/// calculates the number of DSP 

  Int_t iBusPerBlk = fBusPatchIds.GetSize()/2; //per block

  Int_t iDspMax =  iBusPerBlk/5; //number max of DSP per block
  if (iBusPerBlk % 5 != 0)
    iDspMax += 1;

  return iDspMax;
}

//____________________________________________________________________
void AliMpDDL::GetBusPerDsp(Int_t* iBusPerDSP) 
const
{
/// calculates buspatch per block

  Int_t iBusPerBlk = fBusPatchIds.GetSize()/2; //per block

  for (Int_t i = 0; i < GetMaxDsp(); i++) {
    if ((iBusPerBlk -= 5) > 0) 
      iBusPerDSP[i] = 5;
    else 
      iBusPerDSP[i] = iBusPerBlk + 5;
  }
}

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