ROOT logo
void MakePHOSFullMisAlignment()
{
  // Create misalignment object for PHOS module 2,3,3
  // from the survey measurements on P2 in August 2009.
  // To store alignment in OCDB, define the evnironment variables:
  // TOCDB=kTRUE
  // STORAGE="local://$ALICE_ROOT/OCDB"
  // Author: Timur Pocheptsov, 19.06.2008
  // Modified: Yuri Kharlov, 11.03.2010

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

  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

  TString surveyFileName;
  
  const Char_t * szEnv = gSystem->Getenv("ALICE_ROOT");
  if (szEnv && szEnv[0]) {
    surveyFileName += szEnv;
    if (surveyFileName[surveyFileName.Length() - 1] != '/')
      surveyFileName += '/';
  } else {
    Warning(macroName, "cannot find ALICE_ROOT environment variable\n"
		       "probably, I wan't be able to find survey file");
  }
    
  surveyFileName += "PHOS/data/Survey_1053236_PHOS.txt";

  AliSurveyObj survey;
  survey.FillFromLocalFile(surveyFileName.Data());
  TGeoHMatrix module3Delta, module2Delta, module1Delta;
  AliPHOSModuleMisalignment delta(*phosGeom);

  delta.DeltaTransformation(0, survey.GetData(), "410000", "410027", "424000", 
        		    &module1Delta);
  new(alobj[i++]) AliAlignObjParams("PHOS/Module1", volid, module1Delta, kTRUE);

  delta.DeltaTransformation(1, survey.GetData(), "310000", "310027", "324000", 
        		    &module2Delta);
  new(alobj[i++]) AliAlignObjParams("PHOS/Module2", volid, module2Delta, kTRUE);

  delta.DeltaTransformation(2, survey.GetData(), "210000", "210027", "224000", 
        		    &module3Delta);
  new(alobj[i++]) AliAlignObjParams("PHOS/Module3", volid, module3Delta, kTRUE);

  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("Yuri Kharlov");
    md.SetComment("Alignment objects for PHOS modules 2,3,4; survey in August 2009");
    md.SetAliRootVersion(gSystem->Getenv("ARVERSION"));
    AliCDBId id("PHOS/Align/Data",0,AliCDBRunRange::Infinity());
    storage->Put(&alobj, id, &md);
  }

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