ROOT logo
/* $Id$*/

// Script to create alignment parameters and store them into CDB
// Three sets of alignment parameters can be created:
// 1) Ideal geometry
// 2) Geometry with disalignments and disorientations
// 3) Geometry small disalignments and disorientations

#if !defined(__CINT__)
#include "TControlBar.h"
#include "TString.h"
#include "TRandom.h"
#include "TClonesArray.h"

#include "AliAlignObjParams.h"
#include "AliCDBMetaData.h"
#include "AliCDBId.h"
#include "AliCDBEntry.h"
#include "AliCDBManager.h"
#include "AliCDBStorage.h"
#endif


void AliPHOSSetAlignment()
{
  TControlBar *menu = new TControlBar("vertical","PHOS alignment control");
  menu->AddButton("Help to run PHOS alignment control","Help()",
		  "Explains how to use PHOS alignment control menus");

  menu->AddButton("Ideal geometry","IdealAlignment()",
		  "Set ideal PHOS geometry with zero displacement");
  menu->AddButton("Misaligned geometry","FullMisalignment()",
		  "Set PHOS geometry with large displacement");
  menu->AddButton("Residual misaligned geometry","ResidualAlignment()",
		  "Set PHOS geometry with small residual displacement");

  menu->Show();
}

//------------------------------------------------------------------------
void Help()
{
  char *string =
    "\n\n\nSet PHOS alignment parameters and write them into ALICE CDB.
Press button \"Ideal geometry\" to create PHOS geometry with ideal geometry.
Press button \"Misaligned geometry\" to create PHOS geometry with fully displaced and disorientated geometry.
Press button \"Residual misaligned geometry\" to create PHOS geometry with infinitesimal displacement and disorientation\n\n\n";
  printf(string);
}

