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.                  *
 **************************************************************************/

/*
$Log: AliT0Align.cxx,v $
 Revision   2008/01/30
Removing code violations 

 Version 1.1  2006/10
Preliminary test version (T.Malkiewicz)
*/

#include "AliT0Align.h"
#include "TROOT.h"
#include "Riostream.h"
#include "TFile.h"
#include "TMath.h"
#include "TSystem.h"
#include "TString.h"
#include "AliSurveyObj.h"
#include "AliAlignObjParams.h"
#include "AliCDBStorage.h"
#include <TClonesArray.h>
#include <TFile.h>
#include "AliLog.h"
#include "AliCDBManager.h"
#include "AliSurveyPoint.h" 

// Class creating the T0 aligmnent objects 
// from the surveys done by surveyers at Point2.
// Survey results are fetched from 
// Survey Depot, based on survey results 
// position of T0 alignment objects is computed.

using std::endl;
using std::cout;
ClassImp(AliT0Align)

AliT0Align::AliT0Align() :
  TObject(),
  fFileGlob(0x0),
  fT0AAlignObj(0x0),
  fT0CAlignObj(0x0),
  fDebug(0),
  fXPosC(0.),
  fYPosC(0.),
  fXPosA(0.),
  fYPosA(0.),
  fRepLoc(0),
  fRepGlob(0),
  fSide(0x0),
  fUser(0x0)
{
  //
  //  default constructor
  //
}   
//________________________________________________________________________
AliT0Align::AliT0Align(Int_t reportloc, Int_t side, Int_t reportglob) :
  TObject(),
  fFileGlob(0x0),
  fT0AAlignObj(0x0),
  fT0CAlignObj(0x0),
  fDebug(0),
  fXPosC(0.),
  fYPosC(0.),
  fXPosA(0.),
  fYPosA(0.),
  fRepLoc(0),
  fRepGlob(0),
  fSide(0x0),
  fUser(0x0)
{
  //
  // constructor - defines data files
  //
  fRepLoc = reportloc;
  fRepGlob = reportglob;
  fSide = side;
  // Char_t path[50];
  TString path = Form("%s",gSystem->Getenv("ALICE_ROOT")) ;
  // fFileGlob = new Char_t[80];
  //  fUser = new Char_t[10];
  fFileGlob = Form("%s/T0/Survey_%d_V0.txt",path.Data(),reportglob);
  fUser = Form("%s/T0/Survey_%d_V0.txt",path.Data(),reportglob);
  // sprintf(path,gSystem->Getenv("ALICE_ROOT")); 
  //
  // sprintf(fFileLoc,"%s/T0/Survey_%d_T0.txt",path,reportloc);
  // sprintf(fFileGlob,"%s/T0/Survey_%d_V0.txt",path,reportglob);
  //
  // sprintf(fUser,gSystem->Getenv("alien_API_USER"));
}
//_________________________________________________________________________
AliT0Align::AliT0Align(const AliT0Align &align) :
  TObject(),
  fFileGlob(0x0),
  fT0AAlignObj(0x0),
  fT0CAlignObj(0x0),
  fDebug(0),
  fXPosC(0.),
  fYPosC(0.),
  fXPosA(0.),
  fYPosA(0.),
  fRepLoc(0),
  fRepGlob(0),
  fSide(0x0),
  fUser(0x0)  
{
  //
  //  copy constructor - dummy
  //
  ((AliT0Align &) align).Copy(*this);

}
//__________________________________________________________________________
AliT0Align & AliT0Align::operator =(const AliT0Align & align)
{
  //
  // assignment operator - dummy
  //
  if (this != &align) ((AliT0Align &) align).Copy(*this);

   return (*this);
}

