#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.};
fMaxDestepGas(0.),
fMaxDestepAlu(0.),
fMaxIterPad(0),
- fCurIterPad(0)
+ fCurIterPad(0),
+ fTriggerScalerEvent(kFALSE),
+ fSDigitizerType(""),
+ fDigitizerType(""),
+ fRawWriter(0x0)
{
// Default Constructor
//
}
//__________________________________________________________________
-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()),
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;
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());
delete fMUONData;
delete fGeometryBuilder;
delete fSegmentation;
+ delete fRawWriter;
}
//________________________________________________________________________
//____________________________________________________________________
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()
{
//_____________________________________________________________________
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)
{
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));
+}