Developing #130

Работа с локальными магнитными полями

Added by Vitaliy Schetinin over 6 years ago. Updated almost 6 years ago.

Status:ЗакрытаStart date:01/25/2018
Priority:ВысокийDue date:
Assignee:Mikhail Kozlov% Done:

100%

Category:Base
Target version:v-1.0

Description

Я посмотрел то, как реализовано создание магнитных полей в CbmRoot и FairRoot. Там магнитное поле в итоге посылается в TVirtualMC->SetMagField(); и потом используется в G4VMC в TGeant4 из TG4GeoManager->ConstructGlobalMagField();. то есть карта поля всегда в глобальной ск.

Так как у нас магнит совсем не в нуле, а сдвинут и повернут, хочется иметь возможность привязывать магнитное поле к локальной СК магнита.
У рут объемов есть такой метод: TGeoVolume::SetField(TObject*) и поля заданные в объемах геометрии потом собираются в TG4GeometryManager::ConstructLocalMagFields().

Я вижу два подхода:
1) Сделать в нашем ERRunSim интерфейс типа: run->SetField(fieldMap,volName);.Эту функциональность можно будет потом отправить в FairRoot.
2) Хранить магнитное поле вместе с геометрией магнита в root файле. В макросе создания геометрии будет вызван TGeoVolume::SetField(TObject*) для нужного объема, там же будет чтение карты поля нашими классами.

У второго подхода сразу вижу недостаток. При импорте из gdml нужно будет немного править скрипт имени Егора на подсовывание в момент конвертации магнитного поля.

Необходимо: реализовать возможнось использования локальных магнитных полей в er

History

#1 Updated by Vitaliy Schetinin over 6 years ago

Из письма от Радека:

We usually have “static” magnets, that are not moved… From what I know, there is no framework way to do it. It is rather experiment specific. I would write the Field Class such that you can provide a rotation matrix to properly calculate the parameters inside it.

Мне предложение Радека по написанию клсса глобального магнитного поля с возможностью задавать ему матрицу поворота не нравится. Сделаем так, что наш фреймворк бедт поддерживать локальные магнитные поля. Допишу эту функциоанльность в наш ERRunSim.

#2 Updated by Sergey Belogurov over 6 years ago

Надо  добавить кнопку like :)

#4 Updated by Vitaliy Schetinin over 6 years ago

  • % Done changed from 0 to 100

Закончил имплементацию локальных магнитных полей. Добавил для примера простую геометрию магнита.

Теперь надо делать так:

ERRunSim* run = new ERRunSim();

//TODO Выпилить отсюда ERTarget. Завести класс для пассивных объемов(чтобы было не важно что это)
FairModule* magnet = new ERTarget("Magnet",1,kTRUE);
magnet->SetGeometryFileName("magnet.geo.root");
run->AddModule(magnet);

ERFieldConst* magField = new ERFieldConst();
magField->SetField(-50.,0.,0.);//values are in kG, 1T = 10kG
magField->SetFieldRegion(-200000,200000.,-200000.,200000.,0., 100.); // in cm
run->SetField(magField,"magnet");

где "magnet" - название volume к системе координат которого относится поле. И опаньки:

#5 Updated by Vitaliy Schetinin about 6 years ago

  • Assignee changed from Vitaliy Schetinin to Mikhail Kozlov

В итоге выяснилось, что vmc не работает. Реализовано Мишей в ERFieldMap. Требует документирования.

#6 Updated by Vitaliy Schetinin about 6 years ago

  • Target version changed from v-0.4 to v-1.0

#7 Updated by Vitaliy Schetinin almost 6 years ago

  • Status changed from Открыта to Закрыта

Also available in: Atom PDF