From a2f8e711875b4efba5dbbf386665b7007736a07d Mon Sep 17 00:00:00 2001 From: dsilverm Date: Mon, 18 Apr 2011 14:17:12 +0000 Subject: [PATCH] more realistic time resolution as a function of energy (fit and parameters from Francesco Blanco) --- EMCAL/AliEMCALDigitizer.cxx | 66 +++++++++++++++++++------------------ EMCAL/AliEMCALDigitizer.h | 15 ++++----- EMCAL/AliEMCALSimParam.cxx | 20 +++++------ EMCAL/AliEMCALSimParam.h | 13 ++++---- 4 files changed, 56 insertions(+), 58 deletions(-) diff --git a/EMCAL/AliEMCALDigitizer.cxx b/EMCAL/AliEMCALDigitizer.cxx index 011b4419438..97a282fa4d5 100644 --- a/EMCAL/AliEMCALDigitizer.cxx +++ b/EMCAL/AliEMCALDigitizer.cxx @@ -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( 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(AliRunLoader::Instance()->GetDetectorLoader("EMCAL")); if(emcalLoader){ diff --git a/EMCAL/AliEMCALDigitizer.h b/EMCAL/AliEMCALDigitizer.h index 1e7146c26b5..a5dbfb8299b 100644 --- a/EMCAL/AliEMCALDigitizer.h +++ b/EMCAL/AliEMCALDigitizer.h @@ -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 }; diff --git a/EMCAL/AliEMCALSimParam.cxx b/EMCAL/AliEMCALSimParam.cxx index e16c9006026..9f9ec0eb1d0 100644 --- a/EMCAL/AliEMCALSimParam.cxx +++ b/EMCAL/AliEMCALSimParam.cxx @@ -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) ; diff --git a/EMCAL/AliEMCALSimParam.h b/EMCAL/AliEMCALSimParam.h index 7caff02221c..a607ddb655d 100644 --- a/EMCAL/AliEMCALSimParam.h +++ b/EMCAL/AliEMCALSimParam.h @@ -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 -- 2.39.3