ROOT logo
// macro to create 
Double_t sgXMod=30e-4,sgYMod=30e-4,sgZMod=30e-4,sgThtMod=0.1,sgPsiMod=0.1,sgPhiMod=0.1;
Double_t sgXSta=30e-4,sgYSta=30e-4,sgZSta=30e-4,sgThtSta=0.1,sgPsiSta=0.1,sgPhiSta=0.1;
Double_t sgXLay=30e-4,sgYLay=30e-4,sgZLay=30e-4,sgThtLay=0.1,sgPsiLay=0.1,sgPhiLay=0.1;
Double_t sgXITS=100e-4,sgYITS=100e-4,sgZITS=2000e-4,sgThtITS=0.1,sgPsiITS=0.1,sgPhiITS=0.1;
//
TClonesArray* deltas=0;
//
void MakeITSUResMisAlignment()       			 
{
  gSystem->Load("libITSUpgradeBase");
  //
  // at the moment we don't want to write to official CDB
  gSystem->Setenv("TOCDB","kTRUE");
  gSystem->Setenv("STORAGE","local://");
  //
  // Activate CDB storage and load geometry from CDB
  AliCDBManager* cdb = AliCDBManager::Instance();
  if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://");
  cdb->SetRun(0);
  AliCDBStorage* storage;
  // 
  if (!gGeoManager) {
    if (!gSystem->AccessPathName("geometry.root")) {
      printf("Loading geometry.root from current directory\n");
      AliGeomManager::LoadGeometry("geometry.root"); //load geom from default CDB storage      
    }
  }
  //
  if (TString(gSystem->Getenv("TOCDB")) == TString("kTRUE")) {
    TString Storage = gSystem->Getenv("STORAGE");
    if (!Storage.BeginsWith("local://") && !Storage.BeginsWith("alien://")) {
      Error(macroname,"STORAGE variable set to %s is not valid. Exiting\n",Storage.Data());
      return;
    }
    storage = cdb->GetStorage(Storage.Data());
    if (!storage) {
      Error(macroname,"Unable to open storage %s\n",Storage.Data());
      return;
    }
    //
    if (!gGeoManager) {
      AliCDBPath path("GRP","Geometry","Data");
      AliCDBEntry *entry = storage->Get(path.GetPath(),cdb->GetRun());
      if(!entry) Fatal(macroname,"Could not get the specified CDB entry!");
      entry->SetOwner(0);
      TGeoManager* geom = (TGeoManager*) entry->GetObject();
      AliGeomManager::SetGeometry(geom);
    }
  }
  //
  const UShort_t dummyVID = 0xffff;
  AliITSUGeomTGeo* gm0 = new AliITSUGeomTGeo(kTRUE);
  //
  deltas = new TClonesArray("AliAlignObjParams");
  double dx,dy,dz,dtht,dpsi,dphi;
  //
  TString sname;
  int idel = 0;
  //
  dx   = sgXITS*gRandom->Gaus();
  dy   = sgYITS*gRandom->Gaus();	
  dz   = sgZITS*gRandom->Gaus();
  dtht = sgThtITS*gRandom->Gaus(); 
  dpsi = sgPsiITS*gRandom->Gaus(); 
  dphi = sgPhiITS*gRandom->Gaus(); 	
  sname = gm0->ComposeSymNameITS();
  new( (*deltas)[idel++] ) AliAlignObjParams(sname.Data(),dummyVID,
					     dx,dy,dz,dtht,dpsi,dphi,kTRUE);
  //
  for (int ilr=0;ilr<gm0->GetNLayers();ilr++) {
    //
    dx   = sgXLay*gRandom->Gaus();
    dy   = sgYLay*gRandom->Gaus();	
    dz   = sgZLay*gRandom->Gaus();
    dtht = sgThtLay*gRandom->Gaus(); 
    dpsi = sgPsiLay*gRandom->Gaus(); 
    dphi = sgPhiLay*gRandom->Gaus(); 	
    sname = gm0->ComposeSymNameLayer(ilr);
    new( (*deltas)[idel++] ) AliAlignObjParams(sname.Data(),dummyVID,
					       dx,dy,dz,dtht,dpsi,dphi,kTRUE);
    //
    for (int ild=0;ild<gm0->GetNStaves(ilr);ild++) {
      //
      dx   = sgXSta*gRandom->Gaus();
      dy   = sgYSta*gRandom->Gaus();	
      dz   = sgZSta*gRandom->Gaus();
      dtht = sgThtSta*gRandom->Gaus(); 
      dpsi = sgPsiSta*gRandom->Gaus(); 
      dphi = sgPhiSta*gRandom->Gaus(); 	
      sname = gm0->ComposeSymNameStave(ilr,ild);
      new( (*deltas)[idel++] ) AliAlignObjParams(sname.Data(),dummyVID,
						 dx,dy,dz,dtht,dpsi,dphi,kTRUE);
      //
      for (int isn=0;isn<gm0->GetNChipsPerStave(ilr);isn++) {
	dx   = sgXMod*gRandom->Gaus();
	dy   = sgYMod*gRandom->Gaus();	
	dz   = sgZMod*gRandom->Gaus();
	dtht = sgThtMod*gRandom->Gaus(); 
	dpsi = sgPsiMod*gRandom->Gaus(); 
	dphi = sgPhiMod*gRandom->Gaus(); 	
	int mid = gm0->GetChipIndex(ilr,ild,isn);
	sname = gm0->ComposeSymNameChip(ilr,ild,-1,-1,isn);
	new( (*deltas)[idel++] ) AliAlignObjParams(sname.Data(),gm0->ChipVolUID(mid),
						   dx,dy,dz,dtht,dpsi,dphi,kTRUE);
      }
    }
  }
  //
  if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){
    // save on file
    const char* filename = "ITSUresidualMisalignment.root";
    TFile f(filename,"RECREATE");
    if(!f){
      Error(macroname,"cannot open file for output\n");
      return;
    }
    Info(macroname,"Saving alignment objects to the file %s", filename);
    f.cd();
    f.WriteObject(deltas,"ITSUAlignObjs","kSingleKey");
    f.Close();
  } 
  else{
    // save in CDB storage
    AliCDBMetaData* md = new AliCDBMetaData();
    md->SetResponsible("R.S.");
    md->SetComment("Residual misalignment for ITSU");
    md->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
    AliCDBId id("ITS/Align/Data",0,AliCDBRunRange::Infinity());
    storage->Put(deltas,id,md);
  }

  // apply to geometry
  printf("Applying created misalignment to geometry in memory\n");
  AliGeomManager::ApplyAlignObjsToGeom(*deltas);
  gGeoManager->LockGeometry();
  //
}
 MakeITSUResMisAlignment.C:1
 MakeITSUResMisAlignment.C:2
 MakeITSUResMisAlignment.C:3
 MakeITSUResMisAlignment.C:4
 MakeITSUResMisAlignment.C:5
 MakeITSUResMisAlignment.C:6
 MakeITSUResMisAlignment.C:7
 MakeITSUResMisAlignment.C:8
 MakeITSUResMisAlignment.C:9
 MakeITSUResMisAlignment.C:10
 MakeITSUResMisAlignment.C:11
 MakeITSUResMisAlignment.C:12
 MakeITSUResMisAlignment.C:13
 MakeITSUResMisAlignment.C:14
 MakeITSUResMisAlignment.C:15
 MakeITSUResMisAlignment.C:16
 MakeITSUResMisAlignment.C:17
 MakeITSUResMisAlignment.C:18
 MakeITSUResMisAlignment.C:19
 MakeITSUResMisAlignment.C:20
 MakeITSUResMisAlignment.C:21
 MakeITSUResMisAlignment.C:22
 MakeITSUResMisAlignment.C:23
 MakeITSUResMisAlignment.C:24
 MakeITSUResMisAlignment.C:25
 MakeITSUResMisAlignment.C:26
 MakeITSUResMisAlignment.C:27
 MakeITSUResMisAlignment.C:28
 MakeITSUResMisAlignment.C:29
 MakeITSUResMisAlignment.C:30
 MakeITSUResMisAlignment.C:31
 MakeITSUResMisAlignment.C:32
 MakeITSUResMisAlignment.C:33
 MakeITSUResMisAlignment.C:34
 MakeITSUResMisAlignment.C:35
 MakeITSUResMisAlignment.C:36
 MakeITSUResMisAlignment.C:37
 MakeITSUResMisAlignment.C:38
 MakeITSUResMisAlignment.C:39
 MakeITSUResMisAlignment.C:40
 MakeITSUResMisAlignment.C:41
 MakeITSUResMisAlignment.C:42
 MakeITSUResMisAlignment.C:43
 MakeITSUResMisAlignment.C:44
 MakeITSUResMisAlignment.C:45
 MakeITSUResMisAlignment.C:46
 MakeITSUResMisAlignment.C:47
 MakeITSUResMisAlignment.C:48
 MakeITSUResMisAlignment.C:49
 MakeITSUResMisAlignment.C:50
 MakeITSUResMisAlignment.C:51
 MakeITSUResMisAlignment.C:52
 MakeITSUResMisAlignment.C:53
 MakeITSUResMisAlignment.C:54
 MakeITSUResMisAlignment.C:55
 MakeITSUResMisAlignment.C:56
 MakeITSUResMisAlignment.C:57
 MakeITSUResMisAlignment.C:58
 MakeITSUResMisAlignment.C:59
 MakeITSUResMisAlignment.C:60
 MakeITSUResMisAlignment.C:61
 MakeITSUResMisAlignment.C:62
 MakeITSUResMisAlignment.C:63
 MakeITSUResMisAlignment.C:64
 MakeITSUResMisAlignment.C:65
 MakeITSUResMisAlignment.C:66
 MakeITSUResMisAlignment.C:67
 MakeITSUResMisAlignment.C:68
 MakeITSUResMisAlignment.C:69
 MakeITSUResMisAlignment.C:70
 MakeITSUResMisAlignment.C:71
 MakeITSUResMisAlignment.C:72
 MakeITSUResMisAlignment.C:73
 MakeITSUResMisAlignment.C:74
 MakeITSUResMisAlignment.C:75
 MakeITSUResMisAlignment.C:76
 MakeITSUResMisAlignment.C:77
 MakeITSUResMisAlignment.C:78
 MakeITSUResMisAlignment.C:79
 MakeITSUResMisAlignment.C:80
 MakeITSUResMisAlignment.C:81
 MakeITSUResMisAlignment.C:82
 MakeITSUResMisAlignment.C:83
 MakeITSUResMisAlignment.C:84
 MakeITSUResMisAlignment.C:85
 MakeITSUResMisAlignment.C:86
 MakeITSUResMisAlignment.C:87
 MakeITSUResMisAlignment.C:88
 MakeITSUResMisAlignment.C:89
 MakeITSUResMisAlignment.C:90
 MakeITSUResMisAlignment.C:91
 MakeITSUResMisAlignment.C:92
 MakeITSUResMisAlignment.C:93
 MakeITSUResMisAlignment.C:94
 MakeITSUResMisAlignment.C:95
 MakeITSUResMisAlignment.C:96
 MakeITSUResMisAlignment.C:97
 MakeITSUResMisAlignment.C:98
 MakeITSUResMisAlignment.C:99
 MakeITSUResMisAlignment.C:100
 MakeITSUResMisAlignment.C:101
 MakeITSUResMisAlignment.C:102
 MakeITSUResMisAlignment.C:103
 MakeITSUResMisAlignment.C:104
 MakeITSUResMisAlignment.C:105
 MakeITSUResMisAlignment.C:106
 MakeITSUResMisAlignment.C:107
 MakeITSUResMisAlignment.C:108
 MakeITSUResMisAlignment.C:109
 MakeITSUResMisAlignment.C:110
 MakeITSUResMisAlignment.C:111
 MakeITSUResMisAlignment.C:112
 MakeITSUResMisAlignment.C:113
 MakeITSUResMisAlignment.C:114
 MakeITSUResMisAlignment.C:115
 MakeITSUResMisAlignment.C:116
 MakeITSUResMisAlignment.C:117
 MakeITSUResMisAlignment.C:118
 MakeITSUResMisAlignment.C:119
 MakeITSUResMisAlignment.C:120
 MakeITSUResMisAlignment.C:121
 MakeITSUResMisAlignment.C:122
 MakeITSUResMisAlignment.C:123
 MakeITSUResMisAlignment.C:124
 MakeITSUResMisAlignment.C:125
 MakeITSUResMisAlignment.C:126
 MakeITSUResMisAlignment.C:127
 MakeITSUResMisAlignment.C:128
 MakeITSUResMisAlignment.C:129
 MakeITSUResMisAlignment.C:130
 MakeITSUResMisAlignment.C:131
 MakeITSUResMisAlignment.C:132
 MakeITSUResMisAlignment.C:133
 MakeITSUResMisAlignment.C:134
 MakeITSUResMisAlignment.C:135
 MakeITSUResMisAlignment.C:136
 MakeITSUResMisAlignment.C:137
 MakeITSUResMisAlignment.C:138
 MakeITSUResMisAlignment.C:139