ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

//-----------------------------------------------------------------------------
/// \class AliMUONSurveyChamber
/// Class for the survey processing of the ALICE DiMuon spectrometer 
///
/// This object provides the methods specific to the chambers (frames)
///
/// \author Javier Castillo
//-----------------------------------------------------------------------------


#include <TClonesArray.h>
#include <TObjString.h>
#include <TString.h>
#include <TH2.h>

#include "AliLog.h"
#include "AliSurveyObj.h"
#include "AliSurveyPoint.h"

#include "AliMUONSurveyChamber.h"
#include "AliMUONSurveyDetElem.h"

/// \cond CLASSIMP
ClassImp(AliMUONSurveyChamber)
/// \endcond

AliMUONSurveyChamber::AliMUONSurveyChamber(Int_t lChamberId) 
  : AliMUONSurveyObj() /// Constructor with chamber id
  , fChamberId(lChamberId)
  , fNDetElem(0)
  , fSurveyObj(0x0)
  , fSurveyDetElem(0x0)
{
  /// Constructor with the chamber id
  fSurveyObj = new AliSurveyObj();
  fSurveyDetElem = new TClonesArray("AliMUONSurveyDetElem",4);
}

AliMUONSurveyChamber::~AliMUONSurveyChamber() {
  /// Destructor
  if (fSurveyObj) delete fSurveyObj;
  if (fSurveyDetElem) fSurveyDetElem->Delete();
}

Int_t AliMUONSurveyChamber::AddSurveyDetElem(Int_t lDetElemId) {
  /// Add a surveyed detection element to this chamber
  if (!fSurveyDetElem) {
    fSurveyDetElem = new TClonesArray("AliMUONSurveyDetElem",4);
    fNDetElem=0;
  }
  new((*fSurveyDetElem)[fNDetElem++]) AliMUONSurveyDetElem(lDetElemId,this);

  return fNDetElem;
}

AliMUONSurveyDetElem* AliMUONSurveyChamber::GetDetElem(Int_t lDetElemIndex) {
  /// Return AluMUONSurveyDetElem at lDetElemIndex
  if (lDetElemIndex<0||(lDetElemIndex>=fNDetElem)) {
    return 0x0;
  }
  else {
    return (AliMUONSurveyDetElem*)fSurveyDetElem->At(lDetElemIndex);
  }
}

Int_t AliMUONSurveyChamber::AddStickerTargets(TObjArray *pArray, TString stBaseName, Int_t lTargetMax) {
  /// Add a maximum of lTargetMax sticker targets with stBaseName from the pArray of targets
  return AliMUONSurveyObj::AddStickerTargets(pArray, stBaseName, lTargetMax);
}

Int_t AliMUONSurveyChamber::AddStickerTargets(TString stBaseName, Int_t lTargetMax) {
  /// Add a maximum of lTargetMax sticker targets with stBaseName from internal SurveyObj
  if (!fSurveyObj || !fSurveyObj->GetData()) {
    AliError("Survey data is missing!");
    return 0;    
  }
  return AddStickerTargets(fSurveyObj->GetData(),stBaseName,lTargetMax);
}

Int_t AliMUONSurveyChamber::AddGButtonTargets(TObjArray *pArray, TString stBaseName, Int_t lTargetMax) {
  /// Add a maximum of lTargetMax global targets with stBaseName from the pArray of targets
  return AliMUONSurveyObj::AddGButtonTargets(pArray, stBaseName, lTargetMax);
}

Int_t AliMUONSurveyChamber::AddGButtonTargets(TString stBaseName, Int_t lTargetMax) {
  /// Add a maximum of lTargetMax global button targets with stBaseName from internal SurveyObj
  if (!fSurveyObj || !fSurveyObj->GetData()) {
    AliError("Survey data is missing!");
    return 0;    
  }
  return AddGButtonTargets(fSurveyObj->GetData(),stBaseName,lTargetMax);
}

void AliMUONSurveyChamber::SetLocalTransformation(TGeoCombiTrans *localTrf, Bool_t ownerLocalTrf) {
  AliMUONSurveyObj::SetLocalTransformation(localTrf,ownerLocalTrf);
  AliMUONSurveyObj::SetBaseTransformation(localTrf,ownerLocalTrf);
}

