]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONFactoryV2.cxx
Corrected list of motif types for station2 (Ivana)
[u/mrichter/AliRoot.git] / MUON / AliMUONFactoryV2.cxx
index fd0df7c389df53d0515b457d9c0a1c69be889a48..1a39a6d6183db32cf30d4b1f1a9e282f3565cab4 100644 (file)
@@ -21,7 +21,6 @@
 
 #include "AliMUONFactoryV2.h"
 #include "AliRun.h"
-#include "AliSegmentation.h"
 #include "AliLog.h"
 
 #include "AliMUON.h"
@@ -32,6 +31,7 @@
 #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
 
@@ -62,7 +76,9 @@ AliMUONFactoryV2::AliMUONFactoryV2(const AliMUONFactoryV2& rhs)
 
 AliMUONFactoryV2::~AliMUONFactoryV2()
 {
-  //
+// Destructor
+
+  delete fDESegmentations;
 }
 
 //__________________________________________________________________________
@@ -77,6 +93,22 @@ AliMUONFactoryV2&  AliMUONFactoryV2::operator=(const AliMUONFactoryV2& rhs)
   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() 
 {
@@ -127,6 +159,10 @@ void AliMUONFactoryV2::BuildStation1()
     = 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];
 
@@ -179,6 +215,10 @@ void AliMUONFactoryV2::BuildStation2()
   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++) {
@@ -233,12 +273,14 @@ void AliMUONFactoryV2::BuildStation3()
   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());
@@ -372,12 +414,14 @@ void AliMUONFactoryV2::BuildStation4()
   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());
@@ -421,7 +465,7 @@ void AliMUONFactoryV2::BuildStation4()
   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
@@ -578,12 +622,14 @@ void AliMUONFactoryV2::BuildStation5()
   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());
@@ -768,6 +814,8 @@ void AliMUONFactoryV2::BuildStation6()
       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);    
       }
@@ -800,7 +848,7 @@ void AliMUONFactoryV2::BuildStation6()
 
       // 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.);  
@@ -848,7 +896,7 @@ void AliMUONFactoryV2::BuildStation6()
       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]);  
@@ -935,14 +983,14 @@ void AliMUONFactoryV2::Build(AliMUON* where, const char* what)
     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 !!");