X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=FMD%2FAliFMDAlignFaker.cxx;h=d15cc8b8a241ae410011905fd4612bfeab93a549;hb=dc53177831f810466b56bd40b3d862fdc9ef1d3c;hp=d566c060db5398b281990d4ca906da4502b2bdf2;hpb=6e79feeb3bab54dddf93205f1cad401e3d3553b2;p=u%2Fmrichter%2FAliRoot.git diff --git a/FMD/AliFMDAlignFaker.cxx b/FMD/AliFMDAlignFaker.cxx index d566c060db5..d15cc8b8a24 100644 --- a/FMD/AliFMDAlignFaker.cxx +++ b/FMD/AliFMDAlignFaker.cxx @@ -38,15 +38,15 @@ // storage `local://cdb' which is a directory in the current // directory. // -#include "AliLog.h" // ALILOG_H +#include "AliFMDDebug.h" // ALIFMDDEBUG_H ALILOG_H #include "AliFMDAlignFaker.h" // ALIFMDALIGNFAKER_H #include // ALICDBMANAGER_H #include // ALICDBSTORAGE_H #include // ALICDBMANAGER_H // #include -#include +#include // #include -// #include +#include // #include #include #include @@ -55,7 +55,8 @@ #include #include // #include -// #include +#include +#include //==================================================================== ClassImp(AliFMDAlignFaker) @@ -77,11 +78,17 @@ AliFMDAlignFaker::AliFMDAlignFaker(Int_t mask, const char* geo, fHalfRotMin(0,0,0), fHalfRotMax(0,0,0), fRunMin(0), - fRunMax(9999999), + fRunMax(AliCDBRunRange::Infinity()), fArray(0), fComment("") { // Default constructor + if (!loc) { + AliCDBStorage* storage = AliCDBManager::Instance()->GetDefaultStorage(); + if (!storage) AliFatal("Default Storage not set"); + const TString& uri = storage->GetURI(); + fTitle = uri; + } SetSensorDisplacement(); SetSensorRotation(); SetHalfDisplacement(); @@ -135,6 +142,42 @@ AliFMDAlignFaker::SetHalfRotation(Double_t x1, Double_t y1, Double_t z1, #define IS_NODE_SENSOR(name) \ (name[0] == 'F' && name[2] == 'S' && name[3] == 'E') +//__________________________________________________________________ +Bool_t +AliFMDAlignFaker::GetGeometry(Bool_t toCdb, const TString& storage) +{ + if (!toCdb) { + //load geom from default CDB storage + AliGeomManager::LoadGeometry(); + return kTRUE; + } + if(!storage.BeginsWith("local://") && + !storage.BeginsWith("alien://")) { + AliErrorClass(Form("STORAGE=\"%s\" invalid. Exiting\n", storage.Data())); + return kFALSE; + } + + AliCDBManager* cdb = AliCDBManager::Instance(); + AliCDBStorage* store = cdb->GetStorage(storage.Data()); + if(!store){ + AliErrorClass(Form("Unable to open storage %s\n", storage.Data())); + return kFALSE; + } + + AliCDBPath path("GRP","Geometry","Data"); + AliCDBEntry* entry = store->Get(path.GetPath(),cdb->GetRun()); + if(!entry) { + AliErrorClass("Could not get the specified CDB entry!"); + return kFALSE; + } + + + entry->SetOwner(0); + TGeoManager* geom = static_cast(entry->GetObject()); + AliGeomManager::SetGeometry(geom); + return kTRUE; +} + //__________________________________________________________________ void AliFMDAlignFaker::Exec(Option_t*) @@ -155,20 +198,54 @@ AliFMDAlignFaker::Exec(Option_t*) return; } // Make container of transforms - if (!fArray) fArray = new TClonesArray("AliAlignObjAngles"); + if (!fArray) fArray = new TClonesArray("AliAlignObjParams"); fArray->Clear(); // Make an iterator TGeoIterator next(topVolume); + next.SetTopName(Form("/%s_1", topVolume->GetName())); TGeoNode* node = 0; - + + Char_t currentDet = '\0'; + Char_t currentHalf = '\0'; // Loop over all entries in geometry to find our nodes. while ((node = static_cast(next()))) { const char* name = node->GetName(); if (!(IS_NODE_HALF(name) && TESTBIT(fMask, kHalves)) && !(IS_NODE_SENSOR(name) && TESTBIT(fMask, kSensors))) continue; - + + TString path, alignName; + next.GetPath(path); + Int_t id = node->GetVolume()->GetNumber(); + if (IS_NODE_HALF(name)) { + currentDet = name[1]; + currentHalf = name[3]; + alignName = Form("FMD/FMD%c_%c", currentDet, currentHalf); + } + if (IS_NODE_SENSOR(name)) { + Char_t ring = name[1]; + Int_t lvl = next.GetLevel(); + TGeoNode* parent = next.GetNode(lvl-1); + Int_t copy = parent->GetNumber(); + alignName = Form("FMD/FMD%c_%c/FMD%c_%02d", + currentDet, currentHalf, ring, copy); + } + if (alignName.IsNull()) continue; + if (!gGeoManager->GetAlignableEntry(alignName.Data())) { + AliWarning(Form("No alignable entry for %s, using path %s", + alignName.Data(), path.Data())); + alignName = path; + } + AliFMDDebug(1, ("Making alignment for %s -> %s (%d)", + alignName.Data(), path.Data(), id)); + if (IS_NODE_HALF(name)) MakeAlignHalf(alignName, id); + if (IS_NODE_SENSOR(name)) MakeAlignSensor(alignName, id); +#if 0 + if (!(IS_NODE_HALF(name) && TESTBIT(fMask, kHalves)) && + !(IS_NODE_SENSOR(name) && TESTBIT(fMask, kSensors))) + continue; + // Get the path TString path(Form("/%s", gGeoManager->GetNode(0)->GetName())); Int_t nLevel = next.GetLevel(); @@ -185,6 +262,7 @@ AliFMDAlignFaker::Exec(Option_t*) Int_t id = node->GetVolume()->GetNumber(); if (IS_NODE_HALF(name)) MakeAlignHalf(path, id); if (IS_NODE_SENSOR(name)) MakeAlignSensor(path, id); +#endif } TString t(GetTitle()); @@ -210,12 +288,13 @@ AliFMDAlignFaker::MakeAlign(const TString& path, Int_t id, // rotX Rotation about X-axis // rotY Rotation about Y-axis // rotZ Rotation about Z-axis - AliDebug(1, Form("Make alignment for %s (volume %d): (%f,%f,%f) (%f,%f,%f)", + AliFMDDebug(3, ("Make alignment for %s (volume %d): (%f,%f,%f) (%f,%f,%f)", path.Data(), id, transX, transY, transZ, rotX, rotY, rotZ)); Int_t nAlign = fArray->GetEntries(); id = 0; - AliAlignObjAngles* obj = - new ((*fArray)[nAlign]) AliAlignObjAngles(path.Data(), id,0,0,0,0,0,0,kTRUE); + AliAlignObjParams* obj = + new ((*fArray)[nAlign]) AliAlignObjParams(path.Data(), + id,0,0,0,0,0,0,kTRUE); if (!obj) { AliError(Form("Failed to create alignment object for %s", path.Data())); return kFALSE; @@ -232,7 +311,7 @@ Bool_t AliFMDAlignFaker::MakeAlignHalf(const TString& path, Int_t id) { // Make alignment of a half ring/cone - AliDebug(15, Form("Make alignment for half-ring/cone %s", path.Data())); + AliFMDDebug(15, ("Make alignment for half-ring/cone %s", path.Data())); Double_t transX = gRandom->Uniform(fHalfTransMin.X(), fHalfTransMax.X()); Double_t transY = gRandom->Uniform(fHalfTransMin.Y(), fHalfTransMax.Y()); Double_t transZ = gRandom->Uniform(fHalfTransMin.Z(), fHalfTransMax.Z()); @@ -248,7 +327,7 @@ Bool_t AliFMDAlignFaker::MakeAlignSensor(const TString& path, Int_t id) { // Make alignment of a sensor - AliDebug(15, Form("Make alignment for sensor %s", path.Data())); + AliFMDDebug(15, ("Make alignment for sensor %s", path.Data())); Double_t transX = gRandom->Uniform(fSensorTransMin.X(), fSensorTransMax.X()); Double_t transY = gRandom->Uniform(fSensorTransMin.Y(), fSensorTransMax.Y()); Double_t transZ = gRandom->Uniform(fSensorTransMin.Z(), fSensorTransMax.Z()); @@ -263,8 +342,9 @@ void AliFMDAlignFaker::WriteToCDB() { // Make the objects. + const char* loc = GetTitle(); AliCDBManager* cdb = AliCDBManager::Instance(); - AliCDBStorage* storage = cdb->GetStorage(GetTitle()); + AliCDBStorage* storage = cdb->GetStorage(!loc ? "" : loc); AliCDBMetaData* meta = new AliCDBMetaData; meta->SetResponsible(gSystem->GetUserInfo()->fRealName.Data()); meta->SetAliRootVersion(gROOT->GetVersion()); @@ -286,7 +366,7 @@ AliFMDAlignFaker::WriteToFile() return; } file->cd(); - fArray->Write("FMDAlignment"); + fArray->Write("FMDAlignment",TObject::kSingleKey); file->Write(); file->Close(); }