]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONDigitizerv2.cxx
Minor fixes in the event tag to take into account the new way of storing the trigger...
[u/mrichter/AliRoot.git] / MUON / AliMUONDigitizerv2.cxx
index 6780262d84a0fb69ec08f729659b81788ad9f2d9..0daf860981de7bd2d8920b971dd86116e5839c77 100644 (file)
 //
 /////////////////////////////////////////////////////////////////////////////////
 
+#include "AliMUON.h"
 #include "AliMUONData.h"
 #include "AliMUONLoader.h"
 #include "AliMUONConstants.h"
+#include "AliMUONChamber.h"
 #include "AliMUONDigit.h"
 #include "AliMUONDigitizerv2.h"
 #include "AliMUONTransientDigit.h"
+#include "AliMUONTriggerDecision.h"
+#include "AliLog.h"
 
 ClassImp(AliMUONDigitizerv2)
 
 //___________________________________________
-AliMUONDigitizerv2::AliMUONDigitizerv2() : AliMUONDigitizerv1()
+AliMUONDigitizerv2::AliMUONDigitizerv2() : AliMUONDigitizer()
 {
-       // Default ctor - don't use it
+/// Default ctor - don't use it
 }
 
 //___________________________________________
-AliMUONDigitizerv2::AliMUONDigitizerv2(AliRunDigitizer* manager) : AliMUONDigitizerv1(manager)
+AliMUONDigitizerv2::AliMUONDigitizerv2(AliRunDigitizer* manager) : AliMUONDigitizer(manager)
 {
-       // ctor which should be used
+/// ctor which should be used
 }
 
 //___________________________________________
 AliMUONDigitizerv2::~AliMUONDigitizerv2()
 {
-       // Destructor
+/// Destructor
 }
 
 //-----------------------------------------------------------------------
 void AliMUONDigitizerv2::GenerateTransientDigits()
 {
-// Loop over all chambers and s-digits in the input stream and create 
-// AliMUONTransientDigit objects from them. These are then added to fTDList.
-
-       if (GetDebug() > 1) 
-               Info("GenerateTransientDigits", "Generating transient digits using treeH = 0x%X");
+/// Loop over all chambers and s-digits in the input stream and create 
+/// AliMUONTransientDigit objects from them. These are then added to fTDList.
 
+       AliDebug(2,"Generating transient digits using treeH = 0x%X");
        //
        // Loop over SDigits
        Int_t ndig, k;
@@ -72,7 +74,7 @@ void AliMUONDigitizerv2::GenerateTransientDigits()
        for (Int_t ich = 0; ich < AliMUONConstants::NCh(); ich++)  // loop over chamber
        {
                fMUONData->ResetSDigits();
-               fMUONData->GetCathodeS(0);
+               fMUONData->GetSDigits();
                muonSDigits = fMUONData->SDigits(ich); 
                ndig = muonSDigits->GetEntriesFast();
                for (k = 0; k < ndig; k++)
@@ -80,29 +82,26 @@ void AliMUONDigitizerv2::GenerateTransientDigits()
                        sDigit = (AliMUONDigit*) muonSDigits->UncheckedAt(k);
                        MakeTransientDigitFromSDigit(ich,sDigit);
                }
-               fMUONData->ResetSDigits();
-               fMUONData->GetCathodeS(1);
-               muonSDigits = fMUONData->SDigits(ich); 
-               ndig=muonSDigits->GetEntriesFast();
-               for (k = 0; k < ndig; k++)
-               {
-                       sDigit = (AliMUONDigit*) muonSDigits->UncheckedAt(k);
-                       MakeTransientDigitFromSDigit(ich,sDigit);
-               };
+//             fMUONData->ResetSDigits();
+//             fMUONData->GetCathodeS(1);
+//             muonSDigits = fMUONData->SDigits(ich); 
+//             ndig=muonSDigits->GetEntriesFast();
+//             for (k = 0; k < ndig; k++)
+//             {
+//                     sDigit = (AliMUONDigit*) muonSDigits->UncheckedAt(k);
+//                     MakeTransientDigitFromSDigit(ich,sDigit);
+//             }
        } // SDigits loop, end loop over chamber
