#ifndef ALIITSSIMULATIONSPD_H
#define ALIITSSIMULATIONSPD_H
#include "TObjArray.h"
#include "AliITSsimulation.h"
#include "AliITSsegmentationSPD.h"
class TH1F;
class AliITSmodule;
class AliITSsimulationSPD : public AliITSsimulation {
public:
AliITSsimulationSPD();
AliITSsimulationSPD(AliITSDetTypeSim *dettyp);
virtual ~AliITSsimulationSPD();
AliITSsimulationSPD(const AliITSsimulationSPD &source);
AliITSsimulationSPD& operator=(const AliITSsimulationSPD &s);
void Init();
void InitSimulationModule(Int_t module, Int_t event);
void FinishSDigitiseModule();
void DigitiseModule(AliITSmodule *mod,Int_t,Int_t);
void SDigitiseModule(AliITSmodule *mod, Int_t mask, Int_t event);
void WriteSDigits();
void HitToSDigit(AliITSmodule *mod);
void HitToSDigitFast(AliITSmodule *mod);
void AddNoisyPixels();
void RemoveDeadPixels();
void FrompListToDigits();
void SetLorentzDrift(Bool_t b=kFALSE)
{fLorentz=b; if(fLorentz) SetTanLorAngle();};
Bool_t SetTanLorAngle(Double_t WeightHole=1.0);
Double_t GetTanLorAngle() const {return fTanLorAng;};
void CreateHistograms();
void FillHistograms(Int_t ix,Int_t iz,Double_t v=1.0);
void ResetHistograms();
TH1F* GetHistogram(Int_t i){return (TH1F*)(fHis->At(i));}
TObjArray* GetHistArray() {return fHis;}
TString& GetHistName(){return fSPDname;}
void SetHistName(TString &n){fSPDname = n;}
void SDigitsToDigits(){ FinishSDigitiseModule();};
void HitToDigit(AliITSmodule *mod){
DigitiseModule(mod,GetModuleNumber(),0);};
void SetStrobeGeneration(Bool_t b=kFALSE) {fStrobe=b;};
void GenerateStrobePhase();
private:
void SpreadCharge(Double_t x0,Double_t z0,Int_t ix0,Int_t iz0,
Double_t el,Double_t sig,Double_t ld,Int_t t,Int_t hi);
void SpreadChargeAsym(Double_t x0,Double_t z0,Int_t ix0,Int_t iz0,
Double_t el,Double_t sigx,Double_t sigz,Double_t ld,Int_t t,Int_t hi);
void UpdateMapSignal(Int_t ix,Int_t iz,Int_t trk,Int_t ht,Double_t signal){
GetMap()->AddSignal(iz,ix,trk,ht,GetModuleNumber(),signal);};
void UpdateMapNoise(Int_t ix,Int_t iz,Float_t noise){
GetMap()->AddNoise(iz,ix,GetModuleNumber(),noise);}
virtual AliITSsegmentation* GetSegmentationModel(Int_t ){return fDetType->GetSegmentationModel(0);}
virtual void SetSegmentationModel(Int_t , AliITSsegmentation *seg){fDetType->SetSegmentationModel(0,seg);}
void SetCoupling(Int_t col,Int_t row);
void SetCouplingOld(Int_t col, Int_t row);
Double_t GetThreshold(){
Double_t th,sig;AliITSSimuParam* simpar = fDetType->GetSimuParam();
simpar->SPDThresholds(GetModuleNumber(),th,sig);return th;};
void GetCouplings(Double_t &cc,Double_t &cr){
AliITSSimuParam* simpar = fDetType->GetSimuParam();
simpar->GetSPDCouplingParam(cc,cr);};
Int_t GetNPixelsX(){return GetSegmentationModel(0)->Npx();};
Int_t GetNPixelsZ(){return GetSegmentationModel(0)->Npz();};
TObjArray *fHis;
TString fSPDname;
Int_t fCoupling;
Bool_t fLorentz;
Double_t fTanLorAng;
Bool_t fStrobe;
Int_t fStrobeLenght;
Double_t fStrobePhase;
ClassDef(AliITSsimulationSPD,4)
};
#endif
AliITSsimulationSPD.h:100 AliITSsimulationSPD.h:101 AliITSsimulationSPD.h:102 AliITSsimulationSPD.h:103 AliITSsimulationSPD.h:104 AliITSsimulationSPD.h:105 AliITSsimulationSPD.h:106 AliITSsimulationSPD.h:107 AliITSsimulationSPD.h:108 AliITSsimulationSPD.h:109 AliITSsimulationSPD.h:110 AliITSsimulationSPD.h:111 AliITSsimulationSPD.h:112 AliITSsimulationSPD.h:113 AliITSsimulationSPD.h:114 AliITSsimulationSPD.h:115 AliITSsimulationSPD.h:116 AliITSsimulationSPD.h:117 AliITSsimulationSPD.h:118 AliITSsimulationSPD.h:119 AliITSsimulationSPD.h:120 AliITSsimulationSPD.h:121 AliITSsimulationSPD.h:122 AliITSsimulationSPD.h:123 AliITSsimulationSPD.h:124 AliITSsimulationSPD.h:125 AliITSsimulationSPD.h:126 AliITSsimulationSPD.h:127 AliITSsimulationSPD.h:128 AliITSsimulationSPD.h:129 AliITSsimulationSPD.h:130 AliITSsimulationSPD.h:131 AliITSsimulationSPD.h:132 AliITSsimulationSPD.h:133