#include <TCanvas.h>
#include <TF1.h>
#include <TGraph.h>
#include <TH1F.h>
#include <TMath.h>
#include <TRandom.h>
#include "AliLog.h"
#include "AliPHOSPulseGenerator.h"
#include <cmath>
#include <iostream>
using std::cout;
using std::endl;
ClassImp(AliPHOSPulseGenerator)
Int_t AliPHOSPulseGenerator::fgOrder = 2 ;
Double_t AliPHOSPulseGenerator::fgTimePeak = 2.1E-6 ;
Double_t AliPHOSPulseGenerator::fgTimeTrigger = 100E-9 ;
AliPHOSPulseGenerator::AliPHOSPulseGenerator(Double_t a, Double_t t0)
: TObject(), fAmplitude(a), fTZero(t0), fHG2LGratio(16.), fDataHG(0), fDataLG(0), fDigitize(kTRUE)
{
fDataHG = new Double_t[fkTimeBins];
fDataLG = new Double_t[fkTimeBins];
Reset();
}
AliPHOSPulseGenerator::~AliPHOSPulseGenerator()
{
delete [] fDataHG;
fDataHG=0;
delete [] fDataLG;
fDataLG=0;
}
void AliPHOSPulseGenerator::Reset()
{
for (Int_t i=0; i<fkTimeBins; i++) {
fDataHG[i] = 0.;
fDataLG[i] = 0.;
}
}
void AliPHOSPulseGenerator::AddBaseline(Double_t baselineLevel)
{
for (Int_t i=0; i<fkTimeBins; i++) {
fDataHG[i] += baselineLevel;
fDataLG[i] += baselineLevel;
}
if (fDigitize) Digitize();
}
void AliPHOSPulseGenerator::AddNoise(Double_t sigma)
{
for (Int_t i=0; i<fkTimeBins; i++) {
fDataHG[i] = gRandom->Gaus(0., sigma) ;
fDataLG[i] = gRandom->Gaus(0., sigma) ;
}
}
void AliPHOSPulseGenerator::AddNoise(Double_t * , Double_t )
{
AliError("not implemented yet");
}
void AliPHOSPulseGenerator::AddPretriggerSamples(Int_t nPresamples)
{
Double_t *tmpDataHG = new Double_t[fkTimeBins];
Double_t *tmpDataLG = new Double_t[fkTimeBins];
Int_t i;
for (i=0; i<fkTimeBins; i++) {
tmpDataHG[i] = fDataHG[i];
tmpDataLG[i] = fDataLG[i];
}
for (i=0; i<fkTimeBins; i++) {
if (i<nPresamples) {
fDataHG[i] = 0.;
fDataLG[i] = 0.;
}
else {
fDataHG[i] = tmpDataHG[i-nPresamples];
fDataLG[i] = tmpDataLG[i-nPresamples];
}
}
delete [] tmpDataHG;
delete [] tmpDataLG;
}
void AliPHOSPulseGenerator::Digitize()
{
for (Int_t i=0; i<fkTimeBins; i++) {
fDataHG[i] = (Int_t)(fDataHG[i]);
fDataLG[i] = (Int_t)(fDataLG[i]);
}
}
Double_t AliPHOSPulseGenerator::RawResponseFunction(Double_t *x, Double_t *par)
{
Double_t signal ;
Double_t xx = x[0] - ( fgTimeTrigger + par[1] ) ;
if (xx < 0 || xx > GetRawFormatTimeMax())
signal = 0. ;
else {
signal = par[0] * TMath::Power(xx/fgTimePeak, fgOrder) * TMath::Exp(-fgOrder*(xx/fgTimePeak-1.)) ;
}
return signal ;
}
Bool_t AliPHOSPulseGenerator::MakeSamples()
{
const Int_t kRawSignalOverflow = 0x3FF ;
Bool_t lowGain = kFALSE ;
TF1 signalF("signal", RawResponseFunction, 0, GetRawFormatTimeMax(), 4);
for (Int_t iTime = 0; iTime < GetRawFormatTimeBins(); iTime++) {
signalF.SetParameter(0, fAmplitude) ;
signalF.SetParameter(1, fTZero) ;
Double_t time = iTime * GetRawFormatTimeMax() / GetRawFormatTimeBins() ;
Double_t signal = signalF.Eval(time) ;
fDataHG[iTime] += signal;
if ( static_cast<Int_t>(fDataHG[iTime]+0.5) > kRawSignalOverflow ){
fDataHG[iTime] = kRawSignalOverflow ;
lowGain = kTRUE ;
}
Double_t aLGamp = fAmplitude/fHG2LGratio ;
signalF.SetParameter(0, aLGamp) ;
signal = signalF.Eval(time) ;
fDataLG[iTime] += signal;
if ( static_cast<Int_t>(fDataLG[iTime]+0.5) > kRawSignalOverflow)
fDataLG[iTime] = kRawSignalOverflow ;
}
if (fDigitize) Digitize();
return lowGain ;
}
void AliPHOSPulseGenerator::GetSamples(Int_t *adcHG, Int_t *adcLG) const
{
for (Int_t iTime = 0; iTime < GetRawFormatTimeBins(); iTime++) {
adcHG[iTime] = static_cast<Int_t>(fDataHG[iTime]) ;
adcLG[iTime] = static_cast<Int_t>(fDataLG[iTime]) ;
}
}
void AliPHOSPulseGenerator::Print(Option_t*) const
{
Int_t i;
cout << "High gain: ";
for (i=0; i<fkTimeBins; i++)
cout << (Int_t)fDataHG[i] << " ";
cout << endl;
cout << "Low gain: ";
for (i=0; i<fkTimeBins; i++)
cout << (Int_t)fDataLG[i] << " ";
cout << endl;
}
void AliPHOSPulseGenerator::Draw(Option_t* opt)
{
Double_t *time = new Double_t[fkTimeBins];
for (Int_t iTime = 0; iTime < GetRawFormatTimeBins(); iTime++) {
time[iTime] = iTime * GetRawFormatTimeMax() / GetRawFormatTimeBins() ;
}
Int_t nPoints = fkTimeBins;
TGraph *graphHG = new TGraph(nPoints,time,fDataHG);
TGraph *graphLG = new TGraph(nPoints,time,fDataLG);
graphHG->SetMarkerStyle(20);
graphLG->SetMarkerStyle(20);
graphHG->SetMarkerSize(0.4);
graphLG->SetMarkerSize(0.4);
graphHG->SetTitle("High gain samples");
graphLG->SetTitle("Low gain samples");
TCanvas *c1 = new TCanvas("c1","Raw ALTRO samples",10,10,700,500);
c1->SetFillColor(0);
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();
}
AliPHOSPulseGenerator.cxx:1 AliPHOSPulseGenerator.cxx:2 AliPHOSPulseGenerator.cxx:3 AliPHOSPulseGenerator.cxx:4 AliPHOSPulseGenerator.cxx:5 AliPHOSPulseGenerator.cxx:6 AliPHOSPulseGenerator.cxx:7 AliPHOSPulseGenerator.cxx:8 AliPHOSPulseGenerator.cxx:9 AliPHOSPulseGenerator.cxx:10 AliPHOSPulseGenerator.cxx:11 AliPHOSPulseGenerator.cxx:12 AliPHOSPulseGenerator.cxx:13 AliPHOSPulseGenerator.cxx:14 AliPHOSPulseGenerator.cxx:15 AliPHOSPulseGenerator.cxx:16 AliPHOSPulseGenerator.cxx:17 AliPHOSPulseGenerator.cxx:18 AliPHOSPulseGenerator.cxx:19 AliPHOSPulseGenerator.cxx:20 AliPHOSPulseGenerator.cxx:21 AliPHOSPulseGenerator.cxx:22 AliPHOSPulseGenerator.cxx:23 AliPHOSPulseGenerator.cxx:24 AliPHOSPulseGenerator.cxx:25 AliPHOSPulseGenerator.cxx:26 AliPHOSPulseGenerator.cxx:27 AliPHOSPulseGenerator.cxx:28 AliPHOSPulseGenerator.cxx:29 AliPHOSPulseGenerator.cxx:30 AliPHOSPulseGenerator.cxx:31 AliPHOSPulseGenerator.cxx:32 AliPHOSPulseGenerator.cxx:33 AliPHOSPulseGenerator.cxx:34 AliPHOSPulseGenerator.cxx:35 AliPHOSPulseGenerator.cxx:36 AliPHOSPulseGenerator.cxx:37 AliPHOSPulseGenerator.cxx:38 AliPHOSPulseGenerator.cxx:39 AliPHOSPulseGenerator.cxx:40 AliPHOSPulseGenerator.cxx:41 AliPHOSPulseGenerator.cxx:42 AliPHOSPulseGenerator.cxx:43 AliPHOSPulseGenerator.cxx:44 AliPHOSPulseGenerator.cxx:45 AliPHOSPulseGenerator.cxx:46 AliPHOSPulseGenerator.cxx:47 AliPHOSPulseGenerator.cxx:48 AliPHOSPulseGenerator.cxx:49 AliPHOSPulseGenerator.cxx:50 AliPHOSPulseGenerator.cxx:51 AliPHOSPulseGenerator.cxx:52 AliPHOSPulseGenerator.cxx:53 AliPHOSPulseGenerator.cxx:54 AliPHOSPulseGenerator.cxx:55 AliPHOSPulseGenerator.cxx:56 AliPHOSPulseGenerator.cxx:57 AliPHOSPulseGenerator.cxx:58 AliPHOSPulseGenerator.cxx:59 AliPHOSPulseGenerator.cxx:60 AliPHOSPulseGenerator.cxx:61 AliPHOSPulseGenerator.cxx:62 AliPHOSPulseGenerator.cxx:63 AliPHOSPulseGenerator.cxx:64 AliPHOSPulseGenerator.cxx:65 AliPHOSPulseGenerator.cxx:66 AliPHOSPulseGenerator.cxx:67 AliPHOSPulseGenerator.cxx:68 AliPHOSPulseGenerator.cxx:69 AliPHOSPulseGenerator.cxx:70 AliPHOSPulseGenerator.cxx:71 AliPHOSPulseGenerator.cxx:72 AliPHOSPulseGenerator.cxx:73 AliPHOSPulseGenerator.cxx:74 AliPHOSPulseGenerator.cxx:75 AliPHOSPulseGenerator.cxx:76 AliPHOSPulseGenerator.cxx:77 AliPHOSPulseGenerator.cxx:78 AliPHOSPulseGenerator.cxx:79 AliPHOSPulseGenerator.cxx:80 AliPHOSPulseGenerator.cxx:81 AliPHOSPulseGenerator.cxx:82 AliPHOSPulseGenerator.cxx:83 AliPHOSPulseGenerator.cxx:84 AliPHOSPulseGenerator.cxx:85 AliPHOSPulseGenerator.cxx:86 AliPHOSPulseGenerator.cxx:87 AliPHOSPulseGenerator.cxx:88 AliPHOSPulseGenerator.cxx:89 AliPHOSPulseGenerator.cxx:90 AliPHOSPulseGenerator.cxx:91 AliPHOSPulseGenerator.cxx:92 AliPHOSPulseGenerator.cxx:93 AliPHOSPulseGenerator.cxx:94 AliPHOSPulseGenerator.cxx:95 AliPHOSPulseGenerator.cxx:96 AliPHOSPulseGenerator.cxx:97 AliPHOSPulseGenerator.cxx:98 AliPHOSPulseGenerator.cxx:99 AliPHOSPulseGenerator.cxx:100 AliPHOSPulseGenerator.cxx:101 AliPHOSPulseGenerator.cxx:102 AliPHOSPulseGenerator.cxx:103 AliPHOSPulseGenerator.cxx:104 AliPHOSPulseGenerator.cxx:105 AliPHOSPulseGenerator.cxx:106 AliPHOSPulseGenerator.cxx:107 AliPHOSPulseGenerator.cxx:108 AliPHOSPulseGenerator.cxx:109 AliPHOSPulseGenerator.cxx:110 AliPHOSPulseGenerator.cxx:111 AliPHOSPulseGenerator.cxx:112 AliPHOSPulseGenerator.cxx:113 AliPHOSPulseGenerator.cxx:114 AliPHOSPulseGenerator.cxx:115 AliPHOSPulseGenerator.cxx:116 AliPHOSPulseGenerator.cxx:117 AliPHOSPulseGenerator.cxx:118 AliPHOSPulseGenerator.cxx:119 AliPHOSPulseGenerator.cxx:120 AliPHOSPulseGenerator.cxx:121 AliPHOSPulseGenerator.cxx:122 AliPHOSPulseGenerator.cxx:123 AliPHOSPulseGenerator.cxx:124 AliPHOSPulseGenerator.cxx:125 AliPHOSPulseGenerator.cxx:126 AliPHOSPulseGenerator.cxx:127 AliPHOSPulseGenerator.cxx:128 AliPHOSPulseGenerator.cxx:129 AliPHOSPulseGenerator.cxx:130 AliPHOSPulseGenerator.cxx:131 AliPHOSPulseGenerator.cxx:132 AliPHOSPulseGenerator.cxx:133 AliPHOSPulseGenerator.cxx:134 AliPHOSPulseGenerator.cxx:135 AliPHOSPulseGenerator.cxx:136 AliPHOSPulseGenerator.cxx:137 AliPHOSPulseGenerator.cxx:138 AliPHOSPulseGenerator.cxx:139 AliPHOSPulseGenerator.cxx:140 AliPHOSPulseGenerator.cxx:141 AliPHOSPulseGenerator.cxx:142 AliPHOSPulseGenerator.cxx:143 AliPHOSPulseGenerator.cxx:144 AliPHOSPulseGenerator.cxx:145 AliPHOSPulseGenerator.cxx:146 AliPHOSPulseGenerator.cxx:147 AliPHOSPulseGenerator.cxx:148 AliPHOSPulseGenerator.cxx:149 AliPHOSPulseGenerator.cxx:150 AliPHOSPulseGenerator.cxx:151 AliPHOSPulseGenerator.cxx:152 AliPHOSPulseGenerator.cxx:153 AliPHOSPulseGenerator.cxx:154 AliPHOSPulseGenerator.cxx:155 AliPHOSPulseGenerator.cxx:156 AliPHOSPulseGenerator.cxx:157 AliPHOSPulseGenerator.cxx:158 AliPHOSPulseGenerator.cxx:159 AliPHOSPulseGenerator.cxx:160 AliPHOSPulseGenerator.cxx:161 AliPHOSPulseGenerator.cxx:162 AliPHOSPulseGenerator.cxx:163 AliPHOSPulseGenerator.cxx:164 AliPHOSPulseGenerator.cxx:165 AliPHOSPulseGenerator.cxx:166 AliPHOSPulseGenerator.cxx:167 AliPHOSPulseGenerator.cxx:168 AliPHOSPulseGenerator.cxx:169 AliPHOSPulseGenerator.cxx:170 AliPHOSPulseGenerator.cxx:171 AliPHOSPulseGenerator.cxx:172 AliPHOSPulseGenerator.cxx:173 AliPHOSPulseGenerator.cxx:174 AliPHOSPulseGenerator.cxx:175 AliPHOSPulseGenerator.cxx:176 AliPHOSPulseGenerator.cxx:177 AliPHOSPulseGenerator.cxx:178 AliPHOSPulseGenerator.cxx:179 AliPHOSPulseGenerator.cxx:180 AliPHOSPulseGenerator.cxx:181 AliPHOSPulseGenerator.cxx:182 AliPHOSPulseGenerator.cxx:183 AliPHOSPulseGenerator.cxx:184 AliPHOSPulseGenerator.cxx:185 AliPHOSPulseGenerator.cxx:186 AliPHOSPulseGenerator.cxx:187 AliPHOSPulseGenerator.cxx:188 AliPHOSPulseGenerator.cxx:189 AliPHOSPulseGenerator.cxx:190 AliPHOSPulseGenerator.cxx:191 AliPHOSPulseGenerator.cxx:192 AliPHOSPulseGenerator.cxx:193 AliPHOSPulseGenerator.cxx:194 AliPHOSPulseGenerator.cxx:195 AliPHOSPulseGenerator.cxx:196 AliPHOSPulseGenerator.cxx:197 AliPHOSPulseGenerator.cxx:198 AliPHOSPulseGenerator.cxx:199 AliPHOSPulseGenerator.cxx:200 AliPHOSPulseGenerator.cxx:201 AliPHOSPulseGenerator.cxx:202 AliPHOSPulseGenerator.cxx:203 AliPHOSPulseGenerator.cxx:204 AliPHOSPulseGenerator.cxx:205 AliPHOSPulseGenerator.cxx:206 AliPHOSPulseGenerator.cxx:207 AliPHOSPulseGenerator.cxx:208 AliPHOSPulseGenerator.cxx:209 AliPHOSPulseGenerator.cxx:210 AliPHOSPulseGenerator.cxx:211 AliPHOSPulseGenerator.cxx:212 AliPHOSPulseGenerator.cxx:213 AliPHOSPulseGenerator.cxx:214 AliPHOSPulseGenerator.cxx:215 AliPHOSPulseGenerator.cxx:216 AliPHOSPulseGenerator.cxx:217 AliPHOSPulseGenerator.cxx:218 AliPHOSPulseGenerator.cxx:219 AliPHOSPulseGenerator.cxx:220 AliPHOSPulseGenerator.cxx:221 AliPHOSPulseGenerator.cxx:222 AliPHOSPulseGenerator.cxx:223 AliPHOSPulseGenerator.cxx:224 AliPHOSPulseGenerator.cxx:225 AliPHOSPulseGenerator.cxx:226 AliPHOSPulseGenerator.cxx:227 AliPHOSPulseGenerator.cxx:228 AliPHOSPulseGenerator.cxx:229 AliPHOSPulseGenerator.cxx:230 AliPHOSPulseGenerator.cxx:231 AliPHOSPulseGenerator.cxx:232 AliPHOSPulseGenerator.cxx:233 AliPHOSPulseGenerator.cxx:234 AliPHOSPulseGenerator.cxx:235 AliPHOSPulseGenerator.cxx:236 AliPHOSPulseGenerator.cxx:237 AliPHOSPulseGenerator.cxx:238 AliPHOSPulseGenerator.cxx:239 AliPHOSPulseGenerator.cxx:240 AliPHOSPulseGenerator.cxx:241 AliPHOSPulseGenerator.cxx:242 AliPHOSPulseGenerator.cxx:243 AliPHOSPulseGenerator.cxx:244 AliPHOSPulseGenerator.cxx:245 AliPHOSPulseGenerator.cxx:246 AliPHOSPulseGenerator.cxx:247 AliPHOSPulseGenerator.cxx:248 AliPHOSPulseGenerator.cxx:249 AliPHOSPulseGenerator.cxx:250 AliPHOSPulseGenerator.cxx:251 AliPHOSPulseGenerator.cxx:252 AliPHOSPulseGenerator.cxx:253 AliPHOSPulseGenerator.cxx:254 AliPHOSPulseGenerator.cxx:255 AliPHOSPulseGenerator.cxx:256 AliPHOSPulseGenerator.cxx:257 AliPHOSPulseGenerator.cxx:258 AliPHOSPulseGenerator.cxx:259 AliPHOSPulseGenerator.cxx:260 AliPHOSPulseGenerator.cxx:261 AliPHOSPulseGenerator.cxx:262 AliPHOSPulseGenerator.cxx:263 AliPHOSPulseGenerator.cxx:264 AliPHOSPulseGenerator.cxx:265 AliPHOSPulseGenerator.cxx:266 AliPHOSPulseGenerator.cxx:267 AliPHOSPulseGenerator.cxx:268 AliPHOSPulseGenerator.cxx:269 AliPHOSPulseGenerator.cxx:270 AliPHOSPulseGenerator.cxx:271 AliPHOSPulseGenerator.cxx:272 AliPHOSPulseGenerator.cxx:273 AliPHOSPulseGenerator.cxx:274 AliPHOSPulseGenerator.cxx:275 AliPHOSPulseGenerator.cxx:276 AliPHOSPulseGenerator.cxx:277 AliPHOSPulseGenerator.cxx:278 AliPHOSPulseGenerator.cxx:279 AliPHOSPulseGenerator.cxx:280 AliPHOSPulseGenerator.cxx:281 AliPHOSPulseGenerator.cxx:282 AliPHOSPulseGenerator.cxx:283 AliPHOSPulseGenerator.cxx:284 AliPHOSPulseGenerator.cxx:285 AliPHOSPulseGenerator.cxx:286 AliPHOSPulseGenerator.cxx:287 AliPHOSPulseGenerator.cxx:288 AliPHOSPulseGenerator.cxx:289 AliPHOSPulseGenerator.cxx:290 AliPHOSPulseGenerator.cxx:291 AliPHOSPulseGenerator.cxx:292 AliPHOSPulseGenerator.cxx:293 AliPHOSPulseGenerator.cxx:294