]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUON.cxx
No compression by default
[u/mrichter/AliRoot.git] / MUON / AliMUON.cxx
index 12c5d4fa4d865e7366d1c5c05e60a7bd1b1a6e8f..aa2c34dd20a3fcc98d0b1359d957d151e54af417 100644 (file)
 #include "AliMUONGeometrySegmentation.h"
 #include "AliMUONDigitizerv2.h"
 #include "AliMUONSDigitizerv1.h"
-#include "AliMUONRawData.h"
+#include "AliMUONRawWriter.h"
 #include "AliMUONSegmentation.h"
 #include "AliLog.h"
 
+#include "AliMUONSDigitizerV2.h"
+#include "AliMUONDigitizerV3.h"
+
+#include "AliMUONSt1GeometryBuilderV2.h"
+#include "AliMUONSt2GeometryBuilderV2.h"
+#include "AliMUONSlatGeometryBuilder.h"
+#include "AliMUONTriggerGeometryBuilder.h"
+
 // Defaults parameters for Z positions of chambers
 // taken from values for "stations" in AliMUON::AliMUON
 //     const Float_t zch[7]={528, 690., 975., 1249., 1449., 1610, 1710.};
@@ -104,7 +112,11 @@ AliMUON::AliMUON()
     fMaxDestepGas(0.),
     fMaxDestepAlu(0.),
     fMaxIterPad(0),
-    fCurIterPad(0)
+    fCurIterPad(0),
+    fTriggerScalerEvent(kFALSE),
+    fSDigitizerType(""),
+    fDigitizerType(""),
+  fRawWriter(0x0)
 {
 // Default Constructor
 //
@@ -113,7 +125,9 @@ AliMUON::AliMUON()
 }
 
 //__________________________________________________________________
-AliMUON::AliMUON(const char *name, const char *title)
+AliMUON::AliMUON(const char *name, const char *title,
+                 const char* sDigitizerClassName,
+                 const char* digitizerClassName)
   : AliDetector(name,title),
     fNCh(AliMUONConstants::NCh()),
     fNTrackingCh(AliMUONConstants::NTrackingCh()),
@@ -131,7 +145,11 @@ AliMUON::AliMUON(const char *name, const char *title)
     fMaxDestepGas(-1), // Negatives values are ignored by geant3 CONS200 
     fMaxDestepAlu(-1), // in the calculation of the tracking parameters
     fMaxIterPad(0),
-    fCurIterPad(0)
+    fCurIterPad(0),
+         fTriggerScalerEvent(kFALSE),
+    fSDigitizerType(sDigitizerClassName),
+    fDigitizerType(digitizerClassName),
+  fRawWriter(0x0)
 {
        AliDebug(1,Form("ctor this=%p",this));
   fIshunt =  0;
@@ -145,8 +163,17 @@ AliMUON::AliMUON(const char *name, const char *title)
   fGeometryBuilder
     ->AddBuilder(new AliMUONCommonGeometryBuilder(this));
 
-//
-// Creating List of Chambers
+  // By default, add also all the needed geometry builders.
+  // If you want to change this from outside, please use ResetGeometryBuilder
+  // method, followed by AddGeometryBuilder ones.
+
+  AddGeometryBuilder(new AliMUONSt1GeometryBuilderV2(this));
+  AddGeometryBuilder(new AliMUONSt2GeometryBuilderV2(this));
+  AddGeometryBuilder(new AliMUONSlatGeometryBuilder(this));
+  AddGeometryBuilder(new AliMUONTriggerGeometryBuilder(this));
+  
+  //
+  // Creating List of Chambers
     Int_t ch;
     fChambers = new TObjArray(AliMUONConstants::NCh());
 
@@ -200,6 +227,7 @@ AliMUON::~AliMUON()
   delete fMUONData;
   delete fGeometryBuilder;
   delete fSegmentation;
+  delete fRawWriter;
 }
 
 //________________________________________________________________________
@@ -394,8 +422,45 @@ void   AliMUON::SetResponseModel(Int_t id, AliMUONResponse *response)
 //____________________________________________________________________
 AliDigitizer* AliMUON::CreateDigitizer(AliRunDigitizer* manager) const
 {
-  return new AliMUONDigitizerv2(manager);
+  // FIXME: the selection of the class should be done through a factory
+  // mechanism. (see also Hits2SDigits()).
+  
+  AliInfo(Form("Digitizer used : %s",fDigitizerType.Data()));
+  
+  if ( fDigitizerType == "digitizer:default" )
+  {
+    return new AliMUONDigitizerv2(manager);
+  }
+  else if ( fDigitizerType == "digitizer:NewDigitizerNewTrigger" ) 
+  {
+    return new AliMUONDigitizerV3(manager,AliMUONDigitizerV3::kTriggerElectronics);
+  }
+  else if ( fDigitizerType == "digitizer:NewDigitizerOldTrigger" )
+  {
+    return new AliMUONDigitizerV3(manager,AliMUONDigitizerV3::kTriggerDecision, kFALSE, kFALSE);
+  }
+  else if ( fDigitizerType == "digitizer:NewDigitizerEffTrigger" )
+  {
+    return new AliMUONDigitizerV3(manager,AliMUONDigitizerV3::kTriggerDecision, kTRUE, kFALSE);
+  }  
+  else if ( fDigitizerType == "digitizer:NewDigitizerWithNoiseOldTrigger" )
+  {
+    return new AliMUONDigitizerV3(manager,AliMUONDigitizerV3::kTriggerDecision, kFALSE, kTRUE);
+  }    
+  else
+  {
+    AliFatal(Form("Unknown digitizer type : %s",fDigitizerType.Data()));
+  }
+  return 0x0;
+}
+
+//_____________________________________________________________________
+TString
+AliMUON::SDigitizerType() const
+{
+  return fSDigitizerType;
 }
