ROOT logo
void MakeEMCALResMisAlignment(TString geoname = "EMCAL_COMPLETE12SMV1_DCAL_8SM"){
  // Create TClonesArray of residual misalignment objects for EMCAL
  //
  const char* macroname = "MakeEMCALResMisAlignment.C";
  if(geoname=="")geoname=AliEMCALGeometry::GetDefaultGeometryName();
  const AliEMCALGeometry *emcalGeom = AliEMCALGeometry::GetInstance(geoname,"");
  if(!emcalGeom) {
    Error("MakeEMCALResMisAlignment","Cannot obtain AliEMCALGeometry singleton\n");
    return;
  }

  TClonesArray *array = new TClonesArray("AliAlignObjParams",emcalGeom->GetNumberOfSuperModules());
  TClonesArray &alobj = *array;


  // 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
  }    

  Double_t dx, dy, dz, dpsi, dtheta, dphi;

  const TString fbasepath = "EMCAL/FullSupermodule";
  const TString hbasepath = "EMCAL/HalfSupermodule";
  const TString tbasepath = "EMCAL/OneThrdSupermodule";
  const TString dbasepath = "EMCAL/DCALSupermodule";
  const TString debasepath= "EMCAL/DCALExtensionSM";
  TString pathstr;

  Int_t iIndex=0; // let all modules have index=0 in a layer with no LUT
  AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
  UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iIndex);

  Int_t i;

  // RS = local
  // sigma translation = 1mm
  // sigma rotation = 0.1 degree
  TRandom *rnd   = new TRandom(4321);
  Double_t sigmatr = 0.05; // max shift in cm w.r.t. local RS
  Double_t sigmarot = 0.1; // max rot in degrees w.r.t. local RS

  Int_t nSM = emcalGeom->GetEMCGeometry()->GetNumberOfSuperModules();
  for(i=0; i<nSM; i++){
    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);
    if(     emcalGeom->GetSMType(i) == kEMCAL_Standard) pathstr=fbasepath;
    else if(emcalGeom->GetSMType(i) == kEMCAL_Half    ) pathstr=hbasepath;
    else if(emcalGeom->GetSMType(i) == kEMCAL_3rd     ) pathstr=tbasepath;
    else if(emcalGeom->GetSMType(i) == kDCAL_Standard ) pathstr=dbasepath;
    else if(emcalGeom->GetSMType(i) == kDCAL_Ext      ) pathstr=debasepath;
    pathstr+=(i+1);
    new(alobj[i]) AliAlignObjParams(pathstr, volid, dx, dy, dz, dpsi, dtheta, dphi, kFALSE);
  }

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

  array->Delete();

}

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