]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/mapping/AliMpRow.cxx
Introduced new DE names unique to each det element;
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpRow.cxx
index 56dd9a8bb0c94476e4d379dd25031bb00493362a..8848d4ddc5bb34e6e908a5cafa1b5d59f5e84c91 100755 (executable)
@@ -1,16 +1,28 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
 // $Id$
+// $MpId: AliMpRow.cxx,v 1.9 2006/05/24 13:58:46 ivana Exp $
 // Category: sector
 //
 // Class AliMpRow
 // --------------
 // Class describing a row composed of the row segments.
-//
+// Included in AliRoot: 2003/05/02
 // Authors: David Guez, Ivana Hrivnacova; IPN Orsay
 
-#include <Riostream.h>
-#include <TError.h>
-#include <TMath.h>
-
 #include "AliMpRow.h"
 #include "AliMpVRowSegment.h"
 #include "AliMpVRowSegmentSpecial.h"
 #include "AliMpMotifMap.h"
 #include "AliMpConstants.h"
 
+#include <TMath.h>
+#include <Riostream.h>
+
+/// \cond CLASSIMP
 ClassImp(AliMpRow)
+/// \endcond
 
 //_____________________________________________________________________________
 AliMpRow::AliMpRow(Int_t id, AliMpMotifMap* motifMap) 
@@ -31,7 +48,7 @@ AliMpRow::AliMpRow(Int_t id, AliMpMotifMap* motifMap)
     fSegments(),
     fMotifMap(motifMap)
 {
-//
+/// Standard constructor
 }
 
 //_____________________________________________________________________________
@@ -42,15 +59,22 @@ AliMpRow::AliMpRow()
     fSegments(),
     fMotifMap(0)
 {
-//
+/// Default constructor
 }
 
 //_____________________________________________________________________________
