]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - VZERO/AliVZERODigitizer.cxx
PMT signal shape added to the digitizer. The shape is extracted from real data using...
[u/mrichter/AliRoot.git] / VZERO / AliVZERODigitizer.cxx
index 2a857b59066b0d03aa798e0b2112c7832fd18507..1c851de8a923379ad0306fb810ecb831608416f2 100644 (file)
@@ -31,6 +31,7 @@
 #include <TGeoPhysicalNode.h>
 #include <AliGeomManager.h>
 #include <TRandom.h>
+#include <TF1.h>
 
 // --- AliRoot header files ---
 #include "AliVZEROConst.h"
@@ -60,7 +61,8 @@ ClassImp(AliVZERODigitizer)
                     fNdigits(0),
                     fDigits(0),
                     fCollisionMode(0),
-                    fBeamEnergy(0.)
+                    fBeamEnergy(0.),
+                    fSignalShape(NULL)
    
 {
   // default constructor
@@ -73,6 +75,9 @@ ClassImp(AliVZERODigitizer)
 //    fPMGain = TMath::Power((fPMVoltage / 112.5) ,7.04277); 
    
 //   fCalibData = GetCalibData();
+
+  fSignalShape = new TF1("VZEROSignalShape",this,&AliVZERODigitizer::SignalShape,0,200,6,"AliVZERODigitizer","SignalShape");
+  fSignalShape->SetParameters(0,1.57345e1,-4.25603e-1,2.9,6.40982,3.69339e-01);
 }
 
 //____________________________________________________________________________ 
@@ -85,7 +90,8 @@ ClassImp(AliVZERODigitizer)
                     fNdigits(0),
                      fDigits(0),
                     fCollisionMode(0),
-                     fBeamEnergy(0.)
+                     fBeamEnergy(0.),
+                    fSignalShape(NULL)
                                        
 {
   // constructor
@@ -98,6 +104,9 @@ ClassImp(AliVZERODigitizer)
 //   fPMGain = TMath::Power( (fPMVoltage / 112.5) ,7.04277 );
   
 //  fCalibData = GetCalibData();
+  fSignalShape = new TF1("VZEROSignalShape",this,&AliVZERODigitizer::SignalShape,0,200,6,"AliVZERODigitizer","SignalShape");
+  fSignalShape->SetParameters(0,1.57345e1,-4.25603e-1,2.9,6.40982,3.69339e-01);
   
 }
            
@@ -111,6 +120,11 @@ ClassImp(AliVZERODigitizer)
     delete fDigits;
     fDigits=0; 
   }
+
+  if (fSignalShape) {
+    delete fSignalShape;
+    fSignalShape = NULL;
+  }
 }
 
 //_____________________________________________________________________________
@@ -438,4 +452,15 @@ Int_t AliVZERODigitizer::GetPMNumber(Int_t cell) const
   return pmNumber[cell];       
 }
 
-
+double AliVZERODigitizer::SignalShape(double *x, double *par)
+{
+  Double_t xx = x[0];
+  if (xx <= par[0]) return 0;
+  Double_t a = 1./TMath::Power((xx-par[0])/par[1],1./par[2]);
+  if (xx <= par[3]) return a;
+  Double_t b = 1./TMath::Power((xx-par[3])/par[4],1./par[5]);
+  //  Double_t f = TMath::Min(a,b);
+  Double_t f = a*b/(a+b);
+  AliDebug(100,Form("x=%f func=%f",xx,f));
+  return f;
+}