From 21a18f36edc1aa695df97208457d0b08726cf51b Mon Sep 17 00:00:00 2001 From: morsch Date: Fri, 16 Mar 2001 15:32:06 +0000 Subject: [PATCH] Corrections of overlap with beam shield and dipole (A. de Falco) --- MUON/AliMUONConstants.cxx | 6 +- MUON/AliMUONv1.cxx | 132 +++++++++++++++++++++++++++----------- MUON/Config_slat.C | 11 ++-- 3 files changed, 105 insertions(+), 44 deletions(-) diff --git a/MUON/AliMUONConstants.cxx b/MUON/AliMUONConstants.cxx index 461a0773116..5e79f84e968 100644 --- a/MUON/AliMUONConstants.cxx +++ b/MUON/AliMUONConstants.cxx @@ -15,6 +15,9 @@ /* $Log$ +Revision 1.7 2001/03/14 17:22:15 pcrochet +Geometry of the trigger chambers : a vertical gap of has been introduced around x=0 according fig.3.27 of the TDR (P.Dupieux) + Revision 1.6 2001/01/30 12:19:39 morsch Update chamber positions (AdTDR version update 4/12/2000). @@ -52,7 +55,6 @@ Float_t AliMUONConstants::fgDefaultChamberZ[14] = 1610, 1625., 1710., 1725.}; Float_t AliMUONConstants::fgDmin[7] = { 36.4, 46.2, 66.0, 80., 80., 100., 100.}; -Float_t AliMUONConstants::fgDmax[7] = {183., 245., 316.6, 560., 560., 850., 900.}; - +Float_t AliMUONConstants::fgDmax[7] = {183., 245., 395., 560., 563., 850., 900.}; Int_t AliMUONConstants::fgMaxZoom = 20; diff --git a/MUON/AliMUONv1.cxx b/MUON/AliMUONv1.cxx index 957cbcdbbe8..10412f9c0c1 100644 --- a/MUON/AliMUONv1.cxx +++ b/MUON/AliMUONv1.cxx @@ -15,6 +15,9 @@ /* $Log$ +Revision 1.24 2001/03/14 17:22:15 pcrochet +Geometry of the trigger chambers : a vertical gap of has been introduced around x=0 according fig.3.27 of the TDR (P.Dupieux) + Revision 1.23 2001/01/18 15:23:49 egangler Bug correction in StepManager : Now the systematic offset with angle is cured @@ -649,11 +652,11 @@ void AliMUONv1::CreateGeometry() // Mother volume tpar[0] = iChamber->RInner()-dframep; tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi); - tpar[2] = dstation/4; + tpar[2] = dstation/5; 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"); + gMC->Gspos("C05M", 1, "ALIC", 0., 0., zpos1 , 0, "MANY"); + gMC->Gspos("C06M", 1, "ALIC", 0., 0., zpos2 , 0, "MANY"); // volumes for slat geometry (xx=5,..,10 chamber id): // Sxx0 Sxx1 Sxx2 Sxx3 --> Slat Mother volumes @@ -663,12 +666,23 @@ void AliMUONv1::CreateGeometry() // SxxC --> Carbon panel // SxxR --> Rohacell // SxxH, SxxV --> Horizontal and Vertical frames (vetronite) - + // SB5x --> Volumes for the 35 cm long PCB // slat dimensions: slat is a MOTHER volume!!! made of air + // only for chamber 5: slat 1 has a PCB shorter by 5cm! + + Float_t tlength = 35.; + Float_t panelpar2[3] = { tlength/2., panelpar[1], panelpar[2]}; + Float_t rohapar2[3] = { tlength/2., rohapar[1], rohapar[2]}; + Float_t insupar2[3] = { tlength/2., insupar[1], insupar[2]}; + Float_t pcbpar2[3] = { tlength/2., pcbpar[1], pcbpar[2]}; + Float_t senspar2[3] = { tlength/2., senspar[1], senspar[2]}; + Float_t hFramepar2[3] = { tlength/2., hFramepar[1], hFramepar[2]}; + Float_t bFramepar2[3] = { tlength/2., bFramepar[1], bFramepar[2]}; + const Int_t nSlats3 = 5; // number of slats per quadrant const Int_t nPCB3[nSlats3] = {3,3,4,3,2}; // n PCB per slat - const Float_t xpos3[nSlats3] = {30., 40., 0., 0., 0.}; + const Float_t xpos3[nSlats3] = {31., 40., 0., 0., 0.}; Float_t slatLength3[nSlats3]; // create and position the slat (mother) volumes @@ -677,25 +691,39 @@ void AliMUONv1::CreateGeometry() char volNam6[5]; Float_t xSlat3; + Float_t spar2[3]; for (i = 0; iGsvolu(volNam5,"BOX",slatMaterial,spar,3); - gMC->Gspos(volNam5, i*4+1,"C05M", xSlat3, ySlat31, zSlat+2.*dzCh3, 0, "ONLY"); - gMC->Gspos(volNam5, i*4+2,"C05M",-xSlat3, ySlat31, zSlat-2.*dzCh3, 0, "ONLY"); + gMC->Gsvolu(volNam5,"BOX",slatMaterial,spar2,3); + gMC->Gspos(volNam5, i*4+1,"C05M", xSlat32, ySlat31, zSlat+2.*dzCh3, 0, "ONLY"); + gMC->Gspos(volNam5, i*4+2,"C05M",-xSlat32, ySlat31, zSlat-2.*dzCh3, 0, "ONLY"); + if (i>0) { - gMC->Gspos(volNam5, i*4+3,"C05M", xSlat3, ySlat32, zSlat+2.*dzCh3, 0, "ONLY"); - gMC->Gspos(volNam5, i*4+4,"C05M",-xSlat3, ySlat32, zSlat-2.*dzCh3, 0, "ONLY"); + gMC->Gspos(volNam5, i*4+3,"C05M", xSlat32, ySlat32, zSlat+2.*dzCh3, 0, "ONLY"); + gMC->Gspos(volNam5, i*4+4,"C05M",-xSlat32, ySlat32, zSlat-2.*dzCh3, 0, "ONLY"); } sprintf(volNam6,"S06%d",i); gMC->Gsvolu(volNam6,"BOX",slatMaterial,spar,3); @@ -710,21 +738,25 @@ void AliMUONv1::CreateGeometry() // create the panel volume gMC->Gsvolu("S05C","BOX",panelMaterial,panelpar,3); + gMC->Gsvolu("SB5C","BOX",panelMaterial,panelpar2,3); gMC->Gsvolu("S06C","BOX",panelMaterial,panelpar,3); // create the rohacell volume gMC->Gsvolu("S05R","BOX",rohaMaterial,rohapar,3); + gMC->Gsvolu("SB5R","BOX",rohaMaterial,rohapar2,3); gMC->Gsvolu("S06R","BOX",rohaMaterial,rohapar,3); // create the insulating material volume gMC->Gsvolu("S05I","BOX",insuMaterial,insupar,3); + gMC->Gsvolu("SB5I","BOX",insuMaterial,insupar2,3); gMC->Gsvolu("S06I","BOX",insuMaterial,insupar,3); // create the PCB volume gMC->Gsvolu("S05P","BOX",pcbMaterial,pcbpar,3); + gMC->Gsvolu("SB5P","BOX",pcbMaterial,pcbpar2,3); gMC->Gsvolu("S06P","BOX",pcbMaterial,pcbpar,3); // create the sensitive volumes, @@ -740,11 +772,13 @@ void AliMUONv1::CreateGeometry() // create the horizontal frame volume gMC->Gsvolu("S05H","BOX",hFrameMaterial,hFramepar,3); + gMC->Gsvolu("SB5H","BOX",hFrameMaterial,hFramepar2,3); gMC->Gsvolu("S06H","BOX",hFrameMaterial,hFramepar,3); // create the horizontal border volume gMC->Gsvolu("S05B","BOX",bFrameMaterial,bFramepar,3); + gMC->Gsvolu("SB5B","BOX",bFrameMaterial,bFramepar2,3); gMC->Gsvolu("S06B","BOX",bFrameMaterial,bFramepar,3); index=0; @@ -752,10 +786,12 @@ void AliMUONv1::CreateGeometry() sprintf(volNam5,"S05%d",i); sprintf(volNam6,"S06%d",i); Float_t xvFrame = (slatLength3[i] - vFrameLength)/2.; + Float_t xvFrame2 = xvFrame; + if ( i==1 || i ==2 ) xvFrame2 -= 5./2.; // position the vertical frames - if (i!=1) { - gMC->Gspos("S05V",2*i-1,volNam5, xvFrame, 0., 0. , 0, "ONLY"); - gMC->Gspos("S05V",2*i ,volNam5,-xvFrame, 0., 0. , 0, "ONLY"); + if (i!=1 && i!=0) { + gMC->Gspos("S05V",2*i-1,volNam5, xvFrame2, 0., 0. , 0, "ONLY"); + gMC->Gspos("S05V",2*i ,volNam5,-xvFrame2, 0., 0. , 0, "ONLY"); gMC->Gspos("S06V",2*i-1,volNam6, xvFrame, 0., 0. , 0, "ONLY"); gMC->Gspos("S06V",2*i ,volNam6,-xvFrame, 0., 0. , 0, "ONLY"); } @@ -763,35 +799,53 @@ void AliMUONv1::CreateGeometry() for (j=0; jGspos("S05C",2*index-1,volNam5, xx, 0., zPanel , 0, "ONLY"); - gMC->Gspos("S05C",2*index ,volNam5, xx, 0.,-zPanel , 0, "ONLY"); + if ( (i==1 || i==2) && j == nPCB3[i]-1) { // 1 pcb is shortened by 5cm + gMC->Gspos("SB5C",2*index-1,volNam5, xx, 0., zPanel , 0, "ONLY"); + gMC->Gspos("SB5C",2*index ,volNam5, xx, 0.,-zPanel , 0, "ONLY"); + gMC->Gspos("SB5I",index ,volNam5, xx, 0., 0 , 0, "ONLY"); + } + else if ( (i==1 || i==2) && j < nPCB3[i]-1) { + gMC->Gspos("S05C",2*index-1,volNam5, xx2, 0., zPanel , 0, "ONLY"); + gMC->Gspos("S05C",2*index ,volNam5, xx2, 0.,-zPanel , 0, "ONLY"); + gMC->Gspos("S05I",index ,volNam5, xx2, 0., 0 , 0, "ONLY"); + } + else { + gMC->Gspos("S05C",2*index-1,volNam5, xx, 0., zPanel , 0, "ONLY"); + gMC->Gspos("S05C",2*index ,volNam5, xx, 0.,-zPanel , 0, "ONLY"); + gMC->Gspos("S05I",index ,volNam5, xx, 0., 0 , 0, "ONLY"); + } gMC->Gspos("S06C",2*index-1,volNam6, xx, 0., zPanel , 0, "ONLY"); gMC->Gspos("S06C",2*index ,volNam6, xx, 0.,-zPanel , 0, "ONLY"); - - gMC->Gspos("S05I",index,volNam5, xx, 0., 0 , 0, "ONLY"); gMC->Gspos("S06I",index,volNam6, xx, 0., 0 , 0, "ONLY"); } } - + // position the rohacell volume inside the panel volume gMC->Gspos("S05R",1,"S05C",0.,0.,0.,0,"ONLY"); + gMC->Gspos("SB5R",1,"SB5C",0.,0.,0.,0,"ONLY"); gMC->Gspos("S06R",1,"S06C",0.,0.,0.,0,"ONLY"); // position the PCB volume inside the insulating material volume gMC->Gspos("S05P",1,"S05I",0.,0.,0.,0,"ONLY"); + gMC->Gspos("SB5P",1,"SB5I",0.,0.,0.,0,"ONLY"); gMC->Gspos("S06P",1,"S06I",0.,0.,0.,0,"ONLY"); // position the horizontal frame volume inside the PCB volume gMC->Gspos("S05H",1,"S05P",0.,0.,0.,0,"ONLY"); + gMC->Gspos("SB5H",1,"SB5P",0.,0.,0.,0,"ONLY"); gMC->Gspos("S06H",1,"S06P",0.,0.,0.,0,"ONLY"); // position the sensitive volume inside the horizontal frame volume gMC->Gsposp("S05G",1,"S05H",0.,0.,0.,0,"ONLY",senspar,3); + gMC->Gsposp("S05G",1,"SB5H",0.,0.,0.,0,"ONLY",senspar2,3); gMC->Gsposp("S06G",1,"S06H",0.,0.,0.,0,"ONLY",senspar,3); // position the border volumes inside the PCB volume Float_t yborder = ( pcbHeight - bFrameHeight ) / 2.; gMC->Gspos("S05B",1,"S05P",0., yborder,0.,0,"ONLY"); gMC->Gspos("S05B",2,"S05P",0.,-yborder,0.,0,"ONLY"); + gMC->Gspos("SB5B",1,"SB5P",0., yborder,0.,0,"ONLY"); + gMC->Gspos("SB5B",2,"SB5P",0.,-yborder,0.,0,"ONLY"); gMC->Gspos("S06B",1,"S06P",0., yborder,0.,0,"ONLY"); gMC->Gspos("S06B",2,"S06P",0.,-yborder,0.,0,"ONLY"); @@ -800,10 +854,15 @@ void AliMUONv1::CreateGeometry() gMC->Gsvolu("S05N","BOX",nulocMaterial,nulocpar,3); gMC->Gsvolu("S06N","BOX",nulocMaterial,nulocpar,3); index = 0; - for (xx = -xxmax; xx<=xxmax; xx+=3*nulocLength) { + Float_t xxmax2 = xxmax - 5./2.; + for (xx = -xxmax; xx<=xxmax; xx+=2*nulocLength) { index++; gMC->Gspos("S05N",2*index-1,"S05B", xx, 0.,-bFrameWidth/4., 0, "ONLY"); gMC->Gspos("S05N",2*index ,"S05B", xx, 0., bFrameWidth/4., 0, "ONLY"); + if (xx > -xxmax2 && xx< xxmax2) { + gMC->Gspos("S05N",2*index-1,"SB5B", xx, 0.,-bFrameWidth/4., 0, "ONLY"); + gMC->Gspos("S05N",2*index ,"SB5B", xx, 0., bFrameWidth/4., 0, "ONLY"); + } gMC->Gspos("S06N",2*index-1,"S06B", xx, 0.,-bFrameWidth/4., 0, "ONLY"); gMC->Gspos("S06N",2*index ,"S06B", xx, 0., bFrameWidth/4., 0, "ONLY"); } @@ -814,11 +873,10 @@ void AliMUONv1::CreateGeometry() Int_t ndiv=6; Float_t divpar[3]; Double_t dydiv= sensHeight/ndiv; - Double_t ydiv = yoffs -dydiv - yOverlap/2.; + Double_t ydiv = yoffs -dydiv; Int_t imax=0; - // for (Int_t islat=0; islatGsposp("S05G",imax+4*idiv+1,"C05M", xvol, yvol, z1+z2, 0, "ONLY",divpar,3); gMC->Gsposp("S06G",imax+4*idiv+1,"C06M", xvol, yvol, z1+z2, 0, "ONLY",divpar,3); gMC->Gsposp("S05G",imax+4*idiv+2,"C05M", xvol,-yvol, z1+z2, 0, "ONLY",divpar,3); @@ -860,7 +919,7 @@ void AliMUONv1::CreateGeometry() // Mother volume tpar[0] = iChamber->RInner()-dframep; tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi); - tpar[2] = 3.252; + tpar[2] = dstation/5; gMC->Gsvolu("C07M", "TUBE", idAir, tpar, 3); gMC->Gsvolu("C08M", "TUBE", idAir, tpar, 3); @@ -870,7 +929,7 @@ void AliMUONv1::CreateGeometry() const Int_t nSlats4 = 6; // number of slats per quadrant const Int_t nPCB4[nSlats4] = {4,4,5,5,4,3}; // n PCB per slat - const Float_t xpos4[nSlats4] = {37.5, 40., 0., 0., 0., 0.}; + const Float_t xpos4[nSlats4] = {38.5, 40., 0., 0., 0., 0.}; Float_t slatLength4[nSlats4]; // create and position the slat (mother) volumes @@ -883,7 +942,7 @@ void AliMUONv1::CreateGeometry() for (i = 0; iGspos("S07V",2*i-1,volNam7, xvFrame, 0., 0. , 0, "ONLY"); gMC->Gspos("S07V",2*i ,volNam7,-xvFrame, 0., 0. , 0, "ONLY"); gMC->Gspos("S08V",2*i-1,volNam8, xvFrame, 0., 0. , 0, "ONLY"); @@ -1004,7 +1063,7 @@ void AliMUONv1::CreateGeometry() gMC->Gsvolu("S07N","BOX",nulocMaterial,nulocpar,3); gMC->Gsvolu("S08N","BOX",nulocMaterial,nulocpar,3); index = 0; - for (xx = -xxmax; xx<=xxmax; xx+=3*nulocLength) { + for (xx = -xxmax; xx<=xxmax; xx+=2*nulocLength) { index++; gMC->Gspos("S07N",2*index-1,"S07B", xx, 0.,-bFrameWidth/4., 0, "ONLY"); gMC->Gspos("S07N",2*index ,"S07B", xx, 0., bFrameWidth/4., 0, "ONLY"); @@ -1013,14 +1072,13 @@ void AliMUONv1::CreateGeometry() } // position the volumes approximating the circular section of the pipe - Float_t yoffs = sensHeight/2. - yOverlap/2.; + Float_t yoffs = sensHeight/2. - yOverlap; Float_t epsilon = 0.001; Int_t ndiv=6; Float_t divpar[3]; Double_t dydiv= sensHeight/ndiv; - Double_t ydiv = yoffs -dydiv - yOverlap/2.; + Double_t ydiv = yoffs -dydiv; Int_t imax=0; - // for (Int_t islat=0; islatGspos("S09V",2*i-1,volNam9, xvFrame, 0., 0. , 0, "ONLY"); gMC->Gspos("S09V",2*i ,volNam9,-xvFrame, 0., 0. , 0, "ONLY"); gMC->Gspos("S10V",2*i-1,volNam10, xvFrame, 0., 0. , 0, "ONLY"); @@ -1209,7 +1267,7 @@ void AliMUONv1::CreateGeometry() gMC->Gsvolu("S09N","BOX",nulocMaterial,nulocpar,3); gMC->Gsvolu("S10N","BOX",nulocMaterial,nulocpar,3); index = 0; - for (xx = -xxmax; xx<=xxmax; xx+=3*nulocLength) { + for (xx = -xxmax; xx<=xxmax; xx+=2*nulocLength) { index++; gMC->Gspos("S09N",2*index-1,"S09B", xx, 0.,-bFrameWidth/4., 0, "ONLY"); gMC->Gspos("S09N",2*index ,"S09B", xx, 0., bFrameWidth/4., 0, "ONLY"); @@ -1217,12 +1275,12 @@ void AliMUONv1::CreateGeometry() gMC->Gspos("S10N",2*index ,"S10B", xx, 0., bFrameWidth/4., 0, "ONLY"); } // position the volumes approximating the circular section of the pipe - Float_t yoffs = sensHeight/2. - yOverlap/2.; + Float_t yoffs = sensHeight/2. - yOverlap; Float_t epsilon = 0.001; Int_t ndiv=6; Float_t divpar[3]; Double_t dydiv= sensHeight/ndiv; - Double_t ydiv = yoffs -dydiv - yOverlap/2.; + Double_t ydiv = yoffs -dydiv; Int_t imax=0; // for (Int_t islat=0; islatSetCUTS(1.e-4, 1.e-4, 1.e-3, 1.e-4, 1.e-3, cut, cut, cut, cut, cut, 1 gener->SetMomentumRange(20,20); gener->SetPhiRange(90,90); gener->SetThetaRange(0,0); + //vertex position gener->SetSigma(1,1,0); //Sigma in (X,Y,Z) (cm) on IP position gener->SetPart(kMuonMinus); - gener->SetRange(60, -300, 300, 60, -300., 300., 1, 900, 900); + gener->SetRange(100, -300., 300., 100, -300., 300., 1, 900, 900); break; case doublescan: //********************************************* @@ -272,7 +273,7 @@ Int_t iFRAME =0; Int_t iMAG =0; Int_t iITS =0; Int_t iABSO =0; -Int_t iDIPO =0; +Int_t iDIPO =1; Int_t iHALL =0; Int_t iSHIL =0; Int_t iPIPE =0; @@ -511,7 +512,7 @@ AliMUON *MUON = new AliMUONv1("MUON","normal MUON"); Float_t shift = 1.5/2.; // Float_t xpos5[8] = {2., 2., 2., 42., 42., 2., 2., 2.}; - Float_t xpos5[9] = {2., 2., 2., 2.,32., 2., 2., 2., 2.}; + Float_t xpos5[9] = {2., 2., 2., 2.,33., 2., 2., 2., 2.}; Float_t ypos5 = -(20.+4.*(40.-2.*shift)); chamber=5; @@ -589,7 +590,7 @@ AliMUON *MUON = new AliMUONv1("MUON","normal MUON"); 0,0,3,2, 0,0,2,2, 0,0,0,3}; - Float_t xpos7[11] = {2., 2., 2., 2., 2., 39.5, 2., 2., 2., 2., 2.}; + Float_t xpos7[11] = {2., 2., 2., 2., 2., 40.5, 2., 2., 2., 2., 2.}; Float_t ypos7 = -(20.+5.*(40.-2.*shift)); seg71->SetNSlats(11); @@ -674,7 +675,7 @@ AliMUON *MUON = new AliMUONv1("MUON","normal MUON"); 0,0,0,3}; // Float_t xpos9[13] = {2., 2., 2., 2., 2., 2., 39.5 , 2., 2., 2., 2., 2., 2.}; - Float_t xpos9[13] = {2., 2., 2., 2., 2., 2., 39.5, 2., 2., 2., 2., 2., 2.}; + Float_t xpos9[13] = {2., 2., 2., 2., 2., 2., 40.5, 2., 2., 2., 2., 2., 2.}; Float_t ypos9 = -(20.+6.*(40.-2.*shift)); seg91->SetNSlats(13); -- 2.43.0