void AliMUONSurveyChamber::PrintSurveyReport() {
  /// Print the survey report information and data
  printf("--> %d\n", fSurveyObj->GetEntries());

  printf("Title: \"%s\"\n", fSurveyObj->GetReportTitle().Data());
  printf("Date: \"%s\"\n", fSurveyObj->GetReportDate().Data());
  printf("Detector: \"%s\"\n", fSurveyObj->GetDetector().Data());
  printf("URL: \"%s\"\n", fSurveyObj->GetURL().Data());
  printf("Number: \"%d\"\n", fSurveyObj->GetReportNumber());
  printf("Version: \"%d\"\n", fSurveyObj->GetReportVersion());
  printf("Observations: \"%s\"\n", fSurveyObj->GetObservations().Data());
  printf("Coordinate System: \"%s\"\n", fSurveyObj->GetCoordSys().Data());
  printf("Measurement Units: \"%s\"\n", fSurveyObj->GetUnits().Data());
  printf("Nr Columns: \"%d\"\n", fSurveyObj->GetNrColumns());

  TObjArray *colNames = fSurveyObj->GetColumnNames();
  for (Int_t i = 0; i < colNames->GetEntries(); ++i)
    printf("  Column %d --> \"%s\"\n", i, ((TObjString *) colNames->At(i))->GetString().Data());

  // Get Array of surveyed points
  printf("Points:\n");
  TObjArray *points = fSurveyObj->GetData();
  
  for (Int_t i = 0; i < points->GetEntries(); ++i)
    printf("  Point %d --> \"%s\"  %s \n", i, ((AliSurveyPoint *) points->At(i))->GetPointName().Data(), points->At(i)->GetName());

}

void AliMUONSurveyChamber::FillCPSTHistograms(TString baseNameC, TH2 *hCPSTc, TString baseNameA, TH2 *hCPSTa) {
  /// Fill Chamber Plane Sticker Targest histograms for monitoring
  if(baseNameC.IsNull()||!hCPSTc){
    AliError("Need base name for points on side C and/or a histogram for them!");
    return;
  }
  AliMUONSurveyObj::FillSTHistograms(baseNameC,hCPSTc,baseNameA,hCPSTa);
}

void AliMUONSurveyChamber::FillDESTHistograms(TString baseNameC, TH2 *hDESTc, TString baseNameA, TH2 *hDESTa) {
  /// Fill Detection Element Sticker Targest histograms for monitoring
  for (Int_t iDE=0; iDE<GetNDetElem(); iDE++){
    GetDetElem(iDE)->FillSTHistograms(baseNameC,hDESTc,baseNameA,hDESTa);
  }
}

Double_t AliMUONSurveyChamber::GetMeanDetElemAlignResX() {
  /// Return the average uncertainty of the det. elem. translations along x parameter 
  Double_t alignResX = 0.;
  for (int iDE=0; iDE<GetNDetElem(); iDE++){
    alignResX += GetDetElem(iDE)->GetAlignResX();
  }
  if (GetNDetElem()==0){
    AliError("This Chamber has 0 detection elements!");
    return 0.;
  }
  return alignResX/GetNDetElem();
}

