// providing simulation data management
//-----------------------------------------------------------------------------
-#include "Riostream.h"
-
-#include <AliPDG.h>
-#include <TBRIK.h>
-#include <TCanvas.h>
-#include <TDirectory.h>
-#include <TFile.h>
-#include <TGeometry.h>
-#include <TMinuit.h>
-#include <TNode.h>
-#include <TNtuple.h>
-#include <TObjArray.h>
-#include <TObject.h>
-#include <TObjectTable.h>
-#include <TPad.h>
-#include <TParticle.h>
-#include <TROOT.h>
-#include <TRandom.h>
-#include <TRotMatrix.h>
-#include <TTUBE.h>
-#include <TTUBE.h>
-#include <TTree.h>
-#include <TVector.h>
-#include <TVirtualMC.h>
-
-//#include "AliHeader.h"
-#include "AliLoader.h"
-#include "AliCDBManager.h"
-#include "AliRunDigitizer.h"
-#include "AliMC.h"
-#include "AliRun.h"
-#include "AliRawDataHeaderSim.h"
+#include <TTree.h>
#include "AliMUON.h"
-#include "AliMUONChamberTrigger.h"
-#include "AliMUONConstants.h"
-#include "AliMUONHit.h"
-#include "AliMUONGeometry.h"
-#include "AliMUONGeometryTransformer.h"
-#include "AliMUONGeometryBuilder.h"
-#include "AliMUONCommonGeometryBuilder.h"
-#include "AliMUONVGeometryBuilder.h"
-#include "AliMUONRawWriter.h"
-#include "AliLog.h"
#include "AliMUONSDigitizerV2.h"
#include "AliMUONDigitizerV3.h"
#include "AliMUONDigitMaker.h"
+#include "AliMUONDigit.h"
#include "AliMUONCalibrationData.h"
+#include "AliMUONDigitStoreV1.h"
+#include "AliMUONTriggerStoreV1.h"
+#include "AliMUONHitStoreV1.h"
+
+#include "AliMUONChamberTrigger.h"
+#include "AliMUONConstants.h"
+#include "AliMUONGeometry.h"
+#include "AliMUONGeometryTransformer.h"
+#include "AliMUONGeometryBuilder.h"
+#include "AliMUONVGeometryBuilder.h"
+#include "AliMUONCommonGeometryBuilder.h"
#include "AliMUONSt1GeometryBuilderV2.h"
#include "AliMUONSt2GeometryBuilderV2.h"
#include "AliMUONSlatGeometryBuilder.h"
#include "AliMUONTriggerGeometryBuilder.h"
+#include "AliMUONDigitCalibrator.h"
+#include "AliMUONRecoParam.h"
+#include "AliCDBManager.h"
+#include "AliCDBEntry.h"
-#include "AliMUONDigitStoreV1.h"
-#include "AliMUONVTriggerStore.h"
-#include "AliMUONHitStoreV1.h"
+#include "AliMUONRawWriter.h"
+
+#include "AliLoader.h"
+#include "AliCDBManager.h"
+#include "AliDigitizationInput.h"
+#include "AliMC.h"
+#include "AliRun.h"
+#include "AliRawDataHeaderSim.h"
+#include "AliLog.h"
+
+#include <TObjArray.h>
// Defaults parameters for Z positions of chambers
// taken from values for "stations" in AliMUON::AliMUON
fMaxDestepAlu(0.),
fMaxIterPad(0),
fCurIterPad(0),
+ fIsMaxStep(kTRUE),
fTriggerScalerEvent(kFALSE),
fTriggerResponseV1(kFALSE),
fTriggerCoinc44(0),
- fTriggerEffCells(0),
+ fTriggerEffCells(kTRUE),
fDigitizerWithNoise(1),
+ fDigitizerNSigmas(4.0),
fIsTailEffect(kTRUE),
+ fConvertTrigger(kFALSE),
fRawWriter(0x0),
fDigitMaker(0x0),
fHitStore(0x0),
fDigitStoreConcreteClassName(),
- fCalibrationData(0x0)
+ fCalibrationData(0x0),
+ fDigitCalibrator(0x0)
{
/// Default Constructor
fMaxDestepAlu(-1), // in the calculation of the tracking parameters
fMaxIterPad(0),
fCurIterPad(0),
+ fIsMaxStep(kTRUE),
fTriggerScalerEvent(kFALSE),
fTriggerResponseV1(kFALSE),
fTriggerCoinc44(0),
- fTriggerEffCells(0),
+ fTriggerEffCells(kTRUE),
fDigitizerWithNoise(1),
+ fDigitizerNSigmas(4.0),
fIsTailEffect(kTRUE),
+ fConvertTrigger(kFALSE),
fRawWriter(0x0),
fDigitMaker(new AliMUONDigitMaker),
fHitStore(0x0),
fDigitStoreConcreteClassName("AliMUONDigitStoreV2S"),
- fCalibrationData()
-
+ fCalibrationData(),
+ fDigitCalibrator(0x0)
{
/// Standard constructor
delete fDigitMaker;
delete fHitStore;
delete fCalibrationData;
+ delete fDigitCalibrator;
}
//_____________________________________________________________________________
fGeometryBuilder->AddBuilder(geomBuilder);
}
-//____________________________________________________________________
-void AliMUON::BuildGeometry()
-{
-/// Geometry for event display
-
-
-// for (Int_t i = 0; i < AliMUONConstants::NCh(); i++)
-// this->Chamber(i).SegmentationModel2(1)->Draw("eventdisplay");// to be check !
-
-
-}
-
//____________________________________________________________________
const AliMUONGeometry* AliMUON::GetGeometry() const
{
}
//____________________________________________________________________
-AliDigitizer* AliMUON::CreateDigitizer(AliRunDigitizer* manager) const
+AliDigitizer* AliMUON::CreateDigitizer(AliDigitizationInput* digInput) const
{
/// Return digitizer
- AliMUONDigitizerV3* digitizer = new AliMUONDigitizerV3(manager, fDigitizerWithNoise);
- digitizer->setCalibrationData(fCalibrationData);
+ AliMUONDigitizerV3* digitizer = new AliMUONDigitizerV3(digInput, fDigitizerWithNoise);
+ AliMUONDigitizerV3::SetNSigmas(fDigitizerNSigmas);
+ digitizer->SetCalibrationData(fCalibrationData,GetRecoParam());
return digitizer;
}
/// Perform Hits2Digits using SDigitizerV2
AliMUONSDigitizerV2 sdigitizer;
- sdigitizer.ExecuteTask();
+ sdigitizer.Digitize();
}
//_____________________________________________________________________
//_____________________________________________________________________
Bool_t AliMUON::Raw2SDigits(AliRawReader* rawReader)
{
-/// Convert raw data to SDigit
-
- fLoader->LoadDigits("READ");
+ /// Convert raw data to SDigit
+
if (!fLoader->TreeS()) fLoader->MakeSDigitsContainer();
-
+
TTree* treeS = fLoader->TreeS();
- AliMUONVDigitStore* sDigitStore = new AliMUONDigitStoreV1;
+ AliMUONVDigitStore* sDigitStore = AliMUONVDigitStore::Create(DigitStoreClassName());
+ AliMUONVTriggerStore* triggerStore = 0x0;
+
sDigitStore->Connect(*treeS);
+
+ if (!fDigitMaker) fDigitMaker = new AliMUONDigitMaker;
+
+ if (fConvertTrigger) {
+ triggerStore = new AliMUONTriggerStoreV1;
+ triggerStore->Connect(*treeS,true);
+ fDigitMaker->SetMakeTriggerDigits(true);
+ }
+
+ if (!fDigitCalibrator)
+ {
+ AliMUONRecoParam* recoParam = GetRecoParam();
+
+ if (!recoParam)
+ {
+ AliFatal("Cannot work without recoparams !");
+ }
+
+ fDigitCalibrator = new AliMUONDigitCalibrator(*fCalibrationData,recoParam);
+ }
- fDigitMaker->Raw2Digits(rawReader,sDigitStore,0x0);
+ fDigitMaker->Raw2Digits(rawReader,sDigitStore,triggerStore);
+
+ fDigitCalibrator->Calibrate(*sDigitStore);
+ TIter next(sDigitStore->CreateIterator());
+ AliMUONDigit* sdigit;
+
+ // now tweak the digits to make them "as fresh as possible", i.e.
+ // reset their calibrated status, as they'll be calibrated again
+ // once embedded.
+ while ( ( sdigit = static_cast<AliMUONDigit*>(next()) ) )
+ {
+ sdigit->Calibrated(kFALSE);
+ }
+
+ treeS->Fill();
+
fLoader->WriteSDigits("OVERWRITE");
-
+
fLoader->UnloadSDigits();
-
+
delete sDigitStore;
+
+ delete triggerStore;
return kTRUE;
}
}
//____________________________________________________________________
-Bool_t AliMUON::UsingFastTrackerDecoder() const
+AliMUONRecoParam* AliMUON::GetRecoParam() const
{
-/// Checks to see if we are using the fast decoder for tracker DDL streams.
+ AliMUONRecoParam* recoParam = 0x0;
- if ( ! fDigitMaker ) {
- AliError("Digit maker is not instantiated.");
- return kFALSE;
- }
-
- return fDigitMaker->UsingFastTrackerDecoder();
-}
-
-//____________________________________________________________________
-Bool_t AliMUON::UsingFastTriggerDecoder() const
-{
-/// Checks to see if we are using the fast decoder for trigger DDL streams.
-
- if ( ! fDigitMaker ) {
- AliError("Digit maker is not instantiated.");
- return kFALSE;
- }
-
- return fDigitMaker->UsingFastTriggerDecoder();
-}
-
-//____________________________________________________________________
-void AliMUON::SetFastTrackerDecoder(Bool_t useFastDecoder)
-{
-/// Set fast raw data decoder
+ AliCDBEntry* entry = AliCDBManager::Instance()->Get("MUON/Calib/RecoParam");
- if ( ! fDigitMaker ) {
- AliError("Digit maker is not instantiated.");
- return;
+ if (entry)
+ {
+ // load recoParam according OCDB content (single or array)
+ if (!(recoParam = dynamic_cast<AliMUONRecoParam*>(entry->GetObject())))
+ {
+ TObjArray* recoParamArray = static_cast<TObjArray*>(entry->GetObject());
+
+ for(Int_t i = 0; i < recoParamArray->GetEntriesFast(); ++i)
+ {
+ recoParam = static_cast<AliMUONRecoParam*>(recoParamArray->UncheckedAt(i));
+ if (recoParam && recoParam->IsDefault()) break;
+ recoParam = 0x0;
+ }
+ }
}
-
- fDigitMaker->SetFastTrackerDecoder(useFastDecoder);
+ return recoParam;
}
-//____________________________________________________________________
-void AliMUON::SetFastTriggerDecoder(Bool_t useFastDecoder)
-{
-/// Set fast raw data decoder
-
- if ( ! fDigitMaker ) {
- AliError("Digit maker is not instantiated.");
- return;
- }
-
- fDigitMaker->SetFastTriggerDecoder(useFastDecoder);
-}