d7c519b2 |
1 | #ifndef ALIPHOSMODULEMISALIGNMENT_H |
2 | #define ALIPHOSMODULEMISALIGNMENT_H |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
4 | * See cxx source for full Copyright notice */ |
5 | |
6 | /* $Id: $ */ |
7 | |
8 | // Utility class to calculate PHOS module's |
9 | // misalignment from ideal geometry (defined by AliPHOSGeometry) |
10 | // and survey data. 5 modules expected. |
11 | // Number of modules is specified by enumerator kModules here, |
12 | // if this number changes in AliPHOSGeometry |
13 | // - CHANGE kModules constant here. |
14 | // We do not have such compile-time constant in |
15 | // AliPHOSGeometry. |
16 | // I define module position by three points |
17 | // with names "name0", "name1", "name2". |
18 | // |
19 | // Module: |
20 | // | |
21 | // <-------------Z-----------------|-- |
22 | // name1 ------------------- name0 | |
23 | // | | |
24 | // | | |
25 | // | | |
26 | // | | |
27 | // | | |
28 | // | X |
29 | // | | |
30 | // | | |
31 | // | | |
32 | // | | |
33 | // name2 | |
34 | // |
35 | // For example, in |
36 | // "PHOS MODULE Position 2 (Production 2) |
37 | // MEASUREMENT AFTER FINAL INSTALLATION |
38 | // Measurement on 19.05.2008": (https://edms.cern.ch/document/922320) |
39 | // |
40 | // name0 == "T2_10000" |
41 | // name1 == "T2_10027" |
42 | // name2 == "T2_24000" |
43 | // |
44 | // Usage: |
45 | // |
46 | // ... |
47 | // AliPHOSGeometry * phosGeom = AliPHOSGeometry::GetInstance("IHEP", ""); |
48 | // ... |
49 | // //For AliSurveyObj usage details see $ALICE_ROOT/STEER/AliSurveyObj.h, |
50 | // //here's example with local file. |
51 | // AliSurveyObj survey; |
52 | // survey.FillFromLocalFile("local_file_name"); |
53 | // ... |
54 | // AliPHOSModuleMisalignment delta(*phosGeom); |
55 | // TGeoHMatrix m;//matrix to save transformations in. |
56 | // delta.DeltaTransformation(moduleNumber, survey.GetData(), "T2_10000", |
57 | // "T2_10027", "T2_24000", &m); |
58 | // |
59 | // Author: Timur Pocheptsov. |
60 | // 2 December 2008 |
61 | |
62 | //ROOT's typedefs. |
63 | #include <Rtypes.h> |
64 | |
65 | class TGeoHMatrix; |
66 | class TString; |
67 | |
68 | class AliSurveyPoint; |
69 | class AliPHOSGeometry; |
70 | |
71 | class AliPHOSModuleMisalignment { |
72 | enum { |
73 | kModules = 5 |
74 | }; |
75 | |
76 | public: |
77 | AliPHOSModuleMisalignment(const AliPHOSGeometry & geom, Bool_t debug = kFALSE); |
78 | //ClassDef macro will add virtual functions, |
79 | //so, I have to define virtual dtor |
80 | //to supress warnings. |
81 | virtual ~AliPHOSModuleMisalignment(); |
82 | //Module number "module" starts from zero. |
83 | void DeltaTransformation(UInt_t module, const TObjArray * points, const TString & name0, |
84 | const TString & name1, const TString & name2, TGeoHMatrix * delta); |
85 | private: |
86 | void FindIdealModule(UInt_t module); |
87 | void FindRealModule(const AliSurveyPoint * pt0, const AliSurveyPoint * pt1, |
88 | const AliSurveyPoint * pt2); |
89 | void FindDelta(TGeoHMatrix * delta)const; |
90 | |
91 | private: |
92 | Bool_t fDebug; // debug level |
93 | |
94 | Double_t fAngles[kModules][3][2]; // Matrix of rotation angles |
95 | Double_t fCenters[kModules][3]; // Matrix of center displacements |
96 | Double_t fModule[3][3]; //Module's described by 3 points (non-positioned module) |
97 | Double_t fU[3][3]; //Points from ideal module |
98 | Double_t fV[3][3]; //Points from real module |
99 | |
100 | ClassDef(AliPHOSModuleMisalignment, 1)//Utility class for module misalignment. |
101 | }; |
102 | |
103 | #endif |