X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSsimulationSPD.h;h=196029c8cdd1ac25813905de9394de8782038188;hb=24e3f48c80ba31cfab41453cc0ff3c78f315979d;hp=bf1e549202ae53efe8e943a660a65d54178b70c8;hpb=a4005be718bdbeb92609b2d3234337f2f028f848;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSsimulationSPD.h b/ITS/AliITSsimulationSPD.h index bf1e549202a..196029c8cdd 100644 --- a/ITS/AliITSsimulationSPD.h +++ b/ITS/AliITSsimulationSPD.h @@ -2,9 +2,9 @@ #define ALIITSSIMULATIONSPD_H /* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ +* See cxx source for full Copyright notice */ -/* $Id:$ */ +/* $Id$ */ //////////////////////////////////////////////////////////// // Simulation class for SPD // @@ -12,115 +12,122 @@ #include "TObjArray.h" #include "AliITSsimulation.h" -#include "AliITSCalibrationSPD.h" #include "AliITSsegmentationSPD.h" class TH1F; class AliITSmodule; -class AliITSresponseSPD; +//class AliITSresponseSPD; //------------------------------------------------------------------- class AliITSsimulationSPD : public AliITSsimulation { - public: - AliITSsimulationSPD(); - // AliITSsimulationSPD(AliITSsegmentation *seg,AliITSCalibration *res); - AliITSsimulationSPD(AliITSDetTypeSim *dettyp); - virtual ~AliITSsimulationSPD(); - // copy constructor - AliITSsimulationSPD(const AliITSsimulationSPD &source); - // ass. operator - AliITSsimulationSPD& operator=(const AliITSsimulationSPD &s); - virtual AliITSsimulation& operator=(const AliITSsimulation &source); - // Initilizes the variables - void Init(); +public: + AliITSsimulationSPD(); + // AliITSsimulationSPD(AliITSsegmentation *seg,AliITSCalibration *res); + AliITSsimulationSPD(AliITSDetTypeSim *dettyp); + virtual ~AliITSsimulationSPD(); + // copy constructor + AliITSsimulationSPD(const AliITSsimulationSPD &source); + // ass. operator + AliITSsimulationSPD& operator=(const AliITSsimulationSPD &s); + // virtual AliITSsimulation& operator=(const AliITSsimulation &source); + // Initilizes the variables + void Init(); - // General User calling routines - // Initilize simulation for a specific event and module - void InitSimulationModule(Int_t module, Int_t event); - // Finish and write S Digitization - void FinishSDigitiseModule(); - // From hits to Digits, without creating SDigits - void DigitiseModule(AliITSmodule *mod,Int_t,Int_t); + // General User calling routines + // Initilize simulation for a specific event and module + void InitSimulationModule(Int_t module, Int_t event); + // Finish and write S Digitization + void FinishSDigitiseModule(); + // From hits to Digits, without creating SDigits + void DigitiseModule(AliITSmodule *mod,Int_t,Int_t); - // More or less Internal Routines - // Create S Digits from specific module - void SDigitiseModule(AliITSmodule *mod, Int_t mask, Int_t event); - // Write S Digits to the tree of SDigits. - void WriteSDigits(); - // fill pList from hits, charge sharing, diffusion, coupling - void HitToSDigit(AliITSmodule *mod); - // fill pList from hits, charge sharing, diffusion, coupling (faster method optimized by Bjorne) - void HitToSDigitFast(AliITSmodule *mod); - // Removes dead pixels from pList - void RemoveDeadPixels(AliITSmodule *mod); - // Take pList of signals and apply noise... create Digits - void FrompListToDigits(); - // This set the Lorentz drift of Electrons and Holes: by deafult equal weights to Electrons and Holes - void SetLorentzDrift(Bool_t b=kFALSE) - {fLorentz=b; if(fLorentz) SetTanLorAngle();}; - // This function set the relative contribution between holes and electrons: use 0<=WeightHole<=1 - Bool_t SetTanLorAngle(Double_t WeightHole=0.5); - // Getter for the Lorentz angle - Double_t GetTanLorAngle(){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));}// get histogram - TObjArray* GetHistArray() {return fHis;}// get hist array - TString& GetHistName(){return fSPDname;} - void SetHistName(TString &n){fSPDname = n;} - // - // For backwards compatibility - void SDigitsToDigits(){ FinishSDigitiseModule();}; - void HitToDigit(AliITSmodule *mod){ - // Standard interface to DigitiseModule Inputs: AliITSmodule *mod Pointer to this module - DigitiseModule(mod,GetModuleNumber(),0);}; + // More or less Internal Routines + // Create S Digits from specific module + void SDigitiseModule(AliITSmodule *mod, Int_t mask, Int_t event); + // Write S Digits to the tree of SDigits. + void WriteSDigits(); + // fill pList from hits, charge sharing, diffusion, coupling + void HitToSDigit(AliITSmodule *mod); + // fill pList from hits, charge sharing, diffusion, coupling (faster method optimized by Bjorne) + void HitToSDigitFast(AliITSmodule *mod); + // Adds noisy pixels to pList + void AddNoisyPixels(); + // Removes dead pixels from pList + void RemoveDeadPixels(); + // Take pList of signals and apply noise... create Digits + void FrompListToDigits(); + // This set the Lorentz drift of Electrons and Holes: by deafult equal weights to Electrons and Holes + void SetLorentzDrift(Bool_t b=kFALSE) + {fLorentz=b; if(fLorentz) SetTanLorAngle();}; + // This function set the relative contribution between holes and electrons: use 0<=WeightHole<=1 + Bool_t SetTanLorAngle(Double_t WeightHole=1.0); + // Getter for the Lorentz angle + 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));}// get histogram + TObjArray* GetHistArray() {return fHis;}// get hist array + TString& GetHistName(){return fSPDname;} + void SetHistName(TString &n){fSPDname = n;} + // + // For backwards compatibility + void SDigitsToDigits(){ FinishSDigitiseModule();}; + void HitToDigit(AliITSmodule *mod){ + // Standard interface to DigitiseModule Inputs: AliITSmodule *mod Pointer to this module + DigitiseModule(mod,GetModuleNumber(),0);}; - private: - void SpreadCharge(Double_t x0,Double_t z0,Int_t ix0,Int_t iz0, + // This sets fStrobe flag and allows generating the strobe and applying it to select hits + 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){ - // This function adds a signal to the pList from the pList class - // Inputs: iz column number ix row number trk track number ht hit number signal signal strength - GetMap()->AddSignal(iz,ix,trk,ht,GetModuleNumber(),signal);}; - void UpdateMapNoise(Int_t ix,Int_t iz,Float_t noise){ - // This function adds noise to data in the MapA2 as well as the pList - // Inputs: iz column number ix row number noise electronic noise generated by FrompListToDigits - GetMap()->AddNoise(iz,ix,GetModuleNumber(),noise);} - // Get a pointer to the segmentation object - virtual AliITSsegmentation* GetSegmentationModel(Int_t /*dt*/){return fDetType->GetSegmentationModel(0);} - // set pointer to segmentation objec - virtual void SetSegmentationModel(Int_t /*dt*/, AliITSsegmentation *seg){fDetType->SetSegmentationModel(0,seg);} - // Bari-Salerno Coupling parameters - // "New" coupling routine Tiziano Virgili - void SetCoupling(Int_t col,Int_t row,Int_t ntrack,Int_t idhit); - // "Old" coupling routine Rocco Caliandro - void SetCouplingOld(Int_t col, Int_t row,Int_t ntrack,Int_t idhit); - // Getters for data kept in fSegmentation and fResponse. - // Returns the Threshold in electrons - Double_t GetThreshold(){ - Double_t th,sig;AliITSCalibrationSPD* res=(AliITSCalibrationSPD*)GetCalibrationModel(GetModuleNumber()); - res->Thresholds(th,sig);return th;}; - // Returns the couplings Columb and Row. - void GetCouplings(Double_t &cc,Double_t &cr){ - AliITSCalibrationSPD* res = (AliITSCalibrationSPD*)GetCalibrationModel(GetModuleNumber()); - res->GetCouplingParam(cc,cr);}; - // Returns the number of pixels in x - Int_t GetNPixelsX(){return GetSegmentationModel(0)->Npx();}; - // Returns the number of pixels in z - Int_t GetNPixelsZ(){return GetSegmentationModel(0)->Npz();}; + 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){ + // This function adds a signal to the pList from the pList class + // Inputs: iz column number ix row number trk track number ht hit number signal signal strength + GetMap()->AddSignal(iz,ix,trk,ht,GetModuleNumber(),signal);}; + void UpdateMapNoise(Int_t ix,Int_t iz,Float_t noise){ + // This function adds noise to data in the MapA2 as well as the pList + // Inputs: iz column number ix row number noise electronic noise generated by FrompListToDigits + GetMap()->AddNoise(iz,ix,GetModuleNumber(),noise);} + // Get a pointer to the segmentation object + virtual AliITSsegmentation* GetSegmentationModel(Int_t /*dt*/){return fDetType->GetSegmentationModel(0);} + // set pointer to segmentation objec + virtual void SetSegmentationModel(Int_t /*dt*/, AliITSsegmentation *seg){fDetType->SetSegmentationModel(0,seg);} + // Bari-Salerno Coupling parameters + // "New" coupling routine Tiziano Virgili + void SetCoupling(Int_t col,Int_t row,Int_t ntrack,Int_t idhit); + // "Old" coupling routine Rocco Caliandro + void SetCouplingOld(Int_t col, Int_t row,Int_t ntrack,Int_t idhit); + // Getters for data kept in fSegmentation and fResponse. + // Returns the Threshold in electrons + Double_t GetThreshold(){ + Double_t th,sig;AliITSSimuParam* simpar = fDetType->GetSimuParam(); + simpar->SPDThresholds(GetModuleNumber(),th,sig);return th;}; + // Returns the couplings Columb and Row. + void GetCouplings(Double_t &cc,Double_t &cr){ + AliITSSimuParam* simpar = fDetType->GetSimuParam(); + simpar->GetSPDCouplingParam(cc,cr);}; + // Returns the number of pixels in x + Int_t GetNPixelsX(){return GetSegmentationModel(0)->Npx();}; + // Returns the number of pixels in z + Int_t GetNPixelsZ(){return GetSegmentationModel(0)->Npz();}; - TObjArray *fHis; //! just in case for histogramming - TString fSPDname; //! Histogram name - Int_t fCoupling; // Sets the coupling to be used. - // ==1 use SetCoupling, ==2 use SetCouplingOld - Bool_t fLorentz; // kTRUE if Lorentz drift has been allowed - Double_t fTanLorAng; //! Tangent of the Lorentz Angle (weighted average for hole and electrons) - ClassDef(AliITSsimulationSPD,3) // Simulation of SPD clusters + TObjArray *fHis; //! just in case for histogramming + TString fSPDname; //! Histogram name + Int_t fCoupling; // Sets the coupling to be used. + // ==1 use SetCoupling, ==2 use SetCouplingOld + Bool_t fLorentz; // kTRUE if Lorentz drift has been allowed + Double_t fTanLorAng; //! Tangent of the Lorentz Angle (weighted average for hole and electrons) + Bool_t fStrobe; // kTRUE if readout strobe with proper phase applied to select hits + Int_t fStrobeLenght; // Strobe signal lenght in units of 25 ns + Double_t fStrobePhase; // The phase of the strobe signal with respect to the trigger + ClassDef(AliITSsimulationSPD,4) // Simulation of SPD clusters }; #endif -