3 /// An alternative macro to time the PadBy*** methods of AliMpVSegmentation
4 /// implementation(s) which can handle AliMpPad not derived from TObject.
6 /// By L. Aphecetche, Subatech
7 /// Modified by I. Hrivnacova, IPN Orsay
9 #if !defined(__CINT__) || defined(__MAKECINT__)
11 #include "AliMpVSegmentation.h"
13 #include "AliMpSegmentation.h"
15 #include "AliCodeTimer.h"
16 #include "AliMpDEManager.h"
17 #include "AliMpConstants.h"
18 #include "AliMpManuIterator.h"
19 #include "AliMpDEIterator.h"
20 #include "AliMpCathodType.h"
21 #include "AliMpStationType.h"
22 #include "AliMpVPadIterator.h"
24 #include "AliSysInfo.h"
26 #include <TObjArray.h>
32 // The line below should be commented if you want to try this macro
33 // on revision before 31082 (where AliMpVSegmentation did not have the HasPadBy...
36 //______________________________________________________________________________
37 Int_t StationId(Int_t detElemId)
39 switch ( 1 + AliMpDEManager::GetChamberId(detElemId) / 2 )
55 //______________________________________________________________________________
56 void ByPosition(const AliMpVSegmentation* seg, Int_t detElemId,
57 const std::vector<AliMpPad>& pads)
59 /// Time the PadByPosition method
61 Int_t stationId = StationId(detElemId);
63 AliCodeTimerAutoGeneral(Form("PadByPosition-St%d",stationId));
65 std::vector<AliMpPad>::const_iterator it;
66 for ( it = pads.begin(); it != pads.end(); it++ )
68 seg->PadByPosition(it->Position(),kFALSE);
72 //______________________________________________________________________________
73 void ByIndices(const AliMpVSegmentation* seg, Int_t detElemId)
75 /// Time the (Has)PadByIndices method
77 Int_t stationId = StationId(detElemId);
79 AliCodeTimerAutoGeneral(Form("PadByIndices-St%d",stationId));
81 for ( Int_t ix = 0; ix < seg->MaxPadIndexX(); ++ix )
83 for ( Int_t iy = 0; iy < seg->MaxPadIndexY(); ++iy )
85 seg->PadByIndices(ix,iy,kFALSE);
91 AliCodeTimerAutoGeneral(Form("HasPadByIndices-St%d",stationId));
93 for ( Int_t ix = 0; ix < seg->MaxPadIndexX(); ++ix )
95 for ( Int_t iy = 0; iy < seg->MaxPadIndexY(); ++iy )
97 seg->HasPadByIndices(ix,iy);
103 //______________________________________________________________________________
104 void ByLocation(const AliMpVSegmentation* seg, Int_t detElemId, Int_t manuId)
106 /// Time the (Has)PadByLocation method
108 Int_t stationId = StationId(detElemId);
110 AliCodeTimerAutoGeneral(Form("PadByLocation-St%d",stationId));
112 for ( Int_t manuChannel = 0; manuChannel < AliMpConstants::ManuNofChannels(); ++manuChannel )
114 seg->PadByLocation(manuId,manuChannel,kFALSE);
119 AliCodeTimerAutoGeneral(Form("HasPadByLocation-St%d",stationId));
121 for ( Int_t manuChannel = 0; manuChannel < AliMpConstants::ManuNofChannels(); ++manuChannel )
123 seg->HasPadByLocation(manuId,manuChannel);
129 //______________________________________________________________________________
130 void timeMapping2(Int_t nloop=1)
132 AliCodeTimer::Instance()->Reset();
135 AliSysInfo::AddStamp("0");
136 AliCodeTimerAutoGeneral("Load mapping");
137 AliMpCDB::LoadDDLStore2();
138 AliSysInfo::AddStamp("1");
139 AliCodeTimer::Instance()->Print();
141 t.ReadFile("syswatch.log");
142 t.Scan("pI.fMemResident:sname");
145 AliCodeTimer::Instance()->Reset();
147 for ( Int_t i = 0; i < nloop; ++i )
149 AliMpManuIterator it;
154 while ( it.Next(detElemId,manuId) )
156 const AliMpVSegmentation* seg = AliMpSegmentation::Instance()->GetMpSegmentationByElectronics(detElemId,manuId);
158 ByLocation(seg,detElemId,manuId);
161 AliMpDEIterator deit;
165 while (!deit.IsDone())
167 Int_t detElemId = deit.CurrentDEId();
169 if ( AliMpDEManager::GetStationType(detElemId) != AliMp::kStationTrigger )
172 for ( Int_t cath = 0; cath < 2; ++cath )
174 const AliMpVSegmentation* seg = AliMpSegmentation::Instance()->GetMpSegmentation(detElemId,AliMp::GetCathodType(cath));
176 ByIndices(seg,detElemId);
179 //pads.SetOwner(kTRUE);
180 std::vector<AliMpPad> pads;
182 AliMpVPadIterator* pit = seg->CreateIterator();
186 while (!pit->IsDone())
188 AliMpPad pad = pit->CurrentItem();
189 //pads.Add(new AliMpPad(pad));
196 ByPosition(seg, detElemId, pads);
205 AliCodeTimer::Instance()->Print();