- bouchet's home page
- Posts
- 2016
- 2015
- December (1)
- November (3)
- October (2)
- September (2)
- August (2)
- June (2)
- April (5)
- March (2)
- February (3)
- January (2)
- 2014
- December (2)
- November (2)
- October (3)
- September (2)
- August (3)
- July (1)
- June (3)
- May (6)
- April (6)
- March (1)
- February (2)
- January (1)
- 2013
- December (2)
- November (3)
- October (3)
- September (4)
- August (1)
- July (1)
- May (4)
- April (6)
- March (4)
- February (3)
- 2012
- 2011
- December (2)
- November (2)
- October (4)
- September (1)
- August (2)
- July (6)
- June (2)
- May (3)
- April (3)
- March (2)
- 2010
- 2009
- December (2)
- November (1)
- October (3)
- September (1)
- August (1)
- July (1)
- June (2)
- April (1)
- March (2)
- February (2)
- January (1)
- 2008
- My blog
- Post new blog entry
- All blogs
pixl sector and full geom. in agml
a pixel sector : 3 active silicon ladders on top at radius r1 = 8cm and one on the bottom at a radius r2 = 2.5 cm
the pixel full geometry : duplication of the single sector by 10
some details are in this pdf :
- other pictures
- naming convention for GEANT shapes
- how to place the box (a cone) where the single sector sits
Checking overlaps
TGeoManager has several methods to check overlaps :
- CheckBoundaryErrors()
- CheckGeometryFull()
- CheckOverLaps()
- PrintOverLaps()
the 2) method seems to be the most complete :
Geometry checking. - if option contains 'o': Optional overlap checkings (by sampling and by mesh). - if option contains 'b': Optional boundary crossing check + timing per volume. STAGE 1: extensive overlap checking by sampling per volume. Stdout need to be checked by user to get report, then TGeoVolume::CheckOverlaps(0.01, "s") can be called for the suspicious volumes. STAGE2 : normal overlap checking using the shapes mesh - fills the list of overlaps. STAGE3 : shooting NRAYS rays from VERTEX and counting the total number of crossings per volume (rays propagated from boundary to boundary until geometry exit). Timing computed and results stored in a histo. STAGE4 : shooting 1 mil. random rays inside EACH volume and calling FindNextBoundary() + Safety() for each call. The timing is normalized by the number of crossings computed at stage 2 and presented as percentage. One can get a picture on which are the most "burned" volumes during transportation from geometry point of view. Another plot of the timing per volume vs. number of daughters is produced.
The result of these 4 methods are in this pdf
Converting this geometry to starsim
$ starsim starsim > detp geom dev13 starsim > gexec .$STAR_HOST_SYS/lib/x.geometry.so starsim > gclose all
Running these 2 commands actually works ; STARSIM draw the pixel.
The next step was to throw some pions :
- first I have to change /pams/sim/g2t/g2t_pix.F to specify that the active volume name may have change
- there is one issue now : a sector is placed in a volume , where there is 4 active silicon ladders : 3 on top and 1 on bottom. All 4 ladders are from the same volume (PLAC)
Running over some fz file created with dev13 geometry, only hits in the top ladders are found :
Use of konly and MANY :
-
An additional attribute, konly, is used to indicate whether or
-
not the volume is expected to overlap another volume at the same
-
level in the geometry tree. konly="ONLY" indicates no overlap and
-
is the default value. konly="MANY" indicates overlap is possible.
-
-
For more info on ONLY vs MANY, consult the geant 3 manual.
Navigating in the TGeoManager
get some basic infos :
root.exe [1] .ls TFile** dev13.root TFile* dev13.root KEY: TGeoManager dev13;1 dev13 | dyson root.exe [2] dev13->GetListOfNodes() (class TObjArray*)0xa1b9a58 root.exe [3] dev13->GetListOfNodes()->Print() Collection name='TObjArray', class='TObjArray', size=30 OBJ: TGeoNodeMatrix HALL_1 Top logical node
go the a given node and get the name (assuming the path is known) :
root.exe [11] dev13->cd("HALL_1/CAVE_1/IDSM_1/PXMO_1") root.exe [12] TGeoNode *nodeT = dev13->GetCurrentNode() root.exe [13] nodeT->GetName() (const char* 0xab87808)"PXMO_1"
get the name of the next daughter :
root.exe [21] dev13->GetCurrentNode()->GetDaughter(0)->GetName() (const char* 0xab87998)"PXLA_1"
get info for the current node :
root.exe [29] nodeT->GetName() (const char* 0xab87808)"PXMO_1" root.exe [30] nodeT->GetMotherVolume()->GetName() (const char* 0xab2afb8)"IDSM" root.exe [31] nodeT->GetNumber() (const Int_t)1
Decoding the path/volume names for the new pixl geom.
- The main volume remain PXMO
- the name for a pixel sector is PXLA so there will be 10 PXLA volume , named PXLA_1 , PXLA_2 ... , PXLA_10
This can be verified by using the TGeo volume :
root.exe [13] dev13->cd("HALL_1/CAVE_1/IDSM_1/PXMO_1") (Bool_t)1 root.exe [14] TGeoNode *nodeT = dev13->GetCurrentNode() root.exe [15] nodeT->GetName() (const char* 0x9942330)"PXMO_1" root.exe [16] nodeT->GetNdaughters() (const Int_t)10 root.exe [19] nodeT->GetDaughter(0)->GetName() (const char* 0x99424c0)"PXLA_1"
4. Now going to the sector volume, it has 20 daughters : 4 active ladders + 15 carbons pieces (sector structure)
root.exe [20] dev13->cd("HALL_1/CAVE_1/IDSM_1/PXMO_1/PXLA_1")
root.exe [21] TGeoNode *nodeX = dev13->GetCurrentNode()
root.exe [22] nodeT->GetName()
(const char* 0x99424c0)"PXLA_1"
root.exe [24] nodeX->GetNdaughters()
(const Int_t)20
root.exe [28] nodeX->GetDaughter(19)->GetName() (const char* 0x9945ba0)"PLAC_4" root.exe [29] nodeX->GetDaughter(18)->GetName() (const char* 0x9945b30)"PLAC_3" root.exe [30] nodeX->GetDaughter(17)->GetName() (const char* 0x9945ad0)"PLAC_2" root.exe [31] nodeX->GetDaughter(16)->GetName() (const char* 0x99456c8)"PLAC_1"
To summarize , the number of sectors goes from 1 to 20 and the active ladders goes from 16 to 19
So paths for active ladders of sector 1 would be like :
-
HALL_1/CAVE_1/IDSM_1/PXMO_1/PXLA_1/PLAC_16
-
HALL_1/CAVE_1/IDSM_1/PXMO_1/PXLA_1/PLAC_17
-
HALL_1/CAVE_1/IDSM_1/PXMO_1/PXLA_1/PLAC_18
-
HALL_1/CAVE_1/IDSM_1/PXMO_1/PXLA_1/PLAC_19
Attempt to run the BFC chain
- first we needed a tag in the BFChain to recognize dev13 geometry. This had been added by Victor ; in $STAR/StRoot/StChain/StMaker.cxx
{"dev13", 20200102, 19, "dev13", "dev geo for 2013"}, //
2. we also need the following directories that contains dev13.h geometry
/StarDb/AgiGeometry
/StarDb/AgMLGeometry
By default , /StarDb/AgiGeometry does not have a Geometry.dev13.C file but as all the files are the same [only the name change], just copy a file and rename it Geometry.dev13.C
This macro will just call CreateTable()
#include "CreateGeometry.h" TDataSet *CreateTable() {return CreateGeometry("dev13");}
To create a dev13.h file (TGeo file), fire starsim and do the following :
# First create the geometry tag in starsim
$ starsim
starsim > detp geom dev13starsim > gexe $STAR_LIB/xgeometry.so
starsim > gclose all
starsim > grfile dev13.rz
starsim > exit# Now we have the geometry in a ZERBRA file... to go to ROOT
$ g2root dev.rz
It creates dev13.C that you can rename dev13.h
3. We also need calibration tracking files :
For this, cvs co $StarDb/Calibrations/tracker and rename all the files like XXX.upgr15.C by ***.dev13.C
- bouchet's blog
- Login or register to post comments