-};
+}
 
 //------------------------------------------------------------------------
 void AliMUONDigitizerv2::MakeTransientDigitFromSDigit(Int_t iChamber, AliMUONDigit* sDigit)
 {
-// Makes a transient digit from the specified s-digit from the specified chamber. 
-// Once the digit is created it is added to the fTDList.
+/// Makes a transient digit from the specified s-digit from the specified chamber. 
+/// Once the digit is created it is added to the fTDList.
 
-       if (GetDebug() > 3)
-               Info("MakeTransientDigitFromSDigit", 
-                       "Making transient digit from s-digit for chamber %d.", iChamber);
-       
-       Int_t digits[6];
+       AliDebug(4,Form("Making transient digit from s-digit for chamber %d.", iChamber));
+       Int_t digits[7];
        //
        // Creating a new TransientDigits from SDigit
        digits[0] = sDigit->PadX();  // Padx of the Digit
@@ -115,42 +114,60 @@ void AliMUONDigitizerv2::MakeTransientDigitFromSDigit(Int_t iChamber, AliMUONDig
                digits[4] = 0;
                
        digits[5] = sDigit->Hit();    // Hit number in the list
+       digits[6] = sDigit->DetElemId();
+
+       AliDebug(5,Form("Made digit from sDigit 0x%X: PadX %d\tPadY %d\tPlane %d\tCharge %d\tHit %d\tidDE %d",
+                       (void*)sDigit, digits[0], digits[1], digits[2], digits[3], digits[5], digits[6]));
 
-       if (GetDebug() > 4)
-               Info("MakeTransientDigitFromSDigit", 
-                       "Made digit from sDigit 0x%X: PadX %d\tPadY %d\tPlane %d\tCharge %d\tHit %d",
-                       (void*)sDigit, digits[0], digits[1], digits[2], digits[3], digits[5]);
        
        AliMUONTransientDigit* mTD = new AliMUONTransientDigit(iChamber, digits);
        // Copy list of tracks and trackcharge
-       for(Int_t itrack = 0; itrack < kMAXTRACKS; itrack++)
+       for(Int_t itrack = 0; itrack < sDigit->Ntracks(); ++itrack)
        {
                Int_t track = sDigit->Track(itrack);
                if (track < 0) break;  // Check if we reached the end of the track list.
                mTD->AddToTrackList( track + fMask, sDigit->TrackCharge(itrack) );
-       };
+       }
 
        OnCreateTransientDigit(mTD, sDigit);
        AddOrUpdateTransientDigit(mTD);
-};
+}
 
 //------------------------------------------------------------------------
-void AliMUONDigitizerv2::AddDigit(Int_t chamber, Int_t tracks[kMAXTRACKS], Int_t charges[kMAXTRACKS], Int_t digits[6])
+void AliMUONDigitizerv2::AddDigit(Int_t chamber, Int_t tracks[kMAXTRACKS], Int_t charges[kMAXTRACKS], Int_t digits[7])
 {
-// Override to add new digits to the digits tree TreeD.
+/// Override to add new digits to the digits tree TreeD.
        fMUONData->AddDigit(chamber, tracks, charges, digits);   
-};
+}
 
 //------------------------------------------------------------------------
-Bool_t AliMUONDigitizerv2::InitInputData(AliMUONLoader* muonloader)
+Int_t AliMUONDigitizerv2::GetSignalFrom(AliMUONTransientDigit* td)
 {
-// Overridden to initialize fMUONData to read from the s-digits tree TreeS. 
-// If the s-digits are not loaded then the muon loader is used to load the
-// s-digits into memory.
+/// Derived to apply the chamber response model to the digit. 
+/// Using AliMUONChamber::ResponseModel() for this.
 
-       if (GetDebug() > 2)
-               Info("InitInputData", "Loading s-digits in READ mode and setting the tree address.");
+       AliDebug(4, "Applying response of chamber to TransientDigit signal.");
+       //
+       //  Digit Response (noise, threshold, saturation, ...)
+       Int_t q = td->Signal(); 
+       AliMUONChamber& chamber = fMUON->Chamber(td->Chamber());
+       AliMUONResponse* response = chamber.ResponseModel();
+       q = response->DigitResponse(q, td);
+  if ( q >= response->Saturation() )
+  {
+    td->Saturated(kTRUE);
+  }
+       return q;
+}
+
+//------------------------------------------------------------------------
+Bool_t AliMUONDigitizerv2::InitInputData(AliMUONLoader* muonloader)
+{
+/// Overridden to initialize fMUONData to read from the s-digits tree TreeS. 
+/// If the s-digits are not loaded then the muon loader is used to load the
+/// s-digits into memory.
 
+       AliDebug(3,"Loading s-digits in READ mode and setting the tree address.");
        fMUONData->SetLoader(muonloader);
 
        if (muonloader->TreeS() == NULL)
@@ -158,21 +175,110 @@ Bool_t AliMUONDigitizerv2::InitInputData(AliMUONLoader* muonloader)
                muonloader->LoadSDigits("READ");
                if (muonloader->TreeS() == NULL)
                {
-                       Error("InitInputData", "Can not load the s-digits tree.");
+                       AliError("Can not load the s-digits tree.");
                        return kFALSE;
-               };
-       };
+               }
+       }
 
        fMUONData->SetTreeAddress("S");
        return kTRUE;
