Code from MUON-dev joined
[u/mrichter/AliRoot.git] / MUON / AliMUONSegmentationV01.h
CommitLineData
a9e2aefa 1#ifndef ALIMUONSEGMENTATIONV01_H
2#define ALIMUONSEGMENTATIONV01_H
3
4/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
6
7/* $Id$ */
8
9/////////////////////////////////////////////////////
10// Segmentation and Response classes version 01 //
11/////////////////////////////////////////////////////
12class AliMUON;
13class TArrayF;
14class TArrayI;
15class TObjArray;
16
17
18
19#include "AliMUONSegmentationV0.h"
20#include "TArrayI.h"
21#include "TArrayF.h"
22
23class AliMUONSegmentationV01 :
24public AliMUONSegmentationV0 {
25 public:
26 AliMUONSegmentationV01();
27 AliMUONSegmentationV01(const AliMUONSegmentationV01 & segmentation);
28
29 virtual ~AliMUONSegmentationV01(){}
30 //
31 // Set Chamber Segmentation Parameters
32 //
33 virtual void SetPadDivision(Int_t ndiv[4]);
34 // Radii
35 virtual void SetSegRadii(Float_t r[4]);
36 //
37 // Transform from pad (wire) to real coordinates and vice versa
38 //
39 // Transform from pad to real coordinates
40 virtual void GetPadIxy(Float_t x ,Float_t y ,Int_t &ix,Int_t &iy);
41 // Transform from real to pad coordinates
42 virtual void GetPadCxy(Int_t ix,Int_t iy,Float_t &x ,Float_t &y );
43 //
44 // Initialisation
45 virtual void Init(AliMUONChamber* chamber);
46 //
47 // Get member data
48 //
49 // Pad size in x by Sector
50 virtual Float_t Dpx(Int_t isec);
51 // Pad size in y by Sector
52 virtual Float_t Dpy(Int_t isec);
53 // Max number of Pads in x
54 virtual Int_t Npx(){return fNpxS[fNsec-1][1]+1;}
55 //
56 virtual void SetPad(Int_t ix,Int_t iy);
57 //
58 // Iterate over pads
59 // Initialiser
60 virtual void FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy);
61 // Stepper
62 virtual void NextPad();
63 // Condition
64 virtual Int_t MorePads();
65 // Get next neighbours
66 virtual void Neighbours
67 (Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10]);
68 //
69 // Current Pad during Integration
70 // current sector
71 virtual Int_t ISector() {return fSector;}
72 // calculate sector from pad coordinates
73 virtual Int_t Sector(Int_t ix, Int_t iy);
74 //
75 // Integration
76 // Current integration limits
77 virtual void IntegrationLimits
78 (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2);
79 // Test points for auto calibration
80 void GiveTestPoints(Int_t &n, Float_t *x, Float_t *y);
81 //
82 // Draw segmentation zones
83 virtual void Draw();
84 // Function for systematic corrections
85 // Set the correction function
86 virtual void SetCorrFunc(Int_t dum, TF1* func);
87 // Get the correction function
88 virtual TF1* CorrFunc(Int_t iZone);
89 // assignment operator
90 AliMUONSegmentationV01& operator=(const AliMUONSegmentationV01& rhs);
91 ClassDef(AliMUONSegmentationV01,1) // Segmentation approximating circular zones with different pad size
92 protected:
93 // Geometry
94 //
95 Int_t fNsec; // Number of sectors
96 TArrayF fRSec; // Sector outer radia
97 TArrayI fNDiv; // Pad size division
98 TArrayF fDpxD; // y pad width per sector
99 // Segmentation map
100 Int_t fNpxS[10][1000]; // Number of pads per sector in x
101 Float_t fCx[10][1000]; // pad-sector contour x vs y
102 // Chamber region consideres during disintegration
103 // (lower left and upper right corner)
104 //
105 Float_t fxmin; // lower left x
106 Float_t fxmax; // lower left y
107 Float_t fymin; // upper right x
108 Float_t fymax; // upper right y
109
110 //
111 // Current pad during integration (cursor for disintegration)
112 Int_t fSector; // Current sector
113 //
114 TObjArray *fCorr; // Correction functions
115};
116#endif
117
118
119
120
121
122
123
124