X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FMakePHOSFullMisAlignment.C;h=00f2d7e5e9977772af83ff5964b5ba205c331989;hb=e3ed0600776caaa7ea59784fbbb3a56a1d4aaaaa;hp=723b417682eb368889296e30a61deb7a7196d895;hpb=7e154d52537ff5be2593b968e21305a1ef560c88;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/MakePHOSFullMisAlignment.C b/PHOS/MakePHOSFullMisAlignment.C index 723b417682e..00f2d7e5e99 100644 --- a/PHOS/MakePHOSFullMisAlignment.C +++ b/PHOS/MakePHOSFullMisAlignment.C @@ -1,69 +1,135 @@ -void MakePHOSFullMisAlignment(){ - // Create TClonesArray of full misalignment objects for PHOS - // - TClonesArray *array = new TClonesArray("AliAlignObjAngles",11); - TClonesArray &alobj = *array; - - AliAlignObjAngles a; +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 - Double_t dpsi=0., dtheta=0., dphi=0.; - Double_t displacement = 10; - - Int_t iIndex=0; //let all modules have index=0 in a layer with no LUT - AliAlignObj::ELayerID iLayer = AliAlignObj::kInvalidLayer; - UShort_t volid = AliAlignObj::LayerToVolUID(iLayer,iIndex); + 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 - new(alobj[0]) AliAlignObjAngles("PHOS/Module1", - volid, -20., -10., 0., dpsi, dtheta, 5, kTRUE); - new(alobj[1]) AliAlignObjAngles("PHOS/Module2", - volid, -10., 0., -10., dpsi, dtheta, 2, kTRUE); - new(alobj[2]) AliAlignObjAngles("PHOS/Module3", - volid, 5., -10., 10., dpsi, dtheta, 0, kTRUE); - new(alobj[3]) AliAlignObjAngles("PHOS/Module4", - volid, +10., -0., -10., dpsi, dtheta, 2, kTRUE); - new(alobj[4]) AliAlignObjAngles("PHOS/Module5", - volid, +20., -10., 0., dpsi, dtheta, 5, kTRUE); + 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[5]) AliAlignObjAngles("PHOS/Cradle0", + new(alobj[i++]) AliAlignObjParams("PHOS/Cradle0", volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE); - new(alobj[6]) AliAlignObjAngles("PHOS/Cradle1", + new(alobj[i++]) AliAlignObjParams("PHOS/Cradle1", volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE); // Alignment for cradle wheels - new(alobj[7]) AliAlignObjAngles("PHOS/Wheel0", + new(alobj[i++]) AliAlignObjParams("PHOS/Wheel0", volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE); - new(alobj[8]) AliAlignObjAngles("PHOS/Wheel1", + new(alobj[i++]) AliAlignObjParams("PHOS/Wheel1", volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE); - new(alobj[9]) AliAlignObjAngles("PHOS/Wheel2", + new(alobj[i++]) AliAlignObjParams("PHOS/Wheel2", volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE); - new(alobj[10]) AliAlignObjAngles("PHOS/Wheel3", + new(alobj[i++]) AliAlignObjParams("PHOS/Wheel3", volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE); // ************************* 2nd step *************** - - if(!gSystem->Getenv("$TOCDB")){ + if ( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ) { // save on file - TFile f("PHOSfullMisalignment.root","RECREATE"); - if(!f) cerr<<"cannot open file for output\n"; + 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(array,"PHOSFullObjs ","kSingleKey"); + f.WriteObject(&alobj,"PHOSAlignObjs","kSingleKey"); f.Close(); }else{ // save in CDB storage - const char* Storage = gSystem->Getenv("$STORAGE"); - AliCDBManager *CDB = AliCDBManager::Instance(); - AliCDBStorage* storage = CDB->GetStorage(Storage); - AliCDBMetaData *md= new AliCDBMetaData(); - md->SetResponsible("Yuri Kharlov"); - md->SetComment("Alignment objects for fully misaligned geometry"); - md->SetAliRootVersion(gSystem->Getenv("$ARVERSION")); - AliCDBId id("PHOS/Align/Data",0,9999999); - storage->Put(array,id, md); + 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); } - array->Delete(); - + alobj.Delete(); }