ROOT logo
// $Id$

/// An alternative macro to time the PadBy*** methods of AliMpVSegmentation 
/// implementation(s) which can handle AliMpPad not derived from TObject.

#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 std::vector<AliMpPad>& pads)
{
  /// Time the PadByPosition method
  
  Int_t stationId = StationId(detElemId);

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

  std::vector<AliMpPad>::const_iterator it; 
  for ( it = pads.begin(); it != pads.end(); it++ ) 
  {
    seg->PadByPosition(it->GetPositionX(),it->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 timeMapping2(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);
          std::vector<AliMpPad> pads;

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

#endif
 timeMapping2.C:1
 timeMapping2.C:2
 timeMapping2.C:3
 timeMapping2.C:4
 timeMapping2.C:5
 timeMapping2.C:6
 timeMapping2.C:7
 timeMapping2.C:8
 timeMapping2.C:9
 timeMapping2.C:10
 timeMapping2.C:11
 timeMapping2.C:12
 timeMapping2.C:13
 timeMapping2.C:14
 timeMapping2.C:15
 timeMapping2.C:16
 timeMapping2.C:17
 timeMapping2.C:18
 timeMapping2.C:19
 timeMapping2.C:20
 timeMapping2.C:21
 timeMapping2.C:22
 timeMapping2.C:23
 timeMapping2.C:24
 timeMapping2.C:25
 timeMapping2.C:26
 timeMapping2.C:27
 timeMapping2.C:28
 timeMapping2.C:29
 timeMapping2.C:30
 timeMapping2.C:31
 timeMapping2.C:32
 timeMapping2.C:33
 timeMapping2.C:34
 timeMapping2.C:35
 timeMapping2.C:36
 timeMapping2.C:37
 timeMapping2.C:38
 timeMapping2.C:39
 timeMapping2.C:40
 timeMapping2.C:41
 timeMapping2.C:42
 timeMapping2.C:43
 timeMapping2.C:44
 timeMapping2.C:45
 timeMapping2.C:46
 timeMapping2.C:47
 timeMapping2.C:48
 timeMapping2.C:49
 timeMapping2.C:50
 timeMapping2.C:51
 timeMapping2.C:52
 timeMapping2.C:53
 timeMapping2.C:54
 timeMapping2.C:55
 timeMapping2.C:56
 timeMapping2.C:57
 timeMapping2.C:58
 timeMapping2.C:59
 timeMapping2.C:60
 timeMapping2.C:61
 timeMapping2.C:62
 timeMapping2.C:63
 timeMapping2.C:64
 timeMapping2.C:65
 timeMapping2.C:66
 timeMapping2.C:67
 timeMapping2.C:68
 timeMapping2.C:69
 timeMapping2.C:70
 timeMapping2.C:71
 timeMapping2.C:72
 timeMapping2.C:73
 timeMapping2.C:74
 timeMapping2.C:75
 timeMapping2.C:76
 timeMapping2.C:77
 timeMapping2.C:78
 timeMapping2.C:79
 timeMapping2.C:80
 timeMapping2.C:81
 timeMapping2.C:82
 timeMapping2.C:83
 timeMapping2.C:84
 timeMapping2.C:85
 timeMapping2.C:86
 timeMapping2.C:87
 timeMapping2.C:88
 timeMapping2.C:89
 timeMapping2.C:90
 timeMapping2.C:91
 timeMapping2.C:92
 timeMapping2.C:93
 timeMapping2.C:94
 timeMapping2.C:95
 timeMapping2.C:96
 timeMapping2.C:97
 timeMapping2.C:98
 timeMapping2.C:99
 timeMapping2.C:100
 timeMapping2.C:101
 timeMapping2.C:102
 timeMapping2.C:103
 timeMapping2.C:104
 timeMapping2.C:105
 timeMapping2.C:106
 timeMapping2.C:107
 timeMapping2.C:108
 timeMapping2.C:109
 timeMapping2.C:110
 timeMapping2.C:111
 timeMapping2.C:112
 timeMapping2.C:113
 timeMapping2.C:114
 timeMapping2.C:115
 timeMapping2.C:116
 timeMapping2.C:117
 timeMapping2.C:118
 timeMapping2.C:119
 timeMapping2.C:120
 timeMapping2.C:121
 timeMapping2.C:122
 timeMapping2.C:123
 timeMapping2.C:124
 timeMapping2.C:125
 timeMapping2.C:126
 timeMapping2.C:127
 timeMapping2.C:128
 timeMapping2.C:129
 timeMapping2.C:130
 timeMapping2.C:131
 timeMapping2.C:132
 timeMapping2.C:133
 timeMapping2.C:134
 timeMapping2.C:135
 timeMapping2.C:136
 timeMapping2.C:137
 timeMapping2.C:138
 timeMapping2.C:139
 timeMapping2.C:140
 timeMapping2.C:141
 timeMapping2.C:142
 timeMapping2.C:143
 timeMapping2.C:144
 timeMapping2.C:145
 timeMapping2.C:146
 timeMapping2.C:147
 timeMapping2.C:148
 timeMapping2.C:149
 timeMapping2.C:150
 timeMapping2.C:151
 timeMapping2.C:152
 timeMapping2.C:153
 timeMapping2.C:154
 timeMapping2.C:155
 timeMapping2.C:156
 timeMapping2.C:157
 timeMapping2.C:158
 timeMapping2.C:159
 timeMapping2.C:160
 timeMapping2.C:161
 timeMapping2.C:162
 timeMapping2.C:163
 timeMapping2.C:164
 timeMapping2.C:165
 timeMapping2.C:166
 timeMapping2.C:167
 timeMapping2.C:168
 timeMapping2.C:169
 timeMapping2.C:170
 timeMapping2.C:171
 timeMapping2.C:172
 timeMapping2.C:173
 timeMapping2.C:174
 timeMapping2.C:175
 timeMapping2.C:176
 timeMapping2.C:177
 timeMapping2.C:178
 timeMapping2.C:179
 timeMapping2.C:180
 timeMapping2.C:181
 timeMapping2.C:182
 timeMapping2.C:183
 timeMapping2.C:184
 timeMapping2.C:185
 timeMapping2.C:186
 timeMapping2.C:187
 timeMapping2.C:188
 timeMapping2.C:189
 timeMapping2.C:190
 timeMapping2.C:191
 timeMapping2.C:192
 timeMapping2.C:193
 timeMapping2.C:194
 timeMapping2.C:195
 timeMapping2.C:196
 timeMapping2.C:197
 timeMapping2.C:198
 timeMapping2.C:199
 timeMapping2.C:200
 timeMapping2.C:201
 timeMapping2.C:202
 timeMapping2.C:203
 timeMapping2.C:204