ROOT logo
/// 
/// Macro to time the PadBy*** methods of AliMpVSegmentation implementation(s)
/// 
/// The output should ressemble this (output from a MacBook Pro 2.33 GHz on Feb, 18th, 2009)
///
/// I-AliCDBManager::Init: AliEn classes enabled in Root. AliCDBGrid factory registered.
/// I-AliCDBManager::SetDefaultStorage: Setting Default storage to: local://$ALICE_ROOT/OCDB
/// W-AliCDBManager::Get: Run number explicitly set in query: CDB cache temporarily disabled!
/// AliMpDCSNamer
///   ManuId2PCBIndex  R:0.0645s C:0.0400s (9676 slices)
///   ManuId2Sector  R:0.0434s C:0.0200s (7152 slices)
/// AliMpDetElement
///   AddManu 
///     R:1.6670s C:1.6900s (16828 slices)
///    slat R:0.8474s C:0.8600s (9676 slices)
///    st12 R:0.6383s C:0.6000s (7152 slices)
/// AliMpFastSegmentation
///   AliMpFastSegmentation 
///     AliMpSectorSegmentation R:0.0929s C:0.0900s (4 slices)
///     AliMpSlatSegmentation R:0.1142s C:0.1400s (38 slices)
/// General
///   timeMapping Load mapping R:2.9965s C:2.9000s (1 slices) (1)
/// ************************************
/// *    Row   * pI.fMemRe *     sname *
/// ************************************
/// *        0 *        30 *         0 *
/// *        1 *        76 *         1 * (2)
/// ************************************
/// AliMpMotifMap
///   GetMotifPosition  R:0.0795s C:0.1400s (7152 slices)
/// General
///   ByIndices 
///     HasPadByIndices-St12 R:0.1787s C:0.1700s (32 slices) (3)
///     HasPadByIndices-St345 R:0.1579s C:0.1900s (280 slices)
///     PadByIndices-St12 R:0.5637s C:0.5900s (32 slices)
///     PadByIndices-St345 R:0.5379s C:0.5100s (280 slices)
///   ByLocation 
///    HasPadByLocation-St12 R:0.0906s C:0.0800s (7152 slices) (4)
///    HasPadByLocation-St345 R:0.1216s C:0.1100s (9676 slices)
///    PadByLocation-St12 R:0.4506s C:0.4300s (7152 slices)
///    PadByLocation-St345 R:0.5874s C:0.5900s (9676 slices)
///   ByPosition 
///     PadByPosition-St12 R:7.6133s C:7.5700s (32 slices) (5)
///     PadByPosition-St345 R:2.3484s C:2.4300s (280 slices)
/// 
/// Interesting points in the output are : 
///
/// (1) : this is the total time it takes to (create and) load the mapping
/// (2) : row 1 - row 0 indicates the memory the mapping takes
/// (3) : the *PadByIndices* are timed here
/// (4) : the *PadByLocation* are timed here
/// (5) : the *PadByPosition* are timed here.
///
/// 3-4-5 : please note that the HasPadBy... methods are always faster, so
/// if you do not need the pad itself, but just to know if it's there, use
/// those. 
/// Note also that currently the PadByPosition is by far the slowest of the
/// 3 methods (Indices,Location,Position).
///
/// L. Aphecetche, Subatech
///

#if !defined(__CINT__) || defined(__MAKECINT__)

#include "AliMpVSegmentation.h"
#include "AliMpCDB.h"
#include "AliMpSegmentation.h"
#include "AliMpPad.h"
#include "AliCodeTimer.h"
#include "AliMpDEManager.h"
#include "AliMpConstants.h"
#include "AliMpManuIterator.h"
#include "AliMpDEIterator.h"
#include "AliMpCathodType.h"
#include "AliMpStationType.h"
#include "AliMpVPadIterator.h"

#include "AliSysInfo.h"

#include <TObjArray.h>
#include <TVector2.h>
#include <TTree.h>

// The line below should be commented if you want to try this macro
// on revision before 31082 (where AliMpVSegmentation did not have the HasPadBy...
// methods).

//______________________________________________________________________________
Int_t StationId(Int_t detElemId)
{
  switch ( 1 + AliMpDEManager::GetChamberId(detElemId) / 2 )
  {
    case 1:
    case 2:
      return 12;
      break;
    case 3:
    case 4:
    case 5:
      return 345;
      break;
    default:
      return -1;
  }
}

