]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONSt345SlatSegmentationV2.cxx
Move to new mapping
[u/mrichter/AliRoot.git] / MUON / AliMUONSt345SlatSegmentationV2.cxx
index b2c053f5158791e63bcfb3188c7aa6be091b9f9d..f5712ffc11dfed158e4c1d6d2fa01bde058382ce 100644 (file)
@@ -16,8 +16,8 @@
 /* $Id$ */
 
 #include "AliMUONSt345SlatSegmentationV2.h"
+#include "AliMUONConstants.h"
 
-#include "AliLog.h"
 #include "AliMpArea.h"
 #include "AliMpSlat.h"
 #include "AliMpSlatSegmentation.h"
 // Dpx, Dpy, Sector offer now to the clustering. That indeed should be
 // handled directly at the level of AliMpVSegmentation...
 #include "AliMpVPadIterator.h"
-#include "AliMUONSegmentationManager.h"
-#include "AliMUONConstants.h"
 
-#include "Riostream.h"
+#include "AliLog.h"
 
+#include "Riostream.h"
 #include "TClass.h"
 
 ClassImp(AliMUONSt345SlatSegmentationV2)
 
 namespace
 {
-  Double_t fgkLengthUnit = 0.1; // This class expects centimeters, while
-                                                                                                                               // AliMpSlat works with milimeters.
   Int_t fgIntOffset = 1;
   Float_t FMAX(1E9);
 }
@@ -64,7 +61,9 @@ fYhit(FMAX)
 }
 
 //_____________________________________________________________________________
-AliMUONSt345SlatSegmentationV2::AliMUONSt345SlatSegmentationV2(Int_t detElemId, AliMpPlaneType bendingOrNonBending)
+AliMUONSt345SlatSegmentationV2::AliMUONSt345SlatSegmentationV2(
+                                   AliMpVSegmentation* segmentation,
+                                   Int_t detElemId, AliMpPlaneType bendingOrNonBending)
 : AliMUONVGeometryDESegmentation(),
 fDetElemId(detElemId),
 fPlaneType(bendingOrNonBending),
