Line data Source code
1 : #ifndef ALIITSDETTYPESIM_H
2 : #define ALIITSDETTYPESIM_H
3 : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 : * See cxx source for full Copyright notice */
5 :
6 : /*
7 : $Id$
8 : */
9 :
10 : /////////////////////////////////////////////////////////////////////////
11 : // * This class contains all of the "external" information needed to do//
12 : // * detector specific simulations for the ITS. //
13 : /////////////////////////////////////////////////////////////////////////
14 :
15 : #include <TObject.h>
16 : #include "AliITSLoader.h"
17 : #include "AliITSSimuParam.h"
18 : #include "AliITSFOGeneratorSPD.h"
19 :
20 : class TObjArray;
21 : class TClonesArray;
22 : class TTree;
23 : class AliCDBMetaData;
24 : class AliITSdigit;
25 : class AliITSmodule;
26 : class AliITSpListItem;
27 : class AliITSsimulation;
28 : class AliITSsegmentation;
29 : class AliITSresponse;
30 : class AliITSCalibrationSSD;
31 : class AliITSGainSSDv2;
32 : class AliITSBadChannelsSSDv2;
33 : class AliITSNoiseSSDv2;
34 : class AliITSresponseSDD;
35 : class AliITSDDLModuleMapSDD;
36 : class AliITSCalibration;
37 : class AliITSgeom;
38 : class AliITSFOSignalsSPD;
39 : class AliITSTriggerConditions;
40 :
41 : class AliITSDetTypeSim : public TObject {
42 : public:
43 :
44 : AliITSDetTypeSim();
45 : virtual ~AliITSDetTypeSim();
46 : AliITSgeom *GetITSgeom() const {
47 43899 : if(fLoader)return ((AliITSLoader*)fLoader)->GetITSgeom();
48 14633 : else return 0;}
49 : void SetITSgeom(AliITSgeom *geom);
50 :
51 : virtual void SetSimulationModel(Int_t dettype,AliITSsimulation *sim);
52 : virtual AliITSsimulation* GetSimulationModel(Int_t dettype) const;
53 : virtual AliITSsimulation* GetSimulationModelByModule(Int_t module) const;
54 :
55 : virtual void SetSegmentationModel(Int_t dettype,AliITSsegmentation *seg);
56 : virtual AliITSsegmentation* GetSegmentationModel(Int_t dettype) const;
57 : virtual AliITSsegmentation* GetSegmentationModelByModule(Int_t module) const;
58 :
59 : virtual void SetCalibrationModel(Int_t iMod,AliITSCalibration *resp);
60 : virtual void SetSPDNoisyModel(Int_t iMod, AliITSCalibration *cal);
61 : virtual void SetSPDSparseDeadModel(Int_t iMod, AliITSCalibration *cal);
62 :
63 : virtual AliITSCalibration* GetCalibrationModel(Int_t iMod) const;
64 : virtual AliITSCalibration* GetSPDNoisyModel(Int_t iMod) const;
65 : virtual AliITSTriggerConditions* GetTriggerConditions();
66 :
67 : virtual void SetSimuParam(const AliITSSimuParam* spar){
68 0 : if(fSimuPar) delete fSimuPar;
69 0 : fSimuPar = new AliITSSimuParam(*spar);
70 0 : }
71 78711126 : virtual AliITSSimuParam* GetSimuParam() const {return fSimuPar;}
72 :
73 8 : virtual AliITSDDLModuleMapSDD* GetDDLModuleMapSDD()const { return fDDLMapSDD;}
74 2082 : virtual AliITSresponseSDD* GetResponseSDD() const { return fRespSDD;}
75 0 : TObjArray* GetCalibrationArray() const {return fCalibration;}
76 0 : TObjArray* GetSegmentation() const {return fSegmentation;}
77 : void ResetCalibrationArray();
78 : void ResetSegmentation();
79 :
80 : virtual void SetLoader(AliITSLoader* loader);
81 16 : AliITSLoader* GetLoader() const {return fLoader;}
82 :
83 : virtual void SetDefaults();
84 : virtual void SetDefaultSimulation();
85 30 : virtual void SetRunNumber(Int_t rn=0){fRunNumber = rn;}
86 8 : virtual Int_t GetRunNumber() const {return fRunNumber;}
87 : virtual void SetTreeAddressS(TTree* treeS, const Char_t* name);
88 : virtual void SetTreeAddressD(TTree* treeD, const Char_t* name);
89 :
90 0 : virtual void SetDigits(TObjArray* digits) {fDigits=digits;}
91 0 : const TClonesArray* GetSDigits() const { return &fSDigits;}
92 56 : TObjArray* GetDigits() const {return fDigits;}
93 0 : Int_t* GetNDigitArray() const {return fNDigits;}
94 : TClonesArray *DigitsAddress(Int_t id) const {
95 48 : return ((TClonesArray*)(*fDigits)[id]);}
96 0 : virtual void ResetSDigits(){fNSDigits=0; fSDigits.Clear();}
97 : virtual void ResetDigits();
98 : virtual void ResetDigits(Int_t branch);
99 : virtual void SDigitsToDigits(Option_t *opt, Char_t* name);
100 :
101 : virtual void AddSumDigit(AliITSpListItem &sdig);
102 : virtual void AddSimDigit(Int_t branch, const AliITSdigit *d);
103 : virtual void AddSimDigit(Int_t branch,Float_t phys,Int_t* digits,
104 : Int_t* tracks,Int_t *hits,Float_t* trkcharges,
105 : Int_t sigexpanded=-1000);
106 : virtual void SetDigitClassName(Int_t i, const Char_t* name) {
107 48 : fkDigClassName[i]=name;}
108 306 : const Char_t* GetDigitClassName(Int_t i) const {return fkDigClassName[i];}
109 :
110 8 : virtual void ResetFOSignals() {fFOGenerator.ResetSignals();}
111 : virtual void ProcessSPDDigitForFastOr(UInt_t module, UInt_t colM, UInt_t rowM);
112 8 : virtual void ProcessNoiseForFastOr() {fFOGenerator.ProcessNoise();}
113 8 : virtual AliITSFOSignalsSPD* GetFOSignals() {return fFOGenerator.GetFOSignals();}
114 : virtual void WriteFOSignals();
115 : virtual Float_t GetAverageGainSDD() const {
116 1209 : if(fAveGainSDD>0.) return fAveGainSDD;
117 0 : else return 1.;
118 403 : }
119 :
120 :
121 : protected:
122 : virtual void CreateCalibrationArray();
123 : virtual Bool_t GetCalibration();
124 :
125 : private:
126 : AliITSDetTypeSim(const AliITSDetTypeSim &source);
127 : AliITSDetTypeSim& operator=(const AliITSDetTypeSim &source);
128 : void SetDefaultSegmentation(Int_t idet); // creates def segm.
129 :
130 : //conversion of the old SSD calibration objects tothe new ones
131 : void ReadOldSSDNoise(const TObjArray *array,
132 : AliITSNoiseSSDv2 *noiseSSD);
133 : void ReadOldSSDBadChannels(const TObjArray *array,
134 : AliITSBadChannelsSSDv2 *badChannelsSSD);
135 : void ReadOldSSDGain(const TObjArray *array,
136 : AliITSGainSSDv2 *gainSSD);
137 :
138 : static const Int_t fgkNdettypes; // number of different det. types
139 : static const Int_t fgkDefaultNModulesSPD; // Total numbers of SPD modules by default
140 : static const Int_t fgkDefaultNModulesSDD; // Total numbers of SDD modules by default
141 : static const Int_t fgkDefaultNModulesSSD; // Total numbers of SSD modules by default
142 :
143 : TObjArray *fSimulation; //! [NDet]
144 : TObjArray *fSegmentation; //! [NDet]
145 : TObjArray *fCalibration; //! [NMod]
146 : AliITSCalibrationSSD* fSSDCalibration; //! SSD calibration object
147 : TObjArray *fSPDNoisy; //! [fgkDefaultNModulesSPD]
148 : TObjArray *fSPDSparseDead;//! [fgkDefaultNModulesSPD]
149 : Int_t fNSDigits; //! number of SDigits
150 : TClonesArray fSDigits; //! Summable digits
151 : Int_t* fNDigits; //! [NDet] number of Digits for det.
152 : Int_t fRunNumber; //! run number (to access DB)
153 : TObjArray *fDigits; //! [NMod][NDigits]
154 : AliITSSimuParam *fSimuPar; //! detector simulation parameters
155 : AliITSDDLModuleMapSDD *fDDLMapSDD; //! mapping DDL/module -> SDD module number
156 : AliITSresponseSDD *fRespSDD; //! SDD response parameters
157 : Float_t fAveGainSDD; //! Average gain of SDD good anodes
158 : const Char_t* fkDigClassName[3]; //! String with digit class name.
159 : AliITSLoader* fLoader; //! loader
160 : Bool_t fFirstcall; //! flag
161 : AliITSFOGeneratorSPD fFOGenerator; //! Fast-OR generator object
162 : AliITSTriggerConditions* fTriggerConditions; //! Trigger conditions
163 :
164 160 : ClassDef(AliITSDetTypeSim,15) // ITS Simulation structure
165 :
166 : };
167 :
168 : #endif
|