// Deletes the elements
// ---
- cout << "######### clearing map " << endl;
-
fNofItems = 0;
fFirstArray.Delete();
fSecondArray.Reset();
-
- cout << "######### clearing map done " << endl;
}
//______________________________________________________________________________
//
// Author:Ivana Hrivnacova, IPN Orsay
-#include "AliSegmentation.h"
#include "AliLog.h"
#include "AliMUONGeometrySegmentation.h"
+#include "AliMUONVGeometryDESegmentation.h"
#include "AliMUONGeometryModule.h"
#include "AliMUONGeometryDetElement.h"
#include "AliMUONGeometryStore.h"
return false;
}
- AliSegmentation* segmentation
- = (AliSegmentation*) fDESegmentations->Get(detElemId);
+ AliMUONVGeometryDESegmentation* segmentation
+ = (AliMUONVGeometryDESegmentation*) fDESegmentations->Get(detElemId);
if (!segmentation) {
AliError(Form("Segmentation for detection element %d not defined",
detElemId));
//______________________________________________________________________________
void AliMUONGeometrySegmentation::Add(Int_t detElemId,
- AliSegmentation* segmentation)
+ AliMUONVGeometryDESegmentation* segmentation)
{
// Add detection element segmentation
// ---
// ---
for (Int_t i=0; i<fDESegmentations->GetNofEntries(); i++) {
- AliSegmentation* segmentation
- = (AliSegmentation*)fDESegmentations->GetEntry(i);
+ AliMUONVGeometryDESegmentation* segmentation
+ = (AliMUONVGeometryDESegmentation*)fDESegmentations->GetEntry(i);
segmentation->SetPadSize(p1, p2);
}
}
// ---
for (Int_t i=0; i<fDESegmentations->GetNofEntries(); i++) {
- AliSegmentation* segmentation
- = (AliSegmentation*)fDESegmentations->GetEntry(i);
+ AliMUONVGeometryDESegmentation* segmentation
+ = (AliMUONVGeometryDESegmentation*)fDESegmentations->GetEntry(i);
segmentation->SetDAnod(d);
}
}
}
//______________________________________________________________________________
-void AliMUONGeometrySegmentation::GetPadI(Int_t detElemId,
+Bool_t AliMUONGeometrySegmentation::GetPadI(Int_t detElemId,
Float_t xg, Float_t yg, Float_t zg,
Int_t& ix, Int_t& iy)
{
// Returns pad coordinates (ix,iy) for given real coordinates (x,y)
// ---
- if (!Notify(detElemId)) return;
+ if (!Notify(detElemId)) return false;
+
+ if (!fCurrentSegmentation->HasPad(xg, yg, zg)) return false;
Float_t xl, yl, zl;
fCurrentDetElement->Global2Local(xg, yg, zg, xl, yl, zl);
fCurrentSegmentation->GetPadI(xl, yl, zl, ix, iy);
+ return true;
}
//______________________________________________________________________________
-void AliMUONGeometrySegmentation::GetPadC(Int_t detElemId,
+Bool_t AliMUONGeometrySegmentation::GetPadC(Int_t detElemId,
Int_t ix, Int_t iy,
Float_t& xg, Float_t& yg, Float_t& zg)
{
// Transform from pad to real coordinates
// ---
- if (!Notify(detElemId)) return;
+ if (!Notify(detElemId)) return false;
+
+ if (!fCurrentSegmentation->HasPad(ix, iy)) return false;
Float_t xl, yl, zl;
fCurrentSegmentation->GetPadC(ix, iy, xl , yl, zl);
fGeometryModule->Local2Global(detElemId, xl, yl, zl, xg, yg, zg);
+ return true;
}
AliMUONSt12QuadrantSegmentation::AliMUONSt12QuadrantSegmentation(
AliMpStationType stationType,
AliMpPlaneType planeType)
-: AliSegmentation(),
+: AliMUONVGeometryDESegmentation(),
fSector(0),
fSectorSegmentation(0),
fSectorIterator(0),
//______________________________________________________________________________
AliMUONSt12QuadrantSegmentation::AliMUONSt12QuadrantSegmentation()
-: AliSegmentation(),
+: AliMUONVGeometryDESegmentation(),
fSector(0),
fSectorSegmentation(0),
fSectorIterator(0),
//______________________________________________________________________________
AliMUONSt12QuadrantSegmentation::AliMUONSt12QuadrantSegmentation(const AliMUONSt12QuadrantSegmentation& rhs)
- : AliSegmentation(rhs)
+ : AliMUONVGeometryDESegmentation(rhs)
{
// Copy constructor
AliFatal("Copy constructor is not implemented.");
fWireD = d;
}
+//______________________________________________________________________________
+Bool_t AliMUONSt12QuadrantSegmentation::HasPad(Float_t x, Float_t y, Float_t /*z*/)
+{
+// Returns true if a pad exists in the given position
+
+ AliMpPad pad = fSectorSegmentation
+ ->PadByPosition(TVector2(x/fgkLengthUnit, y/fgkLengthUnit), false);
+
+ return pad.IsValid();
+}
+
+
+//______________________________________________________________________________
+Bool_t AliMUONSt12QuadrantSegmentation::HasPad(Int_t ix, Int_t iy)
+{
+// Returns true if a pad with given indices exists
+
+ AliMpPad pad = fSectorSegmentation->PadByIndices(AliMpIntPair(ix,iy), false);
+
+ return pad.IsValid();
+}
+
+
//______________________________________________________________________________
Float_t AliMUONSt12QuadrantSegmentation::GetAnod(Float_t xhit) const
{
// ---
AliMpPad pad = fSectorSegmentation
- ->PadByPosition(TVector2(x/fgkLengthUnit, y/fgkLengthUnit), false);
+ ->PadByPosition(TVector2(x/fgkLengthUnit, y/fgkLengthUnit), true);
ix = pad.GetIndices().GetFirst();
iy = pad.GetIndices().GetSecond();
// If there is no pad, x = 0., y = 0. are returned.
// ---
- AliMpPad pad = fSectorSegmentation->PadByIndices(AliMpIntPair(ix,iy));
+ AliMpPad pad = fSectorSegmentation->PadByIndices(AliMpIntPair(ix,iy), true);
x = pad.Position().X() * fgkLengthUnit;
y = pad.Position().Y() * fgkLengthUnit;
Int_t AliMUONSt12QuadrantSegmentation::Npx() const
{
// Maximum number of Pads in x
+// hard coded for the time being
// ---
//Fatal("Npx", "Not yet implemented.");
- return 142; //hard coded for the time being
+ switch (fSector->GetDirection()) {
+ case kX:
+ return 142;
+ case kY:
+ return 108;
+ default:
+ AliError("Unknown sector direction");
+ return 0;
+ }
}
//______________________________________________________________________________
Int_t AliMUONSt12QuadrantSegmentation::Npy() const
{
// Maximum number of Pads in y
+// hard coded for the time being
// ---
//Fatal("Npy", "Not yet implemented.");
- return 213; //hard coded for the time being
+ switch (fSector->GetDirection()) {
+ case kX:
+ return 160;
+ case kY:
+ return 213;
+ default:
+ AliError("Unknown sector direction");
+ return 0;
+ }
}
//______________________________________________________________________________
#include "AliMpStationType.h"
#include "AliMpPlaneType.h"
-#include "AliSegmentation.h"
+#include "AliMUONVGeometryDESegmentation.h"
class TObjArray;
class AliMUONChamber;
-class AliMUONSt12QuadrantSegmentation : public AliSegmentation
+class AliMUONSt12QuadrantSegmentation : public AliMUONVGeometryDESegmentation
{
public:
AliMUONSt12QuadrantSegmentation(AliMpStationType stationType,
- AliMpPlaneType planeType);
+ AliMpPlaneType planeType);
AliMUONSt12QuadrantSegmentation();
virtual ~AliMUONSt12QuadrantSegmentation();
virtual void SetDAnod(Float_t D);
// Anode Pitch
+ // Check if pad exists
+ //
+ virtual Bool_t HasPad(Float_t x, Float_t y, Float_t z);
+ // Returns true if a pad exists in the given position
+ virtual Bool_t HasPad(Int_t ix, Int_t iy);
+ // Returns true if a pad with given indices exists
+
// Transform from pad (wire) to real coordinates and vice versa
//
virtual Float_t GetAnod(Float_t xhit) const;
AliMUONSt345SlatSegmentation::AliMUONSt345SlatSegmentation()
- : AliSegmentation(),
+ : AliMUONVGeometryDESegmentation(),
fId(0),
fDpx(0),
fDpy(0),
(*fDpxD)[0]=(*fDpxD)[1]=(*fDpxD)[2]=(*fDpxD)[3]=0;
}
//----------------------------------------------------------------------
-AliMUONSt345SlatSegmentation::AliMUONSt345SlatSegmentation(const AliMUONSt345SlatSegmentation& rhs) : AliSegmentation(rhs)
+AliMUONSt345SlatSegmentation::AliMUONSt345SlatSegmentation(const AliMUONSt345SlatSegmentation& rhs) : AliMUONVGeometryDESegmentation(rhs)
{
AliFatal("Not implemented.");
}
// and the differents PCB densities.
//*********************************************************
-#include "AliSegmentation.h"
+#include "AliMUONVGeometryDESegmentation.h"
class TArrayF;
class TArrayI;
-class AliMUONSt345SlatSegmentation : public AliSegmentation
+class AliMUONSt345SlatSegmentation : public AliMUONVGeometryDESegmentation
{
public:
AliMUONSt345SlatSegmentation();
virtual void FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy); // Initialisation for pad iteration
virtual void FirstPad(Float_t xhit, Float_t yhit, Float_t zhit, Float_t dx, Float_t dy);
+ virtual Bool_t HasPad(Float_t /*x*/, Float_t /*y*/, Float_t /*z*/) { return true; }
+ virtual Bool_t HasPad(Int_t /*ix*/, Int_t /*iy*/) { return true; }
+
virtual Float_t GetAnod(Float_t xhit) const; // Anod wire coordinate closest to xhit
virtual void GetPadI(Float_t x ,Float_t y ,Int_t &ix,Int_t &iy); // Transform from pad to real coordinates
virtual void GetPadI(Float_t x, Float_t y , Float_t z, Int_t &ix, Int_t &iy);
return path;
}
-/*
//______________________________________________________________________________
void AliMUONVGeometryBuilder::MapSV(const TString& path0,
const TString& volName, Int_t detElemId) const
TString volName(path0(npos1, npos2-npos1));
// Check if it is sensitive volume
- Int_t moduleId = AliMUONVGeometryDEIndexing::Instance()
- ->GetModuleId(detElemId);
+ Int_t moduleId = AliMUONVGeometryDEIndexing::GetModuleId(detElemId);
AliMUONGeometryModule* geometry = GetGeometry(moduleId);
if (geometry->IsSensitiveVolume(volName)) {
//cout << ".. adding to the map "
MapSV(path, newName, detElemId);
}
}
-*/
-
-//______________________________________________________________________________
-void AliMUONVGeometryBuilder::MapSV(const TString& /*path0*/,
- const TString& /*volName*/,
- Int_t /*detElemId*/) const
-{
-// Update the path with all daughters volumes recursively
-// and map it to the detection element Id if it is a sensitive volume
-// ---
-
- AliWarning("Not yet available");
-}
-
//______________________________________________________________________________
void AliMUONVGeometryBuilder::FillData(Int_t moduleId, Int_t nofDetElements,
AliMUONVGeometryBuilder.cxx \
AliMUONGeometryBuilder.cxx \
AliMUONGeometryStore.cxx \
+ AliMUONVGeometryDESegmentation.cxx \
AliMUONGeometrySegmentation.cxx
HDRS = $(SRCS:.cxx=.h)