ROOT logo
#include "ARVersion.h"

void MakeAllDETsResMisAlignment(Char_t* CDBstorage = "local://$HOME/ResidualMisAlignment", Bool_t partialGeom=kFALSE){
  // Make residual misalignment objects for all detectors
  // Pass different "CDBstorage" argument if needed (e.g. to fill
  // conditions' data base on alien) or set it to null string to have
  // the objects saved locally on file 
  // This macro defines the default name and place for the detector-macros
  // in charge of producing the residual misalignment objects as 
  // $ALICE_ROOT/DET/MakeDETResidualMisAlignment.C
  //
  const char* macroname="MakeAllDETsResMisAlignment.C";

  TString strStorage(CDBstorage);
  if(strStorage.IsNull()){
    gSystem->Setenv("TOCDB","kFALSE");
  }else{  
    gSystem->Setenv("TOCDB","kTRUE");
    gSystem->Setenv("STORAGE",strStorage.Data());
    gSystem->Setenv("ARVERSION",ALIROOT_BRANCH);
  }
  if(partialGeom){
    gSystem->Setenv("REALSETUP","kTRUE");
  }else{
    gSystem->Setenv("REALSETUP","kFALSE");
  }

  // Load geometry from CDB updating it if we are producing the
  // alignment objects for the CDB
  AliCDBManager* cdb = AliCDBManager::Instance();
  if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  cdb->SetRun(0);
  
  if(strStorage.IsNull()){ //if we produce the objects into a file
    AliGeomManager::LoadGeometry(); //load geom from default CDB storage
  }else{ // if we produce the objects in a CDB storage
    // update geometry in it
    Info(macroname,"Updating geometry in CDB storage %s",strStorage.Data());
    gROOT->ProcessLine(".L $ALICE_ROOT/GRP/UpdateCDBIdealGeom.C");
    if(partialGeom){
      UpdateCDBIdealGeom(strStorage.Data(),"$ALICE_ROOT/macros/Config_PDC06.C");
    }else{
      UpdateCDBIdealGeom(strStorage.Data(),"$ALICE_ROOT/macros/Config.C");
    }
    // load the same geometry from given CDB storage
    AliCDBPath path("GRP","Geometry","Data");
    AliCDBStorage* storage = cdb->GetStorage(strStorage.Data());
    AliCDBEntry *entry = storage->Get(path.GetPath(),cdb->GetRun());
    if(!entry) Fatal(macroname,"Couldn't load geometry data from CDB!");
    entry->SetOwner(0);
    TGeoManager* geom = (TGeoManager*) entry->GetObject();
    if (!geom) Fatal(macroname,"Couldn't find TGeoManager in the specified CDB entry!");
    AliGeomManager::SetGeometry(geom);
  }
  
  // run macro for non-sensitive modules
  // (presently generates only FRAME alignment objects)
  gSystem->Exec("aliroot -b -q $ALICE_ROOT/GRP/MakeSTRUCTResMisAlignment.C");

  // run macros for sensitive modules
  TString sModules="ACORDE,EMCAL,FMD,HMPID,ITS,MUON,PMD,PHOS,T0,TRD,TPC,TOF,VZERO,ZDC";
  TObjArray *detArray = sModules.Tokenize(',');
  TIter iter(detArray);
  TObjString *ostr;
  TString exec_det_macro;

  while((ostr = (TObjString*) iter.Next())){
    TString str(ostr->String());
    exec_det_macro="aliroot -b -q $ALICE_ROOT/";
    exec_det_macro+=str;
    exec_det_macro+="/Make";
    exec_det_macro+=str;
    exec_det_macro+="ResMisAlignment.C";
    
    gSystem->Exec(exec_det_macro.Data());
  }

  return;
}

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