Message: Re: Adding quadrupole Not Logged In (login)
 Next-in-Thread Next-in-Thread
 Next-in-Forum Next-in-Forum

Feedback Re: Adding quadrupole 

Forum: Fields: Magnetic and Otherwise
Re: Question Adding quadrupole (Lukasz Fulek)
Re: Feedback Re: Adding quadrupole (Gumplinger Peter)
Re: Question Re: Adding quadrupole (Lukasz Fulek)
Date: 12 Jan, 2012
From: Gumplinger Peter <Gumplinger Peter>

Hi Lukasz,

Sorry for the long silence over the Holidays. I imagine you have solved your problem by now. Your observation is correct, you cannot use G4QuadrupoleMagField since this class returns the field for points in the global coordinate system. You need to write your own field class - or maybe we should fix G4QuadrupoleMagField - so it can be associated with a volume positioned and rotated anywhere in the "World". To do that you have to convert global coordinates to local coordinates in GetFieldValue and then convert the local field to the global field before you return it. Please, see examples/extended/field/field04/src/F04SimpleSolenoid.cc (addFieldValue). What you do is:

G4ThreeVector global(y[0],y[1],y[2]); G4ThreeVector local = global2local.TransformPoint(global);

B[0] = fGradient*local[1]; B[1] = fGradient*local[0]; B[2] = 0 ;

G4ThreeVector field(B[0],B[1],B[2]);

field = global2local.Inverse().TransformAxis(field);

B[0] = field[0]; B[1] = field[1]; B[2] = field[2];

The G4AffineTransform global2local can be calculated once - in the constructor of your field, for example - by knowing where the center(x,y,z) of your quadrupole-field volume is in the world:

     G4Navigator* theNavigator =
                    G4TransportationManager::GetTransportationManager()->
                                                 GetNavigatorForTracking();
     G4Navigator* aNavigator = new G4Navigator();
     if ( theNavigator->GetWorldVolume() )
               aNavigator->SetWorldVolume(theNavigator->GetWorldVolume());

     G4ThreeVector center(x,y,z);
     aNavigator->LocateGlobalPointAndSetup(center,0,false);

     G4TouchableHistoryHandle fTouchable = aNavigator->
                                         CreateTouchableHistoryHandle();

    // set global2local transform
    global2local = fTouchable->GetHistory()->GetTopTransform();

See:

http://www-geant4.kek.jp/lxr/source/examples/extended/field/field04/src/F04PrimaryGeneratorAction.cc#L78

Peter

Inline Depth:
 1 1
 All All
Outline Depth:
 1 1
 2 2
 All All
Add message: (add)

1 None: Re: Adding quadrupole   (Lukasz Fulek - 13 Jan, 2012)
 Add Message Add Message
to: "Re: Adding quadrupole"

 Subscribe Subscribe

This site runs SLAC HyperNews version 1.11-slac-98, derived from the original HyperNews


[ Geant 4 Home | Geant 4 HyperNews | Search | Request New Forum | Feedback ]