]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSsimulationSPDdubna.h
One instance of AliITSresponse per sensor - AliITSresponse objects read/stored from...
[u/mrichter/AliRoot.git] / ITS / AliITSsimulationSPDdubna.h
1 #ifndef ALIITSSIMULATIONSPDDUBNA_H
2 #define ALIITSSIMULATIONSPDDUBNA_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 #include "TH1F.h"
8 #include "TObjArray.h"
9 #include "AliITSsimulation.h"
10 #include "AliITSresponseSPD.h"
11 #include "AliITSsegmentationSPD.h"
12
13 class AliITSmodule;
14
15 //-------------------------------------------------------------------
16
17 class AliITSsimulationSPDdubna : public AliITSsimulation {
18  public:
19     AliITSsimulationSPDdubna();
20     //    AliITSsimulationSPDdubna(AliITSsegmentation *seg,AliITSresponse *res,
21     //                         Int_t cup=1);
22     AliITSsimulationSPDdubna(AliITSDetTypeSim *dettyp,Int_t cup=1);
23     virtual ~AliITSsimulationSPDdubna();
24     // copy constructor
25     AliITSsimulationSPDdubna(const AliITSsimulationSPDdubna &source); 
26      // ass. operator
27     AliITSsimulationSPDdubna& operator=(const AliITSsimulationSPDdubna &s);
28     virtual AliITSsimulation& operator=(const AliITSsimulation &source);
29     // Initilizes the variables
30     void Init();
31
32     // General User calling routines
33     // Initilize simulation for a specific event and module
34     void InitSimulationModule(Int_t module, Int_t event);
35     // Finish and write S Digitization
36     void FinishSDigitiseModule();
37     // From hits to Digits, without creating SDigits
38     void DigitiseModule(AliITSmodule *mod,Int_t,Int_t);
39
40     // More or less Internal Routines
41     // Create S Digits from specific module
42     void SDigitiseModule(AliITSmodule *mod, Int_t mask, Int_t event);
43     // Write S Digits to the tree of SDigits.
44     void WriteSDigits();
45     // fill pList from hits, charge sharing, diffusion, coupling
46     void HitToSDigit(AliITSmodule *mod);
47     // Take pList of signals and apply noise... create Digis
48     void pListToDigits();
49     //
50     void CreateHistograms();
51     void FillHistograms(Int_t ix,Int_t iz,Double_t v=1.0);
52     void ResetHistograms();
53     TH1F* GetHistogram(Int_t i){return (TH1F*)(fHis->At(i));}// get histogram
54     TObjArray*  GetHistArray() {return fHis;}// get hist array
55     TString& GetHistName(){return fSPDname;}
56     void SetHistName(TString &n){fSPDname = n;}
57     //
58     // For backwards compatibility
59     void SDigitsToDigits(){ FinishSDigitiseModule();};
60     void HitToDigit(AliITSmodule *mod){
61         // Standard interface to DigitiseModule
62         // Inputs:
63         //    AliITSmodule *mod  Pointer to this module
64         // Outputs:
65         //    none.
66         // Return:
67         //    none.
68         DigitiseModule(mod,GetModuleNumber(),0);};
69
70  private:
71     void SpreadCharge(Double_t x0,Double_t z0,Int_t ix0,Int_t iz0,
72                       Double_t el,Double_t sig,Int_t t,Int_t hi);
73     void UpdateMapSignal(Int_t ix,Int_t iz,Int_t trk,Int_t ht,Double_t signal){
74         //  This function adds a signal to the pList from the pList class
75         //  Inputs:
76         //    Int_t       iz     // row number
77         //    Int_t       ix     // column number
78         //    Int_t       trk    // track number
79         //    Int_t       ht     // hit number
80         //    Double_t    signal // signal strength
81         //  Outputs:
82         //    none.
83         //  Return:
84         //    none
85         GetMap()->AddSignal(iz,ix,trk,ht,GetModuleNumber(),signal);};
86     void UpdateMapNoise(Int_t ix,Int_t iz,Float_t noise){
87         //  This function adds noise to data in the MapA2 as well as the pList
88         //  Inputs:
89         //    Int_t       iz       // row number
90         //    Int_t       ix       // column number
91         //    Double_t    ns    // electronic noise generated by pListToDigits
92         //  Outputs:
93         //    none.
94         //  Return:
95         //    none
96         GetMap()->AddNoise(iz,ix,GetModuleNumber(),noise);}
97     // Get a pointer to the segmentation object
98     virtual AliITSsegmentation* GetSegmentationModel(Int_t /*dt*/){return fDetType->GetSegmentationModel(0);}
99     // set pointer to segmentation objec
100     virtual void SetSegmentationModel(Int_t /*dt*/, AliITSsegmentation *seg){fDetType->SetSegmentationModel(0,seg);}
101     // Bari-Salerno Coupling parameters
102     // "New" coupling routine  Tiziano Virgili
103     void SetCoupling(Int_t row,Int_t col,Int_t ntrack,Int_t idhit);
104     // "Old" coupling routine  Rocco Caliandro
105     void SetCouplingOld(Int_t row, Int_t col,Int_t ntrack,Int_t idhit);
106     // Getters for data kept in fSegmentation and fResponse.
107     // Returns the Threshold in electrons
108     Double_t GetThreshold(Int_t ix,Int_t iz){
109       Double_t th,sig;AliITSresponseSPD* res=(AliITSresponseSPD*)GetResponseModel(0); 
110         res->Thresholds(th,sig);return th;};
111     // Returns the couplings Columb and Row.
112     void GetCouplings(Double_t &cc,Double_t &cr){
113       AliITSresponseSPD* res = (AliITSresponseSPD*)GetResponseModel(0);
114       res->GetCouplingParam(cc,cr);};
115     // Returns the number of pixels in x
116     Int_t GetNPixelsX(){return GetSegmentationModel(0)->Npx();};
117     // Returns the number of pixels in z
118     Int_t GetNPixelsZ(){return GetSegmentationModel(0)->Npz();};
119
120     TObjArray    *fHis;          //! just in case for histogramming
121     TString       fSPDname;      //! Histogram name
122     Int_t         fCoupling;     // Sets the coupling to be used.
123                                  // ==1 use SetCoupling, ==2 use SetCouplingOld
124                                  // with diffusion turned off (by constructor)
125                                  // ==3 use SetCoupling, ==4 use SetCouplingOld
126                                  // with diffusion, else no coupling.
127     ClassDef(AliITSsimulationSPDdubna,3)  // Simulation of SPD clusters
128 };
129 #endif