-};
+}
 
 //------------------------------------------------------------------------
 void AliMUONDigitizerv2::CleanupInputData(AliMUONLoader* muonloader)
 {
-// Overridden to release and unload s-digits from memory.
+/// Overridden to release and unload s-digits from memory.
 
-       if (GetDebug() > 2) Info("CleanupInputData", "Releasing loaded s-digits.");
+       AliDebug(3,"Releasing loaded s-digits.");
        fMUONData->ResetSDigits();
        muonloader->UnloadSDigits();
-};
+}
+
+//------------------------------------------------------------------------
+Bool_t AliMUONDigitizerv2::InitOutputData(AliMUONLoader* muonloader)
+{
+/// Derived to initialize the output digits tree TreeD, create it if necessary
+/// and sets the fMUONData tree address to treeD.
+
+       AliDebug(3, "Creating digits branch and setting the tree address.");
+
+       fMUONData->SetLoader(muonloader);
+
+       // New branch per chamber for MUON digit in the tree of digits
+       if (muonloader->TreeD() == NULL)
+       {
+               muonloader->MakeDigitsContainer();
+               if (muonloader->TreeD() == NULL)
+               {
+                       AliError("Could not create TreeD.");
+                       return kFALSE;
+               }
+       }
+
+       fMUONData->MakeBranch("D");
+       fMUONData->SetTreeAddress("D");
+       
+       return kTRUE;
+}
+
+//------------------------------------------------------------------------
+void AliMUONDigitizerv2::FillOutputData()
+{
+/// Derived to fill TreeD and resets the digit array in fMUONData.
+
+       AliDebug(3, "Filling trees with digits.");
+       fMUONData->Fill("D");
+       fMUONData->ResetDigits();
+}
+
+//------------------------------------------------------------------------
+void AliMUONDigitizerv2::CleanupOutputData(AliMUONLoader* muonloader)
+{
+/// Derived to write the digits tree and then unload the digits tree once written.
+
+       AliDebug(3, "Writing digits and releasing pointers.");
+       muonloader->WriteDigits("OVERWRITE");
+       muonloader->UnloadDigits();
+}
+
+//-----------------------------------------------------------------------
+
+void AliMUONDigitizerv2::CleanupTriggerArrays()
+{
+/// Cleanup trigger arrays
+
+  fTrigDec->ClearDigits();
+}
+
+//------------------------------------------------------------------------
+void AliMUONDigitizerv2::AddDigitTrigger(
+               Int_t chamber, Int_t tracks[kMAXTRACKS],
+               Int_t charges[kMAXTRACKS], Int_t digits[7],
+               Int_t digitindex
+       )
+{
+/// Derived to add digits to TreeD for trigger.
+  fTrigDec->AddDigit(chamber, tracks, charges, digits, digitindex); 
+}
+
+//------------------------------------------------------------------------
+void AliMUONDigitizerv2::FillTriggerOutput()
+{
+/// Derived to fill TreeD and resets the trigger array in fMUONData.
+
+       AliDebug(3,"Filling trees with trigger.");
+       fMUONData->Fill("GLT");
+       fMUONData->ResetTrigger();
+}
+
+//------------------------------------------------------------------------
+void AliMUONDigitizerv2::CreateTrigger()
+{
+/// Create trigger data
+
+  fMUONData->MakeBranch("GLT");
+  fMUONData->SetTreeAddress("GLT");
+  fTrigDec->Digits2Trigger(); 
+  FillTriggerOutput(); 
+
+}