ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// $Id$

//-----------------------------------------------------------------------------
// Class AliMUONSt2GeometryBuilder
// -------------------------------
// MUON Station2 coarse geometry construction class.
// Extracted from AliMUONv1
// Dummy version of station 2 with the right DE id (Ch. Finck)
//-----------------------------------------------------------------------------

#include <TVirtualMC.h>
#include <TGeoMatrix.h>
#include <TArrayI.h>

#include "AliLog.h"

#include "AliMUONSt2GeometryBuilder.h"
#include "AliMUON.h"
#include "AliMUONConstants.h"
#include "AliMUONGeometryModule.h"
#include "AliMUONGeometryEnvelopeStore.h"

/// \cond CLASSIMP
ClassImp(AliMUONSt2GeometryBuilder)
/// \endcond

//______________________________________________________________________________
AliMUONSt2GeometryBuilder::AliMUONSt2GeometryBuilder(AliMUON* muon)
 : AliMUONVGeometryBuilder(2, 2), 
   fMUON(muon)
{
/// Standard constructor

}

//______________________________________________________________________________
AliMUONSt2GeometryBuilder::AliMUONSt2GeometryBuilder()
 : AliMUONVGeometryBuilder(),
   fMUON(0)
{
/// Default constructor
}


//______________________________________________________________________________
AliMUONSt2GeometryBuilder::~AliMUONSt2GeometryBuilder() 
{
/// Destructor
}

//
// public methods
//

