#include "AliMUONFactoryV2.h"
#include "AliRun.h"
-#include "AliSegmentation.h"
#include "AliLog.h"
#include "AliMUON.h"
#include "AliMUONGeometryModule.h"
#include "AliMUONGeometryStore.h"
#include "AliMUONGeometrySegmentation.h"
+#include "AliMUONVGeometryDEIndexing.h"
#include "AliMUONSt12QuadrantSegmentation.h"
#include "AliMUONSt345SlatSegmentation.h"
#include "AliMUONTriggerSegmentation.h"
ClassImp(AliMUONFactoryV2)
//__________________________________________________________________________
- AliMUONFactoryV2::AliMUONFactoryV2()
- : AliMUONFactory(),
+ AliMUONFactoryV2::AliMUONFactoryV2(const char* name)
+ : TNamed(name, ""),
fMUON(0),
- fResponse0(0)
+ fResponse0(0),
+ fDESegmentations(0)
{
// FactoryV2 inherite from Factory for switching in AliMUONv1::Init()
// to be changed when old segmentation will be removed.
+
+ fDESegmentations = new TObjArray();
+ fDESegmentations->SetOwner(kTRUE);
+}
+
+//__________________________________________________________________________
+ AliMUONFactoryV2::AliMUONFactoryV2()
+ : TNamed(),
+ fMUON(0),
+ fResponse0(0),
+ fDESegmentations(0)
+{
+// Default constructor
}
//__________________________________________________________________________
AliMUONFactoryV2::AliMUONFactoryV2(const AliMUONFactoryV2& rhs)
- : AliMUONFactory(rhs)
+ : TNamed(rhs)
{
// Protected copy constructor
AliMUONFactoryV2::~AliMUONFactoryV2()
{
- //
+// Destructor
+
+ delete fDESegmentations;
}
//__________________________________________________________________________
return *this;
}
+//__________________________________________________________________________
+Bool_t AliMUONFactoryV2::IsGeometryDefined(Int_t ichamber)
+{
+// Return true, if det elements for the chamber with the given ichamber Id
+// are defined in geometry (the geometry builder for this chamber was activated)
+
+ if ( ! fMUON ||
+ ! fMUON->Chamber(ichamber).GetGeometry() ||
+ ! fMUON->Chamber(ichamber).GetGeometry()->GetDEIndexing() ||
+ ! fMUON->Chamber(ichamber).GetGeometry()->GetDEIndexing()->GetNofDetElements() )
+
+ return kFALSE;
+
+ return kTRUE;
+}
+
//__________________________________________________________________________
void AliMUONFactoryV2::BuildCommon()
{
= new AliMUONSt12QuadrantSegmentation(kStation1, kBendingPlane);
AliMUONSt12QuadrantSegmentation* nonbendSt1
= new AliMUONSt12QuadrantSegmentation(kStation1, kNonBendingPlane);
+
+ // Add in the array (for safe deleting)
+ fDESegmentations->Add(bendSt1);
+ fDESegmentations->Add(nonbendSt1);
AliMUONGeometrySegmentation* segmentation[2];
AliMUONSt12QuadrantSegmentation* nonbendSt2
= new AliMUONSt12QuadrantSegmentation(kStation2, kNonBendingPlane);
+ // Add in the array (for safe deleting)
+ fDESegmentations->Add(bendSt2);
+ fDESegmentations->Add(nonbendSt2);
+
AliMUONGeometrySegmentation* segmentation[2];
for (Int_t chamber = 2; chamber < 4; chamber++) {
Int_t ndiv[4] ={ 4, 4, 2, 1}; // densities zones
for(Int_t i=0; i<4; i++) {
slatsegB[i] = new AliMUONSt345SlatSegmentation(1);
+ fDESegmentations->Add(slatsegB[i]);
slatsegB[i]->SetPadSize(10.,0.5);
slatsegB[i]->SetPadDivision(ndiv);
slatsegB[i]->SetId(1); // Id elt ????
slatsegB[i]->SetDAnod(AliMUONConstants::Pitch());
slatsegNB[i] = new AliMUONSt345SlatSegmentation(0);
- slatsegNB[i]->SetPadSize(0.713,10.); // Nbending
+ fDESegmentations->Add(slatsegNB[i]);
+ slatsegNB[i]->SetPadSize(1./1.4,10.); // Nbending
slatsegNB[i]->SetPadDivision(ndiv);
slatsegNB[i]->SetId(1);
slatsegNB[i]->SetDAnod(AliMUONConstants::Pitch());
Int_t ndiv[4] ={ 4, 4, 2, 1}; // densities zones
for(Int_t i = 0; i < 7; i++) {
slatsegB[i] = new AliMUONSt345SlatSegmentation(1);
+ fDESegmentations->Add(slatsegB[i]);
slatsegB[i]->SetPadSize(10.,0.5);
slatsegB[i]->SetPadDivision(ndiv);
slatsegB[i]->SetId(1);
slatsegB[i]->SetDAnod(AliMUONConstants::Pitch());
slatsegNB[i] = new AliMUONSt345SlatSegmentation(0);
- slatsegNB[i]->SetPadSize(0.713,10.);
+ fDESegmentations->Add(slatsegNB[i]);
+ slatsegNB[i]->SetPadSize(1./1.4,10.);
slatsegNB[i]->SetPadDivision(ndiv);
slatsegNB[i]->SetId(1);
slatsegNB[i]->SetDAnod(AliMUONConstants::Pitch());
slatsegB[3]->SetPcbBoards(n7);
slatsegB[3]->Init(0); // 0 detection element id
slatsegNB[3]->SetPcbBoards(n7);
- slatsegNB[4]->Init(0); // 0 detection element id
+ slatsegNB[3]->Init(0); // 0 detection element id
// Type 223300 for 704, 709, 717, 722 in Ch7 (similar for Ch8)
// for the futur official numbering
Int_t ndiv[4] ={ 4, 4, 2, 1}; // densities zones
for(Int_t i = 0; i < 6; i++) {
slatsegB[i] = new AliMUONSt345SlatSegmentation(1);
+ fDESegmentations->Add(slatsegB[i]);
slatsegB[i]->SetPadSize(10.,0.5);
slatsegB[i]->SetPadDivision(ndiv);
slatsegB[i]->SetId(1);
slatsegB[i]->SetDAnod(AliMUONConstants::Pitch());
slatsegNB[i] = new AliMUONSt345SlatSegmentation(0);
- slatsegNB[i]->SetPadSize(0.713,10.);
+ fDESegmentations->Add(slatsegNB[i]);
+ slatsegNB[i]->SetPadSize(1./1.4,10.);
slatsegNB[i]->SetPadDivision(ndiv);
slatsegNB[i]->SetId(1);
slatsegNB[i]->SetDAnod(AliMUONConstants::Pitch());
for(Int_t i=0; i<9; i++) {
trigSegX[i] = new AliMUONTriggerSegmentation(1);
trigSegY[i] = new AliMUONTriggerSegmentation(0);
+ fDESegmentations->Add(trigSegX[i]);
+ fDESegmentations->Add(trigSegY[i]);
trigSegX[i]->SetLineNumber(9-i);
trigSegY[i]->SetLineNumber(9-i);
}
// chamber 8 7 1 0 cathode 1
for (Int_t i=0; i<6; i++) nStrip[i]=8;
- nStrip[7]=16;
+ nStrip[6]=16;
for (Int_t i=0; i<7; i++) stripYsize[i]=stripLength[3];
for (Int_t i=0; i<7; i++) stripXsize[i]=stripWidth[2];
trigSegY[8]->Init(0,nStrip,stripYsize,stripXsize,0.);
for (Int_t i=5; i<6; i++) nStrip[5]=8;
nStrip[6]=16;
stripYsize[0]=stripLength[2];
- for (Int_t i=1; i<8; i++) stripYsize[i]=stripLength[3];
+ for (Int_t i=1; i<7; i++) stripYsize[i]=stripLength[3];
for (Int_t i=0; i<5; i++) stripXsize[i]=stripWidth[1];
for (Int_t i=5; i<7; i++) stripXsize[i]=stripWidth[2];
trigSegY[5]->Init(0,nStrip,stripYsize,stripXsize,stripLength[0]);
fMUON->SetMaxStepGas(0.1);
fMUON->SetMaxStepAlu(0.1);
- // Build all stations
+ // Build stations
BuildCommon();
- BuildStation1();
- BuildStation2();
- BuildStation3();
- BuildStation4();
- BuildStation5();
- BuildStation6();
+ if (IsGeometryDefined(0)) BuildStation1();
+ if (IsGeometryDefined(2)) BuildStation2();
+ if (IsGeometryDefined(4)) BuildStation3();
+ if (IsGeometryDefined(6)) BuildStation4();
+ if (IsGeometryDefined(8)) BuildStation5();
+ if (IsGeometryDefined(10)) BuildStation6();
}
else
AliDebug(0,"Non default version of MUON selected. You have to construct yourself the MUON elements !!");