Classes moved to STEERBase.
[u/mrichter/AliRoot.git] / TRD / AliTRDalignment.h
CommitLineData
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>
8775e4e8 19
20#include <AliAlignObj.h>
21
22class 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
39 void SetZero() {SetSmZero(); SetChZero();} // reset to zero both
d15124a9 40 void SetSm(int sm, const double a[6]) {for (int i = 0; i < 6; i++) fSm[sm][i] = a[i];}
41 void SetCh(int ch, const double a[6]) {for (int i = 0; i < 6; i++) fCh[ch][i] = a[i];}
42 void SetSmRandom(double a[6]); // generate random gaussians with sigmas a
43 void SetChRandom(double a[6]); // generate random gaussians with sigmas a
8775e4e8 44 void SetSmFull(); // set supermodule data to initial aka full
45 void SetChFull(); // set chamber data to initial aka full
46 void SetSmResidual(); // set supermodule data to final aka residual
47 void SetChResidual(); // set chamber data to final aka residual
d15124a9 48 void SetFull() {SetSmFull(); SetChFull();}
49 void SetResidual() {SetSmResidual(); SetChResidual();}
50 void SetComment(char *s) {fComment.SetString(s);}
8775e4e8 51
52 // dumping on screen
53
d15124a9 54 void PrintSm(int sm, FILE *fp = stdout) const; // print data of a supermodule
55 void PrintCh(int sm, FILE *fp = stdout) const; // print data of a chamber
56 void PrintSm(FILE *fp = stdout) const {for (int i = 0; i < 18; i++) PrintSm(i,fp);}
57 void PrintCh(FILE *fp = stdout) const {for (int i = 0; i < 540; i++) PrintCh(i,fp);}
58 void Print(FILE *fp = stdout) const {PrintSm(fp); PrintCh(fp); }
59 void Print(Option_t *) const {Print(); }
8775e4e8 60
61 // reading-in from file
62
63 void ReadAscii(char *filename); // read from ascii file
64 void ReadRoot(char *filename); // read from root file
65 void ReadDB(char *filename); // read from DB file
d15124a9 66 void ReadDB(char *db, char *path, int run, int version=-1, int subversion=-1);
8775e4e8 67 void ReadGeo(char *misaligned); // read from misaligned_geometry.root
68 void ReadSurveyReport(char *filename); // read from survey report
69 void ReadAny(char *filename); // read from any kind of file
70
71 // writing on file
72
73 void WriteAscii(char *filename) const; // store data on ascii file
74 void WriteRoot(char *filename); // store data on root file
d15124a9 75 void WriteDB(char *filename, int run0, int run1); // store data on a local DB-like file
76 void WriteDB(char *db, char *path, int run0, int run1);
8775e4e8 77 // store data on DB file
78 void WriteGeo(char *filename); // apply misalignment and store geometry
79
80 // geometry and symbolic names getters
81
82 // phi-sector number of chamber ch, 0-17
d15124a9 83 int GetSec(int ch) const {return ch/30;}
8775e4e8 84 // stack number, 0-4
d15124a9 85 int GetSta(int ch) const {return ch%30/6;}
86 // plane number, 0-5
87 int GetPla(int ch) const {return ch%30%6;}
8775e4e8 88 // module number, 0-89
d15124a9 89 int GetMod(int ch) const {return 5*GetSec(ch)+GetSta(ch); }
8775e4e8 90 // layer number, 9-14
ae079791 91 int GetLay(int ch) const {return AliGeomManager::kTRD1+GetPla(ch); }
8775e4e8 92 // volume id
ae079791 93 UShort_t GetVoi(int ch) const {return AliGeomManager::LayerToVolUID(GetLay(ch),GetMod(ch)); }
d15124a9 94 // symbolic name of a supermodule
95 char *GetSmName(int sm) const {return Form("TRD/sm%02d",sm); }
96 // symbolic name of a chamber
97 char *GetChName(int ch) const {return Form("TRD/sm%02d/st%d/pl%d",GetSec(ch),GetSta(ch),GetPla(ch)); }
8775e4e8 98
99 // data analysis
100
d15124a9 101 double GetSmRMS(int xyz) const; // calculate rms fSm[*][xyz]
102 double GetChRMS(int xyz) const; // calculate rms fCh[*][xyz]
103 void PrintSmRMS() const; // print rms of fSm
104 void PrintChRMS() const; // print rms of fCh
105 void PrintRMS() const {PrintSmRMS(); PrintChRMS();}
106
107 double SurveyChi2(int i, double *a); // compare survey with ideal, return chi2
108 double SurveyChi2(double *a) {return SurveyChi2(fIbuffer[0],a);}
109 void SurveyToAlignment(int i, char *flag); // determine alignment of supermodule i based on survey
8775e4e8 110
111 protected:
112
d15124a9 113 void ArToNumbers(TClonesArray *ar); // read ar and fill fSm and fCh
114 void NumbersToAr(TClonesArray *ar); // build ar using fSm and fCh data
115 void LoadIdealGeometry(char *filename); // load ideal geometry from file
116 void LoadIdealGeometry() {LoadIdealGeometry("geometry.root");}
8775e4e8 117
118 protected:
119
d15124a9 120 double fSm[18][6]; // supermodule data
121 double fCh[540][6]; // chamber data
122 TObjString fComment; // info concerning origin of the data etc.
123 TRandom fRan; // random generator for fake alignment data
124
125 // Temporary storage for ideal position of the survey points and the survey data.
126 // The survey data are in master frame and in cm. Each supermodule has 8 survey marks.
127 // The indices are sm number, z-end, radius, phi.
128 // The ideal positions of survey points are in local frame of supermodule and in cm.
129 // The indices are z-end, radius, phi.
130 // The processed survey results are stored in fSm.
131 double fSurveyX[18][2][2][2]; // supermodule survey point X
132 double fSurveyY[18][2][2][2]; // supermodule survey point Y
133 double fSurveyZ[18][2][2][2]; // supermodule survey point Z
134 double fSurveyE[18][2][2][2]; // supermodule survey point error
135 double fSurveyX0[2][2][2]; // ideal X position of the survey marks
136 double fSurveyY0[2][2][2]; // ideal Y position of the survey marks
137 double fSurveyZ0[2][2][2]; // ideal Z position of the survey marks
138 int fIbuffer[1000]; // generic buffer for misc. operations
139 double fDbuffer[1000]; // generic buffer for misc. operations
8775e4e8 140
141 ClassDef(AliTRDalignment,1)
142
143};
144
145#endif