@@ -74,12 +73,15 @@ fPadIterator(0),
 fXhit(FMAX),
 fYhit(FMAX)
 { 
-  // slatType is the description of the PCBs of that slat,
-  // e.g. 122200N, 112200SR2, 112233NR3, etc...
-  // The actual filename used is dealt with by the AliMpSt345Reader class.
-  // Same thing for the path if that file, by the way.
-       
-       ReadMappingData();
+  //
+  // Normal ctor.
+  //
+
+  fSlatSegmentation = dynamic_cast<AliMpSlatSegmentation*>(segmentation);
+  if (fSlatSegmentation)
+    fSlat = fSlatSegmentation->Slat();
+  else 
+    AliFatal("Wrong mapping segmentation type");
                
   AliDebug(1,Form("this=%p detElemId=%3d %s fSlatSegmentation=%p",this,detElemId,
                                                                        ( (bendingOrNonBending==kBendingPlane)?"Bending":"NonBending" ),
@@ -138,7 +140,10 @@ Float_t
 AliMUONSt345SlatSegmentationV2::Dpx(int ipcb) const
 {
        AliMpPCB* pcb = fSlat->GetPCB(ipcb);
-       if (!pcb) AliFatal("pcb is null!");
+       if (!pcb) 
+  {
+    AliFatal("pcb is null!");
+  }
        return pcb->PadSizeX();
 }
 
@@ -147,7 +152,10 @@ Float_t
 AliMUONSt345SlatSegmentationV2::Dpy(int ipcb) const
 {
        AliMpPCB* pcb = fSlat->GetPCB(ipcb);
-       if (!pcb) AliFatal("pcb is null!");
+       if (!pcb) 
+  {
+    AliFatal("pcb is null!");
+  }
        return pcb->PadSizeY();
 }
 
@@ -186,9 +194,11 @@ AliMUONSt345SlatSegmentationV2::FirstPad(Float_t xhit, Float_t yhit,
   // Note that we convert the area position to a reference frame
   // located in the lower-left corner of the slat, instead of its
   // center.
-  AliMpArea area(TVector2((x01+x02)/2.0/fgkLengthUnit+fSlat->DX(),
-                                                                                                       (y01+y02)/2.0/fgkLengthUnit+fSlat->DY()),
-                                                                TVector2(xext/2.0/fgkLengthUnit,yext/2.0/fgkLengthUnit));
+//  AliMpArea area(TVector2((x01+x02)/2.0+fSlat->DX(),
+//                                                                                                     (y01+y02)/2.0+fSlat->DY()),
+//                                                              TVector2(xext/2.0,yext/2.0));
+  AliMpArea area(TVector2((x01+x02)/2.0,(y01+y02)/2.0),
+                                                                TVector2(xext/2.0,yext/2.0));
        
   delete fPadIterator;
        
@@ -224,10 +234,21 @@ AliMUONSt345SlatSegmentationV2::GetAnod(Float_t xhit) const
 AliMUONGeometryDirection
 AliMUONSt345SlatSegmentationV2::GetDirection()
 {
-  AliFatal("Not Implemented");
+  //AliWarning("Not Implemented");
   return kDirUndefined;
 }
 
+//______________________________________________________________________________
+const AliMpVSegmentation*  
+AliMUONSt345SlatSegmentationV2::GetMpSegmentation() const
+{
+// Returns the mapping segmentation
+// (provides access to electronics info)
+
+  return fSlatSegmentation;
+}  
+
+
 //_____________________________________________________________________________
 void 
 AliMUONSt345SlatSegmentationV2::GetNParallelAndOffset(Int_t,Int_t,Int_t*,Int_t*)
@@ -249,9 +270,11 @@ void
 AliMUONSt345SlatSegmentationV2::GetPadC(Int_t ix, Int_t iy, 
                                                                                                                                                                Float_t& x, Float_t& y)
 {
-  AliMpPad pad = fSlatSegmentation->PadByIndices(AliMpIntPair(ix-fgIntOffset,iy-fgIntOffset),true);
-  x = pad.Position().X() * fgkLengthUnit;
-  y = pad.Position().Y() * fgkLengthUnit;
+  AliMpPad pad = 
+  fSlatSegmentation->PadByIndices(AliMpIntPair(ix-fgIntOffset,iy-fgIntOffset),
+                                  kTRUE);
+  x = pad.Position().X();
+  y = pad.Position().Y();
 }
 
 
@@ -268,11 +291,11 @@ void
 AliMUONSt345SlatSegmentationV2::GetPadI(Float_t x, Float_t y,
                                                                                                                                                                Int_t& ix, Int_t& iy)
 {
-  Double_t slatx = fSlat->DX();
-  Double_t slaty = fSlat->DY();
+//  Double_t slatx = fSlat->DX();
+//  Double_t slaty = fSlat->DY();
   AliMpPad pad = 
-    fSlatSegmentation->PadByPosition(TVector2(x/fgkLengthUnit+slatx, 
-                                                                                                                                       y/fgkLengthUnit+slaty), true);
+    fSlatSegmentation->PadByPosition(TVector2(x,y), kTRUE);
+//  fSlatSegmentation->PadByPosition(TVector2(x+slatx,y+slaty), kTRUE);
        
   if ( pad != AliMpPad::Invalid() )
        {
@@ -329,11 +352,11 @@ AliMUONSt345SlatSegmentationV2::IntegrationLimits(Float_t& x1, Float_t& x2,
        //   y1 = fYhit - fY - Dpy(fSector)/2.;
        //   y2 = y1 + Dpy(fSector);    
        
-  Float_t x = fCurrentPad.Position().X() * fgkLengthUnit;
-  Float_t y = fCurrentPad.Position().Y() * fgkLengthUnit;
+  Float_t x = fCurrentPad.Position().X();
+  Float_t y = fCurrentPad.Position().Y();
        
-  Float_t padsizex = fCurrentPad.Dimensions().X() * 2.0 * fgkLengthUnit;
-  Float_t padsizey = fCurrentPad.Dimensions().Y() * 2.0 * fgkLengthUnit;
+  Float_t padsizex = fCurrentPad.Dimensions().X() * 2.0;
+  Float_t padsizey = fCurrentPad.Dimensions().Y() * 2.0;
        
   x1 = fXhit - x - padsizex/2.0;
   x2 = x1 + padsizex;
@@ -396,8 +419,9 @@ AliMUONSt345SlatSegmentationV2::Neighbours(Int_t iX, Int_t iY, Int_t* Nlist,
        fSlatSegmentation->PadByIndices(AliMpIntPair(iX-fgIntOffset,iY-fgIntOffset),kTRUE);
        
   // Define the region to look into : a region slightly bigger
-  // than the pad itself (10% bigger), in order to catch first neighbours.
-  AliMpArea area(pad.Position()+fSlat->Dimensions(),pad.Dimensions()*2.1); 
+  // than the pad itself (5% bigger), in order to catch first neighbours.
+
+  AliMpArea area(pad.Position(),pad.Dimensions()*1.05); 
                
   AliMpVPadIterator* it = fSlatSegmentation->CreateIterator(area);
   it->First();
@@ -451,28 +475,16 @@ void
 AliMUONSt345SlatSegmentationV2::Print(Option_t*) const
 {
   cout << "DetElemId=" << fDetElemId << " PlaneType=" 
-  << fPlaneType << " fSlat=" << fSlat 
+  << fPlaneType << " Npx,Npy=" << Npx() << "," << Npy() << " fSlat=" << fSlat 
   << " fSlatSegmentation=" << fSlatSegmentation
   << " fSlatSegmentation->Slat()=" << fSlatSegmentation->Slat() << endl;
 }
 
-//_____________________________________________________________________________
-void
-AliMUONSt345SlatSegmentationV2::ReadMappingData()
-{
-       fSlatSegmentation = dynamic_cast<AliMpSlatSegmentation*>(AliMUONSegmentationManager::Segmentation(fDetElemId,fPlaneType));
-       if (!fSlatSegmentation)
-       {
-               AliFatal("Wrong segmentation type encountered");
-       }
-  fSlat = fSlatSegmentation->Slat();
-}
-
 //_____________________________________________________________________________
 Int_t
-AliMUONSt345SlatSegmentationV2::Sector(Int_t ix, Int_t iy)
+AliMUONSt345SlatSegmentationV2::Sector(Int_t ix, Int_t)
 {
-  return fSlat->FindPCBIndex(ix,iy);
+  return fSlat->FindPCBIndex(ix - fgIntOffset);
 }
 
 //_____________________________________________________________________________
@@ -552,19 +564,3 @@ AliMUONSt345SlatSegmentationV2::SigGenInit(Float_t,Float_t,Float_t)
 {
   AliFatal("Not Implemented");
 }
-
-//_____________________________________________________________________________
-void
-AliMUONSt345SlatSegmentationV2::Streamer(TBuffer &R__b)
-{
-  if (R__b.IsReading()) 
-       {
-    AliMUONSt345SlatSegmentationV2::Class()->ReadBuffer(R__b, this);
-    ReadMappingData();
-  } 
-  else 
-       {
-    AliMUONSt345SlatSegmentationV2::Class()->WriteBuffer(R__b, this);
-  }
-}
-