#include <TRandom.h>
#include "TSeqCollection.h"
#include "AliITSUSimulation.h"
#include "AliITSUSDigit.h"
#include "AliITSUChip.h"
#include "AliITSUParamList.h"
using namespace TMath;
ClassImp(AliITSUSimulation)
AliITSUSimulation::AliITSUSimulation()
: fSeg(0)
,fCalibDead(0)
,fCalibNoisy(0)
,fSensMap(0)
,fSimuParam(0)
,fResponseParam(0)
,fChip(0)
,fReadOutCycleOffset(0)
,fReadOutCycleLength(25e-6)
,fEvent(0)
,fDebug(0)
{
}
AliITSUSimulation::AliITSUSimulation(AliITSUSimuParam* sim,AliITSUSensMap* map)
:fSeg(0)
,fCalibDead(0)
,fCalibNoisy(0)
,fSensMap(map)
,fSimuParam(sim)
,fResponseParam(0)
,fChip(0)
,fReadOutCycleOffset(0)
,fReadOutCycleLength(25e-6)
,fEvent(0)
,fDebug(0)
{
}
AliITSUSimulation::AliITSUSimulation(const AliITSUSimulation &s)
:TObject(s)
,fSeg(s.fSeg)
,fCalibDead(s.fCalibDead)
,fCalibNoisy(s.fCalibNoisy)
,fSensMap(s.fSensMap)
,fSimuParam(s.fSimuParam)
,fResponseParam(s.fResponseParam)
,fChip(s.fChip)
,fReadOutCycleOffset(s.fReadOutCycleOffset)
,fReadOutCycleLength(s.fReadOutCycleLength)
,fEvent(s.fEvent)
,fDebug(s.fDebug)
{
}
AliITSUSimulation& AliITSUSimulation::operator=(const AliITSUSimulation &s)
{
if(&s == this) return *this;
fSeg = s.fSeg;
fCalibDead = s.fCalibDead;
fCalibNoisy= s.fCalibNoisy;
fSensMap = s.fSensMap;
fSimuParam = s.fSimuParam;
fResponseParam = s.fResponseParam;
fChip = s.fChip;
fReadOutCycleOffset = s.fReadOutCycleOffset;
fReadOutCycleLength = s.fReadOutCycleLength;
fEvent = s.fEvent;
return *this;
}
void AliITSUSimulation::InitSimulationChip(AliITSUChip* mod, Int_t event, AliITSsegmentation* seg, AliITSUParamList* resp)
{
SetChip(mod);
SetSegmentation(seg);
SetResponseParam(resp);
ClearMap();
memset(fCyclesID,0,(1+2*kMaxROCycleAccept)*sizeof(Bool_t));
SetEvent(event);
}
Bool_t AliITSUSimulation::AddSDigitsToChip(TSeqCollection *pItemArr,Int_t mask )
{
Int_t nItems = pItemArr->GetEntries();
Bool_t sig = kFALSE;
for( Int_t i=0; i<nItems; i++ ) {
AliITSUSDigit * pItem = (AliITSUSDigit *)(pItemArr->At( i ));
if(pItem->GetChip() != int(fChip->GetIndex()) ) AliFatal(Form("SDigits chip %d != current chip %d: exit", pItem->GetChip(),fChip->GetIndex()));
if(pItem->GetSumSignal()>0.0 ) sig = kTRUE;
AliITSUSDigit* oldItem = (AliITSUSDigit*)fSensMap->GetItem(pItem);
if (!oldItem) {
oldItem = (AliITSUSDigit*)fSensMap->RegisterItem( new(fSensMap->GetFree()) AliITSUSDigit(*pItem) );
if (mask) oldItem->ShiftIndices(mask);
}
else oldItem->AddTo(mask, pItem);
}
return sig;
}
void AliITSUSimulation::UpdateMapSignal(UInt_t col,UInt_t row,Int_t trk,Int_t ht,Double_t signal, Int_t roCycle)
{
if (Abs(roCycle)>kMaxROCycleAccept) {
AliError(Form("CycleID %d is outside of allowed +-%d range",roCycle,kMaxROCycleAccept));
return;
}
UInt_t ind = fSensMap->GetIndex(col,row,roCycle);
AliITSUSDigit* oldItem = (AliITSUSDigit*)fSensMap->GetItem(ind);
if (!oldItem) {
fSensMap->RegisterItem( new(fSensMap->GetFree()) AliITSUSDigit(trk,ht,fChip->GetIndex(),ind,signal,roCycle) );
fCyclesID[roCycle+kMaxROCycleAccept] = kTRUE;
}
else oldItem->AddSignal(trk,ht,signal);
}
void AliITSUSimulation::UpdateMapNoise(UInt_t col,UInt_t row,Double_t noise, Int_t roCycle)
{
if (Abs(roCycle)>kMaxROCycleAccept) {
AliError(Form("CycleID %d is outside of allowed +-%d range",roCycle,kMaxROCycleAccept));
return;
}
UInt_t ind = fSensMap->GetIndex(col,row,roCycle);
AliITSUSDigit* oldItem = (AliITSUSDigit*)fSensMap->GetItem(ind);
if (!oldItem) {
fSensMap->RegisterItem( new(fSensMap->GetFree()) AliITSUSDigit(fChip->GetIndex(),ind,noise,roCycle) );
fCyclesID[roCycle+kMaxROCycleAccept] = kTRUE;
}
else oldItem->AddNoise(noise);
}
Int_t AliITSUSimulation::GenOrderedSample(UInt_t nmax,UInt_t ngen,TArrayI &vals,TArrayI &indx)
{
if (vals.GetSize()<(int)ngen) vals.Set(ngen);
if (indx.GetSize()<(int)ngen) indx.Set(ngen);
int* valA = vals.GetArray();
int* indA = indx.GetArray();
if (ngen>=nmax) {
ngen = nmax-1;
for (int i=(int)ngen;i--;) {valA[i]=indA[i]=i;}
return ngen;
}
Bool_t rep;
for (int i=0;i<(int)ngen;i++) {
do {
rep = kFALSE;
valA[i] = gRandom->Rndm()*nmax;
for (int j=i;j--;) if (valA[j]==valA[i]) {rep=kTRUE;break;}
} while(rep);
}
Sort((int)ngen,valA,indA,kFALSE);
return ngen;
}
Double_t AliITSUSimulation::GenerateReadOutCycleOffset()
{
return fReadOutCycleOffset = fReadOutCycleLength*gRandom->Rndm();
}
AliITSUSimulation.cxx:100 AliITSUSimulation.cxx:101 AliITSUSimulation.cxx:102 AliITSUSimulation.cxx:103 AliITSUSimulation.cxx:104 AliITSUSimulation.cxx:105 AliITSUSimulation.cxx:106 AliITSUSimulation.cxx:107 AliITSUSimulation.cxx:108 AliITSUSimulation.cxx:109 AliITSUSimulation.cxx:110 AliITSUSimulation.cxx:111 AliITSUSimulation.cxx:112 AliITSUSimulation.cxx:113 AliITSUSimulation.cxx:114 AliITSUSimulation.cxx:115 AliITSUSimulation.cxx:116 AliITSUSimulation.cxx:117 AliITSUSimulation.cxx:118 AliITSUSimulation.cxx:119 AliITSUSimulation.cxx:120 AliITSUSimulation.cxx:121 AliITSUSimulation.cxx:122 AliITSUSimulation.cxx:123 AliITSUSimulation.cxx:124 AliITSUSimulation.cxx:125 AliITSUSimulation.cxx:126 AliITSUSimulation.cxx:127 AliITSUSimulation.cxx:128 AliITSUSimulation.cxx:129 AliITSUSimulation.cxx:130 AliITSUSimulation.cxx:131 AliITSUSimulation.cxx:132 AliITSUSimulation.cxx:133 AliITSUSimulation.cxx:134 AliITSUSimulation.cxx:135 AliITSUSimulation.cxx:136 AliITSUSimulation.cxx:137 AliITSUSimulation.cxx:138 AliITSUSimulation.cxx:139 AliITSUSimulation.cxx:140 AliITSUSimulation.cxx:141 AliITSUSimulation.cxx:142 AliITSUSimulation.cxx:143 AliITSUSimulation.cxx:144 AliITSUSimulation.cxx:145 AliITSUSimulation.cxx:146 AliITSUSimulation.cxx:147 AliITSUSimulation.cxx:148 AliITSUSimulation.cxx:149 AliITSUSimulation.cxx:150 AliITSUSimulation.cxx:151 AliITSUSimulation.cxx:152 AliITSUSimulation.cxx:153 AliITSUSimulation.cxx:154 AliITSUSimulation.cxx:155 AliITSUSimulation.cxx:156 AliITSUSimulation.cxx:157 AliITSUSimulation.cxx:158 AliITSUSimulation.cxx:159 AliITSUSimulation.cxx:160 AliITSUSimulation.cxx:161 AliITSUSimulation.cxx:162 AliITSUSimulation.cxx:163 AliITSUSimulation.cxx:164 AliITSUSimulation.cxx:165 AliITSUSimulation.cxx:166 AliITSUSimulation.cxx:167 AliITSUSimulation.cxx:168 AliITSUSimulation.cxx:169 AliITSUSimulation.cxx:170 AliITSUSimulation.cxx:171 AliITSUSimulation.cxx:172 AliITSUSimulation.cxx:173 AliITSUSimulation.cxx:174 AliITSUSimulation.cxx:175 AliITSUSimulation.cxx:176 AliITSUSimulation.cxx:177 AliITSUSimulation.cxx:178 AliITSUSimulation.cxx:179 AliITSUSimulation.cxx:180 AliITSUSimulation.cxx:181 AliITSUSimulation.cxx:182 AliITSUSimulation.cxx:183 AliITSUSimulation.cxx:184 AliITSUSimulation.cxx:185 AliITSUSimulation.cxx:186 AliITSUSimulation.cxx:187 AliITSUSimulation.cxx:188 AliITSUSimulation.cxx:189 AliITSUSimulation.cxx:190 AliITSUSimulation.cxx:191 AliITSUSimulation.cxx:192 AliITSUSimulation.cxx:193 AliITSUSimulation.cxx:194 AliITSUSimulation.cxx:195 AliITSUSimulation.cxx:196 AliITSUSimulation.cxx:197 AliITSUSimulation.cxx:198 AliITSUSimulation.cxx:199 AliITSUSimulation.cxx:200 AliITSUSimulation.cxx:201 AliITSUSimulation.cxx:202 AliITSUSimulation.cxx:203 AliITSUSimulation.cxx:204 AliITSUSimulation.cxx:205 AliITSUSimulation.cxx:206 AliITSUSimulation.cxx:207 AliITSUSimulation.cxx:208 AliITSUSimulation.cxx:209 AliITSUSimulation.cxx:210