ROOT logo
void MakeForwardMisAlignment(Int_t inputRun){
  // Creates misalignment of the beam pipe, frame and
  // FMD2&3.
  // The misalignment is based on the ITS global alignment
  // object with the exception of the beam pipe where
  // only the translations are used ignoring the rotation
  // matrix.
  const char* macroname = "MakeForwardMisAlignment.C";

  AliCDBManager* cdb = AliCDBManager::Instance();
  cdb->SetDefaultStorage("raw://");
  cdb->SetRun(inputRun);
  AliCDBEntry *inputEntry = cdb->Get("ITS/Align/Data");
  TClonesArray *inputArray = (TClonesArray*)inputEntry->GetObject();
  AliAlignObjParams *itsAlign = (AliAlignObjParams*)inputArray->At(0);
  itsAlign->Print();
  printf("\n\n\n");
  Double_t inputTrans[3];
  itsAlign->GetTranslation(inputTrans);
  Double_t inputAngles[3];
  itsAlign->GetAngles(inputAngles);

  TClonesArray *array = new TClonesArray("AliAlignObjParams",20);

  Int_t iIndex=0; //let all modules have index=0 in a layer with no LUT
  AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
  UShort_t dvoluid = AliGeomManager::LayerToVolUID(iLayer,iIndex); //dummy vol id

  const char* baseSymName ="FRAME/Sector"; //base of symbolic name corresponding to base of path "ALIC_1/B077_1/BSEGMO";
  TString symname;

  for(Int_t sm=0; sm<18; sm++){
    symname = baseSymName;
    symname += sm;
    cout<<symname.Data()<<endl;
    new((*array)[sm]) AliAlignObjParams(symname.Data(),dvoluid,0.,0.,0.,0.,0.,0.,kTRUE);
  }

  new((*array)[18]) AliAlignObjParams("CP1",dvoluid,inputTrans[0],inputTrans[1],0.,0.,0.,0.,kTRUE);
  array->At(18)->Print();
  new((*array)[19]) AliAlignObjParams("CP3",dvoluid,inputTrans[0],inputTrans[1],0.,0.,0.,0.,kTRUE);
  array->At(19)->Print();
  printf("\n\n\n");

  // FMD
  TClonesArray *arrayFMD = new TClonesArray("AliAlignObjParams",4);
  new((*arrayFMD)[0]) AliAlignObjParams("FMD/FMD2_T",0,inputTrans[0],inputTrans[1],inputTrans[2],inputAngles[0],inputAngles[1],inputAngles[2],kTRUE);
  new((*arrayFMD)[1]) AliAlignObjParams("FMD/FMD2_B",0,inputTrans[0],inputTrans[1],inputTrans[2],inputAngles[0],inputAngles[1],inputAngles[2],kTRUE);
  new((*arrayFMD)[2]) AliAlignObjParams("FMD/FMD3_T",0,inputTrans[0],inputTrans[1],inputTrans[2],inputAngles[0],inputAngles[1],inputAngles[2],kTRUE);
  new((*arrayFMD)[3]) AliAlignObjParams("FMD/FMD3_B",0,inputTrans[0],inputTrans[1],inputTrans[2],inputAngles[0],inputAngles[1],inputAngles[2],kTRUE);
  arrayFMD->Print();
  printf("\n\n\n");

  if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){
    // save on file
    const char* filename = "ForwardMisalignment.root";
    TFile f(filename,"RECREATE");
    if(!f){
      Error(macroname,"cannot open file for output\n");
      return;
    }
    Info(macroname,"Saving alignment objects in %s", filename);
    f.cd();
    f.WriteObject(array,"STRUCTAlignObjs","kSingleKey");
    f.WriteObject(arrayFMD,"FMDAlignObjs","kSingleKey");
    f.Close();
  }else{
    // save in CDB storage
    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;
    }
    Info(macroname,"Saving alignment objects in CDB storage %s",Storage.Data());
    AliCDBStorage* storage = cdb->GetStorage(Storage.Data());
    if(!storage){
      Error(macroname,"Unable to open storage %s\n",Storage.Data());
      return;
    }
    AliCDBMetaData* md = new AliCDBMetaData();
    md->SetResponsible("Grosso Raffaele");
    md->SetComment("Misalignment for FRAME and beam pipe");
    md->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
    AliCDBId id("GRP/Align/Data",0,AliCDBRunRange::Infinity());
    storage->Put(array,id,md);
    AliCDBMetaData* mdFMD = new AliCDBMetaData();
    mdFMD->SetResponsible("FMD Experts");
    mdFMD->SetComment("Misalignment for FMD using ITS object");
    md->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
    AliCDBId idFMD("FMD/Align/Data",0,AliCDBRunRange::Infinity());
    storage->Put(arrayFMD,idFMD,mdFMD);
  }

  array->Delete();

}

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