**************************************************************************/
/*
$Log$
+Revision 1.38 2000/11/06 09:20:43 morsch
+AliMUON delegates part of BuildGeometry() to AliMUONSegmentation using the
+Draw() method. This avoids code and parameter replication.
+
Revision 1.37 2000/10/26 09:53:37 pcrochet
put back trigger chambers in the display (there was a problem in buildgeometry)
//___________________________________________
void AliMUON::BuildGeometry()
{
- TNode *node, *top, *nodeS;
- const int kColorMUON2 = kYellow;
-
-//
- top=gAlice->GetGeometry()->GetNode("alice");
-// MUON
-//
-// z-Positions of Chambers
- const Float_t kCz[7]={511., 686., 971., 1245., 1445., 1600, 1700.};
-// inner diameter (Xlenght for trigger chamber -> active area)
- const Float_t kDmin[7]={ 35., 47., 67., 86., 100., 544., 544.};
-// outer diameter (Ylenght for trigger chamber -> active area)
- const Float_t kDmax[7]={183., 245., 346., 520., 520., 612., 612.};
-
- Float_t xpos, ypos, zpos;
- Float_t dzc1=4.; // tracking chambers
- Float_t dzc2=15.; // trigger chambers
- Float_t hole=102.; // x-y hole around beam pipe for trig. chambers
- Float_t zscale; // scaling parameter trigger chambers
- Float_t halfx, halfy;
- char nameChamber[9], nameSense[9], nameNode[9];
- char nameSense1[9], nameSense2[9];
- for (Int_t i=0; i<7; i++) {
- for (Int_t j=0; j<2; j++) {
- Int_t id=2*i+j+1;
- if (i<5) { // tracking chambers
- if (j==0) {
- zpos=kCz[i]-dzc1;
- } else {
- zpos=kCz[i]+dzc1;
- }
- } else {
- if (j==0) {
- zpos=kCz[i];
- } else {
- zpos=kCz[i]+dzc2;
- }
- }
- sprintf(nameChamber,"C_MUON%d",id);
- sprintf(nameSense,"S_MUON%d",id);
- sprintf(nameSense1,"S1_MUON%d",id);
- sprintf(nameSense2,"S2_MUON%d",id);
- if (i <= 4) {
- this->Chamber(id-1).SegmentationModel(1)->Draw("eventdisplay");
- } else {
- zscale=zpos/kCz[5];
- Float_t xsize=kDmin[i]*zscale;
- Float_t ysize=kDmax[i]*zscale;
- Float_t holeScaled=hole*zscale;
-
- halfx=xsize/2.+3.;
- halfy=ysize/2.+3.;
- new TBRIK(nameChamber,"Mother","void",halfx,halfy,0.25);
- top->cd();
- sprintf(nameNode,"MUON%d",100+id);
- node = new TNode(nameNode,"Chambernode",nameChamber,0,0,zpos,"");
- node->SetLineColor(kColorMUON2);
- fNodes->Add(node);
-
-// up/down of beam pipe
- halfx=xsize/2.;
- halfy=(ysize/2.-holeScaled/2.)/2.;
- new TBRIK(nameSense,"Sens. region","void",halfx,halfy,0.25);
-
- node->cd();
- ypos=holeScaled/2.+((ysize/2.-holeScaled/2.)/2.);
- sprintf(nameNode,"MUON%d",200+id);
- nodeS = new TNode(nameNode,"Sens. Region Node",nameSense,0,ypos,0,"");
- nodeS->SetLineColor(kColorMUON2);
-
- node->cd();
- ypos=-1.*ypos;
- sprintf(nameNode,"MUON%d",300+id);
- nodeS = new TNode(nameNode,"Sens. Region Node",nameSense,0,ypos,0,"");
- nodeS->SetLineColor(kColorMUON2);
-
-// left/right of beam pipe
- halfx=(xsize/2.-holeScaled/2.)/2.;
- halfy=holeScaled/2.;
- new TBRIK(nameSense1,"Sens. region","void",halfx,halfy,0.25);
-
- node->cd();
- xpos=holeScaled/2.+((xsize/2.-holeScaled/2.)/2.);
- sprintf(nameNode,"MUON%d",400+id);
- nodeS = new TNode(nameNode,"Sens. Region Node",nameSense1,xpos,0,0,"");
- nodeS->SetLineColor(kColorMUON2);
-
- node->cd();
- xpos=-1.*xpos;
- sprintf(nameNode,"MUON%d",500+id);
- nodeS = new TNode(nameNode,"Sens. Region Node",nameSense1,xpos,0,0,"");
- nodeS->SetLineColor(kColorMUON2);
-
-// missing corners
- halfx=17.*zscale/2.;
- halfy=halfx;
- new TBRIK(nameSense2,"Sens. region","void",halfx,halfy,0.25);
-
- node->cd();
- xpos=holeScaled/2.-halfx;
- ypos=xpos;
- sprintf(nameNode,"MUON%d",600+id);
- nodeS = new TNode(nameNode,"Sens. Region Node",nameSense2,xpos,ypos,0,"");
- nodeS->SetLineColor(kColorMUON2);
-
- node->cd();
- ypos=-1.*xpos;
- sprintf(nameNode,"MUON%d",700+id);
- nodeS = new TNode(nameNode,"Sens. Region Node",nameSense2,xpos,ypos,0,"");
- nodeS->SetLineColor(kColorMUON2);
-
- node->cd();
- xpos=-1.*xpos;
- sprintf(nameNode,"MUON%d",800+id);
- nodeS = new TNode(nameNode,"Sens. Region Node",nameSense2,xpos,ypos,0,"");
- nodeS->SetLineColor(kColorMUON2);
-
- node->cd();
- ypos=-1.*xpos;
- sprintf(nameNode,"MUON%d",900+id);
- nodeS = new TNode(nameNode,"Sens. Region Node",nameSense2,xpos,ypos,0,"");
- nodeS->SetLineColor(kColorMUON2);
- }
- }
+ for (Int_t i=0; i<7; i++) {
+ for (Int_t j=0; j<2; j++) {
+ Int_t id=2*i+j+1;
+ this->Chamber(id-1).SegmentationModel(1)->Draw("eventdisplay");
}
+ }
}
-
//___________________________________________
Int_t AliMUON::DistancetoPrimitive(Int_t , Int_t )
{
/*
$Log$
+Revision 1.7 2000/10/03 21:48:07 morsch
+Adopt to const declaration of some of the methods in AliSegmentation.
+
Revision 1.6 2000/10/02 16:58:29 egangler
Cleaning of the code :
-> coding conventions
*/
+#include <TMath.h>
+#include <TBRIK.h>
+#include <TNode.h>
+#include <TGeometry.h>
+
+#include "AliMUON.h"
#include "AliMUONSegmentationTriggerX.h"
#include "AliMUONTriggerConstants.h"
#include "TMath.h"
#include "TRandom.h"
#include "TArc.h"
#include "AliMUONChamber.h"
+#include "AliRun.h" // gAlice
#include <iostream.h>
ClassImp(AliMUONSegmentationTriggerX)
width=StripSizeX(ix); // width of the main strip
}
-
-
-
-
-
+//------------------------------------------------------------------
+void AliMUONSegmentationTriggerX::Draw(const char* opt) const
+{
+
+ if (!strcmp(opt,"eventdisplay")) {
+ TNode *node, *nodeS;
+ char nameChamber[10], nameNode[10];
+ char nameSense1[10], nameSense2[10], nameSense3[10], nameSense4[10];
+
+ TNode* top=gAlice->GetGeometry()->GetNode("alice");
+ sprintf(nameChamber,"C_MUON%d",fId+1);
+ new TBRIK(nameChamber,"Mother","void",340.,340.,0.25);
+ top->cd();
+ sprintf(nameNode,"MUON%d",100+fId+1);
+ node = new TNode(nameNode,"Chambernode",nameChamber,0,0,fChamber->Z(),"");
+ node->SetLineColor(kBlack);
+ AliMUON *pMUON = (AliMUON *) gAlice->GetModule("MUON");
+ (pMUON->Nodes())->Add(node);
+
+ sprintf(nameSense1,"S1_MUON%d",fId+1);
+ sprintf(nameSense2,"S2_MUON%d",fId+1);
+ sprintf(nameSense3,"S3_MUON%d",fId+1);
+ sprintf(nameSense4,"S4_MUON%d",fId+1);
+
+ for (Int_t imodule=0; imodule<AliMUONTriggerConstants::Nmodule(); imodule++) {
+ Int_t idModule=AliMUONTriggerConstants::ModuleId(imodule);
+
+ if (TMath::Abs(idModule)!=51) {
+
+ Int_t nStripX=AliMUONTriggerConstants::NstripX(imodule);
+ Float_t xmin=fXofxsmin[imodule][0];
+ Float_t xmax=fXofxsmax[imodule][nStripX-1];
+ Float_t ymin=fYofxsmin[imodule][0];
+ Float_t ymax=fYofxsmax[imodule][nStripX-1];
+ Float_t xpos=xmin+(xmax-xmin)/2.;
+ Float_t ypos=ymin+(ymax-ymin)/2.;
+ Float_t halfx=(xmax-xmin)/2.;
+ Float_t halfy=(ymax-ymin)/2.;
+
+ if (idModule==11)
+ new TBRIK(nameSense1,"Module","void",halfx,halfy,0.25);
+ if (idModule==17)
+ new TBRIK(nameSense2,"Module","void",halfx,halfy,0.25);
+ if (idModule==41)
+ new TBRIK(nameSense3,"Module","void",halfx,halfy,0.25);
+ if (idModule==52)
+ new TBRIK(nameSense4,"Module","void",halfx,halfy,0.25);
+ node->cd();
+ sprintf(nameNode,"S_MUON%d",1000*fId+1+imodule);
+
+ if (TMath::Abs(idModule)==41||TMath::Abs(idModule)==61) {
+ nodeS = new TNode(nameNode,"Module",nameSense3,xpos,ypos,0,"");
+ } else if (TMath::Abs(idModule)==52) {
+ nodeS = new TNode(nameNode,"Module",nameSense4,xpos,ypos,0,"");
+ } else if (TMath::Abs((idModule-Int_t(idModule/10)*10.))!=7) {
+ nodeS = new TNode(nameNode,"Module",nameSense1,xpos,ypos,0,"");
+ } else {
+ // } else if (TMath::Abs((idModule-Int_t(idModule/10)*10.))==7) {
+ nodeS = new TNode(nameNode,"Module",nameSense2,xpos,ypos,0,"");
+ }
+ nodeS->SetLineColor(kBlue);
+ node->cd();
+ }
+ }
+ }
+}