]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONFactory.cxx
Logging of Debug, Info and Error Messages follwing AliRoot Standard http://aliweb...
[u/mrichter/AliRoot.git] / MUON / AliMUONFactory.cxx
index e200c17ee2ded636006f5bdec7d54403ba0a71c3..f3504a430d35bf5bb10c841bda1e28de60ea01c5 100644 (file)
 //  Factory for muon chambers, segmentations and response //
 ////////////////////////////////////////////////////////////
 
-/*
-$Log$
-Revision 1.1  2001/04/06 11:24:43  morsch
-Dependency on implementations of AliSegmentation and AliMUONResponse moved to AliMUONFactory class.
-Static method Build() builds the MUON system out of chambers, segmentation and response.
+/* $Id$ */
 
-*/
 #include "AliMUONFactory.h"
 #include "AliMUON.h"
 #include "AliMUONChamber.h"
 #include "AliMUONResponseV0.h"
 #include "AliMUONResponseTrigger.h"
-#include "AliMUONSegmentationV0.h"
 #include "AliMUONSegmentationV01.h"
 #include "AliMUONSegmentationV02.h"
-#include "AliMUONSegmentationV04.h"
-#include "AliMUONSegmentationV05.h"
 #include "AliMUONSegmentationSlat.h"
 #include "AliMUONSegmentationSlatN.h"
-#include "AliMUONSegmentationTrigger.h"
 #include "AliMUONSegmentationTriggerX.h"
 #include "AliMUONSegmentationTriggerY.h"
+#include "AliLog.h"
 
 ClassImp(AliMUONFactory)
 
-    
-void AliMUONFactory::Build(AliMUON* where, const char* what) 
+//__________________________________________________________________________
+AliMUONFactory::AliMUONFactory()
+  : TObject(),
+    fMUON(0),
+    fResponse0(0)
 {
 //
-// Construct MUON from chambers, segmentation and responses
+}
+
+//__________________________________________________________________________
+AliMUONFactory::AliMUONFactory(const AliMUONFactory& rhs)
+  : TObject(rhs)
+{
+// Protected copy constructor
+
+  AliFatal("Not implemented.");
+}
+
+//__________________________________________________________________________
+
+AliMUONFactory::~AliMUONFactory()
+{
 //
-    char tmp[20];
-    AliMUON* pMUON = where;
-    strcpy(tmp, what);
+}
 
