]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONResponseFactory.cxx
flag to switch off/on using OCDB
[u/mrichter/AliRoot.git] / MUON / AliMUONResponseFactory.cxx
index e2c22de468d128c7c53016a3de68c8cdfdad5b4e..0b7bed9dc50b1328b5fc2c94416cade6d7267ca5 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-////////////////////////////////////////////////////////////
-//  Factory for muon response                             //
-////////////////////////////////////////////////////////////
-
 /* $Id$ */
 
+//-----------------------------------------------------------------------------
+// Class AliMUONResponseFactory
+// -----------------------------
+// Factory for muon response
+// Class separated from AliMUONFactoryV4
+//-----------------------------------------------------------------------------
+
 #include "AliMUONResponseFactory.h"
 #include "AliRun.h"
 #include "AliLog.h"
 
 #include "AliMUON.h"
 #include "AliMUONConstants.h"
-#include "AliMUONTriggerConstants.h"
 #include "AliMUONChamber.h"
 #include "AliMUONResponseV0.h"
 #include "AliMUONResponseTrigger.h"
+#include "AliMUONResponseTriggerV1.h"
 
+/// \cond CLASSIMP
 ClassImp(AliMUONResponseFactory)
+/// \endcond
 
 //__________________________________________________________________________
-  AliMUONResponseFactory::AliMUONResponseFactory(const char* name)
+  AliMUONResponseFactory::AliMUONResponseFactory(const char* name,
+                                                 Bool_t isTailEffect)
     : TNamed(name, ""),
       fMUON(0),
-      fResponse0(0)
-{  
+      fResponse0(0),
+      fIsTailEffect(isTailEffect)
+{
+/// Standard constructor
+  
   AliDebug(1,Form("ctor this=%p",this));
 }
 
@@ -47,47 +56,27 @@ ClassImp(AliMUONResponseFactory)
   AliMUONResponseFactory::AliMUONResponseFactory()
     : TNamed(),
       fMUON(0),
-      fResponse0(0)
+      fResponse0(0),
+      fIsTailEffect(kTRUE)
 {
-  AliDebug(1,Form("default (empty) ctor this=%p",this));
-// Default constructor
-}
+/// Default constructor
 
-//__________________________________________________________________________
-AliMUONResponseFactory::AliMUONResponseFactory(const AliMUONResponseFactory& rhs)
- : TNamed(rhs)
-{
-  // Protected copy constructor
-
-  AliFatal("Not implemented.");
+  AliDebug(1,Form("default (empty) ctor this=%p",this));
 }
 
 //__________________________________________________________________________
 
 AliMUONResponseFactory::~AliMUONResponseFactory()
 {
-// Destructor
+/// Destructor
        AliDebug(1,Form("dtor this=%p",this));
+  delete fResponse0;
 }
-
-//__________________________________________________________________________
-AliMUONResponseFactory&  AliMUONResponseFactory::operator=(const AliMUONResponseFactory& rhs)
-{
-  // Protected assignement operator
-
-  if (this == &rhs) return *this;
-
-  AliFatal("Not implemented.");
-    
-  return *this;  
-}    
           
 //__________________________________________________________________________
 void AliMUONResponseFactory::BuildCommon() 
 {
-  //
-  // Construct the default response.
-  //
+/// Construct the default response.
 
   // Default response: 5 mm of gas
   fResponse0 = new AliMUONResponseV0;
@@ -100,6 +89,7 @@ void AliMUONResponseFactory::BuildCommon()
   fResponse0->SetMaxAdc(4096);
   fResponse0->SetSaturation(3000);
   fResponse0->SetZeroSuppression(6);
+  fResponse0->SetTailEffect(fIsTailEffect);
 }       
         
 //__________________________________________________________________________
@@ -109,20 +99,21 @@ void AliMUONResponseFactory::BuildStation1()
 
   // Response for 4 mm of gas (station 1)
   // automatic consistency with width of sensitive medium in CreateGeometry ????
-  AliMUONResponseV0* responseSt1 = new AliMUONResponseV0;
+  AliMUONResponseV0 responseSt1;
   // Mathieson parameters from L.Kharmandarian's thesis, page 190
-  responseSt1->SetSqrtKx3AndDeriveKx2Kx4(0.7000); // sqrt(0.4900)
-  responseSt1->SetSqrtKy3AndDeriveKy2Ky4(0.7550); // sqrt(0.5700)
-  responseSt1->SetPitch(AliMUONConstants::PitchSt1()); // anode-cathode distance
-  responseSt1->SetSigmaIntegration(10.);
+  responseSt1.SetSqrtKx3AndDeriveKx2Kx4(0.7000); // sqrt(0.4900)
+  responseSt1.SetSqrtKy3AndDeriveKy2Ky4(0.7550); // sqrt(0.5700)
+  responseSt1.SetPitch(AliMUONConstants::PitchSt1()); // anode-cathode distance
+  responseSt1.SetSigmaIntegration(10.);
   // ChargeSlope larger to compensate for the smaller anode-cathode distance
   // and keep the same most probable ADC channel for mip's
-  responseSt1->SetChargeSlope(62.5); 
+  responseSt1.SetChargeSlope(62.5); 
   // assumed proportionality to anode-cathode distance for ChargeSpread
-  responseSt1->SetChargeSpread(0.144, 0.144);
-  responseSt1->SetMaxAdc(4096);
-  responseSt1->SetSaturation(3000);
-  responseSt1->SetZeroSuppression(6);
+  responseSt1.SetChargeSpread(0.144, 0.144);
+  responseSt1.SetMaxAdc(4096);
+  responseSt1.SetSaturation(3000);
+  responseSt1.SetZeroSuppression(6);
+  responseSt1.SetTailEffect(fIsTailEffect);
 
    for (Int_t chamber = 0; chamber < 2; chamber++) {
     fMUON->SetResponseModel(chamber, responseSt1); // special response      
@@ -136,7 +127,7 @@ void AliMUONResponseFactory::BuildStation2()
 /// Configuration for Chamber TC3/4 (Station 2) -----------
 
   for (Int_t chamber = 2; chamber < 4; chamber++) {
-    fMUON->SetResponseModel(chamber, fResponse0); // normal response        
+    fMUON->SetResponseModel(chamber, *fResponse0); // normal response        
     fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
   }
 }       
@@ -147,7 +138,7 @@ void AliMUONResponseFactory::BuildStation3()
 /// Configuration for Chamber TC5/6  (Station 3) ----------          
 
   for (Int_t chamber = 4; chamber < 6; chamber++) {
-    fMUON->SetResponseModel(chamber, fResponse0); // normal response        
+    fMUON->SetResponseModel(chamber, *fResponse0); // normal response        
     fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
   }
 }       