//__________________________________________________________________________
AliT0Align::~AliT0Align()
{
  //
  // destructor
  //
  if(fT0AAlignObj) delete fT0AAlignObj;
  if(fT0CAlignObj) delete fT0CAlignObj;
  if(fFileGlob) delete[] fFileGlob;
  if(fUser) delete[] fUser;
}
//__________________________________________________________________________
Bool_t AliT0Align::LoadSurveyData()
{
  //
  // Create a new survey object and fill it.
 
 AliSurveyObj * s1 = new AliSurveyObj();
 const int numberPoints = 2;
 TString pointNames[numberPoints]={"Flange_0","C67_6_Beamcircle"}; 
 
 if(fRepLoc == 0) 
 { 
   //
   // Filling from DCDB (via GRID)
   //
   s1->SetGridUser(fUser);
   if(fSide == 0) 
   {
     s1->Fill("T0", fRepGlob, fUser);
   }
   else if(fSide == 1)
   {
     s1->Fill("VZERO", fRepGlob, fUser);
   }
   else
   {
     cout<<"Enter the side properly: '0'- A side, '1'- C side'" <<endl;
     return 0;
   }
 }
 else
 //
 // Filling from local file
 //
 {
   s1->FillFromLocalFile(fFileGlob);
 }
 //
 Float_t surveyedPoints [numberPoints][2];
 AliSurveyPoint *currPoint;

 //
 for(Int_t i=0;i<numberPoints;i++)
 {
   currPoint=0;
   currPoint = (AliSurveyPoint *) s1->GetData()->FindObject(pointNames[i]);
   //
   if(currPoint)
   {
     surveyedPoints[i][0]=currPoint->GetX();
     surveyedPoints[i][1]=currPoint->GetY();
   //  surveyedPoints[i]=currPoint->GetZ();
     if(fDebug)
     Printf("INFO: Point %s coordinates read.\n", pointNames[i].Data() ) ;
   }
   else 
   {
     if(fDebug)
     {
       Printf("ERROR: Essential point missing: %s\n", pointNames[i].Data() ) ;
       return 1;
     }
   }  
 }
 if(fSide == 0)
 {
   fXPosA = surveyedPoints[0][0];
   fYPosA = surveyedPoints[0][1];
 }
 else if(fSide == 1)
 {
   fXPosC = surveyedPoints[1][0]; 
   fYPosC = surveyedPoints[1][1];
 }
 //
 delete s1;
 //
 return 0;
}
//_________________________________________________________________

Double_t AliT0Align::ComputePosition()
{
 //  Float_t fZPos, shift;
 //  fZPos = surveyedPoints[3] - shift;
  return 0;
}
//_______________________________________________________________________
void AliT0Align::CreateAlignObj()
{
  //
  //  TClonesArray *array = new TClonesArray("AliAlignObjParams",2);
  // TClonesArray &alobj = *array;
  
  Double_t dx=0., dy=0., dz=0., dpsi=0., dtheta=0., dphi=0.;
  dx=fXPosA;
  dy=fYPosA;
  fT0AAlignObj = new AliAlignObjParams("ALIC_1/0STL_1",0,dx,dy,dz,dpsi,dtheta,dphi,kTRUE);
  
  dx=fXPosC;
  dy=fYPosC;
  // dz=surveyedPoints[2];
  dz=0.;
  fT0CAlignObj = new AliAlignObjParams("ALIC_1/0STR_1",0,dx,dy,dz,dpsi,dtheta,dphi,kTRUE);
  
}

//______________________________________________________________________
void AliT0Align::Run()
{
  //
  // runs the full chain
  //
  // SetDebug(0);
  Bool_t flag = LoadSurveyData();
    if(flag) 
  {
    cout<<"Missing points"<<endl;
    return;
  }
  // ComputePosition();
  CreateAlignObj();
  StoreAlignObj();
}
//_________________________________________________________________________