//______________________________________________________________________________
void AliMUONSt2GeometryBuilder::CreateGeometry() 
{
/// From AliMUONv1::CreateGeometry()

//
//********************************************************************
//                            Station 2                             **
//********************************************************************
     // indices 1 and 2 for first and second chambers in the station
     // iChamber (first chamber) kept for other quanties than Z,
     // assumed to be the same in both chambers

     // Get tracking medias Ids     
     Int_t *idtmed = fMUON->GetIdtmed()->GetArray()-1099;
     Int_t idAir= idtmed[1100]; // medium 1
  //     Int_t idAlu1=idtmed[1103]; // medium 4
     //     Int_t idAlu2=idtmed[1104]; // medium 5
     Int_t idGas=idtmed[1108];  // medium 9 = Ar-CO2 gas (80%+20%)

     const Float_t kDeltaQuad = 0.01;//2.6; dummy value til we find the good value
     const Float_t kDeltaZ = 6.5/2.;

     // Rotation matrices in the x-y plane  
     // phi= 0 deg
     Int_t irot1;
     fMUON->AliMatrix(irot1,  90.,   0., 90.,  90., 0., 0.);
     // phi= 90 deg
     Int_t irot2;
     fMUON->AliMatrix(irot2,  90.,  90., 90., 180., 0., 0.);

     // Half of the total thickness of frame crosses (including DAlu)
     // for each chamber in stations 1 and 2:
     // 3% of X0 of composite material,
     // but taken as Aluminium here, with same thickness in number of X0
     //     Float_t dframez = 3. * 8.9 / 100;
     // DGas and DAlu not changed from standard values
     //     Double_t zfpos=-(iChamber->DGas()+dframez+iChamber->DAlu())/2;
             // The same parameters are defined in builder for station 1 

     //    sensitive gas gap
     const Float_t kDGas = 0.5;

     //    3% radiation length of aluminum (X0=8.9 cm)      
     // const Float_t kDAlu = 3.5 * 8.9 / 100.;
     
     // Mother volume
     // Outer excess and inner recess for mother volume radius
     // with respect to ROuter and RInner
     //     Float_t dframep=.001; // Value for station 3 should be 6 ...
     // Width (RdPhi) of the frame crosses for stations 1 and 2 (cm)
     // Float_t dframep1=.001;
     //     Float_t phi=2*TMath::Pi()/12/2;
             // The same parameters are defined in builder for station 1 (30deg)

     Float_t tpar[5];
     //     Double_t dstation = (-iChamber2->Z()) - (-iChamber1->Z());


     Float_t posx, posy, posz;
//   Chamber Material represented by Alu sheet
     tpar[0]= AliMUONConstants::Rmin(1);
     tpar[1]= AliMUONConstants::Rmax(1);
     tpar[2] = kDGas/2;
     tpar[3] = 0.;
     tpar[4] = 90.;
  
//     
//   Sensitive volumes
     TVirtualMC::GetMC()->Gsvolu("S03G", "TUBS", idGas, tpar, 5);
     TVirtualMC::GetMC()->Gsvolu("S04G", "TUBS", idGas, tpar, 5);

     Int_t detElemId;

     posx = kDeltaQuad;
     posy = kDeltaQuad;
     posz = -kDeltaZ;

     detElemId = 301;
     TVirtualMC::GetMC()->Gsvolu("LE01", "TUBS", idAir, tpar, 5);
     GetEnvelopes(2)->AddEnvelope("LE01", detElemId, true, TGeoTranslation(posx, posy, posz),
				   TGeoRotation("rot1",90,0,90,90,0,0) );
     detElemId = 401;
     TVirtualMC::GetMC()->Gsvolu("LF01", "TUBS", idAir, tpar, 5);
     GetEnvelopes(3)->AddEnvelope("LF01", detElemId, true, TGeoTranslation(posx, posy, posz),
				   TGeoRotation("rot1",90,0,90,90,0,0) );
     detElemId = 300;
     TVirtualMC::GetMC()->Gsvolu("LE02", "TUBS", idAir, tpar, 5);
     GetEnvelopes(2)->AddEnvelope("LE02", detElemId, true, TGeoTranslation(-posx, posy,-posz),
				  TGeoRotation("rot2",90,180,90,90,180,0) );
     detElemId = 400;
     TVirtualMC::GetMC()->Gsvolu("LF02", "TUBS", idAir, tpar, 5);
     GetEnvelopes(3)->AddEnvelope("LF02", detElemId, true, TGeoTranslation(-posx, posy,-posz),
				  TGeoRotation("rot2",90,180,90,90,180,0) );
     detElemId = 302;
     TVirtualMC::GetMC()->Gsvolu("LE03", "TUBS", idAir, tpar, 5);
     GetEnvelopes(2)->AddEnvelope("LE03", detElemId, true, TGeoTranslation(posx, -posy, -posz),
				  TGeoRotation("rot3",90,0,90,270,180,0) );
     detElemId = 402;
     TVirtualMC::GetMC()->Gsvolu("LF03", "TUBS", idAir, tpar, 5);
     GetEnvelopes(3)->AddEnvelope("LF03", detElemId, true, TGeoTranslation(posx, -posy, -posz),
				  TGeoRotation("rot3",90,0,90,270,180,0) );
     detElemId = 303;
     TVirtualMC::GetMC()->Gsvolu("LE04", "TUBS", idAir, tpar, 5);
     GetEnvelopes(2)->AddEnvelope("LE04", detElemId, true, TGeoTranslation(-posx, -posy, posz),
				  TGeoRotation("rot4",90,180,90,270,0,0) );
     detElemId = 403;
     TVirtualMC::GetMC()->Gsvolu("LF04", "TUBS", idAir, tpar, 5);
     GetEnvelopes(3)->AddEnvelope("LF04", detElemId, true, TGeoTranslation(-posx, -posy, posz),
				  TGeoRotation("rot4",90,180,90,270,0,0) );

     GetEnvelopes(2)->AddEnvelopeConstituent("S03G", "LE01", 1);
     GetEnvelopes(3)->AddEnvelopeConstituent("S04G", "LF01", 1);

     GetEnvelopes(2)->AddEnvelopeConstituent("S03G", "LE02", 2);
     GetEnvelopes(3)->AddEnvelopeConstituent("S04G", "LF02", 2);

     GetEnvelopes(2)->AddEnvelopeConstituent("S03G", "LE03", 3);
     GetEnvelopes(3)->AddEnvelopeConstituent("S04G", "LF03", 3);

     GetEnvelopes(2)->AddEnvelopeConstituent("S03G", "LE04", 4);
     GetEnvelopes(3)->AddEnvelopeConstituent("S04G", "LF04", 4);
}

//______________________________________________________________________________
void AliMUONSt2GeometryBuilder::SetVolumes()
{
/// Defines the volumes for the station2 chambers.

  // Define chamber volumes as virtual
  SetVolume(2, "SC03", true);
  SetVolume(3, "SC04", true);
}

//______________________________________________________________________________
void AliMUONSt2GeometryBuilder::SetTransformations()
{
/// Defines the transformations for the station2 chambers.

  Double_t zpos1 = - AliMUONConstants::DefaultChamberZ(2); 
  SetTranslation(2, TGeoTranslation(0., 0., zpos1));

  Double_t zpos2 = - AliMUONConstants::DefaultChamberZ(3); 
  SetTranslation(3, TGeoTranslation(0., 0., zpos2));
}

