Corrected ApplyResponseToTrackerDigit():
authorivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 22 Mar 2006 14:46:25 +0000 (14:46 +0000)
committerivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 22 Mar 2006 14:46:25 +0000 (14:46 +0000)
- the de-calibration is applied on the physics signal (then at
  digit::Signal() )
- noise is independent of the gain. (It is a constant in the dynamics range
  of the electronics. Indeed, pedestal data is the results from the FEE and
  gain is been already taken account. Then the noise need simply to be added
  to digit::signal/gainMean.
- pedestal is added after.
Then acd=(signal/gainMean) + adcNoise + pedestal if we have a physic signal
and adc=adcNoise+Pedestal if it is a noisy pads.
(Alexandre)

MUON/AliMUONDigitizerV3.cxx

index 00625b45f7160511980cffbeddb133c30ac4802a..c3ba71044b27168aa7a9a6d5105a1ed3b3bc624d 100644 (file)
@@ -160,10 +160,16 @@ AliMUONDigitizerV3::ApplyResponseToTrackerDigit(AliMUONDigit& digit, Bool_t addN
   // - add a pedestal (thus decalibrating the digit)
   // - sets the signal to zero if below 3*sigma of the noise
   //
-  
+
   static const Int_t kMaxADC = (1<<12)-1; // We code the charge on a 12 bits ADC.
-  
+
   Float_t signal = digit.Signal();
+
+  if ( !addNoise )
+    {
+      digit.SetADC(TMath::Nint(signal));
+      return;
+    }
   
   Int_t detElemId = digit.DetElemId();
   
@@ -172,51 +178,48 @@ AliMUONDigitizerV3::ApplyResponseToTrackerDigit(AliMUONDigit& digit, Bool_t addN
   
   AliMUONVCalibParam* pedestal = fCalibrationData->Pedestals(detElemId,manuId);
   if (!pedestal)
-  {
-    AliFatal(Form("Could not get pedestal for DE=%d manuId=%d",
-                  detElemId,manuId));    
-  }
+    {
+      AliFatal(Form("Could not get pedestal for DE=%d manuId=%d",
+                   detElemId,manuId));    
+    }
   Float_t pedestalMean = pedestal->ValueAsFloat(manuChannel,0);
   Float_t pedestalSigma = pedestal->ValueAsFloat(manuChannel,1);
-
+  
   AliMUONVCalibParam* gain = fCalibrationData->Gains(detElemId,manuId);
   if (!gain)
-  {
-    AliFatal(Form("Could not get gain for DE=%d manuId=%d",
-                  detElemId,manuId));    
-  }    
+    {
+      AliFatal(Form("Could not get gain for DE=%d manuId=%d",
+                   detElemId,manuId));    
+    }    
   Float_t gainMean = gain->ValueAsFloat(manuChannel,0);
 
-  if ( addNoise )
-  {
-    Float_t adcNoise = gRandom->Gaus(0.0,pedestalSigma);
-  
-    signal += adcNoise*gainMean;
-  }
-  
+  Float_t adcNoise = gRandom->Gaus(0.0,pedestalSigma);
+     
   Int_t adc;
-  
+
   if ( gainMean < 1E-6 )
-  {
-    AliError(Form("Got a too small gain %e for DE=%d manuId=%d manuChannel=%d. "
-                  "Setting signal to 0.",
-                  gainMean,detElemId,manuId,manuChannel));
-    adc = 0;
-  }
-  else
-  {
-    adc = TMath::Nint( signal / gainMean + pedestalMean );
-    
-    if ( adc <= pedestalMean + fgkNSigmas*pedestalSigma ) 
     {
+      AliError(Form("Got a too small gain %e for DE=%d manuId=%d manuChannel=%d. "
+                   "Setting signal to 0.",
+                   gainMean,detElemId,manuId,manuChannel));
       adc = 0;
     }
-  }
+  else
+    {
+      adc = TMath::Nint( signal / gainMean + pedestalMean + adcNoise);///
+      
+      if ( adc <= pedestalMean + fgkNSigmas*pedestalSigma ) 
+       {
+         adc = 0;
+       }
+    }
+  
   // be sure we stick to 12 bits.
   if ( adc > kMaxADC )
-  {
-    adc = kMaxADC;
-  }
+    {
+      adc = kMaxADC;
+    }
+  
   digit.SetPhysicsSignal(TMath::Nint(signal));
   digit.SetSignal(adc);
   digit.SetADC(adc);
@@ -621,8 +624,9 @@ AliMUONDigitizerV3::GenerateNoisyDigitsForOneCathode(Int_t detElemId, Int_t cath
     Float_t pedestalSigma = pedestals->ValueAsFloat(manuChannel,1);
     
     Double_t ped = fNoiseFunction->GetRandom()*pedestalSigma;
-    
+
     d.SetSignal(TMath::Nint(ped+pedestalMean+0.5));
+    d.SetPhysicsSignal(0);
     d.NoiseOnly(kTRUE);
     AliDebug(3,Form("Adding a pure noise digit :"));
     StdoutToAliDebug(3,cout << "Before Response: " << endl;