Changes related to the implementing AliMpVSegmentation::NofPads
authorivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 17 Mar 2006 16:55:59 +0000 (16:55 +0000)
committerivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 17 Mar 2006 16:55:59 +0000 (16:55 +0000)
(Laurent)

MUON/mapping/AliMpPCB.cxx
MUON/mapping/AliMpPCB.h
MUON/mapping/AliMpSlat.cxx
MUON/mapping/AliMpSlat.h
MUON/mapping/AliMpSlatSegmentation.cxx
MUON/mapping/AliMpTriggerSegmentation.cxx
MUON/mapping/AliMpTriggerSegmentation.h

index db60823..3b1300c 100644 (file)
@@ -14,7 +14,7 @@
  **************************************************************************/
 
 // $Id$
-// $MpId: AliMpPCB.cxx,v 1.5 2006/01/11 10:14:17 ivana Exp $
+// $MpId: AliMpPCB.cxx,v 1.6 2006/03/17 16:42:33 ivana Exp $
 
 #include "AliMpPCB.h"
 
@@ -37,7 +37,8 @@ AliMpPCB::AliMpPCB()
     fEnveloppeSizeX(0), fEnveloppeSizeY(0),
     fXoffset(0),
     fActiveXmin(0), fActiveXmax(0),
-    fIxmin(99999), fIxmax(0), fIymin(99999), fIymax(0)
+    fIxmin(99999), fIxmax(0), fIymin(99999), fIymax(0),
+    fNofPads(0)
 {
       //
       // Default ctor.
@@ -52,7 +53,8 @@ AliMpPCB::AliMpPCB(const char* id, Double_t padSizeX, Double_t padSizeY,
     fEnveloppeSizeX(enveloppeSizeX), fEnveloppeSizeY(enveloppeSizeY),
     fXoffset(0),
     fActiveXmin(0), fActiveXmax(0),
-    fIxmin(99999), fIxmax(0), fIymin(99999), fIymax(0)
+    fIxmin(99999), fIxmax(0), fIymin(99999), fIymax(0),
+    fNofPads(0)
 {
       //
       // Normal ctor. Must be fed with the PCB's name (id), the pad dimensions
@@ -67,7 +69,8 @@ AliMpPCB::AliMpPCB(const AliMpPCB& o)
     fEnveloppeSizeX(0), fEnveloppeSizeY(0),
     fXoffset(0),
     fActiveXmin(0), fActiveXmax(0),
-    fIxmin(99999), fIxmax(0), fIymin(99999), fIymax(0)
+    fIxmin(99999), fIxmax(0), fIymin(99999), fIymax(0),
+    fNofPads(0)
 {
   o.Copy(*this);
 }
@@ -102,6 +105,7 @@ AliMpPCB::AliMpPCB(const char* id, AliMpMotifSpecial* ms)
 #else
   fMotifs.push_back(mp);
 #endif
+  fNofPads = ms->GetMotifType()->GetNofPads();
 }
 
 //_____________________________________________________________________________
@@ -214,6 +218,7 @@ AliMpPCB::Add(AliMpMotifType* mt, Int_t ix, Int_t iy)
 
   fActiveXmin = fIxmin*PadSizeX();
   fActiveXmax = (fIxmax+1)*PadSizeX();
+  fNofPads += mt->GetNofPads();
 }
 
 //_____________________________________________________________________________
@@ -319,6 +324,8 @@ AliMpPCB::Copy(TObject& o) const
       pcb.fMotifs.push_back(pcbpos);
 #endif      
     }
+    
+    pcb.fNofPads = fNofPads;  
 }
 
 //_____________________________________________________________________________
index 8467711..60292b4 100644 (file)
@@ -2,7 +2,7 @@
  * See cxx source for full Copyright notice                               */
 
 // $Id$ 
-// $MpId: AliMpPCB.h,v 1.4 2005/09/19 19:01:09 ivana Exp $ 
+// $MpId: AliMpPCB.h,v 1.6 2006/03/17 16:42:28 ivana Exp $ 
 
 /// \ingroup slat
 /// \class AliMpPCB