Double_t AliMUONSurveyChamber::GetMeanDetElemAlignResY() {
  /// Return the average uncertainty of the det. elem. translations along y parameter 
  Double_t alignResY = 0.;
  for (int iDE=0; iDE<GetNDetElem(); iDE++){
    alignResY += GetDetElem(iDE)->GetAlignResY();
  }
  if (GetNDetElem()==0){
    AliError("This Chamber has 0 detection elements!");
    return 0.;
  }
  return alignResY/GetNDetElem();
}
 AliMUONSurveyChamber.cxx:1
 AliMUONSurveyChamber.cxx:2
 AliMUONSurveyChamber.cxx:3
 AliMUONSurveyChamber.cxx:4
 AliMUONSurveyChamber.cxx:5
 AliMUONSurveyChamber.cxx:6
 AliMUONSurveyChamber.cxx:7
 AliMUONSurveyChamber.cxx:8
 AliMUONSurveyChamber.cxx:9
 AliMUONSurveyChamber.cxx:10
 AliMUONSurveyChamber.cxx:11
 AliMUONSurveyChamber.cxx:12
 AliMUONSurveyChamber.cxx:13
 AliMUONSurveyChamber.cxx:14
 AliMUONSurveyChamber.cxx:15
 AliMUONSurveyChamber.cxx:16
 AliMUONSurveyChamber.cxx:17
 AliMUONSurveyChamber.cxx:18
 AliMUONSurveyChamber.cxx:19
 AliMUONSurveyChamber.cxx:20
 AliMUONSurveyChamber.cxx:21
 AliMUONSurveyChamber.cxx:22
 AliMUONSurveyChamber.cxx:23
 AliMUONSurveyChamber.cxx:24
 AliMUONSurveyChamber.cxx:25
 AliMUONSurveyChamber.cxx:26
 AliMUONSurveyChamber.cxx:27
 AliMUONSurveyChamber.cxx:28
 AliMUONSurveyChamber.cxx:29
 AliMUONSurveyChamber.cxx:30
 AliMUONSurveyChamber.cxx:31
 AliMUONSurveyChamber.cxx:32
 AliMUONSurveyChamber.cxx:33
 AliMUONSurveyChamber.cxx:34
 AliMUONSurveyChamber.cxx:35
 AliMUONSurveyChamber.cxx:36
 AliMUONSurveyChamber.cxx:37
 AliMUONSurveyChamber.cxx:38
 AliMUONSurveyChamber.cxx:39
 AliMUONSurveyChamber.cxx:40
 AliMUONSurveyChamber.cxx:41
 AliMUONSurveyChamber.cxx:42
 AliMUONSurveyChamber.cxx:43
 AliMUONSurveyChamber.cxx:44
 AliMUONSurveyChamber.cxx:45
 AliMUONSurveyChamber.cxx:46
 AliMUONSurveyChamber.cxx:47
 AliMUONSurveyChamber.cxx:48
 AliMUONSurveyChamber.cxx:49
 AliMUONSurveyChamber.cxx:50
 AliMUONSurveyChamber.cxx:51
 AliMUONSurveyChamber.cxx:52
 AliMUONSurveyChamber.cxx:53
 AliMUONSurveyChamber.cxx:54
 AliMUONSurveyChamber.cxx:55
 AliMUONSurveyChamber.cxx:56
 AliMUONSurveyChamber.cxx:57
 AliMUONSurveyChamber.cxx:58
 AliMUONSurveyChamber.cxx:59
 AliMUONSurveyChamber.cxx:60
 AliMUONSurveyChamber.cxx:61
 AliMUONSurveyChamber.cxx:62
 AliMUONSurveyChamber.cxx:63
 AliMUONSurveyChamber.cxx:64
 AliMUONSurveyChamber.cxx:65
 AliMUONSurveyChamber.cxx:66
 AliMUONSurveyChamber.cxx:67
 AliMUONSurveyChamber.cxx:68
 AliMUONSurveyChamber.cxx:69
 AliMUONSurveyChamber.cxx:70
 AliMUONSurveyChamber.cxx:71
 AliMUONSurveyChamber.cxx:72
 AliMUONSurveyChamber.cxx:73
 AliMUONSurveyChamber.cxx:74
 AliMUONSurveyChamber.cxx:75
 AliMUONSurveyChamber.cxx:76
 AliMUONSurveyChamber.cxx:77
 AliMUONSurveyChamber.cxx:78
 AliMUONSurveyChamber.cxx:79
 AliMUONSurveyChamber.cxx:80
 AliMUONSurveyChamber.cxx:81
 AliMUONSurveyChamber.cxx:82
 AliMUONSurveyChamber.cxx:83
 AliMUONSurveyChamber.cxx:84
 AliMUONSurveyChamber.cxx:85
 AliMUONSurveyChamber.cxx:86
 AliMUONSurveyChamber.cxx:87
 AliMUONSurveyChamber.cxx:88
 AliMUONSurveyChamber.cxx:89
 AliMUONSurveyChamber.cxx:90
 AliMUONSurveyChamber.cxx:91
 AliMUONSurveyChamber.cxx:92
 AliMUONSurveyChamber.cxx:93
 AliMUONSurveyChamber.cxx:94
 AliMUONSurveyChamber.cxx:95
 AliMUONSurveyChamber.cxx:96
 AliMUONSurveyChamber.cxx:97
 AliMUONSurveyChamber.cxx:98
 AliMUONSurveyChamber.cxx:99
 AliMUONSurveyChamber.cxx:100
 AliMUONSurveyChamber.cxx:101
 AliMUONSurveyChamber.cxx:102
 AliMUONSurveyChamber.cxx:103
 AliMUONSurveyChamber.cxx:104
 AliMUONSurveyChamber.cxx:105
 AliMUONSurveyChamber.cxx:106
 AliMUONSurveyChamber.cxx:107
 AliMUONSurveyChamber.cxx:108
 AliMUONSurveyChamber.cxx:109
 AliMUONSurveyChamber.cxx:110
 AliMUONSurveyChamber.cxx:111
 AliMUONSurveyChamber.cxx:112
 AliMUONSurveyChamber.cxx:113
 AliMUONSurveyChamber.cxx:114
 AliMUONSurveyChamber.cxx:115
 AliMUONSurveyChamber.cxx:116
 AliMUONSurveyChamber.cxx:117
 AliMUONSurveyChamber.cxx:118
 AliMUONSurveyChamber.cxx:119
 AliMUONSurveyChamber.cxx:120
 AliMUONSurveyChamber.cxx:121
 AliMUONSurveyChamber.cxx:122
 AliMUONSurveyChamber.cxx:123
 AliMUONSurveyChamber.cxx:124
 AliMUONSurveyChamber.cxx:125
 AliMUONSurveyChamber.cxx:126
 AliMUONSurveyChamber.cxx:127
 AliMUONSurveyChamber.cxx:128
 AliMUONSurveyChamber.cxx:129
 AliMUONSurveyChamber.cxx:130
 AliMUONSurveyChamber.cxx:131
 AliMUONSurveyChamber.cxx:132
 AliMUONSurveyChamber.cxx:133
 AliMUONSurveyChamber.cxx:134
 AliMUONSurveyChamber.cxx:135
 AliMUONSurveyChamber.cxx:136
 AliMUONSurveyChamber.cxx:137
 AliMUONSurveyChamber.cxx:138
 AliMUONSurveyChamber.cxx:139
 AliMUONSurveyChamber.cxx:140
 AliMUONSurveyChamber.cxx:141
 AliMUONSurveyChamber.cxx:142
 AliMUONSurveyChamber.cxx:143
 AliMUONSurveyChamber.cxx:144
 AliMUONSurveyChamber.cxx:145
 AliMUONSurveyChamber.cxx:146
 AliMUONSurveyChamber.cxx:147
 AliMUONSurveyChamber.cxx:148
 AliMUONSurveyChamber.cxx:149
 AliMUONSurveyChamber.cxx:150
 AliMUONSurveyChamber.cxx:151
 AliMUONSurveyChamber.cxx:152
 AliMUONSurveyChamber.cxx:153
 AliMUONSurveyChamber.cxx:154
 AliMUONSurveyChamber.cxx:155
 AliMUONSurveyChamber.cxx:156
 AliMUONSurveyChamber.cxx:157
 AliMUONSurveyChamber.cxx:158
 AliMUONSurveyChamber.cxx:159
 AliMUONSurveyChamber.cxx:160
 AliMUONSurveyChamber.cxx:161
 AliMUONSurveyChamber.cxx:162
 AliMUONSurveyChamber.cxx:163
 AliMUONSurveyChamber.cxx:164
 AliMUONSurveyChamber.cxx:165
 AliMUONSurveyChamber.cxx:166
 AliMUONSurveyChamber.cxx:167
 AliMUONSurveyChamber.cxx:168
 AliMUONSurveyChamber.cxx:169
 AliMUONSurveyChamber.cxx:170
 AliMUONSurveyChamber.cxx:171
 AliMUONSurveyChamber.cxx:172
 AliMUONSurveyChamber.cxx:173
 AliMUONSurveyChamber.cxx:174
 AliMUONSurveyChamber.cxx:175
 AliMUONSurveyChamber.cxx:176
 AliMUONSurveyChamber.cxx:177
 AliMUONSurveyChamber.cxx:178
 AliMUONSurveyChamber.cxx:179
 AliMUONSurveyChamber.cxx:180
 AliMUONSurveyChamber.cxx:181
 AliMUONSurveyChamber.cxx:182