+
 //_____________________________________________________________________
 void AliMUON::SDigits2Digits()
 {
@@ -411,29 +476,62 @@ void AliMUON::SDigits2Digits()
 //_____________________________________________________________________
 void AliMUON::Hits2SDigits()
 {
-  // Adaption of AliMUONSDigitizerv1 to be excuted by the AliSimulation framework
-  AliRunLoader* runLoader = fLoader->GetRunLoader();
-  AliRunDigitizer   * manager = new AliRunDigitizer(1,1);
-  manager->SetInputStream(0,runLoader->GetFileName(),AliConfig::GetDefaultEventFolderName());
-  AliMUONDigitizer * dMUON   = new AliMUONSDigitizerv1(manager);
-  fLoader->LoadHits("READ");
-  for (Int_t iEvent = 0; iEvent < runLoader->GetNumberOfEvents(); iEvent++) {
-    runLoader->GetEvent(iEvent);
-    dMUON->Exec("");
+  // FIXME: the selection of the sdigitizer should be done through a
+  // factory mechanism.
+  
+  AliInfo(Form("SDigitizer used : %s",fSDigitizerType.Data()));
+
+  if ( fSDigitizerType == "sdigitizer:default" )
+  {
+    // Adaption of AliMUONSDigitizerv1 to be excuted by the AliSimulation framework
+    AliRunLoader* runLoader = fLoader->GetRunLoader();
+    AliRunDigitizer   * manager = new AliRunDigitizer(1,1);
+    manager->SetInputStream(0,runLoader->GetFileName(),AliConfig::GetDefaultEventFolderName());
+    AliMUONDigitizer * dMUON   = new AliMUONSDigitizerv1(manager);
+    fLoader->LoadHits("READ");
+    for (Int_t iEvent = 0; iEvent < runLoader->GetNumberOfEvents(); iEvent++) {
+      runLoader->GetEvent(iEvent);
+      dMUON->Exec("");
+    }
+    fLoader->UnloadHits();
+  }
+  else if ( fSDigitizerType == "sdigitizer:AliMUONSDigitizerV2" )
+  {
+    TTask* sdigitizer = new AliMUONSDigitizerV2;
+    sdigitizer->ExecuteTask();
+  }
+  else
+  {
+    AliFatal(Form("Unknown sdigitizer classname : %s",fSDigitizerType.Data()));
   }
-  fLoader->UnloadHits();
 }
+
+//_____________________________________________________________________
+TString
+AliMUON::DigitizerType() const
+{
+  return fDigitizerType;
+}
+
 //_____________________________________________________________________
 void AliMUON::Digits2Raw()
 {
   // convert digits of the current event to raw data
-  AliMUONRawData* rawData;
-
-  rawData = new AliMUONRawData(fLoader,fMUONData);
-  if (!rawData->Digits2Raw()) AliInfo("pb writting raw data");
-  delete rawData;
-  return;
+  if (!fRawWriter)
+  {
+    fRawWriter = new AliMUONRawWriter(fMUONData);
+    if (fTriggerScalerEvent == kTRUE) 
+    {
+      fRawWriter->SetScalerEvent();
+    }
+  }
+  
+  if (!fRawWriter->Digits2Raw()) 
+  {
+    AliError("pb writting raw data");
+  }
 }
+
 //_______________________________________________________________________
 AliLoader* AliMUON::MakeLoader(const char* topfoldername)
 { 
@@ -468,5 +566,18 @@ AliMUONRawCluster *AliMUON::RawCluster(Int_t ichamber, Int_t icathod, Int_t iclu
     
     return  mRaw;
 }
-//________________________________________________________________________
 
+//________________________________________________________________________
+void
+AliMUON::ResetGeometryBuilder()
+{
+  // Only to be used by "experts" wanting to change the geometry builders
+  // to be used. 
+  // As the ctor of AliMUON now defines a default geometrybuilder, this
+  // ResetGeometryBuilder() must be called prior to call the 
+  // AddGeometryBuilder()
+  delete fGeometryBuilder;
+  fGeometryBuilder = new AliMUONGeometryBuilder(this);
+  fGeometryBuilder
+    ->AddBuilder(new AliMUONCommonGeometryBuilder(this));
+}