+/**************************************************************************
+ * 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. *
+ **************************************************************************/
+
+/*
+$Log$
+Revision 1.19 2001/07/17 09:51:38 morsch
+Place station 3 inside Dipole.
+
+Revision 1.18 2001/04/06 11:24:43 morsch
+Dependency on implementations of AliSegmentation and AliMUONResponse moved to AliMUONFactory class.
+Static method Build() builds the MUON system out of chambers, segmentation and response.
+
+Revision 1.17 2001/03/17 10:07:20 morsch
+Correct inconsistent variable name / method name / comments.
+
+Revision 1.16 2001/01/27 08:50:50 morsch
+Call non default constructors of segmentation classes.
+
+Revision 1.15 2001/01/17 20:57:45 hristov
+Unused variable removed
+
+Revision 1.14 2000/12/21 22:42:55 morsch
+Constructor contains default set-up for segmentation.
+Record charged particles only.
+
+Revision 1.13 2000/10/06 10:03:38 morsch
+Call to gMC->VolId() moved to Init()
+
+Revision 1.12 2000/10/02 21:28:09 fca
+Removal of useless dependecies via forward declarations
+
+Revision 1.11 2000/06/27 07:31:07 morsch
+fChambers = 0; deleted from constructor.
+
+Revision 1.10 2000/06/26 14:02:38 morsch
+Add class AliMUONConstants with MUON specific constants using static memeber data and access methods.
+
+Revision 1.9 2000/06/15 07:58:49 morsch
+Code from MUON-dev joined
+
+Revision 1.8.4.9 2000/06/12 19:20:49 morsch
+Constructor sets default geometry, segmentation and response parameters.
+
+Revision 1.8.4.8 2000/06/09 21:55:28 morsch
+Most coding rule violations corrected.
+
+Revision 1.8.4.7 2000/05/02 13:15:18 morsch
+Coding rule violations RS3, RN13 corected
+
+Revision 1.8.4.6 2000/05/02 10:24:26 morsch
+Public access to fdGas and fdAlu of AliMUONChamber replaced by getters.
+
+Revision 1.8.4.5 2000/04/26 19:58:47 morsch
+Obsolete reference to trig_ removed.
+
+Revision 1.8.4.4 2000/04/19 19:42:47 morsch
+change NCH to kNCH
+
+Revision 1.8.4.3 2000/02/17 08:17:43 morsch
+Gammas and neutrons are also scored in the stepmanager
+*/
+
/////////////////////////////////////////////////////////
// Manager and hits classes for set:MUON version 0 //
/////////////////////////////////////////////////////////
#include <TNode.h>
#include <TRandom.h>
#include <TLorentzVector.h>
+#include <iostream.h>
#include "AliMUONv0.h"
+#include "AliMUONChamber.h"
#include "AliRun.h"
#include "AliMC.h"
-#include "iostream.h"
+#include "AliMagF.h"
+#include "AliMUONHit.h"
+#include "AliMUONPadHit.h"
#include "AliCallf77.h"
#include "AliConst.h"
-
-#define trig trig_
-
-extern "C" void type_of_call trig(float (*)[4], float (*)[4], int& iflag);
-
+#include "AliMUONConstants.h"
+#include "AliMUONFactory.h"
ClassImp(AliMUONv0)
//___________________________________________
AliMUONv0::AliMUONv0() : AliMUON()
{
+// Constructor
fChambers = 0;
}
AliMUONv0::AliMUONv0(const char *name, const char *title)
: AliMUON(name,title)
{
-//
-// z-Positions of Chambers
-// const Float_t zch[7]={515., 690., 962.85, 1249., 1449., 1610, 1710.};
- const Float_t zch[7]={515., 690., 975., 1249., 1449., 1610, 1710.};
-//
-// inner diameter
- const Float_t dmi[7]={ 35., 47., 66., 80., 80., 96., 101.96};
-//
-// outer diameter
- const Float_t dma[7]={183., 245., 316.6, 520., 520., 824., 874.};
-//
- Int_t k;
-
- fChambers = new TObjArray(14);
-
- for (Int_t i=0; i<7; i++) {
- for (Int_t j=0; j< 2; j++) {
-//
-//
-// Default Parameters for Muon Tracking Stations
- k=2*i+j;
-//
- (*fChambers)[k] = new AliMUONchamber();
- AliMUONchamber* chamber = (AliMUONchamber*) (*fChambers)[k];
- chamber->SetGid(0);
- chamber->SetZPOS(zch[i]);
-//
- chamber->InitGeo(zch[i]);
- chamber->SetRInner(dmi[i]/2);
- chamber->SetROuter(dma[i]/2);
-//
- } // Chamber j in
- } // Station i
- fMaxStepGas=0.01;
- fMaxStepAlu=0.1;
- fMaxDestepGas=-1;
- fMaxDestepAlu=-1;
-}
-
-//___________________________________________
-void AliMUONv0::Trigger(Float_t (*x)[4], Float_t (*y)[4], Int_t& iflag)
-{
- trig(x,y,iflag);
+// Constructor
+ AliMUONFactory::Build(this, "default");
}
-//___________________________________________
void AliMUONv0::CreateGeometry()
{
- Int_t *idtmed = fIdtmed->GetArray()-1099;
-//
-// Note: all chambers have the same structure, which could be
-// easily parameterised. This was intentionally not done in order
-// to give a starting point for the implementation of the actual
-// design of each station.
-
-// Distance between Stations
+// Creates coarse geometry for hit density simulations
+ Int_t *idtmed = fIdtmed->GetArray()-1099;
//
- Float_t bpar[3];
- Float_t tpar[3];
- Float_t pgpar[10];
- Float_t zpos1, zpos2, zfpos;
- Float_t dframep=3.; // Value for station 3 should be 6 ...
- Float_t dframep1=3.;
- Bool_t frames=true;
-
-
- Float_t dframez=0.9;
- Float_t dr;
- Float_t dstation[5]={8., 8., 24.3, 8., 8.};
- // Float_t dstation[5]={20., 20., 24.3, 20., 20.};
- // Float_t dstation[5]={20., 100., 100., 100., 100.};
-
-//
-// Rotation matrices in the x-y plane
- Int_t idrotm[1199];
-// phi= 0 deg
- AliMatrix(idrotm[1100], 90., 0., 90., 90., 0., 0.);
-// phi= 90 deg
- AliMatrix(idrotm[1101], 90., 90., 90., 180., 0., 0.);
-// phi= 180 deg
- AliMatrix(idrotm[1102], 90., 180., 90., 270., 0., 0.);
-// phi= 270 deg
- AliMatrix(idrotm[1103], 90., 270., 90., 0., 0., 0.);
-//
- Float_t phi=2*TMath::Pi()/12/2;
-
-//
-// pointer to the current chamber
-// pointer to the current chamber
- Int_t idAlu1=idtmed[1103];
- Int_t idAlu2=idtmed[1104];
-// Int_t idAlu1=idtmed[1100];
-// Int_t idAlu2=idtmed[1100];
+ Float_t zpos, dAlu, tpar[3];
Int_t idAir=idtmed[1100];
- Int_t idGas=idtmed[1105];
-
-
- AliMUONchamber *iChamber;
-//********************************************************************
-// Station 1 **
-//********************************************************************
-// CONCENTRIC
- iChamber=(AliMUONchamber*) (*fChambers)[0];
- zpos1=iChamber->ZPosition()-dstation[0]/2;
- zpos2=zpos1+dstation[0];
- zfpos=-(iChamber->fdGas+dframez)/2;
-
-//
-// Mother volume
- tpar[0] = iChamber->RInner()-dframep1;
- tpar[1] = (iChamber->ROuter()+dframep1)/TMath::Cos(phi);
- //tpar[2] = dstation[0]/2;
- tpar[2] = dstation[0]/4;
-
- gMC->Gsvolu("C01M", "TUBE", idAir, tpar, 3);
- gMC->Gsvolu("C02M", "TUBE", idAir, tpar, 3);
- gMC->Gspos("C01M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
- gMC->Gspos("C02M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
-// Aluminium frames
-// Outer frames
- pgpar[0] = 360/12/2;
- pgpar[1] = 360.;
- pgpar[2] = 12.;
- pgpar[3] = 2;
- pgpar[4] = -dframez/2;
- pgpar[5] = iChamber->ROuter();
- pgpar[6] = pgpar[5]+dframep1;
- pgpar[7] = +dframez/2;
- pgpar[8] = pgpar[5];
- pgpar[9] = pgpar[6];
- gMC->Gsvolu("C01O", "PGON", idAlu1, pgpar, 10);
- gMC->Gsvolu("C02O", "PGON", idAlu1, pgpar, 10);
- gMC->Gspos("C01O",1,"C01M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C01O",2,"C01M", 0.,0.,+zfpos, 0,"ONLY");
- gMC->Gspos("C02O",1,"C02M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C02O",2,"C02M", 0.,0.,+zfpos, 0,"ONLY");
-//
-// Inner frame
- tpar[0]= iChamber->RInner()-dframep1;
- tpar[1]= iChamber->RInner();
- tpar[2]= dframez/2;
- gMC->Gsvolu("C01I", "TUBE", idAlu1, tpar, 3);
- gMC->Gsvolu("C02I", "TUBE", idAlu1, tpar, 3);
-
- gMC->Gspos("C01I",1,"C01M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C01I",2,"C01M", 0.,0.,+zfpos, 0,"ONLY");
- gMC->Gspos("C02I",1,"C02M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C02I",2,"C02M", 0.,0.,+zfpos, 0,"ONLY");
-//
-// Frame Crosses
- if (frames) {
-
- bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
- bpar[1] = dframep1/2;
- bpar[2] = dframez/2;
- gMC->Gsvolu("C01B", "BOX", idAlu1, bpar, 3);
- gMC->Gsvolu("C02B", "BOX", idAlu1, bpar, 3);
-
- gMC->Gspos("C01B",1,"C01M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C01B",2,"C01M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C01B",3,"C01M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C01B",4,"C01M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C01B",5,"C01M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C01B",6,"C01M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C01B",7,"C01M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C01B",8,"C01M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
-idrotm[1101],"ONLY");
-
- gMC->Gspos("C02B",1,"C02M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C02B",2,"C02M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C02B",3,"C02M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C02B",4,"C02M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C02B",5,"C02M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C02B",6,"C02M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C02B",7,"C02M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C02B",8,"C02M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
-idrotm[1101],"ONLY");
- }
-//
-// Chamber Material represented by Alu sheet
- tpar[0]= iChamber->RInner();
- tpar[1]= iChamber->ROuter();
- tpar[2] = (iChamber->fdGas+iChamber->fdAlu)/2;
- gMC->Gsvolu("C01A", "TUBE", idAlu2, tpar, 3);
- gMC->Gsvolu("C02A", "TUBE",idAlu2, tpar, 3);
- gMC->Gspos("C01A", 1, "C01M", 0., 0., 0., 0, "ONLY");
- gMC->Gspos("C02A", 1, "C02M", 0., 0., 0., 0, "ONLY");
-//
-// Sensitive volumes
- // tpar[2] = iChamber->fdGas;
- tpar[2] = iChamber->fdGas/2;
- gMC->Gsvolu("C01G", "TUBE", idtmed[1108], tpar, 3);
- gMC->Gsvolu("C02G", "TUBE", idtmed[1108], tpar, 3);
- gMC->Gspos("C01G", 1, "C01A", 0., 0., 0., 0, "ONLY");
- gMC->Gspos("C02G", 1, "C02A", 0., 0., 0., 0, "ONLY");
-//
-// Frame Crosses to be placed inside gas
- if (frames) {
-
- dr = (iChamber->ROuter() - iChamber->RInner());
- bpar[0] = TMath::Sqrt(dr*dr-dframep1*dframep1/4)/2;
- bpar[1] = dframep1/2;
- bpar[2] = iChamber->fdGas/2;
- gMC->Gsvolu("C01F", "BOX", idAlu1, bpar, 3);
- gMC->Gsvolu("C02F", "BOX", idAlu1, bpar, 3);
-
- gMC->Gspos("C01F",1,"C01G", +iChamber->RInner()+bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C01F",2,"C01G", -iChamber->RInner()-bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C01F",3,"C01G", 0, +iChamber->RInner()+bpar[0] , 0,
-idrotm[1101],"ONLY");
- gMC->Gspos("C01F",4,"C01G", 0, -iChamber->RInner()-bpar[0] , 0,
-idrotm[1101],"ONLY");
-
- gMC->Gspos("C02F",1,"C02G", +iChamber->RInner()+bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C02F",2,"C02G", -iChamber->RInner()-bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C02F",3,"C02G", 0, +iChamber->RInner()+bpar[0] , 0,
-idrotm[1101],"ONLY");
- gMC->Gspos("C02F",4,"C02G", 0, -iChamber->RInner()-bpar[0] , 0,
- idrotm[1101],"ONLY");
- }
-
-//
-//
-//********************************************************************
-// Station 2 **
-//********************************************************************
- iChamber=(AliMUONchamber*) (*fChambers)[2];
- zpos1=iChamber->ZPosition()-dstation[1]/2;
- zpos2=zpos1+dstation[1];
- zfpos=-(iChamber->fdGas+dframez)/2;
-
-//
-// Mother volume
- tpar[0] = iChamber->RInner()-dframep;
- tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
- //tpar[2] = dstation[1]/2;
- tpar[2] = dstation[1]/4;
-
- gMC->Gsvolu("C03M", "TUBE", idAir, tpar, 3);
- gMC->Gsvolu("C04M", "TUBE", idAir, tpar, 3);
- gMC->Gspos("C03M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
- gMC->Gspos("C04M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
-// Aluminium frames
-// Outer frames
- pgpar[0] = 360/12/2;
- pgpar[1] = 360.;
- pgpar[2] = 12.;
- pgpar[3] = 2;
- pgpar[4] = -dframez/2;
- pgpar[5] = iChamber->ROuter();
- pgpar[6] = pgpar[5]+dframep;
- pgpar[7] = +dframez/2;
- pgpar[8] = pgpar[5];
- pgpar[9] = pgpar[6];
- gMC->Gsvolu("C03O", "PGON", idAlu1, pgpar, 10);
- gMC->Gsvolu("C04O", "PGON", idAlu1, pgpar, 10);
- gMC->Gspos("C03O",1,"C03M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C03O",2,"C03M", 0.,0.,+zfpos, 0,"ONLY");
- gMC->Gspos("C04O",1,"C04M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C04O",2,"C04M", 0.,0.,+zfpos, 0,"ONLY");
-//
-// Inner frame
- tpar[0]= iChamber->RInner()-dframep;
- tpar[1]= iChamber->RInner();
- tpar[2]= dframez/2;
- gMC->Gsvolu("C03I", "TUBE", idAlu1, tpar, 3);
- gMC->Gsvolu("C04I", "TUBE", idAlu1, tpar, 3);
-
- gMC->Gspos("C03I",1,"C03M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C03I",2,"C03M", 0.,0.,+zfpos, 0,"ONLY");
- gMC->Gspos("C04I",1,"C04M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C04I",2,"C04M", 0.,0.,+zfpos, 0,"ONLY");
-//
-// Frame Crosses
- if (frames) {
-
- bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
- bpar[1] = dframep/2;
- bpar[2] = dframez/2;
- gMC->Gsvolu("C03B", "BOX", idAlu1, bpar, 3);
- gMC->Gsvolu("C04B", "BOX", idAlu1, bpar, 3);
-
- gMC->Gspos("C03B",1,"C03M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C03B",2,"C03M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C03B",3,"C03M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C03B",4,"C03M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C03B",5,"C03M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C03B",6,"C03M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C03B",7,"C03M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C03B",8,"C03M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
-idrotm[1101],"ONLY");
-
- gMC->Gspos("C04B",1,"C04M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C04B",2,"C04M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C04B",3,"C04M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C04B",4,"C04M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C04B",5,"C04M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C04B",6,"C04M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C04B",7,"C04M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C04B",8,"C04M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
-idrotm[1101],"ONLY");
- }
-//
-// Chamber Material represented by Alu sheet
- tpar[0]= iChamber->RInner();
- tpar[1]= iChamber->ROuter();
- tpar[2] = (iChamber->fdGas+iChamber->fdAlu)/2;
- gMC->Gsvolu("C03A", "TUBE", idAlu2, tpar, 3);
- gMC->Gsvolu("C04A", "TUBE", idAlu2, tpar, 3);
- gMC->Gspos("C03A", 1, "C03M", 0., 0., 0., 0, "ONLY");
- gMC->Gspos("C04A", 1, "C04M", 0., 0., 0., 0, "ONLY");
-//
-// Sensitive volumes
- // tpar[2] = iChamber->fdGas;
- tpar[2] = iChamber->fdGas/2;
- gMC->Gsvolu("C03G", "TUBE", idGas, tpar, 3);
- gMC->Gsvolu("C04G", "TUBE", idGas, tpar, 3);
- gMC->Gspos("C03G", 1, "C03A", 0., 0., 0., 0, "ONLY");
- gMC->Gspos("C04G", 1, "C04A", 0., 0., 0., 0, "ONLY");
-
- if (frames) {
-//
-// Frame Crosses to be placed inside gas
- dr = (iChamber->ROuter() - iChamber->RInner());
- bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
- bpar[1] = dframep/2;
- bpar[2] = iChamber->fdGas/2;
- gMC->Gsvolu("C03F", "BOX", idAlu1, bpar, 3);
- gMC->Gsvolu("C04F", "BOX", idAlu1, bpar, 3);
-
- gMC->Gspos("C03F",1,"C03G", +iChamber->RInner()+bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C03F",2,"C03G", -iChamber->RInner()-bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C03F",3,"C03G", 0, +iChamber->RInner()+bpar[0] , 0,
-idrotm[1101],"ONLY");
- gMC->Gspos("C03F",4,"C03G", 0, -iChamber->RInner()-bpar[0] , 0,
-idrotm[1101],"ONLY");
-
- gMC->Gspos("C04F",1,"C04G", +iChamber->RInner()+bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C04F",2,"C04G", -iChamber->RInner()-bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C04F",3,"C04G", 0, +iChamber->RInner()+bpar[0] , 0,
-idrotm[1101],"ONLY");
- gMC->Gspos("C04F",4,"C04G", 0, -iChamber->RInner()-bpar[0] , 0,
- idrotm[1101],"ONLY");
+ Int_t idAlu=idtmed[1103];
+
+ AliMUONChamber *iChamber;
+ // Loop over all chambers (tracking and trigger)
+ for (Int_t ch = 0; ch < AliMUONConstants::NCh(); ch++) {
+ char alu[8];
+ char gas[8];
+
+ iChamber=(AliMUONChamber*) (*fChambers)[ch];
+ // Z of the chamber
+ zpos=iChamber->Z();
+ dAlu=iChamber->DAlu();
+ if (ch < AliMUONConstants::NTrackingCh()) {
+ // tracking chambers
+ sprintf(alu,"CA0%1d",ch);
+ sprintf(gas,"CG0%1d",ch);
+ } else {
+ // trigger chambers
+ sprintf(alu,"CA%2d",ch);
+ sprintf(gas,"CG%2d",ch);
+ }
+//
+ tpar[0] = iChamber->RInner();
+ tpar[1] = iChamber->ROuter();
+ tpar[2] = (dAlu+0.2)/2.;
+ if (ch !=4 && ch !=5) {
+ gMC->Gsvolu(alu, "TUBE", idAlu, tpar, 3);
+ tpar[2] = 0.1;
+ gMC->Gsvolu(gas, "TUBE", idAir, tpar, 3);
+ } else {
+ gMC->Gsvolu(alu, "TUBE", idAlu, tpar, 3);
+ tpar[2] = 0.1;
+ gMC->Gsvolu(gas, "TUBE", idAir, tpar, 3);
+ }
+ gMC->Gspos(gas, 1, alu, 0., 0., 0., 0, "ONLY");
+ if (ch == 4 || ch ==5) {
+ if (gMC->VolId("DDIP")) {
+ gMC->Gspos(alu, 1, "DDIP", 0., 0., zpos, 0, "ONLY");
+ } else {
+ gMC->Gspos(alu, 1, "ALIC", 0., 0., zpos, 0, "ONLY");
+ }
+ } else {
+ gMC->Gspos(alu, 1, "ALIC", 0., 0., zpos, 0, "ONLY");
+ }
}
-
-
-#ifdef FUTURE
-//********************************************************************
-// Station 3 **
-//********************************************************************
-// CONCENTRIC
- iChamber=(AliMUONchamber*) (*fChambers)[4];
- zpos1=iChamber->ZPosition(); // 975-13.75
- zpos2=zpos1 // +dstation;
- +24.3;
-//
-// Mother volume
- tpar[0] = iChamber->RInner()-dframep;
- tpar[1]= TMath::Sqrt((iChamber->ROuter()+dframep)*(iChamber->ROuter()+dframep) + dframep*dframep) ;
-
- tpar[2] = // 3.;
- 5.325*2;
- gMC->Gsvolu("C05M", "TUBE", idAir, tpar, 3);
- gMC->Gsvolu("C06M", "TUBE", idAir, tpar, 3);
- gMC->Gspos("C05M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
- gMC->Gspos("C06M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
-//
-// Mother volume for one quadrant
- tspar[0]= tpar[0];
- tspar[1]= tpar[1];
- tspar[2]= // dframez;
- 5.325;
- tspar[3] = 0.-TMath::ATan2(dframep/2.,iChamber->RInner()-dframep)*180/kPI;
- tspar[4] = 90.+TMath::ATan2(dframep/2,iChamber->RInner()-dframep)*180/kPI;
- gMC->Gsvolu("C05Q", "TUBS", idAir, tspar, 5);
- gMC->Gsvolu("C06Q", "TUBS", idAir, tspar, 5);
-// Position the four quadrants
- gMC->Gspos("C05Q",1,"C05M", 0., 0., 5.325, idrotm[1100], "ONLY");
- gMC->Gspos("C05Q",2,"C05M", 0., 0.,-5.325, idrotm[1101], "ONLY");
- gMC->Gspos("C05Q",3,"C05M", 0., 0., 5.325, idrotm[1102], "ONLY");
- gMC->Gspos("C05Q",4,"C05M", 0., 0.,-5.325, idrotm[1103], "ONLY");
-
- gMC->Gspos("C06Q",1,"C06M", 0., 0., 5.325, idrotm[1100], "ONLY");
- gMC->Gspos("C06Q",2,"C06M", 0., 0.,-5.325, idrotm[1101], "ONLY");
- gMC->Gspos("C06Q",3,"C06M", 0., 0., 5.325, idrotm[1102], "ONLY");
- gMC->Gspos("C06Q",4,"C06M", 0., 0.,-5.325, idrotm[1103], "ONLY");
-// Aluminium frames
-// Outer frame
- tspar[0]= iChamber->ROuter();
- tspar[1]= iChamber->ROuter()+dframep;
- tspar[3] = 0.;
- tspar[4] = 90.;
- gMC->Gsvolu("C05O", "TUBS", idAir, tspar, 5);
- gMC->Gsvolu("C06O", "TUBS", idAir, tspar, 5);
- gMC->Gspos("C05O",1,"C05Q", 0.,0.,0., 0,"ONLY");
- gMC->Gspos("C06O",1,"C06Q", 0.,0.,0., 0,"ONLY");
-//
-// Inner frame
- tspar[0]= iChamber->RInner()-dframep;
- tspar[1]= iChamber->RInner();
- gMC->Gsvolu("C05I", "TUBS", idAir, tspar, 5);
- gMC->Gsvolu("C06I", "TUBS", idAir, tspar, 5);
- gMC->Gspos("C05I",1,"C05Q", 0.,0.,0., 0,"ONLY");
- gMC->Gspos("C06I",1,"C06Q", 0.,0.,0., 0,"ONLY");
-//
-// Boundary half frame
- bpar[0] = (iChamber->ROuter() +dframep*2 - iChamber->RInner())/2;
- bpar[1] = dframep/4;
- bpar[2] = 5.325;
- gMC->Gsvolu("C05B", "BOX", idAlu1, bpar, 3);
- gMC->Gsvolu("C06B", "BOX", idAlu1, bpar, 3);
-//place 2 boudaries
- gMC->Gspos("C05B",1,"C05Q", iChamber->RInner()+bpar[0] ,-bpar[1],0., idrotm[1100],"ONLY");
- gMC->Gspos("C05B",2,"C05Q", -bpar[1],iChamber->RInner()+bpar[0] ,0., idrotm[1101],"ONLY");
- gMC->Gspos("C06B",1,"C06Q", iChamber->RInner()+bpar[0] ,-bpar[1],0., idrotm[1100],"ONLY");
- gMC->Gspos("C06B",2,"C06Q", -bpar[1],iChamber->RInner()+bpar[0] ,0., idrotm[1101],"ONLY");
-//
-// Boundary second half frame (should not overlapp with sensitive surface, nor frames)
-// Effective outer radius due to circle effect
- rMax = TMath::Sqrt(
- iChamber->ROuter()*iChamber->ROuter() - dframep*dframep );
- bpar[0] = (rMax - iChamber->RInner() ) /2;
- bpar[2] = (5.325- (0.055 + 0.325)) / 2;
- gMC->Gsvolu("C05H", "BOX", idAlu1, bpar, 3);
- gMC->Gsvolu("C06H", "BOX", idAlu1, bpar, 3);
-//place 2 boudaries
- gMC->Gspos("C05H",1,"C05Q", rMin+bpar[0],bpar[1], 0.055+0.325+bpar[2] , idrotm[1100],"ONLY");
- gMC->Gspos("C05H",2,"C05Q", rMin+bpar[0],bpar[1],-(0.055+0.325+bpar[2]), idrotm[1100],"ONLY");
- gMC->Gspos("C05H",3,"C05Q", bpar[1],rMin+bpar[0], 0.055+0.325+bpar[2] , idrotm[1101],"ONLY");
- gMC->Gspos("C05H",4,"C05Q", bpar[1],rMin+bpar[0],-(0.055+0.325+bpar[2]), idrotm[1101],"ONLY");
- gMC->Gspos("C06H",1,"C06Q", rMin+bpar[0],bpar[1], 0.055+0.325+bpar[2] , idrotm[1100],"ONLY");
- gMC->Gspos("C06H",2,"C06Q", rMin+bpar[0],bpar[1],-(0.055+0.325+bpar[2]), idrotm[1100],"ONLY");
- gMC->Gspos("C06H",3,"C06Q", bpar[1],rMin+bpar[0], 0.055+0.325+bpar[2] , idrotm[1101],"ONLY");
- gMC->Gspos("C06H",4,"C06Q", bpar[1],rMin+bpar[0],-(0.055+0.325+bpar[2]), idrotm[1101],"ONLY");
-//
-// Chamber Material represented by Alu sheet
- // tspar[2] = (iChamber->fdAlu)+(iChamber->fdGas);
- tspar[0]= iChamber->RInner();
- tspar[1]= iChamber->ROuter();
- tspar[2] = 0.055 + 0.325;
- gMC->Gsvolu("C05A", "TUBS", idAlu2, tspar, 5);
- gMC->Gsvolu("C06A", "TUBS", idAlu2, tspar, 5);
- gMC->Gspos("C05A", 1, "C05Q", 0., 0., 0., 0, "ONLY");
- gMC->Gspos("C06A", 1, "C06Q", 0., 0., 0., 0, "ONLY");
-//
-// Sensitive volumes
- // tpar[2] = iChamber->fdGas;
- tspar[2] = 0.325;
- gMC->Gsvolu("C05G", "TUBS", idGas, tspar, 5);
- gMC->Gsvolu("C06G", "TUBS", idGas, tspar, 5);
- gMC->Gspos("C05G", 1, "C05A", 0., 0., 0., 0, "ONLY");
- gMC->Gspos("C06G", 1, "C06A", 0., 0., 0., 0, "ONLY");
-//
-// Overwrite sensitive volume with ALU
-// Overwrite Gaz volume
- bpar[2] = 0.325;
- gMC->Gsvolu("C05Z", "BOX", idAlu1, bpar, 3);
- gMC->Gsvolu("C06Z", "BOX", idAlu1, bpar, 3);
- gMC->Gspos("C05Z",1,"C05G", rMin+bpar[0] ,bpar[1],0., idrotm[1100],"ONLY");
- gMC->Gspos("C05Z",2,"C05G", bpar[1], rMin+bpar[0] ,0., idrotm[1101],"ONLY");
- gMC->Gspos("C06Z",1,"C06G", rMin+bpar[0] ,bpar[1],0., idrotm[1100],"ONLY");
- gMC->Gspos("C06Z",2,"C06G", bpar[1], rMin+bpar[0] ,0., idrotm[1101],"ONLY");
-#else
-//********************************************************************
-// Station 3 **
-//********************************************************************
- iChamber=(AliMUONchamber*) (*fChambers)[4];
- zpos1=iChamber->ZPosition()-dstation[2]/2;
- zpos2=zpos1+dstation[2];
- zfpos= // -(iChamber->fdGas+dframez)/2;
- - ( 0.65 + 5.)/2;
-//
-// Mother volume
- tpar[0] = iChamber->RInner()-dframep;
- tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
- tpar[2] = // dstation[3]/2;
- dstation[2]/4;
- gMC->Gsvolu("C05M", "TUBE", idAir, tpar, 3);
- gMC->Gsvolu("C06M", "TUBE", idAir, tpar, 3);
- gMC->Gspos("C05M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
- gMC->Gspos("C06M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
-// Aluminium frames
-// Outer frames
- pgpar[0] = 360/12/2;
- pgpar[1] = 360.;
- pgpar[2] = 12.;
- pgpar[3] = 2;
- pgpar[4] = // -dframez/2;
- - 5./2;
- pgpar[5] = iChamber->ROuter();
- pgpar[6] = pgpar[5]+dframep;
- pgpar[7] = // +dframez/2;
- 5./2;
- pgpar[8] = pgpar[5];
- pgpar[9] = pgpar[6];
- gMC->Gsvolu("C05O", "PGON", idAlu1, pgpar, 10);
- gMC->Gsvolu("C06O", "PGON", idAlu1, pgpar, 10);
- gMC->Gspos("C05O",1,"C05M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C05O",2,"C05M", 0.,0.,+zfpos, 0,"ONLY");
- gMC->Gspos("C06O",1,"C06M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C06O",2,"C06M", 0.,0.,+zfpos, 0,"ONLY");
-//
-// Inner frame
- tpar[0]= iChamber->RInner()-dframep;
- tpar[1]= iChamber->RInner();
- tpar[2]= // dframez/2;
- 5./2;
- gMC->Gsvolu("C05I", "TUBE", idAlu1, tpar, 3);
- gMC->Gsvolu("C06I", "TUBE", idAlu1, tpar, 3);
-
- gMC->Gspos("C05I",1,"C05M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C05I",2,"C05M", 0.,0.,+zfpos, 0,"ONLY");
- gMC->Gspos("C06I",1,"C06M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C06I",2,"C06M", 0.,0.,+zfpos, 0,"ONLY");
-//
-// Frame Crosses
- if (frames) {
- bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
- bpar[1] = dframep/2;
- bpar[2] = // dframez/2;
- 5./2;
- gMC->Gsvolu("C05B", "BOX", idAlu1, bpar, 3);
- gMC->Gsvolu("C06B", "BOX", idAlu1, bpar, 3);
-
- gMC->Gspos("C05B",1,"C05M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C05B",2,"C05M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C05B",3,"C05M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C05B",4,"C05M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C05B",5,"C05M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C05B",6,"C05M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C05B",7,"C05M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C05B",8,"C05M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
-idrotm[1101],"ONLY");
-
- gMC->Gspos("C06B",1,"C06M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C06B",2,"C06M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C06B",3,"C06M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C06B",4,"C06M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C06B",5,"C06M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C06B",6,"C06M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C06B",7,"C06M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C06B",8,"C06M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
- idrotm[1101],"ONLY");
- }
-
-
-//
-// Chamber Material represented by Alu sheet
- tpar[0]= iChamber->RInner();
- tpar[1]= iChamber->ROuter();
- tpar[2] = // (iChamber->fdGas+iChamber->fdAlu)/2;
- 0.65 + 0.055;
- gMC->Gsvolu("C05A", "TUBE", idAlu2, tpar, 3);
- gMC->Gsvolu("C06A", "TUBE", idAlu2, tpar, 3);
- gMC->Gspos("C05A", 1, "C05M", 0., 0., 0., 0, "ONLY");
- gMC->Gspos("C06A", 1, "C06M", 0., 0., 0., 0, "ONLY");
-//
-// Sensitive volumes
- tpar[2] = // iChamber->fdGas/2;
- 0.65/2;
- gMC->Gsvolu("C05G", "TUBE", idGas, tpar, 3);
- gMC->Gsvolu("C06G", "TUBE", idGas, tpar, 3);
- gMC->Gspos("C05G", 1, "C05A", 0., 0., 0., 0, "ONLY");
- gMC->Gspos("C06G", 1, "C06A", 0., 0., 0., 0, "ONLY");
-//
-// Frame Crosses to be placed inside gas
- if (frames) {
- dr = (iChamber->ROuter() - iChamber->RInner());
- bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
- bpar[1] = dframep/2;
- bpar[2] = // iChamber->fdGas/2;
- 0.65/2;
- gMC->Gsvolu("C05F", "BOX", idAlu1, bpar, 3);
- gMC->Gsvolu("C06F", "BOX", idAlu1, bpar, 3);
-
- gMC->Gspos("C05F",1,"C05G", +iChamber->RInner()+bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C05F",2,"C05G", -iChamber->RInner()-bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C05F",3,"C05G", 0, +iChamber->RInner()+bpar[0] , 0,
-idrotm[1101],"ONLY");
- gMC->Gspos("C05F",4,"C05G", 0, -iChamber->RInner()-bpar[0] , 0,
-idrotm[1101],"ONLY");
-
- gMC->Gspos("C06F",1,"C06G", +iChamber->RInner()+bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C06F",2,"C06G", -iChamber->RInner()-bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C06F",3,"C06G", 0, +iChamber->RInner()+bpar[0] , 0,
-idrotm[1101],"ONLY");
- gMC->Gspos("C06F",4,"C06G", 0, -iChamber->RInner()-bpar[0] , 0,
- idrotm[1101],"ONLY");
}
-#endif
-
-//********************************************************************
-// Station 4 **
-//********************************************************************
- iChamber=(AliMUONchamber*) (*fChambers)[6];
- zpos1=iChamber->ZPosition()-dstation[3]/2;
- zpos2=zpos1+dstation[3];
- zfpos=-(iChamber->fdGas+dframez)/2;
-
-//
-// Mother volume
- tpar[0] = iChamber->RInner()-dframep;
- tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
- //tpar[2] = dstation[3]/2;
- tpar[2] = dstation[3]/4;
-
- gMC->Gsvolu("C07M", "TUBE", idAir, tpar, 3);
- gMC->Gsvolu("C08M", "TUBE", idAir, tpar, 3);
- gMC->Gspos("C07M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
- gMC->Gspos("C08M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
-// Aluminium frames
-// Outer frames
- pgpar[0] = 360/12/2;
- pgpar[1] = 360.;
- pgpar[2] = 12.;
- pgpar[3] = 2;
- pgpar[4] = -dframez/2;
- pgpar[5] = iChamber->ROuter();
- pgpar[6] = pgpar[5]+dframep;
- pgpar[7] = +dframez/2;
- pgpar[8] = pgpar[5];
- pgpar[9] = pgpar[6];
- gMC->Gsvolu("C07O", "PGON", idAlu1, pgpar, 10);
- gMC->Gsvolu("C08O", "PGON", idAlu1, pgpar, 10);
- gMC->Gspos("C07O",1,"C07M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C07O",2,"C07M", 0.,0.,+zfpos, 0,"ONLY");
- gMC->Gspos("C08O",1,"C08M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C08O",2,"C08M", 0.,0.,+zfpos, 0,"ONLY");
-//
-// Inner frame
- tpar[0]= iChamber->RInner()-dframep;
- tpar[1]= iChamber->RInner();
- tpar[2]= dframez/2;
- gMC->Gsvolu("C07I", "TUBE", idAlu1, tpar, 3);
- gMC->Gsvolu("C08I", "TUBE", idAlu1, tpar, 3);
-
- gMC->Gspos("C07I",1,"C07M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C07I",2,"C07M", 0.,0.,+zfpos, 0,"ONLY");
- gMC->Gspos("C08I",1,"C08M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C08I",2,"C08M", 0.,0.,+zfpos, 0,"ONLY");
-//
-// Frame Crosses
- if (frames) {
- bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
- bpar[1] = dframep/2;
- bpar[2] = dframez/2;
- gMC->Gsvolu("C07B", "BOX", idAlu1, bpar, 3);
- gMC->Gsvolu("C08B", "BOX", idAlu1, bpar, 3);
-
- gMC->Gspos("C07B",1,"C07M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C07B",2,"C07M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C07B",3,"C07M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C07B",4,"C07M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C07B",5,"C07M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C07B",6,"C07M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C07B",7,"C07M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C07B",8,"C07M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
-idrotm[1101],"ONLY");
-
- gMC->Gspos("C08B",1,"C08M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C08B",2,"C08M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C08B",3,"C08M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C08B",4,"C08M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C08B",5,"C08M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C08B",6,"C08M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C08B",7,"C08M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C08B",8,"C08M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
- idrotm[1101],"ONLY");
- }
-
-
-//
-// Chamber Material represented by Alu sheet
- tpar[0]= iChamber->RInner();
- tpar[1]= iChamber->ROuter();
- tpar[2] = (iChamber->fdGas+iChamber->fdAlu)/2;
- gMC->Gsvolu("C07A", "TUBE", idAlu2, tpar, 3);
- gMC->Gsvolu("C08A", "TUBE", idAlu2, tpar, 3);
- gMC->Gspos("C07A", 1, "C07M", 0., 0., 0., 0, "ONLY");
- gMC->Gspos("C08A", 1, "C08M", 0., 0., 0., 0, "ONLY");
-//
-// Sensitive volumes
- // tpar[2] = iChamber->fdGas;
- tpar[2] = iChamber->fdGas/2;
- gMC->Gsvolu("C07G", "TUBE", idGas, tpar, 3);
- gMC->Gsvolu("C08G", "TUBE", idGas, tpar, 3);
- gMC->Gspos("C07G", 1, "C07A", 0., 0., 0., 0, "ONLY");
- gMC->Gspos("C08G", 1, "C08A", 0., 0., 0., 0, "ONLY");
-//
-// Frame Crosses to be placed inside gas
- if (frames) {
- dr = (iChamber->ROuter() - iChamber->RInner());
- bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
- bpar[1] = dframep/2;
- bpar[2] = iChamber->fdGas/2;
- gMC->Gsvolu("C07F", "BOX", idAlu1, bpar, 3);
- gMC->Gsvolu("C08F", "BOX", idAlu1, bpar, 3);
-
- gMC->Gspos("C07F",1,"C07G", +iChamber->RInner()+bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C07F",2,"C07G", -iChamber->RInner()-bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C07F",3,"C07G", 0, +iChamber->RInner()+bpar[0] , 0,
-idrotm[1101],"ONLY");
- gMC->Gspos("C07F",4,"C07G", 0, -iChamber->RInner()-bpar[0] , 0,
-idrotm[1101],"ONLY");
-
- gMC->Gspos("C08F",1,"C08G", +iChamber->RInner()+bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C08F",2,"C08G", -iChamber->RInner()-bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C08F",3,"C08G", 0, +iChamber->RInner()+bpar[0] , 0,
-idrotm[1101],"ONLY");
- gMC->Gspos("C08F",4,"C08G", 0, -iChamber->RInner()-bpar[0] , 0,
-idrotm[1101],"ONLY");
- }
-//********************************************************************
-// Station 5 **
-//********************************************************************
- iChamber=(AliMUONchamber*) (*fChambers)[8];
- zpos1=iChamber->ZPosition()-dstation[4]/2;
- zpos2=zpos1+dstation[4];
- zfpos=-(iChamber->fdGas+dframez)/2;
-
-//
-// Mother volume
- tpar[0] = iChamber->RInner()-dframep;
- tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
- //tpar[2] = dstation[4]/2;
- tpar[2] = dstation[4]/4;
-
- gMC->Gsvolu("C09M", "TUBE", idAir, tpar, 3);
- gMC->Gsvolu("C10M", "TUBE", idAir, tpar, 3);
- gMC->Gspos("C09M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
- gMC->Gspos("C10M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
-// Aluminium frames
-// Outer frames
- pgpar[0] = 360/12/2;
- pgpar[1] = 360.;
- pgpar[2] = 12.;
- pgpar[3] = 2;
- pgpar[4] = -dframez/2;
- pgpar[5] = iChamber->ROuter();
- pgpar[6] = pgpar[5]+dframep;
- pgpar[7] = +dframez/2;
- pgpar[8] = pgpar[5];
- pgpar[9] = pgpar[6];
- gMC->Gsvolu("C09O", "PGON", idAlu1, pgpar, 10);
- gMC->Gsvolu("C10O", "PGON", idAlu1, pgpar, 10);
- gMC->Gspos("C09O",1,"C09M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C09O",2,"C09M", 0.,0.,+zfpos, 0,"ONLY");
- gMC->Gspos("C10O",1,"C10M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C10O",2,"C10M", 0.,0.,+zfpos, 0,"ONLY");
-//
-// Inner frame
- tpar[0]= iChamber->RInner()-dframep;
- tpar[1]= iChamber->RInner();
- tpar[2]= dframez/2;
- gMC->Gsvolu("C09I", "TUBE", idAlu1, tpar, 3);
- gMC->Gsvolu("C10I", "TUBE", idAlu1, tpar, 3);
-
- gMC->Gspos("C09I",1,"C09M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C09I",2,"C09M", 0.,0.,+zfpos, 0,"ONLY");
- gMC->Gspos("C10I",1,"C10M", 0.,0.,-zfpos, 0,"ONLY");
- gMC->Gspos("C10I",2,"C10M", 0.,0.,+zfpos, 0,"ONLY");
-
- if (frames) {
-//
-// Frame Crosses
-
- bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
- bpar[1] = dframep/2;
- bpar[2] = dframez/2;
- gMC->Gsvolu("C09B", "BOX", idAlu1, bpar, 3);
- gMC->Gsvolu("C10B", "BOX", idAlu1, bpar, 3);
-
- gMC->Gspos("C09B",1,"C09M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C09B",2,"C09M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C09B",3,"C09M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C09B",4,"C09M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C09B",5,"C09M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C09B",6,"C09M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C09B",7,"C09M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C09B",8,"C09M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
-idrotm[1101],"ONLY");
-
- gMC->Gspos("C10B",1,"C10M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C10B",2,"C10M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C10B",3,"C10M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C10B",4,"C10M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C10B",5,"C10M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C10B",6,"C10M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
-idrotm[1100],"ONLY");
- gMC->Gspos("C10B",7,"C10M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
-idrotm[1101],"ONLY");
- gMC->Gspos("C10B",8,"C10M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
- idrotm[1101],"ONLY");
- }
-
-
-//
-// Chamber Material represented by Alu sheet
- tpar[0]= iChamber->RInner();
- tpar[1]= iChamber->ROuter();
- tpar[2] = (iChamber->fdGas+iChamber->fdAlu)/2;
- gMC->Gsvolu("C09A", "TUBE", idAlu2, tpar, 3);
- gMC->Gsvolu("C10A", "TUBE", idAlu2, tpar, 3);
- gMC->Gspos("C09A", 1, "C09M", 0., 0., 0., 0, "ONLY");
- gMC->Gspos("C10A", 1, "C10M", 0., 0., 0., 0, "ONLY");
-//
-// Sensitive volumes
- // tpar[2] = iChamber->fdGas;
- tpar[2] = iChamber->fdGas/2;
- gMC->Gsvolu("C09G", "TUBE", idGas, tpar, 3);
- gMC->Gsvolu("C10G", "TUBE", idGas, tpar, 3);
- gMC->Gspos("C09G", 1, "C09A", 0., 0., 0., 0, "ONLY");
- gMC->Gspos("C10G", 1, "C10A", 0., 0., 0., 0, "ONLY");
-//
-// Frame Crosses to be placed inside gas
- if (frames) {
- dr = (iChamber->ROuter() - iChamber->RInner());
- bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
- bpar[1] = dframep/2;
- bpar[2] = iChamber->fdGas/2;
- gMC->Gsvolu("C09F", "BOX", idAlu1, bpar, 3);
- gMC->Gsvolu("C10F", "BOX", idAlu1, bpar, 3);
-
- gMC->Gspos("C09F",1,"C09G", +iChamber->RInner()+bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C09F",2,"C09G", -iChamber->RInner()-bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C09F",3,"C09G", 0, +iChamber->RInner()+bpar[0] , 0,
-idrotm[1101],"ONLY");
- gMC->Gspos("C09F",4,"C09G", 0, -iChamber->RInner()-bpar[0] , 0,
-idrotm[1101],"ONLY");
-
- gMC->Gspos("C10F",1,"C10G", +iChamber->RInner()+bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C10F",2,"C10G", -iChamber->RInner()-bpar[0] , 0, 0,
-idrotm[1100],"ONLY");
- gMC->Gspos("C10F",3,"C10G", 0, +iChamber->RInner()+bpar[0] , 0,
-idrotm[1101],"ONLY");
- gMC->Gspos("C10F",4,"C10G", 0, -iChamber->RInner()-bpar[0] , 0,
-idrotm[1101],"ONLY");
- }
-
-///////////////////////////////////////
-// GEOMETRY FOR THE TRIGGER CHAMBERS //
-///////////////////////////////////////
-
-// Distance between planes inside each trigger station
- const Float_t DTPLANES = 15.;
-
-// Parameters of the Trigger Chambers
- //Station 1
-
- const Float_t X_MC1_MIN=38.;
- const Float_t X_MC1_MED=51.;
- const Float_t X_MC1_MAX=272.;
- const Float_t Y_MC1_MIN=34.;
- const Float_t Y_MC1_MAX=51.;
- const Float_t R_MIN1=48.;
- const Float_t R_MAX1=64.;
-
-// Station 1
- iChamber=(AliMUONchamber*) (*fChambers)[10];
- zpos1=iChamber->ZPosition();
- zpos2=zpos1+DTPLANES;
-
-// Mother volume definition
- tpar[0] = iChamber->RInner();
- tpar[1] = iChamber->ROuter();
- tpar[2] = 0.4;
- gMC->Gsvolu("CM11", "TUBE", idAir, tpar, 3);
- gMC->Gsvolu("CM12", "TUBE", idAir, tpar, 3);
-
-// Definition of the flange between the beam shielding and the RPC
- tpar[0]= R_MIN1;
- tpar[1]= R_MAX1;
- tpar[2]= 0.4;
-
- gMC->Gsvolu("CF1A", "TUBE", idAlu1, tpar, 3); //Al
- gMC->Gspos("CF1A", 1, "CM11", 0., 0., 0., 0, "MANY");
- gMC->Gspos("CF1A", 2, "CM12", 0., 0., 0., 0, "MANY");
-
-// Definition of prototype for chambers in the first plane
-
- tpar[0]= 0.;
- tpar[1]= 0.;
- tpar[2]= 0.;
-
- gMC->Gsvolu("CC1A", "BOX ", idAlu1, tpar, 0); //Al
- gMC->Gsvolu("CB1A", "BOX ", idtmed[1107], tpar, 0); //Bakelite
- gMC->Gsvolu("CG1A", "BOX ", idtmed[1106], tpar, 0); //Gas streamer
-
-// chamber type A
- tpar[0] = -1.;
- tpar[1] = -1.;
-
- const Float_t X_MC1A=X_MC1_MED+(X_MC1_MAX-X_MC1_MED)/2.;
- const Float_t Y_MC1A=0.;
- const Float_t Z_MC1A=0.;
-
- tpar[2] = 0.1;
- gMC->Gsposp("CG1A", 1, "CB1A", 0., 0., 0., 0, "ONLY",tpar,3);
- tpar[2] = 0.3;
- gMC->Gsposp("CB1A", 1, "CC1A", 0., 0., 0., 0, "ONLY",tpar,3);
- tpar[2] = 0.4;
- tpar[0] = (X_MC1_MAX-X_MC1_MED)/2.;
- tpar[1] = Y_MC1_MIN;
- gMC->Gsposp("CC1A", 1, "CM11",X_MC1A,Y_MC1A,Z_MC1A, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC1A", 2, "CM11",-X_MC1A,Y_MC1A,Z_MC1A, 0, "ONLY", tpar, 3);
-
-// chamber type B
- tpar[0] = (X_MC1_MAX-X_MC1_MIN)/2.;
- tpar[1] = (Y_MC1_MAX-Y_MC1_MIN)/2.;
-
- const Float_t X_MC1B=X_MC1_MIN+tpar[0];
- const Float_t Y_MC1B=Y_MC1_MIN+tpar[1];
- const Float_t Z_MC1B=0.;
-
- gMC->Gsposp("CC1A", 3, "CM11",X_MC1B,Y_MC1B,Z_MC1B, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC1A", 4, "CM11",-X_MC1B,Y_MC1B,Z_MC1B, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC1A", 5, "CM11",X_MC1B,-Y_MC1B,Z_MC1B, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC1A", 6, "CM11",-X_MC1B,-Y_MC1B,Z_MC1B, 0, "ONLY", tpar, 3);
-
-// chamber type C
- tpar[0] = X_MC1_MAX/2;
- tpar[1] = Y_MC1_MAX/2;
-
- const Float_t X_MC1C=tpar[0];
- const Float_t Y_MC1C=Y_MC1_MAX+tpar[1];
- const Float_t Z_MC1C=0.;
-
- gMC->Gsposp("CC1A", 7, "CM11",X_MC1C,Y_MC1C,Z_MC1C, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC1A", 8, "CM11",-X_MC1C,Y_MC1C,Z_MC1C, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC1A", 9, "CM11",X_MC1C,-Y_MC1C,Z_MC1C, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC1A", 10, "CM11",-X_MC1C,-Y_MC1C,Z_MC1C, 0, "ONLY", tpar, 3);
-
-// chamber type D
- tpar[0] = X_MC1_MAX/2.;
- tpar[1] = Y_MC1_MIN;
-
- const Float_t X_MC1D=tpar[0];
- const Float_t Z_MC1D=0.;
-
- Float_t Y_MC1D=4.*Y_MC1_MIN;
- gMC->Gsposp("CC1A", 11, "CM11",X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC1A", 12, "CM11",X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC1A", 13, "CM11",-X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC1A", 14, "CM11",-X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
-
- Y_MC1D=6.*Y_MC1_MIN;
- gMC->Gsposp("CC1A", 15, "CM11",X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC1A", 16, "CM11",X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC1A", 17, "CM11",-X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC1A", 18, "CM11",-X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
-
- Y_MC1D=8.*Y_MC1_MIN;
- gMC->Gsposp("CC1A", 19, "CM11",X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC1A", 20, "CM11",X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC1A", 21, "CM11",-X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC1A", 22, "CM11",-X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
-
-// Positioning first plane in ALICE
- gMC->Gspos("CM11", 1, "ALIC", 0., 0., zpos1, 0, "ONLY");
-
-// End of geometry definition for the first plane
-
-// Station 1 - plan 2 - same RPCs as plan 1 ==> small non covered area
-// Y position moved (ratio zpos2/zpos1)
- const Float_t Z_1S2=zpos2/zpos1;
-
-// Definition of prototype for chambers in the second plane
-
- tpar[0]= 0.;
- tpar[1]= 0.;
- tpar[2]= 0.;
-
- gMC->Gsvolu("CC2A", "BOX ", idAlu1, tpar, 0); //Al
- gMC->Gsvolu("CB2A", "BOX ", idtmed[1107], tpar, 0); //Bakelite
- gMC->Gsvolu("CG2A", "BOX ", idtmed[1106], tpar, 0); //Gas streamer
-
-// chamber type A
- tpar[0] = -1.;
- tpar[1] = -1.;
-
- const Float_t X_MC2A=X_MC1A;
- const Float_t Y_MC2A=0.;
- const Float_t Z_MC2A=0.;
-
- tpar[2] = 0.1;
- gMC->Gsposp("CG2A", 1, "CB2A", 0., 0., 0., 0, "ONLY",tpar,3);
- tpar[2] = 0.3;
- gMC->Gsposp("CB2A", 1, "CC2A", 0., 0., 0., 0, "ONLY",tpar,3);
- tpar[2] = 0.4;
- tpar[0] = (X_MC1_MAX-X_MC1_MED)/2.;
- tpar[1] = Y_MC1_MIN;
- gMC->Gsposp("CC2A", 1, "CM12",X_MC2A,Y_MC2A,Z_MC2A, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC2A", 2, "CM12",-X_MC2A,Y_MC2A,Z_MC2A, 0, "ONLY", tpar, 3);
-
-// chamber type B
- tpar[0] = (X_MC1_MAX-X_MC1_MIN)/2.;
- tpar[1] = (Y_MC1_MAX-Y_MC1_MIN)/2.;
-
- const Float_t X_MC2B=X_MC1B;
- const Float_t Y_MC2B=2.*Y_MC1_MIN*Z_1S2-Y_MC1_MIN*1.5+Y_MC1_MAX*0.5;
- const Float_t Z_MC2B=0.;
-
- gMC->Gsposp("CC2A", 3, "CM12",X_MC2B,Y_MC2B,Z_MC2B, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC2A", 4, "CM12",-X_MC2B,Y_MC2B,Z_MC2B, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC2A", 5, "CM12",X_MC2B,-Y_MC2B,Z_MC2B, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC2A", 6, "CM12",-X_MC2B,-Y_MC2B,Z_MC2B, 0, "ONLY", tpar, 3);
-
-// chamber type C
- tpar[0] = X_MC1_MAX/2;
- tpar[1] = Y_MC1_MAX/2;
-
- const Float_t X_MC2C=X_MC1C;
- const Float_t Y_MC2C=2.*Y_MC1_MIN*Z_1S2-Y_MC1_MIN*2.+Y_MC1_MAX*1.5;
- const Float_t Z_MC2C=0.;
-
- gMC->Gsposp("CC2A", 7, "CM12",X_MC2C,Y_MC2C,Z_MC2C, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC2A", 8, "CM12",-X_MC2C,Y_MC2C,Z_MC2C, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC2A", 9, "CM12",X_MC2C,-Y_MC2C,Z_MC2C, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC2A", 10, "CM12",-X_MC2C,-Y_MC2C,Z_MC2C, 0, "ONLY", tpar, 3);
-
-// chamber type D
- tpar[0] = X_MC1_MAX/2.;
- tpar[1] = Y_MC1_MIN;
-
- const Float_t X_MC2D=X_MC1D;
- const Float_t Z_MC2D=0.;
-
- Float_t Y_MC2D=4.*Y_MC1_MIN*Z_1S2;
- gMC->Gsposp("CC2A", 11, "CM12",X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC2A", 12, "CM12",X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC2A", 13, "CM12",-X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC2A", 14, "CM12",-X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
-
- Y_MC2D=6.*Y_MC1_MIN*Z_1S2;
- gMC->Gsposp("CC2A", 15, "CM12",X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC2A", 16, "CM12",X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC2A", 17, "CM12",-X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC2A", 18, "CM12",-X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
-
- Y_MC2D=8.*Y_MC1_MIN*Z_1S2;
- gMC->Gsposp("CC2A", 19, "CM12",X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC2A", 20, "CM12",X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC2A", 21, "CM12",-X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC2A", 22, "CM12",-X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
-
- gMC->Gspos("CM12", 1, "ALIC", 0., 0., zpos2, 0, "ONLY");
-
-// Station 2
- iChamber=(AliMUONchamber*) (*fChambers)[12];
- Float_t zpos3=iChamber->ZPosition();
- Float_t zpos4=zpos3+DTPLANES;
-
-// Parameters of the Trigger Chambers
- //Station 2
- const Float_t X_MC3_MIN=X_MC1_MIN*zpos3/zpos1;
- const Float_t X_MC3_MED=X_MC1_MED*zpos3/zpos1;
- const Float_t X_MC3_MAX=X_MC1_MAX*zpos3/zpos1;
- const Float_t Y_MC3_MIN=Y_MC1_MIN*zpos3/zpos1;
- const Float_t Y_MC3_MAX=Y_MC1_MAX*zpos3/zpos1;
- const Float_t R_MIN3=R_MIN1*zpos3/zpos1;
- const Float_t R_MAX3=R_MAX1*zpos3/zpos1;
-
-// Mother volume definition
- tpar[0] = iChamber->RInner();
- tpar[1] = iChamber->ROuter();
- tpar[2] = 0.4;
- gMC->Gsvolu("CM21", "TUBE", idAir, tpar, 3);
- gMC->Gsvolu("CM22", "TUBE", idAir, tpar, 3);
-
-// Definition of the flange between the beam shielding and the RPC
- tpar[0]= R_MIN3;
- tpar[1]= R_MAX3;
- tpar[2]= 0.4;
-
- gMC->Gsvolu("CF2A", "TUBE", idAlu1, tpar, 3); //Al
- gMC->Gspos("CF2A", 1, "CM21", 0., 0., 0., 0, "MANY");
- gMC->Gspos("CF2A", 2, "CM22", 0., 0., 0., 0, "MANY");
-
-// Definition of prototype for chambers in the third plane
-
- tpar[0]= 0.;
- tpar[1]= 0.;
- tpar[2]= 0.;
-
- gMC->Gsvolu("CC3A", "BOX ", idAlu1, tpar, 0); //Al
- gMC->Gsvolu("CB3A", "BOX ", idtmed[1107], tpar, 0); //Bakelite
- gMC->Gsvolu("CG3A", "BOX ", idtmed[1106], tpar, 0); //Gas streamer
-
-// chamber type A
- tpar[0] = -1.;
- tpar[1] = -1.;
-
- const Float_t X_MC3A=X_MC3_MED+(X_MC3_MAX-X_MC3_MED)/2.;
- const Float_t Y_MC3A=0.;
- const Float_t Z_MC3A=0.;
-
- tpar[2] = 0.1;
- gMC->Gsposp("CG3A", 1, "CB3A", 0., 0., 0., 0, "ONLY",tpar,3);
- tpar[2] = 0.3;
- gMC->Gsposp("CB3A", 1, "CC3A", 0., 0., 0., 0, "ONLY",tpar,3);
- tpar[0] = (X_MC3_MAX-X_MC3_MED)/2.;
- tpar[1] = Y_MC3_MIN;
- tpar[2] = 0.4;
- gMC->Gsposp("CC3A", 1, "CM21",X_MC3A,Y_MC3A,Z_MC3A, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC3A", 2, "CM21",-X_MC3A,Y_MC3A,Z_MC3A, 0, "ONLY", tpar, 3);
-
-// chamber type B
- tpar[0] = (X_MC3_MAX-X_MC3_MIN)/2.;
- tpar[1] = (Y_MC3_MAX-Y_MC3_MIN)/2.;
-
- const Float_t X_MC3B=X_MC3_MIN+tpar[0];
- const Float_t Y_MC3B=Y_MC3_MIN+tpar[1];
- const Float_t Z_MC3B=0.;
-
- gMC->Gsposp("CC3A", 3, "CM21",X_MC3B,Y_MC3B,Z_MC3B, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC3A", 4, "CM21",-X_MC3B,Y_MC3B,Z_MC3B, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC3A", 5, "CM21",X_MC3B,-Y_MC3B,Z_MC3B, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC3A", 6, "CM21",-X_MC3B,-Y_MC3B,Z_MC3B, 0, "ONLY", tpar, 3);
-
-// chamber type C
- tpar[0] = X_MC3_MAX/2.;
- tpar[1] = Y_MC3_MAX/2.;
-
- const Float_t X_MC3C=tpar[0];
- const Float_t Y_MC3C=Y_MC3_MAX+tpar[1];
- const Float_t Z_MC3C=0.;
-
- gMC->Gsposp("CC3A", 7, "CM21",X_MC3C,Y_MC3C,Z_MC3C, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC3A", 8, "CM21",-X_MC3C,Y_MC3C,Z_MC3C, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC3A", 9, "CM21",X_MC3C,-Y_MC3C,Z_MC3C, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC3A", 10, "CM21",-X_MC3C,-Y_MC3C,Z_MC3C, 0, "ONLY", tpar, 3);
-
-// chamber type D
- tpar[0] = X_MC3_MAX/2.;
- tpar[1] = Y_MC3_MIN;
-
- const Float_t X_MC3D=tpar[0];
- const Float_t Z_MC3D=0.;
-
- Float_t Y_MC3D=4.*Y_MC3_MIN;
- gMC->Gsposp("CC3A", 11, "CM21",X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC3A", 12, "CM21",X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC3A", 13, "CM21",-X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC3A", 14, "CM21",-X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
-
- Y_MC3D=6.*Y_MC3_MIN;
- gMC->Gsposp("CC3A", 15, "CM21",X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC3A", 16, "CM21",X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC3A", 17, "CM21",-X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC3A", 18, "CM21",-X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
-
- Y_MC3D=8.*Y_MC3_MIN;
- gMC->Gsposp("CC3A", 19, "CM21",X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC3A", 20, "CM21",X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC3A", 21, "CM21",-X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC3A", 22, "CM21",-X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
-
-// Positioning third plane in ALICE
- gMC->Gspos("CM21", 1, "ALIC", 0., 0., zpos3, 0, "ONLY");
-
-// End of geometry definition for the third plane
-
-// Station 2 - plan 4 - same RPCs as plan 3 ==> small non covered area
-// Y position moved (ratio zpos4/zpos3)
- const Float_t Z_3S4=zpos4/zpos3;
-
-// Definition of prototype for chambers in the fourth plane
-
- tpar[0]= 0.;
- tpar[1]= 0.;
- tpar[2]= 0.;
-
- gMC->Gsvolu("CC4A", "BOX ", idAlu1, tpar, 0); //Al
- gMC->Gsvolu("CB4A", "BOX ", idtmed[1107], tpar, 0); //Bakelite
- gMC->Gsvolu("CG4A", "BOX ", idtmed[1106], tpar, 0); //Gas streamer
-
-// chamber type A
- tpar[0] = -1.;
- tpar[1] = -1.;
-
- const Float_t X_MC4A=X_MC3A;
- const Float_t Y_MC4A=0.;
- const Float_t Z_MC4A=0.;
-
- tpar[2] = 0.1;
- gMC->Gsposp("CG4A", 1, "CB4A", 0., 0., 0., 0, "ONLY",tpar,3);
- tpar[2] = 0.3;
- gMC->Gsposp("CB4A", 1, "CC4A", 0., 0., 0., 0, "ONLY",tpar,3);
- tpar[2] = 0.4;
- tpar[0] = (X_MC3_MAX-X_MC3_MED)/2.;
- tpar[1] = Y_MC3_MIN;
- gMC->Gsposp("CC4A", 1, "CM22",X_MC4A,Y_MC4A,Z_MC4A, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC4A", 2, "CM22",-X_MC4A,Y_MC4A,Z_MC4A, 0, "ONLY", tpar, 3);
-
-// chamber type B
- tpar[0] = (X_MC3_MAX-X_MC3_MIN)/2.;
- tpar[1] = (Y_MC3_MAX-Y_MC3_MIN)/2.;
-
- const Float_t X_MC4B=X_MC3B;
- const Float_t Y_MC4B=2.*Y_MC3_MIN*Z_3S4-Y_MC3_MIN*1.5+Y_MC3_MAX*0.5;
- const Float_t Z_MC4B=0.;
-
- gMC->Gsposp("CC4A", 3, "CM22",X_MC4B,Y_MC4B,Z_MC4B, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC4A", 4, "CM22",-X_MC4B,Y_MC4B,Z_MC4B, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC4A", 5, "CM22",X_MC4B,-Y_MC4B,Z_MC4B, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC4A", 6, "CM22",-X_MC4B,-Y_MC4B,Z_MC4B, 0, "ONLY", tpar, 3);
-
-// chamber type C
- tpar[0] = X_MC3_MAX/2;
- tpar[1] = Y_MC3_MAX/2;
-
- const Float_t X_MC4C=X_MC3C;
- const Float_t Y_MC4C=2.*Y_MC3_MIN*Z_3S4-Y_MC3_MIN*2.+Y_MC3_MAX*1.5;
- const Float_t Z_MC4C=0.;
-
- gMC->Gsposp("CC4A", 7, "CM22",X_MC4C,Y_MC4C,Z_MC4C, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC4A", 8, "CM22",-X_MC4C,Y_MC4C,Z_MC4C, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC4A", 9, "CM22",X_MC4C,-Y_MC4C,Z_MC4C, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC4A", 10, "CM22",-X_MC4C,-Y_MC4C,Z_MC4C, 0, "ONLY", tpar, 3);
-
-// chamber type D
- tpar[0] = X_MC3_MAX/2.;
- tpar[1] = Y_MC3_MIN;
-
- const Float_t X_MC4D=X_MC3D;
- const Float_t Z_MC4D=0.;
-
- Float_t Y_MC4D=4.*Y_MC3_MIN*Z_3S4;
- gMC->Gsposp("CC4A", 11, "CM22",X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC4A", 12, "CM22",X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC4A", 13, "CM22",-X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC4A", 14, "CM22",-X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
-
- Y_MC4D=6.*Y_MC3_MIN*Z_3S4;
- gMC->Gsposp("CC4A", 15, "CM22",X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC4A", 16, "CM22",X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC4A", 17, "CM22",-X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC4A", 18, "CM22",-X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
-
- Y_MC4D=8.*Y_MC3_MIN*Z_3S4;
- gMC->Gsposp("CC4A", 19, "CM22",X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC4A", 20, "CM22",X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC4A", 21, "CM22",-X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
- gMC->Gsposp("CC4A", 22, "CM22",-X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
-
- gMC->Gspos("CM22", 1, "ALIC", 0., 0., zpos4, 0, "ONLY");
-
-}
-
-
//___________________________________________
void AliMUONv0::CreateMaterials()
{
- // *** DEFINITION OF AVAILABLE MUON MATERIALS ***
- //
- // Ar-CO2 gas
- Float_t ag1[3] = { 39.95,12.01,16. };
- Float_t zg1[3] = { 18.,6.,8. };
- Float_t wg1[3] = { .8,.0667,.13333 };
- Float_t dg1 = .001821;
- //
- // Ar-buthane-freon gas -- trigger chambers
- Float_t atr1[4] = { 39.95,12.01,1.01,19. };
- Float_t ztr1[4] = { 18.,6.,1.,9. };
- Float_t wtr1[4] = { .56,.1262857,.2857143,.028 };
- Float_t dtr1 = .002599;
- //
- // Ar-CO2 gas
- Float_t agas[3] = { 39.95,12.01,16. };
- Float_t zgas[3] = { 18.,6.,8. };
- Float_t wgas[3] = { .74,.086684,.173316 };
- Float_t dgas = .0018327;
- //
- // Ar-Isobutane gas (80%+20%) -- tracking
- Float_t ag[3] = { 39.95,12.01,1.01 };
- Float_t zg[3] = { 18.,6.,1. };
- Float_t wg[3] = { .8,.057,.143 };
- Float_t dg = .0019596;
- //
- // Ar-Isobutane-Forane-SF6 gas (49%+7%+40%+4%) -- trigger
- Float_t atrig[5] = { 39.95,12.01,1.01,19.,32.066 };
- Float_t ztrig[5] = { 18.,6.,1.,9.,16. };
- Float_t wtrig[5] = { .49,1.08,1.5,1.84,0.04 };
- Float_t dtrig = .0031463;
- //
- // bakelite
-
- Float_t abak[3] = {12.01 , 1.01 , 16.};
- Float_t zbak[3] = {6. , 1. , 8.};
- Float_t wbak[3] = {6. , 6. , 1.};
- Float_t dbak = 1.4;
+// Creates materials for coarse geometry
+ AliMaterial(15, "AIR$ ", 14.61, 7.3, .001205, 30423.24, 67500);
+ AliMaterial( 9, "ALUMINIUM$", 26.98, 13. , 2.7, 8.9, 37.2);
+
+ Float_t epsil = .001; // Tracking precision,
+ Float_t stemax = -1.; // Maximum displacement for multiple scat
+ Float_t tmaxfd = -20.; // Maximum angle due to field deflection
+ Float_t deemax = -.3; // Maximum fractional energy loss, DLS
+ Float_t stmin = -.8;
+ Int_t isxfld = gAlice->Field()->Integ();
+ Float_t sxmgmx = gAlice->Field()->Max();
- Float_t epsil, stmin, deemax, tmaxfd, stemax;
-
- Int_t ISXFLD = gAlice->Field()->Integ();
- Float_t SXMGMX = gAlice->Field()->Max();
- //
- // --- Define the various materials for GEANT ---
- AliMaterial(9, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
- AliMaterial(10, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
- AliMaterial(15, "AIR$ ", 14.61, 7.3, .001205, 30423.24, 67500);
- AliMixture(19, "Bakelite$", abak, zbak, dbak, -3, wbak);
- AliMixture(20, "ArC4H10 GAS$", ag, zg, dg, 3, wg);
- AliMixture(21, "TRIG GAS$", atrig, ztrig, dtrig, -5, wtrig);
- AliMixture(22, "ArCO2 80%$", ag1, zg1, dg1, 3, wg1);
- AliMixture(23, "Ar-freon $", atr1, ztr1, dtr1, 4, wtr1);
- AliMixture(24, "ArCO2 GAS$", agas, zgas, dgas, 3, wgas);
-
- epsil = .001; // Tracking precision,
- stemax = -1.; // Maximum displacement for multiple scat
- tmaxfd = -20.; // Maximum angle due to field deflection
- deemax = -.3; // Maximum fractional energy loss, DLS
- stmin = -.8;
//
// Air
- AliMedium(1, "AIR_CH_US ", 15, 1, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
- //
- // Aluminum
-
- AliMedium(4, "ALU_CH_US ", 9, 0, ISXFLD, SXMGMX, tmaxfd, fMaxStepAlu,
- fMaxDestepAlu, epsil, stmin);
- AliMedium(5, "ALU_CH_US ", 10, 0, ISXFLD, SXMGMX, tmaxfd, fMaxStepAlu,
- fMaxDestepAlu, epsil, stmin);
- //
- // Ar-isoC4H10 gas
-
- AliMedium(6, "AR_CH_US ", 20, 1, ISXFLD, SXMGMX, tmaxfd, fMaxStepGas,
- fMaxDestepGas, epsil, stmin);
-//
- // Ar-Isobuthane-Forane-SF6 gas
-
- AliMedium(7, "GAS_CH_TRIGGER ", 21, 1, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
-
- AliMedium(8, "BAKE_CH_TRIGGER ", 19, 0, ISXFLD, SXMGMX, tmaxfd, fMaxStepAlu,
- fMaxDestepAlu, epsil, stmin);
-
- AliMedium(9, "ARG_CO2 ", 22, 1, ISXFLD, SXMGMX, tmaxfd, fMaxStepGas,
+ AliMedium(1, "AIR_CH_US ", 15, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
+ AliMedium(4, "ALU_CH_US ", 9, 0, isxfld, sxmgmx, tmaxfd, fMaxStepAlu,
fMaxDestepAlu, epsil, stmin);
}
-//___________________________________________
-
void AliMUONv0::Init()
{
- printf("\n\n\n Start Init for version 0 - CPC chamber type\n\n\n");
-
//
// Initialize Tracking Chambers
//
- for (Int_t i=0; i<NCH; i++) {
- ( (AliMUONchamber*) (*fChambers)[i])->Init();
- }
-
- //
- // Set the chamber (sensitive region) GEANT identifier
- AliMC* gMC = AliMC::GetMC();
- ((AliMUONchamber*)(*fChambers)[0])->SetGid(gMC->VolId("C01G"));
- ((AliMUONchamber*)(*fChambers)[1])->SetGid(gMC->VolId("C02G"));
- ((AliMUONchamber*)(*fChambers)[2])->SetGid(gMC->VolId("C03G"));
- ((AliMUONchamber*)(*fChambers)[3])->SetGid(gMC->VolId("C04G"));
- ((AliMUONchamber*)(*fChambers)[4])->SetGid(gMC->VolId("C05G"));
- ((AliMUONchamber*)(*fChambers)[5])->SetGid(gMC->VolId("C06G"));
- ((AliMUONchamber*)(*fChambers)[6])->SetGid(gMC->VolId("C07G"));
- ((AliMUONchamber*)(*fChambers)[7])->SetGid(gMC->VolId("C08G"));
- ((AliMUONchamber*)(*fChambers)[8])->SetGid(gMC->VolId("C09G"));
- ((AliMUONchamber*)(*fChambers)[9])->SetGid(gMC->VolId("C10G"));
- ((AliMUONchamber*)(*fChambers)[10])->SetGid(gMC->VolId("CG1A"));
- ((AliMUONchamber*)(*fChambers)[11])->SetGid(gMC->VolId("CG2A"));
- ((AliMUONchamber*)(*fChambers)[12])->SetGid(gMC->VolId("CG3A"));
- ((AliMUONchamber*)(*fChambers)[13])->SetGid(gMC->VolId("CG4A"));
-
- printf("\n\n\n Finished Init for version 0 - CPC chamber type\n\n\n");
+ char vName[8];
+ printf("\n\n\n Start Init for version 0 - CPC chamber type\n\n\n");
+ for (Int_t i=0; i<AliMUONConstants::NCh(); i++) {
+// Initialise chamber
+ ((AliMUONChamber*) (*fChambers)[i])->Init();
+// Set sensitive volume Id
+ if (i < AliMUONConstants::NTrackingCh()) {
+ // tracking chambers
+ sprintf(vName,"CG0%1d",i);
+ } else {
+ // trigger chambers
+ sprintf(vName,"CG%2d",i);
+ }
+ ((AliMUONChamber*) (*fChambers)[i])->SetGid(gMC->VolId(vName));
+ }
}
-//___________________________________________
void AliMUONv0::StepManager()
{
+//
+// Step manager for hit density simulations
Int_t copy, id;
static Int_t idvol;
static Int_t vol[2];
TLorentzVector pos;
TLorentzVector mom;
Float_t theta,phi;
- Float_t destep, step;
-
- static Float_t eloss, eloss2, xhit, yhit, tlength;
- const Float_t big=1.e10;
// modifs perso
- static Float_t hits[14];
+ static Float_t hits[15];
TClonesArray &lhits = *fHits;
-
- //
- // Set maximum step size for gas
- // numed=gMC->GetMedium();
- //
- // Only charged tracks
- if( !(gMC->TrackCharge()) ) return;
//
// Only gas gap inside chamber
// Tag chambers and record hits when track enters
idvol=-1;
id=gMC->CurrentVolID(copy);
- for (Int_t i=1; i<=NCH; i++) {
- if(id==((AliMUONchamber*)(*fChambers)[i-1])->GetGid()){
+ for (Int_t i=1; i<=AliMUONConstants::NCh(); i++) {
+ if(id==((AliMUONChamber*)(*fChambers)[i-1])->GetGid()){
vol[0]=i;
idvol=i-1;
}
gMC->TrackMomentum(mom);
ipart = gMC->TrackPid();
- //Int_t ipart1 = gMC->IdFromPDG(ipart);
- //printf("ich, ipart %d %d \n",vol[0],ipart1);
-
- //
- // momentum loss and steplength in last step
- destep = gMC->Edep();
- step = gMC->TrackStep();
-
//
// record hits when track enters ...
+ if( !(gMC->TrackCharge()) ) return;
if( gMC->IsTrackEntering()) {
- gMC->SetMaxStep(fMaxStepGas);
+// printf("\n Particle entering %f %f %f", pos[0], pos[1], pos[2] );
+
Double_t tc = mom[0]*mom[0]+mom[1]*mom[1];
Double_t rt = TMath::Sqrt(tc);
- Double_t pmom = TMath::Sqrt(tc+mom[2]*mom[2]);
- Double_t tx=mom[0]/pmom;
- Double_t ty=mom[1]/pmom;
- Double_t tz=mom[2]/pmom;
- Double_t s=((AliMUONchamber*)(*fChambers)[idvol])
- ->GetResponseModel()
- ->Pitch()/tz;
theta = Float_t(TMath::ATan2(rt,Double_t(mom[2])))*kRaddeg;
phi = Float_t(TMath::ATan2(Double_t(mom[1]),Double_t(mom[0])))*kRaddeg;
- hits[0] = Float_t(ipart); // Geant3 particle type
- hits[1] = pos[0]+s*tx; // X-position for hit
- hits[2] = pos[1]+s*ty; // Y-position for hit
- hits[3] = pos[2]+s*tz; // Z-position for hit
- hits[4] = theta; // theta angle of incidence
- hits[5] = phi; // phi angle of incidence
- hits[8] = (Float_t) fNclusters; // first padhit
- hits[9] = -1; // last pad hit
-
- // modifs perso
- hits[10] = mom[3]; // hit momentum P
- hits[11] = mom[0]; // Px/P
- hits[12] = mom[1]; // Py/P
- hits[13] = mom[2]; // Pz/P
- // fin modifs perso
-
- // phi angle of incidence
- tlength = 0;
- eloss = 0;
- eloss2 = 0;
- xhit = pos[0];
- yhit = pos[1];
- // Only if not trigger chamber
- if(idvol<10) {
- //
- // Initialize hit position (cursor) in the segmentation model
- ((AliMUONchamber*) (*fChambers)[idvol])
- ->SigGenInit(pos[0], pos[1], pos[2]);
- } else {
- //geant3->Gpcxyz();
- //printf("In the Trigger Chamber #%d\n",idvol-9);
- }
- }
- eloss2+=destep;
-
- //
- // Calculate the charge induced on a pad (disintegration) in case
- //
- // Mip left chamber ...
- if( gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared()){
- gMC->SetMaxStep(big);
- eloss += destep;
- tlength += step;
-
- // Only if not trigger chamber
- if(idvol<10) {
- if (eloss > 0)
- MakePadHits(0.5*(xhit+pos[0]),0.5*(yhit+pos[1]),eloss,idvol);
- }
-
- hits[6]=tlength;
- hits[7]=eloss2;
- if (fNclusters > (Int_t)hits[8]) {
- hits[8]= hits[8]+1;
- hits[9]= (Float_t) fNclusters;
- }
-
+ hits[0] = Float_t(ipart); // Geant3 particle type
+ hits[1] = pos[0]; // X-position for hit
+ hits[2] = pos[1]; // Y-position for hit
+ hits[3] = pos[2]; // Z-position for hit
+ hits[4] = theta; // theta angle of incidence
+ hits[5] = phi; // phi angle of incidence
+ hits[8] = -1; // first padhit
+ hits[9] = -1; // last pad hit
+ hits[10] = mom[3]; // hit Energy
+ hits[11] = mom[0]; // Px
+ hits[12] = mom[1]; // Py
+ hits[13] = mom[2]; // Pz
+ hits[14] = gMC->TrackTime(); // time of flight
new(lhits[fNhits++])
- AliMUONhit(fIshunt,gAlice->CurrentTrack(),vol,hits);
- eloss = 0;
- //
- // Check additional signal generation conditions
- // defined by the segmentation
- // model (boundary crossing conditions)
- } else if
- (((AliMUONchamber*) (*fChambers)[idvol])
- ->SigGenCond(pos[0], pos[1], pos[2]))
- {
- ((AliMUONchamber*) (*fChambers)[idvol])
- ->SigGenInit(pos[0], pos[1], pos[2]);
-// printf("\n-> MakePadHits, reason special %d",ipart);
- if (eloss > 0)
- MakePadHits(0.5*(xhit+pos[0]),0.5*(yhit+pos[1]),eloss,idvol);
- xhit = pos[0];
- yhit = pos[1];
- eloss = destep;
- tlength += step ;
- //
- // nothing special happened, add up energy loss
- } else {
- eloss += destep;
- tlength += step ;
+ AliMUONHit(fIshunt,gAlice->CurrentTrack(),vol,hits);
+
}
+// if( gMC->IsTrackExiting()) gMC->StopTrack();
}
+
+
+
+
+
+
+
+
+