]>
Commit | Line | Data |
---|---|---|
8775e4e8 | 1 | #ifndef ALITRDALIGNMENT_H |
2 | #define ALITRDALIGNMENT_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 | //////////////////////////////////////////////////////////////////////////// | |
9 | // // | |
10 | // AliTRDalignment class is an instrument for reading, writing, and // | |
11 | // manipulating of the TRD alignment data. // | |
12 | // D.Miskowiec, November 2006 // | |
13 | // // | |
14 | //////////////////////////////////////////////////////////////////////////// | |
15 | ||
16 | #include <TObject.h> | |
17 | #include <TRandom.h> | |
d15124a9 | 18 | #include <TObjString.h> |
69219822 | 19 | #include <AliGeomManager.h> |
afba1460 | 20 | class AliSurveyObj; |
8775e4e8 | 21 | |
22 | class AliTRDalignment : public TObject { | |
23 | ||
24 | public: | |
25 | ||
26 | AliTRDalignment(); | |
27 | AliTRDalignment(const AliTRDalignment& source); | |
28 | AliTRDalignment& operator=(const AliTRDalignment& source); | |
d15124a9 | 29 | AliTRDalignment& operator*=(double fac); |
8775e4e8 | 30 | AliTRDalignment& operator+=(const AliTRDalignment& source); |
31 | AliTRDalignment& operator-=(const AliTRDalignment& source); | |
32 | Bool_t operator==(const AliTRDalignment& source) const; | |
d15124a9 | 33 | virtual ~AliTRDalignment() {}; |
8775e4e8 | 34 | |
35 | // setting | |
36 | ||
37 | void SetSmZero(); // reset to zero supermodule data | |
38 | void SetChZero(); // reset to zero chamber data | |
d15124a9 | 39 | void SetSm(int sm, const double a[6]) {for (int i = 0; i < 6; i++) fSm[sm][i] = a[i];} |
40 | void SetCh(int ch, const double a[6]) {for (int i = 0; i < 6; i++) fCh[ch][i] = a[i];} | |
41 | void SetSmRandom(double a[6]); // generate random gaussians with sigmas a | |
42 | void SetChRandom(double a[6]); // generate random gaussians with sigmas a | |
8775e4e8 | 43 | void SetSmFull(); // set supermodule data to initial aka full |
44 | void SetChFull(); // set chamber data to initial aka full | |
45 | void SetSmResidual(); // set supermodule data to final aka residual | |
46 | void SetChResidual(); // set chamber data to final aka residual | |
69219822 | 47 | void SetZero() {SetSmZero(); SetChZero();} |
48 | void SetIdeal() {SetZero();} | |
d15124a9 | 49 | void SetFull() {SetSmFull(); SetChFull();} |
50 | void SetResidual() {SetSmResidual(); SetChResidual();} | |
51 | void SetComment(char *s) {fComment.SetString(s);} | |
8775e4e8 | 52 | |
53 | // dumping on screen | |
54 | ||
d15124a9 | 55 | void PrintSm(int sm, FILE *fp = stdout) const; // print data of a supermodule |
3415c35c | 56 | void PrintCh(int ch, FILE *fp = stdout) const; // print data of a chamber |
d15124a9 | 57 | void PrintSm(FILE *fp = stdout) const {for (int i = 0; i < 18; i++) PrintSm(i,fp);} |
58 | void PrintCh(FILE *fp = stdout) const {for (int i = 0; i < 540; i++) PrintCh(i,fp);} | |
59 | void Print(FILE *fp = stdout) const {PrintSm(fp); PrintCh(fp); } | |
60 | void Print(Option_t *) const {Print(); } | |
8775e4e8 | 61 | |
62 | // reading-in from file | |
63 | ||
64 | void ReadAscii(char *filename); // read from ascii file | |
69219822 | 65 | void ReadCurrentGeo(); // read from currently loaded geometry |
8775e4e8 | 66 | void ReadRoot(char *filename); // read from root file |
67 | void ReadDB(char *filename); // read from DB file | |
d15124a9 | 68 | void ReadDB(char *db, char *path, int run, int version=-1, int subversion=-1); |
afba1460 | 69 | Bool_t DecodeSurveyPointName(TString pna, Int_t &sm, Int_t &iz,Int_t &ir, Int_t &iphi); |
8775e4e8 | 70 | void ReadSurveyReport(char *filename); // read from survey report |
afba1460 | 71 | void ReadSurveyReport(AliSurveyObj *so); // read from survey object |
8775e4e8 | 72 | void ReadAny(char *filename); // read from any kind of file |
73 | ||
74 | // writing on file | |
75 | ||
76 | void WriteAscii(char *filename) const; // store data on ascii file | |
77 | void WriteRoot(char *filename); // store data on root file | |
d15124a9 | 78 | void WriteDB(char *filename, int run0, int run1); // store data on a local DB-like file |
69219822 | 79 | void WriteDB(char *db, char *pa, int r0, int r1); // store data on DB file |
8775e4e8 | 80 | void WriteGeo(char *filename); // apply misalignment and store geometry |
81 | ||
82 | // geometry and symbolic names getters | |
83 | ||
84 | // phi-sector number of chamber ch, 0-17 | |
69219822 | 85 | int GetSec(int ch) const {return ch/30;} |
8775e4e8 | 86 | // stack number, 0-4 |
69219822 | 87 | int GetSta(int ch) const {return ch%30/6;} |
d15124a9 | 88 | // plane number, 0-5 |
69219822 | 89 | int GetPla(int ch) const {return ch%30%6;} |
8775e4e8 | 90 | // module number, 0-89 |
69219822 | 91 | int GetMod(int ch) const {return 5*GetSec(ch)+GetSta(ch);} |
8775e4e8 | 92 | // layer number, 9-14 |
69219822 | 93 | int GetLay(int ch) const {return AliGeomManager::kTRD1+GetPla(ch);} |
8775e4e8 | 94 | // volume id |
69219822 | 95 | UShort_t GetVoi(int ch) const {return AliGeomManager::LayerToVolUID(GetLay(ch),GetMod(ch));} |
d15124a9 | 96 | // symbolic name of a supermodule |
69219822 | 97 | char *GetSmName(int sm) const {return Form("TRD/sm%02d",sm);} |
d15124a9 | 98 | // symbolic name of a chamber |
69219822 | 99 | char *GetChName(int ch) const {return Form("TRD/sm%02d/st%d/pl%d",GetSec(ch),GetSta(ch),GetPla(ch));} |
100 | // index of a supermodule | |
101 | int GetSmIndex(const char *name) {for (int i=0; i<18; i++) if (strcmp(name,GetSmName(i))==0) return i; return -1;} | |
102 | // index of a chamber | |
103 | int GetChIndex(const char *name) {for (int i=0; i<540; i++) if (strcmp(name,GetChName(i))==0) return i; return -1;} | |
8775e4e8 | 104 | |
105 | // data analysis | |
106 | ||
d15124a9 | 107 | double GetSmRMS(int xyz) const; // calculate rms fSm[*][xyz] |
108 | double GetChRMS(int xyz) const; // calculate rms fCh[*][xyz] | |
109 | void PrintSmRMS() const; // print rms of fSm | |
110 | void PrintChRMS() const; // print rms of fCh | |
111 | void PrintRMS() const {PrintSmRMS(); PrintChRMS();} | |
112 | ||
113 | double SurveyChi2(int i, double *a); // compare survey with ideal, return chi2 | |
114 | double SurveyChi2(double *a) {return SurveyChi2(fIbuffer[0],a);} | |
115 | void SurveyToAlignment(int i, char *flag); // determine alignment of supermodule i based on survey | |
3415c35c | 116 | void SurveyToAlignment(char *flag) {for (int i=0; i<18; i++) SurveyToAlignment(i,flag);} |
8775e4e8 | 117 | |
118 | protected: | |
119 | ||
d15124a9 | 120 | void ArToNumbers(TClonesArray *ar); // read ar and fill fSm and fCh |
121 | void NumbersToAr(TClonesArray *ar); // build ar using fSm and fCh data | |
69219822 | 122 | int IsGeoLoaded(); // check if geometry is loaded |
8775e4e8 | 123 | |
124 | protected: | |
125 | ||
d15124a9 | 126 | double fSm[18][6]; // supermodule data |
127 | double fCh[540][6]; // chamber data | |
128 | TObjString fComment; // info concerning origin of the data etc. | |
129 | TRandom fRan; // random generator for fake alignment data | |
130 | ||
131 | // Temporary storage for ideal position of the survey points and the survey data. | |
132 | // The survey data are in master frame and in cm. Each supermodule has 8 survey marks. | |
133 | // The indices are sm number, z-end, radius, phi. | |
134 | // The ideal positions of survey points are in local frame of supermodule and in cm. | |
135 | // The indices are z-end, radius, phi. | |
136 | // The processed survey results are stored in fSm. | |
137 | double fSurveyX[18][2][2][2]; // supermodule survey point X | |
138 | double fSurveyY[18][2][2][2]; // supermodule survey point Y | |
139 | double fSurveyZ[18][2][2][2]; // supermodule survey point Z | |
afba1460 | 140 | double fSurveyEX[18][2][2][2]; // supermodule survey point X error |
141 | double fSurveyEY[18][2][2][2]; // supermodule survey point Y error | |
142 | double fSurveyEZ[18][2][2][2]; // supermodule survey point Z error | |
d15124a9 | 143 | double fSurveyX0[2][2][2]; // ideal X position of the survey marks |
144 | double fSurveyY0[2][2][2]; // ideal Y position of the survey marks | |
145 | double fSurveyZ0[2][2][2]; // ideal Z position of the survey marks | |
146 | int fIbuffer[1000]; // generic buffer for misc. operations | |
147 | double fDbuffer[1000]; // generic buffer for misc. operations | |
8775e4e8 | 148 | |
149 | ClassDef(AliTRDalignment,1) | |
150 | ||
151 | }; | |
152 | ||
153 | #endif |