ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// $Id$

/// \ingroup macros
/// \file MakeMUONFullMisAlignment.C
/// \brief Macro for generating the full misalignment data.
///
/// The macro is triggered from AliRoot/macros/MakeAllDETsFullMisAlignment.C
///
/// \author: I. Hrivnacova, IPN Orsay

#if !defined(__CINT__) || defined(__MAKECINT__)

#include "AliMUONGeometryTransformer.h"
#include "AliMUONGeometryMisAligner.h"

#include "AliGeomManager.h"
#include "AliCDBManager.h"
#include "AliCDBStorage.h"
#include "AliCDBEntry.h"
#include "AliCDBId.h"

#include <TSystem.h>
#include <TError.h>
#include <TClonesArray.h>
#include <TString.h>
#include <TFile.h>
#include <Riostream.h>

#endif


void MakeMUONFullMisAlignment()
{
  const char* macroname = "MakeMUONFullMisAlignment.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 = 0;
  
  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
  }    

  AliMUONGeometryTransformer transformer;
  transformer.LoadGeometryData();
  
  AliMUONGeometryMisAligner misAligner(0.0, 0.03, 0.0, 0.03, 0.0, 0.03);
  AliMUONGeometryTransformer* newTransform 
    = misAligner.MisAlign(&transformer, true);
  const TClonesArray* array = newTransform->GetMisAlignmentData();
  
  // 1 mm resolution for chamber full misalignments?
  misAligner.SetAlignmentResolution(array,-1,0.1,0.1);


  if ( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ) {
    // Save in file
    const char* filename = "MUONfullMisalignment.root";
    TFile f(filename,"RECREATE");
    if (!f.IsOpen()) {
      Error(macroname,"cannot open file for output\n");
      return;
    }
    Info(macroname,"Saving alignment objects to the file %s", filename);
    f.cd();
    f.WriteObject(array,"MUONAlignObjs","kSingleKey");
    f.Close();
  }
  else {
    // Save in CDB storage
    AliCDBMetaData* cdbData = new AliCDBMetaData();
    cdbData->SetResponsible("Dimuon Offline project");
    cdbData->SetComment("MUON alignment objects with full misalignment");
    cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
    AliCDBId id("MUON/Align/Data", 0, AliCDBRunRange::Infinity()); 
    storage->Put(const_cast<TClonesArray*>(array), id, cdbData);
  }   
  delete newTransform;
}
 MakeMUONFullMisAlignment.C:1
 MakeMUONFullMisAlignment.C:2
 MakeMUONFullMisAlignment.C:3
 MakeMUONFullMisAlignment.C:4
 MakeMUONFullMisAlignment.C:5
 MakeMUONFullMisAlignment.C:6
 MakeMUONFullMisAlignment.C:7
 MakeMUONFullMisAlignment.C:8
 MakeMUONFullMisAlignment.C:9
 MakeMUONFullMisAlignment.C:10
 MakeMUONFullMisAlignment.C:11
 MakeMUONFullMisAlignment.C:12
 MakeMUONFullMisAlignment.C:13
 MakeMUONFullMisAlignment.C:14
 MakeMUONFullMisAlignment.C:15
 MakeMUONFullMisAlignment.C:16
 MakeMUONFullMisAlignment.C:17
 MakeMUONFullMisAlignment.C:18
 MakeMUONFullMisAlignment.C:19
 MakeMUONFullMisAlignment.C:20
 MakeMUONFullMisAlignment.C:21
 MakeMUONFullMisAlignment.C:22
 MakeMUONFullMisAlignment.C:23
 MakeMUONFullMisAlignment.C:24
 MakeMUONFullMisAlignment.C:25
 MakeMUONFullMisAlignment.C:26
 MakeMUONFullMisAlignment.C:27
 MakeMUONFullMisAlignment.C:28
 MakeMUONFullMisAlignment.C:29
 MakeMUONFullMisAlignment.C:30
 MakeMUONFullMisAlignment.C:31
 MakeMUONFullMisAlignment.C:32
 MakeMUONFullMisAlignment.C:33
 MakeMUONFullMisAlignment.C:34
 MakeMUONFullMisAlignment.C:35
 MakeMUONFullMisAlignment.C:36
 MakeMUONFullMisAlignment.C:37
 MakeMUONFullMisAlignment.C:38
 MakeMUONFullMisAlignment.C:39
 MakeMUONFullMisAlignment.C:40
 MakeMUONFullMisAlignment.C:41
 MakeMUONFullMisAlignment.C:42
 MakeMUONFullMisAlignment.C:43
 MakeMUONFullMisAlignment.C:44
 MakeMUONFullMisAlignment.C:45
 MakeMUONFullMisAlignment.C:46
 MakeMUONFullMisAlignment.C:47
 MakeMUONFullMisAlignment.C:48
 MakeMUONFullMisAlignment.C:49
 MakeMUONFullMisAlignment.C:50
 MakeMUONFullMisAlignment.C:51
 MakeMUONFullMisAlignment.C:52
 MakeMUONFullMisAlignment.C:53
 MakeMUONFullMisAlignment.C:54
 MakeMUONFullMisAlignment.C:55
 MakeMUONFullMisAlignment.C:56
 MakeMUONFullMisAlignment.C:57
 MakeMUONFullMisAlignment.C:58
 MakeMUONFullMisAlignment.C:59
 MakeMUONFullMisAlignment.C:60
 MakeMUONFullMisAlignment.C:61
 MakeMUONFullMisAlignment.C:62
 MakeMUONFullMisAlignment.C:63
 MakeMUONFullMisAlignment.C:64
 MakeMUONFullMisAlignment.C:65
 MakeMUONFullMisAlignment.C:66
 MakeMUONFullMisAlignment.C:67
 MakeMUONFullMisAlignment.C:68
 MakeMUONFullMisAlignment.C:69
 MakeMUONFullMisAlignment.C:70
 MakeMUONFullMisAlignment.C:71
 MakeMUONFullMisAlignment.C:72
 MakeMUONFullMisAlignment.C:73
 MakeMUONFullMisAlignment.C:74
 MakeMUONFullMisAlignment.C:75
 MakeMUONFullMisAlignment.C:76
 MakeMUONFullMisAlignment.C:77
 MakeMUONFullMisAlignment.C:78
 MakeMUONFullMisAlignment.C:79
 MakeMUONFullMisAlignment.C:80
 MakeMUONFullMisAlignment.C:81
 MakeMUONFullMisAlignment.C:82
 MakeMUONFullMisAlignment.C:83
 MakeMUONFullMisAlignment.C:84
 MakeMUONFullMisAlignment.C:85
 MakeMUONFullMisAlignment.C:86
 MakeMUONFullMisAlignment.C:87
 MakeMUONFullMisAlignment.C:88
 MakeMUONFullMisAlignment.C:89
 MakeMUONFullMisAlignment.C:90
 MakeMUONFullMisAlignment.C:91
 MakeMUONFullMisAlignment.C:92
 MakeMUONFullMisAlignment.C:93
 MakeMUONFullMisAlignment.C:94
 MakeMUONFullMisAlignment.C:95
 MakeMUONFullMisAlignment.C:96
 MakeMUONFullMisAlignment.C:97
 MakeMUONFullMisAlignment.C:98
 MakeMUONFullMisAlignment.C:99
 MakeMUONFullMisAlignment.C:100
 MakeMUONFullMisAlignment.C:101
 MakeMUONFullMisAlignment.C:102
 MakeMUONFullMisAlignment.C:103
 MakeMUONFullMisAlignment.C:104
 MakeMUONFullMisAlignment.C:105
 MakeMUONFullMisAlignment.C:106
 MakeMUONFullMisAlignment.C:107
 MakeMUONFullMisAlignment.C:108
 MakeMUONFullMisAlignment.C:109
 MakeMUONFullMisAlignment.C:110
 MakeMUONFullMisAlignment.C:111
 MakeMUONFullMisAlignment.C:112
 MakeMUONFullMisAlignment.C:113
 MakeMUONFullMisAlignment.C:114