@@ -137,6 +137,8 @@ class AliMpPCB : public TObject
   
   const char* GetID() const;
   
+  Int_t NofPads() const { return fNofPads; }
+  
  private:
   TString fId;
   Double_t fPadSizeX;
@@ -155,8 +157,9 @@ class AliMpPCB : public TObject
 #else  
   std::vector<AliMpMotifPosition*> fMotifs;
 #endif
-
-  ClassDef(AliMpPCB,1) // A PCB for Stations 3,4,5
+  Int_t fNofPads;
+  
+  ClassDef(AliMpPCB,2) // A PCB for Stations 3,4,5
 };
 
 #endif 
index 97dc78b..a8931b4 100644 (file)
 **************************************************************************/
 
 // $Id$
-// $MpId: AliMpSlat.cxx,v 1.4 2006/03/02 16:35:20 ivana Exp $
+// $MpId: AliMpSlat.cxx,v 1.5 2006/03/17 16:42:33 ivana Exp $
 
 #include "AliMpSlat.h"
 
 #include "AliLog.h"
-#include "AliMpConnection.h"
-#include "AliMpMotif.h"
 #include "AliMpMotifPosition.h"
-#include "AliMpMotifType.h"
 #include "AliMpPCB.h"
-#include "AliMpSlatPadIterator.h"
 
 #include "Riostream.h"
 
 #include "TArrayI.h"
 
+///
+/// Representation of a slat cathode (bending or non-bending).
+///
+/// A slat can be viewed as a "collection" of PCBs of various densities
+/// (the density is defined by the size of the pads composing the PCB).
+///
+/// All the PCBs have a least the same height, if not the same width. In most
+/// of the case, height=width=40 cm, at least for St345 (for trigger,
+/// width varies)
+///
+
 ClassImp(AliMpSlat)
 
 //_____________________________________________________________________________
@@ -41,7 +48,8 @@ AliMpSlat::AliMpSlat()
   fDY(0),
   fNofPadsX(0), 
   fMaxNofPadsY(0),
-  fManuMap()
+  fManuMap(),
+  fNofPads(0)
 {
     //
     // Empty ctor.
@@ -59,10 +67,11 @@ AliMpSlat::AliMpSlat(const char* id, AliMpPlaneType bendingOrNonBending)
   fNofPadsX(0), 
   fMaxNofPadsY(0),
 //#ifdef WITH_ROOT
-  fManuMap(kTRUE)
+  fManuMap(kTRUE),
 //#else  
-//  fManuMap()
+//  fManuMap(),
 //#endif  
+  fNofPads(0)
 {
     //
     // Normal ctor
@@ -71,6 +80,22 @@ AliMpSlat::AliMpSlat(const char* id, AliMpPlaneType bendingOrNonBending)
 }
 
 //_____________________________________________________________________________
+AliMpSlat::AliMpSlat(const AliMpSlat&) : TObject()
+{
+  //
+  AliFatal("Implement me if needed");
+}
+
+//_____________________________________________________________________________
+AliMpSlat&
+AliMpSlat::operator=(const AliMpSlat&)
+{
+  //
+  AliFatal("Implement me if needed");
+  return *this;
+}
+
+//_____________________________________________________________________________
 AliMpSlat::~AliMpSlat()
 {
   //
@@ -129,6 +154,7 @@ AliMpSlat::Add(AliMpPCB* pcbType, const TArrayI& manuList)
 //#endif  
        }
   fPosition.Set(DX(),DY());
+  fNofPads += pcb->NofPads();
 }
 
 //_____________________________________________________________________________