void AliT0Align::StoreAlignObj()
{
 //
 // Storing T0 alignment objects 
 //
 AliCDBManager* cdb = AliCDBManager::Instance();
 if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
 //
 TClonesArray *array = new TClonesArray("AliAlignObjParams",2);
//
 Double_t shifts[3];
 Double_t rots[3];
 //
 fT0AAlignObj->GetPars(shifts,rots);
 new((*array)[0]) AliAlignObjParams(fT0AAlignObj->GetSymName(),0,shifts[0],
                   shifts[1],shifts[2],rots[0],rots[1],rots[2],kTRUE);
 fT0CAlignObj->GetPars(shifts,rots);
 new((*array)[1]) AliAlignObjParams(fT0CAlignObj->GetSymName(),0,shifts[0],
                   shifts[1],shifts[2],rots[0],rots[1],rots[2],kTRUE);


//
// storing either in the OCDB or local file
//
  if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){
    // save on file
    const char* filename = "T0SurveyMisalignment.root";
    //  Char_t fullname[80];
    //  sprintf(fullname,"%s/T0/Align/Data/%s",gSystem->Getenv("ALICE_ROOT"),filename);
    TString fullname = Form("%s/T0/Align/Data/%s",gSystem->Getenv("ALICE_ROOT"), filename);
    TFile *f = new TFile(fullname.Data(),"RECREATE");
    if(!f){
      AliError("cannot open file for output\n");
      return;
    }
    AliInfo(Form("Saving alignment objects to the file %s", filename));
    f->cd();
    f->WriteObject(array,"T0AlignObjs","kSingleKey");
    f->Close();
  }else{
    // save in CDB storage
    AliCDBStorage* storage;
    //
   TString Storage = gSystem->Getenv("STORAGE");
    if(!Storage.BeginsWith("local://") && !Storage.BeginsWith("alien://")) {
      AliError(Form(
      "STORAGE variable set to %s is not valid. Exiting\n",Storage.Data()));
      return;
    }
    storage = cdb->GetStorage(Storage.Data());
    if(!storage){
      AliError(Form("Unable to open storage %s\n",Storage.Data()));
      return;
    }
    //
    AliCDBMetaData* md = new AliCDBMetaData();
    md->SetResponsible("Tomasz Malkiewicz");
    md->SetComment("Position of T0-A and T0-C from survey");
    AliCDBId id("T0/Align/Data",0,AliCDBRunRange::Infinity());
    storage->Put(array,id,md);
  }
}

 AliT0Align.cxx:1
 AliT0Align.cxx:2
 AliT0Align.cxx:3
 AliT0Align.cxx:4
 AliT0Align.cxx:5
 AliT0Align.cxx:6
 AliT0Align.cxx:7
 AliT0Align.cxx:8
 AliT0Align.cxx:9
 AliT0Align.cxx:10
 AliT0Align.cxx:11
 AliT0Align.cxx:12
 AliT0Align.cxx:13
 AliT0Align.cxx:14
 AliT0Align.cxx:15
 AliT0Align.cxx:16
 AliT0Align.cxx:17
 AliT0Align.cxx:18
 AliT0Align.cxx:19
 AliT0Align.cxx:20
 AliT0Align.cxx:21
 AliT0Align.cxx:22
 AliT0Align.cxx:23
 AliT0Align.cxx:24
 AliT0Align.cxx:25
 AliT0Align.cxx:26
 AliT0Align.cxx:27
 AliT0Align.cxx:28
 AliT0Align.cxx:29
 AliT0Align.cxx:30
 AliT0Align.cxx:31
 AliT0Align.cxx:32
 AliT0Align.cxx:33
 AliT0Align.cxx:34
 AliT0Align.cxx:35
 AliT0Align.cxx:36
 AliT0Align.cxx:37
 AliT0Align.cxx:38
 AliT0Align.cxx:39
 AliT0Align.cxx:40
 AliT0Align.cxx:41
 AliT0Align.cxx:42
 AliT0Align.cxx:43
 AliT0Align.cxx:44
 AliT0Align.cxx:45
 AliT0Align.cxx:46
 AliT0Align.cxx:47
 AliT0Align.cxx:48
 AliT0Align.cxx:49
 AliT0Align.cxx:50
 AliT0Align.cxx:51
 AliT0Align.cxx:52
 AliT0Align.cxx:53
 AliT0Align.cxx:54
 AliT0Align.cxx:55
 AliT0Align.cxx:56
 AliT0Align.cxx:57
 AliT0Align.cxx:58
 AliT0Align.cxx:59
 AliT0Align.cxx:60
 AliT0Align.cxx:61
 AliT0Align.cxx:62
 AliT0Align.cxx:63
 AliT0Align.cxx:64
 AliT0Align.cxx:65
 AliT0Align.cxx:66
 AliT0Align.cxx:67
 AliT0Align.cxx:68
 AliT0Align.cxx:69
 AliT0Align.cxx:70
 AliT0Align.cxx:71
 AliT0Align.cxx:72
 AliT0Align.cxx:73
 AliT0Align.cxx:74
 AliT0Align.cxx:75
 AliT0Align.cxx:76
 AliT0Align.cxx:77
 AliT0Align.cxx:78
 AliT0Align.cxx:79
 AliT0Align.cxx:80
 AliT0Align.cxx:81
 AliT0Align.cxx:82
 AliT0Align.cxx:83
 AliT0Align.cxx:84
 AliT0Align.cxx:85
 AliT0Align.cxx:86
 AliT0Align.cxx:87
 AliT0Align.cxx:88
 AliT0Align.cxx:89
 AliT0Align.cxx:90
 AliT0Align.cxx:91
 AliT0Align.cxx:92
 AliT0Align.cxx:93
 AliT0Align.cxx:94
 AliT0Align.cxx:95
 AliT0Align.cxx:96
 AliT0Align.cxx:97
 AliT0Align.cxx:98
 AliT0Align.cxx:99
 AliT0Align.cxx:100
 AliT0Align.cxx:101
 AliT0Align.cxx:102
 AliT0Align.cxx:103
 AliT0Align.cxx:104
 AliT0Align.cxx:105
 AliT0Align.cxx:106
 AliT0Align.cxx:107
 AliT0Align.cxx:108
 AliT0Align.cxx:109
 AliT0Align.cxx:110
 AliT0Align.cxx:111
 AliT0Align.cxx:112
 AliT0Align.cxx:113
 AliT0Align.cxx:114
 AliT0Align.cxx:115
 AliT0Align.cxx:116
 AliT0Align.cxx:117
 AliT0Align.cxx:118
 AliT0Align.cxx:119
 AliT0Align.cxx:120
 AliT0Align.cxx:121
 AliT0Align.cxx:122
 AliT0Align.cxx:123
 AliT0Align.cxx:124
 AliT0Align.cxx:125
 AliT0Align.cxx:126
 AliT0Align.cxx:127
 AliT0Align.cxx:128
 AliT0Align.cxx:129
 AliT0Align.cxx:130
 AliT0Align.cxx:131
 AliT0Align.cxx:132
 AliT0Align.cxx:133
 AliT0Align.cxx:134
 AliT0Align.cxx:135
 AliT0Align.cxx:136
 AliT0Align.cxx:137
 AliT0Align.cxx:138
 AliT0Align.cxx:139
 AliT0Align.cxx:140
 AliT0Align.cxx:141
 AliT0Align.cxx:142
 AliT0Align.cxx:143
 AliT0Align.cxx:144
 AliT0Align.cxx:145
 AliT0Align.cxx:146
 AliT0Align.cxx:147
 AliT0Align.cxx:148
 AliT0Align.cxx:149
 AliT0Align.cxx:150
 AliT0Align.cxx:151
 AliT0Align.cxx:152
 AliT0Align.cxx:153
 AliT0Align.cxx:154
 AliT0Align.cxx:155
 AliT0Align.cxx:156
 AliT0Align.cxx:157
 AliT0Align.cxx:158
 AliT0Align.cxx:159
 AliT0Align.cxx:160
 AliT0Align.cxx:161
 AliT0Align.cxx:162
 AliT0Align.cxx:163
 AliT0Align.cxx:164
 AliT0Align.cxx:165
 AliT0Align.cxx:166
 AliT0Align.cxx:167
 AliT0Align.cxx:168
 AliT0Align.cxx:169
 AliT0Align.cxx:170
 AliT0Align.cxx:171
 AliT0Align.cxx:172
 AliT0Align.cxx:173
 AliT0Align.cxx:174
 AliT0Align.cxx:175
 AliT0Align.cxx:176
 AliT0Align.cxx:177
 AliT0Align.cxx:178
 AliT0Align.cxx:179
 AliT0Align.cxx:180
 AliT0Align.cxx:181
 AliT0Align.cxx:182
 AliT0Align.cxx:183
 AliT0Align.cxx:184
 AliT0Align.cxx:185
 AliT0Align.cxx:186
 AliT0Align.cxx:187
 AliT0Align.cxx:188
 AliT0Align.cxx:189
 AliT0Align.cxx:190
 AliT0Align.cxx:191
 AliT0Align.cxx:192
 AliT0Align.cxx:193
 AliT0Align.cxx:194
 AliT0Align.cxx:195
 AliT0Align.cxx:196
 AliT0Align.cxx:197
 AliT0Align.cxx:198
 AliT0Align.cxx:199
 AliT0Align.cxx:200
 AliT0Align.cxx:201
 AliT0Align.cxx:202
 AliT0Align.cxx:203
 AliT0Align.cxx:204
 AliT0Align.cxx:205
 AliT0Align.cxx:206
 AliT0Align.cxx:207
 AliT0Align.cxx:208
 AliT0Align.cxx:209
 AliT0Align.cxx:210
 AliT0Align.cxx:211
 AliT0Align.cxx:212
 AliT0Align.cxx:213
 AliT0Align.cxx:214
 AliT0Align.cxx:215
 AliT0Align.cxx:216
 AliT0Align.cxx:217
 AliT0Align.cxx:218
 AliT0Align.cxx:219
 AliT0Align.cxx:220
 AliT0Align.cxx:221
 AliT0Align.cxx:222
 AliT0Align.cxx:223
 AliT0Align.cxx:224
 AliT0Align.cxx:225
 AliT0Align.cxx:226
 AliT0Align.cxx:227
 AliT0Align.cxx:228
 AliT0Align.cxx:229
 AliT0Align.cxx:230
 AliT0Align.cxx:231
 AliT0Align.cxx:232
 AliT0Align.cxx:233
 AliT0Align.cxx:234
 AliT0Align.cxx:235
 AliT0Align.cxx:236
 AliT0Align.cxx:237
 AliT0Align.cxx:238
 AliT0Align.cxx:239
 AliT0Align.cxx:240
 AliT0Align.cxx:241
 AliT0Align.cxx:242
 AliT0Align.cxx:243
 AliT0Align.cxx:244
 AliT0Align.cxx:245
 AliT0Align.cxx:246
 AliT0Align.cxx:247
 AliT0Align.cxx:248
 AliT0Align.cxx:249
 AliT0Align.cxx:250
 AliT0Align.cxx:251
 AliT0Align.cxx:252
 AliT0Align.cxx:253
 AliT0Align.cxx:254
 AliT0Align.cxx:255
 AliT0Align.cxx:256
 AliT0Align.cxx:257
 AliT0Align.cxx:258
 AliT0Align.cxx:259
 AliT0Align.cxx:260
 AliT0Align.cxx:261
 AliT0Align.cxx:262
 AliT0Align.cxx:263
 AliT0Align.cxx:264
 AliT0Align.cxx:265
 AliT0Align.cxx:266
 AliT0Align.cxx:267
 AliT0Align.cxx:268
 AliT0Align.cxx:269
 AliT0Align.cxx:270
 AliT0Align.cxx:271
 AliT0Align.cxx:272
 AliT0Align.cxx:273
 AliT0Align.cxx:274
 AliT0Align.cxx:275
 AliT0Align.cxx:276
 AliT0Align.cxx:277
 AliT0Align.cxx:278
 AliT0Align.cxx:279
 AliT0Align.cxx:280
 AliT0Align.cxx:281
 AliT0Align.cxx:282
 AliT0Align.cxx:283
 AliT0Align.cxx:284
 AliT0Align.cxx:285
 AliT0Align.cxx:286
 AliT0Align.cxx:287
 AliT0Align.cxx:288
 AliT0Align.cxx:289
 AliT0Align.cxx:290
 AliT0Align.cxx:291
 AliT0Align.cxx:292
 AliT0Align.cxx:293
 AliT0Align.cxx:294
 AliT0Align.cxx:295
 AliT0Align.cxx:296
 AliT0Align.cxx:297
 AliT0Align.cxx:298
 AliT0Align.cxx:299
 AliT0Align.cxx:300
 AliT0Align.cxx:301
 AliT0Align.cxx:302
 AliT0Align.cxx:303
 AliT0Align.cxx:304
 AliT0Align.cxx:305
 AliT0Align.cxx:306
 AliT0Align.cxx:307
 AliT0Align.cxx:308
 AliT0Align.cxx:309
 AliT0Align.cxx:310
 AliT0Align.cxx:311
 AliT0Align.cxx:312
 AliT0Align.cxx:313
 AliT0Align.cxx:314
 AliT0Align.cxx:315
 AliT0Align.cxx:316
 AliT0Align.cxx:317
 AliT0Align.cxx:318
 AliT0Align.cxx:319
 AliT0Align.cxx:320
 AliT0Align.cxx:321
 AliT0Align.cxx:322
 AliT0Align.cxx:323
 AliT0Align.cxx:324
 AliT0Align.cxx:325
 AliT0Align.cxx:326
 AliT0Align.cxx:327
 AliT0Align.cxx:328
 AliT0Align.cxx:329
 AliT0Align.cxx:330
 AliT0Align.cxx:331
 AliT0Align.cxx:332
 AliT0Align.cxx:333
 AliT0Align.cxx:334
 AliT0Align.cxx:335
 AliT0Align.cxx:336
 AliT0Align.cxx:337