//______________________________________________________________________________
void AliMUONSt2GeometryBuilder::SetSensitiveVolumes()
{
/// Defines the sensitive volumes for station2 chambers.

  GetGeometry(2)->SetSensitiveVolume("S03G");
  GetGeometry(3)->SetSensitiveVolume("S04G");
}
 AliMUONSt2GeometryBuilder.cxx:1
 AliMUONSt2GeometryBuilder.cxx:2
 AliMUONSt2GeometryBuilder.cxx:3
 AliMUONSt2GeometryBuilder.cxx:4
 AliMUONSt2GeometryBuilder.cxx:5
 AliMUONSt2GeometryBuilder.cxx:6
 AliMUONSt2GeometryBuilder.cxx:7
 AliMUONSt2GeometryBuilder.cxx:8
 AliMUONSt2GeometryBuilder.cxx:9
 AliMUONSt2GeometryBuilder.cxx:10
 AliMUONSt2GeometryBuilder.cxx:11
 AliMUONSt2GeometryBuilder.cxx:12
 AliMUONSt2GeometryBuilder.cxx:13
 AliMUONSt2GeometryBuilder.cxx:14
 AliMUONSt2GeometryBuilder.cxx:15
 AliMUONSt2GeometryBuilder.cxx:16
 AliMUONSt2GeometryBuilder.cxx:17
 AliMUONSt2GeometryBuilder.cxx:18
 AliMUONSt2GeometryBuilder.cxx:19
 AliMUONSt2GeometryBuilder.cxx:20
 AliMUONSt2GeometryBuilder.cxx:21
 AliMUONSt2GeometryBuilder.cxx:22
 AliMUONSt2GeometryBuilder.cxx:23
 AliMUONSt2GeometryBuilder.cxx:24
 AliMUONSt2GeometryBuilder.cxx:25
 AliMUONSt2GeometryBuilder.cxx:26
 AliMUONSt2GeometryBuilder.cxx:27
 AliMUONSt2GeometryBuilder.cxx:28
 AliMUONSt2GeometryBuilder.cxx:29
 AliMUONSt2GeometryBuilder.cxx:30
 AliMUONSt2GeometryBuilder.cxx:31
 AliMUONSt2GeometryBuilder.cxx:32
 AliMUONSt2GeometryBuilder.cxx:33
 AliMUONSt2GeometryBuilder.cxx:34
 AliMUONSt2GeometryBuilder.cxx:35
 AliMUONSt2GeometryBuilder.cxx:36
 AliMUONSt2GeometryBuilder.cxx:37
 AliMUONSt2GeometryBuilder.cxx:38
 AliMUONSt2GeometryBuilder.cxx:39
 AliMUONSt2GeometryBuilder.cxx:40
 AliMUONSt2GeometryBuilder.cxx:41
 AliMUONSt2GeometryBuilder.cxx:42
 AliMUONSt2GeometryBuilder.cxx:43
 AliMUONSt2GeometryBuilder.cxx:44
 AliMUONSt2GeometryBuilder.cxx:45
 AliMUONSt2GeometryBuilder.cxx:46
 AliMUONSt2GeometryBuilder.cxx:47
 AliMUONSt2GeometryBuilder.cxx:48
 AliMUONSt2GeometryBuilder.cxx:49
 AliMUONSt2GeometryBuilder.cxx:50
 AliMUONSt2GeometryBuilder.cxx:51
 AliMUONSt2GeometryBuilder.cxx:52
 AliMUONSt2GeometryBuilder.cxx:53
 AliMUONSt2GeometryBuilder.cxx:54
 AliMUONSt2GeometryBuilder.cxx:55
 AliMUONSt2GeometryBuilder.cxx:56
 AliMUONSt2GeometryBuilder.cxx:57
 AliMUONSt2GeometryBuilder.cxx:58
 AliMUONSt2GeometryBuilder.cxx:59
 AliMUONSt2GeometryBuilder.cxx:60
 AliMUONSt2GeometryBuilder.cxx:61
 AliMUONSt2GeometryBuilder.cxx:62
 AliMUONSt2GeometryBuilder.cxx:63
 AliMUONSt2GeometryBuilder.cxx:64
 AliMUONSt2GeometryBuilder.cxx:65
 AliMUONSt2GeometryBuilder.cxx:66
 AliMUONSt2GeometryBuilder.cxx:67
 AliMUONSt2GeometryBuilder.cxx:68
 AliMUONSt2GeometryBuilder.cxx:69
 AliMUONSt2GeometryBuilder.cxx:70
 AliMUONSt2GeometryBuilder.cxx:71
 AliMUONSt2GeometryBuilder.cxx:72
 AliMUONSt2GeometryBuilder.cxx:73
 AliMUONSt2GeometryBuilder.cxx:74
 AliMUONSt2GeometryBuilder.cxx:75
 AliMUONSt2GeometryBuilder.cxx:76
 AliMUONSt2GeometryBuilder.cxx:77
 AliMUONSt2GeometryBuilder.cxx:78
 AliMUONSt2GeometryBuilder.cxx:79
 AliMUONSt2GeometryBuilder.cxx:80
 AliMUONSt2GeometryBuilder.cxx:81
 AliMUONSt2GeometryBuilder.cxx:82
 AliMUONSt2GeometryBuilder.cxx:83
 AliMUONSt2GeometryBuilder.cxx:84
 AliMUONSt2GeometryBuilder.cxx:85
 AliMUONSt2GeometryBuilder.cxx:86
 AliMUONSt2GeometryBuilder.cxx:87
 AliMUONSt2GeometryBuilder.cxx:88
 AliMUONSt2GeometryBuilder.cxx:89
 AliMUONSt2GeometryBuilder.cxx:90
 AliMUONSt2GeometryBuilder.cxx:91
 AliMUONSt2GeometryBuilder.cxx:92
 AliMUONSt2GeometryBuilder.cxx:93
 AliMUONSt2GeometryBuilder.cxx:94
 AliMUONSt2GeometryBuilder.cxx:95
 AliMUONSt2GeometryBuilder.cxx:96
 AliMUONSt2GeometryBuilder.cxx:97
 AliMUONSt2GeometryBuilder.cxx:98
 AliMUONSt2GeometryBuilder.cxx:99
 AliMUONSt2GeometryBuilder.cxx:100
 AliMUONSt2GeometryBuilder.cxx:101
 AliMUONSt2GeometryBuilder.cxx:102
 AliMUONSt2GeometryBuilder.cxx:103
 AliMUONSt2GeometryBuilder.cxx:104
 AliMUONSt2GeometryBuilder.cxx:105
 AliMUONSt2GeometryBuilder.cxx:106
 AliMUONSt2GeometryBuilder.cxx:107
 AliMUONSt2GeometryBuilder.cxx:108
 AliMUONSt2GeometryBuilder.cxx:109
 AliMUONSt2GeometryBuilder.cxx:110
 AliMUONSt2GeometryBuilder.cxx:111
 AliMUONSt2GeometryBuilder.cxx:112
 AliMUONSt2GeometryBuilder.cxx:113
 AliMUONSt2GeometryBuilder.cxx:114
 AliMUONSt2GeometryBuilder.cxx:115
 AliMUONSt2GeometryBuilder.cxx:116
 AliMUONSt2GeometryBuilder.cxx:117
 AliMUONSt2GeometryBuilder.cxx:118
 AliMUONSt2GeometryBuilder.cxx:119
 AliMUONSt2GeometryBuilder.cxx:120
 AliMUONSt2GeometryBuilder.cxx:121
 AliMUONSt2GeometryBuilder.cxx:122
 AliMUONSt2GeometryBuilder.cxx:123
 AliMUONSt2GeometryBuilder.cxx:124
 AliMUONSt2GeometryBuilder.cxx:125
 AliMUONSt2GeometryBuilder.cxx:126
 AliMUONSt2GeometryBuilder.cxx:127
 AliMUONSt2GeometryBuilder.cxx:128
 AliMUONSt2GeometryBuilder.cxx:129
 AliMUONSt2GeometryBuilder.cxx:130
 AliMUONSt2GeometryBuilder.cxx:131
 AliMUONSt2GeometryBuilder.cxx:132
 AliMUONSt2GeometryBuilder.cxx:133
 AliMUONSt2GeometryBuilder.cxx:134
 AliMUONSt2GeometryBuilder.cxx:135
 AliMUONSt2GeometryBuilder.cxx:136
 AliMUONSt2GeometryBuilder.cxx:137
 AliMUONSt2GeometryBuilder.cxx:138
 AliMUONSt2GeometryBuilder.cxx:139
 AliMUONSt2GeometryBuilder.cxx:140
 AliMUONSt2GeometryBuilder.cxx:141
 AliMUONSt2GeometryBuilder.cxx:142
 AliMUONSt2GeometryBuilder.cxx:143
 AliMUONSt2GeometryBuilder.cxx:144
 AliMUONSt2GeometryBuilder.cxx:145
 AliMUONSt2GeometryBuilder.cxx:146
 AliMUONSt2GeometryBuilder.cxx:147
 AliMUONSt2GeometryBuilder.cxx:148
 AliMUONSt2GeometryBuilder.cxx:149
 AliMUONSt2GeometryBuilder.cxx:150
 AliMUONSt2GeometryBuilder.cxx:151
 AliMUONSt2GeometryBuilder.cxx:152
 AliMUONSt2GeometryBuilder.cxx:153
 AliMUONSt2GeometryBuilder.cxx:154
 AliMUONSt2GeometryBuilder.cxx:155
 AliMUONSt2GeometryBuilder.cxx:156
 AliMUONSt2GeometryBuilder.cxx:157
 AliMUONSt2GeometryBuilder.cxx:158
 AliMUONSt2GeometryBuilder.cxx:159
 AliMUONSt2GeometryBuilder.cxx:160
 AliMUONSt2GeometryBuilder.cxx:161
 AliMUONSt2GeometryBuilder.cxx:162
 AliMUONSt2GeometryBuilder.cxx:163
 AliMUONSt2GeometryBuilder.cxx:164
 AliMUONSt2GeometryBuilder.cxx:165
 AliMUONSt2GeometryBuilder.cxx:166
 AliMUONSt2GeometryBuilder.cxx:167
 AliMUONSt2GeometryBuilder.cxx:168
 AliMUONSt2GeometryBuilder.cxx:169
 AliMUONSt2GeometryBuilder.cxx:170
 AliMUONSt2GeometryBuilder.cxx:171
 AliMUONSt2GeometryBuilder.cxx:172
 AliMUONSt2GeometryBuilder.cxx:173
 AliMUONSt2GeometryBuilder.cxx:174
 AliMUONSt2GeometryBuilder.cxx:175
 AliMUONSt2GeometryBuilder.cxx:176
 AliMUONSt2GeometryBuilder.cxx:177
 AliMUONSt2GeometryBuilder.cxx:178
 AliMUONSt2GeometryBuilder.cxx:179
 AliMUONSt2GeometryBuilder.cxx:180
 AliMUONSt2GeometryBuilder.cxx:181
 AliMUONSt2GeometryBuilder.cxx:182
 AliMUONSt2GeometryBuilder.cxx:183
 AliMUONSt2GeometryBuilder.cxx:184
 AliMUONSt2GeometryBuilder.cxx:185
 AliMUONSt2GeometryBuilder.cxx:186
 AliMUONSt2GeometryBuilder.cxx:187
 AliMUONSt2GeometryBuilder.cxx:188
 AliMUONSt2GeometryBuilder.cxx:189
 AliMUONSt2GeometryBuilder.cxx:190
 AliMUONSt2GeometryBuilder.cxx:191
 AliMUONSt2GeometryBuilder.cxx:192
 AliMUONSt2GeometryBuilder.cxx:193
 AliMUONSt2GeometryBuilder.cxx:194
 AliMUONSt2GeometryBuilder.cxx:195
 AliMUONSt2GeometryBuilder.cxx:196
 AliMUONSt2GeometryBuilder.cxx:197
 AliMUONSt2GeometryBuilder.cxx:198
 AliMUONSt2GeometryBuilder.cxx:199
 AliMUONSt2GeometryBuilder.cxx:200
 AliMUONSt2GeometryBuilder.cxx:201
 AliMUONSt2GeometryBuilder.cxx:202
 AliMUONSt2GeometryBuilder.cxx:203
 AliMUONSt2GeometryBuilder.cxx:204
 AliMUONSt2GeometryBuilder.cxx:205
 AliMUONSt2GeometryBuilder.cxx:206
 AliMUONSt2GeometryBuilder.cxx:207
 AliMUONSt2GeometryBuilder.cxx:208
 AliMUONSt2GeometryBuilder.cxx:209
 AliMUONSt2GeometryBuilder.cxx:210
 AliMUONSt2GeometryBuilder.cxx:211
 AliMUONSt2GeometryBuilder.cxx:212
 AliMUONSt2GeometryBuilder.cxx:213
 AliMUONSt2GeometryBuilder.cxx:214
 AliMUONSt2GeometryBuilder.cxx:215
 AliMUONSt2GeometryBuilder.cxx:216
 AliMUONSt2GeometryBuilder.cxx:217
 AliMUONSt2GeometryBuilder.cxx:218
 AliMUONSt2GeometryBuilder.cxx:219
 AliMUONSt2GeometryBuilder.cxx:220
 AliMUONSt2GeometryBuilder.cxx:221
 AliMUONSt2GeometryBuilder.cxx:222
 AliMUONSt2GeometryBuilder.cxx:223