don't sort clusters after local reco, do this in AliITSUTrackerGlo
[u/mrichter/AliRoot.git] / ITS / UPGRADE / AliITSUSimulation.h
CommitLineData
451f5018 1#ifndef ALIITSUSIMULATION_H
2#define ALIITSUSIMULATION_H
3/**************************************************************************
4 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * *
6 * Author: The ALICE Off-line Project. *
7 * Contributors are mentioned in the code where appropriate. *
8 * *
9 * Permission to use, copy, modify and distribute this software and its *
10 * documentation strictly for non-commercial purposes is hereby granted *
11 * without fee, provided that the above copyright notice appears in all *
12 * copies and that both the copyright notice and this permission notice *
13 * appear in the supporting documentation. The authors make no claims *
14 * about the suitability of this software for any purpose. It is *
15 * provided "as is" without express or implied warranty. *
16 **************************************************************************/
17
18#include <TObject.h>
19#include "AliITSUSensMap.h"
20#include "AliITSsegmentation.h"
c92b1537 21#include "AliMathBase.h"
fbcb7a55 22#include <TArrayS.h>
451f5018 23
24class AliITSCalibration;
25class AliITSUSimuParam;
852af72e 26class AliITSUChip;
451f5018 27class TRandom;
28class TSegCollection;
29ad4146 29class AliITSUParamList;
451f5018 30
31// This is the base class for ITS detector signal simulations. Data members
32// include are a pointer to the detectors specific response and segmentation
33// classes. See the detector specific implementations for the propper code.
34// The detector-specific implementations are responsible for processing detector type,
35// which still may have different segmentations!
36// Note: the detector specific objects (segmentation, calib, etc.) are not owned
37// by the object but set externaly
38
39class AliITSUSimulation : public TObject
40{
41 public:
b2679935 42 enum {kMaxROCycleAccept=126}; // flag for read-out cycle to discard
43 //
451f5018 44 AliITSUSimulation();
45 AliITSUSimulation(AliITSUSimuParam* sim, AliITSUSensMap* map);
46 virtual ~AliITSUSimulation() {}
47 AliITSUSimulation(const AliITSUSimulation &source);
48 AliITSUSimulation& operator=(const AliITSUSimulation &source);
49 virtual void Init() = 0;
50 //
b2679935 51 void UpdateMapSignal(UInt_t col,UInt_t row, Int_t trk,Int_t ht,Double_t signal, Int_t roCycle=0);
52 void UpdateMapNoise(UInt_t col,UInt_t row, Double_t noise, Int_t roCycle=0);
852af72e 53 virtual void InitSimulationChip(AliITSUChip* mod, Int_t ev, AliITSsegmentation* seg, AliITSUParamList* resp);
451f5018 54 //
55 // Hits -> SDigits
852af72e 56 virtual void SDigitiseChip() = 0;
57 virtual void FinishSDigitiseChip() = 0;
58 virtual Bool_t AddSDigitsToChip( TSeqCollection *pItemArray, Int_t mask );
451f5018 59 //
60 // Hits -> Digits
852af72e 61 virtual void DigitiseChip() = 0;
62 virtual void CreateFastRecPoints(AliITSUChip *,Int_t,TRandom *,TClonesArray* /*recp*/) {}
451f5018 63 //
c92b1537 64 // readout phase (strobe, timing etc) generation
344d4ff3 65 virtual Double_t GenerateReadOutCycleOffset();
c92b1537 66 //
451f5018 67 AliITSCalibration* GetCalibDead() const {return fCalibDead;}
68 AliITSCalibration* GetCalibNoisy() const {return fCalibNoisy;}
69 AliITSsegmentation* GetSegmentation() const {return fSeg;}
c92b1537 70 AliITSUSimuParam* GetSimuParam() const {return fSimuParam;}
71 AliITSUSensMap* GetMap() const {return fSensMap;}
852af72e 72 AliITSUChip* GetChip() const {return fChip;}
29ad4146 73 AliITSUParamList* GetResponseParam() const {return fResponseParam;}
451f5018 74 Int_t GetEvent() const {return fEvent;}
75 Bool_t GetDebug(Int_t level=1) const {return fDebug>=level;}
c92b1537 76
451f5018 77 //
78 void SetCalibDead(AliITSCalibration *calib) {fCalibDead = calib;}
79 void SetCalibNoisy(AliITSCalibration *calib) {fCalibNoisy = calib;}
367763c9 80 void SetSegmentation(AliITSsegmentation *seg) {fSeg = seg; if (seg&&fSensMap) fSensMap->SetDimensions(seg->Npz(),seg->Npx(),kMaxROCycleAccept);}
c92b1537 81 void SetSimuParam(AliITSUSimuParam *sp) {fSimuParam = sp;}
29ad4146 82 virtual void SetResponseParam(AliITSUParamList* resp) {fResponseParam = resp;}
c92b1537 83 void SetMap(AliITSUSensMap *p) {fSensMap = p;}
852af72e 84 void SetChip(AliITSUChip* mod) {fChip=mod;}
451f5018 85 void SetEvent(Int_t evnt) {fEvent=evnt;}
86 void SetDebug(Int_t level=5) {fDebug=level;}
87 void SetNoDebug() {fDebug=0;}
88 void ClearMap() {fSensMap->Clear();}
89 //
344d4ff3 90 Double_t GetReadOutCycleOffset() const {return fReadOutCycleOffset;}
91 void SetReadOutCycleOffset(Double_t v=0) {fReadOutCycleOffset = v;}
92 //
35a853ed 93 Double_t GetReadOutCycleLength() const {return fReadOutCycleLength;}
94 void SetReadOutCycleLength(Double_t v=25e-6) {fReadOutCycleLength = v;}
95 //
451f5018 96 static Int_t GenOrderedSample(UInt_t nmax,UInt_t ngen,TArrayI &vals,TArrayI &ind);
97 //
c92b1537 98 static Double_t GausInt1D(Double_t sig,Double_t a,Double_t b);
99 static Double_t GausInt2D(Double_t sig0,Double_t a0,Double_t b0,
100 Double_t sig1,Double_t a1,Double_t b1);
101 //
451f5018 102 protected:
103 AliITSsegmentation *fSeg; //! segmentation
104 AliITSCalibration *fCalibDead; //! dead channels
105 AliITSCalibration *fCalibNoisy; //! noisy channels
c92b1537 106 AliITSUSensMap *fSensMap; //! sensor map for hits manipulations
107 AliITSUSimuParam *fSimuParam; //! simulation parameters
29ad4146 108 AliITSUParamList *fResponseParam; //! response parameterization data
852af72e 109 AliITSUChip *fChip; //! chip being processed
344d4ff3 110 Float_t fReadOutCycleOffset; //! The phase of the RO with respect to the trigger
111 Float_t fReadOutCycleLength; //! readout cycle lenght in s
112
451f5018 113 Int_t fEvent; //! event number being processed
114 Int_t fDebug; //! debug flag
6b847cde 115 Bool_t fCyclesID[2*kMaxROCycleAccept+1]; //! status of RO cycles
451f5018 116
344d4ff3 117 ClassDef(AliITSUSimulation,2) // Simulation base class
451f5018 118
119};
120
c92b1537 121//_____________________________________________________________________________
122inline Double_t AliITSUSimulation::GausInt1D(Double_t sig,Double_t a,Double_t b)
123{
124 // calculate gaussian integral from a to b (with respecto to mean)
125 const Double_t kRoot2 = 1.414213562; // Sqrt(2).
126 double sp = 1.0/(sig*kRoot2);
127 return 0.5*TMath::Abs( AliMathBase::ErfcFast(sp*a) - AliMathBase::ErfcFast(sp*b) );
128}
129
130//_____________________________________________________________________________
131inline Double_t AliITSUSimulation::GausInt2D(Double_t sig0,Double_t a0,Double_t b0,
132 Double_t sig1,Double_t a1,Double_t b1)
133{
134 // calculate gaussian 2D integral from x0 to x1 (with respect to mean)
135 const Double_t kRoot2 = 1.414213562; // Sqrt(2).
136 double sp0 = 1.0/(sig0*kRoot2);
137 double sp1 = 1.0/(sig1*kRoot2);
138 return 0.25*TMath::Abs( (AliMathBase::ErfcFast(sp0*a0) - AliMathBase::ErfcFast(sp0*b0)) *
139 (AliMathBase::ErfcFast(sp1*a1) - AliMathBase::ErfcFast(sp1*b1)));
140}
141
451f5018 142#endif