#include "AliMUONGeometryBuilder.h"
#include "AliMUONVGeometryBuilder.h"
#include "AliMUONGeometry.h"
#include "AliMUONGeometryTransformer.h"
#include "AliMUONGeometryModule.h"
#include "AliMUONGeometryModuleTransformer.h"
#include "AliMUONGeometryEnvelope.h"
#include "AliMUONGeometryEnvelopeStore.h"
#include "AliMUONGeometryDetElement.h"
#include "AliMUONGeometryConstituent.h"
#include "AliMpDEManager.h"
#include "AliModule.h"
#include "AliSimulation.h"
#include "AliLog.h"
#include "AliRun.h"
#include <TObjArray.h>
#include <TVirtualMC.h>
#include <TGeoManager.h>
using std::endl;
ClassImp(AliMUONGeometryBuilder)
const TString& AliMUONGeometryBuilder::GetDefaultTransformFileName()
{
static const TString kDefaultTransformFileName = "transform.dat";
return kDefaultTransformFileName;
}
const TString& AliMUONGeometryBuilder::GetDefaultSVMapFileName()
{
static const TString kDefaultSVMapFileName = "svmap.dat";
return kDefaultSVMapFileName;
}
const TString& AliMUONGeometryBuilder::GetOutFileNameExtension()
{
static const TString kOutFileNameExtension = ".out";
return kOutFileNameExtension;
}
TGeoHMatrix AliMUONGeometryBuilder::Multiply(const TGeoMatrix& m1,
const TGeoMatrix& m2)
{
if (m1.IsIdentity() && m2.IsIdentity()) return TGeoHMatrix();
if (m1.IsIdentity()) return m2;
if (m2.IsIdentity()) return m1;
return m1 * m2;
}
TGeoHMatrix AliMUONGeometryBuilder::Multiply(const TGeoMatrix& m1,
const TGeoMatrix& m2,
const TGeoMatrix& m3)
{
if (m1.IsIdentity() && m2.IsIdentity() & m3.IsIdentity())
return TGeoHMatrix();
if (m1.IsIdentity()) return Multiply(m2, m3);
if (m2.IsIdentity()) return Multiply(m1, m3);
if (m3.IsIdentity()) return Multiply(m1, m2);
return m1 * m2 * m3;
}
TGeoHMatrix AliMUONGeometryBuilder::Multiply(const TGeoMatrix& m1,
const TGeoMatrix& m2,
const TGeoMatrix& m3,
const TGeoMatrix& m4)
{
if (m1.IsIdentity() && m2.IsIdentity() & m3.IsIdentity() & m4.IsIdentity())
return TGeoHMatrix();
if (m1.IsIdentity()) return Multiply(m2, m3, m4);
if (m2.IsIdentity()) return Multiply(m1, m3, m4);
if (m3.IsIdentity()) return Multiply(m1, m2, m4);
if (m4.IsIdentity()) return Multiply(m1, m2, m3);
return m1 * m2 * m3 * m4;
}
AliMUONGeometryBuilder::AliMUONGeometryBuilder(AliModule* module)
: TObject(),
fModule(module),
fAlign(false),
fTransformFileName(GetDefaultTransformFileName()),
fSVMapFileName(GetDefaultSVMapFileName()),
fGlobalTransformation(),
fGeometryBuilders(0),
fGeometry(0)
{
fGeometryBuilders = new TObjArray();
fGeometryBuilders->SetOwner(true);
fGeometry = new AliMUONGeometry(true);
TGeoRotation* rotGlobal
= new TGeoRotation("rotGlobal", 90., 180., 90., 90., 180., 0.);
fGlobalTransformation = TGeoCombiTrans(0., 0., 0., rotGlobal);
}
AliMUONGeometryBuilder::AliMUONGeometryBuilder()
: TObject(),
fModule(0),
fAlign(false),
fTransformFileName(),
fSVMapFileName(),
fGlobalTransformation(),
fGeometryBuilders(0),
fGeometry(0)
{
}
AliMUONGeometryBuilder::~AliMUONGeometryBuilder()
{
delete fGeometryBuilders;
delete fGeometry;
}
void AliMUONGeometryBuilder::PlaceVolume(const TString& name, const TString& mName,
Int_t copyNo, const TGeoHMatrix& matrix,
Int_t npar, Double_t* param, const char* only,
Bool_t makeAssembly) const
{
if (makeAssembly)
gGeoManager->MakeVolumeAssembly(name.Data());
TGeoHMatrix transform(matrix);
if (mName == TString("DDIP"))
transform = fGlobalTransformation.Inverse() * transform;
const Double_t* xyz = transform.GetTranslation();
const Double_t* rm = transform.GetRotationMatrix();
const Double_t kTolerance = 1e-04;
Bool_t isRotation = true;
if (TMath::Abs(rm[0] - 1.) < kTolerance &&
TMath::Abs(rm[1] - 0.) < kTolerance &&
TMath::Abs(rm[2] - 0.) < kTolerance &&
TMath::Abs(rm[3] - 0.) < kTolerance &&
TMath::Abs(rm[4] - 1.) < kTolerance &&
TMath::Abs(rm[5] - 0.) < kTolerance &&
TMath::Abs(rm[6] - 0.) < kTolerance &&
TMath::Abs(rm[7] - 0.) < kTolerance &&
TMath::Abs(rm[8] - 1.) < kTolerance) isRotation = false;
Int_t krot = 0;
if (isRotation) {
TGeoRotation rot;
rot.SetMatrix(const_cast<Double_t*>(transform.GetRotationMatrix()));
Double_t theta1, phi1, theta2, phi2, theta3, phi3;
rot.GetAngles(theta1, phi1, theta2, phi2, theta3, phi3);
fModule->AliMatrix(krot, theta1, phi1, theta2, phi2, theta3, phi3);
}
if (npar == 0)
TVirtualMC::GetMC()->Gspos(name, copyNo, mName, xyz[0], xyz[1], xyz[2] , krot, only);
else
TVirtualMC::GetMC()->Gsposp(name, copyNo, mName, xyz[0], xyz[1], xyz[2] , krot, only,
param, npar);
}
void AliMUONGeometryBuilder::CreateGeometryWithTGeo()
{
if (fAlign) {
fGeometry->GetTransformer()
->LoadGeometryData(fTransformFileName);
}
for (Int_t i=0; i<fGeometryBuilders->GetEntriesFast(); i++) {
AliMUONVGeometryBuilder* builder
= (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i);
builder->CreateGeometry();
builder->SetVolumes();
if (!fAlign) builder->SetTransformations();
for (Int_t j=0; j<builder->NofGeometries(); j++) {
AliMUONGeometryModule* geometry = builder->Geometry(j);
AliMUONGeometryModuleTransformer* transformer= geometry->GetTransformer();
const TGeoHMatrix* kModuleTransform = transformer->GetTransformation();
TString volName = transformer->GetVolumeName();
TString motherVolName = transformer->GetMotherVolumeName();
PlaceVolume(volName, motherVolName,
1, *kModuleTransform, 0, 0, "ONLY", geometry->IsVirtual());
TGeoCombiTrans appliedGlobalTransform;
if (builder->ApplyGlobalTransformation())
appliedGlobalTransform = fGlobalTransformation;
const TObjArray* kEnvelopes
= geometry->GetEnvelopeStore()->GetEnvelopes();
for (Int_t k=0; k<kEnvelopes->GetEntriesFast(); k++) {
AliMUONGeometryEnvelope* env
= (AliMUONGeometryEnvelope*)kEnvelopes->At(k);
if ( env->GetUniqueID() > 0 &&
AliMpDEManager::GetGeomModuleId(env->GetUniqueID())
!= geometry->GetModuleId() ) {
AliErrorStream()
<< "Detection element " << env->GetUniqueID()
<< " is being placed in geometry module " << geometry->GetModuleId()
<< " but should go in "
<< AliMpDEManager::GetGeomModuleId(env->GetUniqueID())
<< endl;
AliFatal("Inconsistent IDs");
}
const TGeoCombiTrans* kEnvTrans = env->GetTransformation();
const char* only = "ONLY";
if (env->IsMANY()) only = "MANY";
if (env->IsVirtual() && env->GetConstituents()->GetEntriesFast() == 0 ) {
AliFatal("Virtual envelope must have constituents.");
return;
}
if (!env->IsVirtual() && env->GetConstituents()->GetEntriesFast() > 0 ) {
AliFatal("Non virtual envelope cannot have constituents.");
return;
}
TGeoHMatrix total
= Multiply( appliedGlobalTransform,
(*kEnvTrans) );
PlaceVolume(env->GetName(), volName,
env->GetCopyNo(), total, 0, 0, only, env->IsVirtual());
if ( env->IsVirtual() ) {
for (Int_t l=0; l<env->GetConstituents()->GetEntriesFast(); l++) {
AliMUONGeometryConstituent* constituent
= (AliMUONGeometryConstituent*)env->GetConstituents()->At(l);
PlaceVolume(constituent->GetName(), env->GetName(),
constituent->GetCopyNo(),
*constituent->GetTransformation() ,
constituent->GetNpar(), constituent->GetParam(), only);
}
}
}
}
}
}
void AliMUONGeometryBuilder::CreateGeometryWithoutTGeo()
{
if (fAlign) {
fGeometry->GetTransformer()->LoadGeometryData(fTransformFileName);
}
for (Int_t i=0; i<fGeometryBuilders->GetEntriesFast(); i++) {
AliMUONVGeometryBuilder* builder
= (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i);
builder->CreateGeometry();
if (!fAlign) builder->SetTransformations();
for (Int_t j=0; j<builder->NofGeometries(); j++) {
AliMUONGeometryModule* geometry = builder->Geometry(j);
AliMUONGeometryModuleTransformer* transformer= geometry->GetTransformer();
const TGeoHMatrix* kModuleTransform = transformer->GetTransformation();
TString volName = transformer->GetVolumeName();
TString motherVolName = transformer->GetMotherVolumeName();
if ( !geometry->IsVirtual() ) {
PlaceVolume(volName, motherVolName,
1, *kModuleTransform, 0, 0, "ONLY");
}
TGeoCombiTrans appliedGlobalTransform;
if (builder->ApplyGlobalTransformation())
appliedGlobalTransform = fGlobalTransformation;
const TObjArray* kEnvelopes
= geometry->GetEnvelopeStore()->GetEnvelopes();
for (Int_t k=0; k<kEnvelopes->GetEntriesFast(); k++) {
AliMUONGeometryEnvelope* env
= (AliMUONGeometryEnvelope*)kEnvelopes->At(k);
if ( env->GetUniqueID() > 0 &&
AliMpDEManager::GetGeomModuleId(env->GetUniqueID())
!= geometry->GetModuleId() ) {
AliErrorStream()
<< "Detection element " << env->GetUniqueID()
<< " is being placed in geometry module " << geometry->GetModuleId()
<< " but should go in "
<< AliMpDEManager::GetGeomModuleId(env->GetUniqueID())
<< endl;
AliFatal("Inconsistent IDs");
}
const TGeoCombiTrans* kEnvTrans = env->GetTransformation();
const char* only = "ONLY";
if (env->IsMANY()) only = "MANY";
if (env->IsVirtual() && env->GetConstituents()->GetEntriesFast() == 0 ) {
AliFatal("Virtual envelope must have constituents.");
return;
}
if (!env->IsVirtual() && env->GetConstituents()->GetEntriesFast() > 0 ) {
AliFatal("Non virtual envelope cannot have constituents.");
return;
}
if (!env->IsVirtual() && env->GetConstituents()->GetEntriesFast() == 0 ) {
if (geometry->IsVirtual()) {
TGeoHMatrix total
= Multiply( (*kModuleTransform),
appliedGlobalTransform,
(*kEnvTrans) );
PlaceVolume(env->GetName(), motherVolName,
env->GetCopyNo(), total, 0, 0, only);
}
else {
TGeoHMatrix total
= Multiply( appliedGlobalTransform,
(*kEnvTrans) );
PlaceVolume(env->GetName(), volName,
env->GetCopyNo(), total, 0, 0, only);
}
}
if (env->IsVirtual() && env->GetConstituents()->GetEntriesFast() > 0 ) {
for (Int_t l=0; l<env->GetConstituents()->GetEntriesFast(); l++) {
AliMUONGeometryConstituent* constituent
= (AliMUONGeometryConstituent*)env->GetConstituents()->At(l);
if (geometry->IsVirtual()) {
TGeoHMatrix total
= Multiply ( (*kModuleTransform),
appliedGlobalTransform,
(*kEnvTrans),
(*constituent->GetTransformation()) );
PlaceVolume(constituent->GetName(), motherVolName,
constituent->GetCopyNo(), total,
constituent->GetNpar(), constituent->GetParam(), only);
}
else {
TGeoHMatrix total
= Multiply ( appliedGlobalTransform,
(*kEnvTrans),
(*constituent->GetTransformation()) );
PlaceVolume(constituent->GetName(), volName,
constituent->GetCopyNo(), total,
constituent->GetNpar(), constituent->GetParam(), only);
}
}
}
}
}
}
}
void AliMUONGeometryBuilder::SetAlignToBuilder(AliMUONVGeometryBuilder* builder) const
{
for (Int_t j=0; j<builder->NofGeometries(); j++) {
AliMUONGeometryModule* geometry = builder->Geometry(j);
geometry->SetAlign(fAlign);
}
}
void AliMUONGeometryBuilder::AddBuilder(AliMUONVGeometryBuilder* geomBuilder)
{
fGeometryBuilders->Add(geomBuilder);
for (Int_t i=0; i<geomBuilder->NofGeometries(); i++) {
fGeometry->AddModule(geomBuilder->Geometry(i));
}
if (geomBuilder->ApplyGlobalTransformation())
geomBuilder->SetReferenceFrame(fGlobalTransformation);
SetAlignToBuilder(geomBuilder);
}
void AliMUONGeometryBuilder::CreateGeometry()
{
if ( TVirtualMC::GetMC()->IsRootGeometrySupported() ) {
CreateGeometryWithTGeo();
}
else
CreateGeometryWithoutTGeo();
for (Int_t i=0; i<fGeometryBuilders->GetEntriesFast(); i++) {
AliMUONVGeometryBuilder* builder
= (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i);
Bool_t create = ! fAlign;
builder->UpdateDetElements(create);
}
}
void AliMUONGeometryBuilder::CreateMaterials()
{
for (Int_t i=0; i<fGeometryBuilders->GetEntriesFast(); i++) {
AliMUONVGeometryBuilder* builder
= (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i);
if (builder) builder->CreateMaterials();
}
}
void AliMUONGeometryBuilder::InitGeometry(const TString& svmapFileName)
{
if ( AliSimulation::Instance()->IsGeometryFromFile() ) {
fAlign = true;
fGeometry->GetTransformer()->LoadGeometryData();
}
fGeometry->ReadSVMap(svmapFileName);
for (Int_t i=0; i<fGeometryBuilders->GetEntriesFast(); i++) {
AliMUONVGeometryBuilder* builder
= (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i);
builder->SetSensitiveVolumes();
}
}
void AliMUONGeometryBuilder::UpdateInternalGeometry()
{
fGeometry->GetTransformer()->LoadTransformations();
}
void AliMUONGeometryBuilder::WriteSVMaps(const TString& fileName,
Bool_t rebuild, Bool_t writeEnvelopes)
{
if (rebuild)
for (Int_t i=0; i<fGeometryBuilders->GetEntriesFast(); i++) {
AliMUONVGeometryBuilder* builder
= (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i);
builder->RebuildSVMaps(writeEnvelopes);
}
fGeometry->WriteSVMap(fileName);
}
void AliMUONGeometryBuilder::SetAlign(Bool_t align)
{
fAlign = align;
for (Int_t i=0; i<fGeometryBuilders->GetEntriesFast(); i++) {
AliMUONVGeometryBuilder* builder
= (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i);
SetAlignToBuilder(builder);
}
}
void AliMUONGeometryBuilder::SetAlign(const TString& fileName, Bool_t align)
{
fTransformFileName = fileName;
fAlign = align;
for (Int_t i=0; i<fGeometryBuilders->GetEntriesFast(); i++) {
AliMUONVGeometryBuilder* builder
= (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i);
SetAlignToBuilder(builder);
}
}
AliMUONGeometryBuilder.cxx:1 AliMUONGeometryBuilder.cxx:2 AliMUONGeometryBuilder.cxx:3 AliMUONGeometryBuilder.cxx:4 AliMUONGeometryBuilder.cxx:5 AliMUONGeometryBuilder.cxx:6 AliMUONGeometryBuilder.cxx:7 AliMUONGeometryBuilder.cxx:8 AliMUONGeometryBuilder.cxx:9 AliMUONGeometryBuilder.cxx:10 AliMUONGeometryBuilder.cxx:11 AliMUONGeometryBuilder.cxx:12 AliMUONGeometryBuilder.cxx:13 AliMUONGeometryBuilder.cxx:14 AliMUONGeometryBuilder.cxx:15 AliMUONGeometryBuilder.cxx:16 AliMUONGeometryBuilder.cxx:17 AliMUONGeometryBuilder.cxx:18 AliMUONGeometryBuilder.cxx:19 AliMUONGeometryBuilder.cxx:20 AliMUONGeometryBuilder.cxx:21 AliMUONGeometryBuilder.cxx:22 AliMUONGeometryBuilder.cxx:23 AliMUONGeometryBuilder.cxx:24 AliMUONGeometryBuilder.cxx:25 AliMUONGeometryBuilder.cxx:26 AliMUONGeometryBuilder.cxx:27 AliMUONGeometryBuilder.cxx:28 AliMUONGeometryBuilder.cxx:29 AliMUONGeometryBuilder.cxx:30 AliMUONGeometryBuilder.cxx:31 AliMUONGeometryBuilder.cxx:32 AliMUONGeometryBuilder.cxx:33 AliMUONGeometryBuilder.cxx:34 AliMUONGeometryBuilder.cxx:35 AliMUONGeometryBuilder.cxx:36 AliMUONGeometryBuilder.cxx:37 AliMUONGeometryBuilder.cxx:38 AliMUONGeometryBuilder.cxx:39 AliMUONGeometryBuilder.cxx:40 AliMUONGeometryBuilder.cxx:41 AliMUONGeometryBuilder.cxx:42 AliMUONGeometryBuilder.cxx:43 AliMUONGeometryBuilder.cxx:44 AliMUONGeometryBuilder.cxx:45 AliMUONGeometryBuilder.cxx:46 AliMUONGeometryBuilder.cxx:47 AliMUONGeometryBuilder.cxx:48 AliMUONGeometryBuilder.cxx:49 AliMUONGeometryBuilder.cxx:50 AliMUONGeometryBuilder.cxx:51 AliMUONGeometryBuilder.cxx:52 AliMUONGeometryBuilder.cxx:53 AliMUONGeometryBuilder.cxx:54 AliMUONGeometryBuilder.cxx:55 AliMUONGeometryBuilder.cxx:56 AliMUONGeometryBuilder.cxx:57 AliMUONGeometryBuilder.cxx:58 AliMUONGeometryBuilder.cxx:59 AliMUONGeometryBuilder.cxx:60 AliMUONGeometryBuilder.cxx:61 AliMUONGeometryBuilder.cxx:62 AliMUONGeometryBuilder.cxx:63 AliMUONGeometryBuilder.cxx:64 AliMUONGeometryBuilder.cxx:65 AliMUONGeometryBuilder.cxx:66 AliMUONGeometryBuilder.cxx:67 AliMUONGeometryBuilder.cxx:68 AliMUONGeometryBuilder.cxx:69 AliMUONGeometryBuilder.cxx:70 AliMUONGeometryBuilder.cxx:71 AliMUONGeometryBuilder.cxx:72 AliMUONGeometryBuilder.cxx:73 AliMUONGeometryBuilder.cxx:74 AliMUONGeometryBuilder.cxx:75 AliMUONGeometryBuilder.cxx:76 AliMUONGeometryBuilder.cxx:77 AliMUONGeometryBuilder.cxx:78 AliMUONGeometryBuilder.cxx:79 AliMUONGeometryBuilder.cxx:80 AliMUONGeometryBuilder.cxx:81 AliMUONGeometryBuilder.cxx:82 AliMUONGeometryBuilder.cxx:83 AliMUONGeometryBuilder.cxx:84 AliMUONGeometryBuilder.cxx:85 AliMUONGeometryBuilder.cxx:86 AliMUONGeometryBuilder.cxx:87 AliMUONGeometryBuilder.cxx:88 AliMUONGeometryBuilder.cxx:89 AliMUONGeometryBuilder.cxx:90 AliMUONGeometryBuilder.cxx:91 AliMUONGeometryBuilder.cxx:92 AliMUONGeometryBuilder.cxx:93 AliMUONGeometryBuilder.cxx:94 AliMUONGeometryBuilder.cxx:95 AliMUONGeometryBuilder.cxx:96 AliMUONGeometryBuilder.cxx:97 AliMUONGeometryBuilder.cxx:98 AliMUONGeometryBuilder.cxx:99 AliMUONGeometryBuilder.cxx:100 AliMUONGeometryBuilder.cxx:101 AliMUONGeometryBuilder.cxx:102 AliMUONGeometryBuilder.cxx:103 AliMUONGeometryBuilder.cxx:104 AliMUONGeometryBuilder.cxx:105 AliMUONGeometryBuilder.cxx:106 AliMUONGeometryBuilder.cxx:107 AliMUONGeometryBuilder.cxx:108 AliMUONGeometryBuilder.cxx:109 AliMUONGeometryBuilder.cxx:110 AliMUONGeometryBuilder.cxx:111 AliMUONGeometryBuilder.cxx:112 AliMUONGeometryBuilder.cxx:113 AliMUONGeometryBuilder.cxx:114 AliMUONGeometryBuilder.cxx:115 AliMUONGeometryBuilder.cxx:116 AliMUONGeometryBuilder.cxx:117 AliMUONGeometryBuilder.cxx:118 AliMUONGeometryBuilder.cxx:119 AliMUONGeometryBuilder.cxx:120 AliMUONGeometryBuilder.cxx:121 AliMUONGeometryBuilder.cxx:122 AliMUONGeometryBuilder.cxx:123 AliMUONGeometryBuilder.cxx:124 AliMUONGeometryBuilder.cxx:125 AliMUONGeometryBuilder.cxx:126 AliMUONGeometryBuilder.cxx:127 AliMUONGeometryBuilder.cxx:128 AliMUONGeometryBuilder.cxx:129 AliMUONGeometryBuilder.cxx:130 AliMUONGeometryBuilder.cxx:131 AliMUONGeometryBuilder.cxx:132 AliMUONGeometryBuilder.cxx:133 AliMUONGeometryBuilder.cxx:134 AliMUONGeometryBuilder.cxx:135 AliMUONGeometryBuilder.cxx:136 AliMUONGeometryBuilder.cxx:137 AliMUONGeometryBuilder.cxx:138 AliMUONGeometryBuilder.cxx:139 AliMUONGeometryBuilder.cxx:140 AliMUONGeometryBuilder.cxx:141 AliMUONGeometryBuilder.cxx:142 AliMUONGeometryBuilder.cxx:143 AliMUONGeometryBuilder.cxx:144 AliMUONGeometryBuilder.cxx:145 AliMUONGeometryBuilder.cxx:146 AliMUONGeometryBuilder.cxx:147 AliMUONGeometryBuilder.cxx:148 AliMUONGeometryBuilder.cxx:149 AliMUONGeometryBuilder.cxx:150 AliMUONGeometryBuilder.cxx:151 AliMUONGeometryBuilder.cxx:152 AliMUONGeometryBuilder.cxx:153 AliMUONGeometryBuilder.cxx:154 AliMUONGeometryBuilder.cxx:155 AliMUONGeometryBuilder.cxx:156 AliMUONGeometryBuilder.cxx:157 AliMUONGeometryBuilder.cxx:158 AliMUONGeometryBuilder.cxx:159 AliMUONGeometryBuilder.cxx:160 AliMUONGeometryBuilder.cxx:161 AliMUONGeometryBuilder.cxx:162 AliMUONGeometryBuilder.cxx:163 AliMUONGeometryBuilder.cxx:164 AliMUONGeometryBuilder.cxx:165 AliMUONGeometryBuilder.cxx:166 AliMUONGeometryBuilder.cxx:167 AliMUONGeometryBuilder.cxx:168 AliMUONGeometryBuilder.cxx:169 AliMUONGeometryBuilder.cxx:170 AliMUONGeometryBuilder.cxx:171 AliMUONGeometryBuilder.cxx:172 AliMUONGeometryBuilder.cxx:173 AliMUONGeometryBuilder.cxx:174 AliMUONGeometryBuilder.cxx:175 AliMUONGeometryBuilder.cxx:176 AliMUONGeometryBuilder.cxx:177 AliMUONGeometryBuilder.cxx:178 AliMUONGeometryBuilder.cxx:179 AliMUONGeometryBuilder.cxx:180 AliMUONGeometryBuilder.cxx:181 AliMUONGeometryBuilder.cxx:182 AliMUONGeometryBuilder.cxx:183 AliMUONGeometryBuilder.cxx:184 AliMUONGeometryBuilder.cxx:185 AliMUONGeometryBuilder.cxx:186 AliMUONGeometryBuilder.cxx:187 AliMUONGeometryBuilder.cxx:188 AliMUONGeometryBuilder.cxx:189 AliMUONGeometryBuilder.cxx:190 AliMUONGeometryBuilder.cxx:191 AliMUONGeometryBuilder.cxx:192 AliMUONGeometryBuilder.cxx:193 AliMUONGeometryBuilder.cxx:194 AliMUONGeometryBuilder.cxx:195 AliMUONGeometryBuilder.cxx:196 AliMUONGeometryBuilder.cxx:197 AliMUONGeometryBuilder.cxx:198 AliMUONGeometryBuilder.cxx:199 AliMUONGeometryBuilder.cxx:200 AliMUONGeometryBuilder.cxx:201 AliMUONGeometryBuilder.cxx:202 AliMUONGeometryBuilder.cxx:203 AliMUONGeometryBuilder.cxx:204 AliMUONGeometryBuilder.cxx:205 AliMUONGeometryBuilder.cxx:206 AliMUONGeometryBuilder.cxx:207 AliMUONGeometryBuilder.cxx:208 AliMUONGeometryBuilder.cxx:209 AliMUONGeometryBuilder.cxx:210 AliMUONGeometryBuilder.cxx:211 AliMUONGeometryBuilder.cxx:212 AliMUONGeometryBuilder.cxx:213 AliMUONGeometryBuilder.cxx:214 AliMUONGeometryBuilder.cxx:215 AliMUONGeometryBuilder.cxx:216 AliMUONGeometryBuilder.cxx:217 AliMUONGeometryBuilder.cxx:218 AliMUONGeometryBuilder.cxx:219 AliMUONGeometryBuilder.cxx:220 AliMUONGeometryBuilder.cxx:221 AliMUONGeometryBuilder.cxx:222 AliMUONGeometryBuilder.cxx:223 AliMUONGeometryBuilder.cxx:224 AliMUONGeometryBuilder.cxx:225 AliMUONGeometryBuilder.cxx:226 AliMUONGeometryBuilder.cxx:227 AliMUONGeometryBuilder.cxx:228 AliMUONGeometryBuilder.cxx:229 AliMUONGeometryBuilder.cxx:230 AliMUONGeometryBuilder.cxx:231 AliMUONGeometryBuilder.cxx:232 AliMUONGeometryBuilder.cxx:233 AliMUONGeometryBuilder.cxx:234 AliMUONGeometryBuilder.cxx:235 AliMUONGeometryBuilder.cxx:236 AliMUONGeometryBuilder.cxx:237 AliMUONGeometryBuilder.cxx:238 AliMUONGeometryBuilder.cxx:239 AliMUONGeometryBuilder.cxx:240 AliMUONGeometryBuilder.cxx:241 AliMUONGeometryBuilder.cxx:242 AliMUONGeometryBuilder.cxx:243 AliMUONGeometryBuilder.cxx:244 AliMUONGeometryBuilder.cxx:245 AliMUONGeometryBuilder.cxx:246 AliMUONGeometryBuilder.cxx:247 AliMUONGeometryBuilder.cxx:248 AliMUONGeometryBuilder.cxx:249 AliMUONGeometryBuilder.cxx:250 AliMUONGeometryBuilder.cxx:251 AliMUONGeometryBuilder.cxx:252 AliMUONGeometryBuilder.cxx:253 AliMUONGeometryBuilder.cxx:254 AliMUONGeometryBuilder.cxx:255 AliMUONGeometryBuilder.cxx:256 AliMUONGeometryBuilder.cxx:257 AliMUONGeometryBuilder.cxx:258 AliMUONGeometryBuilder.cxx:259 AliMUONGeometryBuilder.cxx:260 AliMUONGeometryBuilder.cxx:261 AliMUONGeometryBuilder.cxx:262 AliMUONGeometryBuilder.cxx:263 AliMUONGeometryBuilder.cxx:264 AliMUONGeometryBuilder.cxx:265 AliMUONGeometryBuilder.cxx:266 AliMUONGeometryBuilder.cxx:267 AliMUONGeometryBuilder.cxx:268 AliMUONGeometryBuilder.cxx:269 AliMUONGeometryBuilder.cxx:270 AliMUONGeometryBuilder.cxx:271 AliMUONGeometryBuilder.cxx:272 AliMUONGeometryBuilder.cxx:273 AliMUONGeometryBuilder.cxx:274 AliMUONGeometryBuilder.cxx:275 AliMUONGeometryBuilder.cxx:276 AliMUONGeometryBuilder.cxx:277 AliMUONGeometryBuilder.cxx:278 AliMUONGeometryBuilder.cxx:279 AliMUONGeometryBuilder.cxx:280 AliMUONGeometryBuilder.cxx:281 AliMUONGeometryBuilder.cxx:282 AliMUONGeometryBuilder.cxx:283 AliMUONGeometryBuilder.cxx:284 AliMUONGeometryBuilder.cxx:285 AliMUONGeometryBuilder.cxx:286 AliMUONGeometryBuilder.cxx:287 AliMUONGeometryBuilder.cxx:288 AliMUONGeometryBuilder.cxx:289 AliMUONGeometryBuilder.cxx:290 AliMUONGeometryBuilder.cxx:291 AliMUONGeometryBuilder.cxx:292 AliMUONGeometryBuilder.cxx:293 AliMUONGeometryBuilder.cxx:294 AliMUONGeometryBuilder.cxx:295 AliMUONGeometryBuilder.cxx:296 AliMUONGeometryBuilder.cxx:297 AliMUONGeometryBuilder.cxx:298 AliMUONGeometryBuilder.cxx:299 AliMUONGeometryBuilder.cxx:300 AliMUONGeometryBuilder.cxx:301 AliMUONGeometryBuilder.cxx:302 AliMUONGeometryBuilder.cxx:303 AliMUONGeometryBuilder.cxx:304 AliMUONGeometryBuilder.cxx:305 AliMUONGeometryBuilder.cxx:306 AliMUONGeometryBuilder.cxx:307 AliMUONGeometryBuilder.cxx:308 AliMUONGeometryBuilder.cxx:309 AliMUONGeometryBuilder.cxx:310 AliMUONGeometryBuilder.cxx:311 AliMUONGeometryBuilder.cxx:312 AliMUONGeometryBuilder.cxx:313 AliMUONGeometryBuilder.cxx:314 AliMUONGeometryBuilder.cxx:315 AliMUONGeometryBuilder.cxx:316 AliMUONGeometryBuilder.cxx:317 AliMUONGeometryBuilder.cxx:318 AliMUONGeometryBuilder.cxx:319 AliMUONGeometryBuilder.cxx:320 AliMUONGeometryBuilder.cxx:321 AliMUONGeometryBuilder.cxx:322 AliMUONGeometryBuilder.cxx:323 AliMUONGeometryBuilder.cxx:324 AliMUONGeometryBuilder.cxx:325 AliMUONGeometryBuilder.cxx:326 AliMUONGeometryBuilder.cxx:327 AliMUONGeometryBuilder.cxx:328 AliMUONGeometryBuilder.cxx:329 AliMUONGeometryBuilder.cxx:330 AliMUONGeometryBuilder.cxx:331 AliMUONGeometryBuilder.cxx:332 AliMUONGeometryBuilder.cxx:333 AliMUONGeometryBuilder.cxx:334 AliMUONGeometryBuilder.cxx:335 AliMUONGeometryBuilder.cxx:336 AliMUONGeometryBuilder.cxx:337 AliMUONGeometryBuilder.cxx:338 AliMUONGeometryBuilder.cxx:339 AliMUONGeometryBuilder.cxx:340 AliMUONGeometryBuilder.cxx:341 AliMUONGeometryBuilder.cxx:342 AliMUONGeometryBuilder.cxx:343 AliMUONGeometryBuilder.cxx:344 AliMUONGeometryBuilder.cxx:345 AliMUONGeometryBuilder.cxx:346 AliMUONGeometryBuilder.cxx:347 AliMUONGeometryBuilder.cxx:348 AliMUONGeometryBuilder.cxx:349 AliMUONGeometryBuilder.cxx:350 AliMUONGeometryBuilder.cxx:351 AliMUONGeometryBuilder.cxx:352 AliMUONGeometryBuilder.cxx:353 AliMUONGeometryBuilder.cxx:354 AliMUONGeometryBuilder.cxx:355 AliMUONGeometryBuilder.cxx:356 AliMUONGeometryBuilder.cxx:357 AliMUONGeometryBuilder.cxx:358 AliMUONGeometryBuilder.cxx:359 AliMUONGeometryBuilder.cxx:360 AliMUONGeometryBuilder.cxx:361 AliMUONGeometryBuilder.cxx:362 AliMUONGeometryBuilder.cxx:363 AliMUONGeometryBuilder.cxx:364 AliMUONGeometryBuilder.cxx:365 AliMUONGeometryBuilder.cxx:366 AliMUONGeometryBuilder.cxx:367 AliMUONGeometryBuilder.cxx:368 AliMUONGeometryBuilder.cxx:369 AliMUONGeometryBuilder.cxx:370 AliMUONGeometryBuilder.cxx:371 AliMUONGeometryBuilder.cxx:372 AliMUONGeometryBuilder.cxx:373 AliMUONGeometryBuilder.cxx:374 AliMUONGeometryBuilder.cxx:375 AliMUONGeometryBuilder.cxx:376 AliMUONGeometryBuilder.cxx:377 AliMUONGeometryBuilder.cxx:378 AliMUONGeometryBuilder.cxx:379 AliMUONGeometryBuilder.cxx:380 AliMUONGeometryBuilder.cxx:381 AliMUONGeometryBuilder.cxx:382 AliMUONGeometryBuilder.cxx:383 AliMUONGeometryBuilder.cxx:384 AliMUONGeometryBuilder.cxx:385 AliMUONGeometryBuilder.cxx:386 AliMUONGeometryBuilder.cxx:387 AliMUONGeometryBuilder.cxx:388 AliMUONGeometryBuilder.cxx:389 AliMUONGeometryBuilder.cxx:390 AliMUONGeometryBuilder.cxx:391 AliMUONGeometryBuilder.cxx:392 AliMUONGeometryBuilder.cxx:393 AliMUONGeometryBuilder.cxx:394 AliMUONGeometryBuilder.cxx:395 AliMUONGeometryBuilder.cxx:396 AliMUONGeometryBuilder.cxx:397 AliMUONGeometryBuilder.cxx:398 AliMUONGeometryBuilder.cxx:399 AliMUONGeometryBuilder.cxx:400 AliMUONGeometryBuilder.cxx:401 AliMUONGeometryBuilder.cxx:402 AliMUONGeometryBuilder.cxx:403 AliMUONGeometryBuilder.cxx:404 AliMUONGeometryBuilder.cxx:405 AliMUONGeometryBuilder.cxx:406 AliMUONGeometryBuilder.cxx:407 AliMUONGeometryBuilder.cxx:408 AliMUONGeometryBuilder.cxx:409 AliMUONGeometryBuilder.cxx:410 AliMUONGeometryBuilder.cxx:411 AliMUONGeometryBuilder.cxx:412 AliMUONGeometryBuilder.cxx:413 AliMUONGeometryBuilder.cxx:414 AliMUONGeometryBuilder.cxx:415 AliMUONGeometryBuilder.cxx:416 AliMUONGeometryBuilder.cxx:417 AliMUONGeometryBuilder.cxx:418 AliMUONGeometryBuilder.cxx:419 AliMUONGeometryBuilder.cxx:420 AliMUONGeometryBuilder.cxx:421 AliMUONGeometryBuilder.cxx:422 AliMUONGeometryBuilder.cxx:423 AliMUONGeometryBuilder.cxx:424 AliMUONGeometryBuilder.cxx:425 AliMUONGeometryBuilder.cxx:426 AliMUONGeometryBuilder.cxx:427 AliMUONGeometryBuilder.cxx:428 AliMUONGeometryBuilder.cxx:429 AliMUONGeometryBuilder.cxx:430 AliMUONGeometryBuilder.cxx:431 AliMUONGeometryBuilder.cxx:432 AliMUONGeometryBuilder.cxx:433 AliMUONGeometryBuilder.cxx:434 AliMUONGeometryBuilder.cxx:435 AliMUONGeometryBuilder.cxx:436 AliMUONGeometryBuilder.cxx:437 AliMUONGeometryBuilder.cxx:438 AliMUONGeometryBuilder.cxx:439 AliMUONGeometryBuilder.cxx:440 AliMUONGeometryBuilder.cxx:441 AliMUONGeometryBuilder.cxx:442 AliMUONGeometryBuilder.cxx:443 AliMUONGeometryBuilder.cxx:444 AliMUONGeometryBuilder.cxx:445 AliMUONGeometryBuilder.cxx:446 AliMUONGeometryBuilder.cxx:447 AliMUONGeometryBuilder.cxx:448 AliMUONGeometryBuilder.cxx:449 AliMUONGeometryBuilder.cxx:450 AliMUONGeometryBuilder.cxx:451 AliMUONGeometryBuilder.cxx:452 AliMUONGeometryBuilder.cxx:453 AliMUONGeometryBuilder.cxx:454 AliMUONGeometryBuilder.cxx:455 AliMUONGeometryBuilder.cxx:456 AliMUONGeometryBuilder.cxx:457 AliMUONGeometryBuilder.cxx:458 AliMUONGeometryBuilder.cxx:459 AliMUONGeometryBuilder.cxx:460 AliMUONGeometryBuilder.cxx:461 AliMUONGeometryBuilder.cxx:462 AliMUONGeometryBuilder.cxx:463 AliMUONGeometryBuilder.cxx:464 AliMUONGeometryBuilder.cxx:465 AliMUONGeometryBuilder.cxx:466 AliMUONGeometryBuilder.cxx:467 AliMUONGeometryBuilder.cxx:468 AliMUONGeometryBuilder.cxx:469 AliMUONGeometryBuilder.cxx:470 AliMUONGeometryBuilder.cxx:471 AliMUONGeometryBuilder.cxx:472 AliMUONGeometryBuilder.cxx:473 AliMUONGeometryBuilder.cxx:474 AliMUONGeometryBuilder.cxx:475 AliMUONGeometryBuilder.cxx:476 AliMUONGeometryBuilder.cxx:477 AliMUONGeometryBuilder.cxx:478 AliMUONGeometryBuilder.cxx:479 AliMUONGeometryBuilder.cxx:480 AliMUONGeometryBuilder.cxx:481 AliMUONGeometryBuilder.cxx:482 AliMUONGeometryBuilder.cxx:483 AliMUONGeometryBuilder.cxx:484 AliMUONGeometryBuilder.cxx:485 AliMUONGeometryBuilder.cxx:486 AliMUONGeometryBuilder.cxx:487 AliMUONGeometryBuilder.cxx:488 AliMUONGeometryBuilder.cxx:489 AliMUONGeometryBuilder.cxx:490 AliMUONGeometryBuilder.cxx:491 AliMUONGeometryBuilder.cxx:492 AliMUONGeometryBuilder.cxx:493 AliMUONGeometryBuilder.cxx:494 AliMUONGeometryBuilder.cxx:495 AliMUONGeometryBuilder.cxx:496 AliMUONGeometryBuilder.cxx:497 AliMUONGeometryBuilder.cxx:498 AliMUONGeometryBuilder.cxx:499 AliMUONGeometryBuilder.cxx:500 AliMUONGeometryBuilder.cxx:501 AliMUONGeometryBuilder.cxx:502 AliMUONGeometryBuilder.cxx:503 AliMUONGeometryBuilder.cxx:504 AliMUONGeometryBuilder.cxx:505 AliMUONGeometryBuilder.cxx:506 AliMUONGeometryBuilder.cxx:507 AliMUONGeometryBuilder.cxx:508 AliMUONGeometryBuilder.cxx:509 AliMUONGeometryBuilder.cxx:510 AliMUONGeometryBuilder.cxx:511 AliMUONGeometryBuilder.cxx:512 AliMUONGeometryBuilder.cxx:513 AliMUONGeometryBuilder.cxx:514 AliMUONGeometryBuilder.cxx:515 AliMUONGeometryBuilder.cxx:516 AliMUONGeometryBuilder.cxx:517 AliMUONGeometryBuilder.cxx:518 AliMUONGeometryBuilder.cxx:519 AliMUONGeometryBuilder.cxx:520 AliMUONGeometryBuilder.cxx:521 AliMUONGeometryBuilder.cxx:522 AliMUONGeometryBuilder.cxx:523 AliMUONGeometryBuilder.cxx:524 AliMUONGeometryBuilder.cxx:525 AliMUONGeometryBuilder.cxx:526 AliMUONGeometryBuilder.cxx:527 AliMUONGeometryBuilder.cxx:528 AliMUONGeometryBuilder.cxx:529 AliMUONGeometryBuilder.cxx:530 AliMUONGeometryBuilder.cxx:531 AliMUONGeometryBuilder.cxx:532 AliMUONGeometryBuilder.cxx:533 AliMUONGeometryBuilder.cxx:534 AliMUONGeometryBuilder.cxx:535 AliMUONGeometryBuilder.cxx:536 AliMUONGeometryBuilder.cxx:537 AliMUONGeometryBuilder.cxx:538 AliMUONGeometryBuilder.cxx:539 AliMUONGeometryBuilder.cxx:540 AliMUONGeometryBuilder.cxx:541 AliMUONGeometryBuilder.cxx:542 AliMUONGeometryBuilder.cxx:543 AliMUONGeometryBuilder.cxx:544 AliMUONGeometryBuilder.cxx:545 AliMUONGeometryBuilder.cxx:546 AliMUONGeometryBuilder.cxx:547 AliMUONGeometryBuilder.cxx:548 AliMUONGeometryBuilder.cxx:549 AliMUONGeometryBuilder.cxx:550 AliMUONGeometryBuilder.cxx:551 AliMUONGeometryBuilder.cxx:552 AliMUONGeometryBuilder.cxx:553 AliMUONGeometryBuilder.cxx:554 AliMUONGeometryBuilder.cxx:555 AliMUONGeometryBuilder.cxx:556 AliMUONGeometryBuilder.cxx:557 AliMUONGeometryBuilder.cxx:558 AliMUONGeometryBuilder.cxx:559 AliMUONGeometryBuilder.cxx:560 AliMUONGeometryBuilder.cxx:561 AliMUONGeometryBuilder.cxx:562 AliMUONGeometryBuilder.cxx:563 AliMUONGeometryBuilder.cxx:564 AliMUONGeometryBuilder.cxx:565 AliMUONGeometryBuilder.cxx:566 AliMUONGeometryBuilder.cxx:567 AliMUONGeometryBuilder.cxx:568 AliMUONGeometryBuilder.cxx:569 AliMUONGeometryBuilder.cxx:570 AliMUONGeometryBuilder.cxx:571 AliMUONGeometryBuilder.cxx:572 AliMUONGeometryBuilder.cxx:573 AliMUONGeometryBuilder.cxx:574 AliMUONGeometryBuilder.cxx:575 AliMUONGeometryBuilder.cxx:576 AliMUONGeometryBuilder.cxx:577 AliMUONGeometryBuilder.cxx:578 AliMUONGeometryBuilder.cxx:579 AliMUONGeometryBuilder.cxx:580 AliMUONGeometryBuilder.cxx:581 AliMUONGeometryBuilder.cxx:582 AliMUONGeometryBuilder.cxx:583 AliMUONGeometryBuilder.cxx:584 AliMUONGeometryBuilder.cxx:585 AliMUONGeometryBuilder.cxx:586 AliMUONGeometryBuilder.cxx:587 AliMUONGeometryBuilder.cxx:588 AliMUONGeometryBuilder.cxx:589 AliMUONGeometryBuilder.cxx:590 AliMUONGeometryBuilder.cxx:591 AliMUONGeometryBuilder.cxx:592 AliMUONGeometryBuilder.cxx:593 AliMUONGeometryBuilder.cxx:594 AliMUONGeometryBuilder.cxx:595 AliMUONGeometryBuilder.cxx:596 AliMUONGeometryBuilder.cxx:597 AliMUONGeometryBuilder.cxx:598 AliMUONGeometryBuilder.cxx:599 AliMUONGeometryBuilder.cxx:600 AliMUONGeometryBuilder.cxx:601 AliMUONGeometryBuilder.cxx:602 AliMUONGeometryBuilder.cxx:603 AliMUONGeometryBuilder.cxx:604 AliMUONGeometryBuilder.cxx:605 AliMUONGeometryBuilder.cxx:606 AliMUONGeometryBuilder.cxx:607 AliMUONGeometryBuilder.cxx:608 AliMUONGeometryBuilder.cxx:609 AliMUONGeometryBuilder.cxx:610 AliMUONGeometryBuilder.cxx:611 AliMUONGeometryBuilder.cxx:612 AliMUONGeometryBuilder.cxx:613 AliMUONGeometryBuilder.cxx:614 AliMUONGeometryBuilder.cxx:615 AliMUONGeometryBuilder.cxx:616 AliMUONGeometryBuilder.cxx:617 AliMUONGeometryBuilder.cxx:618 AliMUONGeometryBuilder.cxx:619 AliMUONGeometryBuilder.cxx:620 AliMUONGeometryBuilder.cxx:621 AliMUONGeometryBuilder.cxx:622 AliMUONGeometryBuilder.cxx:623 AliMUONGeometryBuilder.cxx:624 AliMUONGeometryBuilder.cxx:625 AliMUONGeometryBuilder.cxx:626 AliMUONGeometryBuilder.cxx:627 AliMUONGeometryBuilder.cxx:628 AliMUONGeometryBuilder.cxx:629 AliMUONGeometryBuilder.cxx:630 AliMUONGeometryBuilder.cxx:631 AliMUONGeometryBuilder.cxx:632 AliMUONGeometryBuilder.cxx:633 AliMUONGeometryBuilder.cxx:634 AliMUONGeometryBuilder.cxx:635 AliMUONGeometryBuilder.cxx:636 AliMUONGeometryBuilder.cxx:637 AliMUONGeometryBuilder.cxx:638 AliMUONGeometryBuilder.cxx:639 AliMUONGeometryBuilder.cxx:640 AliMUONGeometryBuilder.cxx:641 AliMUONGeometryBuilder.cxx:642 AliMUONGeometryBuilder.cxx:643 AliMUONGeometryBuilder.cxx:644 AliMUONGeometryBuilder.cxx:645 AliMUONGeometryBuilder.cxx:646 AliMUONGeometryBuilder.cxx:647 AliMUONGeometryBuilder.cxx:648 AliMUONGeometryBuilder.cxx:649 AliMUONGeometryBuilder.cxx:650 AliMUONGeometryBuilder.cxx:651 AliMUONGeometryBuilder.cxx:652 AliMUONGeometryBuilder.cxx:653 AliMUONGeometryBuilder.cxx:654 AliMUONGeometryBuilder.cxx:655 AliMUONGeometryBuilder.cxx:656 AliMUONGeometryBuilder.cxx:657 AliMUONGeometryBuilder.cxx:658 AliMUONGeometryBuilder.cxx:659 AliMUONGeometryBuilder.cxx:660 AliMUONGeometryBuilder.cxx:661 AliMUONGeometryBuilder.cxx:662 AliMUONGeometryBuilder.cxx:663 AliMUONGeometryBuilder.cxx:664 AliMUONGeometryBuilder.cxx:665 AliMUONGeometryBuilder.cxx:666 AliMUONGeometryBuilder.cxx:667 AliMUONGeometryBuilder.cxx:668 AliMUONGeometryBuilder.cxx:669 AliMUONGeometryBuilder.cxx:670 AliMUONGeometryBuilder.cxx:671 AliMUONGeometryBuilder.cxx:672 AliMUONGeometryBuilder.cxx:673 AliMUONGeometryBuilder.cxx:674 AliMUONGeometryBuilder.cxx:675 AliMUONGeometryBuilder.cxx:676 AliMUONGeometryBuilder.cxx:677 AliMUONGeometryBuilder.cxx:678 AliMUONGeometryBuilder.cxx:679 AliMUONGeometryBuilder.cxx:680 AliMUONGeometryBuilder.cxx:681 AliMUONGeometryBuilder.cxx:682