ROOT logo
void MakeTPCResMisAlignment(){
  // Create TClonesArray of residual misalignment objects for TPC
  //
  const char* macroname = "MakeTPCResMisAlignment.C";

  // Activate CDB storage and load geometry from CDB
  AliCDBManager* cdb = AliCDBManager::Instance();
  if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  cdb->SetRun(0);
  
  AliCDBStorage* 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;
    }
    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);
  }else{
    AliGeomManager::LoadGeometry(); //load geom from default CDB storage
  }    

  TClonesArray *array = new TClonesArray("AliAlignObjParams",100);
  TClonesArray &alobj = *array;
  
  TRandom *rnd   = new TRandom(4357);
  Double_t dx, dy, dz, dpsi, dtheta, dphi;
  Int_t j = 0;

  // RS = local
  // sigma translation = 0.1 mm
  // sigma rotation = 0.1 mrad
  Float_t sigmatr=0.01;
  Float_t sigmarot = 0.006;
  for (Int_t iLayer = AliGeomManager::kTPC1; iLayer <= AliGeomManager::kTPC2; iLayer++) {
    for (Int_t iModule = 0; iModule < AliGeomManager::LayerSize(iLayer); iModule++) {

      dx = rnd->Gaus(0,sigmatr);
      dy = rnd->Gaus(0,sigmatr);
      dz = rnd->Gaus(0,sigmatr);
      dpsi = rnd->Gaus(0,sigmarot);
      dtheta = rnd->Gaus(0,sigmarot);
      dphi = rnd->Gaus(0,sigmarot);

      UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iModule);
      const char *symname = AliGeomManager::SymName(volid);
      new(alobj[j]) AliAlignObjParams(symname, volid, dx, dy, dz, dpsi, dtheta, dphi, kFALSE);
      j++;
    }
  }

  if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){
    // save on file
    const char* filename = "TPCresidualMisalignment.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(array,"TPCAlignObjs","kSingleKey");
    f.Close();
  }else{
    // save in CDB storage
    AliCDBMetaData* md = new AliCDBMetaData();
    md->SetResponsible("Marian Ivanov");
    md->SetComment("Residual misalignment for TPC, sigmatr=0.01 and sigmarot=0.6 in the local RS");
    md->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
    AliCDBId id("TPC/Align/Data",0,AliCDBRunRange::Infinity());
    storage->Put(array,id,md);
  }

  array->Delete();

}

 MakeTPCResMisAlignment.C:1
 MakeTPCResMisAlignment.C:2
 MakeTPCResMisAlignment.C:3
 MakeTPCResMisAlignment.C:4
 MakeTPCResMisAlignment.C:5
 MakeTPCResMisAlignment.C:6
 MakeTPCResMisAlignment.C:7
 MakeTPCResMisAlignment.C:8
 MakeTPCResMisAlignment.C:9
 MakeTPCResMisAlignment.C:10
 MakeTPCResMisAlignment.C:11
 MakeTPCResMisAlignment.C:12
 MakeTPCResMisAlignment.C:13
 MakeTPCResMisAlignment.C:14
 MakeTPCResMisAlignment.C:15
 MakeTPCResMisAlignment.C:16
 MakeTPCResMisAlignment.C:17
 MakeTPCResMisAlignment.C:18
 MakeTPCResMisAlignment.C:19
 MakeTPCResMisAlignment.C:20
 MakeTPCResMisAlignment.C:21
 MakeTPCResMisAlignment.C:22
 MakeTPCResMisAlignment.C:23
 MakeTPCResMisAlignment.C:24
 MakeTPCResMisAlignment.C:25
 MakeTPCResMisAlignment.C:26
 MakeTPCResMisAlignment.C:27
 MakeTPCResMisAlignment.C:28
 MakeTPCResMisAlignment.C:29
 MakeTPCResMisAlignment.C:30
 MakeTPCResMisAlignment.C:31
 MakeTPCResMisAlignment.C:32
 MakeTPCResMisAlignment.C:33
 MakeTPCResMisAlignment.C:34
 MakeTPCResMisAlignment.C:35
 MakeTPCResMisAlignment.C:36
 MakeTPCResMisAlignment.C:37
 MakeTPCResMisAlignment.C:38
 MakeTPCResMisAlignment.C:39
 MakeTPCResMisAlignment.C:40
 MakeTPCResMisAlignment.C:41
 MakeTPCResMisAlignment.C:42
 MakeTPCResMisAlignment.C:43
 MakeTPCResMisAlignment.C:44
 MakeTPCResMisAlignment.C:45
 MakeTPCResMisAlignment.C:46
 MakeTPCResMisAlignment.C:47
 MakeTPCResMisAlignment.C:48
 MakeTPCResMisAlignment.C:49
 MakeTPCResMisAlignment.C:50
 MakeTPCResMisAlignment.C:51
 MakeTPCResMisAlignment.C:52
 MakeTPCResMisAlignment.C:53
 MakeTPCResMisAlignment.C:54
 MakeTPCResMisAlignment.C:55
 MakeTPCResMisAlignment.C:56
 MakeTPCResMisAlignment.C:57
 MakeTPCResMisAlignment.C:58
 MakeTPCResMisAlignment.C:59
 MakeTPCResMisAlignment.C:60
 MakeTPCResMisAlignment.C:61
 MakeTPCResMisAlignment.C:62
 MakeTPCResMisAlignment.C:63
 MakeTPCResMisAlignment.C:64
 MakeTPCResMisAlignment.C:65
 MakeTPCResMisAlignment.C:66
 MakeTPCResMisAlignment.C:67
 MakeTPCResMisAlignment.C:68
 MakeTPCResMisAlignment.C:69
 MakeTPCResMisAlignment.C:70
 MakeTPCResMisAlignment.C:71
 MakeTPCResMisAlignment.C:72
 MakeTPCResMisAlignment.C:73
 MakeTPCResMisAlignment.C:74
 MakeTPCResMisAlignment.C:75
 MakeTPCResMisAlignment.C:76
 MakeTPCResMisAlignment.C:77
 MakeTPCResMisAlignment.C:78
 MakeTPCResMisAlignment.C:79
 MakeTPCResMisAlignment.C:80
 MakeTPCResMisAlignment.C:81
 MakeTPCResMisAlignment.C:82
 MakeTPCResMisAlignment.C:83
 MakeTPCResMisAlignment.C:84
 MakeTPCResMisAlignment.C:85
 MakeTPCResMisAlignment.C:86
 MakeTPCResMisAlignment.C:87
 MakeTPCResMisAlignment.C:88
 MakeTPCResMisAlignment.C:89