X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSPulseGenerator.cxx;h=dca6f0867a9000072f38b708a3e964484b403caa;hb=9eba1240a50c2b8189ce37efd18b171d1b45f007;hp=1d323e2074fab6ed1d8bb6ddd2d858fb23f8691f;hpb=2111ab30369d6d46b73cf372affc6514f26b8f12;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSPulseGenerator.cxx b/PHOS/AliPHOSPulseGenerator.cxx index 1d323e2074f..dca6f0867a9 100644 --- a/PHOS/AliPHOSPulseGenerator.cxx +++ b/PHOS/AliPHOSPulseGenerator.cxx @@ -30,11 +30,13 @@ // Author: Yuri Kharlov, after Yves Schutz and Per Thomas Hille // --- ROOT system --- -#include "TMath.h" -#include "TF1.h" -#include "TGraph.h" -#include "TCanvas.h" -#include "TRandom.h" + +#include +#include +#include +#include +#include +#include // --- AliRoot header files --- #include "AliLog.h" @@ -49,18 +51,13 @@ using std::endl; ClassImp(AliPHOSPulseGenerator) -Double_t AliPHOSPulseGenerator::fgCapa = 1.; // 1pF Int_t AliPHOSPulseGenerator::fgOrder = 2 ; // order of the Gamma function -Double_t AliPHOSPulseGenerator::fgTimeMax = 2.56E-5 ; // each sample is over 100 ns fTimeMax/fTimeBins -Double_t AliPHOSPulseGenerator::fgTimePeak = 4.1E-6 ; // 4 micro seconds -Double_t AliPHOSPulseGenerator::fgTimeTrigger = 100E-9 ; // 100ns, just for a reference -Double_t AliPHOSPulseGenerator::fgHighCharge = 8.2; // adjusted for a high gain range of 5.12 GeV (10 bits) -Double_t AliPHOSPulseGenerator::fgHighGain = 6.64; -Double_t AliPHOSPulseGenerator::fgHighLowGainFactor = 16.; // adjusted for a low gain range of 82 GeV (10 bits) +Double_t AliPHOSPulseGenerator::fgTimePeak = 2.1E-6 ; // tau=2.1 micro seconds +Double_t AliPHOSPulseGenerator::fgTimeTrigger = 100E-9 ; // one tick 100 ns //----------------------------------------------------------------------------- AliPHOSPulseGenerator::AliPHOSPulseGenerator(Double_t a, Double_t t0) - : TObject(), fAmplitude(a), fTZero(t0), fDataHG(0), fDataLG(0), fDigitize(kTRUE) + : TObject(), fAmplitude(a), fTZero(t0), fHG2LGratio(16.), fDataHG(0), fDataLG(0), fDigitize(kTRUE) { // Contruct a pulsegenrator object and initializes all necessary parameters // @param a digit amplitude in GeV @@ -72,18 +69,6 @@ AliPHOSPulseGenerator::AliPHOSPulseGenerator(Double_t a, Double_t t0) Reset(); } -//----------------------------------------------------------------------------- -AliPHOSPulseGenerator::AliPHOSPulseGenerator(const AliPHOSPulseGenerator & pulse) - : TObject(), fAmplitude(pulse.fAmplitude), fTZero(pulse.fTZero), fDataHG(0), fDataLG(0), fDigitize(kTRUE) -{ - fDataHG = new Double_t[pulse.fkTimeBins]; - fDataLG = new Double_t[pulse.fkTimeBins]; - for (Int_t i=0; i fgTimeMax) + if (xx < 0 || xx > GetRawFormatTimeMax()) signal = 0. ; else { - Double_t fac = par[0] * TMath::Power(fgOrder, fgOrder) * TMath::Power(par[1], fgOrder)/fgCapa ; - signal = fac * par[2] * TMath::Power(xx/fgTimePeak, fgOrder) * TMath::Exp(-fgOrder*(xx/fgTimePeak)) ; + signal = par[0] * TMath::Power(xx/fgTimePeak, fgOrder) * TMath::Exp(-fgOrder*(xx/fgTimePeak-1.)) ; //normalized to par[2] at maximum } return signal ; } -//__________________________________________________________________ -Double_t AliPHOSPulseGenerator::RawResponseFunctionMax(Double_t charge, Double_t gain) -{ - // Maximum value of the shaper response function - return ( charge * TMath::Power(fgOrder, fgOrder) * TMath::Power(gain, fgOrder) - / ( fgCapa * TMath::Exp(fgOrder) ) ); -} - //__________________________________________________________________ Bool_t AliPHOSPulseGenerator::MakeSamples() { @@ -222,10 +195,8 @@ Bool_t AliPHOSPulseGenerator::MakeSamples() TF1 signalF("signal", RawResponseFunction, 0, GetRawFormatTimeMax(), 4); for (Int_t iTime = 0; iTime < GetRawFormatTimeBins(); iTime++) { - signalF.SetParameter(0, fgHighCharge) ; - signalF.SetParameter(1, fgHighGain) ; - signalF.SetParameter(2, fAmplitude) ; - signalF.SetParameter(3, fTZero) ; + signalF.SetParameter(0, fAmplitude) ; + signalF.SetParameter(1, fTZero) ; Double_t time = iTime * GetRawFormatTimeMax() / GetRawFormatTimeBins() ; Double_t signal = signalF.Eval(time) ; fDataHG[iTime] += signal; @@ -234,13 +205,12 @@ Bool_t AliPHOSPulseGenerator::MakeSamples() lowGain = kTRUE ; } - signalF.SetParameter(0, GetRawFormatLowCharge() ) ; - signalF.SetParameter(1, GetRawFormatLowGain() ) ; + Double_t aLGamp = fAmplitude/fHG2LGratio ; + signalF.SetParameter(0, aLGamp) ; signal = signalF.Eval(time) ; fDataLG[iTime] += signal; if ( static_cast(fDataLG[iTime]+0.5) > kRawSignalOverflow) // larger than 10 bits fDataLG[iTime] = kRawSignalOverflow ; - } // Digitize floating point amplitudes to integers if (fDigitize) Digitize(); @@ -274,9 +244,12 @@ void AliPHOSPulseGenerator::Print(Option_t*) const } //__________________________________________________________________ -void AliPHOSPulseGenerator::Draw(Option_t*) +void AliPHOSPulseGenerator::Draw(Option_t* opt) { // Draw graphs with high and low gain samples + // Option_t* opt="all": draw both HG and LG in one canvas + // "HG" : draw HG only + // "LG" : draw LG only Double_t *time = new Double_t[fkTimeBins]; for (Int_t iTime = 0; iTime < GetRawFormatTimeBins(); iTime++) { @@ -294,18 +267,28 @@ void AliPHOSPulseGenerator::Draw(Option_t*) TCanvas *c1 = new TCanvas("c1","Raw ALTRO samples",10,10,700,500); c1->SetFillColor(0); - c1->Divide(2,1); - c1->cd(1); - gPad->SetLeftMargin(0.15); - graphHG->Draw("AP"); - graphHG->GetHistogram()->SetTitleOffset(1.6,"Y"); - graphHG->GetHistogram()->SetXTitle("time, #musec"); - graphHG->GetHistogram()->SetYTitle("Amplitude, ADC counts"); - c1->cd(2); - gPad->SetLeftMargin(0.15); - graphLG->Draw("AP"); - graphLG->GetHistogram()->SetTitleOffset(1.6,"Y"); - graphLG->GetHistogram()->SetXTitle("time, #musec"); - graphLG->GetHistogram()->SetYTitle("Amplitude, ADC counts"); + + if (strstr(opt,"all")){ + c1->Divide(2,1); + c1->cd(1); + gPad->SetLeftMargin(0.15); + } + if (strstr(opt,"LG") == 0){ + graphHG->Draw("AP"); + graphHG->GetHistogram()->SetTitleOffset(1.0,"Y"); + graphHG->GetHistogram()->SetXTitle("time, sec"); + graphHG->GetHistogram()->SetYTitle("Amplitude, ADC counts"); + } + if (strstr(opt,"all")){ + c1->cd(2); + gPad->SetLeftMargin(0.15); + } + if (strstr(opt,"HG") == 0){ + graphLG->Draw("AP"); + graphLG->GetHistogram()->SetTitleOffset(1.0,"Y"); + graphLG->GetHistogram()->SetXTitle("time, sec"); + graphLG->GetHistogram()->SetYTitle("Amplitude, ADC counts"); + } c1->Update(); } +