namespace
{
- Double_t fgkLengthUnit = 0.1; // This class expects centimeters, while
- // AliMpSlat works with milimeters.
Int_t fgIntOffset = 1;
Float_t FMAX(1E9);
}
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.
+ //
+ // Normal ctor.
+ //
ReadMappingData();
AliMUONSt345SlatSegmentationV2::Dpx(int ipcb) const
{
AliMpPCB* pcb = fSlat->GetPCB(ipcb);
- if (!pcb) AliFatal("pcb is null!");
- return pcb->PadSizeX() * fgkLengthUnit;
+ if (!pcb)
+ {
+ AliFatal("pcb is null!");
+ }
+ return pcb->PadSizeX();
}
//_____________________________________________________________________________
AliMUONSt345SlatSegmentationV2::Dpy(int ipcb) const
{
AliMpPCB* pcb = fSlat->GetPCB(ipcb);
- if (!pcb) AliFatal("pcb is null!");
- return pcb->PadSizeY() * fgkLengthUnit;
+ if (!pcb)
+ {
+ AliFatal("pcb is null!");
+ }
+ 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*)
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();
}
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() )
{
// 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();
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)
+ fSlatSegmentation = dynamic_cast<AliMpSlatSegmentation*>
+ (AliMUONSegmentationManager::Segmentation(fDetElemId,fPlaneType));
+
+ if (!fSlatSegmentation)
{
AliFatal("Wrong segmentation type encountered");
}
//_____________________________________________________________________________
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);
}
//_____________________________________________________________________________