more realistic time resolution as a function of energy (fit and parameters from Franc...
authordsilverm <dsilverm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 18 Apr 2011 14:17:12 +0000 (14:17 +0000)
committerdsilverm <dsilverm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 18 Apr 2011 14:17:12 +0000 (14:17 +0000)
EMCAL/AliEMCALDigitizer.cxx
EMCAL/AliEMCALDigitizer.h
EMCAL/AliEMCALSimParam.cxx
EMCAL/AliEMCALSimParam.h

index 011b441..97a282f 100644 (file)
@@ -138,13 +138,10 @@ AliEMCALDigitizer::AliEMCALDigitizer()
     fEventNames(0x0),
     fDigitThreshold(0),
     fMeanPhotonElectron(0),
-//    fPedestal(0), //Not used, remove?
-//    fSlope(0),    //Not used, remove?
     fPinNoise(0),
     fTimeDelay(0),
-    fTimeResolution(0),
-//    fTimeThreshold(0),    //Not used, remove?
-//    fTimeSignalLength(0), //Not used, remove?
+    fTimeResolutionPar0(0),
+    fTimeResolutionPar1(0),
     fADCchannelEC(0),
     fADCpedestalEC(0),
     fNADCEC(0),
@@ -169,13 +166,10 @@ AliEMCALDigitizer::AliEMCALDigitizer(TString alirunFileName, TString eventFolder
     fEventNames(0), 
     fDigitThreshold(0),
     fMeanPhotonElectron(0),
-//    fPedestal(0),//Not used, remove?
-//    fSlope(0),   //Not used, remove?
     fPinNoise(0),
     fTimeDelay(0),
-    fTimeResolution(0),
-//    fTimeThreshold(0),    //Not used, remove?
-//    fTimeSignalLength(0), //Not used, remove?
+    fTimeResolutionPar0(0),
+    fTimeResolutionPar1(0),
     fADCchannelEC(0),
     fADCpedestalEC(0),
     fNADCEC(0),
@@ -201,13 +195,10 @@ AliEMCALDigitizer::AliEMCALDigitizer(const AliEMCALDigitizer & d)
     fEventNames(d.fEventNames),
     fDigitThreshold(d.fDigitThreshold),
     fMeanPhotonElectron(d.fMeanPhotonElectron),
-//    fPedestal(d.fPedestal), //Not used, remove?
-//    fSlope(d.fSlope),       //Not used, remove?
     fPinNoise(d.fPinNoise),
     fTimeDelay(d.fTimeDelay),
-    fTimeResolution(d.fTimeResolution),
-//    fTimeThreshold(d.fTimeThreshold),       //Not used, remove?
-//    fTimeSignalLength(d.fTimeSignalLength), //Not used, remove?
+    fTimeResolutionPar0(d.fTimeResolutionPar0),
+    fTimeResolutionPar1(d.fTimeResolutionPar1),
     fADCchannelEC(d.fADCchannelEC),
     fADCpedestalEC(d.fADCpedestalEC),
     fNADCEC(d.fNADCEC),
@@ -230,13 +221,10 @@ AliEMCALDigitizer::AliEMCALDigitizer(AliRunDigitizer * rd)
     fEventNames(0),
     fDigitThreshold(0),
     fMeanPhotonElectron(0),
-//    fPedestal(0), //Not used, remove?
-//    fSlope(0.),   //Not used, remove?
     fPinNoise(0.),
     fTimeDelay(0.),
-    fTimeResolution(0.),
-//    fTimeThreshold(0),    //Not used, remove?
-//    fTimeSignalLength(0), //Not used, remove?
+    fTimeResolutionPar0(0.),
+    fTimeResolutionPar1(0.),
     fADCchannelEC(0),
     fADCpedestalEC(0),
     fNADCEC(0),
@@ -522,6 +510,7 @@ void AliEMCALDigitizer::Digitize(Int_t event)
     // until 10-02-2010 remove digits with energy smaller than fDigitThreshold 3*fPinNoise
     // now, remove digits with Digitized ADC smaller than fDigitThreshold = 3
     Float_t energy=0;
+    Float_t timeResolution = 0;
     for(i = 0 ; i < nEMC ; i++){
       digit = dynamic_cast<AliEMCALDigit*>( digits->At(i) ) ;
       if(digit){
@@ -532,8 +521,10 @@ void AliEMCALDigitizer::Digitize(Int_t event)
         //if(ampADC>2)printf("Digit energy %f, amp %d, amp cal %d, threshold %d\n",energy,digit->GetAmplitude(),ampADC,fDigitThreshold);
         if(ampADC < fDigitThreshold)
           digits->RemoveAt(i) ;
-        else 
-          digit->SetTime(gRandom->Gaus(digit->GetTime(),fTimeResolution) ) ;
+        else {
+         timeResolution = GetTimeResolution(energy);
+          digit->SetTime(gRandom->Gaus(digit->GetTime(),timeResolution) ) ;
+       }
       }// digit exists
     } // digit loop
     
@@ -702,6 +693,19 @@ void AliEMCALDigitizer::Exec(Option_t *option)
   } 
 }
 
