/* $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);
}
}
//_____________________________________________________________________________
-AliMUONSt345SlatSegmentationV2::AliMUONSt345SlatSegmentationV2(Int_t detElemId, AliMpPlaneType bendingOrNonBending)
+AliMUONSt345SlatSegmentationV2::AliMUONSt345SlatSegmentationV2(
+ AliMpVSegmentation* segmentation,
+ Int_t detElemId, AliMpPlaneType bendingOrNonBending)
: AliMUONVGeometryDESegmentation(),
fDetElemId(detElemId),
fPlaneType(bendingOrNonBending),
//
// Normal ctor.
//
-
- ReadMappingData();
+
+ 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" ),
{
AliFatal("pcb is null!");
}
- return pcb->PadSizeX() * fgkLengthUnit;
+ return pcb->PadSizeX();
}
//_____________________________________________________________________________
{
AliFatal("pcb is null!");
}
- return pcb->PadSizeY() * fgkLengthUnit;
+ return pcb->PadSizeY();
}
//_____________________________________________________________________________
// 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;
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*)
AliMpPad pad =
fSlatSegmentation->PadByIndices(AliMpIntPair(ix-fgIntOffset,iy-fgIntOffset),
kTRUE);
- x = pad.Position().X() * fgkLengthUnit;
- y = pad.Position().Y() * fgkLengthUnit;
+ x = pad.Position().X();
+ y = pad.Position().Y();
}
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), kTRUE);
+ fSlatSegmentation->PadByPosition(TVector2(x,y), kTRUE);
+// fSlatSegmentation->PadByPosition(TVector2(x+slatx,y+slaty), kTRUE);
if ( pad != AliMpPad::Invalid() )
{
// 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;
// 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);
+// AliMpArea area(pad.Position()+fSlat->Dimensions(),pad.Dimensions()*2.1);
+ AliMpArea area(pad.Position(),pad.Dimensions()*2.1);
AliMpVPadIterator* it = fSlatSegmentation->CreateIterator(area);
it->First();
<< " 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)
{
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);
- }
-}
-