1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
17 // $MpId: AliMpTriggerSegmentation.cxx,v 1.7 2006/05/24 13:58:52 ivana Exp $
19 #include "AliMpTriggerSegmentation.h"
22 #include "AliMpConnection.h"
23 #include "AliMpMotif.h"
24 #include "AliMpMotifPosition.h"
25 #include "AliMpMotifType.h"
27 #include "AliMpSlat.h"
28 #include "AliMpTrigger.h"
31 /// \class AliMpTriggerSegmentation
33 /// Implementation of AliMpVSegmentation for trigger slats.
35 /// \todo Implement CreateIterator method, if needed.
37 /// \author Laurent Aphecetche
40 ClassImp(AliMpTriggerSegmentation)
43 //_____________________________________________________________________________
44 AliMpTriggerSegmentation::AliMpTriggerSegmentation()
45 : AliMpVSegmentation(),
51 // Default ctor. Not to be used really.
53 AliDebug(1,Form("this=%p Empty ctor",this));
56 //_____________________________________________________________________________
57 AliMpTriggerSegmentation::AliMpTriggerSegmentation(
58 const AliMpTrigger* slat, Bool_t own)
59 : AliMpVSegmentation(),
67 AliDebug(1,Form("this=%p Normal ctor slat=%p",this,slat));
69 // Compute the number of strips.
70 // We have to loop over all possible pads, in order to properly take
71 // into account the fact that a given strip might be part of several
72 // layer. Otherwise we would double count pads.
75 for ( Int_t ix = 0; ix <= MaxPadIndexX(); ++ix )
77 for ( Int_t iy = 0; iy <= MaxPadIndexY(); ++iy )
79 if ( HasPad(AliMpIntPair(ix,iy)) )
87 //_____________________________________________________________________________
88 AliMpTriggerSegmentation::~AliMpTriggerSegmentation()
94 if ( fIsOwner ) delete fkSlat;
96 AliDebug(1,Form("this=%p",this));
99 //_____________________________________________________________________________
101 AliMpTriggerSegmentation::CreateIterator(const AliMpArea&) const
104 // Returns an iterator to loop over the pad contained within given area.
105 // Not implemented for trigger.
106 AliError("Not implemented for trigger");
110 //_____________________________________________________________________________
112 AliMpTriggerSegmentation::CreateIterator() const
115 // Returns an iterator to loop over all the pads
116 // Not implemented for trigger.
117 AliError("Not implemented for trigger");
122 //_____________________________________________________________________________
124 AliMpTriggerSegmentation::GetNeighbours(const AliMpPad& /*pad*/,
125 TObjArray& /*neighbours*/,
126 Bool_t /*includeSelf*/,
127 Bool_t /*includeVoid*/) const
130 AliError("Not implemented for trigger");
134 //_____________________________________________________________________________
136 AliMpTriggerSegmentation::Dimensions() const
138 return Slat()->Dimensions();
141 //_____________________________________________________________________________
143 AliMpTriggerSegmentation::GetAllElectronicCardIDs(TArrayI& ecn) const
145 Slat()->GetAllLocalBoardNumbers(ecn);
148 //_____________________________________________________________________________
150 AliMpTriggerSegmentation::GetName() const
152 // Name of that segmentation = TriggerSegmentation + slatName
153 TString name("TriggerSegmentation");
157 name += fkSlat->GetName();
162 //_____________________________________________________________________________
164 AliMpTriggerSegmentation::HasPad(const AliMpIntPair& indices) const
167 // Test if this slat has a pad located at the position referenced
168 // by the integer indices.
171 return PadByIndices(indices,kFALSE) != AliMpPad::Invalid();
174 //_____________________________________________________________________________
176 AliMpTriggerSegmentation::MaxPadIndexX() const
179 // Returns the value of the largest pad index in x-direction.
182 return fkSlat->GetNofPadsX()-1;
185 //_____________________________________________________________________________
187 AliMpTriggerSegmentation::MaxPadIndexY() const
190 // Returns the value of the largest pad index in y-direction.
193 return fkSlat->GetMaxNofPadsY()-1;
196 //_____________________________________________________________________________
198 AliMpTriggerSegmentation::PadByLocation(const AliMpIntPair& location,
199 Bool_t warning) const
202 // Returns the pad specified by its location, where location is the
203 // pair (ManuID,ManuChannel).
204 // If warning=kTRUE and the pad does not exist, a warning message is
207 // AliMpPad::Invalid() is returned if there's no pad at the given location.
212 for ( Int_t i = 0; i < fkSlat->GetSize(); ++i )
214 AliMpVSegmentation* seg = fkSlat->GetLayerSegmentation(i);
215 AliMpPad pi = seg->PadByLocation(location,kFALSE);
218 if ( !pad.IsValid() )
220 pad = AliMpPad(invloc,pi.GetIndices(),pi.Position(),pi.Dimensions());
221 pad.AddLocation(pi.GetLocation());
225 pad.AddLocation(pi.GetLocation());
229 if ( warning && !pad.IsValid() )
231 AliWarning(Form("No pad found at location (%d,%d)",location.GetFirst(),
232 location.GetSecond()));
237 //_____________________________________________________________________________
239 AliMpTriggerSegmentation::PadByIndices(const AliMpIntPair& indices,
240 Bool_t warning) const
243 // Returns the pad specified by its integer indices.
244 // If warning=kTRUE and the pad does not exist, a warning message is
247 // AliMpPad::Invalid() is returned if there's no pad at the given location.
254 for ( Int_t i = 0; i < fkSlat->GetSize(); ++i )
256 AliMpVSegmentation* seg = fkSlat->GetLayerSegmentation(i);
257 AliMpPad pi = seg->PadByIndices(indices,kFALSE);
260 if ( !pad.IsValid() )
262 pad = AliMpPad(invloc,pi.GetIndices(),pi.Position(),pi.Dimensions());
263 pad.AddLocation(pi.GetLocation());
267 pad.AddLocation(pi.GetLocation());
271 if ( warning && !pad.IsValid() )
273 AliWarning(Form("No pad found at indices (%d,%d)",indices.GetFirst(),
274 indices.GetSecond()));
280 //_____________________________________________________________________________
282 AliMpTriggerSegmentation::PadByPosition(const TVector2& position,
283 Bool_t warning) const
286 // Returns the pad specified by its (floating point) position.
287 // If warning=kTRUE and the pad does not exist, a warning message is
290 // AliMpPad::Invalid() is returned if there's no pad at the given location.
295 for ( Int_t i = 0; i < fkSlat->GetSize(); ++i )
297 AliMpVSegmentation* seg = fkSlat->GetLayerSegmentation(i);
298 AliMpPad pi = seg->PadByPosition(position,kFALSE);
301 if ( !pad.IsValid() )
303 pad = AliMpPad(invloc,pi.GetIndices(),pi.Position(),pi.Dimensions());
304 pad.AddLocation(pi.GetLocation());
308 pad.AddLocation(pi.GetLocation());
312 if ( warning && !pad.IsValid() )
314 AliWarning(Form("No pad found at position (%e,%e)",position.X(),
321 //_____________________________________________________________________________
323 AliMpTriggerSegmentation::PlaneType() const
325 return Slat()->PlaneType();
328 //_____________________________________________________________________________
330 AliMpTriggerSegmentation::Slat() const
333 // Returns the pointer to the referenced slat.