**************************************************************************/
// $Id$
-//
+
+// -----------------------------------
// Class AliMUONTriggerGeometryBuilder
// -----------------------------------
-// MUON Trigger stations geometry construction class.
-//
-// Author: Philippe Crochette, LPC Clermont-Ferrand
+// MUON Trigger stations geometry
+// construction class.
+// Author: Philippe Crochet (LPCCFd)
#include <TVirtualMC.h>
#include <TGeoMatrix.h>
#include "AliLog.h"
+#include "AliRun.h"
#include "AliMUONTriggerGeometryBuilder.h"
#include "AliMUON.h"
-#include "AliMUONChamber.h"
+#include "AliMUONConstants.h"
#include "AliMUONGeometryModule.h"
#include "AliMUONGeometryEnvelopeStore.h"
+/// \cond CLASSIMP
ClassImp(AliMUONTriggerGeometryBuilder)
+/// \endcond
//______________________________________________________________________________
AliMUONTriggerGeometryBuilder::AliMUONTriggerGeometryBuilder(AliMUON* muon)
- : AliMUONVGeometryBuilder("trigger.dat",
- muon->Chamber(10).GetGeometry(),
- muon->Chamber(11).GetGeometry(),
- muon->Chamber(12).GetGeometry(),
- muon->Chamber(13).GetGeometry()),
+ : AliMUONVGeometryBuilder(16, 4),
fMUON(muon)
{
-// Standard constructor
+/// Standard constructor
}
: AliMUONVGeometryBuilder(),
fMUON(0)
{
-// Default constructor
-}
-
-
-//______________________________________________________________________________
-AliMUONTriggerGeometryBuilder::AliMUONTriggerGeometryBuilder(const AliMUONTriggerGeometryBuilder& rhs)
- : AliMUONVGeometryBuilder(rhs)
-{
-// Protected copy constructor
-
- AliFatal("Copy constructor is not implemented.");
-}
-
-//______________________________________________________________________________
-AliMUONTriggerGeometryBuilder::~AliMUONTriggerGeometryBuilder() {
-//
+/// Default constructor
}
//______________________________________________________________________________
-AliMUONTriggerGeometryBuilder&
-AliMUONTriggerGeometryBuilder::operator = (const AliMUONTriggerGeometryBuilder& rhs)
+AliMUONTriggerGeometryBuilder::~AliMUONTriggerGeometryBuilder()
{
-// Protected assignement operator
-
- // check assignement to self
- if (this == &rhs) return *this;
-
- AliFatal("Assignment operator is not implemented.");
-
- return *this;
+/// Destructor
}
//
//______________________________________________________________________________
void AliMUONTriggerGeometryBuilder::CreateGeometry()
{
-// From AliMUONv1::CreateGeometry()
+/// From AliMUONv1::CreateGeometry()
/*
zpos1 and zpos2 are the middle of the first and second
const Float_t kZm=-3.6;
const Float_t kZp=+3.6;
- AliMUONChamber *iChamber, *iChamber1, *iChamber2;
- iChamber1 = &fMUON->Chamber(10);
- Float_t zpos1= iChamber1->Z();
- iChamber2 = &fMUON->Chamber(11);
-
- Double_t dstation = ( ( - iChamber2->Z()) - ( - iChamber1->Z()) ) /2.1;
+ Float_t zpos1= AliMUONConstants::DefaultChamberZ(10);
+ Double_t dstation = ( ( - AliMUONConstants::DefaultChamberZ(11)) -
+ ( - AliMUONConstants::DefaultChamberZ(10)) ) /2.1;
Float_t par[3];
par[2] = dstation;
Int_t iVolNum=1; // counter Volume Number
icount = Int_t(iplane<<0)+Int_t(istation<<1);
- iChamber = &fMUON->Chamber(10+icount);
- par[0] = iChamber->RInner();
- par[1] = iChamber->ROuter();
+ par[0] = AliMUONConstants::Rmin(5+istation);
+ par[1] = AliMUONConstants::Rmax(5+istation);
Char_t volName[6];
- sprintf(volName,"%s%d", "CH",11+icount);
+ sprintf(volName,"%s%d", "SC",11+icount);
gMC->Gsvolu(volName,"TUBE", idAir, par, 3);
- iChamber->GetGeometry()->SetVolume(volName);
- Float_t zpos = iChamber->Z();
-
+ //SetVolume(10+icount, volName);
+// Float_t zpos = AliMUONConstants::DefaultChamberZ(10+icount);
+
/* removed 03/18/05
// Flange between beam shielding and RPC
tpar[0]= kRMIN[istation];
*/
// scaling factor
- Float_t zRatio = zpos / zpos1;
-
+// Float_t zRatio = zpos / zpos1;
+ Float_t zRatio = AliMUONConstants::DefaultRatioTriggerChamber(icount);
+
+
+
+
// envelopes (same size except line 5, all virtual)
char volEnv[18][5];
tpar[1] = kYMIN * zRatio;
sprintf(volEnv[i],"S%dR%d",icount,iline);
else
sprintf(volEnv[i],"S%dL%d",icount,iline);
- gMC->Gsvolu(volEnv[i],"BOX",idAir,tpar,0);
+ // gMC->Gsvolu(volEnv[i],"BOX",idAir,tpar,0);
i++;
}
}
dpar[1] = kYMIN * zRatio;
detElemId = (10+icount+1)*100;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[4], detElemId, true, TGeoTranslation(xEnv,yEnvP,kZp));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[4], detElemId, true, TGeoTranslation(xEnv,yEnvP,kZp));
detElemId = (10+icount+1)*100+9;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[13], detElemId, true, TGeoTranslation(-xEnv,yEnvM,kZm),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[13], detElemId, true, TGeoTranslation(-xEnv,yEnvM,kZm),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[4],iVolNum++,3, dpar);
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[13],iVolNum++,3, dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[4],iVolNum++,3, dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[13],iVolNum++,3, dpar);
// chamber type B (plus envelope chambers B & C)
xEnv = (kDXZERO+kXMAX/2.)*zRatio;
ypos = (kYMIN - kYMIN/4.) * zRatio;
detElemId = (10+icount+1)*100+17;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[3], detElemId, true, TGeoTranslation( xEnv,-yEnvM,kZm));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[3], detElemId, true, TGeoTranslation( xEnv,-yEnvM,kZm));
detElemId = (10+icount+1)*100+1;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[5], detElemId, true, TGeoTranslation( xEnv, yEnvM,kZm));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[5], detElemId, true, TGeoTranslation( xEnv, yEnvM,kZm));
detElemId = (10+icount+1)*100+10;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[12], detElemId, true, TGeoTranslation(-xEnv,-yEnvP,kZp),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[12], detElemId, true, TGeoTranslation(-xEnv,-yEnvP,kZp),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
detElemId = (10+icount+1)*100+8;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[14], detElemId, true, TGeoTranslation(-xEnv, yEnvP,kZp),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[14], detElemId, true, TGeoTranslation(-xEnv, yEnvP,kZp),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[3],iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[5],iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[12],iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[14],iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[3],iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[5],iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[12],iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[14],iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
// chamber type C (note: same Z than type B)
dpar[0] = (kXMAX/2)*zRatio;
xpos = 0.;
ypos = ((kYMAX - kYMIN)/2.) * zRatio;
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[3],iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[5],iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[12],iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[14],iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[3],iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[5],iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[12],iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[14],iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
// chamber type D, E and F (same size)
// D
dpar[1] = kYMIN*zRatio;
detElemId = (10+icount+1)*100+16;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[2], detElemId, true, TGeoTranslation(xEnv,-yEnvP,kZp));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[2], detElemId, true, TGeoTranslation(xEnv,-yEnvP,kZp));
detElemId = (10+icount+1)*100+2;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[6], detElemId, true, TGeoTranslation(xEnv, yEnvP,kZp));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[6], detElemId, true, TGeoTranslation(xEnv, yEnvP,kZp));
detElemId = (10+icount+1)*100+11;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[11], detElemId, true, TGeoTranslation(-xEnv,-yEnvM,kZm),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[11], detElemId, true, TGeoTranslation(-xEnv,-yEnvM,kZm),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
detElemId = (10+icount+1)*100+7;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[15], detElemId, true, TGeoTranslation(-xEnv, yEnvM,kZm),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[15], detElemId, true, TGeoTranslation(-xEnv, yEnvM,kZm),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[2],iVolNum++,3, dpar);
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[6],iVolNum++,3, dpar);
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[11],iVolNum++,3, dpar);
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[15],iVolNum++,3, dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[2],iVolNum++,3, dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[6],iVolNum++,3, dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[11],iVolNum++,3, dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[15],iVolNum++,3, dpar);
// E
yEnvPsave = yEnvP;
yEnvM = (yEnvPsave + kYMIN * zRatio ) * zmp + kYMIN * zRatio;
detElemId = (10+icount+1)*100+15;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[1], detElemId, true, TGeoTranslation(xEnv,-yEnvM,kZm));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[1], detElemId, true, TGeoTranslation(xEnv,-yEnvM,kZm));
detElemId = (10+icount+1)*100+3;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[7], detElemId, true, TGeoTranslation(xEnv, yEnvM,kZm));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[7], detElemId, true, TGeoTranslation(xEnv, yEnvM,kZm));
detElemId = (10+icount+1)*100+12;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[10], detElemId, true, TGeoTranslation(-xEnv,-yEnvP,kZp),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[10], detElemId, true, TGeoTranslation(-xEnv,-yEnvP,kZp),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
detElemId = (10+icount+1)*100+6;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[16], detElemId, true, TGeoTranslation(-xEnv, yEnvP,kZp),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[16], detElemId, true, TGeoTranslation(-xEnv, yEnvP,kZp),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[1],iVolNum++,3,dpar);
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[7],iVolNum++,3,dpar);
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[10],iVolNum++,3,dpar);
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[16],iVolNum++,3,dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[1],iVolNum++,3,dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[7],iVolNum++,3,dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[10],iVolNum++,3,dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[16],iVolNum++,3,dpar);
// F
yEnvM = (yEnvPsave + kYMIN * zRatio ) * zmp + kYMIN * zRatio;
detElemId = (10+icount+1)*100+14;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[0], detElemId, true, TGeoTranslation(xEnv,-yEnvP,kZp));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[0], detElemId, true, TGeoTranslation(xEnv,-yEnvP,kZp));
detElemId = (10+icount+1)*100+4;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[8], detElemId, true, TGeoTranslation(xEnv, yEnvP,kZp));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[8], detElemId, true, TGeoTranslation(xEnv, yEnvP,kZp));
detElemId = (10+icount+1)*100+13;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[9], detElemId, true, TGeoTranslation(-xEnv,-yEnvM,kZm),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[9], detElemId, true, TGeoTranslation(-xEnv,-yEnvM,kZm),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
detElemId = (10+icount+1)*100+5;
- GetEnvelopes(10+icount)->AddEnvelope(volEnv[17], detElemId, true, TGeoTranslation(-xEnv, yEnvM,kZm),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+ GetEnvelopes(16+icount)->AddEnvelope(volEnv[17], detElemId, true, TGeoTranslation(-xEnv, yEnvM,kZm),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[0],iVolNum++,3,dpar);
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[8],iVolNum++,3,dpar);
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[9],iVolNum++,3,dpar);
- GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[17],iVolNum++,3,dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[0],iVolNum++,3,dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[8],iVolNum++,3,dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[9],iVolNum++,3,dpar);
+ GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[17],iVolNum++,3,dpar);
} // end loop on detection planes
} // end loop on stations
//______________________________________________________________________________
void AliMUONTriggerGeometryBuilder::SetTransformations()
{
-// Defines the transformations for the trigger chambers.
-// ---
- Double_t zpos1, zpos2;
- AliMUONChamber *iChamber1, *iChamber2;
-
- iChamber1 = &fMUON->Chamber(10);
- zpos1= iChamber1->Z();
- iChamber1->GetGeometry()
- ->SetTranslation(TGeoTranslation(0., 0., zpos1));
+/// Defines the transformations for the trigger chambers.
+
+ if (gAlice->GetModule("SHIL")) {
+ SetMotherVolume(16, "YOUT2");
+ SetMotherVolume(17, "YOUT2");
+ SetMotherVolume(18, "YOUT2");
+ SetMotherVolume(19, "YOUT2");
+ }
+
+ SetVolume(16, "SC11");
+ SetVolume(17, "SC12");
+ SetVolume(18, "SC13");
+ SetVolume(19, "SC14");
+
+ Double_t zpos1= AliMUONConstants::DefaultChamberZ(10);
+ SetTranslation(16, TGeoTranslation(0., 0., zpos1));
- iChamber2 = &fMUON->Chamber(11);
- zpos2 = iChamber2->Z();
- iChamber2->GetGeometry()
- ->SetTranslation(TGeoTranslation(0., 0., zpos2));
-
- iChamber1 = &fMUON->Chamber(12);
- zpos1 = iChamber1->Z();
- iChamber1->GetGeometry()
- ->SetTranslation(TGeoTranslation(0., 0., zpos1));
+ zpos1= AliMUONConstants::DefaultChamberZ(11);
+ SetTranslation(17, TGeoTranslation(0., 0., zpos1));
- iChamber2 = &fMUON->Chamber(13);
- zpos2 = iChamber2->Z();
- iChamber2->GetGeometry()
- ->SetTranslation(TGeoTranslation(0., 0., zpos2));
+ zpos1= AliMUONConstants::DefaultChamberZ(12);
+ SetTranslation(18, TGeoTranslation(0., 0., zpos1));
+ zpos1= AliMUONConstants::DefaultChamberZ(13);
+ SetTranslation(19, TGeoTranslation(0., 0., zpos1));
}
//______________________________________________________________________________
void AliMUONTriggerGeometryBuilder::SetSensitiveVolumes()
{
-// Defines the sensitive volumes for trigger station chambers.
-// ---
+/// Defines the sensitive volumes for trigger station chambers.
- GetGeometry(10)->SetSensitiveVolume("S11G");
- GetGeometry(11)->SetSensitiveVolume("S12G");
- GetGeometry(12)->SetSensitiveVolume("S13G");
- GetGeometry(13)->SetSensitiveVolume("S14G");
+ GetGeometry(16)->SetSensitiveVolume("S11G");
+ GetGeometry(17)->SetSensitiveVolume("S12G");
+ GetGeometry(18)->SetSensitiveVolume("S13G");
+ GetGeometry(19)->SetSensitiveVolume("S14G");
}