+//__________________________________________________________________
+Float_t AliEMCALDigitizer::GetTimeResolution(Float_t energy) const
+{  
+  // From F. Blanco
+  Float_t res = -1;
+  if (energy > 0) {
+    res = TMath::Sqrt(fTimeResolutionPar0 + 
+                     fTimeResolutionPar1/(energy*energy) );
+  }
+
+  return res;
+}
+
 //____________________________________________________________________________ 
 void AliEMCALDigitizer::Digits2FastOR(TClonesArray* digitsTMP, TClonesArray* digitsTRG)
 {
@@ -802,13 +806,13 @@ void AliEMCALDigitizer::DigitalFastOR( Double_t time, Double_t dE, Int_t timeSam
        // id: 0..95
        const Int_t    reso = 11;      // 11-bit resolution ADC
        const Double_t vFSR = 1;       // Full scale input voltage range
-       const Double_t Ne   = 125;     // signal of the APD per MeV of energy deposit in a tower: 125 photo-e-/MeV @ M=30
+       const Double_t dNe   = 125;     // signal of the APD per MeV of energy deposit in a tower: 125 photo-e-/MeV @ M=30
        const Double_t vA   = .136e-6; // CSP output range: 0.136uV/e-
        const Double_t rise = 40e-9;   // rise time (10-90%) of the FastOR signal before shaping
        
        const Double_t kTimeBinWidth = 25E-9; // sampling frequency (40MHz)
        
-       Double_t vV = 1000. * dE * Ne * vA; // GeV 2 MeV
+       Double_t vV = 1000. * dE * dNe * vA; // GeV 2 MeV
        
        TF1 signalF("signal", AnalogFastORFunction, 0, nSamples * kTimeBinWidth, 3);
        signalF.SetParameter( 0,   vV ); 
@@ -908,7 +912,8 @@ void AliEMCALDigitizer::InitParameters()
   if (fPinNoise < 0.0001 ) 
     Warning("InitParameters", "No noise added\n") ; 
   fDigitThreshold     = simParam->GetDigitThreshold(); //fPinNoise * 3; // 3 * sigma
-  fTimeResolution     = simParam->GetTimeResolution(); //0.6e-9 ; // 600 pc
+  fTimeResolutionPar0 = simParam->GetTimeResolutionPar0(); 
+  fTimeResolutionPar1 = simParam->GetTimeResolutionPar1(); 
   fTimeDelay          = simParam->GetTimeDelay(); //600e-9 ; // 600 ns
 
   // These defaults are normally not used. 
@@ -918,8 +923,8 @@ void AliEMCALDigitizer::InitParameters()
 
   fNADCEC          = simParam->GetNADCEC();//(Int_t) TMath::Power(2,16) ;  // number of channels in Tower ADC - 65536
 
-  AliDebug(2,Form("Mean Photon Electron %d, Noise %f, Digit Threshold %d,Time Resolution %g,NADCEC %d",
-               fMeanPhotonElectron,fPinNoise,fDigitThreshold,fTimeResolution,fNADCEC));
+  AliDebug(2,Form("Mean Photon Electron %d, Noise %f, Digit Threshold %d,Time Resolution Par0 %g Par1 %g,NADCEC %d",
+               fMeanPhotonElectron,fPinNoise,fDigitThreshold,fTimeResolutionPar0,fTimeResolutionPar1,fNADCEC));
 
   // Not used anymore, remove?
   // fTimeSignalLength   = 1.0e-9 ;
@@ -1105,9 +1110,7 @@ void AliEMCALDigitizer::Unload()
 
 //_________________________________________________________________________________________
 void AliEMCALDigitizer::WriteDigits()
-{
-  
-  // Makes TreeD in the output file. 
+{ // Makes TreeD in the output file. 
   // Check if branch already exists: 
   //   if yes, exit without writing: ROOT TTree does not support overwriting/updating of 
   //      already existing branches. 
@@ -1150,8 +1153,7 @@ void AliEMCALDigitizer::WriteDigits()
 
 //__________________________________________________________________
 void AliEMCALDigitizer::WriteDigits(TClonesArray* digits, const char* branchName)
-{
-       //
+{ // overloaded method
        AliEMCALLoader *emcalLoader = dynamic_cast<AliEMCALLoader*>(AliRunLoader::Instance()->GetDetectorLoader("EMCAL"));
        if(emcalLoader){
     
index 1e7146c..a5dbfb8 100644 (file)
@@ -50,10 +50,10 @@ public:
   void    Exec(Option_t *option);               // Supervising method
 
   Int_t    GetDigitThreshold() const { return fDigitThreshold;}
-  //Float_t GetPedestal()       const { return fPedestal; }
   Float_t  GetPinNoise()       const { return fPinNoise;}
-  //Float_t GetSlope()          const { return fSlope; }
-  Double_t GetTimeResolution() const { return fTimeResolution ; }
+  Float_t GetTimeResolution(const Float_t energy) const;
+  Double_t GetTimeResolutionPar0() const { return fTimeResolutionPar0 ; }
+  Double_t GetTimeResolutionPar1() const { return fTimeResolutionPar1 ; }
   Double_t GetTimeDelay()      const { return fTimeDelay ; }
   Float_t  GetECAchannel()     const { return fADCchannelEC ; }
   Float_t  GetECApedestal()    const { return fADCpedestalEC ; }
@@ -106,13 +106,10 @@ private:
 
   Int_t    fDigitThreshold  ;     // Threshold for storing digits in EMC, ACD units
   Int_t    fMeanPhotonElectron ;  // number of photon electrons per GeV deposited energy 
-  //Float_t fPedestal ;           // Calibration parameters //Not used, remove?
-  //Float_t fSlope ;              // read from SDigitizer   //Not used, remove?
   Float_t  fPinNoise ;            // Electronics noise in EMC
   Double_t fTimeDelay;            // Time delay to reproduce data delay
-  Double_t fTimeResolution ;      // Time resolution of FEE electronics
-  //Float_t fTimeThreshold ;        // Threshold to start timing for given crystall //Not used, remove?
-  //Float_t fTimeSignalLength ;     // Length of the timing signal //Not used, remove?
+  Double_t fTimeResolutionPar0 ;  // Time resolution of FEE electronics
+  Double_t fTimeResolutionPar1 ;  // Time resolution of FEE electronics
   Float_t fADCchannelEC ;         // width of one ADC channel in EC section (GeV)
   Float_t fADCpedestalEC ;        // pedestal for one ADC channel
   Int_t   fNADCEC ;               // number of channels in EC section ADC
@@ -123,7 +120,7 @@ private:
        
   AliEMCALCalibData * fCalibData; //Calibration data pointer
 
-  ClassDef(AliEMCALDigitizer,9)  // description 
+  ClassDef(AliEMCALDigitizer,10)  // description 
 };
 
 
index e16c900..9f9ec0e 100644 (file)
@@ -37,9 +37,8 @@ fDigitThreshold(0),
 fMeanPhotonElectron(0),
 fPinNoise(0),
 fTimeDelay(0),
-fTimeResolution(0),
-//fTimeThreshold(0),    
-//fTimeSignalLength(0),
+fTimeResolutionPar0(0),
+fTimeResolutionPar1(0),
 fNADCEC(0),//Digitizer
 fA(0.),
 fB(0.),
@@ -51,12 +50,11 @@ fECPrimThreshold(0.) //SDigitizer
        fMeanPhotonElectron = 4400;  // electrons per GeV 
        fPinNoise           = 0.012; // pin noise in GeV from analysis test beam data 
        fDigitThreshold     = 3; // 3 ADC counts not anymore cut in energy: //fPinNoise * 3; // 3 * sigma
-       fTimeResolution     = 0.6e-9 ; // 600 pc
-       fTimeDelay          = 600e-9 ; // 600 nc
+       fTimeResolutionPar0 = 0.26666; // From F. Blanco: 0.51639^2
+       fTimeResolutionPar1 = 1.45861; // From F. Blanco: 1.20773^2
+       fTimeDelay          = 600e-9 ; // 600 ns
 
-       //fTimeSignalLength   = 1.0e-9 ;
        fNADCEC             = (Int_t) TMath::Power(2,16) ; // number of channels in Tower ADC - 65536
-       //fTimeThreshold      = 0.001*10000000 ; // Means 1 MeV in terms of SDigits amplitude ??
        
        //SDigitizer
        fA                  = 0;
@@ -73,9 +71,8 @@ fDigitThreshold(0),
 fMeanPhotonElectron(0),
 fPinNoise(0),
 fTimeDelay(0),
-fTimeResolution(0),
-//fTimeThreshold(0),    
-//fTimeSignalLength(0),//Digitizer
+fTimeResolutionPar0(0),
+fTimeResolutionPar1(0),
 fNADCEC(0),
 fA(0.),
 fB(0.),
@@ -120,7 +117,8 @@ void AliEMCALSimParam::Print(Option_t *) const
        printf("=== Parameters in Digitizer === \n");
        printf("\t Electronics noise in EMC (fPinNoise)       = %f\n", fPinNoise) ;
        printf("\t Threshold  in EMC  (fDigitThreshold)       = %d\n", fDigitThreshold)  ;
-       printf("\t Time Resolution (fTimeResolution)          = %g\n", fTimeResolution) ;
+       printf("\t Time Resolution (fTimeResolutionPar0)          = %g\n", fTimeResolutionPar0) ;
+       printf("\t Time Resolution (fTimeResolutionPar1)          = %g\n", fTimeResolutionPar1) ;
        printf("\t Time Delay (fTimeDelay)                    = %g\n", fTimeDelay) ;
        printf("\t Mean Photon-Electron (fMeanPhotonElectron) = %d\n", fMeanPhotonElectron)  ;
        printf("\t N channels in EC section ADC (fNADCEC)     = %d\n", fNADCEC) ;
index 7caff02..a607ddb 100644 (file)
@@ -29,13 +29,15 @@ public:
        Int_t    GetDigitThreshold()     const { return fDigitThreshold;}
        Float_t  GetPinNoise()           const { return fPinNoise;}
        Double_t GetTimeDelay()          const { return fTimeDelay ; }
-       Double_t GetTimeResolution()     const { return fTimeResolution ; }
+       Double_t GetTimeResolutionPar0()     const { return fTimeResolutionPar0 ; }
+       Double_t GetTimeResolutionPar1()     const { return fTimeResolutionPar1 ; }
        Int_t    GetNADCEC()             const { return fNADCEC ; }
        Int_t    GetMeanPhotonElectron() const { return fMeanPhotonElectron ; }
        void     SetDigitThreshold(Int_t val)    { fDigitThreshold     = val ; }
        void     SetPinNoise(Float_t val)        { fPinNoise           = val ; }
        void     SetTimeDelay(Double_t val)      { fTimeDelay          = val ; }
-       void     SetTimeResolution(Double_t val) { fTimeResolution     = val ; }
+       void     SetTimeResolutionPar0(Double_t val) { fTimeResolutionPar0 = val ; }
+       void     SetTimeResolutionPar1(Double_t val) { fTimeResolutionPar1 = val ; }
        void     SetNADCED(Int_t val)            { fNADCEC             = val ; }
        void     SetMeanPhotonElectron(Int_t val){ fMeanPhotonElectron = val ; }
 
@@ -58,9 +60,8 @@ private:
        Int_t    fMeanPhotonElectron ;  // number of photon electrons per GeV deposited energy 
        Float_t  fPinNoise ;            // Electronics noise in EMC
        Double_t fTimeDelay;            // Time delay to reproduce data delay
-       Double_t fTimeResolution ;      // Time resolution of FEE electronics
-       //Float_t fTimeThreshold ;        // Threshold to start timing for given crystall
-       //Float_t fTimeSignalLength ;     // Length of the timing signal 
+       Double_t fTimeResolutionPar0 ;  // Time resolution of FEE electronics
+       Double_t fTimeResolutionPar1 ;  // Time resolution of FEE electronics
        Int_t    fNADCEC ;              // number of channels in EC section ADC
        
        // SDigitizer
@@ -68,7 +69,7 @@ private:
        Float_t fB ;                     // Slope Digitizition parameters
        Float_t fECPrimThreshold ;       // To store primary if EC Shower Elos > threshold
                
-  ClassDef(AliEMCALSimParam,3)
+  ClassDef(AliEMCALSimParam,4)
 };
 
 #endif