#include <TBenchmark.h>
#include <TClonesArray.h>
#include <TF1.h>
#include <TFile.h>
#include <TParticle.h>
#include <TTree.h>
#include <TRandom.h>
#include <TROOT.h>
#include "AliLoader.h"
#include "AliLog.h"
#include "AliMC.h"
#include "AliRunLoader.h"
#include "AliRun.h"
#include "AliTOFcalib.h"
#include "AliTOFRecoParam.h"
#include "AliTOFGeometry.h"
#include "AliTOFHitMap.h"
#include "AliTOFhitT0.h"
#include "AliTOFhit.h"
#include "AliTOFSDigitizer.h"
#include "AliTOFSDigit.h"
#include "AliTOF.h"
ClassImp(AliTOFSDigitizer)
AliTOFSDigitizer::AliTOFSDigitizer():
TNamed("TOFSDigitizer",""),
fEvent1(-1),
fEvent2(-1),
ftail(0x0),
fHeadersFile(""),
fRunLoader(0x0),
fTOFLoader(0x0),
fSelectedSector(-1),
fSelectedPlate(-1),
fTimeResolution(100.),
fpadefficiency(0),
fEdgeEffect(-1),
fEdgeTails(-1),
fHparameter(0),
fH2parameter(0),
fKparameter(0),
fK2parameter(0),
fEffCenter(0),
fEffBoundary(0),
fEff2Boundary(0),
fEff3Boundary(0),
fAddTRes(0),
fResCenter(0),
fResBoundary(0),
fResSlope(0),
fTimeWalkCenter(0),
fTimeWalkBoundary(0),
fTimeWalkSlope(0),
fTimeDelayFlag(-1),
fPulseHeightSlope(0),
fTimeDelaySlope(0),
fMinimumCharge(0),
fChargeSmearing(0),
fLogChargeSmearing(0),
fTimeSmearing(0),
fAverageTimeFlag(-1),
fAdcBin(0),
fAdcMean(0),
fAdcRms(0),
fCalib(new AliTOFcalib())
{
}
AliTOFSDigitizer::AliTOFSDigitizer(const AliTOFSDigitizer &source):
TNamed(source),
fEvent1(-1),
fEvent2(-1),
ftail(0x0),
fHeadersFile(""),
fRunLoader(0x0),
fTOFLoader(0x0),
fSelectedSector(-1),
fSelectedPlate(-1),
fTimeResolution(100.),
fpadefficiency(0),
fEdgeEffect(-1),
fEdgeTails(-1),
fHparameter(0),
fH2parameter(0),
fKparameter(0),
fK2parameter(0),
fEffCenter(0),
fEffBoundary(0),
fEff2Boundary(0),
fEff3Boundary(0),
fAddTRes(0),
fResCenter(0),
fResBoundary(0),
fResSlope(0),
fTimeWalkCenter(0),
fTimeWalkBoundary(0),
fTimeWalkSlope(0),
fTimeDelayFlag(-1),
fPulseHeightSlope(0),
fTimeDelaySlope(0),
fMinimumCharge(0),
fChargeSmearing(0),
fLogChargeSmearing(0),
fTimeSmearing(0),
fAverageTimeFlag(-1),
fAdcBin(0),
fAdcMean(0),
fAdcRms(0),
fCalib(new AliTOFcalib())
{
}
AliTOFSDigitizer& AliTOFSDigitizer::operator=(const AliTOFSDigitizer &)
{
return *this;
}
AliTOFSDigitizer::AliTOFSDigitizer(const char* HeaderFile, Int_t evNumber1, Int_t nEvents):
TNamed("TOFSDigitizer",""),
fEvent1(-1),
fEvent2(-1),
ftail(0x0),
fHeadersFile(HeaderFile),
fRunLoader(0x0),
fTOFLoader(0x0),
fSelectedSector(-1),
fSelectedPlate(-1),
fTimeResolution(100.),
fpadefficiency(0),
fEdgeEffect(-1),
fEdgeTails(-1),
fHparameter(0),
fH2parameter(0),
fKparameter(0),
fK2parameter(0),
fEffCenter(0),
fEffBoundary(0),
fEff2Boundary(0),
fEff3Boundary(0),
fAddTRes(0),
fResCenter(0),
fResBoundary(0),
fResSlope(0),
fTimeWalkCenter(0),
fTimeWalkBoundary(0),
fTimeWalkSlope(0),
fTimeDelayFlag(-1),
fPulseHeightSlope(0),
fTimeDelaySlope(0),
fMinimumCharge(0),
fChargeSmearing(0),
fLogChargeSmearing(0),
fTimeSmearing(0),
fAverageTimeFlag(-1),
fAdcBin(0),
fAdcMean(0),
fAdcRms(0),
fCalib(new AliTOFcalib())
{
TFile * file = (TFile*) gROOT->GetFile(fHeadersFile.Data());
if (file == 0) {
file = TFile::Open(fHeadersFile.Data(),"update") ;
gAlice = (AliRun *) file->Get("gAlice") ;
}
TString evfoldname = AliConfig::GetDefaultEventFolderName();
fRunLoader = AliRunLoader::GetRunLoader(evfoldname);
if (!fRunLoader)
fRunLoader = AliRunLoader::Open(HeaderFile);
if (fRunLoader == 0x0)
{
AliFatal("Event is not loaded. Exiting");
return;
}
if (fRunLoader->TreeE() == 0x0) fRunLoader->LoadHeader();
if (evNumber1>=0) fEvent1 = evNumber1;
else fEvent1=0;
if (nEvents==0) fEvent2 = (Int_t)(fRunLoader->GetNumberOfEvents());
else if (nEvents>0) fEvent2 = evNumber1+nEvents;
else fEvent2 = 1;
if (!(fEvent2>fEvent1)) {
AliError(Form("fEvent2 = %d <= fEvent1 = %d", fEvent2, fEvent1));
fEvent1 = 0;
fEvent2 = 1;
AliError(Form("Correction: fEvent2 = %d <= fEvent1 = %d", fEvent2, fEvent1));
}
InitParameters();
fTOFLoader = fRunLoader->GetLoader("TOFLoader");
if (fTOFLoader == 0x0)
{
AliFatal("Can not find TOF loader in event. Exiting.");
return;
}
}
AliTOFSDigitizer::~AliTOFSDigitizer()
{
if (fCalib) delete fCalib;
}
void AliTOFSDigitizer::InitParameters()
{
fCalib->Init();
AliTOFRecoParam *recoParams = (AliTOFRecoParam*)fCalib->ReadRecParFromCDB("TOF/Calib",fRunLoader->GetRunNumber());
fTimeResolution = recoParams->GetTimeResolution();
if (fTimeResolution==0.) {
AliWarning("In OCDB found 0ps for TOF time resolution. It is set to 100ps.");
fTimeResolution = 100.;
}
AliDebug(1,Form(" TOF time resolution read from OCDB = %f ps",fTimeResolution));
fpadefficiency = 0.995 ;
fEdgeEffect = 1 ;
fEdgeTails = 0 ;
fHparameter = 0.4 ;
fH2parameter = 0.15;
fKparameter = 0.9 ;
fK2parameter = 0.55;
fEffCenter = fpadefficiency;
fEffBoundary = 0.833;
fEff2Boundary = 0.94;
fEff3Boundary = 0.1;
fAddTRes = 68. ;
fResCenter = 35. ;
fResBoundary = 70. ;
fResSlope = 37. ;
fTimeWalkCenter = 0. ;
fTimeWalkBoundary=0. ;
fTimeWalkSlope = 0. ;
fTimeDelayFlag = 0 ;
fPulseHeightSlope=2.0 ;
fTimeDelaySlope =0.060;
fMinimumCharge = TMath::Exp(-fPulseHeightSlope*fHparameter);
fChargeSmearing=0.0 ;
fLogChargeSmearing=0.13;
fTimeSmearing =0.022;
fAverageTimeFlag=0 ;
fAdcBin = 0.25;
fAdcMean = 50.;
fAdcRms = 25.;
}
Double_t TimeWithTail(const Double_t * const x, const Double_t * const par)
{
Float_t xx =x[0];
Double_t f;
if(xx<par[0]*par[2]) {
f = TMath::Exp(-xx*xx/(2*par[0]*par[0]));
} else {
f = TMath::Exp(-(xx-par[0]*par[2])/par[1]-0.5*par[2]*par[2]);
}
return f;
}
void AliTOFSDigitizer::Digitize(Option_t *verboseOption) {
if (strstr(verboseOption,"tim") || strstr(verboseOption,"all"))
gBenchmark->Start("TOFSDigitizer");
if (fEdgeTails) ftail = new TF1("tail",TimeWithTail,-2,2,3);
Int_t nselectedHits=0;
Int_t ntotalsdigits=0;
Int_t ntotalupdates=0;
Int_t nnoisesdigits=0;
Int_t nsignalsdigits=0;
Int_t nHitsFromPrim=0;
Int_t nHitsFromSec=0;
Int_t nlargeTofDiff=0;
Bool_t thereIsNotASelection=(fSelectedSector==-1) && (fSelectedPlate==-1);
if (fRunLoader->GetAliRun() == 0x0) fRunLoader->LoadgAlice();
gAlice = fRunLoader->GetAliRun();
fRunLoader->LoadKinematics();
AliTOF *tof = (AliTOF *) gAlice->GetDetector("TOF");
if (!tof) {
AliError("TOF not found");
return;
}
fTOFLoader->LoadHits("read");
fTOFLoader->LoadSDigits("recreate");
Int_t vol[5]={-1,-1,-1,-1,-1};
Int_t digit[2]={0,0};
Int_t nselectedHitsinEv=0;
Int_t ntotalsdigitsinEv=0;
Int_t ntotalupdatesinEv=0;
Int_t nnoisesdigitsinEv=0;
Int_t nsignalsdigitsinEv=0;
for (Int_t iEvent=fEvent1; iEvent<fEvent2; iEvent++) {
fRunLoader->GetEvent(iEvent);
TTree *hitTree = fTOFLoader->TreeH();
if (!hitTree) return;
if (fTOFLoader->TreeS () == 0) fTOFLoader->MakeTree ("S");
tof->MakeBranch("S");
if (tof->SDigits() == 0) {
tof->CreateSDigitsArray();
} else {
tof->RecreateSDigitsArray();
}
tof->SetTreeAddress();
Int_t version=tof->IsVersion();
nselectedHitsinEv=0;
ntotalsdigitsinEv=0;
ntotalupdatesinEv=0;
nnoisesdigitsinEv=0;
nsignalsdigitsinEv=0;
TParticle *particle;
TClonesArray *tofHitArray = tof->Hits();
AliTOFHitMap *hitMap = new AliTOFHitMap(tof->SDigits());
TBranch * tofHitsBranch = hitTree->GetBranch("TOF");
Int_t ntracks = static_cast<Int_t>(hitTree->GetEntries());
for (Int_t track = 0; track < ntracks; track++)
{
gAlice->GetMCApp()->ResetHits();
tofHitsBranch->GetEvent(track);
AliMC *mcApplication = (AliMC*)gAlice->GetMCApp();
particle = (TParticle*)mcApplication->Particle(track);
Int_t nhits = tofHitArray->GetEntriesFast();
Int_t previousTrack =-1;
Int_t previousSector=-1;
Int_t previousPlate =-1;
Int_t previousStrip =-1;
Int_t previousPadX =-1;
Int_t previousPadZ =-1;
for (Int_t hit = 0; hit < nhits; hit++) {
for (Int_t aa=0; aa<5;aa++) vol[aa]=-1;
for (Int_t aa=0; aa<2;aa++) digit[aa]=0;
Int_t tracknum;
Float_t dxPad;
Float_t dzPad;
Float_t geantTime;
if (version<6) {
AliTOFhit *tofHit = (AliTOFhit *) tofHitArray->UncheckedAt(hit);
tracknum = tofHit->GetTrack();
vol[0] = tofHit->GetSector();
vol[1] = tofHit->GetPlate();
vol[2] = tofHit->GetStrip();
vol[3] = tofHit->GetPadx();
vol[4] = tofHit->GetPadz();
dxPad = tofHit->GetDx();
dzPad = tofHit->GetDz();
geantTime = tofHit->GetTof();
} else {
AliTOFhitT0 *tofHit = (AliTOFhitT0 *) tofHitArray->UncheckedAt(hit);
tracknum = tofHit->GetTrack();
vol[0] = tofHit->GetSector();
vol[1] = tofHit->GetPlate();
vol[2] = tofHit->GetStrip();
vol[3] = tofHit->GetPadx();
vol[4] = tofHit->GetPadz();
dxPad = tofHit->GetDx();
dzPad = tofHit->GetDz();
geantTime = tofHit->GetTof();
}
geantTime *= 1.e+09;
if (geantTime>=AliTOFGeometry::MatchingWindow()*1E-3) {
AliDebug(2,Form("Time measurement (%f) greater than the matching window (%f)",
geantTime, AliTOFGeometry::MatchingWindow()*1E-3));
continue;
}
if(thereIsNotASelection || (vol[0]==fSelectedSector && vol[1]==fSelectedPlate)){
Bool_t dummy=((tracknum==previousTrack) && (vol[0]==previousSector) && (vol[1]==previousPlate) && (vol[2]==previousStrip));
Bool_t isCloneOfThePrevious=dummy && ((vol[3]==previousPadX) && (vol[4]==previousPadZ));
Bool_t isNeighOfThePrevious=dummy && ((((vol[3]==previousPadX-1) || (vol[3]==previousPadX+1)) && (vol[4]==previousPadZ)) || ((vol[3]==previousPadX) && ((vol[4]==previousPadZ+1) || (vol[4]==previousPadZ-1))));
if(!isCloneOfThePrevious && !isNeighOfThePrevious){
previousTrack=tracknum;
previousSector=vol[0];
previousPlate=vol[1];
previousStrip=vol[2];
previousPadX=vol[3];
previousPadZ=vol[4];
nselectedHits++;
nselectedHitsinEv++;
if (particle->GetFirstMother() < 0) nHitsFromPrim++;
Float_t xStrip=AliTOFGeometry::XPad()*(vol[3]+0.5-0.5*AliTOFGeometry::NpadX())+dxPad;
Float_t zStrip=AliTOFGeometry::ZPad()*(vol[4]+0.5-0.5*AliTOFGeometry::NpadZ())+dzPad;
Int_t nActivatedPads = 0, nFiredPads = 0;
Bool_t isFired[4] = {kFALSE, kFALSE, kFALSE, kFALSE};
Float_t tofAfterSimul[4] = {0., 0., 0., 0.};
Float_t qInduced[4] = {0.,0.,0.,0.};
Int_t nPlace[4] = {0, 0, 0, 0};
Float_t averageTime = 0.;
SimulateDetectorResponse(zStrip,xStrip,geantTime,nActivatedPads,nFiredPads,isFired,nPlace,qInduced,tofAfterSimul,averageTime);
if(nFiredPads) {
for(Int_t indexOfPad=0; indexOfPad<nActivatedPads; indexOfPad++) {
if(isFired[indexOfPad]){
Float_t timediff=geantTime-tofAfterSimul[indexOfPad];
if (tofAfterSimul[indexOfPad]>=AliTOFGeometry::MatchingWindow()*1E-3) {
AliDebug(2,Form("Time measurement (%f) greater than the matching window (%f)",
tofAfterSimul[indexOfPad], AliTOFGeometry::MatchingWindow()*1E-3));
continue;
}
if(timediff>=0.2) nlargeTofDiff++;
digit[0] = TMath::Nint((tofAfterSimul[indexOfPad]*1.e+03)/AliTOFGeometry::TdcBinWidth());
Float_t landauFactor = gRandom->Landau(fAdcMean, fAdcRms);
digit[1] = TMath::Nint(qInduced[indexOfPad] * landauFactor);
if(indexOfPad){
(nPlace[indexOfPad]<=AliTOFGeometry::NpadX()) ? vol[4] = 0 : vol[4] = 1;
(nPlace[indexOfPad]<=AliTOFGeometry::NpadX()) ? vol[3] = nPlace[indexOfPad] - 1 : vol[3] = nPlace[indexOfPad] - AliTOFGeometry::NpadX() - 1;
}
if (hitMap->TestHit(vol) != kEmpty) {
AliTOFSDigit *sdig = static_cast<AliTOFSDigit*>(hitMap->GetHit(vol));
Int_t tdctime = (Int_t) digit[0];
Int_t adccharge = (Int_t) digit[1];
sdig->Update(AliTOFGeometry::TdcBinWidth(),tdctime,adccharge,tracknum);
ntotalupdatesinEv++;
ntotalupdates++;
} else {
tof->AddSDigit(tracknum, vol, digit);
if(indexOfPad){
nnoisesdigits++;
nnoisesdigitsinEv++;
} else {
nsignalsdigits++;
nsignalsdigitsinEv++;
}
ntotalsdigitsinEv++;
ntotalsdigits++;
hitMap->SetHit(vol);
}
}
}
}
}
}
}
}
delete hitMap;
fTOFLoader->TreeS()->Reset();
fTOFLoader->TreeS()->Fill();
fTOFLoader->WriteSDigits("OVERWRITE");
if (tof->SDigits()) tof->ResetSDigits();
if (strstr(verboseOption,"all") || strstr(verboseOption,"partial")) {
AliDebug(2,"----------------------------------------");
AliDebug(2,Form("After sdigitizing %d hits in event %d", nselectedHitsinEv, iEvent));
AliDebug(1,Form("%d sdigits have been created", ntotalsdigitsinEv));
AliDebug(2,Form("(%d due to signals and %d due to border effect)", nsignalsdigitsinEv, nnoisesdigitsinEv));
AliDebug(2,Form("%d total updates of the hit map have been performed in current event", ntotalupdatesinEv));
AliDebug(2,"----------------------------------------");
}
}
fTOFLoader->UnloadSDigits();
fTOFLoader->UnloadHits();
fRunLoader->UnloadKinematics();
if (ftail){
delete ftail;
ftail = 0;
}
nHitsFromSec=nselectedHits-nHitsFromPrim;
if (strstr(verboseOption,"all") || strstr(verboseOption,"partial")) {
AliDebug(2,"----------------------------------------");
AliDebug(2,Form("After sdigitizing %d hits in %d events ", nselectedHits, fEvent2-fEvent1));
AliDebug(2,Form("%d sdigits have been created", ntotalsdigits));
AliDebug(2,Form("(%d due to signals and %d due to border effect)", nsignalsdigits, nnoisesdigits));
AliDebug(2,Form("%d total updates of the hit map have been performed", ntotalupdates));
AliDebug(2,Form("in %d cases the time of flight difference is greater than 200 ps", nlargeTofDiff));
AliDebug(2,"----------------------------------------");
}
if(strstr(verboseOption,"tim") || strstr(verboseOption,"all")){
gBenchmark->Stop("TOFSDigitizer");
AliInfo("AliTOFSDigitizer:");
AliInfo(Form(" took %f seconds in order to make sdigits "
"%f seconds per event", gBenchmark->GetCpuTime("TOFSDigitizer"), gBenchmark->GetCpuTime("TOFSDigitizer")/(fEvent2-fEvent1)));
AliInfo(" +++++++++++++++++++++++++++++++++++++++++++++++++++ ");
}
}
void AliTOFSDigitizer::Print(Option_t* )const
{
AliInfo(Form(" ------------------- %s ------------- ", GetName()));
}
void AliTOFSDigitizer::SelectSectorAndPlate(Int_t sector, Int_t plate)
{
Bool_t isaWrongSelection=(sector < 0) || (sector >= AliTOFGeometry::NSectors()) || (plate < 0) || (plate >= AliTOFGeometry::NPlates());
if(isaWrongSelection){
AliError("You have selected an invalid value for sector or plate ");
AliError(Form("The correct range for sector is [0,%d]", AliTOFGeometry::NSectors()-1));
AliError(Form("The correct range for plate is [0,%d]", AliTOFGeometry::NPlates()-1));
AliError("By default we continue sdigitizing all hits in all plates of all sectors");
} else {
fSelectedSector=sector;
fSelectedPlate =plate;
AliInfo(Form("SDigitizing only hits in plate %d of the sector %d", fSelectedPlate, fSelectedSector));
}
}
void AliTOFSDigitizer::SimulateDetectorResponse(Float_t z0, Float_t x0, Float_t geantTime, Int_t& nActivatedPads, Int_t& nFiredPads, Bool_t* isFired, Int_t* nPlace, Float_t* qInduced, Float_t* tofTime, Float_t& averageTime)
{
const Float_t kSigmaForTail[2] = {AliTOFGeometry::SigmaForTail1(),AliTOFGeometry::SigmaForTail2()};
Int_t iz = 0, ix = 0;
Float_t dX = 0., dZ = 0., x = 0., z = 0.;
Float_t h = fHparameter, h2 = fH2parameter, k = fKparameter, k2 = fK2parameter;
Float_t effX = 0., effZ = 0., resX = 0., resZ = 0., timeWalkX = 0., timeWalkZ = 0.;
Float_t logOfqInd = 0.;
Float_t weightsSum = 0.;
Int_t nTail[4] = {0,0,0,0};
Int_t padId[4] = {0,0,0,0};
Float_t eff[4] = {0.,0.,0.,0.};
Float_t res[4] = {0.,0.,0.,0.};
Float_t qCenterPad = 1.;
Float_t timeWalk[4] = {0.,0.,0.,0.};
Float_t timeDelay[4] = {0.,0.,0.,0.};
nActivatedPads = 0;
nFiredPads = 0;
(z0 <= 0) ? iz = 0 : iz = 1;
dZ = z0 + (0.5 * AliTOFGeometry::NpadZ() - iz - 0.5) * AliTOFGeometry::ZPad();
z = 0.5 * AliTOFGeometry::ZPad() - TMath::Abs(dZ);
iz++;
ix = (Int_t)((x0 + 0.5 * AliTOFGeometry::NpadX() * AliTOFGeometry::XPad()) / AliTOFGeometry::XPad());
dX = x0 + (0.5 * AliTOFGeometry::NpadX() - ix - 0.5) * AliTOFGeometry::XPad();
x = 0.5 * AliTOFGeometry::XPad() - TMath::Abs(dX);
ix++;
nActivatedPads++;
nPlace[nActivatedPads-1] = (iz - 1) * AliTOFGeometry::NpadX() + ix;
qInduced[nActivatedPads-1] = qCenterPad;
padId[nActivatedPads-1] = 1;
switch (fEdgeEffect) {
case 0:
eff[nActivatedPads-1] = fEffCenter;
if (gRandom->Rndm() < eff[nActivatedPads-1]) {
nFiredPads = 1;
res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + fResCenter * fResCenter);
isFired[nActivatedPads-1] = kTRUE;
tofTime[nActivatedPads-1] = gRandom->Gaus(geantTime + fTimeWalkCenter, res[0]);
averageTime = tofTime[nActivatedPads-1];
}
break;
case 1:
if(z < h) {
if(z < h2) {
effZ = fEffBoundary + (fEff2Boundary - fEffBoundary) * z / h2;
} else {
effZ = fEff2Boundary + (fEffCenter - fEff2Boundary) * (z - h2) / (h - h2);
}
nTail[nActivatedPads-1] = 1;
} else {
effZ = fEffCenter;
}
if(x < h) {
if(x < h2) {
effX = fEffBoundary + (fEff2Boundary - fEffBoundary) * x / h2;
} else {
effX = fEff2Boundary + (fEffCenter - fEff2Boundary) * (x - h2) / (h - h2);
}
nTail[nActivatedPads-1] = 1;
} else {
effX = fEffCenter;
}
(effZ<effX) ? eff[nActivatedPads-1] = effZ : eff[nActivatedPads-1] = effX;
res[nActivatedPads-1] = 0.001 * fTimeResolution;
timeWalk[nActivatedPads-1] = 0.;
if(z < k2) {
effZ = fEffBoundary - (fEffBoundary - fEff3Boundary) * (z / k2);
} else {
effZ = fEff3Boundary * (k - z) / (k - k2);
}
if(z < k && z > 0) {
if( (iz == 1 && dZ > 0) || (iz == 2 && dZ < 0) ) {
nActivatedPads++;
nPlace[nActivatedPads-1] = nPlace[0] + (3 - 2 * iz) * AliTOFGeometry::NpadX();
eff[nActivatedPads-1] = effZ;
res[nActivatedPads-1] = 0.001 * fTimeResolution;
timeWalk[nActivatedPads-1] = 0.;
nTail[nActivatedPads-1] = 2;
if (fTimeDelayFlag) {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * z);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * z, fLogChargeSmearing);
timeDelay[nActivatedPads-1] = gRandom->Gaus(-fTimeDelaySlope * logOfqInd, fTimeSmearing);
} else {
timeDelay[nActivatedPads-1] = 0.;
}
padId[nActivatedPads-1] = 2;
}
}
if(x < k2) {
effX = fEffBoundary - (fEffBoundary - fEff3Boundary) * (x / k2);
} else {
effX = fEff3Boundary * (k - x) / (k - k2);
}
if(x < k && x > 0) {
if(ix > 1 && dX < 0) {
nActivatedPads++;
nPlace[nActivatedPads-1] = nPlace[0] - 1;
eff[nActivatedPads-1] = effX;
res[nActivatedPads-1] = 0.001 * fTimeResolution;
timeWalk[nActivatedPads-1] = 0.;
nTail[nActivatedPads-1] = 2;
if (fTimeDelayFlag) {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * x);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * x, fLogChargeSmearing);
timeDelay[nActivatedPads-1] = gRandom->Gaus(-fTimeDelaySlope * logOfqInd, fTimeSmearing);
} else {
timeDelay[nActivatedPads-1] = 0.;
}
padId[nActivatedPads-1] = 3;
if(z < k && z > 0) {
if( (iz == 1 && dZ > 0) || (iz == 2 && dZ < 0) ) {
nActivatedPads++;
nPlace[nActivatedPads-1] = nPlace[0] + (3 - 2 * iz) * AliTOFGeometry::NpadX() - 1;
eff[nActivatedPads-1] = effX * effZ;
res[nActivatedPads-1] = 0.001 * fTimeResolution;
timeWalk[nActivatedPads-1] = 0.;
nTail[nActivatedPads-1] = 2;
if (fTimeDelayFlag) {
if (TMath::Abs(x) < TMath::Abs(z)) {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * z);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * z, fLogChargeSmearing);
} else {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * x);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * x, fLogChargeSmearing);
}
timeDelay[nActivatedPads-1] = gRandom->Gaus(-fTimeDelaySlope * logOfqInd, fTimeSmearing);
} else {
timeDelay[nActivatedPads-1] = 0.;
}
padId[nActivatedPads-1] = 4;
}
}
}
if(ix < AliTOFGeometry::NpadX() && dX > 0) {
nActivatedPads++;
nPlace[nActivatedPads-1] = nPlace[0] + 1;
eff[nActivatedPads-1] = effX;
res[nActivatedPads-1] = 0.001 * fTimeResolution;
timeWalk[nActivatedPads-1] = 0.;
nTail[nActivatedPads-1] = 2;
if (fTimeDelayFlag) {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * x);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * x, fLogChargeSmearing);
timeDelay[nActivatedPads-1] = gRandom->Gaus(-fTimeDelaySlope * logOfqInd, fTimeSmearing);
} else {
timeDelay[nActivatedPads-1] = 0.;
}
padId[nActivatedPads-1] = 5;
if(z < k && z > 0) {
if( (iz == 1 && dZ > 0) || (iz == 2 && dZ < 0) ) {
nActivatedPads++;
nPlace[nActivatedPads - 1] = nPlace[0] + (3 - 2 * iz) * AliTOFGeometry::NpadX() + 1;
eff[nActivatedPads - 1] = effX * effZ;
res[nActivatedPads-1] = 0.001 * fTimeResolution;
timeWalk[nActivatedPads-1] = 0.;
nTail[nActivatedPads-1] = 2;
if (fTimeDelayFlag) {
if (TMath::Abs(x) < TMath::Abs(z)) {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * z);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * z, fLogChargeSmearing);
} else {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * x);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * x, fLogChargeSmearing);
}
timeDelay[nActivatedPads-1] = gRandom->Gaus(-fTimeDelaySlope * logOfqInd, fTimeSmearing);
} else {
timeDelay[nActivatedPads-1] = 0.;
}
padId[nActivatedPads-1] = 6;
}
}
}
}
for (Int_t iPad = 0; iPad < nActivatedPads; iPad++) {
if(gRandom->Rndm() < eff[iPad]) {
isFired[iPad] = kTRUE;
nFiredPads++;
if(fEdgeTails) {
if(nTail[iPad] == 0) {
tofTime[iPad] = gRandom->Gaus(geantTime + timeWalk[iPad] + timeDelay[iPad], res[iPad]);
} else {
ftail->SetParameters(res[iPad], 2. * res[iPad], kSigmaForTail[nTail[iPad]-1]);
Double_t timeAB = ftail->GetRandom();
tofTime[iPad] = geantTime + timeWalk[iPad] + timeDelay[iPad] + timeAB;
}
} else {
tofTime[iPad] = gRandom->Gaus(geantTime + timeWalk[iPad] + timeDelay[iPad], res[iPad]);
}
if (fAverageTimeFlag) {
averageTime += tofTime[iPad] * qInduced[iPad];
weightsSum += qInduced[iPad];
} else {
averageTime += tofTime[iPad];
weightsSum += 1.;
}
AliDebug(1,Form(" Activated pad %d: geantTime=%f, tw=%fns, td=%fns, tofTime=%fns, sigma=%fps",iPad,geantTime,timeWalk[iPad],timeDelay[iPad],tofTime[iPad],1000.*res[iPad]));
}
}
if (weightsSum!=0) averageTime /= weightsSum;
break;
case 2:
if(z < h) {
if(z < h2) {
effZ = fEffBoundary + (fEff2Boundary - fEffBoundary) * z / h2;
} else {
effZ = fEff2Boundary + (fEffCenter - fEff2Boundary) * (z - h2) / (h - h2);
}
resZ = fResBoundary + (fResCenter - fResBoundary) * z / h;
timeWalkZ = fTimeWalkBoundary + (fTimeWalkCenter - fTimeWalkBoundary) * z / h;
nTail[nActivatedPads-1] = 1;
} else {
effZ = fEffCenter;
resZ = fResCenter;
timeWalkZ = fTimeWalkCenter;
}
if(x < h) {
if(x < h2) {
effX = fEffBoundary + (fEff2Boundary - fEffBoundary) * x / h2;
} else {
effX = fEff2Boundary + (fEffCenter - fEff2Boundary) * (x - h2) / (h - h2);
}
resX = fResBoundary + (fResCenter - fResBoundary) * x / h;
timeWalkX = fTimeWalkBoundary + (fTimeWalkCenter - fTimeWalkBoundary) * x / h;
nTail[nActivatedPads-1] = 1;
} else {
effX = fEffCenter;
resX = fResCenter;
timeWalkX = fTimeWalkCenter;
}
(effZ<effX) ? eff[nActivatedPads-1] = effZ : eff[nActivatedPads-1] = effX;
(resZ<resX) ? res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + resX * resX) : res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + resZ * resZ);
(timeWalkZ<timeWalkX) ? timeWalk[nActivatedPads-1] = 0.001 * timeWalkZ : timeWalk[nActivatedPads-1] = 0.001 * timeWalkX;
if(z < k2) {
effZ = fEffBoundary - (fEffBoundary - fEff3Boundary) * (z / k2);
} else {
effZ = fEff3Boundary * (k - z) / (k - k2);
}
resZ = fResBoundary + fResSlope * z / k;
timeWalkZ = fTimeWalkBoundary + fTimeWalkSlope * z / k;
if(z < k && z > 0) {
if( (iz == 1 && dZ > 0) || (iz == 2 && dZ < 0) ) {
nActivatedPads++;
nPlace[nActivatedPads-1] = nPlace[0] + (3 - 2 * iz) * AliTOFGeometry::NpadX();
eff[nActivatedPads-1] = effZ;
res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + resZ * resZ);
timeWalk[nActivatedPads-1] = 0.001 * timeWalkZ;
nTail[nActivatedPads-1] = 2;
if (fTimeDelayFlag) {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * z);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * z, fLogChargeSmearing);
timeDelay[nActivatedPads-1] = gRandom->Gaus(-fTimeDelaySlope * logOfqInd, fTimeSmearing);
} else {
timeDelay[nActivatedPads-1] = 0.;
}
padId[nActivatedPads-1] = 2;
}
}
if(x < k2) {
effX = fEffBoundary - (fEffBoundary - fEff3Boundary) * (x / k2);
} else {
effX = fEff3Boundary * (k - x) / (k - k2);
}
resX = fResBoundary + fResSlope*x/k;
timeWalkX = fTimeWalkBoundary + fTimeWalkSlope*x/k;
if(x < k && x > 0) {
if(ix > 1 && dX < 0) {
nActivatedPads++;
nPlace[nActivatedPads-1] = nPlace[0] - 1;
eff[nActivatedPads-1] = effX;
res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + resX * resX);
timeWalk[nActivatedPads-1] = 0.001 * timeWalkX;
nTail[nActivatedPads-1] = 2;
if (fTimeDelayFlag) {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * x);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * x, fLogChargeSmearing);
timeDelay[nActivatedPads-1] = gRandom->Gaus(-fTimeDelaySlope * logOfqInd, fTimeSmearing);
} else {
timeDelay[nActivatedPads-1] = 0.;
}
padId[nActivatedPads-1] = 3;
if(z < k && z > 0) {
if( (iz == 1 && dZ > 0) || (iz == 2 && dZ < 0) ) {
nActivatedPads++;
nPlace[nActivatedPads-1] = nPlace[0] + (3 - 2 * iz) * AliTOFGeometry::NpadX() - 1;
eff[nActivatedPads-1] = effX * effZ;
(resZ<resX) ? res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + resX * resX) : res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + resZ * resZ);
(timeWalkZ<timeWalkX) ? timeWalk[nActivatedPads-1] = 0.001 * timeWalkZ : timeWalk[nActivatedPads-1] = 0.001 * timeWalkX;
nTail[nActivatedPads-1] = 2;
if (fTimeDelayFlag) {
if (TMath::Abs(x) < TMath::Abs(z)) {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * z);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * z, fLogChargeSmearing);
} else {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * x);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * x, fLogChargeSmearing);
}
timeDelay[nActivatedPads-1] = gRandom->Gaus(-fTimeDelaySlope * logOfqInd, fTimeSmearing);
} else {
timeDelay[nActivatedPads-1] = 0.;
}
padId[nActivatedPads-1] = 4;
}
}
}
if(ix < AliTOFGeometry::NpadX() && dX > 0) {
nActivatedPads++;
nPlace[nActivatedPads-1] = nPlace[0] + 1;
eff[nActivatedPads-1] = effX;
res[nActivatedPads-1] = 0.001 * (TMath::Sqrt(fAddTRes*fAddTRes + resX * resX));
timeWalk[nActivatedPads-1] = 0.001 * timeWalkX;
nTail[nActivatedPads-1] = 2;
if (fTimeDelayFlag) {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * x);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * x, fLogChargeSmearing);
timeDelay[nActivatedPads-1] = gRandom->Gaus(-fTimeDelaySlope * logOfqInd, fTimeSmearing);
} else {
timeDelay[nActivatedPads-1] = 0.;
}
padId[nActivatedPads-1] = 5;
if(z < k && z > 0) {
if( (iz == 1 && dZ > 0) || (iz == 2 && dZ < 0) ) {
nActivatedPads++;
nPlace[nActivatedPads - 1] = nPlace[0] + (3 - 2 * iz) * AliTOFGeometry::NpadX() + 1;
eff[nActivatedPads - 1] = effX * effZ;
(resZ<resX) ? res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + resX * resX) : res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + resZ * resZ);
(timeWalkZ<timeWalkX) ? timeWalk[nActivatedPads-1] = 0.001 * timeWalkZ : timeWalk[nActivatedPads-1] = 0.001*timeWalkX;
nTail[nActivatedPads-1] = 2;
if (fTimeDelayFlag) {
if (TMath::Abs(x) < TMath::Abs(z)) {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * z);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * z, fLogChargeSmearing);
} else {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * x);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * x, fLogChargeSmearing);
}
timeDelay[nActivatedPads-1] = gRandom->Gaus(-fTimeDelaySlope * logOfqInd, fTimeSmearing);
} else {
timeDelay[nActivatedPads-1] = 0.;
}
padId[nActivatedPads-1] = 6;
}
}
}
}
for (Int_t iPad = 0; iPad < nActivatedPads; iPad++) {
if (res[iPad] < fTimeResolution) res[iPad] = fTimeResolution;
if(gRandom->Rndm() < eff[iPad]) {
isFired[iPad] = kTRUE;
nFiredPads++;
if(fEdgeTails) {
if(nTail[iPad] == 0) {
tofTime[iPad] = gRandom->Gaus(geantTime + timeWalk[iPad] + timeDelay[iPad], res[iPad]);
} else {
ftail->SetParameters(res[iPad], 2. * res[iPad], kSigmaForTail[nTail[iPad]-1]);
Double_t timeAB = ftail->GetRandom();
tofTime[iPad] = geantTime + timeWalk[iPad] + timeDelay[iPad] + timeAB;
}
} else {
AliDebug(1,Form(" ----------------- TOF time resolution = %f",res[iPad]));
tofTime[iPad] = gRandom->Gaus(geantTime + timeWalk[iPad] + timeDelay[iPad], res[iPad]);
}
if (fAverageTimeFlag) {
averageTime += tofTime[iPad] * qInduced[iPad];
weightsSum += qInduced[iPad];
} else {
averageTime += tofTime[iPad];
weightsSum += 1.;
}
}
}
if (weightsSum!=0) averageTime /= weightsSum;
}
}
void AliTOFSDigitizer::SimulateDetectorResponseOLD(Float_t z0, Float_t x0, Float_t geantTime, Int_t& nActivatedPads, Int_t& nFiredPads, Bool_t* isFired, Int_t* nPlace, Float_t* qInduced, Float_t* tofTime, Float_t& averageTime)
{
const Float_t kSigmaForTail[2] = {AliTOFGeometry::SigmaForTail1(),AliTOFGeometry::SigmaForTail2()};
Int_t iz = 0, ix = 0;
Float_t dX = 0., dZ = 0., x = 0., z = 0.;
Float_t h = fHparameter, h2 = fH2parameter, k = fKparameter, k2 = fK2parameter;
Float_t effX = 0., effZ = 0., resX = 0., resZ = 0., timeWalkX = 0., timeWalkZ = 0.;
Float_t logOfqInd = 0.;
Float_t weightsSum = 0.;
Int_t nTail[4] = {0,0,0,0};
Int_t padId[4] = {0,0,0,0};
Float_t eff[4] = {0.,0.,0.,0.};
Float_t res[4] = {0.,0.,0.,0.};
Float_t qCenterPad = 1.;
Float_t timeWalk[4] = {0.,0.,0.,0.};
Float_t timeDelay[4] = {0.,0.,0.,0.};
nActivatedPads = 0;
nFiredPads = 0;
(z0 <= 0) ? iz = 0 : iz = 1;
dZ = z0 + (0.5 * AliTOFGeometry::NpadZ() - iz - 0.5) * AliTOFGeometry::ZPad();
z = 0.5 * AliTOFGeometry::ZPad() - TMath::Abs(dZ);
iz++;
ix = (Int_t)((x0 + 0.5 * AliTOFGeometry::NpadX() * AliTOFGeometry::XPad()) / AliTOFGeometry::XPad());
dX = x0 + (0.5 * AliTOFGeometry::NpadX() - ix - 0.5) * AliTOFGeometry::XPad();
x = 0.5 * AliTOFGeometry::XPad() - TMath::Abs(dX);
ix++;
nActivatedPads++;
nPlace[nActivatedPads-1] = (iz - 1) * AliTOFGeometry::NpadX() + ix;
qInduced[nActivatedPads-1] = qCenterPad;
padId[nActivatedPads-1] = 1;
if (fEdgeEffect == 0) {
eff[nActivatedPads-1] = fEffCenter;
if (gRandom->Rndm() < eff[nActivatedPads-1]) {
nFiredPads = 1;
res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + fResCenter * fResCenter);
isFired[nActivatedPads-1] = kTRUE;
tofTime[nActivatedPads-1] = gRandom->Gaus(geantTime + fTimeWalkCenter, res[0]);
averageTime = tofTime[nActivatedPads-1];
}
} else {
if(z < h) {
if(z < h2) {
effZ = fEffBoundary + (fEff2Boundary - fEffBoundary) * z / h2;
} else {
effZ = fEff2Boundary + (fEffCenter - fEff2Boundary) * (z - h2) / (h - h2);
}
if (fEdgeEffect==1)
resZ = fTimeResolution;
else if (fEdgeEffect==2)
resZ = fResBoundary + (fResCenter - fResBoundary) * z / h;
timeWalkZ = fTimeWalkBoundary + (fTimeWalkCenter - fTimeWalkBoundary) * z / h;
nTail[nActivatedPads-1] = 1;
} else {
effZ = fEffCenter;
if (fEdgeEffect==1)
resZ = fTimeResolution;
else if (fEdgeEffect==2)
resZ = fResCenter;
timeWalkZ = fTimeWalkCenter;
}
if(x < h) {
if(x < h2) {
effX = fEffBoundary + (fEff2Boundary - fEffBoundary) * x / h2;
} else {
effX = fEff2Boundary + (fEffCenter - fEff2Boundary) * (x - h2) / (h - h2);
}
if (fEdgeEffect==1)
resX = fTimeResolution;
else if (fEdgeEffect==2)
resX = fResBoundary + (fResCenter - fResBoundary) * x / h;
timeWalkX = fTimeWalkBoundary + (fTimeWalkCenter - fTimeWalkBoundary) * x / h;
nTail[nActivatedPads-1] = 1;
} else {
effX = fEffCenter;
if (fEdgeEffect==1)
resX = fTimeResolution;
else if (fEdgeEffect==2)
resX = fResCenter;
timeWalkX = fTimeWalkCenter;
}
(effZ<effX) ? eff[nActivatedPads-1] = effZ : eff[nActivatedPads-1] = effX;
if (fEdgeEffect==1)
(resZ<resX) ? res[nActivatedPads-1] = 0.001 * resX : res[nActivatedPads-1] = 0.001 * resZ;
else
(resZ<resX) ? res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + resX * resX) : res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + resZ * resZ);
(timeWalkZ<timeWalkX) ? timeWalk[nActivatedPads-1] = 0.001 * timeWalkZ : timeWalk[nActivatedPads-1] = 0.001 * timeWalkX;
if(z < k2) {
effZ = fEffBoundary - (fEffBoundary - fEff3Boundary) * (z / k2);
} else {
effZ = fEff3Boundary * (k - z) / (k - k2);
}
if (fEdgeEffect==1)
resZ = fTimeResolution;
else if (fEdgeEffect==2)
resZ = fResBoundary + fResSlope * z / k;
timeWalkZ = fTimeWalkBoundary + fTimeWalkSlope * z / k;
if(z < k && z > 0) {
if( (iz == 1 && dZ > 0) || (iz == 2 && dZ < 0) ) {
nActivatedPads++;
nPlace[nActivatedPads-1] = nPlace[0] + (3 - 2 * iz) * AliTOFGeometry::NpadX();
eff[nActivatedPads-1] = effZ;
if (fEdgeEffect==1)
res[nActivatedPads-1] = 0.001 * resZ;
else
res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + resZ * resZ);
timeWalk[nActivatedPads-1] = 0.001 * timeWalkZ;
nTail[nActivatedPads-1] = 2;
if (fTimeDelayFlag) {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * z);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * z, fLogChargeSmearing);
timeDelay[nActivatedPads-1] = gRandom->Gaus(-fTimeDelaySlope * logOfqInd, fTimeSmearing);
} else {
timeDelay[nActivatedPads-1] = 0.;
}
padId[nActivatedPads-1] = 2;
}
}
if(x < k2) {
effX = fEffBoundary - (fEffBoundary - fEff3Boundary) * (x / k2);
} else {
effX = fEff3Boundary * (k - x) / (k - k2);
}
if (fEdgeEffect==1)
resX = fTimeResolution;
else if (fEdgeEffect==2)
resX = fResBoundary + fResSlope*x/k;
timeWalkX = fTimeWalkBoundary + fTimeWalkSlope*x/k;
if(x < k && x > 0) {
if(ix > 1 && dX < 0) {
nActivatedPads++;
nPlace[nActivatedPads-1] = nPlace[0] - 1;
eff[nActivatedPads-1] = effX;
if (fEdgeEffect==1)
res[nActivatedPads-1] = 0.001 * resX;
else if (fEdgeEffect==2)
res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + resX * resX);
timeWalk[nActivatedPads-1] = 0.001 * timeWalkX;
nTail[nActivatedPads-1] = 2;
if (fTimeDelayFlag) {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * x);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * x, fLogChargeSmearing);
timeDelay[nActivatedPads-1] = gRandom->Gaus(-fTimeDelaySlope * logOfqInd, fTimeSmearing);
} else {
timeDelay[nActivatedPads-1] = 0.;
}
padId[nActivatedPads-1] = 3;
if(z < k && z > 0) {
if( (iz == 1 && dZ > 0) || (iz == 2 && dZ < 0) ) {
nActivatedPads++;
nPlace[nActivatedPads-1] = nPlace[0] + (3 - 2 * iz) * AliTOFGeometry::NpadX() - 1;
eff[nActivatedPads-1] = effX * effZ;
if (fEdgeEffect==1)
(resZ<resX) ? res[nActivatedPads-1] = 0.001 * resX : res[nActivatedPads-1] = 0.001 * resZ;
else if (fEdgeEffect==2)
(resZ<resX) ? res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + resX * resX) : res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + resZ * resZ);
(timeWalkZ<timeWalkX) ? timeWalk[nActivatedPads-1] = 0.001 * timeWalkZ : timeWalk[nActivatedPads-1] = 0.001 * timeWalkX;
nTail[nActivatedPads-1] = 2;
if (fTimeDelayFlag) {
if (TMath::Abs(x) < TMath::Abs(z)) {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * z);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * z, fLogChargeSmearing);
} else {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * x);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * x, fLogChargeSmearing);
}
timeDelay[nActivatedPads-1] = gRandom->Gaus(-fTimeDelaySlope * logOfqInd, fTimeSmearing);
} else {
timeDelay[nActivatedPads-1] = 0.;
}
padId[nActivatedPads-1] = 4;
}
}
}
if(ix < AliTOFGeometry::NpadX() && dX > 0) {
nActivatedPads++;
nPlace[nActivatedPads-1] = nPlace[0] + 1;
eff[nActivatedPads-1] = effX;
if (fEdgeEffect==1)
res[nActivatedPads-1] = 0.001 * resX;
else if (fEdgeEffect==2)
res[nActivatedPads-1] = 0.001 * (TMath::Sqrt(fAddTRes*fAddTRes + resX * resX));
timeWalk[nActivatedPads-1] = 0.001 * timeWalkX;
nTail[nActivatedPads-1] = 2;
if (fTimeDelayFlag) {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * x);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * x, fLogChargeSmearing);
timeDelay[nActivatedPads-1] = gRandom->Gaus(-fTimeDelaySlope * logOfqInd, fTimeSmearing);
} else {
timeDelay[nActivatedPads-1] = 0.;
}
padId[nActivatedPads-1] = 5;
if(z < k && z > 0) {
if( (iz == 1 && dZ > 0) || (iz == 2 && dZ < 0) ) {
nActivatedPads++;
nPlace[nActivatedPads - 1] = nPlace[0] + (3 - 2 * iz) * AliTOFGeometry::NpadX() + 1;
eff[nActivatedPads - 1] = effX * effZ;
if (fEdgeEffect==1)
(resZ<resX) ? res[nActivatedPads-1] = 0.001 * resX : res[nActivatedPads-1] = 0.001 * resZ;
else if (fEdgeEffect==2)
(resZ<resX) ? res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + resX * resX) : res[nActivatedPads-1] = 0.001 * TMath::Sqrt(fAddTRes*fAddTRes + resZ * resZ);
(timeWalkZ<timeWalkX) ? timeWalk[nActivatedPads-1] = 0.001 * timeWalkZ : timeWalk[nActivatedPads-1] = 0.001*timeWalkX;
nTail[nActivatedPads-1] = 2;
if (fTimeDelayFlag) {
if (TMath::Abs(x) < TMath::Abs(z)) {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * z);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * z, fLogChargeSmearing);
} else {
qInduced[nActivatedPads-1] = TMath::Exp(-fPulseHeightSlope * x);
logOfqInd = gRandom->Gaus(-fPulseHeightSlope * x, fLogChargeSmearing);
}
timeDelay[nActivatedPads-1] = gRandom->Gaus(-fTimeDelaySlope * logOfqInd, fTimeSmearing);
} else {
timeDelay[nActivatedPads-1] = 0.;
}
padId[nActivatedPads-1] = 6;
}
}
}
}
for (Int_t iPad = 0; iPad < nActivatedPads; iPad++) {
if (fEdgeEffect==2 && res[iPad] < fTimeResolution) res[iPad] = fTimeResolution;
if(gRandom->Rndm() < eff[iPad]) {
isFired[iPad] = kTRUE;
nFiredPads++;
if(fEdgeTails) {
if(nTail[iPad] == 0) {
tofTime[iPad] = gRandom->Gaus(geantTime + timeWalk[iPad] + timeDelay[iPad], res[iPad]);
} else {
ftail->SetParameters(res[iPad], 2. * res[iPad], kSigmaForTail[nTail[iPad]-1]);
Double_t timeAB = ftail->GetRandom();
tofTime[iPad] = geantTime + timeWalk[iPad] + timeDelay[iPad] + timeAB;
}
} else {
AliDebug(1,Form(" ----------------- TOF time resolution = %f",res[iPad]));
tofTime[iPad] = gRandom->Gaus(geantTime + timeWalk[iPad] + timeDelay[iPad], res[iPad]);
}
if (fAverageTimeFlag) {
averageTime += tofTime[iPad] * qInduced[iPad];
weightsSum += qInduced[iPad];
} else {
averageTime += tofTime[iPad];
weightsSum += 1.;
}
}
}
if (weightsSum!=0) averageTime /= weightsSum;
}
}
void AliTOFSDigitizer::PrintParameters()const
{
AliInfo(Form(" ------------------- %s -------------", GetName()));
AliInfo(" Parameters used for TOF SDigitization ");
AliInfo(Form(" Number of events: %i ", (fEvent2-fEvent1)));
AliInfo(Form(" from event %i to event %i", fEvent1, (fEvent2-1)));
AliInfo(Form(" Time Resolution (ps) %f Pad Efficiency: %f ", fTimeResolution, fpadefficiency));
AliInfo(Form(" Edge Effect option: %d", fEdgeEffect));
AliInfo(" Boundary Effect Simulation Parameters ");
AliInfo(Form(" Hparameter: %f H2parameter: %f Kparameter: %f K2parameter: %f", fHparameter, fH2parameter, fKparameter, fK2parameter));
AliInfo(Form(" Efficiency in the central region of the pad: %f", fEffCenter));
AliInfo(Form(" Efficiency at the boundary region of the pad: %f", fEffBoundary));
AliInfo(Form(" Efficiency value at H2parameter %f", fEff2Boundary));
AliInfo(Form(" Efficiency value at K2parameter %f", fEff3Boundary));
AliInfo(Form(" Resolution (ps) in the central region of the pad: %f", fResCenter));
AliInfo(Form(" Resolution (ps) at the boundary of the pad : %f", fResBoundary));
AliInfo(Form(" Slope (ps/K) for neighbouring pad : %f", fResSlope));
AliInfo(Form(" Time walk (ps) in the central region of the pad : %f", fTimeWalkCenter));
AliInfo(Form(" Time walk (ps) at the boundary of the pad : %f", fTimeWalkBoundary));
AliInfo(Form(" Slope (ps/K) for neighbouring pad : %f", fTimeWalkSlope));
AliInfo(" Pulse Heigth Simulation Parameters ");
AliInfo(Form(" Flag for delay due to the PulseHeightEffect : %d", fTimeDelayFlag));
AliInfo(Form(" Pulse Height Slope : %f", fPulseHeightSlope));
AliInfo(Form(" Time Delay Slope : %f", fTimeDelaySlope));
AliInfo(Form(" Minimum charge amount which could be induced : %f", fMinimumCharge));
AliInfo(Form(" Smearing in charge in (q1/q2) vs x plot : %f", fChargeSmearing));
AliInfo(Form(" Smearing in log of charge ratio : %f", fLogChargeSmearing));
AliInfo(Form(" Smearing in time in time vs log(q1/q2) plot : %f", fTimeSmearing));
AliInfo(Form(" Flag for average time : %d", fAverageTimeFlag));
AliInfo(Form(" Edge tails option : %d", fEdgeTails));
}
AliTOFSDigitizer.cxx:1000 AliTOFSDigitizer.cxx:1001 AliTOFSDigitizer.cxx:1002 AliTOFSDigitizer.cxx:1003 AliTOFSDigitizer.cxx:1004 AliTOFSDigitizer.cxx:1005 AliTOFSDigitizer.cxx:1006 AliTOFSDigitizer.cxx:1007 AliTOFSDigitizer.cxx:1008 AliTOFSDigitizer.cxx:1009 AliTOFSDigitizer.cxx:1010 AliTOFSDigitizer.cxx:1011 AliTOFSDigitizer.cxx:1012 AliTOFSDigitizer.cxx:1013 AliTOFSDigitizer.cxx:1014 AliTOFSDigitizer.cxx:1015 AliTOFSDigitizer.cxx:1016 AliTOFSDigitizer.cxx:1017 AliTOFSDigitizer.cxx:1018 AliTOFSDigitizer.cxx:1019 AliTOFSDigitizer.cxx:1020 AliTOFSDigitizer.cxx:1021 AliTOFSDigitizer.cxx:1022 AliTOFSDigitizer.cxx:1023 AliTOFSDigitizer.cxx:1024 AliTOFSDigitizer.cxx:1025 AliTOFSDigitizer.cxx:1026 AliTOFSDigitizer.cxx:1027 AliTOFSDigitizer.cxx:1028 AliTOFSDigitizer.cxx:1029 AliTOFSDigitizer.cxx:1030 AliTOFSDigitizer.cxx:1031 AliTOFSDigitizer.cxx:1032 AliTOFSDigitizer.cxx:1033 AliTOFSDigitizer.cxx:1034 AliTOFSDigitizer.cxx:1035 AliTOFSDigitizer.cxx:1036 AliTOFSDigitizer.cxx:1037 AliTOFSDigitizer.cxx:1038 AliTOFSDigitizer.cxx:1039 AliTOFSDigitizer.cxx:1040 AliTOFSDigitizer.cxx:1041 AliTOFSDigitizer.cxx:1042 AliTOFSDigitizer.cxx:1043 AliTOFSDigitizer.cxx:1044 AliTOFSDigitizer.cxx:1045 AliTOFSDigitizer.cxx:1046 AliTOFSDigitizer.cxx:1047 AliTOFSDigitizer.cxx:1048 AliTOFSDigitizer.cxx:1049 AliTOFSDigitizer.cxx:1050 AliTOFSDigitizer.cxx:1051 AliTOFSDigitizer.cxx:1052 AliTOFSDigitizer.cxx:1053 AliTOFSDigitizer.cxx:1054 AliTOFSDigitizer.cxx:1055 AliTOFSDigitizer.cxx:1056 AliTOFSDigitizer.cxx:1057 AliTOFSDigitizer.cxx:1058 AliTOFSDigitizer.cxx:1059 AliTOFSDigitizer.cxx:1060 AliTOFSDigitizer.cxx:1061 AliTOFSDigitizer.cxx:1062 AliTOFSDigitizer.cxx:1063 AliTOFSDigitizer.cxx:1064 AliTOFSDigitizer.cxx:1065 AliTOFSDigitizer.cxx:1066 AliTOFSDigitizer.cxx:1067 AliTOFSDigitizer.cxx:1068 AliTOFSDigitizer.cxx:1069 AliTOFSDigitizer.cxx:1070 AliTOFSDigitizer.cxx:1071 AliTOFSDigitizer.cxx:1072 AliTOFSDigitizer.cxx:1073 AliTOFSDigitizer.cxx:1074 AliTOFSDigitizer.cxx:1075 AliTOFSDigitizer.cxx:1076 AliTOFSDigitizer.cxx:1077 AliTOFSDigitizer.cxx:1078 AliTOFSDigitizer.cxx:1079 AliTOFSDigitizer.cxx:1080 AliTOFSDigitizer.cxx:1081 AliTOFSDigitizer.cxx:1082 AliTOFSDigitizer.cxx:1083 AliTOFSDigitizer.cxx:1084 AliTOFSDigitizer.cxx:1085 AliTOFSDigitizer.cxx:1086 AliTOFSDigitizer.cxx:1087 AliTOFSDigitizer.cxx:1088 AliTOFSDigitizer.cxx:1089 AliTOFSDigitizer.cxx:1090 AliTOFSDigitizer.cxx:1091 AliTOFSDigitizer.cxx:1092 AliTOFSDigitizer.cxx:1093 AliTOFSDigitizer.cxx:1094 AliTOFSDigitizer.cxx:1095 AliTOFSDigitizer.cxx:1096 AliTOFSDigitizer.cxx:1097 AliTOFSDigitizer.cxx:1098 AliTOFSDigitizer.cxx:1099 AliTOFSDigitizer.cxx:1100 AliTOFSDigitizer.cxx:1101 AliTOFSDigitizer.cxx:1102 AliTOFSDigitizer.cxx:1103 AliTOFSDigitizer.cxx:1104 AliTOFSDigitizer.cxx:1105 AliTOFSDigitizer.cxx:1106 AliTOFSDigitizer.cxx:1107 AliTOFSDigitizer.cxx:1108 AliTOFSDigitizer.cxx:1109 AliTOFSDigitizer.cxx:1110 AliTOFSDigitizer.cxx:1111 AliTOFSDigitizer.cxx:1112 AliTOFSDigitizer.cxx:1113 AliTOFSDigitizer.cxx:1114 AliTOFSDigitizer.cxx:1115 AliTOFSDigitizer.cxx:1116 AliTOFSDigitizer.cxx:1117 AliTOFSDigitizer.cxx:1118 AliTOFSDigitizer.cxx:1119 AliTOFSDigitizer.cxx:1120 AliTOFSDigitizer.cxx:1121 AliTOFSDigitizer.cxx:1122 AliTOFSDigitizer.cxx:1123 AliTOFSDigitizer.cxx:1124 AliTOFSDigitizer.cxx:1125 AliTOFSDigitizer.cxx:1126 AliTOFSDigitizer.cxx:1127 AliTOFSDigitizer.cxx:1128 AliTOFSDigitizer.cxx:1129 AliTOFSDigitizer.cxx:1130 AliTOFSDigitizer.cxx:1131 AliTOFSDigitizer.cxx:1132 AliTOFSDigitizer.cxx:1133 AliTOFSDigitizer.cxx:1134 AliTOFSDigitizer.cxx:1135 AliTOFSDigitizer.cxx:1136 AliTOFSDigitizer.cxx:1137 AliTOFSDigitizer.cxx:1138 AliTOFSDigitizer.cxx:1139 AliTOFSDigitizer.cxx:1140 AliTOFSDigitizer.cxx:1141 AliTOFSDigitizer.cxx:1142 AliTOFSDigitizer.cxx:1143 AliTOFSDigitizer.cxx:1144 AliTOFSDigitizer.cxx:1145 AliTOFSDigitizer.cxx:1146 AliTOFSDigitizer.cxx:1147 AliTOFSDigitizer.cxx:1148 AliTOFSDigitizer.cxx:1149 AliTOFSDigitizer.cxx:1150 AliTOFSDigitizer.cxx:1151 AliTOFSDigitizer.cxx:1152 AliTOFSDigitizer.cxx:1153 AliTOFSDigitizer.cxx:1154 AliTOFSDigitizer.cxx:1155 AliTOFSDigitizer.cxx:1156 AliTOFSDigitizer.cxx:1157 AliTOFSDigitizer.cxx:1158 AliTOFSDigitizer.cxx:1159 AliTOFSDigitizer.cxx:1160 AliTOFSDigitizer.cxx:1161 AliTOFSDigitizer.cxx:1162 AliTOFSDigitizer.cxx:1163 AliTOFSDigitizer.cxx:1164 AliTOFSDigitizer.cxx:1165 AliTOFSDigitizer.cxx:1166 AliTOFSDigitizer.cxx:1167 AliTOFSDigitizer.cxx:1168 AliTOFSDigitizer.cxx:1169 AliTOFSDigitizer.cxx:1170 AliTOFSDigitizer.cxx:1171 AliTOFSDigitizer.cxx:1172 AliTOFSDigitizer.cxx:1173 AliTOFSDigitizer.cxx:1174 AliTOFSDigitizer.cxx:1175 AliTOFSDigitizer.cxx:1176 AliTOFSDigitizer.cxx:1177 AliTOFSDigitizer.cxx:1178 AliTOFSDigitizer.cxx:1179 AliTOFSDigitizer.cxx:1180 AliTOFSDigitizer.cxx:1181 AliTOFSDigitizer.cxx:1182 AliTOFSDigitizer.cxx:1183 AliTOFSDigitizer.cxx:1184 AliTOFSDigitizer.cxx:1185 AliTOFSDigitizer.cxx:1186 AliTOFSDigitizer.cxx:1187 AliTOFSDigitizer.cxx:1188 AliTOFSDigitizer.cxx:1189 AliTOFSDigitizer.cxx:1190 AliTOFSDigitizer.cxx:1191 AliTOFSDigitizer.cxx:1192 AliTOFSDigitizer.cxx:1193 AliTOFSDigitizer.cxx:1194 AliTOFSDigitizer.cxx:1195 AliTOFSDigitizer.cxx:1196 AliTOFSDigitizer.cxx:1197 AliTOFSDigitizer.cxx:1198 AliTOFSDigitizer.cxx:1199 AliTOFSDigitizer.cxx:1200 AliTOFSDigitizer.cxx:1201 AliTOFSDigitizer.cxx:1202 AliTOFSDigitizer.cxx:1203 AliTOFSDigitizer.cxx:1204 AliTOFSDigitizer.cxx:1205 AliTOFSDigitizer.cxx:1206 AliTOFSDigitizer.cxx:1207 AliTOFSDigitizer.cxx:1208 AliTOFSDigitizer.cxx:1209 AliTOFSDigitizer.cxx:1210 AliTOFSDigitizer.cxx:1211 AliTOFSDigitizer.cxx:1212 AliTOFSDigitizer.cxx:1213 AliTOFSDigitizer.cxx:1214 AliTOFSDigitizer.cxx:1215 AliTOFSDigitizer.cxx:1216 AliTOFSDigitizer.cxx:1217 AliTOFSDigitizer.cxx:1218 AliTOFSDigitizer.cxx:1219 AliTOFSDigitizer.cxx:1220 AliTOFSDigitizer.cxx:1221 AliTOFSDigitizer.cxx:1222 AliTOFSDigitizer.cxx:1223 AliTOFSDigitizer.cxx:1224 AliTOFSDigitizer.cxx:1225 AliTOFSDigitizer.cxx:1226 AliTOFSDigitizer.cxx:1227 AliTOFSDigitizer.cxx:1228 AliTOFSDigitizer.cxx:1229 AliTOFSDigitizer.cxx:1230 AliTOFSDigitizer.cxx:1231 AliTOFSDigitizer.cxx:1232 AliTOFSDigitizer.cxx:1233 AliTOFSDigitizer.cxx:1234 AliTOFSDigitizer.cxx:1235 AliTOFSDigitizer.cxx:1236 AliTOFSDigitizer.cxx:1237 AliTOFSDigitizer.cxx:1238 AliTOFSDigitizer.cxx:1239 AliTOFSDigitizer.cxx:1240 AliTOFSDigitizer.cxx:1241 AliTOFSDigitizer.cxx:1242 AliTOFSDigitizer.cxx:1243 AliTOFSDigitizer.cxx:1244 AliTOFSDigitizer.cxx:1245 AliTOFSDigitizer.cxx:1246 AliTOFSDigitizer.cxx:1247 AliTOFSDigitizer.cxx:1248 AliTOFSDigitizer.cxx:1249 AliTOFSDigitizer.cxx:1250 AliTOFSDigitizer.cxx:1251 AliTOFSDigitizer.cxx:1252 AliTOFSDigitizer.cxx:1253 AliTOFSDigitizer.cxx:1254 AliTOFSDigitizer.cxx:1255 AliTOFSDigitizer.cxx:1256 AliTOFSDigitizer.cxx:1257 AliTOFSDigitizer.cxx:1258 AliTOFSDigitizer.cxx:1259 AliTOFSDigitizer.cxx:1260 AliTOFSDigitizer.cxx:1261 AliTOFSDigitizer.cxx:1262 AliTOFSDigitizer.cxx:1263 AliTOFSDigitizer.cxx:1264 AliTOFSDigitizer.cxx:1265 AliTOFSDigitizer.cxx:1266 AliTOFSDigitizer.cxx:1267 AliTOFSDigitizer.cxx:1268 AliTOFSDigitizer.cxx:1269 AliTOFSDigitizer.cxx:1270 AliTOFSDigitizer.cxx:1271 AliTOFSDigitizer.cxx:1272 AliTOFSDigitizer.cxx:1273 AliTOFSDigitizer.cxx:1274 AliTOFSDigitizer.cxx:1275 AliTOFSDigitizer.cxx:1276 AliTOFSDigitizer.cxx:1277 AliTOFSDigitizer.cxx:1278 AliTOFSDigitizer.cxx:1279 AliTOFSDigitizer.cxx:1280 AliTOFSDigitizer.cxx:1281 AliTOFSDigitizer.cxx:1282 AliTOFSDigitizer.cxx:1283 AliTOFSDigitizer.cxx:1284 AliTOFSDigitizer.cxx:1285 AliTOFSDigitizer.cxx:1286 AliTOFSDigitizer.cxx:1287 AliTOFSDigitizer.cxx:1288 AliTOFSDigitizer.cxx:1289 AliTOFSDigitizer.cxx:1290 AliTOFSDigitizer.cxx:1291 AliTOFSDigitizer.cxx:1292 AliTOFSDigitizer.cxx:1293 AliTOFSDigitizer.cxx:1294 AliTOFSDigitizer.cxx:1295 AliTOFSDigitizer.cxx:1296 AliTOFSDigitizer.cxx:1297 AliTOFSDigitizer.cxx:1298 AliTOFSDigitizer.cxx:1299 AliTOFSDigitizer.cxx:1300 AliTOFSDigitizer.cxx:1301 AliTOFSDigitizer.cxx:1302 AliTOFSDigitizer.cxx:1303 AliTOFSDigitizer.cxx:1304 AliTOFSDigitizer.cxx:1305 AliTOFSDigitizer.cxx:1306 AliTOFSDigitizer.cxx:1307 AliTOFSDigitizer.cxx:1308 AliTOFSDigitizer.cxx:1309 AliTOFSDigitizer.cxx:1310 AliTOFSDigitizer.cxx:1311 AliTOFSDigitizer.cxx:1312 AliTOFSDigitizer.cxx:1313 AliTOFSDigitizer.cxx:1314 AliTOFSDigitizer.cxx:1315 AliTOFSDigitizer.cxx:1316 AliTOFSDigitizer.cxx:1317 AliTOFSDigitizer.cxx:1318 AliTOFSDigitizer.cxx:1319 AliTOFSDigitizer.cxx:1320 AliTOFSDigitizer.cxx:1321 AliTOFSDigitizer.cxx:1322 AliTOFSDigitizer.cxx:1323 AliTOFSDigitizer.cxx:1324 AliTOFSDigitizer.cxx:1325 AliTOFSDigitizer.cxx:1326 AliTOFSDigitizer.cxx:1327 AliTOFSDigitizer.cxx:1328 AliTOFSDigitizer.cxx:1329 AliTOFSDigitizer.cxx:1330 AliTOFSDigitizer.cxx:1331 AliTOFSDigitizer.cxx:1332 AliTOFSDigitizer.cxx:1333 AliTOFSDigitizer.cxx:1334 AliTOFSDigitizer.cxx:1335 AliTOFSDigitizer.cxx:1336 AliTOFSDigitizer.cxx:1337 AliTOFSDigitizer.cxx:1338 AliTOFSDigitizer.cxx:1339 AliTOFSDigitizer.cxx:1340 AliTOFSDigitizer.cxx:1341 AliTOFSDigitizer.cxx:1342 AliTOFSDigitizer.cxx:1343 AliTOFSDigitizer.cxx:1344 AliTOFSDigitizer.cxx:1345 AliTOFSDigitizer.cxx:1346 AliTOFSDigitizer.cxx:1347 AliTOFSDigitizer.cxx:1348 AliTOFSDigitizer.cxx:1349 AliTOFSDigitizer.cxx:1350 AliTOFSDigitizer.cxx:1351 AliTOFSDigitizer.cxx:1352 AliTOFSDigitizer.cxx:1353 AliTOFSDigitizer.cxx:1354 AliTOFSDigitizer.cxx:1355 AliTOFSDigitizer.cxx:1356 AliTOFSDigitizer.cxx:1357 AliTOFSDigitizer.cxx:1358 AliTOFSDigitizer.cxx:1359 AliTOFSDigitizer.cxx:1360 AliTOFSDigitizer.cxx:1361 AliTOFSDigitizer.cxx:1362 AliTOFSDigitizer.cxx:1363 AliTOFSDigitizer.cxx:1364 AliTOFSDigitizer.cxx:1365 AliTOFSDigitizer.cxx:1366 AliTOFSDigitizer.cxx:1367 AliTOFSDigitizer.cxx:1368 AliTOFSDigitizer.cxx:1369 AliTOFSDigitizer.cxx:1370 AliTOFSDigitizer.cxx:1371 AliTOFSDigitizer.cxx:1372 AliTOFSDigitizer.cxx:1373 AliTOFSDigitizer.cxx:1374 AliTOFSDigitizer.cxx:1375 AliTOFSDigitizer.cxx:1376 AliTOFSDigitizer.cxx:1377 AliTOFSDigitizer.cxx:1378 AliTOFSDigitizer.cxx:1379 AliTOFSDigitizer.cxx:1380 AliTOFSDigitizer.cxx:1381 AliTOFSDigitizer.cxx:1382 AliTOFSDigitizer.cxx:1383 AliTOFSDigitizer.cxx:1384 AliTOFSDigitizer.cxx:1385 AliTOFSDigitizer.cxx:1386 AliTOFSDigitizer.cxx:1387 AliTOFSDigitizer.cxx:1388 AliTOFSDigitizer.cxx:1389 AliTOFSDigitizer.cxx:1390 AliTOFSDigitizer.cxx:1391 AliTOFSDigitizer.cxx:1392 AliTOFSDigitizer.cxx:1393 AliTOFSDigitizer.cxx:1394 AliTOFSDigitizer.cxx:1395 AliTOFSDigitizer.cxx:1396 AliTOFSDigitizer.cxx:1397 AliTOFSDigitizer.cxx:1398 AliTOFSDigitizer.cxx:1399 AliTOFSDigitizer.cxx:1400 AliTOFSDigitizer.cxx:1401 AliTOFSDigitizer.cxx:1402 AliTOFSDigitizer.cxx:1403 AliTOFSDigitizer.cxx:1404 AliTOFSDigitizer.cxx:1405 AliTOFSDigitizer.cxx:1406 AliTOFSDigitizer.cxx:1407 AliTOFSDigitizer.cxx:1408 AliTOFSDigitizer.cxx:1409 AliTOFSDigitizer.cxx:1410 AliTOFSDigitizer.cxx:1411 AliTOFSDigitizer.cxx:1412 AliTOFSDigitizer.cxx:1413 AliTOFSDigitizer.cxx:1414 AliTOFSDigitizer.cxx:1415 AliTOFSDigitizer.cxx:1416 AliTOFSDigitizer.cxx:1417 AliTOFSDigitizer.cxx:1418 AliTOFSDigitizer.cxx:1419 AliTOFSDigitizer.cxx:1420 AliTOFSDigitizer.cxx:1421 AliTOFSDigitizer.cxx:1422 AliTOFSDigitizer.cxx:1423 AliTOFSDigitizer.cxx:1424 AliTOFSDigitizer.cxx:1425 AliTOFSDigitizer.cxx:1426 AliTOFSDigitizer.cxx:1427 AliTOFSDigitizer.cxx:1428 AliTOFSDigitizer.cxx:1429 AliTOFSDigitizer.cxx:1430 AliTOFSDigitizer.cxx:1431 AliTOFSDigitizer.cxx:1432 AliTOFSDigitizer.cxx:1433 AliTOFSDigitizer.cxx:1434 AliTOFSDigitizer.cxx:1435 AliTOFSDigitizer.cxx:1436 AliTOFSDigitizer.cxx:1437 AliTOFSDigitizer.cxx:1438 AliTOFSDigitizer.cxx:1439 AliTOFSDigitizer.cxx:1440 AliTOFSDigitizer.cxx:1441 AliTOFSDigitizer.cxx:1442 AliTOFSDigitizer.cxx:1443 AliTOFSDigitizer.cxx:1444 AliTOFSDigitizer.cxx:1445 AliTOFSDigitizer.cxx:1446 AliTOFSDigitizer.cxx:1447 AliTOFSDigitizer.cxx:1448 AliTOFSDigitizer.cxx:1449 AliTOFSDigitizer.cxx:1450 AliTOFSDigitizer.cxx:1451 AliTOFSDigitizer.cxx:1452 AliTOFSDigitizer.cxx:1453 AliTOFSDigitizer.cxx:1454 AliTOFSDigitizer.cxx:1455 AliTOFSDigitizer.cxx:1456 AliTOFSDigitizer.cxx:1457 AliTOFSDigitizer.cxx:1458 AliTOFSDigitizer.cxx:1459 AliTOFSDigitizer.cxx:1460 AliTOFSDigitizer.cxx:1461 AliTOFSDigitizer.cxx:1462 AliTOFSDigitizer.cxx:1463 AliTOFSDigitizer.cxx:1464 AliTOFSDigitizer.cxx:1465 AliTOFSDigitizer.cxx:1466 AliTOFSDigitizer.cxx:1467 AliTOFSDigitizer.cxx:1468 AliTOFSDigitizer.cxx:1469 AliTOFSDigitizer.cxx:1470 AliTOFSDigitizer.cxx:1471 AliTOFSDigitizer.cxx:1472 AliTOFSDigitizer.cxx:1473 AliTOFSDigitizer.cxx:1474 AliTOFSDigitizer.cxx:1475 AliTOFSDigitizer.cxx:1476 AliTOFSDigitizer.cxx:1477 AliTOFSDigitizer.cxx:1478 AliTOFSDigitizer.cxx:1479 AliTOFSDigitizer.cxx:1480 AliTOFSDigitizer.cxx:1481 AliTOFSDigitizer.cxx:1482 AliTOFSDigitizer.cxx:1483 AliTOFSDigitizer.cxx:1484 AliTOFSDigitizer.cxx:1485 AliTOFSDigitizer.cxx:1486 AliTOFSDigitizer.cxx:1487 AliTOFSDigitizer.cxx:1488 AliTOFSDigitizer.cxx:1489 AliTOFSDigitizer.cxx:1490 AliTOFSDigitizer.cxx:1491