]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/mapping/AliMpRowSegmentLSpecial.cxx
From Cvetan: new macro to load ITS clusters.
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpRowSegmentLSpecial.cxx
index 30e5b661987eea470b4906a93f4abdce8788640c..0b3c8e7f6b255696c400d5faee1b0a0ab43cc09a 100755 (executable)
@@ -1,4 +1,20 @@
+/**************************************************************************
+ * 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: AliMpRowSegmentLSpecial.cxx,v 1.7 2006/05/24 13:58:46 ivana Exp $
 // Category: sector
 //
 // Class AliMpRowSegmentLSpecial
@@ -8,7 +24,8 @@
 // Included in AliRoot: 2003/05/02
 // Authors: David Guez, Ivana Hrivnacova; IPN Orsay
 
-#include <TError.h>
+#include <Riostream.h>
+#include <TMath.h>
 
 #include "AliMpRowSegmentLSpecial.h"
 #include "AliMpRow.h"
 #include "AliMpMotifPosition.h"
 #include "AliMpConstants.h"
 
+#include "AliLog.h"
+
+/// \cond CLASSIMP
 ClassImp(AliMpRowSegmentLSpecial)
+/// \endcond
 
 //______________________________________________________________________________
 AliMpRowSegmentLSpecial::AliMpRowSegmentLSpecial(AliMpRow* row, Double_t offsetX)
   : AliMpVRowSegmentSpecial(row, offsetX)
 {
-// 
+/// Standard constructor
 }
 
 //______________________________________________________________________________
 AliMpRowSegmentLSpecial::AliMpRowSegmentLSpecial() 
   : AliMpVRowSegmentSpecial()
 {
-//
+/// Default constructor
 }
 
 //______________________________________________________________________________
 AliMpRowSegmentLSpecial::~AliMpRowSegmentLSpecial() 
 {
-//  
+/// Destructor  
 }
 
 //
@@ -50,8 +71,7 @@ AliMpRowSegmentLSpecial::~AliMpRowSegmentLSpecial()
 AliMpVPadRowSegment*  
 AliMpRowSegmentLSpecial::FindMostRightPadRowSegment(Int_t motifPositionId) const
 {
-// Find the most right pad row segment with this motifPositionId.
-// ---
+/// Find the most right pad row segment with this motifPositionId.
 
   AliMpVPadRowSegment* found = 0;
 
@@ -78,11 +98,10 @@ AliMpRowSegmentLSpecial::FindMostRightPadRowSegment(Int_t motifPositionId) const
 //______________________________________________________________________________
 TVector2 AliMpRowSegmentLSpecial::MotifCenterSlow(Int_t motifPositionId) const
 {
-// Returns the coordinates of the motif specified with
-// the given position identifier.
-// !! Applicable only for motifs that have their most down pad in
-// this row segment.
-// ---
+/// Return the coordinates of the motif specified with
+/// the given position identifier.                                           \n
+/// !! Applicable only for motifs that have their most down pad in
+/// this row segment.
 
   // Find the first (left, down) pad row segment with this motifPositionId.
   AliMpVPadRowSegment* downPadRowSegment 
@@ -92,13 +111,13 @@ TVector2 AliMpRowSegmentLSpecial::MotifCenterSlow(Int_t motifPositionId) const
   
   // Check if the motifPositionId is present 
   if (!downPadRowSegment || !rightPadRowSegment) {
-    Error("MotifCenter", "Outside row segment region");
+    AliErrorStream() << "Outside row segment region" << endl;
     return 0;
   }
 
   // Check if both pad row segments have the same motif 
   if (downPadRowSegment->GetMotif() != rightPadRowSegment->GetMotif()) {
-    Fatal("MotifCenter", "Outside row segment region");
+    AliFatal("Outside row segment region");
     return 0;
   }
 
@@ -123,9 +142,8 @@ TVector2 AliMpRowSegmentLSpecial::MotifCenterSlow(Int_t motifPositionId) const
 //______________________________________________________________________________
 void AliMpRowSegmentLSpecial::UpdatePadsOffset()
 {
-// Sets low indices limit to the pad offset calculated
-// from the neighbour normal segment.
-// ---
+/// Set low indices limit to the pad offset calculated
+/// from the neighbour normal segment.
 
   // Get the neighbour row segment
   // (the first normal segment)
@@ -150,9 +168,8 @@ void AliMpRowSegmentLSpecial::UpdatePadsOffset()
 //______________________________________________________________________________
 Double_t  AliMpRowSegmentLSpecial::LeftBorderX() const
 {
-// Returns the x coordinate of the left row segment border
-// in global coordinate system.
-// ---
+/// Return the x coordinate of the left row segment border
+/// in the global coordinate system.
 
   Double_t leftBorder = DBL_MAX;
   for (Int_t i=0; i<GetNofPadRows(); i++) {
@@ -169,9 +186,8 @@ Double_t  AliMpRowSegmentLSpecial::LeftBorderX() const
 //______________________________________________________________________________
 Double_t  AliMpRowSegmentLSpecial::RightBorderX() const
 {
-// Returns the x coordinate of the right row segment border
-// in global coordinate system.
-// ---
+/// Returns the x coordinate of the right row segment border
+/// in the global coordinate system.
 
   Double_t sameBorder = GetOffsetX();
 
@@ -184,7 +200,7 @@ Double_t  AliMpRowSegmentLSpecial::RightBorderX() const
   }  
 
   if (TMath::Abs(GetOffsetX() - rightBorder) > 1.e-04)  {
-    Error("RightBorderX", "WrongBorder");
+    AliErrorStream() << "WrongBorder" << endl;
     return sameBorder;
   }  
   
@@ -194,10 +210,9 @@ Double_t  AliMpRowSegmentLSpecial::RightBorderX() const
 //______________________________________________________________________________
 TVector2 AliMpRowSegmentLSpecial::Position() const
 {
-// Returns the position of the row segment centre.
-// The centre is defined as the centre of the rectangular
-// row segment envelope.
-// ---
+/// Return the position of the row segment centre.
+/// The centre is defined as the centre of the rectangular
+/// row segment envelope.
 
   Double_t x = GetOffsetX() - Dimensions().X();                    
   Double_t y = GetRow()->Position().Y();  
@@ -205,12 +220,12 @@ TVector2 AliMpRowSegmentLSpecial::Position() const
   return TVector2(x, y);   
 }
 
+#include <Riostream.h>
 //______________________________________________________________________________
 Int_t AliMpRowSegmentLSpecial::SetIndicesToMotifPosition(Int_t i, 
                                          const AliMpIntPair& indices)
 {
-// Sets global indices to i-th motif position and returns next index in x.
-// ---
+/// Set global indices to i-th motif position and returns next index in x.
 
   // Get motif position
   AliMpMotifPosition* motifPosition
@@ -241,9 +256,10 @@ Int_t AliMpRowSegmentLSpecial::SetIndicesToMotifPosition(Int_t i,
   AliMpMotifType* motifType = motifPosition->GetMotif()->GetMotifType();  
   AliMpIntPair high 
     = motifPosition->GetLowIndicesLimit()
-      + AliMpIntPair(motifType->GetNofPadsX()-1, motifType->GetNofPadsY()-1);            
+      + AliMpIntPair(motifType->GetNofPadsX()-1, motifType->GetNofPadsY()-1);  
+                
   motifPosition->SetHighIndicesLimit(high);
-  
+
   // Increment index only if last motif position is processed 
   if (i != GetNofMotifs()-1) 
     return indices.GetFirst();
@@ -252,6 +268,44 @@ Int_t AliMpRowSegmentLSpecial::SetIndicesToMotifPosition(Int_t i,
     return indices.GetFirst() + MaxNofPadsInRow();  
     //return MaxNofPadsInRow();  
 }
+//______________________________________________________________________________
+void AliMpRowSegmentLSpecial::SetGlobalIndices(AliMpRow* rowBefore)
+{
+/// Set indices limits
+/// The limits are defined as the limits of the smallest rectangle which
+/// includes all pads of this special row segment.
+
+  // Low ix
+  Int_t ixl = GetLowIndicesLimit().GetFirst() + AliMpConstants::StartPadIndex();
+      // the pads offset was already defined by Reader
+
+  // High ix
+  Int_t ixh = ixl + MaxNofPadsInRow() - 1;
+
+  // Low iy
+  Int_t iyl = AliMpConstants::StartPadIndex();
+  if (rowBefore) {
+    //if (constPadSizeDirection == kY) {
+      iyl = rowBefore->GetHighIndicesLimit().GetSecond()+1;
+    //} 
+    /*
+    else {
+      AliMpVRowSegment* seg = rowBefore->FindRowSegment(ixl);  
+      AliMpMotifPosition* motPos =  rowBefore->FindMotifPosition(seg, ixl);
+      if (!motPos) 
+        Fatal("SetGlobalIndices", "Motif position in rowBefore not found.");
+      iyl = motPos->GetHighIndicesLimit().GetSecond()+1;
+    }
+    */
+  }  
+
+  // High iy
+  Int_t iyh = iyl + GetNofPadRows() - 1;
+  
+  SetLowIndicesLimit(AliMpIntPair(ixl, iyl));
+  SetHighIndicesLimit(AliMpIntPair(ixh, iyh));
+}  
+