//------------------------------------------------------------------------
void IdealAlignment()
{
  // Create alignment objects for PHOS with ideally aligned geometry,
  // i.e. with zero displacements and zero disorientations

  // *************************    1st step    ***************
  // Create TClonesArray of alignment objects for PHOS

  TClonesArray *array = new TClonesArray("AliAlignObjParams",11);
  TClonesArray &alobj = *array;
   
  AliAlignObjParams a;

  Double_t dx=0., dy=0., dz=0., dpsi=0., dtheta=0., dphi=0.;
  // null shifts and rotations

  UShort_t iIndex=0;
  AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
  UShort_t dvoluid = AliGeomManager::LayerToVolUID(iLayer,iIndex); //dummy volume identity 

  TString basePath = "PHOS/Module"; 
  const Int_t nModules=5;

  for (Int_t iModule = 1; iModule<=nModules; iModule++) {
    TString newPath = basePath;
    newPath += iModule;
    new(alobj[iModule-1]) AliAlignObjParams(newPath.Data(),
					    dvoluid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
  }

  // *************************    2nd step    ***************
  // Make CDB storage and put TClonesArray in
  // 
  AliCDBManager *CDB = AliCDBManager::Instance();
  CDB->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  
  AliCDBMetaData *md= new AliCDBMetaData();
  md->SetResponsible("Yuri Kharlov");
  md->SetComment("Alignment objects for ideal geometry, i.e. applying them to TGeo has to leave geometry unchanged");
  AliCDBId id("PHOS/Align/Data",0,999999);
  CDB->Put(array,id, md);
}

//------------------------------------------------------------------------
void ResidualAlignment()
{
  // Create alignment objects for PHOS with residual alignment,
  // i.e. with infinitesimal displacement and disorientation

  // *************************    1st step    ***************
  // Create TClonesArray of alignment objects for PHOS

  TClonesArray *array = new TClonesArray("AliAlignObjParams",11);
  TClonesArray &alobj = *array;
   
  AliAlignObjParams a;

  Double_t dpsi=0., dtheta=0., dphi=0.;
  Double_t displacement = 0.2;

  UShort_t iIndex=0;
  AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
  UShort_t dvoluid = AliGeomManager::LayerToVolUID(iLayer,iIndex); //dummy volume identity 

  // Alignment for 5 PHOS modules
  new(alobj[0]) AliAlignObjParams("PHOS/Module1",
				  dvoluid, -0.20, -0.1, +0.0, dpsi, dtheta, 0.2, kTRUE);
  new(alobj[1]) AliAlignObjParams("PHOS/Module2",
				  dvoluid, -0.10, +0.0, -0.2, dpsi, dtheta, 0.2, kTRUE);
  new(alobj[2]) AliAlignObjParams("PHOS/Module3",
				  dvoluid,  0.05, -0.1,  0.2, dpsi, dtheta, 0.0, kTRUE);
  new(alobj[3]) AliAlignObjParams("PHOS/Module4",
				  dvoluid, +0.10, -0.0, -0.1, dpsi, dtheta, 0.1, kTRUE);
  new(alobj[4]) AliAlignObjParams("PHOS/Module5",
				  dvoluid, +0.20, -0.1,  0.1, dpsi, dtheta, 0.2, kTRUE);

  // Alignment for PHOS cradle
  new(alobj[5]) AliAlignObjParams("PHOS/Cradle0",
				  dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
  new(alobj[6]) AliAlignObjParams("PHOS/Cradle1",
				  dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);

  // Alignment for cradle wheels
  new(alobj[7])  AliAlignObjParams("PHOS/Wheel0",
				   dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
  new(alobj[8])  AliAlignObjParams("PHOS/Wheel1",
				   dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
  new(alobj[9])  AliAlignObjParams("PHOS/Wheel2",
				   dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
  new(alobj[10]) AliAlignObjParams("PHOS/Wheel3",
				   dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);

  // *************************    2nd step    ***************
  // Make CDB storage and put TClonesArray in
  // 
  AliCDBManager *CDB = AliCDBManager::Instance();
  CDB->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  
  AliCDBMetaData *md= new AliCDBMetaData();
  md->SetResponsible("Yuri Kharlov");
  md->SetComment("Alignment objects for slightly misaligned geometry, i.e. applying them to TGeo has to distirbes geometry very little (resisual misalignment");
  AliCDBId id("PHOS/Align/Data",1000000,1999999);
  CDB->Put(array,id, md);
}

//------------------------------------------------------------------------
void FullMisalignment()
{
  // Create alignment objects for PHOS with fully misaligned geometry

  // *************************    1st step    ***************
  // Create TClonesArray of alignment objects for PHOS

  TClonesArray *array = new TClonesArray("AliAlignObjParams",11);
  TClonesArray &alobj = *array;
   
  AliAlignObjParams a;

  Double_t dpsi=0., dtheta=0., dphi=0.;
  Double_t displacement = 10;

  UShort_t iIndex=0;
  AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
  UShort_t dvoluid = AliGeomManager::LayerToVolUID(iLayer,iIndex); //dummy volume identity 

  // Alignment for 5 PHOS modules
  new(alobj[0]) AliAlignObjParams("PHOS/Module1",
				  dvoluid, -20., -10.,   0., dpsi, dtheta, 5, kTRUE);
  new(alobj[1]) AliAlignObjParams("PHOS/Module2",
				  dvoluid, -10.,   0., -10., dpsi, dtheta, 2, kTRUE);
  new(alobj[2]) AliAlignObjParams("PHOS/Module3",
				  dvoluid,   5., -10.,  10., dpsi, dtheta, 0, kTRUE);
  new(alobj[3]) AliAlignObjParams("PHOS/Module4",
				  dvoluid, +10.,  -0., -10., dpsi, dtheta, 2, kTRUE);
  new(alobj[4]) AliAlignObjParams("PHOS/Module5",
				  dvoluid, +20., -10.,   0., dpsi, dtheta, 5, kTRUE);

  // Alignment for PHOS cradle
  new(alobj[5]) AliAlignObjParams("PHOS/Cradle0",
				  dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
  new(alobj[6]) AliAlignObjParams("PHOS/Cradle1",
				  dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);

  // Alignment for cradle wheels
  new(alobj[7]) AliAlignObjParams("PHOS/Wheel0",
				  dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
  new(alobj[8]) AliAlignObjParams("PHOS/Wheel1",
				  dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
  new(alobj[9]) AliAlignObjParams("PHOS/Wheel2",
				  dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
  new(alobj[10]) AliAlignObjParams("PHOS/Wheel3",
				  dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);

  // *************************    2nd step    ***************
  // Make CDB storage and put TClonesArray in
  // 
  AliCDBManager *CDB = AliCDBManager::Instance();
  CDB->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  
  AliCDBMetaData *md= new AliCDBMetaData();
  md->SetResponsible("Yuri Kharlov");
  md->SetComment("Alignment objects for fully misaligned geometry, i.e. applying them to TGeo has to distirbes geometry very much");
  AliCDBId id("PHOS/Align/Data",2000000,2999999);
  CDB->Put(array,id, md);
}
 AliPHOSSetAlignment.C:1
 AliPHOSSetAlignment.C:2
 AliPHOSSetAlignment.C:3
 AliPHOSSetAlignment.C:4
 AliPHOSSetAlignment.C:5
 AliPHOSSetAlignment.C:6
 AliPHOSSetAlignment.C:7
 AliPHOSSetAlignment.C:8
 AliPHOSSetAlignment.C:9
 AliPHOSSetAlignment.C:10
 AliPHOSSetAlignment.C:11
 AliPHOSSetAlignment.C:12
 AliPHOSSetAlignment.C:13
 AliPHOSSetAlignment.C:14
 AliPHOSSetAlignment.C:15
 AliPHOSSetAlignment.C:16
 AliPHOSSetAlignment.C:17
 AliPHOSSetAlignment.C:18
 AliPHOSSetAlignment.C:19
 AliPHOSSetAlignment.C:20
 AliPHOSSetAlignment.C:21
 AliPHOSSetAlignment.C:22
 AliPHOSSetAlignment.C:23
 AliPHOSSetAlignment.C:24
 AliPHOSSetAlignment.C:25
 AliPHOSSetAlignment.C:26
 AliPHOSSetAlignment.C:27
 AliPHOSSetAlignment.C:28
 AliPHOSSetAlignment.C:29
 AliPHOSSetAlignment.C:30
 AliPHOSSetAlignment.C:31
 AliPHOSSetAlignment.C:32
 AliPHOSSetAlignment.C:33
 AliPHOSSetAlignment.C:34
 AliPHOSSetAlignment.C:35
 AliPHOSSetAlignment.C:36
 AliPHOSSetAlignment.C:37
 AliPHOSSetAlignment.C:38
 AliPHOSSetAlignment.C:39
 AliPHOSSetAlignment.C:40
 AliPHOSSetAlignment.C:41
 AliPHOSSetAlignment.C:42
 AliPHOSSetAlignment.C:43
 AliPHOSSetAlignment.C:44
 AliPHOSSetAlignment.C:45
 AliPHOSSetAlignment.C:46
 AliPHOSSetAlignment.C:47
 AliPHOSSetAlignment.C:48
 AliPHOSSetAlignment.C:49
 AliPHOSSetAlignment.C:50
 AliPHOSSetAlignment.C:51
 AliPHOSSetAlignment.C:52
 AliPHOSSetAlignment.C:53
 AliPHOSSetAlignment.C:54
 AliPHOSSetAlignment.C:55
 AliPHOSSetAlignment.C:56
 AliPHOSSetAlignment.C:57
 AliPHOSSetAlignment.C:58
 AliPHOSSetAlignment.C:59
 AliPHOSSetAlignment.C:60
 AliPHOSSetAlignment.C:61
 AliPHOSSetAlignment.C:62
 AliPHOSSetAlignment.C:63
 AliPHOSSetAlignment.C:64
 AliPHOSSetAlignment.C:65
 AliPHOSSetAlignment.C:66
 AliPHOSSetAlignment.C:67
 AliPHOSSetAlignment.C:68
 AliPHOSSetAlignment.C:69
 AliPHOSSetAlignment.C:70
 AliPHOSSetAlignment.C:71
 AliPHOSSetAlignment.C:72
 AliPHOSSetAlignment.C:73
 AliPHOSSetAlignment.C:74
 AliPHOSSetAlignment.C:75
 AliPHOSSetAlignment.C:76
 AliPHOSSetAlignment.C:77
 AliPHOSSetAlignment.C:78
 AliPHOSSetAlignment.C:79
 AliPHOSSetAlignment.C:80
 AliPHOSSetAlignment.C:81
 AliPHOSSetAlignment.C:82
 AliPHOSSetAlignment.C:83
 AliPHOSSetAlignment.C:84
 AliPHOSSetAlignment.C:85
 AliPHOSSetAlignment.C:86
 AliPHOSSetAlignment.C:87
 AliPHOSSetAlignment.C:88
 AliPHOSSetAlignment.C:89
 AliPHOSSetAlignment.C:90
 AliPHOSSetAlignment.C:91
 AliPHOSSetAlignment.C:92
 AliPHOSSetAlignment.C:93
 AliPHOSSetAlignment.C:94
 AliPHOSSetAlignment.C:95
 AliPHOSSetAlignment.C:96
 AliPHOSSetAlignment.C:97
 AliPHOSSetAlignment.C:98
 AliPHOSSetAlignment.C:99
 AliPHOSSetAlignment.C:100
 AliPHOSSetAlignment.C:101
 AliPHOSSetAlignment.C:102
 AliPHOSSetAlignment.C:103
 AliPHOSSetAlignment.C:104
 AliPHOSSetAlignment.C:105
 AliPHOSSetAlignment.C:106
 AliPHOSSetAlignment.C:107
 AliPHOSSetAlignment.C:108
 AliPHOSSetAlignment.C:109
 AliPHOSSetAlignment.C:110
 AliPHOSSetAlignment.C:111
 AliPHOSSetAlignment.C:112
 AliPHOSSetAlignment.C:113
 AliPHOSSetAlignment.C:114
 AliPHOSSetAlignment.C:115
 AliPHOSSetAlignment.C:116
 AliPHOSSetAlignment.C:117
 AliPHOSSetAlignment.C:118
 AliPHOSSetAlignment.C:119
 AliPHOSSetAlignment.C:120
 AliPHOSSetAlignment.C:121
 AliPHOSSetAlignment.C:122
 AliPHOSSetAlignment.C:123
 AliPHOSSetAlignment.C:124
 AliPHOSSetAlignment.C:125
 AliPHOSSetAlignment.C:126
 AliPHOSSetAlignment.C:127
 AliPHOSSetAlignment.C:128
 AliPHOSSetAlignment.C:129
 AliPHOSSetAlignment.C:130
 AliPHOSSetAlignment.C:131
 AliPHOSSetAlignment.C:132
 AliPHOSSetAlignment.C:133
 AliPHOSSetAlignment.C:134
 AliPHOSSetAlignment.C:135
 AliPHOSSetAlignment.C:136
 AliPHOSSetAlignment.C:137
 AliPHOSSetAlignment.C:138
 AliPHOSSetAlignment.C:139
 AliPHOSSetAlignment.C:140
 AliPHOSSetAlignment.C:141
 AliPHOSSetAlignment.C:142
 AliPHOSSetAlignment.C:143
 AliPHOSSetAlignment.C:144
 AliPHOSSetAlignment.C:145
 AliPHOSSetAlignment.C:146
 AliPHOSSetAlignment.C:147
 AliPHOSSetAlignment.C:148
 AliPHOSSetAlignment.C:149
 AliPHOSSetAlignment.C:150
 AliPHOSSetAlignment.C:151
 AliPHOSSetAlignment.C:152
 AliPHOSSetAlignment.C:153
 AliPHOSSetAlignment.C:154
 AliPHOSSetAlignment.C:155
 AliPHOSSetAlignment.C:156
 AliPHOSSetAlignment.C:157
 AliPHOSSetAlignment.C:158
 AliPHOSSetAlignment.C:159
 AliPHOSSetAlignment.C:160
 AliPHOSSetAlignment.C:161
 AliPHOSSetAlignment.C:162
 AliPHOSSetAlignment.C:163
 AliPHOSSetAlignment.C:164
 AliPHOSSetAlignment.C:165
 AliPHOSSetAlignment.C:166
 AliPHOSSetAlignment.C:167
 AliPHOSSetAlignment.C:168
 AliPHOSSetAlignment.C:169
 AliPHOSSetAlignment.C:170
 AliPHOSSetAlignment.C:171
 AliPHOSSetAlignment.C:172
 AliPHOSSetAlignment.C:173
 AliPHOSSetAlignment.C:174
 AliPHOSSetAlignment.C:175
 AliPHOSSetAlignment.C:176
 AliPHOSSetAlignment.C:177
 AliPHOSSetAlignment.C:178
 AliPHOSSetAlignment.C:179
 AliPHOSSetAlignment.C:180
 AliPHOSSetAlignment.C:181
 AliPHOSSetAlignment.C:182
 AliPHOSSetAlignment.C:183
 AliPHOSSetAlignment.C:184
 AliPHOSSetAlignment.C:185
 AliPHOSSetAlignment.C:186
 AliPHOSSetAlignment.C:187
 AliPHOSSetAlignment.C:188
 AliPHOSSetAlignment.C:189
 AliPHOSSetAlignment.C:190
 AliPHOSSetAlignment.C:191
 AliPHOSSetAlignment.C:192
 AliPHOSSetAlignment.C:193
 AliPHOSSetAlignment.C:194
 AliPHOSSetAlignment.C:195
 AliPHOSSetAlignment.C:196
 AliPHOSSetAlignment.C:197
 AliPHOSSetAlignment.C:198
 AliPHOSSetAlignment.C:199
 AliPHOSSetAlignment.C:200
 AliPHOSSetAlignment.C:201
 AliPHOSSetAlignment.C:202
 AliPHOSSetAlignment.C:203
 AliPHOSSetAlignment.C:204
 AliPHOSSetAlignment.C:205
 AliPHOSSetAlignment.C:206
 AliPHOSSetAlignment.C:207
 AliPHOSSetAlignment.C:208
 AliPHOSSetAlignment.C:209
 AliPHOSSetAlignment.C:210
 AliPHOSSetAlignment.C:211
 AliPHOSSetAlignment.C:212
 AliPHOSSetAlignment.C:213
 AliPHOSSetAlignment.C:214
 AliPHOSSetAlignment.C:215
 AliPHOSSetAlignment.C:216
 AliPHOSSetAlignment.C:217