-AliMpRow::~AliMpRow() {
-// 
+AliMpRow::~AliMpRow() 
+{
+/// Destructor 
 
+#ifdef WITH_STL
   for (Int_t i=0; i<GetNofRowSegments(); i++)
     delete fSegments[i]; 
+#endif
+
+#ifdef WITH_ROOT
+  fSegments.Delete();
+#endif
 }
 
 //
@@ -60,8 +84,7 @@ AliMpRow::~AliMpRow() {
 //_____________________________________________________________________________
 AliMpVRowSegment*  AliMpRow::FindRowSegment(Int_t ix) const
 {    
-// Finds first normal row segment with low indices limit >= ix.
-// --- 
+/// Find first normal row segment with low indices limit >= ix.
 
   for (Int_t i=0; i<GetNofRowSegments(); i++) {
     AliMpVRowSegment* segment = GetRowSegment(i);
@@ -79,9 +102,8 @@ AliMpVRowSegment*  AliMpRow::FindRowSegment(Int_t ix) const
 AliMpMotifPosition*  
 AliMpRow::FindMotifPosition(AliMpVRowSegment* segment, Int_t ix) const
 {
-// Finds first motif position in the specified row segment 
-// with high indices limit >= ix.
-// --- 
+/// Find first motif position in the specified row segment 
+/// with high indices limit >= ix.
 
   if (!segment) return 0;
 
@@ -105,10 +127,9 @@ AliMpRow::FindMotifPosition(AliMpVRowSegment* segment, Int_t ix) const
 //_____________________________________________________________________________
 void AliMpRow::SetHighIndicesLimits(Int_t iy)
 {
-// Sets the global indices high limit to its row segments,
-// motif positions with a given value.
-// Keeps ix unmodified.
-// --- 
+/// Set the global indices high limit to its row segments,
+/// motif positions with a given value.
+/// Keep ix unmodified.
 
   for (Int_t j=0; j<GetNofRowSegments(); j++) {
      AliMpVRowSegment* rowSegment = GetRowSegment(j);       
@@ -133,8 +154,7 @@ void AliMpRow::SetHighIndicesLimits(Int_t iy)
 //_____________________________________________________________________________
 void  AliMpRow::CheckEmpty() const
 {
-// Give a fatal if row is empty.
-// ---
+/// Give a fatal if the row is empty.
 
   if (GetNofRowSegments() == 0) 
     Fatal("CheckEmpty", "Empty row");
@@ -147,30 +167,46 @@ void  AliMpRow::CheckEmpty() const
 //_____________________________________________________________________________
 void AliMpRow::AddRowSegment(AliMpVRowSegment* rowSegment)
 {
-// Adds row segment at the end.
-// ---
+/// Add row segment at the end.
 
+#ifdef WITH_STL
   fSegments.push_back(rowSegment);
+#endif
+
+#ifdef WITH_ROOT
+  fSegments.Add(rowSegment);
+#endif
 }  
   
 //_____________________________________________________________________________
 void AliMpRow::AddRowSegmentInFront(AliMpVRowSegment* rowSegment)
 {
-// Inserts row segment in the first vector position.
-// ---
+/// Insert row segment in the first vector position.
 
+#ifdef WITH_STL
   fSegments.insert(fSegments.begin(), rowSegment);
+#endif
+
+#ifdef WITH_ROOT
+  fSegments.AddFirst(rowSegment);
+#endif
 }  
   
 //_____________________________________________________________________________
 AliMpVRowSegment* AliMpRow::FindRowSegment(Double_t x) const
 {
-// Finds the row segment for the specified x position;
-// returns 0 if no row segment is found.
-// ---
+/// Find the row segment for the specified x position;
+/// return 0 if no row segment is found.
 
   for (Int_t i=0; i<GetNofRowSegments(); i++) {
+
+#ifdef WITH_STL
     AliMpVRowSegment* rs = fSegments[i];
+#endif
+#ifdef WITH_ROOT
+    AliMpVRowSegment* rs = (AliMpVRowSegment*)fSegments.At(i);
+#endif
+
     if (x >= rs->LeftBorderX() && x <= rs->RightBorderX())
       return rs;
   }
@@ -181,9 +217,8 @@ AliMpVRowSegment* AliMpRow::FindRowSegment(Double_t x) const
 //_____________________________________________________________________________
 Double_t AliMpRow::LowBorderY() const
 {
-// Returns the lowest row offset (the Y coordinate of the position of the
-// low border of motif).
-// ---
+/// Return the lowest row offset (the Y coordinate of the position of the
+/// low border of motif).
 
   CheckEmpty();
 
@@ -193,10 +228,9 @@ Double_t AliMpRow::LowBorderY() const
 //_____________________________________________________________________________
 Double_t AliMpRow::UpperBorderY() const
 {
-// Returns the uppermost row offset (the Y coordinate of the position of the
-// upper border of motif).
-// ---
-
+/// Return the uppermost row offset (the Y coordinate of the position of the
+/// upper border of motif).
+\
   CheckEmpty();
 
   return fOffsetY + GetRowSegment(0)->HalfSizeY();
@@ -205,10 +239,9 @@ Double_t AliMpRow::UpperBorderY() const
 //_____________________________________________________________________________
 AliMpVPadIterator* AliMpRow::CreateIterator() const
 {
-// Iterator is not yet implemented.
-// ---
+/// Iterator is not implemented.
 
-  Fatal("CreateIterator", "Iterator is not yet implemented.");
+  Fatal("CreateIterator", "Iterator is not implemented.");
   
   return 0;
 }  
@@ -216,8 +249,7 @@ AliMpVPadIterator* AliMpRow::CreateIterator() const
 //_____________________________________________________________________________
 void AliMpRow::SetMotifPositions()
 {
-// Creates motif positions objects and fills them in the motif map.
-// ---
+/// Create motif positions objects and fills them in the motif map.
 
   CheckEmpty();
 
@@ -254,9 +286,8 @@ void AliMpRow::SetMotifPositions()
 void AliMpRow::SetGlobalIndices(AliMpDirection constPadSizeDirection, 
                                 AliMpRow* rowBefore)
 {
-// Sets the global indices limits to its row segments,
-// motif positions.
-// ---
+/// Set the global indices limits to its row segments, motif positions
+/// and itself.
 
   Int_t ix = AliMpConstants::StartPadIndex();
   Int_t iy = AliMpConstants::StartPadIndex();
@@ -286,22 +317,43 @@ void AliMpRow::SetGlobalIndices(AliMpDirection constPadSizeDirection,
        } 
 
        // Set (ix, iy) to k-th motif position and update ix
-       ix = rowSegment->SetIndicesToMotifPosition(k, AliMpIntPair(ix, iy));               
+       ix = rowSegment->SetIndicesToMotifPosition(k, AliMpIntPair(ix, iy));
     }
-    rowSegment->SetGlobalIndices();    
+    rowSegment->SetGlobalIndices(rowBefore);    
   }
 
-  SetLowIndicesLimit(GetRowSegment(0)->GetLowIndicesLimit());
-  SetHighIndicesLimit(GetRowSegment(GetNofRowSegments()-1)->GetHighIndicesLimit());
+  // The low/high indices limits has to be taken as the highest/lowest from all 
+  // row segments
+  Int_t ixl = 9999;
+  Int_t iyl = 9999;
+  Int_t ixh = AliMpConstants::StartPadIndex();
+  Int_t iyh = AliMpConstants::StartPadIndex();
 
-  return ;
+  for (Int_t i=0; i<GetNofRowSegments(); i++) {
+    
+    AliMpVRowSegment* rowSegment = GetRowSegment(i);
+    
+    if ( rowSegment->GetLowIndicesLimit().GetFirst() < ixl ) 
+       ixl = rowSegment->GetLowIndicesLimit().GetFirst();
+       
+    if ( rowSegment->GetLowIndicesLimit().GetSecond() < iyl ) 
+       iyl = rowSegment->GetLowIndicesLimit().GetSecond();
+
+    if ( rowSegment->GetHighIndicesLimit().GetFirst() > ixh ) 
+       ixh = rowSegment->GetHighIndicesLimit().GetFirst();
+       
+    if ( rowSegment->GetHighIndicesLimit().GetSecond() > iyh ) 
+       iyh = rowSegment->GetHighIndicesLimit().GetSecond();
+  }     
+
+  SetLowIndicesLimit(AliMpIntPair(ixl, iyl));
+  SetHighIndicesLimit(AliMpIntPair(ixh, iyh));
 }
 
 //_____________________________________________________________________________
 TVector2  AliMpRow::Position() const
 {
-// Returns the position of the row centre.
-// ---
+/// Return the position of the row centre.
 
   Double_t x = (GetRowSegment(0)->LeftBorderX() +
                 GetRowSegment(GetNofRowSegments()-1)->RightBorderX())/2.;
@@ -314,8 +366,7 @@ TVector2  AliMpRow::Position() const
 //_____________________________________________________________________________
 TVector2  AliMpRow::Dimensions() const
 {
-// Returns the maximum halflengths of the row in x, y.
-// ---
+/// Return the maximum halflengths of the row in x, y.
 
   Double_t x = (GetRowSegment(GetNofRowSegments()-1)->RightBorderX() -
                 GetRowSegment(0)->LeftBorderX())/2.;
@@ -328,8 +379,7 @@ TVector2  AliMpRow::Dimensions() const
 //_____________________________________________________________________________
 void AliMpRow::SetRowSegmentOffsets(const TVector2& offset)
 {
-// Sets the row segments offsets in X .
-// ---
+/// Set the row segments offsets in X .
 
   CheckEmpty();
   
@@ -353,9 +403,8 @@ void AliMpRow::SetRowSegmentOffsets(const TVector2& offset)
 //_____________________________________________________________________________
 Double_t AliMpRow::SetOffsetY(Double_t offsetY)
 {
-// Sets the row offset (the Y coordinate of the position of the
-// center of motif) and returns the offset of the top border.
-// ---
+/// Set the row offset (the Y coordinate of the position of the
+/// center of motif) and returns the offset of the top border.
 
   CheckEmpty();
 
@@ -368,8 +417,6 @@ Double_t AliMpRow::SetOffsetY(Double_t offsetY)
      Double_t sizeY = GetRowSegment(i)->HalfSizeY();
      
      if (TMath::Abs(sizeY - rowSizeY) >= AliMpConstants::LengthTolerance()) {
-       //cout << GetID() << "th row " << i << "th segment " 
-       //     << sizeY << "  " << rowSizeY  << endl;
        Fatal("SetOffsetY", "Motif with different Y size in one row");
        return 0.;
      }  
@@ -385,19 +432,33 @@ Double_t AliMpRow::SetOffsetY(Double_t offsetY)
 //_____________________________________________________________________________
 Int_t AliMpRow::GetNofRowSegments() const 
 {
-// Returns number of row segments.
+/// Return number of row segments.
 
+#ifdef WITH_STL
   return fSegments.size();
+#endif
+
+#ifdef WITH_ROOT
+  return fSegments.GetSize();
+#endif
 }  
 
 //_____________________________________________________________________________
 AliMpVRowSegment* AliMpRow::GetRowSegment(Int_t i) const 
 {
+/// Return i-th row segment.
+
   if (i<0 || i>=GetNofRowSegments()) {
-    Warning("GetRowSegment", "Index outside range");
+    AliWarningStream() << "Index outside range" << endl;
     return 0;
   }
   
+#ifdef WITH_STL
   return fSegments[i];  
+#endif
+
+#ifdef WITH_ROOT
+  return (AliMpVRowSegment*)fSegments.At(i);  
+#endif
 }