]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUON.cxx
- Disentangle masks effect from trigger chamber efficiency estimation.
[u/mrichter/AliRoot.git] / MUON / AliMUON.cxx
index 8fa0e6e17511ae8ee1dfee4cf117f67a98ed29d1..adb3ab3c580a259e54507528983de67b9f707cfe 100644 (file)
 // providing simulation data management 
 //-----------------------------------------------------------------------------
 
-#include "Riostream.h"
-
-#include <AliPDG.h>
-#include <TCanvas.h>
-#include <TDirectory.h>
-#include <TFile.h>
-#include <TMinuit.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 <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 "AliRunDigitizer.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
@@ -110,17 +98,21 @@ AliMUON::AliMUON()
     fMaxDestepAlu(0.),
     fMaxIterPad(0),
     fCurIterPad(0),
+    fIsMaxStep(kTRUE),
     fTriggerScalerEvent(kFALSE),
     fTriggerResponseV1(kFALSE),
     fTriggerCoinc44(0),
     fTriggerEffCells(0),
     fDigitizerWithNoise(1),
+    fDigitizerNSigmas(4.0),
     fIsTailEffect(kTRUE),
+    fConvertTrigger(kFALSE),
     fRawWriter(0x0),
     fDigitMaker(0x0),
     fHitStore(0x0),
     fDigitStoreConcreteClassName(),
-    fCalibrationData(0x0)
+    fCalibrationData(0x0),
+    fDigitCalibrator(0x0)
 {
 /// Default Constructor
     
@@ -145,18 +137,21 @@ AliMUON::AliMUON(const char *name, const char* title)
     fMaxDestepAlu(-1), // in the calculation of the tracking parameters
     fMaxIterPad(0),
     fCurIterPad(0),
+    fIsMaxStep(kTRUE),
     fTriggerScalerEvent(kFALSE),
     fTriggerResponseV1(kFALSE),
     fTriggerCoinc44(0),
     fTriggerEffCells(0),
     fDigitizerWithNoise(1),
+    fDigitizerNSigmas(4.0),
     fIsTailEffect(kTRUE),
+    fConvertTrigger(kFALSE),
     fRawWriter(0x0),
     fDigitMaker(new AliMUONDigitMaker),
     fHitStore(0x0),
     fDigitStoreConcreteClassName("AliMUONDigitStoreV2S"),
-    fCalibrationData()
-
+    fCalibrationData(),
+    fDigitCalibrator(0x0)
 {
   /// Standard constructor  
   
@@ -220,6 +215,7 @@ AliMUON::~AliMUON()
   delete fDigitMaker;
   delete fHitStore;
   delete fCalibrationData;
+  delete fDigitCalibrator;
 }
 
 //_____________________________________________________________________________
@@ -448,6 +444,7 @@ AliDigitizer* AliMUON::CreateDigitizer(AliRunDigitizer* manager) const
 /// Return digitizer
   
   AliMUONDigitizerV3* digitizer = new AliMUONDigitizerV3(manager, fDigitizerWithNoise);
+  AliMUONDigitizerV3::SetNSigmas(fDigitizerNSigmas);
   digitizer->SetCalibrationData(fCalibrationData);
   return digitizer;
 }
@@ -522,23 +519,81 @@ void AliMUON::Digits2Raw()
 //_____________________________________________________________________
 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 = 0x0;
+    
+    AliCDBEntry* entry = AliCDBManager::Instance()->Get("MUON/Calib/RecoParam");
+    
+    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;
+        }        
+      }      
+    }
+    
+    if (!recoParam)
+    {
+      AliFatal("Cannot work without recoparams !");
+    }
+    
+    TString calibMode = recoParam->GetCalibrationMode();
+  
+    fDigitCalibrator = new AliMUONDigitCalibrator(*fCalibrationData,recoParam,calibMode.Data());
+  }
   
-  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;
 }
@@ -612,55 +667,4 @@ Int_t  AliMUON::GetDigitizerWithNoise() const
     
 }  
 
-//____________________________________________________________________
-Bool_t AliMUON::UsingFastTrackerDecoder() const
-{
-/// Checks to see if we are using the fast decoder for tracker DDL streams.
-
-  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 
-
-  if ( ! fDigitMaker ) {
-    AliError("Digit maker is not instantiated.");
-    return;
-  }
-
-  fDigitMaker->SetFastTrackerDecoder(useFastDecoder);
-}
-
-//____________________________________________________________________
-void AliMUON::SetFastTriggerDecoder(Bool_t useFastDecoder)
-{
-/// Set fast raw data decoder 
-
-  if ( ! fDigitMaker ) {
-    AliError("Digit maker is not instantiated.");
-    return;
-  }
-
-  fDigitMaker->SetFastTriggerDecoder(useFastDecoder);
-}