]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSsimulationSPDdubna.h
Corrected overloading of asignment operators
[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
10 #include "AliITSsimulation.h"
11 #include "AliITSresponseSPD.h"
12 #include "AliITSsegmentationSPD.h"
13
14 class AliITSmodule;
15
16 //-------------------------------------------------------------------
17
18 class AliITSsimulationSPDdubna : public AliITSsimulation {
19  public:
20     AliITSsimulationSPDdubna();
21     AliITSsimulationSPDdubna(AliITSsegmentation *seg,AliITSresponse *res,
22                              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     AliITSsegmentationSPD* GetSeg(){ // Return pointer to Segmentation class
98         return (AliITSsegmentationSPD*)fSegmentation;};
99     // Return pointer to Responce class
100     AliITSresponseSPD* GetResp(Int_t ix,Int_t iz){ // ix iz dummy for now
101         ix=iz; return (AliITSresponseSPD*)GetResponseModel();};
102     // Bari-Salerno Coupling parameters
103     // "New" coupling routine  Tiziano Virgili
104     void SetCoupling(Int_t row,Int_t col,Int_t ntrack,Int_t idhit);
105     // "Old" coupling routine  Rocco Caliandro
106     void SetCouplingOld(Int_t row, Int_t col,Int_t ntrack,Int_t idhit);
107     // Getters for data kept in fSegmentation and fResponse.
108     // Returns the Threshold in electrons
109     Double_t GetThreshold(Int_t ix,Int_t iz){
110         Double_t th,sig;GetResp(ix,iz)->Thresholds(th,sig);return th;};
111     // Returns the couplings Columb and Row.
112     void GetCouplings(Double_t &cc,Double_t &cr){
113         ((AliITSresponseSPD*)GetResp(0,0))->GetCouplingParam(cc,cr);};
114     // Returns the number of pixels in x
115     Int_t GetNPixelsX(){return GetSeg()->Npx();};
116     // Returns the number of pixels in z
117     Int_t GetNPixelsZ(){return GetSeg()->Npz();};
118
119     TObjArray    *fHis;          //! just in case for histogramming
120     TString       fSPDname;      //! Histogram name
121     Int_t         fCoupling;     // Sets the coupling to be used.
122                                  // ==1 use SetCoupling, ==2 use SetCouplingOld
123                                  // with diffusion turned off (by constructor)
124                                  // ==3 use SetCoupling, ==4 use SetCouplingOld
125                                  // with diffusion, else no coupling.
126     ClassDef(AliITSsimulationSPDdubna,3)  // Simulation of SPD clusters
127 };
128 #endif