//______________________________________________________________________________
void ByPosition(const AliMpVSegmentation* seg, Int_t detElemId, const TObjArray& pads)
{
  /// Time the PadByPosition method
  
  Int_t stationId = StationId(detElemId);

  AliCodeTimerAutoGeneral(Form("PadByPosition-St%d",stationId),);

  TIter next(&pads);
  AliMpPad* pad;
  
  while ( ( pad = static_cast<AliMpPad*>(next()) ) )
  {
    seg->PadByPosition(pad->GetPositionX(),pad->GetPositionY(),kFALSE);
  }
}

//______________________________________________________________________________
void ByIndices(const AliMpVSegmentation* seg, Int_t detElemId)
{
  /// Time the (Has)PadByIndices method
  
  Int_t stationId = StationId(detElemId);
  {
    AliCodeTimerAutoGeneral(Form("PadByIndices-St%d",stationId),);
    
    for ( Int_t ix = 0; ix < seg->MaxPadIndexX(); ++ix )
    {
      for ( Int_t iy = 0; iy < seg->MaxPadIndexY(); ++iy )
      {
        seg->PadByIndices(ix,iy,kFALSE);
      }
    }
  }
  
  {
    AliCodeTimerAutoGeneral(Form("HasPadByIndices-St%d",stationId),);
    
    for ( Int_t ix = 0; ix < seg->MaxPadIndexX(); ++ix )
    {
      for ( Int_t iy = 0; iy < seg->MaxPadIndexY(); ++iy )
      {
        seg->HasPadByIndices(ix,iy);
      }
    }
  }
}

//______________________________________________________________________________
void ByLocation(const AliMpVSegmentation* seg, Int_t detElemId, Int_t manuId)
{
  /// Time the (Has)PadByLocation method
  
  Int_t stationId = StationId(detElemId);
  {
    AliCodeTimerAutoGeneral(Form("PadByLocation-St%d",stationId),);
  
    for ( Int_t manuChannel = 0; manuChannel < AliMpConstants::ManuNofChannels(); ++manuChannel )
    {
      seg->PadByLocation(manuId,manuChannel,kFALSE);
    }
  }

  {
    AliCodeTimerAutoGeneral(Form("HasPadByLocation-St%d",stationId),);
    
    for ( Int_t manuChannel = 0; manuChannel < AliMpConstants::ManuNofChannels(); ++manuChannel )
    {
      seg->HasPadByLocation(manuId,manuChannel);
    }
  }
  
}

//______________________________________________________________________________
void timeMapping(Int_t nloop=1)
{
  AliCodeTimer::Instance()->Reset();

  {
    AliSysInfo::AddStamp("0");
    AliCodeTimerAutoGeneral("Load mapping",);
    AliMpCDB::LoadDDLStore2();
    AliSysInfo::AddStamp("1");
    AliCodeTimer::Instance()->Print();
    TTree t;
    t.ReadFile("syswatch.log");
    t.Scan("pI.fMemResident:sname");
  }

  AliCodeTimer::Instance()->Reset();
  
  for ( Int_t i = 0; i < nloop; ++i )
  {
    AliMpManuIterator it;
    
    Int_t detElemId;
    Int_t manuId;
    
    while ( it.Next(detElemId,manuId) )
    {
      const AliMpVSegmentation* seg = AliMpSegmentation::Instance()->GetMpSegmentationByElectronics(detElemId,manuId);
      
      ByLocation(seg,detElemId,manuId);
    }
    
    AliMpDEIterator deit;
    
    deit.First();
    
    while (!deit.IsDone())
    {
      Int_t detElemId = deit.CurrentDEId();
      
      if ( AliMpDEManager::GetStationType(detElemId) != AliMp::kStationTrigger ) 
      {
        
        for ( Int_t cath = 0; cath < 2; ++cath )
        {
          const AliMpVSegmentation* seg = AliMpSegmentation::Instance()->GetMpSegmentation(detElemId,AliMp::GetCathodType(cath));

          ByIndices(seg,detElemId);
          
          TObjArray pads;
          pads.SetOwner(kTRUE);

          AliMpVPadIterator* pit = seg->CreateIterator();
        
          pit->First();
        
          while (!pit->IsDone())
          {
            AliMpPad pad = pit->CurrentItem();
            pads.Add(new AliMpPad(pad));
            pit->Next();
          }
          
          delete pit;
          
          ByPosition(seg, detElemId, pads);
        }
        
      }
      
      deit.Next();
    }
    
  }
  AliCodeTimer::Instance()->Print();
}

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