@@ -158,7 +149,7 @@ void AliMUONResponseFactory::BuildStation4()
 /// Configuration for Chamber TC7/8  (Station 4) ----------          
 
   for (Int_t chamber = 6; chamber < 8; chamber++) {
-    fMUON->SetResponseModel(chamber, fResponse0); // normal response        
+    fMUON->SetResponseModel(chamber, *fResponse0); // normal response        
     fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
   }
 }       
@@ -169,7 +160,7 @@ void AliMUONResponseFactory::BuildStation5()
 /// Configuration for Chamber TC9/10  (Station 5) ---------           
 
   for (Int_t chamber = 8; chamber < 10; chamber++) {
-    fMUON->SetResponseModel(chamber, fResponse0); // normal response        
+    fMUON->SetResponseModel(chamber, *fResponse0); // normal response        
     fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
   }
 }       
@@ -179,17 +170,31 @@ void AliMUONResponseFactory::BuildStation6()
 {
 /// Configuration for Trigger Chambers   (Station 6,7) ---------           
 
-  for (Int_t chamber = 10; chamber < 14; chamber++) {
-   
-    fMUON->SetResponseModel(chamber, new AliMUONResponseTrigger);
-    fMUON->Chamber(chamber).SetChargeCorrel(0); // same charge on both cathodes
-  }
+    Bool_t resTrigV1 = fMUON->GetTriggerResponseV1();    
+
+    for (Int_t chamber = 10; chamber < 14; chamber++) 
+    {
+      AliMUONResponse* response;
+      if (!resTrigV1) 
+      {
+        response = new AliMUONResponseTrigger;
+      }
+      else
+      {
+        response = new AliMUONResponseTriggerV1;
+      }
+           fMUON->SetResponseModel(chamber,*response); 
+      fMUON->Chamber(chamber).SetChargeCorrel(0); // same charge on both cathodes
+      delete response;
+    }
 }       
 
 //__________________________________________________________________________
 void AliMUONResponseFactory::Build(AliMUON* where) 
 {
-// Construct MUON responses
+/// Construct MUON responses
+
+  AliDebugStream(1) << "Tail effect: " << fIsTailEffect << endl;
 
   fMUON = where;
 
@@ -211,7 +216,7 @@ void AliMUONResponseFactory::Build(AliMUON* where)
 //__________________________________________________________________________
 void AliMUONResponseFactory::BuildStation(AliMUON* where, Int_t stationNumber) 
 {
-// Construct MUON responses
+/// Construct MUON responses for given station
 
   fMUON = where;
   if (!fResponse0) BuildCommon();