-    if (strcmp(tmp, "default")==0) {
-      if(pMUON->GetDebug()) {
-       
-       printf("\nAliMUONFactory: --------AliMUONFactory------------------------------");
-       printf("\nAliMUONFactory:  Non default version of MUON selected               ");
-       printf("\nAliMUONFactory:  You have to construct yourself the MUON elements !!");       
-       printf("\nAliMUONFactory: ----------------------------------------------------");
-      }
-       pMUON->SetIshunt(0);
-       pMUON->SetMaxStepGas(0.1);
-       pMUON->SetMaxStepAlu(0.1);
+//__________________________________________________________________________
+AliMUONFactory&  AliMUONFactory::operator=(const AliMUONFactory& rhs)
+{
+// Protected assignement operator
+
+  if (this == &rhs) return *this;
+
+  AliFatal("Not implemented.");
+    
+  return *this;  
+}    
+          
+//__________________________________________________________________________
+void AliMUONFactory::BuildCommon() 
+{
 //
-// Version 0
+// Construct the default response.
 //
-// First define the number of planes that are segmented (1 or 2) by a call
-// to SetNsec. 
-// Then chose for each chamber (chamber plane) the segmentation 
-// and response model.
-// They should be equal for the two chambers of each station. In a future
-// version this will be enforced.
-//
-//  
-       Int_t chamber;
+
        // Default response: 5 mm of gas
-       AliMUONResponseV0* response0 = new AliMUONResponseV0;
-       response0->SetSqrtKx3AndDeriveKx2Kx4(0.7131); // sqrt(0.5085)
-       response0->SetSqrtKy3AndDeriveKy2Ky4(0.7642); // sqrt(0.5840)
-       response0->SetPitch(0.25); // anode-cathode distance
-       response0->SetSigmaIntegration(10.);
-       response0->SetChargeSlope(50);
-       response0->SetChargeSpread(0.18, 0.18);
-       response0->SetMaxAdc(4096);
-       response0->SetZeroSuppression(6);
-       
+       fResponse0 = new AliMUONResponseV0;
+       fResponse0->SetSqrtKx3AndDeriveKx2Kx4(0.7131); // sqrt(0.5085)
+       fResponse0->SetSqrtKy3AndDeriveKy2Ky4(0.7642); // sqrt(0.5840)
+       fResponse0->SetPitch(0.25); // anode-cathode distance
+       fResponse0->SetSigmaIntegration(10.);
+       fResponse0->SetChargeSlope(10);
+       fResponse0->SetChargeSpread(0.18, 0.18);
+       fResponse0->SetMaxAdc(4096);
+       fResponse0->SetSaturation(3000);
+       fResponse0->SetZeroSuppression(6);
+}      
+       
+//__________________________________________________________________________
+void AliMUONFactory::BuildStation1() 
+{
+//--------------------------------------------------------
+// Configuration for Chamber TC1/2  (Station 1) ----------           
+//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
        // Response for 4 mm of gas (station 1)
        // automatic consistency with width of sensitive medium in CreateGeometry ????
        AliMUONResponseV0* responseSt1 = new AliMUONResponseV0;
@@ -100,17 +112,18 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
        // assumed proportionality to anode-cathode distance for ChargeSpread
        responseSt1->SetChargeSpread(0.144, 0.144);
        responseSt1->SetMaxAdc(4096);
+       responseSt1->SetSaturation(3000);
        responseSt1->SetZeroSuppression(6);
        
-//--------------------------------------------------------
-// Configuration for Chamber TC1/2  (Station 1) ----------           
-//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+        //--------------------------------------------------------
+        // Configuration for Chamber TC1/2  (Station 1) ----------           
+
        Float_t rseg1[4]={17.5, 55.2, 71.3, 95.5};
        Int_t   nseg1[4]={4, 4, 2, 1};
 //
-       chamber=1;
-//      ^^^^^^^^^
-       pMUON->SetNsec(chamber-1,2);
+       Int_t chamber=1;
+//      ^^^^^^^^^^^^^^^^
+       fMUON->SetNsec(chamber-1,2);
 //
        AliMUONSegmentationV01 *seg11=new AliMUONSegmentationV01(4);
        
@@ -119,7 +132,7 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
        seg11->SetDAnod(0.20); // smaller distance between anode wires
        seg11->SetPadDivision(nseg1);
        
-       pMUON->SetSegmentationModel(chamber-1, 1, seg11);
+       fMUON->SetSegmentationModel(chamber-1, 1, seg11);
        
        AliMUONSegmentationV02 *seg12=new AliMUONSegmentationV02(4);
        seg12->SetSegRadii(rseg1); 
@@ -127,51 +140,57 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
        seg12->SetDAnod(0.20); // smaller distance between anode wires
        seg12->SetPadDivision(nseg1);
        
-       pMUON->SetSegmentationModel(chamber-1, 2, seg12);
+       fMUON->SetSegmentationModel(chamber-1, 2, seg12);
        
-       pMUON->SetResponseModel(chamber-1, responseSt1); // special response        
-       pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
+       fMUON->SetResponseModel(chamber-1, responseSt1); // special response        
+       fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
        
        chamber=2;
 //      ^^^^^^^^^
 //
-       pMUON->SetNsec(chamber-1,2);
+       fMUON->SetNsec(chamber-1,2);
 //
        AliMUONSegmentationV01 *seg21=new AliMUONSegmentationV01(4);
        seg21->SetSegRadii(rseg1);
        seg21->SetPadSize(2.4, 0.4); // smaller pad size
        seg21->SetDAnod(0.20); // smaller distance between anode wires
        seg21->SetPadDivision(nseg1);
-       pMUON->SetSegmentationModel(chamber-1, 1, seg21);
+       fMUON->SetSegmentationModel(chamber-1, 1, seg21);
 //
        AliMUONSegmentationV02 *seg22=new AliMUONSegmentationV02(4);
        seg22->SetSegRadii(rseg1); 
        seg22->SetPadSize(0.6, 1.6); // smaller pad size
        seg22->SetDAnod(0.20); // smaller distance between anode wires
        seg22->SetPadDivision(nseg1);
-       pMUON->SetSegmentationModel(chamber-1, 2, seg22);
+       fMUON->SetSegmentationModel(chamber-1, 2, seg22);
        
-       pMUON->SetResponseModel(chamber-1, responseSt1); // special response
-       pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
+       fMUON->SetResponseModel(chamber-1, responseSt1); // special response
+       fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
        
+}
+
+//__________________________________________________________________________
+void AliMUONFactory::BuildStation2() 
+{
 //
 //--------------------------------------------------------
 // Configuration for Chamber TC3/4 (Station 2) -----------
 ///^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 // Float_t rseg2[4]={23.5, 87.7, 122.4, 122.5};
-       Float_t rseg2[4]={23.5, 47.1, 87.7, 122.5};
+
+       Float_t rseg2[4]={23.5, 53.5, 90.5, 122.5};       
        Int_t   nseg2[4]={4, 4, 2, 1};
 //
-       chamber=3;
-//      ^^^^^^^^^
-       pMUON->SetNsec(chamber-1,2);
+       Int_t chamber=3;
+//      ^^^^^^^^^^^^^^^^
+       fMUON->SetNsec(chamber-1,2);
 //
        AliMUONSegmentationV01 *seg31=new AliMUONSegmentationV01(4);
        seg31->SetSegRadii(rseg2);
        seg31->SetPadSize(3.0, 0.5);
        seg31->SetDAnod(3.0/3./4);
        seg31->SetPadDivision(nseg2);
-       pMUON->SetSegmentationModel(chamber-1, 1, seg31);
+       fMUON->SetSegmentationModel(chamber-1, 1, seg31);
 //
        AliMUONSegmentationV02 *seg32=new AliMUONSegmentationV02(4);
        seg32->SetSegRadii(rseg2); 
@@ -179,22 +198,22 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
        seg32->SetPadDivision(nseg2);
        seg32->SetDAnod(3.0/3./4);
        
-       pMUON->SetSegmentationModel(chamber-1, 2, seg32);
+       fMUON->SetSegmentationModel(chamber-1, 2, seg32);
        
-       pMUON->SetResponseModel(chamber-1, response0);      
-       pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
+       fMUON->SetResponseModel(chamber-1, fResponse0);     
+       fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
        
        chamber=4;
 //      ^^^^^^^^^
 //
-       pMUON->SetNsec(chamber-1,2);
+       fMUON->SetNsec(chamber-1,2);
 //
        AliMUONSegmentationV01 *seg41=new AliMUONSegmentationV01(4);
        seg41->SetSegRadii(rseg2);
        seg41->SetPadSize(3.0, 0.5);
        seg41->SetDAnod(3.0/3./4);
        seg41->SetPadDivision(nseg2);
-       pMUON->SetSegmentationModel(chamber-1, 1, seg41);
+       fMUON->SetSegmentationModel(chamber-1, 1, seg41);
 //
        AliMUONSegmentationV02 *seg42=new AliMUONSegmentationV02(4);
        seg42->SetSegRadii(rseg2); 
@@ -202,32 +221,37 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
        seg42->SetPadDivision(nseg2);
        seg42->SetDAnod(3.0/3./4);
        
-       pMUON->SetSegmentationModel(chamber-1, 2, seg42);
+       fMUON->SetSegmentationModel(chamber-1, 2, seg42);
        
-       pMUON->SetResponseModel(chamber-1, response0);      
-       pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
+       fMUON->SetResponseModel(chamber-1, fResponse0);     
+       fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
+}      
        
        
+//__________________________________________________________________________
+void AliMUONFactory::BuildStation3() 
+{
 //--------------------------------------------------------
 // Configuration for Chamber TC5/6  (Station 3) ----------          
 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
        Int_t   nseg3[4]={4, 4, 2, 1};
        Int_t   npcb5[36] = {0,0,2,0,
                             0,0,3,0,
                             0,1,3,0,
                             0,2,2,0,
-                            0,1,2,0, 
+                            0,2,2,0, 
                             0,2,2,0, 
                             0,1,3,0, 
                             0,0,3,0,
                             0,0,2,0};
        
        Float_t shift = 1.5/2.;
-       Float_t xpos5[9]    = {2., 2., 2., 2.,33., 2., 2., 2., 2.};
+       Float_t xpos5[9]    = {4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5};
        Float_t ypos5       = -(20.+4.*(40.-2.*shift));
        
-       chamber=5;
-       pMUON->SetNsec(chamber-1,2);
+       Int_t chamber=5;
+       fMUON->SetNsec(chamber-1,2);
        AliMUONSegmentationSlat *seg51=new AliMUONSegmentationSlat(4);
        seg51->SetNSlats(9); 
        seg51->SetShift(shift);  
@@ -237,7 +261,7 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
        seg51->SetPadSize(10.,0.5);
        seg51->SetDAnod(0.25);
        seg51->SetPadDivision(nseg3);
-       pMUON->SetSegmentationModel(chamber-1, 1, seg51);
+       fMUON->SetSegmentationModel(chamber-1, 1, seg51);
        
        AliMUONSegmentationSlatN *seg52=new AliMUONSegmentationSlatN(4);
        seg52->SetNSlats(9); 
@@ -248,12 +272,12 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
        seg52->SetPadSize(1., 10.); // DeltaX(non bending) = 2 * DeltaY(bending)
        seg52->SetDAnod(0.25);
        seg52->SetPadDivision(nseg3);
-       pMUON->SetSegmentationModel(chamber-1, 2, seg52);
-       pMUON->SetResponseModel(chamber-1, response0);      
-       pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
+       fMUON->SetSegmentationModel(chamber-1, 2, seg52);
+       fMUON->SetResponseModel(chamber-1, fResponse0);      
+       fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
        
        chamber=6;
-       pMUON->SetNsec(chamber-1,2);
+       fMUON->SetNsec(chamber-1,2);
        AliMUONSegmentationSlat *seg61=new AliMUONSegmentationSlat(4);
        seg61->SetNSlats(9); 
        seg61->SetShift(shift);  
@@ -263,7 +287,7 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
        seg61->SetPadSize(10.,0.5);
        seg61->SetDAnod(0.25);
        seg61->SetPadDivision(nseg3);
-       pMUON->SetSegmentationModel(chamber-1, 1, seg61);
+       fMUON->SetSegmentationModel(chamber-1, 1, seg61);
        
        AliMUONSegmentationSlatN *seg62=new AliMUONSegmentationSlatN(4);
        seg62->SetNSlats(9); 
@@ -274,37 +298,45 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
        seg62->SetPadSize(1., 10.); // DeltaX(non bending) = 2 * DeltaY(bending)
        seg62->SetDAnod(0.25);
        seg62->SetPadDivision(nseg3);
-       pMUON->SetSegmentationModel(chamber-1, 2, seg62);
-       pMUON->SetResponseModel(chamber-1, response0);      
-       pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
+       fMUON->SetSegmentationModel(chamber-1, 2, seg62);
+       fMUON->SetResponseModel(chamber-1, fResponse0);      
+       fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
+}
+
        
+//__________________________________________________________________________
+void AliMUONFactory::BuildStation4() 
+{
 //--------------------------------------------------------
 // Configuration for Chamber TC7/8  (Station 4) ----------           
 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
        Int_t   nseg4[4]={4, 4, 2, 1};
        
-       chamber=7;
-//      ^^^^^^^^^
+       Int_t chamber=7;
+//      ^^^^^^^^^^^^^^^^
        
-       pMUON->SetNsec(chamber-1,2);
+       fMUON->SetNsec(chamber-1,2);
 //
        AliMUONSegmentationSlat *seg71=new AliMUONSegmentationSlat(4);
-       Int_t npcb7[44] = {0,0,0,3,
+       Float_t shift = 1.5/2.;
+       Int_t npcb7[52] = {0,0,0,2,
+                          0,0,0,3,
                           0,0,2,2,
                           0,0,3,2,
                           0,2,2,1,
-                          0,2,2,1,
-                          0,1,2,1
-                          0,2,2,1
+                          0,2,2,2,
+                          0,1,2,2
+                          0,2,2,2
                           0,2,2,1, 
                           0,0,3,2, 
                           0,0,2,2, 
-                          0,0,0,3};
-       Float_t xpos7[11]   = {2., 2., 2., 2., 2., 40.5, 2., 2., 2., 2., 2.};
-       Float_t ypos7       = -(20.+5.*(40.-2.*shift));
+                          0,0,0,3,
+                          0,0,0,2};
+       Float_t xpos7[13]   = {4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 44., 4.5, 4.5, 4.5, 4.5, 4.5, 4.5};
+       Float_t ypos7       = -(20.+6.*(40.-2.*shift));  
        
-       seg71->SetNSlats(11);  
+       seg71->SetNSlats(13);  
        seg71->SetShift(shift);  
        seg71->SetNPCBperSector(npcb7); 
        seg71->SetSlatXPositions(xpos7);
@@ -313,12 +345,12 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
        seg71->SetPadSize(10.,0.5);
        seg71->SetDAnod(0.25);
        seg71->SetPadDivision(nseg4);
-       pMUON->SetSegmentationModel(chamber-1, 1, seg71);
+       fMUON->SetSegmentationModel(chamber-1, 1, seg71);
        
        AliMUONSegmentationSlatN *seg72=new AliMUONSegmentationSlatN(4);
        
-       pMUON->SetSegmentationModel(chamber-1, 2, seg72);
-       seg72->SetNSlats(11);  
+       fMUON->SetSegmentationModel(chamber-1, 2, seg72);
+       seg72->SetNSlats(13);  
        seg72->SetShift(shift);   
        seg72->SetNPCBperSector(npcb7); 
        seg72->SetSlatXPositions(xpos7);
@@ -327,16 +359,16 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
        seg72->SetDAnod(0.25);
        seg72->SetPadDivision(nseg4);
        
-       pMUON->SetResponseModel(chamber-1, response0);      
-       pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
+       fMUON->SetResponseModel(chamber-1, fResponse0);     
+       fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
        
        chamber=8;
 //      ^^^^^^^^^
-       pMUON->SetNsec(chamber-1,2);
+       fMUON->SetNsec(chamber-1,2);
 //
        AliMUONSegmentationSlat *seg81=new AliMUONSegmentationSlat(4);
        
-       seg81->SetNSlats(11);  
+       seg81->SetNSlats(13);  
        seg81->SetShift(shift);  
        seg81->SetNPCBperSector(npcb7); 
        seg81->SetSlatXPositions(xpos7);
@@ -344,12 +376,12 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
        seg81->SetPadSize(10.,0.5);
        seg81->SetDAnod(0.25);
        seg81->SetPadDivision(nseg4);
-       pMUON->SetSegmentationModel(chamber-1, 1, seg81);
+       fMUON->SetSegmentationModel(chamber-1, 1, seg81);
        
        AliMUONSegmentationSlat *seg82=new AliMUONSegmentationSlatN(4);
        
-       pMUON->SetSegmentationModel(chamber-1, 2, seg82);
-       seg82->SetNSlats(11);  
+       fMUON->SetSegmentationModel(chamber-1, 2, seg82);
+       seg82->SetNSlats(13);  
        seg82->SetShift(shift);  
        seg82->SetNPCBperSector(npcb7); 
        seg82->SetSlatXPositions(xpos7);
@@ -358,19 +390,26 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
        seg82->SetDAnod(0.25);
        seg82->SetPadDivision(nseg4);
        
-       pMUON->SetResponseModel(chamber-1, response0);      
-       pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
-       
+       fMUON->SetResponseModel(chamber-1, fResponse0);     
+       fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
+}
 
+//__________________________________________________________________________
+void AliMUONFactory::BuildStation5() 
+{      
 //--------------------------------------------------------
 // Configuration for Chamber TC9/10  (Station 5) ---------           
 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-       chamber=9;
-//      ^^^^^^^^^
 
-       pMUON->SetNsec(chamber-1,2);
+       Int_t chamber=9;
+//      ^^^^^^^^^^^^^^^^
+
+       fMUON->SetNsec(chamber-1,2);
 //
        AliMUONSegmentationSlat *seg91=new AliMUONSegmentationSlat(4);
+
+       Int_t   nseg4[4]={4, 4, 2, 1};
+       Float_t shift = 1.5/2.;
        Int_t   npcb9[52] = {0,0,0,3,
                             0,0,0,4,
                             0,0,2,3,
@@ -385,7 +424,7 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
                             0,0,0,4, 
                             0,0,0,3};   
        
-       Float_t xpos9[13]   = {2., 2., 2., 2., 2., 2., 40.5, 2., 2., 2., 2., 2., 2.};
+       Float_t xpos9[13]   = {4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 44., 4.5, 4.5, 4.5, 4.5, 4.5, 4.5};
        Float_t ypos9       = -(20.+6.*(40.-2.*shift));
        
        seg91->SetNSlats(13);  
@@ -396,11 +435,11 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
        seg91->SetPadSize(10.,0.5);
        seg91->SetDAnod(0.25);
        seg91->SetPadDivision(nseg4);
-       pMUON->SetSegmentationModel(chamber-1, 1, seg91);
+       fMUON->SetSegmentationModel(chamber-1, 1, seg91);
        
        AliMUONSegmentationSlatN *seg92=new AliMUONSegmentationSlatN(4);
        
-       pMUON->SetSegmentationModel(chamber-1, 2, seg92);
+       fMUON->SetSegmentationModel(chamber-1, 2, seg92);
        seg92->SetNSlats(13);  
        seg92->SetShift(shift);   
        seg92->SetNPCBperSector(npcb9); 
@@ -410,12 +449,12 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
        seg92->SetDAnod(0.25);
        seg92->SetPadDivision(nseg4);
        
-       pMUON->SetResponseModel(chamber-1, response0);      
-       pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
+       fMUON->SetResponseModel(chamber-1, fResponse0);     
+       fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
        
        chamber=10;
 //      ^^^^^^^^^
-       pMUON->SetNsec(chamber-1,2);
+       fMUON->SetNsec(chamber-1,2);
 //
        AliMUONSegmentationSlat *seg101=new AliMUONSegmentationSlat(4);
        
@@ -427,11 +466,11 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
        seg101->SetPadSize(10.,0.5);
        seg101->SetDAnod(0.25);
        seg101->SetPadDivision(nseg4);
-       pMUON->SetSegmentationModel(chamber-1, 1, seg101);
+       fMUON->SetSegmentationModel(chamber-1, 1, seg101);
        
        AliMUONSegmentationSlatN *seg102=new AliMUONSegmentationSlatN(4);
        
-       pMUON->SetSegmentationModel(chamber-1, 2, seg102);
+       fMUON->SetSegmentationModel(chamber-1, 2, seg102);
        seg102->SetNSlats(13);  
        seg102->SetShift(shift);   
        seg102->SetNPCBperSector(npcb9); 
@@ -441,63 +480,120 @@ void AliMUONFactory::Build(AliMUON* where, const char* what)
        seg102->SetDAnod(0.25);
        seg102->SetPadDivision(nseg4);
        
-       pMUON->SetResponseModel(chamber-1, response0);      
-       pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
+       fMUON->SetResponseModel(chamber-1, fResponse0);     
+       fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
+}
 
+//__________________________________________________________________________
+void AliMUONFactory::BuildStation6() 
+{      
 //--------------------------------------------------------
 // Configuration for Trigger Stations -------------------- 
 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
 // Cluster-size off
        AliMUONResponseTrigger* responseTrigger0 =  new AliMUONResponseTrigger;
 // Cluster-size on  
 // AliMUONResponseTriggerV1* responseTrigger0 =  new AliMUONResponseTriggerV1;
  
-       chamber=11;
-       pMUON->SetNsec(chamber-1,2);
+       Int_t chamber=11;
+       fMUON->SetNsec(chamber-1,2);
        AliMUONSegmentationTriggerX *seg111=new AliMUONSegmentationTriggerX;
-       pMUON->SetSegmentationModel(chamber-1, 1, seg111);
+       fMUON->SetSegmentationModel(chamber-1, 1, seg111);
        AliMUONSegmentationTriggerY *seg112=new AliMUONSegmentationTriggerY;
-       pMUON->SetSegmentationModel(chamber-1, 2, seg112);
+       fMUON->SetSegmentationModel(chamber-1, 2, seg112);
        
-       pMUON->SetResponseModel(chamber-1, responseTrigger0);      
-       pMUON->Chamber(chamber-1).SetChargeCorrel(0); // same charge on cathodes
+       fMUON->SetResponseModel(chamber-1, responseTrigger0);      
+       fMUON->Chamber(chamber-1).SetChargeCorrel(0); // same charge on cathodes
        
  
        chamber=12;
-       pMUON->SetNsec(chamber-1,2);
+       fMUON->SetNsec(chamber-1,2);
        AliMUONSegmentationTriggerX *seg121=new AliMUONSegmentationTriggerX;
-       pMUON->SetSegmentationModel(chamber-1, 1, seg121);
+       fMUON->SetSegmentationModel(chamber-1, 1, seg121);
        AliMUONSegmentationTriggerY *seg122=new AliMUONSegmentationTriggerY;
-       pMUON->SetSegmentationModel(chamber-1, 2, seg122);
+       fMUON->SetSegmentationModel(chamber-1, 2, seg122);
        
-       pMUON->SetResponseModel(chamber-1, responseTrigger0);
-       pMUON->Chamber(chamber-1).SetChargeCorrel(0); // same charge on cathodes
+       fMUON->SetResponseModel(chamber-1, responseTrigger0);
+       fMUON->Chamber(chamber-1).SetChargeCorrel(0); // same charge on cathodes
        
        chamber=13;
-       pMUON->SetNsec(chamber-1,2);
+       fMUON->SetNsec(chamber-1,2);
        AliMUONSegmentationTriggerX *seg131=new AliMUONSegmentationTriggerX;
-       pMUON->SetSegmentationModel(chamber-1, 1, seg131);
+       fMUON->SetSegmentationModel(chamber-1, 1, seg131);
        AliMUONSegmentationTriggerY *seg132=new AliMUONSegmentationTriggerY;
-       pMUON->SetSegmentationModel(chamber-1, 2, seg132);
-       pMUON->SetResponseModel(chamber-1, responseTrigger0);      
-       pMUON->Chamber(chamber-1).SetChargeCorrel(0); // same charge on cathodes
+       fMUON->SetSegmentationModel(chamber-1, 2, seg132);
+       fMUON->SetResponseModel(chamber-1, responseTrigger0);      
+       fMUON->Chamber(chamber-1).SetChargeCorrel(0); // same charge on cathodes
        
        chamber=14;
-       pMUON->SetNsec(chamber-1,2);
+       fMUON->SetNsec(chamber-1,2);
        AliMUONSegmentationTriggerX *seg141=new AliMUONSegmentationTriggerX;
-       pMUON->SetSegmentationModel(chamber-1, 1, seg141);
+       fMUON->SetSegmentationModel(chamber-1, 1, seg141);
        AliMUONSegmentationTriggerY *seg142=new AliMUONSegmentationTriggerY;
-       pMUON->SetSegmentationModel(chamber-1, 2, seg142);
-       
-       pMUON->SetResponseModel(chamber-1, responseTrigger0); 
-       pMUON->Chamber(chamber-1).SetChargeCorrel(0); // same charge on cathodes
-    } else {
-      if(pMUON->GetDebug()) {
-       printf("\nAliMUONFactory: --------AliMUONFactory------------------------------");
-       printf("\nAliMUONFactory:  Non default version of MUON selected               ");
-       printf("\nAliMUONFactory:  You have to construct yourself the MUON elements !!");       
-       printf("\nAliMUONFactory: ----------------------------------------------------");
-      }
-    }
+       fMUON->SetSegmentationModel(chamber-1, 2, seg142);
+       
+       fMUON->SetResponseModel(chamber-1, responseTrigger0); 
+       fMUON->Chamber(chamber-1).SetChargeCorrel(0); // same charge on cathodes
+}      
+
+//__________________________________________________________________________
+void AliMUONFactory::Build(AliMUON* where, const char* what) 
+{
+//
+// Construct MUON from chambers, segmentation and responses
+//
+
+    fMUON = where;
+    char tmp[20];
+    strcpy(tmp, what);
+
+    if (strcmp(tmp, "default")==0) {
+      // Set default parameters
+      fMUON->SetIshunt(0);
+      fMUON->SetMaxStepGas(0.1);
+      fMUON->SetMaxStepAlu(0.1);
+
+      // Build all stations
+      BuildCommon();
+      BuildStation1();
+      BuildStation2();
+      BuildStation3();
+      BuildStation4();
+      BuildStation5();
+      BuildStation6();
+    } 
+    else
+         AliDebug(0,"Non default version of MUON selected. You have to construct yourself the MUON elements !!");
 }
 
+//__________________________________________________________________________
+void AliMUONFactory::BuildStation(AliMUON* where, Int_t stationNumber) 
+{
+//
+// Construct MUON from chambers, segmentation and responses
+//
+// Version 0
+//
+// First define the number of planes that are segmented (1 or 2) by a call
+// to SetNsec.
+// Then chose for each chamber (chamber plane) the segmentation
+// and response model.
+// They should be equal for the two chambers of each station. In a future
+// version this will be enforced.
+//
+
+    fMUON = where;
+    if (!fResponse0) BuildCommon(); 
+    
+    switch (stationNumber) {    
+      case 1:  BuildStation1(); break;
+      case 2:  BuildStation2(); break;
+      case 3:  BuildStation3(); break;
+      case 4:  BuildStation4(); break;
+      case 5:  BuildStation5(); break;
+      case 6:  BuildStation6(); break;
+    
+      default: AliFatal("Wrong station number");
+    }  
+}