@@ -311,6 +337,9 @@ AliMpSlat::ForcePosition(const TVector2& pos)
 void
 AliMpSlat::GetAllMotifPositionsIDs(TArrayI& ecn) const
 {
+  //
+  // Return all the manuIds (=MotifPositionIDs) of this slat
+  //
   ecn.Set(GetNofElectronicCards());
 //#ifdef WITH_ROOT
   TExMapIter it(fManuMap.GetIterator());
@@ -351,6 +380,9 @@ AliMpSlat::GetMaxNofPadsY() const
 Int_t 
 AliMpSlat::GetMaxPadIndexX() const
 {
+  //
+  // Returns the max ix that is valid for this slat.
+  //
   AliMpPCB* last = GetPCB(GetSize()-1);
   if (last)
   {
@@ -363,6 +395,10 @@ AliMpSlat::GetMaxPadIndexX() const
 const char*
 AliMpSlat::GetName() const
 {
+  //
+  // Returns the name of this slat, which is composed of its ID with
+  // the plane type as a suffix.
+  //
   TString name(GetID());
   if ( fPlaneType == kBendingPlane )
   {
@@ -383,6 +419,9 @@ AliMpSlat::GetName() const
 Int_t
 AliMpSlat::GetNofElectronicCards() const
 {
+  //
+  // Returns the number of manus that compose the readout of this slat.
+  //
   return fManuMap.GetSize();
 }
 
@@ -427,20 +466,6 @@ AliMpSlat::GetSize() const
 }
 
 //_____________________________________________________________________________
-AliMpPlaneType
-AliMpSlat::PlaneType() const
-{
-  return fPlaneType;
-}
-
-//_____________________________________________________________________________
-TVector2
-AliMpSlat::Position() const
-{
-  return fPosition;
-}
-
-//_____________________________________________________________________________
 void
 AliMpSlat::Print(Option_t* option) const
 {
index c363d02..54b404f 100644 (file)
@@ -2,7 +2,7 @@
  * See cxx source for full Copyright notice                               */
 
 // $Id$
-// $MpId: AliMpSlat.h,v 1.4 2006/03/02 16:35:16 ivana Exp $
+// $MpId: AliMpSlat.h,v 1.5 2006/03/17 16:42:28 ivana Exp $
 
 /// \ingroup slat
 /// \class AliMpSlat
@@ -62,7 +62,7 @@ class AliMpSlat : public TObject
   virtual ~AliMpSlat();
 
   TVector2 Dimensions() const;
-  TVector2 Position() const;
+  TVector2 Position() const { return fPosition; }
   
   const char* GetName() const;
   
@@ -135,26 +135,33 @@ class AliMpSlat : public TObject
     */
   void ForcePosition(const TVector2& pos);
   
-  AliMpPlaneType PlaneType() const;
+  AliMpPlaneType PlaneType() const { return fPlaneType; }
+  
+  Int_t NofPads() const { return fNofPads; }
+ protected:
+  AliMpSlat(const AliMpSlat& rhs);
+  AliMpSlat& operator=(const AliMpSlat& rhs);
   
  private:
-  TString fId;
-  AliMpPlaneType fPlaneType;
-  Double_t fDX;
-  Double_t fDY;
-  Int_t fNofPadsX;
-  Int_t fMaxNofPadsY;
+  TString fId; // The name of this slat, e.g. 112233N
+  AliMpPlaneType fPlaneType; // Whether it's bending or non-bending plane
+  Double_t fDX; // Half-size in X (cm)
+  Double_t fDY; // Half-size in Y (cm)
+  Int_t fNofPadsX; // Actual number of pads in x direction
+  Int_t fMaxNofPadsY; // Maximum number of pads in y direction
   mutable AliMpExMap fManuMap; // map of int to AliMpMotifPosition*
 #ifdef WITH_ROOT
   TObjArray fPCBs; // array of AliMpPCB*
   //mutable AliMpExMap fManuMap; // map of int to AliMpMotifPosition*
 #else  
-  std::vector<AliMpPCB*> fPCBs;
+  std::vector<AliMpPCB*> fPCBs; // array of AliMpPCB*
   //std::map<int,AliMpMotifPosition*> fManuMap;
 #endif
-  TVector2 fPosition;
+  TVector2 fPosition; // Position of the slat center.
+  Int_t fNofPads;
   
-  ClassDef(AliMpSlat,1) // A slat for stations 3,4,5
+  ClassDef(AliMpSlat,2) // A slat for stations 3,4,5
 };
 
 #endif
index a7d5d5b..abb3f4d 100644 (file)
@@ -14,7 +14,7 @@
 **************************************************************************/
 
 // $Id$
-// $MpId: AliMpSlatSegmentation.cxx,v 1.9 2006/03/14 09:04:28 ivana Exp $
+// $MpId: AliMpSlatSegmentation.cxx,v 1.10 2006/03/17 16:42:33 ivana Exp $
 
 // Caution !!
 // Implementation note.
@@ -177,9 +177,7 @@ AliMpSlatSegmentation::NofPads() const
 {
 /// Return number of pads defined in the slat
   
-  AliError("Not yet implemented");
-
-  return 0;
+  return fkSlat->NofPads();
 }
 
 //_____________________________________________________________________________
index 48414b0..f81c2b6 100644 (file)
@@ -14,7 +14,7 @@
 **************************************************************************/
 
 // $Id$
-// $MpId: AliMpTriggerSegmentation.cxx,v 1.4 2006/03/14 09:04:34 ivana Exp $
+// $MpId: AliMpTriggerSegmentation.cxx,v 1.5 2006/03/17 16:42:39 ivana Exp $
 
 #include "AliMpTriggerSegmentation.h"
 
@@ -33,7 +33,8 @@ ClassImp(AliMpTriggerSegmentation)
 //_____________________________________________________________________________
 AliMpTriggerSegmentation::AliMpTriggerSegmentation() 
 : AliMpVSegmentation(),
-fkSlat(0)
+fkSlat(0),
+fNofStrips(0)
 {
   //
   // Default ctor. Not to be used really.
@@ -50,6 +51,23 @@ fkSlat(slat)
   // Normal ctor.
   //
   AliDebug(1,Form("this=%p Normal ctor slat=%p",this,slat));
+  
+  // Compute the number of strips.
+  // We have to loop over all possible pads, in order to properly take
+  // into account the fact that a given strip might be part of several
+  // layer. Otherwise we would double count pads.
+
+  fNofStrips = 0;
+  for ( Int_t ix = 0; ix <= MaxPadIndexX(); ++ix )
+  {
+    for ( Int_t iy = 0; iy <= MaxPadIndexY(); ++iy )
+    {
+      if ( HasPad(AliMpIntPair(ix,iy)) )
+      {
+        ++fNofStrips;
+      }
+    }
+  }
 }
 
 //______________________________________________________________________________
@@ -157,17 +175,6 @@ AliMpTriggerSegmentation::MaxPadIndexY() const
 }
 
 //_____________________________________________________________________________
-Int_t 
-AliMpTriggerSegmentation::NofPads() const
-{
-/// Return number of pads defined in the trigger chamber
-  
-  AliError("Not yet implemented");
-  
-  return 0;
-}
-
-//_____________________________________________________________________________
 AliMpPad
 AliMpTriggerSegmentation::PadByLocation(const AliMpIntPair& location, 
                                         Bool_t warning) const
index d068384..888d8f6 100644 (file)
@@ -2,7 +2,7 @@
 * See cxx source for full Copyright notice                               */
 
 // $Id$
-// $MpId: AliMpTriggerSegmentation.h,v 1.4 2006/03/14 09:04:32 ivana Exp $
+// $MpId: AliMpTriggerSegmentation.h,v 1.5 2006/03/17 16:42:36 ivana Exp $
 
 /// \ingroup trigger
 /// \class AliMpTriggerSegmentation
@@ -44,7 +44,7 @@ public:
   
   Int_t MaxPadIndexX() const;
   Int_t MaxPadIndexY() const;
-  Int_t NofPads() const;
+  Int_t NofPads() const { return fNofStrips; }
     
   virtual AliMpPad PadByLocation(const AliMpIntPair& location, 
                                  Bool_t warning) const;
@@ -69,8 +69,8 @@ protected:
      
 private:
     const AliMpTrigger* fkSlat; // Slat
-  
-  ClassDef(AliMpTriggerSegmentation,1) // Segmentation for slat trigger stations
+  Int_t fNofStrips; // Number of strips in this slat
+  ClassDef(AliMpTriggerSegmentation,2) // Segmentation for slat trigger stations
 };
 
 #endif