ROOT logo
void MakeTRDResMisAlignment(){
  // Create TClonesArray of residual misalignment objects for TRD
  //
  const char* macroname = "MakeTRDResMisAlignment.C";
  TClonesArray *array = new TClonesArray("AliAlignObjParams",1000);
  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
  }    

  // sigmas for the chambers
  Double_t chdx    = 0.002; // 20 microns
  Double_t chdy    = 0.003; // 30 microns
  Double_t chdz    = 0.007; // 70 microns
  Double_t chrx    = 0.0005 / 1000.0 / TMath::Pi()*180; // 0 mrad
  Double_t chry    = 0.0005 / 1000.0 / TMath::Pi()*180; // 0 mrad
  Double_t chrz    = 0.1    / 1000.0 / TMath::Pi()*180; // 0.1 mrad
  // Truncation for the chambers
  Double_t cutChdx = 3.0  * chdx;
  Double_t cutChdy = 3.0  * chdy;
  Double_t cutChdz = 0.14 * chdz;

  Int_t sActive[18]={1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1};
  Double_t dx=0.,dy=0.,dz=0.,rx=0.,ry=0.,rz=0.;

  Int_t j=0;
  UShort_t volid;
  const char* symname; 

  // create the supermodules' alignment objects
  for (Int_t iSect=0; iSect<18; iSect++) {
    TString sm_symname(Form("TRD/sm%02d",iSect));
    if( (TString(gSystem->Getenv("REALSETUP")) == TString("kTRUE")) && !sActive[iSect] ) continue;
    new((*array)[j++])
      AliAlignObjParams(sm_symname.Data(),0,dx,dy,dz,rx,ry,rz,kTRUE);
  }
 
  // create the chambers' alignment objects
  Int_t chId;
  for (Int_t iLayer = AliGeomManager::kTRD1; iLayer <= AliGeomManager::kTRD6; iLayer++) {
    chId=-1;
    for (Int_t iSect = 0; iSect < 18; iSect++){
      for (Int_t iCh = 0; iCh < 5; iCh++) {
        dx = AliMathBase::TruncatedGaus(0.0,chdx,cutChdx); 
        dy = AliMathBase::TruncatedGaus(0.0,chdy,cutChdy); 
        dz = AliMathBase::TruncatedGaus(0.0,chdz,cutChdz); 
        rx = gRandom->Rndm() * 2.0*chrx - chrx;
        ry = gRandom->Rndm() * 2.0*chry - chry;
        rz = gRandom->Rndm() * 2.0*chrz - chrz;
        chId++;
        if ((iSect==13 || iSect==14 || iSect==15) && iCh==2) continue;
        volid = AliGeomManager::LayerToVolUID(iLayer,chId);
        if( (TString(gSystem->Getenv("REALSETUP")) == TString("kTRUE")) && !sActive[iSect] ) continue;
        symname = AliGeomManager::SymName(volid);
        new(alobj[j++]) AliAlignObjParams(symname,volid,dx,dy,dz,rx,ry,rz,kFALSE);
      }
    }
  }

  if ( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ) {
    // save on file
    const char* filename = "TRDresidualMisalignment.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,"TRDAlignObjs","kSingleKey");
    f.Close();
  }
  else {
    // save in CDB storage
    AliCDBMetaData* md = new AliCDBMetaData();
    md->SetResponsible("Dariusz Miskowiec");
    md->SetComment("Residual misalignment for TRD");
    md->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
    AliCDBId id("TRD/Align/Data",0,AliCDBRunRange::Infinity());
    storage->Put(array,id,md);
  }

  array->Delete();

}


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