AliRoot Core  v5-06-15 (45dab64)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliMpPCB.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  * *
4  * Author: The ALICE Off-line Project. *
5  * Contributors are mentioned in the code where appropriate. *
6  * *
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  **************************************************************************/
15 
16 // $Id$
17 // $MpId: AliMpPCB.cxx,v 1.8 2006/05/24 13:58:50 ivana Exp $
18 
19 #include "AliMpPCB.h"
20 
21 #include "AliMpMotif.h"
22 #include "AliMpSlatMotifMap.h"
23 #include "AliMpMotifPosition.h"
24 #include "AliMpMotifSpecial.h"
25 #include "AliMpMotifType.h"
26 #include "AliLog.h"
27 
28 #include "Riostream.h"
29 #include "TList.h"
30 #include "TObjString.h"
31 #include "TMath.h"
32 #include <sstream>
33 
34 
35 //-----------------------------------------------------------------------------
52 //-----------------------------------------------------------------------------
53 
54 using std::cout;
55 using std::endl;
56 using std::ofstream;
60 
61 //_____________________________________________________________________________
63 : TObject(),
64  fId(""),
65  fPadSizeX(0),
66  fPadSizeY(0),
67  fEnveloppeSizeX(0),
68  fEnveloppeSizeY(0),
69  fXoffset(0),
70  fActiveXmin(0),
71  fActiveXmax(0),
72  fIxmin(99999),
73  fIxmax(0),
74  fIymin(99999),
75  fIymax(0),
76  fMotifPositions(),
77  fNofPads(0),
78  fMotifMap(0)
79 {
83  fMotifPositions.SetOwner(kTRUE);
84  AliDebug(1,Form("this=%p",this));
85 }
86 
87 //_____________________________________________________________________________
88 AliMpPCB::AliMpPCB(AliMpSlatMotifMap* motifMap, const char* id, Double_t padSizeX, Double_t padSizeY,
89  Double_t enveloppeSizeX, Double_t enveloppeSizeY)
90 : TObject(),
91  fId(id),
92  fPadSizeX(padSizeX),
93  fPadSizeY(padSizeY),
94  fEnveloppeSizeX(enveloppeSizeX),
95  fEnveloppeSizeY(enveloppeSizeY),
96  fXoffset(0),
97  fActiveXmin(0),
98  fActiveXmax(0),
99  fIxmin(99999),
100  fIxmax(0),
101  fIymin(99999),
102  fIymax(0),
103  fMotifPositions(),
104  fNofPads(0),
105  fMotifMap(motifMap)
106 {
111  fMotifPositions.SetOwner(kTRUE);
112  AliDebug(1,Form("this=%p id=%s",this,id));
113 }
114 
115 //_____________________________________________________________________________
117 : TObject(o),
118  fId(0),
119  fPadSizeX(0),
120  fPadSizeY(0),
121  fEnveloppeSizeX(0),
122  fEnveloppeSizeY(0),
123  fXoffset(0),
124  fActiveXmin(0),
125  fActiveXmax(0),
126  fIxmin(99999),
127  fIxmax(0),
128  fIymin(99999),
129  fIymax(0),
130  fMotifPositions(),
131  fNofPads(0),
132  fMotifMap(0x0)
133 {
136 
137  fMotifPositions.SetOwner(kTRUE);
138 
139  AliDebug(1,Form("this=%p (copy ctor) : begin",this));
140  o.Copy(*this);
141  AliDebug(1,Form("this=%p (copy ctor) : end",this));
142 }
143 
144 //_____________________________________________________________________________
146 : TObject(),
147  fId(id),
148  fPadSizeX(-1.0),
149  fPadSizeY(-1.0),
150  fEnveloppeSizeX(ms->DimensionX()*2.0),
151  fEnveloppeSizeY(ms->DimensionY()*2.0),
152  fXoffset(0.0),
153  fActiveXmin(0.0),
154  fActiveXmax(fEnveloppeSizeX),
155  fIxmin(0),
156  fIxmax(ms->GetMotifType()->GetNofPadsX()-1),
157  fIymin(0),
158  fIymax(ms->GetMotifType()->GetNofPadsY()-1),
159  fMotifPositions(),
160  fNofPads(ms->GetMotifType()->GetNofPads()),
161  fMotifMap(0x0)
162 {
171 
172  AliDebug(1,Form("this=%p (ctor special motif)",this));
173 
174  fMotifPositions.SetOwner(kTRUE);
175 
176  Double_t posx = ms->DimensionX();
177  Double_t posy = ms->DimensionY();
178  AliMpMotifPosition* mp = new AliMpMotifPosition(-1,ms,posx,posy);
181  fMotifPositions.AddLast(mp);
182 }
183 
184 //_____________________________________________________________________________
185 AliMpPCB&
187 {
189 
190  AliDebug(1,Form("this=%p (assignment op) : begin",this));
191  o.Copy(*this);
192  AliDebug(1,Form("this=%p (assignment op) : end",this));
193  return *this;
194 }
195 
196 //_____________________________________________________________________________
198 {
202  AliDebug(1,Form("this=%p",this));
203 }
204 
205 //_____________________________________________________________________________
206 Double_t
208 {
213 
214  return fActiveXmin;
215 }
216 
217 //_____________________________________________________________________________
218 Double_t
220 {
225 
226  return fActiveXmax;
227 }
228 
229 //_____________________________________________________________________________
230 void
231 AliMpPCB::Add(AliMpMotifType* mt, Int_t ix, Int_t iy)
232 {
242 
243  TString id(Form("%s-%e-%e",mt->GetID().Data(),PadSizeX(),PadSizeY()));
244 
245  AliMpVMotif* motif = fMotifMap->FindMotif(id);
246 
247  if (!motif)
248  {
249  motif = new AliMpMotif(id,mt,PadSizeX()/2.0,PadSizeY()/2.0);
250  AliDebug(1,Form("Adding motif %s to motifMap",id.Data()));
251  fMotifMap->AddMotif(motif);
252  }
253  else
254  {
255  AliDebug(1,Form("Got motif %s from motifMap",id.Data()));
256  }
257 
258  Double_t posx(0.);
259  Double_t posy(0.);
260  Int_t ixmin(-1);
261  Int_t iymin(-1);
262 
263  if ( ix >= 0 && iy >= 0 )
264  {
265  posx = ix*PadSizeX();
266  posy = iy*PadSizeY();
267  ixmin = ix;
268  iymin = iy;
269  }
270  else
271  if ( ix >= 0 && iy < 0 )
272  {
273  posx = ix*PadSizeX();
274  posy = Ymax()+iy*PadSizeY();
275  ixmin = ix;
276  iymin = TMath::Nint(Ymax()/PadSizeY()) + iy;
277  }
278  else
279  if ( ix < 0 && iy < 0 )
280  {
281  posx = Xmax()+ix*PadSizeX();
282  posy = Ymax()+iy*PadSizeY();
283  ixmin = TMath::Nint(Xmax()/PadSizeX()) + ix;
284  iymin = TMath::Nint(Ymax()/PadSizeY()) + iy;
285  }
286  else
287  if ( ix < 0 && iy >=0 )
288  {
289  posx = Xmax()+ix*PadSizeX();
290  posy = iy*PadSizeY();
291  ixmin = TMath::Nint(Xmax()/PadSizeX()) + ix;
292  iymin = iy;
293  }
294 
295  posx += motif->DimensionX();
296  posy += motif->DimensionY();
297  AliMpMotifPosition* mp
298  = new AliMpMotifPosition(-1,motif,posx, posy);
299 
300  Int_t ixmax = ixmin + mt->GetNofPadsX() - 1;
301  Int_t iymax = iymin + mt->GetNofPadsY() - 1;
302  mp->SetLowIndicesLimit(ixmin,iymin);
303  mp->SetHighIndicesLimit(ixmax,iymax);
304 
305  fMotifPositions.AddLast(mp);
306 
307  fIxmin = TMath::Min(fIxmin,ixmin);
308  fIxmax = TMath::Max(fIxmax,ixmax);
309  fIymin = TMath::Min(fIymin,iymin);
310  fIymax = TMath::Max(fIymax,iymax);
311 
313  fActiveXmax = (fIxmax+1)*PadSizeX();
314  fNofPads += mt->GetNofPads();
315 }
316 
317 //_____________________________________________________________________________
318 AliMpArea
320 {
322 
323  return AliMpArea((Xmin()+Xmax())/2.0,DY(), DX(), DY() );
324 }
325 
326 //_____________________________________________________________________________
327 TObject*
328 AliMpPCB::Clone(const char* /*newname*/) const
329 {
333  AliDebug(1,"begin");
334  TObject* object = new AliMpPCB(*this);
335  AliDebug(1,"end");
336  return object;
337 }
338 
339 //_____________________________________________________________________________
340 AliMpPCB*
341 AliMpPCB::Clone(const TArrayI& manuids, Int_t ixOffset, Double_t xOffset) const
342 {
351 
352  AliDebug(1,"begin");
353 
354  // First get a full clone.
355  AliMpPCB* pcb = static_cast<AliMpPCB*>(Clone());
356 
357  if ( Int_t(pcb->GetSize()) != manuids.GetSize() )
358  {
359  AliError(Form("Cannot Clone PCB %s because I do not get the correct number of "
360  "manu ids (got %d, wanted %d)",pcb->GetID(),
361  manuids.GetSize(),pcb->GetSize()));
362  return 0;
363  }
364 
365  MpPair_t shift = AliMp::Pair(-fIxmin+ixOffset,0);
366 
367  // Then change the internal MotifPositions wrt manu id
368  // and position (offset in x).
369  for ( Int_t i = 0; i < pcb->GetSize(); ++i )
370  {
371  AliMpMotifPosition* mp = pcb->GetMotifPosition(i);
372  mp->SetID(manuids[i]);
373  Double_t posx = mp->GetPositionX() + xOffset;
374  Double_t posy = mp->GetPositionY();
375  mp->SetPosition(posx, posy);
376  MpPair_t low = mp->GetLowIndicesLimit();
377  low += shift;
378  mp->SetLowIndicesLimit(low);
379  MpPair_t high = mp->GetHighIndicesLimit();
380  high += shift;
381  mp->SetHighIndicesLimit(high);
382  }
383 
384  pcb->fIxmin += AliMp::PairFirst(shift);
385  pcb->fIxmax += AliMp::PairFirst(shift);
386  pcb->fXoffset = xOffset;
387 
388  pcb->fActiveXmin += xOffset;
389  pcb->fActiveXmax += xOffset;
390 
391  AliDebug(1,"end");
392 
393  return pcb;
394 }
395 
396 //_____________________________________________________________________________
397 void
398 AliMpPCB::Copy(TObject& o) const
399 {
401 
402  AliDebug(1,"begin");
403 
404  TObject::Copy(o);
405  AliMpPCB& pcb = static_cast<AliMpPCB&>(o);
406  pcb.fId = fId;
407  pcb.fPadSizeX = fPadSizeX;
408  pcb.fPadSizeY = fPadSizeY;
411  pcb.fXoffset = fXoffset;
412  pcb.fIxmin = fIxmin;
413  pcb.fIxmax = fIxmax;
414  pcb.fIymin = fIymin;
415  pcb.fIymax = fIymax;
416  pcb.fActiveXmin = fActiveXmin;
417  pcb.fActiveXmax = fActiveXmax;
418 
419  AliDebug(1,"Deleting pcb.fMotifPositions");
420  pcb.fMotifPositions.Delete();
421  AliDebug(1,"Deleting pcb.fMotifPositions : done");
422 
423  for ( Int_t i = 0; i < fMotifPositions.GetEntriesFast(); ++i )
424  {
426  AliMpMotifPosition* pcbpos
427  = new AliMpMotifPosition(pos->GetID(), pos->GetMotif(),
428  pos->GetPositionX(), pos->GetPositionY());
429  pcbpos->SetLowIndicesLimit(pos->GetLowIndicesLimit());
431  pcb.fMotifPositions.AddLast(pcbpos);
432  }
433 
434  pcb.fNofPads = fNofPads;
435 
436  pcb.fMotifMap = fMotifMap; // warning : we do share the motifmap.
437 
438  AliDebug(1,"end");
439 }
440 
441 //_____________________________________________________________________________
442 Double_t
444 {
448 
449  return GetNofPadsX()*fPadSizeX/2.0;
450 }
451 
452 //_____________________________________________________________________________
453 Double_t
455 {
463 
464  return fEnveloppeSizeX/2.0;
465 }
466 
467 //_____________________________________________________________________________
468 Double_t
470 {
474 
475  return GetNofPadsY()*fPadSizeY/2.0;
476 }
477 
478 //_____________________________________________________________________________
479 Double_t
481 {
489 
490  return fEnveloppeSizeY/2.0;
491 }
492 
493 //_____________________________________________________________________________
495 AliMpPCB::FindMotifPosition(Int_t ix, Int_t iy) const
496 {
501 
502  for (Int_t i = 0; i < fMotifPositions.GetEntriesFast(); ++i )
503  {
505  if ( mp->HasPadByIndices(AliMp::Pair(ix,iy)) )
506  {
507  return mp;
508  }
509  }
510  return 0;
511 }
512 
513 //_____________________________________________________________________________
515 AliMpPCB::FindMotifPosition(Double_t x, Double_t y) const
516 {
520 
521  for (Int_t i = 0; i < fMotifPositions.GetEntriesFast(); ++i )
522  {
524 
525  Double_t localPosX = x - mp->GetPositionX();
526  Double_t localPosY = y - mp->GetPositionY();
527 
528  MpPair_t localIndices(
529  mp->GetMotif()->PadIndicesLocal(localPosX, localPosY));
530 
531  if ( localIndices >= 0 &&
532  mp->GetMotif()->GetMotifType()->HasPadByLocalIndices(localIndices) )
533  {
534  return mp;
535  }
536  }
537  return 0;
538 }
539 
540 //_____________________________________________________________________________
541 const char*
543 {
547 
548  return fId.Data();
549 }
550 
551 //_____________________________________________________________________________
554 {
558 
559  if ( i >= fMotifPositions.GetEntriesFast() ) return 0;
560 
562 }
563 
564 //_____________________________________________________________________________
565 Int_t
567 {
571 
572  return fIxmax-fIxmin+1;
573 }
574 
575 //_____________________________________________________________________________
576 Int_t
578 {
582 
583  return fIymax-fIymin+1;
584 }
585 
586 //_____________________________________________________________________________
587 Int_t
589 {
593 
594  return fMotifPositions.GetEntriesFast();
595 }
596 
597 //_____________________________________________________________________________
598 Bool_t
599 AliMpPCB::HasMotifPositionID(Int_t manuId) const
600 {
602 
603  TIter next(&fMotifPositions);
604  AliMpMotifPosition* pos;
605  while ( ( pos = static_cast<AliMpMotifPosition*>(next()) ) )
606  {
607  if ( pos->GetID() == manuId ) return kTRUE;
608  }
609  return kFALSE;
610 }
611 
612 
613 //_____________________________________________________________________________
614 Int_t
616 {
620 
621  return fIxmin;
622 }
623 
624 //_____________________________________________________________________________
625 Int_t
627 {
631 
632  return Ixmin() + GetNofPadsX() - 1;
633 }
634 
635 //_____________________________________________________________________________
636 Int_t
638 {
642 
643  return fIymin;
644 }
645 
646 //_____________________________________________________________________________
647 Int_t
649 {
653 
654  return Iymin() + GetNofPadsY() - 1;
655 }
656 
657 //_____________________________________________________________________________
658 Double_t
660 {
664 
665  return fPadSizeX;
666 }
667 
668 //_____________________________________________________________________________
669 Double_t
671 {
675 
676  return fPadSizeY;
677 }
678 
679 //_____________________________________________________________________________
680 void
681 AliMpPCB::Print(Option_t* option) const
682 {
687 
688  cout << "PCB " << GetID() << " PADSIZES=(" << fPadSizeX << ","
689  << fPadSizeY << ") iMin=(" << fIxmin << "," << fIymin << ") "
690  << "iMax=(" << fIxmax << "," << fIymax << ") "
691  << " EnvXmin,max=(" << Xmin() << "," << Xmax()
692  << ") Xmin,max=(" << ActiveXmin() << "," << ActiveXmax() << ")"
693  << endl;
694 
695  if ( option && option[0] == 'M' )
696  {
697  for ( Int_t i = 0; i < fMotifPositions.GetEntriesFast(); ++i )
698  {
699  fMotifPositions[i]->Print(option+1);
700  }
701  }
702 }
703 
704 //_____________________________________________________________________________
705 void
707 {
710 
711  TString fileName(fId);
712  fileName += ".pcb";
713  TList lines;
714  lines.SetOwner(kTRUE);
715 
716  for ( Int_t i = 0; i < fMotifPositions.GetEntriesFast(); ++i )
717  {
719  AliMpVMotif* motif = pos->GetMotif();
720 
721  Double_t lowerLeftX = pos->GetPositionX()-pos->GetDimensionX();
722  Double_t lowerLeftY = pos->GetPositionY()-pos->GetDimensionY();
723  TString id(motif->GetID());
724  // id is supposed to be of the form %s-%e-%e, and we're only
725  // interested in the %s part of it
726  Ssiz_t index = id.Index("-");
727  if ( index < 1 )
728  {
729  AliError(Form("id=%s does not meet expectations",id.Data()));
730  return;
731  }
732  TString motifName(id(0,index));
733  lines.Add(new TObjString(Form("MOTIF %s %d %d",
734  motifName.Data(),
735  TMath::Nint(lowerLeftX/fPadSizeX),
736  TMath::Nint(lowerLeftY/fPadSizeY))));
737  }
738 
739  ofstream out(fileName.Data());
740  out.precision(9);
741  out << "SIZES " << fPadSizeX << " " << fPadSizeY
742  << " " << fEnveloppeSizeX << " " << fEnveloppeSizeY
743  << endl;
744 
745  TIter next(&lines);
746  TObjString* s;
747  while ( ( s = (TObjString*)next() ) )
748  {
749  out << s->String().Data() << endl;
750  }
751  out.close();
752 }
753 
754 //_____________________________________________________________________________
755 Double_t
756 AliMpPCB::X() const
757 {
761 
762  return fXoffset + DX();
763 }
764 
765 //_____________________________________________________________________________
766 Double_t
768 {
772 
773  return X() - DX();
774 }
775 
776 //_____________________________________________________________________________
777 Double_t
779 {
783 
784  return X() + DX();
785 }
786 
787 //_____________________________________________________________________________
788 Double_t
789 AliMpPCB::Y() const
790 {
794 
795  return DY(); // this works as PCB are organized in a single row within slats.
796 }
797 
798 //_____________________________________________________________________________
799 Double_t
801 {
805 
806  return Y() - DY();
807 }
808 
809 //_____________________________________________________________________________
810 Double_t
812 {
816 
817  return Y() + DY();
818 }
819 
Double_t GetPositionY() const
Return y position.
void SetLowIndicesLimit(MpPair_t limit, Bool_t valid=true)
virtual Double_t DimensionY() const
Return y dimensions.
void Print(Option_t *option="") const
Definition: AliMpPCB.cxx:681
Double_t DX() const
Definition: AliMpPCB.cxx:454
Bool_t HasMotifPositionID(Int_t manuId) const
Definition: AliMpPCB.cxx:599
Int_t Ixmin() const
Definition: AliMpPCB.cxx:615
Double_t GetDimensionY() const
Return y dimension.
void Copy(TObject &o) const
Definition: AliMpPCB.cxx:398
TString fId
PCB name.
Definition: AliMpPCB.h:146
Double_t ActiveDY() const
Definition: AliMpPCB.cxx:469
A special motif with varying pad dimensions.
AliMpSlatMotifMap * fMotifMap
to keep track of things to avoid duplications of motif and motiftypes, and get proper deletion ...
Definition: AliMpPCB.h:160
Int_t fNofPads
number of pads in this PCB
Definition: AliMpPCB.h:159
virtual Double_t DimensionY() const =0
Return y dimensions.
Int_t GetNofPadsX() const
Definition: AliMpPCB.cxx:566
Int_t Ixmax() const
Definition: AliMpPCB.cxx:626
AliMpPCB & operator=(const AliMpPCB &o)
Definition: AliMpPCB.cxx:186
Double_t X() const
Definition: AliMpPCB.cxx:756
A PCB for station 3,4 or 5.
Definition: AliMpPCB.h:46
AliMpMotifPosition * FindMotifPosition(Int_t ix, Int_t iy) const
Returns the motifPosition which contains the pad at (ix,iy).
Definition: AliMpPCB.cxx:495
AliMpArea Area() const
Definition: AliMpPCB.cxx:319
Double_t GetDimensionX() const
Return x dimension.
MpPair_t Pair(Int_t first, Int_t second)
Encode the pair of integers to another integer.
Double_t Ymin() const
Definition: AliMpPCB.cxx:800
Int_t GetSize() const
The number of motifs, aka manus.
Definition: AliMpPCB.cxx:588
virtual ~AliMpPCB()
Definition: AliMpPCB.cxx:197
A rectangle area positioned in plane..
Definition: AliMpArea.h:20
Bool_t HasPadByIndices(MpPair_t indices) const
Double_t PadSizeX() const
Definition: AliMpPCB.cxx:659
AliMpMotifType * GetMotifType() const
Return the motif type.
Definition: AliMpVMotif.h:87
void SetPosition(Double_t x, Double_t y)
Double_t Xmin() const
Definition: AliMpPCB.cxx:767
Int_t GetNofPadsY() const
Definition: AliMpPCB.cxx:577
A container to keep track of allocated motifs and motifTypes for slats (both St345 and trigger ones)...
Double_t ActiveDX() const
Definition: AliMpPCB.cxx:443
virtual Double_t DimensionX() const
Return x dimensions.
ClassImp(TPCGenInfo)
Definition: AliTPCCmpNG.C:254
Int_t fIxmax
max pad index in x
Definition: AliMpPCB.h:155
MpPair_t GetHighIndicesLimit() const
Int_t Iymin() const
Definition: AliMpPCB.cxx:637
void SetHighIndicesLimit(MpPair_t limit, Bool_t valid=true)
Double_t fEnveloppeSizeY
max y-size of this PCB (cm)
Definition: AliMpPCB.h:150
Int_t fIxmin
min pad index in x
Definition: AliMpPCB.h:154
AliMpPCB()
Definition: AliMpPCB.cxx:62
Int_t GetID() const
Return motif position ID = manu id.
TString GetID() const
Return the motif identifier.
Definition: AliMpVMotif.h:90
A placed motif.
Double_t fPadSizeY
y-size of this PCB's pads (cm)
Definition: AliMpPCB.h:148
Int_t GetNofPadsX() const
Return number of pads in x direction.
void Add(AliMpMotifType *motifType, Int_t ix, Int_t iy)
Definition: AliMpPCB.cxx:231
Int_t GetNofPadsY() const
Return number of pads in y direction.
Bool_t HasPadByLocalIndices(MpPair_t localIndices) const
const char * GetID() const
Definition: AliMpPCB.cxx:542
Double_t ActiveXmin() const
Definition: AliMpPCB.cxx:207
MpPair_t GetLowIndicesLimit() const
void Save() const
Definition: AliMpPCB.cxx:706
Double_t ActiveXmax() const
Definition: AliMpPCB.cxx:219
AliMpVMotif * GetMotif() const
Return motif.
Double_t fPadSizeX
x-size of this PCB's pads (cm)
Definition: AliMpPCB.h:147
virtual Double_t DimensionX() const =0
Return x dimensions.
Int_t fIymax
max pad index in y
Definition: AliMpPCB.h:157
AliMpMotifPosition * GetMotifPosition(Int_t i) const
Definition: AliMpPCB.cxx:553
virtual MpPair_t PadIndicesLocal(Double_t localPosX, Double_t localPosY) const =0
Return local indices of the pad specified by local position.
TObjArray fMotifPositions
array of motifs
Definition: AliMpPCB.h:158
Int_t GetNofPads() const
Return the total number of pads.
Int_t fIymin
min pad index in y
Definition: AliMpPCB.h:156
AliMpVMotif * FindMotif(const TString &id) const
Double_t DY() const
Definition: AliMpPCB.cxx:480
Abstract base class for a motif with its unique ID and the motif type.
Definition: AliMpVMotif.h:24
Double_t fXoffset
x-offset = x of first pad of this PCB (cm)
Definition: AliMpPCB.h:151
TString GetID() const
Return unique motif ID.
Int_t MpPair_t
Int_t PairFirst(MpPair_t pair)
Decode the first integer from encoded pair.
TObject * Clone(const char *newname="") const
Definition: AliMpPCB.cxx:328
Int_t Iymax() const
Definition: AliMpPCB.cxx:648
Double_t GetPositionX() const
Return x position.
Double_t Xmax() const
Definition: AliMpPCB.cxx:778
Double_t Y() const
Definition: AliMpPCB.cxx:789
A motif with its unique ID and the motif type.
Definition: AliMpMotif.h:23
Double_t fActiveXmax
max x of an actual pad in this PCB (cm)
Definition: AliMpPCB.h:153
Bool_t AddMotif(AliMpVMotif *motif, Bool_t warn=kTRUE)
Double_t fActiveXmin
min x of an actual pad in this PCB (cm)
Definition: AliMpPCB.h:152
Double_t PadSizeY() const
Definition: AliMpPCB.cxx:670
Double_t fEnveloppeSizeX
max x-size of this PCB (cm)
Definition: AliMpPCB.h:149
Class that defines the motif properties.
Double_t Ymax() const
Definition: AliMpPCB.cxx:811