ROOT logo
void MakePHOSAlignmentModule2()
{
  // Create misalignment object for PHOS module 2 
  // from the survey measurements on P2 in May 2008.
  // To store alignment in OCDB, define the evnironment variables:
  // TOCDB=kTRUE
  // STORAGE="local://$ALICE_ROOT/OCDB"
  // Author: Timur Pocheptsov, 19.06.2008

  const char * macroName = "MakePHOS2Alignment";
  
  const AliPHOSGeometry *phosGeom = AliPHOSGeometry::GetInstance("IHEP", "IHEP");
  if (!phosGeom) {
    Error(macroName, "Cannot obtain AliPHOSGeometry singleton.\n");
    return;
  }

  //Activate CDB storage and load geometry from CDB
  //I need valid gGeoManager to create local transformations.
  
  //[Part of code, taken from ITS version of MakexxxFullMisalignment
  AliCDBManager * cdb = AliCDBManager::Instance();
  if (!cdb->IsDefaultStorageSet())
    cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  cdb->SetRun(0);

  if (TString(gSystem->Getenv("TOCDB")) == TString("kTRUE")) {
    const TString storageENV(gSystem->Getenv("STORAGE"));
    if (!storageENV.BeginsWith("local://") && !storageENV.BeginsWith("alien://")) {
      Error(macroName, "STORAGE variable set to %s is not valid.\n", storageENV.Data());
      return;
    }
    
    AliCDBStorage * storage = cdb->GetStorage(storageENV.Data());
    if (!storage) {
      Error(macroName, "Unable to open storage %s.\n", storageENV.Data());
      return;
    }
    
    AliCDBPath path("GRP","Geometry","Data");
    AliCDBEntry * entry = storage->Get(path.GetPath(), cdb->GetRun());
    if (!entry) {
      Error(macroName,"Could not get the specified CDB entry!");
      return;  
    }
    
    entry->SetOwner(0);
    AliGeomManager::SetGeometry((TGeoManager*) entry->GetObject());
  }else{
    AliGeomManager::LoadGeometry("geometry.root"); //load geom from default CDB storage
  }    
  //end of code taken from ITS version of MakexxxFullMisalignment]

  AliPHOSEMCAGeometry * emca = phosGeom->GetEMCAGeometry();
  TClonesArray alobj("AliAlignObjParams", 16);// + phosGeom->GetNModules() * emca->GetNStripX() * emca->GetNStripZ());
   
  const Double_t dpsi = 0., dtheta = 0., dphi = 0.;
  const Double_t displacement = 10.;
  Int_t iIndex = 0; //let all modules have index=0 in a layer with no LUT
  const AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
  UShort_t volid = AliGeomManager::LayerToVolUID(iLayer, iIndex);
  Int_t i = 0;

  // Alignment for 5 PHOS modules

  new(alobj[i++]) AliAlignObjParams("PHOS/Module1",
	  volid, 0., 0., 0., 0., 0., 0., kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Module2",
	  volid, 0., 0., 0., 0., 0., 0., kTRUE);

  Double_t rotMatrix[9] = {0.999992695, -0.00295322, -0.0024267, 
			   0.002955489, 0.999995199, 0.00093165, 
			   0.002423942, -0.000938811, 0.99999662};
  TGeoRotation rotation;
  rotation.SetMatrix(rotMatrix);
  Double_t dX=1.25474126, dY=-1.4088643, dZ=-12.856;
  AliAlignObjParams * mod3 = 
    new(alobj[i++]) AliAlignObjParams("PHOS/Module3", volid, dX, dY, dZ, 0., 0., 0., kFALSE);
  mod3->SetRotation(rotation);
  
  new(alobj[i++]) AliAlignObjParams("PHOS/Module4",
	  volid, 0.,  0., 0., 0., 0., 0., kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Module5",
	  volid, 0., 0., 0., 0., 0., 0., kTRUE);

  const Double_t dx = 0., dy = 0., dz = 0. ;
  // Alignment of CPV modules
  new(alobj[i++]) AliAlignObjParams("PHOS/Module1/CPV",
        volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Module2/CPV",
        volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Module3/CPV",
        volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Module4/CPV",
        volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Module5/CPV",
        volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
 
  // Alignment for PHOS cradle
  new(alobj[i++]) AliAlignObjParams("PHOS/Cradle0",
	  volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Cradle1",
	  volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);

  // Alignment for cradle wheels
  new(alobj[i++]) AliAlignObjParams("PHOS/Wheel0",
	  volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Wheel1",
	  volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Wheel2",
	  volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
  new(alobj[i++]) AliAlignObjParams("PHOS/Wheel3",
	  volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);

  // *************************    2nd step    ***************
  if ( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ) {
    // save on file
    const char * fileName = "PHOSfullMisalignment.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(&alobj,"PHOSAlignObjs","kSingleKey");
    f.Close();
  }else{
    // save in CDB storage
    TString storageENV = gSystem->Getenv("STORAGE");
    if(!storageENV.BeginsWith("local://") && !storageENV.BeginsWith("alien://")) {
      Error(macroName,"STORAGE variable set to %s is not valid. Exiting\n", storageENV.Data());
      return;
    }
    
    Info(macroName,"Saving alignment objects in CDB storage %s", storageENV.Data());
    AliCDBManager * cdb = AliCDBManager::Instance();
    AliCDBStorage * storage = cdb->GetStorage(storageENV.Data());
    if (!storage) {
      Error(macroName, "Unable to open storage %s\n", storageENV.Data());
      return;
    }
    
    AliCDBMetaData md;
    md.SetResponsible("Timur Pocheptsov");
    md.SetComment("Alignment objects for PHOS module 2; survey in May 2008");
    md.SetAliRootVersion(gSystem->Getenv("ARVERSION"));
    AliCDBId id("PHOS/Align/Data",0,AliCDBRunRange::Infinity());
    storage->Put(&alobj, id, &md);
  }

  alobj.Delete();
}
 MakePHOSAlignmentModule2.C:1
 MakePHOSAlignmentModule2.C:2
 MakePHOSAlignmentModule2.C:3
 MakePHOSAlignmentModule2.C:4
 MakePHOSAlignmentModule2.C:5
 MakePHOSAlignmentModule2.C:6
 MakePHOSAlignmentModule2.C:7
 MakePHOSAlignmentModule2.C:8
 MakePHOSAlignmentModule2.C:9
 MakePHOSAlignmentModule2.C:10
 MakePHOSAlignmentModule2.C:11
 MakePHOSAlignmentModule2.C:12
 MakePHOSAlignmentModule2.C:13
 MakePHOSAlignmentModule2.C:14
 MakePHOSAlignmentModule2.C:15
 MakePHOSAlignmentModule2.C:16
 MakePHOSAlignmentModule2.C:17
 MakePHOSAlignmentModule2.C:18
 MakePHOSAlignmentModule2.C:19
 MakePHOSAlignmentModule2.C:20
 MakePHOSAlignmentModule2.C:21
 MakePHOSAlignmentModule2.C:22
 MakePHOSAlignmentModule2.C:23
 MakePHOSAlignmentModule2.C:24
 MakePHOSAlignmentModule2.C:25
 MakePHOSAlignmentModule2.C:26
 MakePHOSAlignmentModule2.C:27
 MakePHOSAlignmentModule2.C:28
 MakePHOSAlignmentModule2.C:29
 MakePHOSAlignmentModule2.C:30
 MakePHOSAlignmentModule2.C:31
 MakePHOSAlignmentModule2.C:32
 MakePHOSAlignmentModule2.C:33
 MakePHOSAlignmentModule2.C:34
 MakePHOSAlignmentModule2.C:35
 MakePHOSAlignmentModule2.C:36
 MakePHOSAlignmentModule2.C:37
 MakePHOSAlignmentModule2.C:38
 MakePHOSAlignmentModule2.C:39
 MakePHOSAlignmentModule2.C:40
 MakePHOSAlignmentModule2.C:41
 MakePHOSAlignmentModule2.C:42
 MakePHOSAlignmentModule2.C:43
 MakePHOSAlignmentModule2.C:44
 MakePHOSAlignmentModule2.C:45
 MakePHOSAlignmentModule2.C:46
 MakePHOSAlignmentModule2.C:47
 MakePHOSAlignmentModule2.C:48
 MakePHOSAlignmentModule2.C:49
 MakePHOSAlignmentModule2.C:50
 MakePHOSAlignmentModule2.C:51
 MakePHOSAlignmentModule2.C:52
 MakePHOSAlignmentModule2.C:53
 MakePHOSAlignmentModule2.C:54
 MakePHOSAlignmentModule2.C:55
 MakePHOSAlignmentModule2.C:56
 MakePHOSAlignmentModule2.C:57
 MakePHOSAlignmentModule2.C:58
 MakePHOSAlignmentModule2.C:59
 MakePHOSAlignmentModule2.C:60
 MakePHOSAlignmentModule2.C:61
 MakePHOSAlignmentModule2.C:62
 MakePHOSAlignmentModule2.C:63
 MakePHOSAlignmentModule2.C:64
 MakePHOSAlignmentModule2.C:65
 MakePHOSAlignmentModule2.C:66
 MakePHOSAlignmentModule2.C:67
 MakePHOSAlignmentModule2.C:68
 MakePHOSAlignmentModule2.C:69
 MakePHOSAlignmentModule2.C:70
 MakePHOSAlignmentModule2.C:71
 MakePHOSAlignmentModule2.C:72
 MakePHOSAlignmentModule2.C:73
 MakePHOSAlignmentModule2.C:74
 MakePHOSAlignmentModule2.C:75
 MakePHOSAlignmentModule2.C:76
 MakePHOSAlignmentModule2.C:77
 MakePHOSAlignmentModule2.C:78
 MakePHOSAlignmentModule2.C:79
 MakePHOSAlignmentModule2.C:80
 MakePHOSAlignmentModule2.C:81
 MakePHOSAlignmentModule2.C:82
 MakePHOSAlignmentModule2.C:83
 MakePHOSAlignmentModule2.C:84
 MakePHOSAlignmentModule2.C:85
 MakePHOSAlignmentModule2.C:86
 MakePHOSAlignmentModule2.C:87
 MakePHOSAlignmentModule2.C:88
 MakePHOSAlignmentModule2.C:89
 MakePHOSAlignmentModule2.C:90
 MakePHOSAlignmentModule2.C:91
 MakePHOSAlignmentModule2.C:92
 MakePHOSAlignmentModule2.C:93
 MakePHOSAlignmentModule2.C:94
 MakePHOSAlignmentModule2.C:95
 MakePHOSAlignmentModule2.C:96
 MakePHOSAlignmentModule2.C:97
 MakePHOSAlignmentModule2.C:98
 MakePHOSAlignmentModule2.C:99
 MakePHOSAlignmentModule2.C:100
 MakePHOSAlignmentModule2.C:101
 MakePHOSAlignmentModule2.C:102
 MakePHOSAlignmentModule2.C:103
 MakePHOSAlignmentModule2.C:104
 MakePHOSAlignmentModule2.C:105
 MakePHOSAlignmentModule2.C:106
 MakePHOSAlignmentModule2.C:107
 MakePHOSAlignmentModule2.C:108
 MakePHOSAlignmentModule2.C:109
 MakePHOSAlignmentModule2.C:110
 MakePHOSAlignmentModule2.C:111
 MakePHOSAlignmentModule2.C:112
 MakePHOSAlignmentModule2.C:113
 MakePHOSAlignmentModule2.C:114
 MakePHOSAlignmentModule2.C:115
 MakePHOSAlignmentModule2.C:116
 MakePHOSAlignmentModule2.C:117
 MakePHOSAlignmentModule2.C:118
 MakePHOSAlignmentModule2.C:119
 MakePHOSAlignmentModule2.C:120
 MakePHOSAlignmentModule2.C:121
 MakePHOSAlignmentModule2.C:122
 MakePHOSAlignmentModule2.C:123
 MakePHOSAlignmentModule2.C:124
 MakePHOSAlignmentModule2.C:125
 MakePHOSAlignmentModule2.C:126
 MakePHOSAlignmentModule2.C:127
 MakePHOSAlignmentModule2.C:128
 MakePHOSAlignmentModule2.C:129
 MakePHOSAlignmentModule2.C:130
 MakePHOSAlignmentModule2.C:131
 MakePHOSAlignmentModule2.C:132
 MakePHOSAlignmentModule2.C:133
 MakePHOSAlignmentModule2.C:134
 MakePHOSAlignmentModule2.C:135
 MakePHOSAlignmentModule2.C:136
 MakePHOSAlignmentModule2.C:137
 MakePHOSAlignmentModule2.C:138
 MakePHOSAlignmentModule2.C:139
 MakePHOSAlignmentModule2.C:140
 MakePHOSAlignmentModule2.C:141
 MakePHOSAlignmentModule2.C:142
 MakePHOSAlignmentModule2.C:143
 MakePHOSAlignmentModule2.C:144
 MakePHOSAlignmentModule2.C:145
 MakePHOSAlignmentModule2.C:146
 MakePHOSAlignmentModule2.C:147
 MakePHOSAlignmentModule2.C:148
 MakePHOSAlignmentModule2.C:149
 MakePHOSAlignmentModule2.C:150
 MakePHOSAlignmentModule2.C:151
 MakePHOSAlignmentModule2.C:152
 MakePHOSAlignmentModule2.C:153
 MakePHOSAlignmentModule2.C:154
 MakePHOSAlignmentModule2.C:155