Line data Source code
1 : /**************************************************************************
2 : * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 : * *
4 : * Author: The ALICE Off-line Project. *
5 : * Contributors are mentioned in the code where appropriate. *
6 : * *
7 : * Permission to use, copy, modify and distribute this software and its *
8 : * documentation strictly for non-commercial purposes is hereby granted *
9 : * without fee, provided that the above copyright notice appears in all *
10 : * copies and that both the copyright notice and this permission notice *
11 : * appear in the supporting documentation. The authors make no claims *
12 : * about the suitability of this software for any purpose. It is *
13 : * provided "as is" without express or implied warranty. *
14 : **************************************************************************/
15 :
16 : //-----------------------------------------------------------------------------
17 : /// \class AliMUONSurveyChamber
18 : /// Class for the survey processing of the ALICE DiMuon spectrometer
19 : ///
20 : /// This object provides the methods specific to the chambers (frames)
21 : ///
22 : /// \author Javier Castillo
23 : //-----------------------------------------------------------------------------
24 :
25 :
26 : #include <TClonesArray.h>
27 : #include <TObjString.h>
28 : #include <TString.h>
29 : #include <TH2.h>
30 :
31 : #include "AliLog.h"
32 : #include "AliSurveyObj.h"
33 : #include "AliSurveyPoint.h"
34 :
35 : #include "AliMUONSurveyChamber.h"
36 : #include "AliMUONSurveyDetElem.h"
37 :
38 : /// \cond CLASSIMP
39 18 : ClassImp(AliMUONSurveyChamber)
40 : /// \endcond
41 :
42 : AliMUONSurveyChamber::AliMUONSurveyChamber(Int_t lChamberId)
43 0 : : AliMUONSurveyObj() /// Constructor with chamber id
44 0 : , fChamberId(lChamberId)
45 0 : , fNDetElem(0)
46 0 : , fSurveyObj(0x0)
47 0 : , fSurveyDetElem(0x0)
48 0 : {
49 : /// Constructor with the chamber id
50 0 : fSurveyObj = new AliSurveyObj();
51 0 : fSurveyDetElem = new TClonesArray("AliMUONSurveyDetElem",4);
52 0 : }
53 :
54 0 : AliMUONSurveyChamber::~AliMUONSurveyChamber() {
55 : /// Destructor
56 0 : if (fSurveyObj) delete fSurveyObj;
57 0 : if (fSurveyDetElem) fSurveyDetElem->Delete();
58 0 : }
59 :
60 : Int_t AliMUONSurveyChamber::AddSurveyDetElem(Int_t lDetElemId) {
61 : /// Add a surveyed detection element to this chamber
62 0 : if (!fSurveyDetElem) {
63 0 : fSurveyDetElem = new TClonesArray("AliMUONSurveyDetElem",4);
64 0 : fNDetElem=0;
65 0 : }
66 0 : new((*fSurveyDetElem)[fNDetElem++]) AliMUONSurveyDetElem(lDetElemId,this);
67 :
68 0 : return fNDetElem;
69 0 : }
70 :
71 : AliMUONSurveyDetElem* AliMUONSurveyChamber::GetDetElem(Int_t lDetElemIndex) {
72 : /// Return AluMUONSurveyDetElem at lDetElemIndex
73 0 : if (lDetElemIndex<0||(lDetElemIndex>=fNDetElem)) {
74 0 : return 0x0;
75 : }
76 : else {
77 0 : return (AliMUONSurveyDetElem*)fSurveyDetElem->At(lDetElemIndex);
78 : }
79 0 : }
80 :
81 : Int_t AliMUONSurveyChamber::AddStickerTargets(TObjArray *pArray, TString stBaseName, Int_t lTargetMax) {
82 : /// Add a maximum of lTargetMax sticker targets with stBaseName from the pArray of targets
83 0 : return AliMUONSurveyObj::AddStickerTargets(pArray, stBaseName, lTargetMax);
84 0 : }
85 :
86 : Int_t AliMUONSurveyChamber::AddStickerTargets(TString stBaseName, Int_t lTargetMax) {
87 : /// Add a maximum of lTargetMax sticker targets with stBaseName from internal SurveyObj
88 0 : if (!fSurveyObj || !fSurveyObj->GetData()) {
89 0 : AliError("Survey data is missing!");
90 0 : return 0;
91 : }
92 0 : return AddStickerTargets(fSurveyObj->GetData(),stBaseName,lTargetMax);
93 0 : }
94 :
95 : Int_t AliMUONSurveyChamber::AddGButtonTargets(TObjArray *pArray, TString stBaseName, Int_t lTargetMax) {
96 : /// Add a maximum of lTargetMax global targets with stBaseName from the pArray of targets
97 0 : return AliMUONSurveyObj::AddGButtonTargets(pArray, stBaseName, lTargetMax);
98 0 : }
99 :
100 : Int_t AliMUONSurveyChamber::AddGButtonTargets(TString stBaseName, Int_t lTargetMax) {
101 : /// Add a maximum of lTargetMax global button targets with stBaseName from internal SurveyObj
102 0 : if (!fSurveyObj || !fSurveyObj->GetData()) {
103 0 : AliError("Survey data is missing!");
104 0 : return 0;
105 : }
106 0 : return AddGButtonTargets(fSurveyObj->GetData(),stBaseName,lTargetMax);
107 0 : }
108 :
109 : void AliMUONSurveyChamber::SetLocalTransformation(TGeoCombiTrans *localTrf, Bool_t ownerLocalTrf) {
110 0 : AliMUONSurveyObj::SetLocalTransformation(localTrf,ownerLocalTrf);
111 0 : AliMUONSurveyObj::SetBaseTransformation(localTrf,ownerLocalTrf);
112 0 : }
113 :
114 : void AliMUONSurveyChamber::PrintSurveyReport() {
115 : /// Print the survey report information and data
116 0 : printf("--> %d\n", fSurveyObj->GetEntries());
117 :
118 0 : printf("Title: \"%s\"\n", fSurveyObj->GetReportTitle().Data());
119 0 : printf("Date: \"%s\"\n", fSurveyObj->GetReportDate().Data());
120 0 : printf("Detector: \"%s\"\n", fSurveyObj->GetDetector().Data());
121 0 : printf("URL: \"%s\"\n", fSurveyObj->GetURL().Data());
122 0 : printf("Number: \"%d\"\n", fSurveyObj->GetReportNumber());
123 0 : printf("Version: \"%d\"\n", fSurveyObj->GetReportVersion());
124 0 : printf("Observations: \"%s\"\n", fSurveyObj->GetObservations().Data());
125 0 : printf("Coordinate System: \"%s\"\n", fSurveyObj->GetCoordSys().Data());
126 0 : printf("Measurement Units: \"%s\"\n", fSurveyObj->GetUnits().Data());
127 0 : printf("Nr Columns: \"%d\"\n", fSurveyObj->GetNrColumns());
128 :
129 0 : TObjArray *colNames = fSurveyObj->GetColumnNames();
130 0 : for (Int_t i = 0; i < colNames->GetEntries(); ++i)
131 0 : printf(" Column %d --> \"%s\"\n", i, ((TObjString *) colNames->At(i))->GetString().Data());
132 :
133 : // Get Array of surveyed points
134 0 : printf("Points:\n");
135 0 : TObjArray *points = fSurveyObj->GetData();
136 :
137 0 : for (Int_t i = 0; i < points->GetEntries(); ++i)
138 0 : printf(" Point %d --> \"%s\" %s \n", i, ((AliSurveyPoint *) points->At(i))->GetPointName().Data(), points->At(i)->GetName());
139 :
140 0 : }
141 :
142 : void AliMUONSurveyChamber::FillCPSTHistograms(TString baseNameC, TH2 *hCPSTc, TString baseNameA, TH2 *hCPSTa) {
143 : /// Fill Chamber Plane Sticker Targest histograms for monitoring
144 0 : if(baseNameC.IsNull()||!hCPSTc){
145 0 : AliError("Need base name for points on side C and/or a histogram for them!");
146 0 : return;
147 : }
148 0 : AliMUONSurveyObj::FillSTHistograms(baseNameC,hCPSTc,baseNameA,hCPSTa);
149 0 : }
150 :
151 : void AliMUONSurveyChamber::FillDESTHistograms(TString baseNameC, TH2 *hDESTc, TString baseNameA, TH2 *hDESTa) {
152 : /// Fill Detection Element Sticker Targest histograms for monitoring
153 0 : for (Int_t iDE=0; iDE<GetNDetElem(); iDE++){
154 0 : GetDetElem(iDE)->FillSTHistograms(baseNameC,hDESTc,baseNameA,hDESTa);
155 : }
156 0 : }
157 :
158 : Double_t AliMUONSurveyChamber::GetMeanDetElemAlignResX() {
159 : /// Return the average uncertainty of the det. elem. translations along x parameter
160 : Double_t alignResX = 0.;
161 0 : for (int iDE=0; iDE<GetNDetElem(); iDE++){
162 0 : alignResX += GetDetElem(iDE)->GetAlignResX();
163 : }
164 0 : if (GetNDetElem()==0){
165 0 : AliError("This Chamber has 0 detection elements!");
166 0 : return 0.;
167 : }
168 0 : return alignResX/GetNDetElem();
169 0 : }
170 :
171 : Double_t AliMUONSurveyChamber::GetMeanDetElemAlignResY() {
172 : /// Return the average uncertainty of the det. elem. translations along y parameter
173 : Double_t alignResY = 0.;
174 0 : for (int iDE=0; iDE<GetNDetElem(); iDE++){
175 0 : alignResY += GetDetElem(iDE)->GetAlignResY();
176 : }
177 0 : if (GetNDetElem()==0){
178 0 : AliError("This Chamber has 0 detection elements!");
179 0 : return 0.;
180 : }
181 0 : return alignResY/GetNDetElem();
182 0 : }
|