LCOV - code coverage report
Current view: top level - TOF/TOFsim - AliTOFv6T0.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1118 1123 99.6 %
Date: 2016-06-14 17:26:59 Functions: 32 32 100.0 %

          Line data    Source code
       1             : /**************************************************************************
       2             :  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       3             :  *                                                                        *
       4             :  * Author: The ALICE Off-line Project.                                    *
       5             :  * Contributors are mentioned in the code where appropriate.              *
       6             :  *                                                                        *
       7             :  * Permission to use, copy, modify and distribute this software and its   *
       8             :  * documentation strictly for non-commercial purposes is hereby granted   *
       9             :  * without fee, provided that the above copyright notice appears in all   *
      10             :  * copies and that both the copyright notice and this permission notice   *
      11             :  * appear in the supporting documentation. The authors make no claims     *
      12             :  * about the suitability of this software for any purpose. It is          *
      13             :  * provided "as is" without express or implied warranty.                  *
      14             :  **************************************************************************/
      15             : 
      16             : /*
      17             : $Log$
      18             : Revision 1.11  2007/10/08 17:52:55  decaro
      19             : hole region in front of PHOS detector: update of sectors' numbers
      20             : 
      21             : Revision 1.10  2007/10/07 19:40:46  decaro
      22             : right handling of l2t matrices and alignable entries in case of TOF staging geometry
      23             : 
      24             : Revision 1.9  2007/10/07 19:36:29  decaro
      25             : TOF materials and volumes description: update
      26             : 
      27             : Revision 1.8  2007/10/04 13:15:37  arcelli
      28             : updates to comply with AliTOFGeometryV5 becoming AliTOFGeometry
      29             : 
      30             : Revision 1.7  2007/10/03 18:07:26  arcelli
      31             : right handling of l2t matrices and alignable entries in case of TOF holes (Annalisa)
      32             : 
      33             : Revision 1.6  2007/10/03 10:41:16  arcelli
      34             : adding tracking-to-local matrices for new AliTOFcluster
      35             : 
      36             : Revision 1.5  2007/07/27 08:14:48  morsch
      37             : Write all track references into the same branch.
      38             : 
      39             : Revision 1.4  2007/05/29 16:51:05  decaro
      40             : Update of the front-end electronics and cooling system description
      41             : 
      42             : Revision 1.3.2  2007/05/29  decaro
      43             : FEA+cooling zone description: update
      44             :      FEA+cooling orientation (side A/ side C) -> correction
      45             : Revision 1.3.1  2007/05/24  decaro
      46             : Change the FEA+cooling zone description:
      47             :      - FCA1/FCA2, air boxes, contain:
      48             :                  FFEA volume, G10 box,
      49             :                  FAL1/FAL2/FAL3 volumes, aluminium boxes;
      50             :      - FRO1/FRO2/FRO3/FRO4/FBAR, aluminum boxes;
      51             :      - changed FTUB positions;
      52             : 
      53             : Revision 1.3  2007/05/04 14:05:42  decaro
      54             : Ineffective comment cleanup
      55             : 
      56             : Revision 1.2  2007/05/04 12:59:22  arcelli
      57             : Change the TOF SM paths for misalignment (one layer up)
      58             : 
      59             : Revision 1.1  2007/05/02 17:32:58  decaro
      60             : TOF geometry description as installed (G. Cara Romeo, A. De Caro)
      61             : 
      62             : Revision 0.1 2007 March G. Cara Romeo and A. De Caro
      63             :         Implemented a more realistic TOF geometry description,
      64             :         in terms of:
      65             :            - material badget,
      66             :            - services and front end electronics description,
      67             :            - TOF crate readout modules
      68             :              (added volume FTOS in ALIC_1/BBMO_1/BBCE_%i -for i=1,...,18-,
      69             :               and in ALIC_1/BFMO_%i -for i=19,...,36- volumes)
      70             :         As the 5th version in terms of geometrical positioning of volumes.
      71             : 
      72             : */
      73             : 
      74             : ///////////////////////////////////////////////////////////////////////////////
      75             : //                                                                           //
      76             : //  This class contains the functions for version 6 of the Time Of Flight    //
      77             : //  detector.                                                                //
      78             : //                                                                           //
      79             : //  VERSION WITH 6 MODULES AND TILTED STRIPS                                 //
      80             : //                                                                           //
      81             : //  FULL COVERAGE VERSION + OPTION for PHOS holes                            //
      82             : //                                                                           //
      83             : //                                                                           //
      84             : //Begin_Html                                                                 //
      85             : /*                                                                           //
      86             : <img src="picts/AliTOFv6T0Class.gif">                                        //
      87             : */                                                                           //
      88             : //End_Html                                                                   //
      89             : //                                                                           //
      90             : ///////////////////////////////////////////////////////////////////////////////
      91             : 
      92             : #include <TDirectory.h>
      93             : #include <TGeoGlobalMagField.h>
      94             : #include <TGeoManager.h>
      95             : #include <TGeoMatrix.h>
      96             : #include <TGeoPhysicalNode.h>
      97             : #include <TGeoVolume.h>
      98             : #include <TLorentzVector.h>
      99             : #include <TVirtualMC.h>
     100             : 
     101             : #include "AliConst.h"
     102             : #include "AliGeomManager.h"
     103             : #include "AliLog.h"
     104             : #include "AliMagF.h"
     105             : #include "AliMC.h"
     106             : #include "AliRun.h"
     107             : #include "AliTrackReference.h"
     108             : 
     109             : #include "AliTOFGeometry.h"
     110             : #include "AliTOFv6T0.h"
     111             : 
     112             : // extern TVirtualMC *TVirtualMC::GetMC();
     113             : // extern TGeoManager *gGeoManager;
     114             : 
     115             : // extern AliRun *gAlice;
     116             : 
     117          26 : ClassImp(AliTOFv6T0)
     118             : 
     119             : // TOF sectors with Nino masks: 0, 8, 9, 10, 16
     120             : const Bool_t AliTOFv6T0::fgkFEAwithMasks[18] = 
     121             : {kTRUE , kFALSE, kFALSE, kFALSE, kFALSE, kFALSE,
     122             :  kFALSE, kFALSE, kTRUE , kTRUE , kTRUE , kFALSE,
     123             :  kFALSE, kFALSE, kFALSE, kFALSE, kTRUE , kFALSE};
     124             : const Float_t AliTOFv6T0::fgkModuleWallThickness   =   0.33; // cm
     125             : const Float_t AliTOFv6T0::fgkInterCentrModBorder1  =  49.5 ; // cm
     126             : const Float_t AliTOFv6T0::fgkInterCentrModBorder2  =  57.5 ; // cm
     127             : const Float_t AliTOFv6T0::fgkExterInterModBorder1  = 196.0 ; // cm
     128             : const Float_t AliTOFv6T0::fgkExterInterModBorder2  = 203.5 ; // cm
     129             : //const Float_t AliTOFv6T0::fgkLengthInCeModBorder   =   7.2 ; // cm // it was 4.7 cm (AdC)
     130             : const Float_t AliTOFv6T0::fgkLengthInCeModBorderU  =   5.0 ; // cm
     131             : const Float_t AliTOFv6T0::fgkLengthInCeModBorderD  =   7.0 ; // cm
     132             : const Float_t AliTOFv6T0::fgkLengthExInModBorder   =   5.0 ; // cm // it was 7.0 cm (AdC)
     133             : const Float_t AliTOFv6T0::fgkModuleCoverThickness  =   2.0 ; // cm
     134             : const Float_t AliTOFv6T0::fgkFEAwidth1    = 19.0; // cm
     135             : const Float_t AliTOFv6T0::fgkFEAwidth2    = 39.5;//38.5; // cm
     136             : const Float_t AliTOFv6T0::fgkSawThickness =  1.0; // cm
     137             : const Float_t AliTOFv6T0::fgkCBLw  = 13.5; // cm
     138             : const Float_t AliTOFv6T0::fgkCBLh1 =  2.0; // cm
     139             : const Float_t AliTOFv6T0::fgkCBLh2 = 12.3; // cm
     140             : const Float_t AliTOFv6T0::fgkBetweenLandMask = 0.1; // cm
     141             : const Float_t AliTOFv6T0::fgkAl1parameters[3] = {static_cast<Float_t>(fgkFEAwidth1*0.5), 0.4, 0.2}; // cm
     142             : const Float_t AliTOFv6T0::fgkAl2parameters[3] = {7.25, 0.75, 0.25}; // cm
     143             : const Float_t AliTOFv6T0::fgkAl3parameters[3] = {3., 4., 0.1}; // cm
     144          26 : const Float_t AliTOFv6T0::fgkRoof1parameters[3] = {fgkAl1parameters[0], fgkAl1parameters[2], 1.45}; // cm
     145          26 : const Float_t AliTOFv6T0::fgkRoof2parameters[3] = {fgkAl3parameters[0], 0.1, 1.15}; // cm
     146             : const Float_t AliTOFv6T0::fgkFEAparameters[3] = {static_cast<Float_t>(fgkFEAwidth1*0.5), 5.6, 0.1}; // cm
     147             : const Float_t AliTOFv6T0::fgkBar[3] = {8.575, 0.6, 0.25}; // cm
     148          26 : const Float_t AliTOFv6T0::fgkBar1[3] = {fgkBar[0], fgkBar[1], 0.1}; // cm
     149          26 : const Float_t AliTOFv6T0::fgkBar2[3] = {fgkBar[0], 0.1, static_cast<Float_t>(fgkBar[1] - 2.*fgkBar1[2])}; // cm
     150          26 : const Float_t AliTOFv6T0::fgkBarS[3] = {2., fgkBar[1], fgkBar[2]}; // cm
     151          26 : const Float_t AliTOFv6T0::fgkBarS1[3] = {fgkBarS[0], fgkBar1[1], fgkBar1[2]}; // cm
     152          26 : const Float_t AliTOFv6T0::fgkBarS2[3] = {fgkBarS[0], fgkBar2[1], fgkBar2[2]}; // cm
     153             : 
     154             : //_____________________________________________________________________________
     155          12 :   AliTOFv6T0::AliTOFv6T0():
     156          12 :   fIdFTOA(-1),
     157          12 :   fIdFTOB(-1),
     158          12 :   fIdFTOC(-1),
     159          12 :   fIdFLTA(-1),
     160          12 :   fIdFLTB(-1),
     161          12 :   fIdFLTC(-1)//,
     162             : //fTOFHoles(kFALSE)
     163          60 : {
     164             :   //
     165             :   // Default constructor
     166             :   //
     167             : 
     168          24 : }
     169             :  
     170             : //_____________________________________________________________________________
     171             : AliTOFv6T0::AliTOFv6T0(const char *name, const char *title):
     172           1 :   AliTOF(name,title,"tzero"),
     173           1 :   fIdFTOA(-1),
     174           1 :   fIdFTOB(-1),
     175           1 :   fIdFTOC(-1),
     176           1 :   fIdFLTA(-1),
     177           1 :   fIdFLTB(-1),
     178           1 :   fIdFLTC(-1)//,
     179             :   //fTOFHoles(kFALSE)
     180           5 : {
     181             :   //
     182             :   // Standard constructor
     183             :   //
     184             : 
     185             :   //
     186             :   // Check that FRAME is there otherwise we have no place where to
     187             :   // put TOF
     188             : 
     189             :   /*
     190             :   AliModule* frame = (AliModule*)gAlice->GetModule("FRAME");
     191             : 
     192             :   if(!frame) {
     193             :     AliFatal("TOF needs FRAME to be present");
     194             :   } else {
     195             :     if (fTOFGeometry) delete fTOFGeometry;
     196             :     fTOFGeometry = new AliTOFGeometry();
     197             : 
     198             :     if(frame->IsVersion()==1) {
     199             :       AliDebug(1,Form("Frame version %d", frame->IsVersion())); 
     200             :       AliDebug(1,"Full Coverage for TOF");
     201             :       fTOFHoles=false;}
     202             :     else {
     203             :       AliDebug(1,Form("Frame version %d", frame->IsVersion())); 
     204             :       AliDebug(1,"TOF with Holes for PHOS");
     205             :       fTOFHoles=true;}
     206             : 
     207             :   }
     208             :   */
     209             : 
     210           3 :   if (fTOFGeometry) delete fTOFGeometry;
     211           3 :   fTOFGeometry = new AliTOFGeometry();
     212           1 :   fTOFGeometry->SetHoles(fTOFHoles);
     213             : 
     214             :   //AliTOF::fTOFGeometry = fTOFGeometry;
     215             : 
     216             :   // Save the geometry
     217           2 :   TDirectory* saveDir = gDirectory;
     218           1 :   AliRunLoader::Instance()->CdGAFile();
     219           1 :   fTOFGeometry->Write("TOFgeometry");
     220           1 :   saveDir->cd();
     221             : 
     222           2 : } 
     223             : 
     224             : //_____________________________________________________________________________
     225             : void AliTOFv6T0::AddAlignableVolumes() const
     226             : {
     227             :   //
     228             :   // Create entries for alignable volumes associating the symbolic volume
     229             :   // name with the corresponding volume path. Needs to be syncronized with
     230             :   // eventual changes in the geometry.
     231             :   //
     232             : 
     233             :   AliGeomManager::ELayerID idTOF = AliGeomManager::kTOF;
     234             :   Int_t modUID, modnum=0;
     235             : 
     236           2 :   TString volPath;
     237           1 :   TString symName;
     238             : 
     239           1 :   TString vpL0  = "ALIC_1/B077_1/BSEGMO";
     240           1 :   TString vpL1 = "_1/BTOF";
     241           1 :   TString vpL2 = "_1";
     242           1 :   TString vpL3 = "/FTOA_0";
     243           1 :   TString vpL4 = "/FLTA_0/FSTR_";
     244             : 
     245           1 :   TString snSM  = "TOF/sm";
     246           1 :   TString snSTRIP = "/strip";
     247             : 
     248           1 :   Int_t nSectors=fTOFGeometry->NSectors();
     249           2 :   Int_t nStrips =fTOFGeometry->NStripA()+
     250           2 :                  2*fTOFGeometry->NStripB()+
     251           1 :                  2*fTOFGeometry->NStripC();
     252             : 
     253             :   //
     254             :   // The TOF MRPC Strips
     255             :   // The symbolic names are: TOF/sm00/strip01
     256             :   //                           ...
     257             :   //                         TOF/sm17/strip91
     258             :  
     259             :   Int_t imod=0;
     260             : 
     261          38 :   for (Int_t isect = 0; isect < nSectors; isect++) {
     262        3312 :     for (Int_t istr = 1; istr <= nStrips; istr++) {
     263             : 
     264        3276 :       modUID = AliGeomManager::LayerToVolUID(idTOF, modnum++);
     265        1638 :       if (fTOFSectors[isect]==-1) continue;
     266             : 
     267        3276 :       if (fTOFHoles && (isect==13 || isect==14 || isect==15)) {
     268         273 :         if (istr<39) {
     269         114 :           vpL3 = "/FTOB_0";
     270         114 :           vpL4 = "/FLTB_0/FSTR_";
     271             :         }
     272         159 :         else if (istr>53) {
     273         114 :           vpL3 = "/FTOC_0";
     274         114 :           vpL4 = "/FLTC_0/FSTR_";
     275             :         }
     276             :         else continue;
     277             :       }
     278             :       else {
     279        1365 :         vpL3 = "/FTOA_0";
     280        1365 :         vpL4 = "/FLTA_0/FSTR_";
     281             :       }
     282             : 
     283        1593 :       volPath  = vpL0;
     284        1593 :       volPath += isect;
     285        1593 :       volPath += vpL1;
     286        1593 :       volPath += isect;
     287        1593 :       volPath += vpL2;
     288        1593 :       volPath += vpL3;
     289        1593 :       volPath += vpL4;
     290        1593 :       volPath += istr;
     291             : 
     292             :       
     293        1593 :       symName  = snSM;
     294        3186 :       symName += Form("%02d",isect);
     295        1593 :       symName += snSTRIP;
     296        3186 :       symName += Form("%02d",istr);
     297             :             
     298        7965 :       AliDebug(2,"--------------------------------------------"); 
     299        7965 :       AliDebug(2,Form("Alignable object %d", imod)); 
     300        7965 :       AliDebug(2,Form("volPath=%s\n",volPath.Data()));
     301        7965 :       AliDebug(2,Form("symName=%s\n",symName.Data()));
     302        7965 :       AliDebug(2,"--------------------------------------------"); 
     303             :               
     304        6372 :       if(!gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data(),modUID))
     305           0 :         AliError(Form("Alignable entry %s not set",symName.Data()));
     306             : 
     307             :       //T2L matrices for alignment
     308        1593 :       TGeoPNEntry *e = gGeoManager->GetAlignableEntryByUID(modUID);
     309        1593 :       if (e) {
     310        1593 :         TGeoHMatrix *globMatrix = e->GetGlobalOrig();
     311        1593 :         Double_t phi = 20.0 * (isect % 18) + 10.0;
     312        3186 :         TGeoHMatrix *t2l  = new TGeoHMatrix();
     313        1593 :         t2l->RotateZ(phi);
     314        3186 :         t2l->MultiplyLeft(&(globMatrix->Inverse()));
     315        1593 :         e->SetMatrix(t2l);
     316        1593 :       }
     317             :       else {
     318           0 :         AliError(Form("Alignable entry %s is not valid!",symName.Data()));
     319             :       }
     320        1593 :       imod++;
     321        1593 :     }
     322             :   }
     323             : 
     324             : 
     325             :   //
     326             :   // The TOF supermodules
     327             :   // The symbolic names are: TOF/sm00
     328             :   //                           ...
     329             :   //                         TOF/sm17
     330             :   //
     331          38 :   for (Int_t isect = 0; isect < nSectors; isect++) {
     332             : 
     333          18 :     volPath  = vpL0;
     334          18 :     volPath += isect;
     335          18 :     volPath += vpL1;
     336          18 :     volPath += isect;
     337          18 :     volPath += vpL2;
     338             : 
     339          18 :     symName  = snSM;
     340          36 :     symName += Form("%02d",isect);
     341             : 
     342          90 :     AliDebug(2,"--------------------------------------------"); 
     343          90 :     AliDebug(2,Form("Alignable object %d", isect+imod)); 
     344          90 :     AliDebug(2,Form("volPath=%s\n",volPath.Data()));
     345          90 :     AliDebug(2,Form("symName=%s\n",symName.Data()));
     346          90 :     AliDebug(2,"--------------------------------------------"); 
     347             : 
     348          54 :     gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data());
     349             : 
     350             :   }
     351             :   
     352           1 : }
     353             : 
     354             : //_____________________________________________________________________________
     355             : void AliTOFv6T0::CreateGeometry()
     356             : {
     357             :   //
     358             :   // Create geometry for Time Of Flight version 0
     359             :   //
     360             :   //Begin_Html
     361             :   /*
     362             :     <img src="picts/AliTOFv6T0.gif">
     363             :   */
     364             :   //End_Html
     365             :   //
     366             :   // Creates common geometry
     367             :   //
     368           2 :   AliTOF::CreateGeometry();
     369           1 : }
     370             :  
     371             : 
     372             : //_____________________________________________________________________________
     373             : void AliTOFv6T0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenA)
     374             : {
     375             :   //
     376             :   // Definition of the Time Of Fligh Resistive Plate Chambers
     377             :   //
     378             : 
     379           4 :   AliDebug(1, "************************* TOF geometry **************************");
     380           3 :   AliDebug(1,Form(" xtof   %f",  xtof));
     381           3 :   AliDebug(1,Form(" ytof   %f",  ytof));
     382           3 :   AliDebug(1,Form(" zlenA   %f", zlenA));
     383           3 :   AliDebug(2,Form(" zlenA*0.5 = %f", zlenA*0.5));
     384             : 
     385             :   Float_t xFLT, yFLT, zFLTA;
     386           1 :   xFLT  = xtof     - 2.*fgkModuleWallThickness;
     387           1 :   yFLT  = ytof*0.5 -    fgkModuleWallThickness;
     388           1 :   zFLTA = zlenA    - 2.*fgkModuleWallThickness;
     389             : 
     390           1 :   CreateModules(xtof, ytof, zlenA, xFLT, yFLT, zFLTA);
     391           1 :   MakeStripsInModules(ytof, zlenA);
     392             : 
     393           1 :   CreateModuleCovers(xtof, zlenA);
     394             : 
     395           1 :   CreateBackZone(xtof, ytof, zlenA);
     396           1 :   MakeFrontEndElectronics(xtof);
     397           1 :   MakeFEACooling(xtof);
     398           1 :   MakeNinoMask(xtof);
     399           1 :   MakeSuperModuleCooling(xtof, ytof, zlenA);
     400           1 :   MakeSuperModuleServices(xtof, ytof, zlenA);
     401             : 
     402           1 :   MakeModulesInBTOFvolumes(ytof, zlenA);
     403           1 :   MakeCoversInBTOFvolumes();
     404           1 :   MakeBackInBTOFvolumes(ytof);
     405             : 
     406           1 :   MakeReadoutCrates(ytof);
     407             : 
     408           1 : }
     409             : 
     410             : //_____________________________________________________________________________
     411             : void AliTOFv6T0::CreateModules(Float_t xtof,  Float_t ytof, Float_t zlenA,
     412             :                                Float_t xFLT,  Float_t yFLT, Float_t zFLTA) const
     413             : {
     414             :   //
     415             :   // Create supermodule volume
     416             :   // and wall volumes to separate 5 modules
     417             :   //
     418             : 
     419           2 :   const Float_t kPi = TMath::Pi();
     420             : 
     421           1 :   Int_t *idtmed = fIdtmed->GetArray()-499;
     422             : 
     423          18 :   Int_t idrotm[8]; for (Int_t ii=0; ii<8; ii++) idrotm[ii]=0;
     424             : 
     425             :   // Definition of the of fibre glass modules (FTOA, FTOB and FTOC)
     426           1 :   Float_t  par[3];
     427           1 :   par[0] = xtof * 0.5;
     428           1 :   par[1] = ytof * 0.25;
     429           1 :   par[2] = zlenA * 0.5;
     430           1 :   TVirtualMC::GetMC()->Gsvolu("FTOA", "BOX ", idtmed[503], par, 3);  // Fibre glass
     431             : 
     432           1 :   if (fTOFHoles) {
     433           1 :     par[0] =  xtof * 0.5;
     434           1 :     par[1] =  ytof * 0.25;
     435           1 :     par[2] = (zlenA*0.5 - fgkInterCentrModBorder1)*0.5;
     436           1 :     TVirtualMC::GetMC()->Gsvolu("FTOB", "BOX ", idtmed[503], par, 3);  // Fibre glass
     437           1 :     TVirtualMC::GetMC()->Gsvolu("FTOC", "BOX ", idtmed[503], par, 3);  // Fibre glass
     438           1 :   }
     439             : 
     440             : 
     441             :   // Definition and positioning
     442             :   // of the not sensitive volumes with Insensitive Freon (FLTA, FLTB and FLTC)
     443           1 :   par[0] = xFLT*0.5;
     444           1 :   par[1] = yFLT*0.5;
     445           1 :   par[2] = zFLTA*0.5;
     446           1 :   TVirtualMC::GetMC()->Gsvolu("FLTA", "BOX ", idtmed[506], par, 3); // Freon mix
     447             : 
     448             :   Float_t xcoor, ycoor, zcoor;
     449             :   xcoor = 0.;
     450             :   ycoor = fgkModuleWallThickness*0.5;
     451             :   zcoor = 0.;
     452           1 :   TVirtualMC::GetMC()->Gspos ("FLTA", 0, "FTOA", xcoor, ycoor, zcoor, 0, "ONLY");
     453             : 
     454           1 :   if (fTOFHoles) {
     455           1 :     par[2] = (zlenA*0.5 - 2.*fgkModuleWallThickness - fgkInterCentrModBorder1)*0.5;
     456           1 :     TVirtualMC::GetMC()->Gsvolu("FLTB", "BOX ", idtmed[506], par, 3); // Freon mix
     457           1 :     TVirtualMC::GetMC()->Gsvolu("FLTC", "BOX ", idtmed[506], par, 3); // Freon mix
     458             : 
     459             :     //xcoor = 0.;
     460             :     //ycoor = fgkModuleWallThickness*0.5;
     461             :     zcoor = fgkModuleWallThickness;
     462           1 :     TVirtualMC::GetMC()->Gspos ("FLTB", 0, "FTOB", xcoor, ycoor, zcoor, 0, "ONLY");
     463           1 :     TVirtualMC::GetMC()->Gspos ("FLTC", 0, "FTOC", xcoor, ycoor,-zcoor, 0, "ONLY");
     464           1 :   }
     465             : 
     466             :   // Definition and positioning
     467             :   // of the fibre glass walls between central and intermediate modules (FWZ1 and FWZ2)
     468           1 :   Float_t alpha, tgal, beta, tgbe, trpa[11];
     469             :   //tgal  = (yFLT - 2.*fgkLengthInCeModBorder)/(fgkInterCentrModBorder2 - fgkInterCentrModBorder1);
     470           1 :   tgal  = (yFLT - fgkLengthInCeModBorderU - fgkLengthInCeModBorderD)/(fgkInterCentrModBorder2 - fgkInterCentrModBorder1);
     471           1 :   alpha = TMath::ATan(tgal);
     472           1 :   beta  = (kPi*0.5 - alpha)*0.5;
     473           1 :   tgbe  = TMath::Tan(beta);
     474           1 :   trpa[0]  = xFLT*0.5;
     475           1 :   trpa[1]  = 0.;
     476           1 :   trpa[2]  = 0.;
     477           1 :   trpa[3]  = 2.*fgkModuleWallThickness;
     478             :   //trpa[4]  = (fgkLengthInCeModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
     479             :   //trpa[5]  = (fgkLengthInCeModBorder + 2.*fgkModuleWallThickness*tgbe)*0.5;
     480           1 :   trpa[4]  = (fgkLengthInCeModBorderD - 2.*fgkModuleWallThickness*tgbe)*0.5;
     481           1 :   trpa[5]  = (fgkLengthInCeModBorderD + 2.*fgkModuleWallThickness*tgbe)*0.5;
     482           1 :   trpa[6]  = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
     483           1 :   trpa[7]  = 2.*fgkModuleWallThickness;
     484           1 :   trpa[8]  = (fgkLengthInCeModBorderD - 2.*fgkModuleWallThickness*tgbe)*0.5;
     485           1 :   trpa[9]  = (fgkLengthInCeModBorderD + 2.*fgkModuleWallThickness*tgbe)*0.5;
     486             :   //trpa[8]  = (fgkLengthInCeModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
     487             :   //trpa[9]  = (fgkLengthInCeModBorder + 2.*fgkModuleWallThickness*tgbe)*0.5;
     488           1 :   trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
     489           1 :   TVirtualMC::GetMC()->Gsvolu("FWZ1D", "TRAP", idtmed[503], trpa, 11); // Fibre glass
     490             : 
     491           1 :   AliMatrix (idrotm[0],90., 90.,180.,0.,90.,180.);
     492           1 :   AliMatrix (idrotm[1],90., 90.,  0.,0.,90.,  0.);
     493             : 
     494             :   //xcoor = 0.;
     495             :   //ycoor = -(yFLT - fgkLengthInCeModBorder)*0.5;
     496           1 :   ycoor = -(yFLT - fgkLengthInCeModBorderD)*0.5;
     497             :   zcoor = fgkInterCentrModBorder1;
     498           1 :   TVirtualMC::GetMC()->Gspos("FWZ1D", 1, "FLTA", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
     499           1 :   TVirtualMC::GetMC()->Gspos("FWZ1D", 2, "FLTA", xcoor, ycoor,-zcoor, idrotm[1], "ONLY");
     500             : 
     501             :   Float_t y0B, ycoorB, zcoorB;
     502             : 
     503           1 :   if (fTOFHoles) {
     504             :     //y0B = fgkLengthInCeModBorder - fgkModuleWallThickness*tgbe;
     505           1 :     y0B = fgkLengthInCeModBorderD - fgkModuleWallThickness*tgbe;
     506           1 :     trpa[0]  = xFLT*0.5;
     507           1 :     trpa[1]  = 0.;
     508           1 :     trpa[2]  = 0.;
     509           1 :     trpa[3]  = fgkModuleWallThickness;
     510           1 :     trpa[4]  = (y0B - fgkModuleWallThickness*tgbe)*0.5;
     511           1 :     trpa[5]  = (y0B + fgkModuleWallThickness*tgbe)*0.5;
     512           1 :     trpa[6]  = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
     513           1 :     trpa[7]  = fgkModuleWallThickness;
     514           1 :     trpa[8]  = (y0B - fgkModuleWallThickness*tgbe)*0.5;
     515           1 :     trpa[9]  = (y0B + fgkModuleWallThickness*tgbe)*0.5;
     516           1 :     trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
     517             :     //xcoor = 0.;
     518           1 :     ycoorB = ycoor - fgkModuleWallThickness*0.5*tgbe;
     519           1 :     zcoorB = (zlenA*0.5 - 2.*fgkModuleWallThickness - fgkInterCentrModBorder1)*0.5 - 2.*fgkModuleWallThickness;
     520           1 :     TVirtualMC::GetMC()->Gsvolu("FWZAD", "TRAP", idtmed[503], trpa, 11); // Fibre glass
     521           1 :     TVirtualMC::GetMC()->Gspos("FWZAD", 1, "FLTB", xcoor, ycoorB, zcoorB, idrotm[1], "ONLY");
     522           1 :     TVirtualMC::GetMC()->Gspos("FWZAD", 2, "FLTC", xcoor, ycoorB,-zcoorB, idrotm[0], "ONLY");
     523           1 :   }
     524             : 
     525             : 
     526             : 
     527             :   tgal  = (yFLT - fgkLengthInCeModBorderU - fgkLengthInCeModBorderD)/(fgkInterCentrModBorder2 - fgkInterCentrModBorder1);
     528           1 :   alpha = TMath::ATan(tgal);
     529           1 :   beta  = (kPi*0.5 - alpha)*0.5;
     530           1 :   tgbe  = TMath::Tan(beta);
     531           1 :   trpa[0]  = xFLT*0.5;
     532           1 :   trpa[1]  = 0.;
     533           1 :   trpa[2]  = 0.;
     534           1 :   trpa[3]  = 2.*fgkModuleWallThickness;
     535             :   //trpa[4]  = (fgkLengthInCeModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
     536             :   //trpa[5]  = (fgkLengthInCeModBorder + 2.*fgkModuleWallThickness*tgbe)*0.5;
     537           1 :   trpa[4]  = (fgkLengthInCeModBorderU - 2.*fgkModuleWallThickness*tgbe)*0.5;
     538           1 :   trpa[5]  = (fgkLengthInCeModBorderU + 2.*fgkModuleWallThickness*tgbe)*0.5;
     539           1 :   trpa[6]  = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
     540           1 :   trpa[7]  = 2.*fgkModuleWallThickness;
     541           1 :   trpa[8]  = (fgkLengthInCeModBorderU - 2.*fgkModuleWallThickness*tgbe)*0.5;
     542           1 :   trpa[9]  = (fgkLengthInCeModBorderU + 2.*fgkModuleWallThickness*tgbe)*0.5;
     543             :   //trpa[8]  = (fgkLengthInCeModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
     544             :   //trpa[9]  = (fgkLengthInCeModBorder + 2.*fgkModuleWallThickness*tgbe)*0.5;
     545           1 :   trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
     546           1 :   TVirtualMC::GetMC()->Gsvolu("FWZ1U", "TRAP", idtmed[503], trpa, 11); // Fibre glass
     547             : 
     548             : 
     549           1 :   AliMatrix (idrotm[2],90.,270.,  0.,0.,90.,180.);
     550           1 :   AliMatrix (idrotm[3],90.,270.,180.,0.,90.,  0.);
     551             : 
     552             :   //xcoor = 0.;
     553             :   //ycoor = (yFLT - fgkLengthInCeModBorder)*0.5;
     554           1 :   ycoor = (yFLT - fgkLengthInCeModBorderU)*0.5;
     555             :   zcoor = fgkInterCentrModBorder2;
     556           1 :   TVirtualMC::GetMC()->Gspos("FWZ1U", 1, "FLTA", xcoor, ycoor, zcoor,idrotm[2], "ONLY");
     557           1 :   TVirtualMC::GetMC()->Gspos("FWZ1U", 2, "FLTA", xcoor, ycoor,-zcoor,idrotm[3], "ONLY");
     558             : 
     559           1 :   if (fTOFHoles) {
     560             :     //y0B = fgkLengthInCeModBorder + fgkModuleWallThickness*tgbe;
     561           1 :     y0B = fgkLengthInCeModBorderU + fgkModuleWallThickness*tgbe;
     562           1 :     trpa[0]  = xFLT*0.5;
     563           1 :     trpa[1]  = 0.;
     564           1 :     trpa[2]  = 0.;
     565           1 :     trpa[3]  = fgkModuleWallThickness;
     566           1 :     trpa[4]  = (y0B - fgkModuleWallThickness*tgbe)*0.5;
     567           1 :     trpa[5]  = (y0B + fgkModuleWallThickness*tgbe)*0.5;
     568           1 :     trpa[6]  = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
     569           1 :     trpa[7]  = fgkModuleWallThickness;
     570           1 :     trpa[8]  = (y0B - fgkModuleWallThickness*tgbe)*0.5;
     571           1 :     trpa[9]  = (y0B + fgkModuleWallThickness*tgbe)*0.5;
     572           1 :     trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
     573           1 :     TVirtualMC::GetMC()->Gsvolu("FWZBU", "TRAP", idtmed[503], trpa, 11); // Fibre glass
     574             :     //xcoor = 0.;
     575           1 :     ycoorB = ycoor - fgkModuleWallThickness*0.5*tgbe;
     576           2 :     zcoorB = (zlenA*0.5 - 2.*fgkModuleWallThickness - fgkInterCentrModBorder1)*0.5 -
     577           1 :       (fgkInterCentrModBorder2 - fgkInterCentrModBorder1) - 2.*fgkModuleWallThickness;
     578           1 :     TVirtualMC::GetMC()->Gspos("FWZBU", 1, "FLTB", xcoor, ycoorB, zcoorB, idrotm[3], "ONLY");
     579           1 :     TVirtualMC::GetMC()->Gspos("FWZBU", 2, "FLTC", xcoor, ycoorB,-zcoorB, idrotm[2], "ONLY");
     580           1 :   }
     581             : 
     582           1 :   trpa[0] = 0.5*(fgkInterCentrModBorder2 - fgkInterCentrModBorder1)/TMath::Cos(alpha);
     583           1 :   trpa[1] = 2.*fgkModuleWallThickness;
     584           1 :   trpa[2] = xFLT*0.5;
     585           1 :   trpa[3] = -beta*kRaddeg;
     586           1 :   trpa[4] = 0.;
     587           1 :   trpa[5] = 0.;
     588           1 :   TVirtualMC::GetMC()->Gsvolu("FWZ2", "PARA", idtmed[503], trpa, 6); // Fibre glass
     589             : 
     590           1 :   AliMatrix (idrotm[4],     alpha*kRaddeg,90.,90.+alpha*kRaddeg,90.,90.,180.);
     591           1 :   AliMatrix (idrotm[5],180.-alpha*kRaddeg,90.,90.-alpha*kRaddeg,90.,90.,  0.);
     592             : 
     593             :   //xcoor = 0.;
     594             :   //ycoor = 0.;
     595             :   ycoor = (fgkLengthInCeModBorderD - fgkLengthInCeModBorderU)*0.5;
     596             :   zcoor = (fgkInterCentrModBorder2 + fgkInterCentrModBorder1)*0.5;
     597           1 :   TVirtualMC::GetMC()->Gspos("FWZ2", 1, "FLTA", xcoor, ycoor, zcoor, idrotm[4], "ONLY");
     598           1 :   TVirtualMC::GetMC()->Gspos("FWZ2", 2, "FLTA", xcoor, ycoor,-zcoor, idrotm[5], "ONLY");
     599             : 
     600           1 :   if (fTOFHoles) {
     601           1 :     trpa[0] = 0.5*(fgkInterCentrModBorder2 - fgkInterCentrModBorder1)/TMath::Cos(alpha);
     602           1 :     trpa[1] = fgkModuleWallThickness;
     603           1 :     trpa[2] = xFLT*0.5;
     604           1 :     trpa[3] = -beta*kRaddeg;
     605           1 :     trpa[4] = 0.;
     606           1 :     trpa[5] = 0.;
     607           1 :     TVirtualMC::GetMC()->Gsvolu("FWZC", "PARA", idtmed[503], trpa, 6); // Fibre glass
     608             :     //xcoor = 0.;
     609           1 :     ycoorB = ycoor - fgkModuleWallThickness*tgbe;
     610           2 :     zcoorB = (zlenA*0.5 - 2.*fgkModuleWallThickness - fgkInterCentrModBorder1)*0.5 -
     611           1 :       (fgkInterCentrModBorder2 - fgkInterCentrModBorder1)*0.5 - 2.*fgkModuleWallThickness;
     612           1 :     TVirtualMC::GetMC()->Gspos("FWZC", 1, "FLTB", xcoor, ycoorB, zcoorB, idrotm[5], "ONLY");
     613           1 :     TVirtualMC::GetMC()->Gspos("FWZC", 2, "FLTC", xcoor, ycoorB,-zcoorB, idrotm[4], "ONLY");
     614           1 :   }
     615             : 
     616             : 
     617             :   // Definition and positioning
     618             :   // of the fibre glass walls between intermediate and lateral modules (FWZ3 and FWZ4)
     619           1 :   tgal  = (yFLT - 2.*fgkLengthExInModBorder)/(fgkExterInterModBorder2 - fgkExterInterModBorder1);
     620           1 :   alpha = TMath::ATan(tgal);
     621           1 :   beta  = (kPi*0.5 - alpha)*0.5;
     622           1 :   tgbe  = TMath::Tan(beta);
     623           1 :   trpa[0]  = xFLT*0.5;
     624           1 :   trpa[1]  = 0.;
     625           1 :   trpa[2]  = 0.;
     626           1 :   trpa[3]  = 2.*fgkModuleWallThickness;
     627           1 :   trpa[4]  = (fgkLengthExInModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
     628           1 :   trpa[5]  = (fgkLengthExInModBorder + 2.*fgkModuleWallThickness*tgbe)*0.5;
     629           1 :   trpa[6]  = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
     630           1 :   trpa[7]  = 2.*fgkModuleWallThickness;
     631           1 :   trpa[8]  = (fgkLengthExInModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
     632           1 :   trpa[9]  = (fgkLengthExInModBorder + 2.*fgkModuleWallThickness*tgbe)*0.5;
     633           1 :   trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
     634           1 :   TVirtualMC::GetMC()->Gsvolu("FWZ3", "TRAP", idtmed[503], trpa, 11); // Fibre glass
     635             : 
     636             :   //xcoor = 0.;
     637             :   ycoor = (yFLT - fgkLengthExInModBorder)*0.5;
     638             :   zcoor = fgkExterInterModBorder1;
     639           1 :   TVirtualMC::GetMC()->Gspos("FWZ3", 1, "FLTA", xcoor, ycoor, zcoor,idrotm[3], "ONLY");
     640           1 :   TVirtualMC::GetMC()->Gspos("FWZ3", 2, "FLTA", xcoor, ycoor,-zcoor,idrotm[2], "ONLY");
     641             : 
     642           1 :   if (fTOFHoles) {
     643             :     //xcoor = 0.;
     644             :     //ycoor = (yFLT - fgkLengthExInModBorder)*0.5;
     645           1 :     zcoor = -fgkExterInterModBorder1 + (zlenA*0.5 + fgkInterCentrModBorder1 - 2.*fgkModuleWallThickness)*0.5;
     646           1 :     TVirtualMC::GetMC()->Gspos("FWZ3", 5, "FLTB", xcoor, ycoor, zcoor, idrotm[2], "ONLY");
     647           1 :     TVirtualMC::GetMC()->Gspos("FWZ3", 6, "FLTC", xcoor, ycoor,-zcoor, idrotm[3], "ONLY");
     648           1 :   }
     649             : 
     650             :   //xcoor = 0.;
     651           1 :   ycoor = -(yFLT - fgkLengthExInModBorder)*0.5;
     652             :   zcoor = fgkExterInterModBorder2;
     653           1 :   TVirtualMC::GetMC()->Gspos("FWZ3", 3, "FLTA", xcoor, ycoor, zcoor, idrotm[1], "ONLY");
     654           1 :   TVirtualMC::GetMC()->Gspos("FWZ3", 4, "FLTA", xcoor, ycoor,-zcoor, idrotm[0], "ONLY");
     655             : 
     656           1 :   if (fTOFHoles) {
     657             :     //xcoor = 0.;
     658             :     //ycoor = -(yFLT - fgkLengthExInModBorder)*0.5;
     659           1 :     zcoor = -fgkExterInterModBorder2 + (zlenA*0.5 + fgkInterCentrModBorder1 - 2.*fgkModuleWallThickness)*0.5;
     660           1 :     TVirtualMC::GetMC()->Gspos("FWZ3", 7, "FLTB", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
     661           1 :     TVirtualMC::GetMC()->Gspos("FWZ3", 8, "FLTC", xcoor, ycoor,-zcoor, idrotm[1], "ONLY");
     662           1 :   }
     663             : 
     664           1 :   trpa[0] = 0.5*(fgkExterInterModBorder2 - fgkExterInterModBorder1)/TMath::Cos(alpha);
     665           1 :   trpa[1] = 2.*fgkModuleWallThickness;
     666           1 :   trpa[2] = xFLT*0.5;
     667           1 :   trpa[3] = -beta*kRaddeg;
     668           1 :   trpa[4] = 0.;
     669           1 :   trpa[5] = 0.;
     670           1 :   TVirtualMC::GetMC()->Gsvolu("FWZ4", "PARA", idtmed[503], trpa, 6); // Fibre glass
     671             : 
     672           1 :   AliMatrix (idrotm[6],alpha*kRaddeg,90.,90.+alpha*kRaddeg,90.,90.,180.);
     673           1 :   AliMatrix (idrotm[7],180.-alpha*kRaddeg,90.,90.-alpha*kRaddeg,90.,90.,0.);
     674             : 
     675             :   //xcoor = 0.;
     676             :   ycoor = 0.;
     677             :   zcoor = (fgkExterInterModBorder2 + fgkExterInterModBorder1)*0.5;
     678           1 :   TVirtualMC::GetMC()->Gspos("FWZ4", 1, "FLTA", xcoor, ycoor, zcoor, idrotm[7], "ONLY");
     679           1 :   TVirtualMC::GetMC()->Gspos("FWZ4", 2, "FLTA", xcoor, ycoor,-zcoor, idrotm[6], "ONLY");
     680             : 
     681           1 :   if (fTOFHoles) {
     682             :     //xcoor = 0.;
     683             :     //ycoor = 0.;
     684           1 :     zcoor = -(fgkExterInterModBorder2 + fgkExterInterModBorder1)*0.5 +
     685           1 :       (zlenA*0.5 + fgkInterCentrModBorder1 - 2.*fgkModuleWallThickness)*0.5;
     686           1 :     TVirtualMC::GetMC()->Gspos("FWZ4", 3, "FLTB", xcoor, ycoor, zcoor, idrotm[6], "ONLY");
     687           1 :     TVirtualMC::GetMC()->Gspos("FWZ4", 4, "FLTC", xcoor, ycoor,-zcoor, idrotm[7], "ONLY");
     688           1 :   }
     689             : 
     690           1 : }
     691             : 
     692             : //_____________________________________________________________________________
     693             : void AliTOFv6T0::CreateModuleCovers(Float_t xtof, Float_t zlenA) const
     694             : {
     695             :   //
     696             :   // Create covers for module:
     697             :   //   per each module zone, defined according to
     698             :   //   fgkInterCentrModBorder2, fgkExterInterModBorder1 and zlenA+2 values,
     699             :   //   there is a frame of thickness 2cm in Al
     700             :   //   and the contained zones in honeycomb of Al.
     701             :   //   There is also an interface layer (1.6mm thichness)
     702             :   //   and plastic and Cu corresponding to the flat cables.
     703             :   //
     704             : 
     705           2 :   Int_t  *idtmed = fIdtmed->GetArray()-499;
     706             : 
     707           1 :   Float_t par[3];
     708           1 :   par[0] = xtof*0.5 + 2.;
     709           1 :   par[1] = fgkModuleCoverThickness*0.5;
     710           1 :   par[2] = zlenA*0.5 + 2.;
     711           1 :   TVirtualMC::GetMC()->Gsvolu("FPEA", "BOX ", idtmed[500], par, 3); // Air
     712           2 :   if (fTOFHoles) TVirtualMC::GetMC()->Gsvolu("FPEB", "BOX ", idtmed[500], par, 3); // Air
     713             : 
     714             :   const Float_t kAlCoverThickness = 1.5;
     715             :   const Float_t kInterfaceCardThickness = 0.16;
     716             :   const Float_t kAlSkinThickness = 0.1;
     717             : 
     718             :   //par[0] = xtof*0.5 + 2.;
     719           1 :   par[1] = kAlCoverThickness*0.5;
     720             :   //par[2] = zlenA*0.5 + 2.;
     721           1 :   TVirtualMC::GetMC()->Gsvolu("FALT", "BOX ", idtmed[504], par, 3); // Al
     722           2 :   if (fTOFHoles) TVirtualMC::GetMC()->Gsvolu("FALB", "BOX ", idtmed[504], par, 3); // Al
     723             :   Float_t  xcoor, ycoor, zcoor;
     724             :   xcoor = 0.;
     725             :   ycoor = 0.;
     726             :   zcoor = 0.;
     727           1 :   TVirtualMC::GetMC()->Gspos("FALT", 0, "FPEA", xcoor, ycoor, zcoor, 0, "ONLY");
     728           2 :   if (fTOFHoles) TVirtualMC::GetMC()->Gspos("FALB", 0, "FPEB", xcoor, ycoor, zcoor, 0, "ONLY");
     729             : 
     730           1 :   par[0] = xtof*0.5;
     731             :   //par[1] = kAlCoverThickness*0.5;
     732           1 :   par[2] = fgkInterCentrModBorder2 - 2.;
     733           1 :   TVirtualMC::GetMC()->Gsvolu("FPE1", "BOX ", idtmed[505], par, 3); // Al honeycomb
     734             :   //xcoor = 0.;
     735             :   //ycoor = 0.;
     736             :   //zcoor = 0.;
     737           1 :   TVirtualMC::GetMC()->Gspos("FPE1", 0, "FALT", xcoor, ycoor, zcoor, 0, "ONLY");
     738             : 
     739           1 :   if (fTOFHoles) {
     740             :     //par[0] = xtof*0.5;
     741           1 :     par[1] = kAlCoverThickness*0.5 - kAlSkinThickness;
     742             :     //par[2] = fgkInterCentrModBorder2 - 2.;
     743           1 :     TVirtualMC::GetMC()->Gsvolu("FPE4", "BOX ", idtmed[515], par, 3); // Al honeycomb for holes
     744             :     //xcoor = 0.;
     745             :     //ycoor = 0.;
     746             :     //zcoor = 0.;
     747           1 :     TVirtualMC::GetMC()->Gspos("FPE4", 0, "FALB", xcoor, ycoor, zcoor, 0, "ONLY");
     748           1 :   }
     749             : 
     750             :   //par[0] = xtof*0.5;
     751             :   //par[1] = kAlCoverThickness*0.5;
     752           1 :   par[2] = (fgkExterInterModBorder1 - fgkInterCentrModBorder2)*0.5 - 2.;
     753           1 :   TVirtualMC::GetMC()->Gsvolu("FPE2", "BOX ", idtmed[505], par, 3); // Al honeycomb
     754             :   //xcoor = 0.;
     755             :   //ycoor = 0.;
     756             :   zcoor = (fgkExterInterModBorder1 + fgkInterCentrModBorder2)*0.5;
     757           1 :   TVirtualMC::GetMC()->Gspos("FPE2", 1, "FALT", xcoor, ycoor, zcoor, 0, "ONLY");
     758           1 :   TVirtualMC::GetMC()->Gspos("FPE2", 2, "FALT", xcoor, ycoor,-zcoor, 0, "ONLY");
     759             : 
     760           1 :   if (fTOFHoles) {
     761             :     //xcoor = 0.;
     762             :     //ycoor = 0.;
     763             :     //zcoor = (fgkExterInterModBorder1 + fgkInterCentrModBorder2)*0.5;
     764           1 :     TVirtualMC::GetMC()->Gspos("FPE2", 1, "FALB", xcoor, ycoor, zcoor, 0, "ONLY");
     765           1 :     TVirtualMC::GetMC()->Gspos("FPE2", 2, "FALB", xcoor, ycoor,-zcoor, 0, "ONLY");
     766           1 :   }
     767             : 
     768             :   //par[0] = xtof*0.5;
     769             :   //par[1] = kAlCoverThickness*0.5;
     770           1 :   par[2] = (zlenA*0.5 + 2. - fgkExterInterModBorder1)*0.5 - 2.;
     771           1 :   TVirtualMC::GetMC()->Gsvolu("FPE3", "BOX ", idtmed[505], par, 3); // Al honeycomb
     772             :   //xcoor = 0.;
     773             :   //ycoor = 0.;
     774           1 :   zcoor = (zlenA*0.5 + 2. + fgkExterInterModBorder1)*0.5;
     775           1 :   TVirtualMC::GetMC()->Gspos("FPE3", 1, "FALT", xcoor, ycoor, zcoor, 0, "ONLY");
     776           1 :   TVirtualMC::GetMC()->Gspos("FPE3", 2, "FALT", xcoor, ycoor,-zcoor, 0, "ONLY");
     777             : 
     778           1 :   if (fTOFHoles) {
     779             :     //xcoor = 0.;
     780             :     //ycoor = 0.;
     781             :     zcoor = (zlenA*0.5 + 2. + fgkExterInterModBorder1)*0.5;
     782           1 :     TVirtualMC::GetMC()->Gspos("FPE3", 1, "FALB", xcoor, ycoor, zcoor, 0, "ONLY");
     783           1 :     TVirtualMC::GetMC()->Gspos("FPE3", 2, "FALB", xcoor, ycoor,-zcoor, 0, "ONLY");
     784           1 :   }
     785             : 
     786             :   // volumes for Interface cards
     787           1 :   par[0] = xtof*0.5;
     788           1 :   par[1] = kInterfaceCardThickness*0.5;
     789           1 :   par[2] = fgkInterCentrModBorder2 - 2.;
     790           1 :   TVirtualMC::GetMC()->Gsvolu("FIF1", "BOX ", idtmed[502], par, 3); // G10
     791             :   //xcoor = 0.;
     792             :   ycoor = kAlCoverThickness*0.5 + kInterfaceCardThickness*0.5;
     793             :   zcoor = 0.;
     794           1 :   TVirtualMC::GetMC()->Gspos("FIF1", 0, "FPEA", xcoor, ycoor, zcoor, 0, "ONLY");
     795             : 
     796             :   //par[0] = xtof*0.5;
     797             :   //par[1] = kInterfaceCardThickness*0.5;
     798           1 :   par[2] = (fgkExterInterModBorder1 - fgkInterCentrModBorder2)*0.5 - 2.;
     799           1 :   TVirtualMC::GetMC()->Gsvolu("FIF2", "BOX ", idtmed[502], par, 3); // G10
     800             :   //xcoor = 0.;
     801             :   //ycoor = kAlCoverThickness*0.5 + kInterfaceCardThickness*0.5;
     802             :   zcoor = (fgkExterInterModBorder1 + fgkInterCentrModBorder2)*0.5;
     803           1 :   TVirtualMC::GetMC()->Gspos("FIF2", 1, "FPEA", xcoor, ycoor, zcoor, 0, "ONLY");
     804           1 :   TVirtualMC::GetMC()->Gspos("FIF2", 2, "FPEA", xcoor, ycoor,-zcoor, 0, "ONLY");
     805           1 :   if (fTOFHoles) {
     806           1 :     TVirtualMC::GetMC()->Gspos("FIF2", 1, "FPEB", xcoor, ycoor, zcoor, 0, "ONLY");
     807           1 :     TVirtualMC::GetMC()->Gspos("FIF2", 2, "FPEB", xcoor, ycoor,-zcoor, 0, "ONLY");
     808           1 :   }
     809             : 
     810             :   //par[0] = xtof*0.5;
     811             :   //par[1] = kInterfaceCardThickness*0.5;
     812           1 :   par[2] = (zlenA*0.5 + 2. - fgkExterInterModBorder1)*0.5 - 2.;
     813           1 :   TVirtualMC::GetMC()->Gsvolu("FIF3", "BOX ", idtmed[502], par, 3); // G10
     814             :   //xcoor = 0.;
     815             :   //ycoor = kAlCoverThickness*0.5 + kInterfaceCardThickness*0.5;
     816             :   zcoor = (zlenA*0.5 + 2. + fgkExterInterModBorder1)*0.5;
     817           1 :   TVirtualMC::GetMC()->Gspos("FIF3", 1, "FPEA", xcoor, ycoor, zcoor, 0, "ONLY");
     818           1 :   TVirtualMC::GetMC()->Gspos("FIF3", 2, "FPEA", xcoor, ycoor,-zcoor, 0, "ONLY");
     819           1 :   if (fTOFHoles) {
     820           1 :     TVirtualMC::GetMC()->Gspos("FIF3", 1, "FPEB", xcoor, ycoor, zcoor, 0, "ONLY");
     821           1 :     TVirtualMC::GetMC()->Gspos("FIF3", 2, "FPEB", xcoor, ycoor,-zcoor, 0, "ONLY");
     822           1 :   }
     823             : 
     824             :   // volumes for flat cables
     825             :   // plastic
     826             :   const Float_t kPlasticFlatCableThickness = 0.25;
     827           1 :   par[0] = xtof*0.5;
     828           1 :   par[1] = kPlasticFlatCableThickness*0.5;
     829           1 :   par[2] = fgkInterCentrModBorder2 - 2.;
     830           1 :   TVirtualMC::GetMC()->Gsvolu("FFC1", "BOX ", idtmed[513], par, 3); // Plastic (CH2)
     831             :   //xcoor = 0.;
     832             :   ycoor = -kAlCoverThickness*0.5 - kPlasticFlatCableThickness*0.5;
     833             :   zcoor = 0.;
     834           1 :   TVirtualMC::GetMC()->Gspos("FFC1", 0, "FPEA", xcoor, ycoor, zcoor, 0, "ONLY");
     835             : 
     836             :   //par[0] = xtof*0.5;
     837             :   //par[1] = kPlasticFlatCableThickness*0.5;
     838           1 :   par[2] = (fgkExterInterModBorder1 - fgkInterCentrModBorder2)*0.5 - 2.;
     839           1 :   TVirtualMC::GetMC()->Gsvolu("FFC2", "BOX ", idtmed[513], par, 3); // Plastic (CH2)
     840             :   //xcoor = 0.;
     841             :   //ycoor = -kAlCoverThickness*0.5 - kPlasticFlatCableThickness*0.5;
     842             :   zcoor = (fgkExterInterModBorder1 + fgkInterCentrModBorder2)*0.5;
     843           1 :   TVirtualMC::GetMC()->Gspos("FFC2", 1, "FPEA", xcoor, ycoor, zcoor, 0, "ONLY");
     844           1 :   TVirtualMC::GetMC()->Gspos("FFC2", 2, "FPEA", xcoor, ycoor,-zcoor, 0, "ONLY");
     845           1 :   if (fTOFHoles) {
     846           1 :     TVirtualMC::GetMC()->Gspos("FFC2", 1, "FPEB", xcoor, ycoor, zcoor, 0, "ONLY");
     847           1 :     TVirtualMC::GetMC()->Gspos("FFC2", 2, "FPEB", xcoor, ycoor,-zcoor, 0, "ONLY");
     848           1 :   }
     849             : 
     850             :   //par[0] = xtof*0.5;
     851             :   //par[1] = kPlasticFlatCableThickness*0.5;
     852           1 :   par[2] = (zlenA*0.5 + 2. - fgkExterInterModBorder1)*0.5 - 2.;
     853           1 :   TVirtualMC::GetMC()->Gsvolu("FFC3", "BOX ", idtmed[513], par, 3); // Plastic (CH2)
     854             :   //xcoor = 0.;
     855             :   //ycoor = -kAlCoverThickness*0.5 - kPlasticFlatCableThickness*0.5;
     856             :   zcoor = (zlenA*0.5 + 2. + fgkExterInterModBorder1)*0.5;
     857           1 :   TVirtualMC::GetMC()->Gspos("FFC3", 1, "FPEA", xcoor, ycoor, zcoor, 0, "ONLY");
     858           1 :   TVirtualMC::GetMC()->Gspos("FFC3", 2, "FPEA", xcoor, ycoor,-zcoor, 0, "ONLY");
     859           1 :   if (fTOFHoles) {
     860           1 :     TVirtualMC::GetMC()->Gspos("FFC3", 1, "FPEB", xcoor, ycoor, zcoor, 0, "ONLY");
     861           1 :     TVirtualMC::GetMC()->Gspos("FFC3", 2, "FPEB", xcoor, ycoor,-zcoor, 0, "ONLY");
     862           1 :   }
     863             : 
     864             :   // Cu
     865             :   const Float_t kCopperFlatCableThickness = 0.01;
     866           1 :   par[0] = xtof*0.5;
     867           1 :   par[1] = kCopperFlatCableThickness*0.5;
     868           1 :   par[2] = fgkInterCentrModBorder2 - 2.;
     869           1 :   TVirtualMC::GetMC()->Gsvolu("FCC1", "BOX ", idtmed[512], par, 3); // Cu
     870           1 :   TVirtualMC::GetMC()->Gspos("FCC1", 0, "FFC1", 0., 0., 0., 0, "ONLY");
     871             : 
     872             :   //par[0] = xtof*0.5;
     873             :   //par[1] = kCopperFlatCableThickness*0.5;
     874           1 :   par[2] = (fgkExterInterModBorder1 - fgkInterCentrModBorder2)*0.5 - 2.;
     875           1 :   TVirtualMC::GetMC()->Gsvolu("FCC2", "BOX ", idtmed[512], par, 3); // Cu
     876           1 :   TVirtualMC::GetMC()->Gspos("FCC2", 0, "FFC2", 0., 0., 0., 0, "ONLY");
     877             : 
     878             :   //par[0] = xtof*0.5;
     879             :   //par[1] = kCopperFlatCableThickness*0.5;
     880           1 :   par[2] = (zlenA*0.5 + 2. - fgkExterInterModBorder1)*0.5 - 2.;
     881           1 :   TVirtualMC::GetMC()->Gsvolu("FCC3", "BOX ", idtmed[512], par, 3); // Cu
     882           1 :   TVirtualMC::GetMC()->Gspos("FCC3", 0, "FFC3", 0., 0., 0., 0, "ONLY");
     883             : 
     884           1 : }
     885             : 
     886             : //_____________________________________________________________________________
     887             : void AliTOFv6T0::MakeModulesInBTOFvolumes(Float_t ytof, Float_t zlenA) const
     888             : {
     889             :   //
     890             :   // Fill BTOF_%i (for i=0,...17) volumes
     891             :   // with volumes FTOA (MRPC strip container),
     892             :   // In case of TOF holes, three sectors (i.e. 13th, 14th and 15th)
     893             :   // are filled with volumes: FTOB and FTOC (MRPC containers),
     894             :   //
     895             : 
     896             :   const Int_t kSize=16;
     897             : 
     898           2 :   Int_t idrotm[1]={0};
     899             : 
     900             :   //AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,-90.);
     901           1 :   AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,270.);
     902             : 
     903             :   Float_t xcoor, ycoor, zcoor;
     904             :   xcoor = 0.;
     905             : 
     906             :   // Positioning of fibre glass modules (FTOA, FTOB and FTOC)
     907          38 :   for(Int_t isec=0; isec<fTOFGeometry->NSectors(); isec++){
     908          18 :     if(fTOFSectors[isec]==-1)continue;
     909             : 
     910          18 :     char name[kSize];
     911          18 :     snprintf(name, kSize, "BTOF%d",isec);
     912          36 :     if (fTOFHoles && (isec==13 || isec==14 || isec==15)) {
     913             :       //xcoor = 0.;
     914           3 :       ycoor = (zlenA*0.5 + fgkInterCentrModBorder1)*0.5;
     915           3 :       zcoor = -ytof * 0.25;
     916           3 :       TVirtualMC::GetMC()->Gspos("FTOB", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
     917           3 :       TVirtualMC::GetMC()->Gspos("FTOC", 0, name, xcoor,-ycoor, zcoor, idrotm[0], "ONLY");
     918           3 :     }
     919             :     else {
     920             :       //xcoor = 0.;
     921             :       ycoor = 0.;
     922          15 :       zcoor = -ytof * 0.25;
     923          15 :       TVirtualMC::GetMC()->Gspos("FTOA", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
     924             :     }
     925          18 :   }
     926             : 
     927           1 : }
     928             : 
     929             : //_____________________________________________________________________________
     930             : void AliTOFv6T0::MakeCoversInBTOFvolumes() const
     931             : {
     932             :   //
     933             :   // Fill BTOF_%i (for i=0,...17) volumes
     934             :   // with volumes FPEA (to separate strips from FEA cards)
     935             :   // In case of TOF holes, three sectors (i.e. 13th, 14th and 15th)
     936             :   // are filled with FPEB volumes
     937             :   // (to separate MRPC strips from FEA cards)
     938             :   //
     939             : 
     940             :   const Int_t kSize=16;
     941             : 
     942           2 :   Int_t idrotm[1]={0};
     943             : 
     944             :   //AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,-90.);
     945           1 :   AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,270.);
     946             : 
     947             :   Float_t xcoor, ycoor, zcoor;
     948             :   xcoor = 0.;
     949             :   ycoor = 0.;
     950             :   zcoor = fgkModuleCoverThickness*0.5;
     951             : 
     952           1 :   char name[kSize];
     953             : 
     954             :   // Positioning of module covers (FPEA, FPEB)
     955          38 :   for(Int_t isec=0; isec<fTOFGeometry->NSectors(); isec++) {
     956          18 :     if(fTOFSectors[isec]==-1)continue;
     957          18 :     snprintf(name, kSize, "BTOF%d",isec);
     958          36 :     if (fTOFHoles && (isec==13 || isec==14 || isec==15))
     959           3 :       TVirtualMC::GetMC()->Gspos("FPEB", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
     960             :     else
     961          15 :       TVirtualMC::GetMC()->Gspos("FPEA", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
     962             :   }
     963             : 
     964           1 : }
     965             : 
     966             : //_____________________________________________________________________________
     967             : void AliTOFv6T0::MakeBackInBTOFvolumes(Float_t ytof) const
     968             : {
     969             :   //
     970             :   // Fill BTOF_%i (for i=0,...17) volumes with volumes called FAIA and
     971             :   // FAIC (FEA cards and services container).
     972             :   // In case of TOF holes, three sectors (i.e. 13th, 14th and 15th) are
     973             :   // filled with volumes FAIB (FEA cards and services container).
     974             :   //
     975             : 
     976             :   const Int_t kSize=16;
     977             : 
     978           2 :   Int_t idrotm[1]={0};
     979             : 
     980             :   //AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,-90.);
     981           1 :   AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,270.);
     982             : 
     983             :   Float_t xcoor, ycoor, zcoor;
     984             :   xcoor = 0.;
     985             :   ycoor = 0.;
     986           1 :   zcoor = fgkModuleCoverThickness + (ytof*0.5 - fgkModuleCoverThickness)*0.5;
     987             : 
     988           1 :   char name[kSize];
     989             : 
     990             :   // Positioning of FEA cards and services containers (FAIA, FAIC and FAIB)
     991          38 :   for(Int_t isec=0; isec<fTOFGeometry->NSectors(); isec++) {
     992          18 :     if(fTOFSectors[isec]==-1)continue;
     993          18 :     snprintf(name, kSize, "BTOF%d",isec);
     994          18 :     if (fgkFEAwithMasks[isec])
     995           5 :       TVirtualMC::GetMC()->Gspos("FAIA", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
     996             :     else {
     997          26 :       if (fTOFHoles && (isec==13 || isec==14 || isec==15))
     998           3 :         TVirtualMC::GetMC()->Gspos("FAIB", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
     999             :       else
    1000          10 :         TVirtualMC::GetMC()->Gspos("FAIC", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
    1001             :     }
    1002             :   }
    1003             : 
    1004           1 : }
    1005             : 
    1006             : //_____________________________________________________________________________
    1007             : void AliTOFv6T0::MakeStripsInModules(Float_t ytof, Float_t zlenA) const
    1008             : {
    1009             :   //
    1010             :   // Define MRPC strip volume, called FSTR
    1011             :   // Insert FSTR volume in FLTA/B/C volumes
    1012             :   //
    1013             : 
    1014           2 :   Float_t yFLT  = ytof*0.5 - fgkModuleWallThickness;
    1015             : 
    1016           1 :   Int_t *idtmed = fIdtmed->GetArray()-499;
    1017             : 
    1018             :   ///////////////// Detector itself //////////////////////
    1019             : 
    1020           1 :   const Int_t    knx   = fTOFGeometry->NpadX();  // number of pads along x
    1021           1 :   const Int_t    knz   = fTOFGeometry->NpadZ();  // number of pads along z
    1022           1 :   const Float_t  kPadX = fTOFGeometry->XPad();   // pad length along x
    1023           1 :   const Float_t  kPadZ = fTOFGeometry->ZPad();   // pad length along z
    1024             : 
    1025             :   // new description for strip volume -double stack strip-
    1026             :   // -- all constants are expressed in cm
    1027             :   // height of different layers
    1028             :   const Float_t khhony   = 1.0;       // height of HONY Layer
    1029             :   const Float_t khpcby   = 0.08;      // height of PCB Layer
    1030             :   const Float_t khrgly   = 0.055;     // height of RED GLASS Layer
    1031             : 
    1032             :   const Float_t khfiliy  = 0.125;     // height of FISHLINE Layer
    1033             :   const Float_t khglassy = 0.160*0.5; // semi-height of GLASS Layer
    1034             :   const Float_t khglfy   = khfiliy+2.*khglassy; // height of GLASS Layer
    1035             : 
    1036             :   const Float_t khcpcby  = 0.16;      // height of PCB  Central Layer
    1037             :   const Float_t kwhonz   = 8.1;       // z dimension of HONEY Layer
    1038             :   const Float_t kwpcbz1  = 10.64;     // z dimension of PCB Lower Layer
    1039             :   const Float_t kwpcbz2  = 11.6;      // z dimension of PCB Upper Layer
    1040             :   const Float_t kwcpcbz  = 12.4;      // z dimension of PCB Central Layer
    1041             : 
    1042             :   const Float_t kwrglz   = 8.;        // z dimension of RED GLASS Layer
    1043             :   const Float_t kwglfz   = 7.;        // z dimension of GLASS Layer
    1044           1 :   const Float_t klsensmx = knx*kPadX; // length of Sensitive Layer
    1045             :   const Float_t khsensmy = 0.0105;    // height of Sensitive Layer
    1046           1 :   const Float_t kwsensmz = knz*kPadZ; // width of Sensitive Layer
    1047             : 
    1048             :   // height of the FSTR Volume (the strip volume)
    1049             :   const Float_t khstripy = 2.*khhony+2.*khpcby+4.*khrgly+2.*khglfy+khcpcby;
    1050             : 
    1051             :   // width  of the FSTR Volume (the strip volume)
    1052             :   const Float_t kwstripz = kwcpcbz;
    1053             :   // length of the FSTR Volume (the strip volume)
    1054           1 :   const Float_t klstripx = fTOFGeometry->StripLength();
    1055             : 
    1056             : 
    1057             :   // FSTR volume definition-filling this volume with non sensitive Gas Mixture
    1058           1 :   Float_t parfp[3]={static_cast<Float_t>(klstripx*0.5), static_cast<Float_t>(khstripy*0.5), static_cast<Float_t>(kwstripz*0.5)};
    1059           1 :   TVirtualMC::GetMC()->Gsvolu("FSTR", "BOX", idtmed[506], parfp, 3); // Freon mix
    1060             : 
    1061             :   Float_t posfp[3]={0.,0.,0.};
    1062             : 
    1063             :   // NOMEX (HONEYCOMB) Layer definition
    1064             :   //parfp[0] = klstripx*0.5;
    1065           1 :   parfp[1] = khhony*0.5;
    1066           1 :   parfp[2] = kwhonz*0.5;
    1067           1 :   TVirtualMC::GetMC()->Gsvolu("FHON", "BOX", idtmed[501], parfp, 3); // Nomex (Honeycomb)
    1068             :   // positioning 2 NOMEX Layers on FSTR volume
    1069             :   //posfp[0] = 0.;
    1070           1 :   posfp[1] =-khstripy*0.5 + parfp[1];
    1071             :   //posfp[2] = 0.;
    1072           1 :   TVirtualMC::GetMC()->Gspos("FHON", 1, "FSTR", 0., posfp[1], 0., 0, "ONLY");
    1073           1 :   TVirtualMC::GetMC()->Gspos("FHON", 2, "FSTR", 0.,-posfp[1], 0., 0, "ONLY");
    1074             :   
    1075             :   // Lower PCB Layer definition
    1076             :   //parfp[0] = klstripx*0.5;
    1077           1 :   parfp[1] = khpcby*0.5;
    1078           1 :   parfp[2] = kwpcbz1*0.5;
    1079           1 :   TVirtualMC::GetMC()->Gsvolu("FPC1", "BOX", idtmed[502], parfp, 3); // G10
    1080             : 
    1081             :   // Upper PCB Layer definition
    1082             :   //parfp[0] = klstripx*0.5;
    1083             :   //parfp[1] = khpcby*0.5;
    1084           1 :   parfp[2] = kwpcbz2*0.5;
    1085           1 :   TVirtualMC::GetMC()->Gsvolu("FPC2", "BOX", idtmed[502], parfp, 3); // G10
    1086             : 
    1087             :   // positioning 2 external PCB Layers in FSTR volume
    1088             :   //posfp[0] = 0.;
    1089           1 :   posfp[1] =-khstripy*0.5+khhony+parfp[1];
    1090             :   //posfp[2] = 0.;
    1091           1 :   TVirtualMC::GetMC()->Gspos("FPC1", 1, "FSTR", 0.,-posfp[1], 0., 0, "ONLY");
    1092           1 :   TVirtualMC::GetMC()->Gspos("FPC2", 1, "FSTR", 0., posfp[1], 0., 0, "ONLY");
    1093             : 
    1094             :   // Central PCB layer definition
    1095             :   //parfp[0] = klstripx*0.5;
    1096           1 :   parfp[1] = khcpcby*0.5;
    1097           1 :   parfp[2] = kwcpcbz*0.5;
    1098           1 :   TVirtualMC::GetMC()->Gsvolu("FPCB", "BOX", idtmed[502], parfp, 3); // G10
    1099           1 :   gGeoManager->GetVolume("FPCB")->VisibleDaughters(kFALSE);
    1100             :   // positioning the central PCB layer
    1101           1 :   TVirtualMC::GetMC()->Gspos("FPCB", 1, "FSTR", 0., 0., 0., 0, "ONLY");
    1102             : 
    1103             :   // Sensitive volume definition
    1104           1 :   Float_t parfs[3] = {static_cast<Float_t>(klsensmx*0.5), static_cast<Float_t>(khsensmy*0.5), static_cast<Float_t>(kwsensmz*0.5)};
    1105           1 :   TVirtualMC::GetMC()->Gsvolu("FSEN", "BOX", idtmed[507], parfs, 3); // Cu sensitive
    1106             :   // dividing FSEN along z in knz=2 and along x in knx=48
    1107           1 :   TVirtualMC::GetMC()->Gsdvn("FSEZ", "FSEN", knz, 3);
    1108           1 :   TVirtualMC::GetMC()->Gsdvn("FPAD", "FSEZ", knx, 1);
    1109             :   // positioning sensitive layer inside FPCB
    1110           1 :   TVirtualMC::GetMC()->Gspos("FSEN", 1, "FPCB", 0., 0., 0., 0, "ONLY");
    1111             : 
    1112             :   // RED GLASS Layer definition
    1113             :   //parfp[0] = klstripx*0.5;
    1114           1 :   parfp[1] = khrgly*0.5;
    1115           1 :   parfp[2] = kwrglz*0.5;
    1116           1 :   TVirtualMC::GetMC()->Gsvolu("FRGL", "BOX", idtmed[508], parfp, 3); // red glass
    1117             :   // positioning 4 RED GLASS Layers in FSTR volume
    1118             :   //posfp[0] = 0.;
    1119           1 :   posfp[1] = -khstripy*0.5+khhony+khpcby+parfp[1];
    1120             :   //posfp[2] = 0.;
    1121           1 :   TVirtualMC::GetMC()->Gspos("FRGL", 1, "FSTR", 0., posfp[1], 0., 0, "ONLY");
    1122           1 :   TVirtualMC::GetMC()->Gspos("FRGL", 4, "FSTR", 0.,-posfp[1], 0., 0, "ONLY");
    1123             :   //posfp[0] = 0.;
    1124             :   posfp[1] = (khcpcby+khrgly)*0.5;
    1125             :   //posfp[2] = 0.;
    1126           1 :   TVirtualMC::GetMC()->Gspos("FRGL", 2, "FSTR", 0.,-posfp[1], 0., 0, "ONLY");
    1127           1 :   TVirtualMC::GetMC()->Gspos("FRGL", 3, "FSTR", 0., posfp[1], 0., 0, "ONLY");
    1128             : 
    1129             :   // GLASS Layer definition
    1130             :   //parfp[0] = klstripx*0.5;
    1131           1 :   parfp[1] = khglassy;
    1132           1 :   parfp[2] = kwglfz*0.5;
    1133           1 :   TVirtualMC::GetMC()->Gsvolu("FGLF", "BOX", idtmed[508], parfp, 3); // glass
    1134             :   // positioning 2 GLASS Layers in FSTR volume
    1135             :   //posfp[0] = 0.;
    1136             :   posfp[1] = (khcpcby + khglfy)*0.5 + khrgly;
    1137             :   //posfp[2] = 0.;
    1138           1 :   TVirtualMC::GetMC()->Gspos("FGLF", 1, "FSTR", 0.,-posfp[1], 0., 0, "ONLY");
    1139           1 :   TVirtualMC::GetMC()->Gspos("FGLF", 2, "FSTR", 0., posfp[1], 0., 0, "ONLY");
    1140             : 
    1141             :   // Positioning the Strips (FSTR volumes) in the FLT volumes
    1142           5 :   Int_t maxStripNumbers [5] ={fTOFGeometry->NStripC(),
    1143           1 :                               fTOFGeometry->NStripB(),
    1144           1 :                               fTOFGeometry->NStripA(),
    1145           1 :                               fTOFGeometry->NStripB(),
    1146           1 :                               fTOFGeometry->NStripC()};
    1147             : 
    1148         184 :   Int_t idrotm[91]; for (Int_t ii=0; ii<91; ii++) idrotm[ii]=0;
    1149             : 
    1150             :   Int_t totalStrip = 0;
    1151             :   Float_t xpos, zpos, ypos, ang;
    1152          12 :   for(Int_t iplate = 0; iplate < fTOFGeometry->NPlates(); iplate++){
    1153           9 :     if (iplate>0) totalStrip += maxStripNumbers[iplate-1];
    1154         192 :     for(Int_t istrip = 0; istrip < maxStripNumbers[iplate]; istrip++){
    1155             : 
    1156          91 :       ang = fTOFGeometry->GetAngles(iplate,istrip);
    1157         273 :       AliDebug(1, Form(" iplate = %1i, istrip = %2i ---> ang = %f", iplate, istrip, ang));
    1158             :  
    1159         135 :       if (ang>0.)       AliMatrix (idrotm[istrip+totalStrip],90.,0.,90.+ang,90., ang, 90.);
    1160          50 :       else if (ang==0.) AliMatrix (idrotm[istrip+totalStrip],90.,0.,90.,90., 0., 0.);
    1161          88 :       else if (ang<0.)  AliMatrix (idrotm[istrip+totalStrip],90.,0.,90.+ang,90.,-ang,270.);
    1162             : 
    1163             :       xpos = 0.;
    1164          91 :       ypos = fTOFGeometry->GetHeights(iplate,istrip) + yFLT*0.5;
    1165          91 :       zpos = fTOFGeometry->GetDistances(iplate,istrip);
    1166          91 :       TVirtualMC::GetMC()->Gspos("FSTR", istrip+totalStrip+1, "FLTA", xpos, ypos,-zpos, idrotm[istrip+totalStrip], "ONLY");
    1167             : 
    1168          91 :       if (fTOFHoles) {
    1169          91 :         if (istrip+totalStrip+1>53)
    1170          38 :           TVirtualMC::GetMC()->Gspos("FSTR", istrip+totalStrip+1, "FLTC", xpos, ypos,-zpos-(zlenA*0.5 - 2.*fgkModuleWallThickness + fgkInterCentrModBorder1)*0.5, idrotm[istrip+totalStrip], "ONLY");
    1171          91 :         if (istrip+totalStrip+1<39)
    1172          38 :           TVirtualMC::GetMC()->Gspos("FSTR", istrip+totalStrip+1, "FLTB", xpos, ypos,-zpos+(zlenA*0.5 - 2.*fgkModuleWallThickness + fgkInterCentrModBorder1)*0.5, idrotm[istrip+totalStrip], "ONLY");
    1173             :       }
    1174             :     }
    1175             :   }
    1176             : 
    1177           1 : }
    1178             : 
    1179             : //_____________________________________________________________________________
    1180             : void AliTOFv6T0::CreateBackZone(Float_t xtof, Float_t ytof, Float_t zlenA) const
    1181             : {
    1182             :   //
    1183             :   // Define:
    1184             :   //        - containers for FEA cards, cooling system
    1185             :   //          signal cables and supermodule support structure
    1186             :   //          (volumes called FAIA/B/C),
    1187             :   //        - containers for FEA cards and some cooling
    1188             :   //          elements for a FEA (volumes called FCA1/2).
    1189             :   //
    1190             : 
    1191           2 :   Int_t *idtmed = fIdtmed->GetArray()-499;
    1192             : 
    1193           1 :   Int_t idrotm[1]={0};
    1194             : 
    1195             :   // Definition of the air card containers (FAIA, FAIC and FAIB)
    1196             : 
    1197           1 :   Float_t  par[3];
    1198           1 :   par[0] = xtof*0.5;
    1199           1 :   par[1] = (ytof*0.5 - fgkModuleCoverThickness)*0.5;
    1200           1 :   par[2] = zlenA*0.5;
    1201           1 :   TVirtualMC::GetMC()->Gsvolu("FAIA", "BOX ", idtmed[500], par, 3); // Air
    1202           2 :   if (fTOFHoles) TVirtualMC::GetMC()->Gsvolu("FAIB", "BOX ", idtmed[500], par, 3); // Air
    1203           1 :   TVirtualMC::GetMC()->Gsvolu("FAIC", "BOX ", idtmed[500], par, 3); // Air
    1204             : 
    1205             :   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
    1206           1 :   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
    1207             :   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
    1208             :   //Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
    1209             : 
    1210             :   // FEA card mother-volume definition
    1211           3 :   Float_t carpar[3] = {static_cast<Float_t>(xtof*0.5 - fgkCBLw - fgkSawThickness),
    1212           1 :                        static_cast<Float_t>(feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5),
    1213           1 :                        static_cast<Float_t>(feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2])};
    1214           1 :   TVirtualMC::GetMC()->Gsvolu("FCA1", "BOX ", idtmed[500], carpar, 3); // Air
    1215           1 :   TVirtualMC::GetMC()->Gsvolu("FCA2", "BOX ", idtmed[500], carpar, 3); // Air
    1216             : 
    1217             :   // rotation matrix
    1218           1 :   AliMatrix(idrotm[0],  90.,180., 90., 90.,180., 0.);
    1219             : 
    1220             :   // FEA card mother-volume positioning
    1221             :   Float_t rowstep = 6.66;
    1222           1 :   Float_t rowgap[5] = {13.5, 22.9, 16.94, 23.8, 20.4};
    1223           1 :   Int_t rowb[5] = {6, 7, 6, 19, 7};
    1224             :   Float_t carpos[3] = {0.,
    1225           1 :                        static_cast<Float_t>(-(ytof*0.5 - fgkModuleCoverThickness)*0.5 + carpar[1]),
    1226             :                        -0.8};
    1227           1 :   TVirtualMC::GetMC()->Gspos("FCA1", 91, "FAIA", carpos[0], carpos[1], carpos[2], 0, "MANY");
    1228           1 :   TVirtualMC::GetMC()->Gspos("FCA2", 91, "FAIC", carpos[0], carpos[1], carpos[2], 0, "MANY");
    1229             : 
    1230             :   Int_t row = 1;
    1231             :   Int_t nrow = 0;
    1232           6 :   for (Int_t sg= -1; sg< 2; sg+= 2) {
    1233           2 :     carpos[2] = sg*zlenA*0.5 - 0.8;
    1234          24 :     for (Int_t nb=0; nb<5; ++nb) {
    1235          10 :       carpos[2] = carpos[2] - sg*(rowgap[nb] - rowstep);
    1236          10 :       nrow = row + rowb[nb];
    1237         200 :       for ( ; row < nrow ; ++row) {
    1238             : 
    1239          90 :         carpos[2] -= sg*rowstep;
    1240             : 
    1241          90 :         if (nb==4) {
    1242          14 :           TVirtualMC::GetMC()->Gspos("FCA1", row, "FAIA", carpos[0], carpos[1], carpos[2], 0, "ONLY");
    1243          14 :           TVirtualMC::GetMC()->Gspos("FCA2", row, "FAIC", carpos[0], carpos[1], carpos[2], 0, "ONLY");
    1244             : 
    1245          14 :         }
    1246             :         else {
    1247         166 :           switch (sg) {
    1248             :           case 1:
    1249          38 :             TVirtualMC::GetMC()->Gspos("FCA1", row, "FAIA", carpos[0], carpos[1], carpos[2], 0, "ONLY");
    1250          38 :             TVirtualMC::GetMC()->Gspos("FCA2", row, "FAIC", carpos[0], carpos[1], carpos[2], 0, "ONLY");
    1251          38 :             break;
    1252             :           case -1:
    1253          38 :             TVirtualMC::GetMC()->Gspos("FCA1", row, "FAIA", carpos[0], carpos[1], carpos[2], idrotm[0], "ONLY");
    1254          38 :             TVirtualMC::GetMC()->Gspos("FCA2", row, "FAIC", carpos[0], carpos[1], carpos[2], idrotm[0], "ONLY");
    1255          38 :             break;
    1256             :           }
    1257             : 
    1258             :         }
    1259             : 
    1260             :       }
    1261             :     }
    1262             :   }
    1263             : 
    1264           1 :   if (fTOFHoles) {
    1265             :     row = 1;
    1266           6 :     for (Int_t sg= -1; sg< 2; sg+= 2) {
    1267           2 :       carpos[2] = sg*zlenA*0.5 - 0.8;
    1268          20 :       for (Int_t nb=0; nb<4; ++nb) {
    1269           8 :         carpos[2] = carpos[2] - sg*(rowgap[nb] - rowstep);
    1270           8 :         nrow = row + rowb[nb];
    1271         168 :         for ( ; row < nrow ; ++row) {
    1272         152 :           carpos[2] -= sg*rowstep;
    1273             : 
    1274         152 :           switch (sg) {
    1275             :           case 1:
    1276          38 :             TVirtualMC::GetMC()->Gspos("FCA1", row, "FAIB", carpos[0], carpos[1], carpos[2], 0, "ONLY");
    1277          38 :             break;
    1278             :           case -1:
    1279          38 :             TVirtualMC::GetMC()->Gspos("FCA1", row, "FAIB", carpos[0], carpos[1], carpos[2], idrotm[0], "ONLY");
    1280          38 :             break;
    1281             :           }
    1282             :         }
    1283             :       }
    1284             :     }
    1285           1 :   }
    1286             : 
    1287           1 : }
    1288             : 
    1289             : //_____________________________________________________________________________
    1290             : void AliTOFv6T0::MakeFrontEndElectronics(Float_t xtof) const
    1291             : {
    1292             :   //
    1293             :   // Fill FCA1/2 volumes with FEA cards (FFEA volumes).
    1294             :   //
    1295             : 
    1296           2 :   Int_t *idtmed = fIdtmed->GetArray()-499;
    1297             : 
    1298             :   // FEA card volume definition
    1299           1 :   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
    1300           1 :   TVirtualMC::GetMC()->Gsvolu("FFEA", "BOX ", idtmed[502], feaParam, 3); // G10
    1301             : 
    1302             :   Float_t al1[3] = {fgkAl1parameters[0], fgkAl1parameters[1], fgkAl1parameters[2]};
    1303             :   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
    1304           1 :   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
    1305             :   //Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
    1306             : 
    1307           1 :   Float_t carpar[3] = {static_cast<Float_t>(xtof*0.5 - fgkCBLw - fgkSawThickness),
    1308           1 :                        static_cast<Float_t>(feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5),
    1309           1 :                        static_cast<Float_t>(feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2])};
    1310             : 
    1311             :   // FEA card volume positioning
    1312           1 :   Float_t xCoor = xtof*0.5 - 25.;
    1313           1 :   Float_t yCoor =-carpar[1] + feaParam[1];
    1314           1 :   Float_t zCoor =-carpar[2] + (2.*feaRoof1[2] - 2.*al1[2] - feaParam[2]);
    1315           1 :   TVirtualMC::GetMC()->Gspos("FFEA", 1, "FCA1",-xCoor, yCoor, zCoor, 0, "ONLY");
    1316           1 :   TVirtualMC::GetMC()->Gspos("FFEA", 4, "FCA1", xCoor, yCoor, zCoor, 0, "ONLY");
    1317           1 :   TVirtualMC::GetMC()->Gspos("FFEA", 1, "FCA2",-xCoor, yCoor, zCoor, 0, "ONLY");
    1318           1 :   TVirtualMC::GetMC()->Gspos("FFEA", 4, "FCA2", xCoor, yCoor, zCoor, 0, "ONLY");
    1319           1 :   xCoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
    1320           1 :   TVirtualMC::GetMC()->Gspos("FFEA", 2, "FCA1",-xCoor, yCoor, zCoor, 0, "ONLY");
    1321           1 :   TVirtualMC::GetMC()->Gspos("FFEA", 3, "FCA1", xCoor, yCoor, zCoor, 0, "ONLY");
    1322           1 :   TVirtualMC::GetMC()->Gspos("FFEA", 2, "FCA2",-xCoor, yCoor, zCoor, 0, "ONLY");
    1323           1 :   TVirtualMC::GetMC()->Gspos("FFEA", 3, "FCA2", xCoor, yCoor, zCoor, 0, "ONLY");
    1324             : 
    1325           1 : }
    1326             : 
    1327             : //_____________________________________________________________________________
    1328             : void AliTOFv6T0::MakeFEACooling(Float_t xtof) const
    1329             : {
    1330             :   //
    1331             :   // Make cooling system attached to each FEA card
    1332             :   // (FAL1, FRO1 and FBAR/1/2 volumes)
    1333             :   // in FCA1/2 volume containers.
    1334             :   //
    1335             : 
    1336           2 :   Int_t *idtmed = fIdtmed->GetArray()-499;
    1337             : 
    1338             :   // first FEA cooling element definition
    1339           1 :   Float_t al1[3] = {fgkAl1parameters[0], fgkAl1parameters[1], fgkAl1parameters[2]};
    1340           1 :   TVirtualMC::GetMC()->Gsvolu("FAL1", "BOX ", idtmed[504], al1, 3); // Al
    1341             : 
    1342             :   // second FEA cooling element definition
    1343           1 :   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
    1344           1 :   TVirtualMC::GetMC()->Gsvolu("FRO1", "BOX ", idtmed[504], feaRoof1, 3); // Al
    1345             : 
    1346             :   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
    1347             :   //Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
    1348             : 
    1349             :   // definition and positioning of a small air groove in the FRO1 volume
    1350           1 :   Float_t airHole[3] = {fgkRoof2parameters[0], static_cast<Float_t>(fgkRoof2parameters[1]*0.5), feaRoof1[2]};
    1351           1 :   TVirtualMC::GetMC()->Gsvolu("FREE", "BOX ", idtmed[500], airHole, 3); // Air
    1352           1 :   TVirtualMC::GetMC()->Gspos("FREE", 1, "FRO1", 0., feaRoof1[1]-airHole[1], 0., 0, "ONLY");
    1353           1 :   gGeoManager->GetVolume("FRO1")->VisibleDaughters(kFALSE);
    1354             : 
    1355             :   // third FEA cooling element definition
    1356           1 :   Float_t bar[3] = {fgkBar[0], fgkBar[1], fgkBar[2]};
    1357           1 :   TVirtualMC::GetMC()->Gsvolu("FBAR", "BOX ", idtmed[504], bar, 3); // Al
    1358             : 
    1359             :   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
    1360             : 
    1361           1 :   Float_t carpar[3] = {static_cast<Float_t>(xtof*0.5 - fgkCBLw - fgkSawThickness),
    1362           1 :                        static_cast<Float_t>(feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5),
    1363           1 :                        static_cast<Float_t>(feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2])};
    1364             : 
    1365             :   // fourth FEA cooling element definition
    1366           1 :   Float_t bar1[3] = {fgkBar1[0], fgkBar1[1], fgkBar1[2]};
    1367           1 :   TVirtualMC::GetMC()->Gsvolu("FBA1", "BOX ", idtmed[504], bar1, 3); // Al
    1368             : 
    1369             :   // fifth FEA cooling element definition
    1370           1 :   Float_t bar2[3] = {fgkBar2[0], fgkBar2[1], fgkBar2[2]};
    1371           1 :   TVirtualMC::GetMC()->Gsvolu("FBA2", "BOX ", idtmed[504], bar2, 3); // Al
    1372             : 
    1373             :   // first FEA cooling element positioning
    1374           1 :   Float_t xcoor = xtof*0.5 - 25.;
    1375           1 :   Float_t ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - al1[1];
    1376           1 :   Float_t zcoor =-carpar[2] + 2.*feaRoof1[2] - al1[2];
    1377           1 :   TVirtualMC::GetMC()->Gspos("FAL1", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
    1378           1 :   TVirtualMC::GetMC()->Gspos("FAL1", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
    1379           1 :   TVirtualMC::GetMC()->Gspos("FAL1", 1, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
    1380           1 :   TVirtualMC::GetMC()->Gspos("FAL1", 4, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
    1381             :   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
    1382           1 :   TVirtualMC::GetMC()->Gspos("FAL1", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
    1383           1 :   TVirtualMC::GetMC()->Gspos("FAL1", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
    1384           1 :   TVirtualMC::GetMC()->Gspos("FAL1", 2, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
    1385           1 :   TVirtualMC::GetMC()->Gspos("FAL1", 3, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
    1386             : 
    1387             :   // second FEA cooling element positioning
    1388             :   xcoor = xtof*0.5 - 25.;
    1389           1 :   ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - feaRoof1[1];
    1390           1 :   zcoor =-carpar[2] + feaRoof1[2];
    1391           1 :   TVirtualMC::GetMC()->Gspos("FRO1", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "MANY"); // (AdC)
    1392           1 :   TVirtualMC::GetMC()->Gspos("FRO1", 4, "FCA1", xcoor, ycoor, zcoor, 0, "MANY"); // (AdC)
    1393           1 :   TVirtualMC::GetMC()->Gspos("FRO1", 1, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
    1394           1 :   TVirtualMC::GetMC()->Gspos("FRO1", 4, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
    1395             :   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
    1396           1 :   TVirtualMC::GetMC()->Gspos("FRO1", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "MANY"); // (AdC)
    1397           1 :   TVirtualMC::GetMC()->Gspos("FRO1", 3, "FCA1", xcoor, ycoor, zcoor, 0, "MANY"); // (AdC)
    1398           1 :   TVirtualMC::GetMC()->Gspos("FRO1", 2, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
    1399           1 :   TVirtualMC::GetMC()->Gspos("FRO1", 3, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
    1400             : 
    1401             :   // third FEA cooling element positioning
    1402             :   xcoor = xtof*0.5 - 25.;
    1403           1 :   ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - bar[1];
    1404           1 :   zcoor =-carpar[2] + bar[2];
    1405           1 :   TVirtualMC::GetMC()->Gspos("FBAR", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
    1406           1 :   TVirtualMC::GetMC()->Gspos("FBAR", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
    1407           1 :   TVirtualMC::GetMC()->Gspos("FBAR", 1, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
    1408           1 :   TVirtualMC::GetMC()->Gspos("FBAR", 4, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
    1409             :   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
    1410           1 :   TVirtualMC::GetMC()->Gspos("FBAR", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
    1411           1 :   TVirtualMC::GetMC()->Gspos("FBAR", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
    1412           1 :   TVirtualMC::GetMC()->Gspos("FBAR", 2, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
    1413           1 :   TVirtualMC::GetMC()->Gspos("FBAR", 3, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
    1414             : 
    1415             :   // fourth FEA cooling element positioning
    1416             :   Float_t tubepar[3] = {0., 0.4, static_cast<Float_t>(xtof*0.5 - fgkCBLw)};
    1417             :   xcoor = xtof*0.5 - 25.;
    1418           1 :   ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - bar[1];
    1419           1 :   zcoor =-carpar[2] + 2.*bar[2] + 2.*tubepar[1] + bar1[2];
    1420           1 :   TVirtualMC::GetMC()->Gspos("FBA1", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
    1421           1 :   TVirtualMC::GetMC()->Gspos("FBA1", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
    1422           1 :   TVirtualMC::GetMC()->Gspos("FBA1", 1, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
    1423           1 :   TVirtualMC::GetMC()->Gspos("FBA1", 4, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
    1424             :   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
    1425           1 :   TVirtualMC::GetMC()->Gspos("FBA1", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
    1426           1 :   TVirtualMC::GetMC()->Gspos("FBA1", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
    1427           1 :   TVirtualMC::GetMC()->Gspos("FBA1", 2, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
    1428           1 :   TVirtualMC::GetMC()->Gspos("FBA1", 3, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
    1429             : 
    1430             :   // fifth FEA cooling element positioning
    1431             :   xcoor = xtof*0.5 - 25.;
    1432           1 :   ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - bar2[1];
    1433           1 :   zcoor =-carpar[2] + 2.*bar[2] + bar2[2];
    1434           1 :   TVirtualMC::GetMC()->Gspos("FBA2", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
    1435           1 :   TVirtualMC::GetMC()->Gspos("FBA2", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
    1436           1 :   TVirtualMC::GetMC()->Gspos("FBA2", 1, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
    1437           1 :   TVirtualMC::GetMC()->Gspos("FBA2", 4, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
    1438             :   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
    1439           1 :   TVirtualMC::GetMC()->Gspos("FBA2", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
    1440           1 :   TVirtualMC::GetMC()->Gspos("FBA2", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
    1441           1 :   TVirtualMC::GetMC()->Gspos("FBA2", 2, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
    1442           1 :   TVirtualMC::GetMC()->Gspos("FBA2", 3, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
    1443             : 
    1444             :   xcoor = xtof*0.5 - 25.;
    1445           1 :   ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - 2.*bar2[1] - 2.*tubepar[1] - bar2[1];
    1446           1 :   zcoor =-carpar[2] + 2.*bar[2] + bar2[2];
    1447           1 :   TVirtualMC::GetMC()->Gspos("FBA2", 5, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
    1448           1 :   TVirtualMC::GetMC()->Gspos("FBA2", 8, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
    1449           1 :   TVirtualMC::GetMC()->Gspos("FBA2", 5, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
    1450           1 :   TVirtualMC::GetMC()->Gspos("FBA2", 8, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
    1451             :   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
    1452           1 :   TVirtualMC::GetMC()->Gspos("FBA2", 6, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
    1453           1 :   TVirtualMC::GetMC()->Gspos("FBA2", 7, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
    1454           1 :   TVirtualMC::GetMC()->Gspos("FBA2", 6, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
    1455           1 :   TVirtualMC::GetMC()->Gspos("FBA2", 7, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
    1456             : 
    1457           1 : }
    1458             : 
    1459             : //_____________________________________________________________________________
    1460             : void AliTOFv6T0::MakeNinoMask(Float_t xtof) const
    1461             : {
    1462             :   //
    1463             :   // Make cooling Nino mask
    1464             :   // for each FEA card (FAL2/3 and FRO2 volumes)
    1465             :   // in FCA1 volume container.
    1466             :   //
    1467             : 
    1468           2 :   Int_t *idtmed = fIdtmed->GetArray()-499;
    1469             : 
    1470             :   // first Nino ASIC mask volume definition
    1471           1 :   Float_t al2[3] = {fgkAl2parameters[0], fgkAl2parameters[1], fgkAl2parameters[2]};
    1472           1 :   TVirtualMC::GetMC()->Gsvolu("FAL2", "BOX ", idtmed[504], al2, 3); // Al
    1473             : 
    1474             :   // second Nino ASIC mask volume definition
    1475           1 :   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
    1476           1 :   TVirtualMC::GetMC()->Gsvolu("FAL3", "BOX ", idtmed[504], al3, 3); // Al
    1477             : 
    1478             :   // third Nino ASIC mask volume definition
    1479           1 :   Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
    1480           1 :   TVirtualMC::GetMC()->Gsvolu("FRO2", "BOX ", idtmed[504], feaRoof2, 3); // Al
    1481             : 
    1482           1 :   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
    1483             :   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
    1484             : 
    1485           1 :   Float_t carpar[3] = {static_cast<Float_t>(xtof*0.5 - fgkCBLw - fgkSawThickness),
    1486           1 :                        static_cast<Float_t>(feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5),
    1487           1 :                        static_cast<Float_t>(feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2])};
    1488             : 
    1489             :   // first Nino ASIC mask volume positioning
    1490           1 :   Float_t xcoor = xtof*0.5 - 25.;
    1491           1 :   Float_t ycoor = carpar[1] - 2.*al3[1];
    1492           1 :   Float_t zcoor = carpar[2] - 2.*al3[2] - al2[2];
    1493           1 :   TVirtualMC::GetMC()->Gspos("FAL2", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
    1494           1 :   TVirtualMC::GetMC()->Gspos("FAL2", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
    1495             :   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
    1496           1 :   TVirtualMC::GetMC()->Gspos("FAL2", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
    1497           1 :   TVirtualMC::GetMC()->Gspos("FAL2", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
    1498             : 
    1499             :   // second Nino ASIC mask volume positioning
    1500             :   xcoor = xtof*0.5 - 25.;
    1501           1 :   ycoor = carpar[1] - al3[1];
    1502           1 :   zcoor = carpar[2] - al3[2];
    1503           1 :   TVirtualMC::GetMC()->Gspos("FAL3", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
    1504           1 :   TVirtualMC::GetMC()->Gspos("FAL3", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
    1505             :   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
    1506           1 :   TVirtualMC::GetMC()->Gspos("FAL3", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
    1507           1 :   TVirtualMC::GetMC()->Gspos("FAL3", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
    1508             : 
    1509             :   // third Nino ASIC mask volume positioning
    1510             :   xcoor = xtof*0.5 - 25.;
    1511           1 :   ycoor = carpar[1] - fgkRoof2parameters[1];
    1512           1 :   zcoor = carpar[2] - 2.*al3[2] - fgkRoof2parameters[2];
    1513           1 :   TVirtualMC::GetMC()->Gspos("FRO2", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
    1514           1 :   TVirtualMC::GetMC()->Gspos("FRO2", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
    1515             :   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
    1516           1 :   TVirtualMC::GetMC()->Gspos("FRO2", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
    1517           1 :   TVirtualMC::GetMC()->Gspos("FRO2", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
    1518             : 
    1519           1 : }
    1520             : 
    1521             : //_____________________________________________________________________________
    1522             : void AliTOFv6T0::MakeSuperModuleCooling(Float_t xtof, Float_t ytof, Float_t zlenA) const
    1523             : {
    1524             :   //
    1525             :   // Make cooling tubes (FTUB volume)
    1526             :   // and cooling bars (FTLN and FLO1/2/3 volumes)
    1527             :   // in FAIA/B/C volume containers.
    1528             :   //
    1529             : 
    1530           2 :   Int_t *idtmed = fIdtmed->GetArray()-499;
    1531             : 
    1532           1 :   Int_t idrotm[1]={0};
    1533             : 
    1534             :   // cooling tube volume definition
    1535           1 :   Float_t tubepar[3] = {0., 0.4, static_cast<Float_t>(xtof*0.5 - fgkCBLw - fgkSawThickness)};
    1536           1 :   TVirtualMC::GetMC()->Gsvolu("FTUB", "TUBE", idtmed[512], tubepar, 3); // Cu
    1537             : 
    1538             :   // water cooling tube volume definition
    1539           1 :   Float_t tubeparW[3] = {0., 0.3, tubepar[2]};
    1540           1 :   TVirtualMC::GetMC()->Gsvolu("FITU", "TUBE", idtmed[509], tubeparW, 3); // H2O
    1541             : 
    1542             :   // Positioning of the water tube into the steel one
    1543           1 :   TVirtualMC::GetMC()->Gspos("FITU", 1, "FTUB", 0., 0., 0., 0, "ONLY");
    1544             : 
    1545             :   // definition of transverse components of SM cooling system
    1546           1 :   Float_t trapar[3] = {tubepar[2], 6.175/*6.15*/, 0.7};
    1547           1 :   TVirtualMC::GetMC()->Gsvolu("FTLN", "BOX ", idtmed[504], trapar, 3); // Al
    1548             : 
    1549             :   // rotation matrix
    1550           1 :   AliMatrix(idrotm[0], 180., 90., 90., 90., 90., 0.);
    1551             : 
    1552             :   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
    1553           1 :   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
    1554             :   Float_t bar[3] = {fgkBar[0], fgkBar[1], fgkBar[2]};
    1555           1 :   Float_t bar2[3] = {fgkBar2[0], fgkBar2[1], fgkBar2[2]};
    1556             :   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
    1557             :   //Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
    1558             : 
    1559             :   Float_t carpar[3] = {static_cast<Float_t>(xtof*0.5 - fgkCBLw - fgkSawThickness),
    1560           1 :                        static_cast<Float_t>(feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5),
    1561           1 :                        static_cast<Float_t>(feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2])};
    1562             : 
    1563           2 :   Float_t ytub =-(ytof*0.5 - fgkModuleCoverThickness)*0.5 + carpar[1] +
    1564           1 :     carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - 2.*bar2[1] - tubepar[1];
    1565             : 
    1566             :   // Positioning of tubes for the SM cooling system
    1567           1 :   Float_t ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - 2.*bar2[1] - tubepar[1];
    1568           1 :   Float_t zcoor =-carpar[2] + 2.*bar[2] + tubepar[1];
    1569           1 :   TVirtualMC::GetMC()->Gspos("FTUB", 1, "FCA1", 0., ycoor, zcoor, idrotm[0], "ONLY");
    1570           1 :   TVirtualMC::GetMC()->Gspos("FTUB", 1, "FCA2", 0., ycoor, zcoor, idrotm[0], "ONLY");
    1571           1 :   gGeoManager->GetVolume("FTUB")->VisibleDaughters(kFALSE);
    1572             : 
    1573           1 :   Float_t yFLTN = trapar[1] - (ytof*0.5 - fgkModuleCoverThickness)*0.5;
    1574           6 :   for (Int_t sg= -1; sg< 2; sg+= 2) {
    1575             :     // Positioning of transverse components for the SM cooling system
    1576           2 :     TVirtualMC::GetMC()->Gspos("FTLN", 5+4*sg, "FAIA", 0., yFLTN, 369.9*sg, 0, "MANY");
    1577           2 :     TVirtualMC::GetMC()->Gspos("FTLN", 5+3*sg, "FAIA", 0., yFLTN, 366.9*sg, 0, "MANY");
    1578           2 :     TVirtualMC::GetMC()->Gspos("FTLN", 5+2*sg, "FAIA", 0., yFLTN, 198.8*sg, 0, "MANY");
    1579           2 :     TVirtualMC::GetMC()->Gspos("FTLN",   5+sg, "FAIA", 0., yFLTN, 56.82*sg, 0, "MANY");
    1580           2 :     TVirtualMC::GetMC()->Gspos("FTLN", 5+4*sg, "FAIC", 0., yFLTN, 369.9*sg, 0, "MANY");
    1581           2 :     TVirtualMC::GetMC()->Gspos("FTLN", 5+3*sg, "FAIC", 0., yFLTN, 366.9*sg, 0, "MANY");
    1582           2 :     TVirtualMC::GetMC()->Gspos("FTLN", 5+2*sg, "FAIC", 0., yFLTN, 198.8*sg, 0, "MANY");
    1583           2 :     TVirtualMC::GetMC()->Gspos("FTLN",   5+sg, "FAIC", 0., yFLTN, 56.82*sg, 0, "MANY");
    1584             :   }
    1585             : 
    1586             :   // definition of longitudinal components of SM cooling system
    1587           1 :   Float_t lonpar1[3] = {2., 0.5, static_cast<Float_t>(56.82 - trapar[2])};
    1588           1 :   Float_t lonpar2[3] = {lonpar1[0], lonpar1[1], static_cast<Float_t>((198.8 - 56.82)*0.5 - trapar[2])};
    1589           1 :   Float_t lonpar3[3] = {lonpar1[0], lonpar1[1], static_cast<Float_t>((366.9 - 198.8)*0.5 - trapar[2])};
    1590           1 :   TVirtualMC::GetMC()->Gsvolu("FLO1", "BOX ", idtmed[504], lonpar1, 3); // Al
    1591           1 :   TVirtualMC::GetMC()->Gsvolu("FLO2", "BOX ", idtmed[504], lonpar2, 3); // Al
    1592           1 :   TVirtualMC::GetMC()->Gsvolu("FLO3", "BOX ", idtmed[504], lonpar3, 3); // Al
    1593             : 
    1594             :   // Positioning of longitudinal components for the SM cooling system
    1595           1 :   ycoor =  ytub + (tubepar[1] + 2.*bar2[1] + lonpar1[1]);
    1596           1 :   TVirtualMC::GetMC()->Gspos("FLO1",  4, "FAIA",-24., ycoor, 0., 0, "MANY");
    1597           1 :   TVirtualMC::GetMC()->Gspos("FLO1",  2, "FAIA", 24., ycoor, 0., 0, "MANY");
    1598           1 :   TVirtualMC::GetMC()->Gspos("FLO1",  4, "FAIC",-24., ycoor, 0., 0, "MANY");
    1599           1 :   TVirtualMC::GetMC()->Gspos("FLO1",  2, "FAIC", 24., ycoor, 0., 0, "MANY");
    1600             : 
    1601             :   zcoor = (198.8 + 56.82)*0.5;
    1602           1 :   TVirtualMC::GetMC()->Gspos("FLO2",  4, "FAIA",-24., ycoor,-zcoor, 0, "MANY");
    1603           1 :   TVirtualMC::GetMC()->Gspos("FLO2",  2, "FAIA", 24., ycoor,-zcoor, 0, "MANY");
    1604           1 :   TVirtualMC::GetMC()->Gspos("FLO2",  4, "FAIC",-24., ycoor,-zcoor, 0, "MANY");
    1605           1 :   TVirtualMC::GetMC()->Gspos("FLO2",  2, "FAIC", 24., ycoor,-zcoor, 0, "MANY");
    1606           1 :   TVirtualMC::GetMC()->Gspos("FLO2",  8, "FAIA",-24., ycoor, zcoor, 0, "MANY");
    1607           1 :   TVirtualMC::GetMC()->Gspos("FLO2",  6, "FAIA", 24., ycoor, zcoor, 0, "MANY");
    1608           1 :   TVirtualMC::GetMC()->Gspos("FLO2",  8, "FAIC",-24., ycoor, zcoor, 0, "MANY");
    1609           1 :   TVirtualMC::GetMC()->Gspos("FLO2",  6, "FAIC", 24., ycoor, zcoor, 0, "MANY");
    1610             : 
    1611             :   zcoor = (366.9 + 198.8)*0.5;
    1612           1 :   TVirtualMC::GetMC()->Gspos("FLO3",  4, "FAIA",-24., ycoor,-zcoor, 0, "MANY");
    1613           1 :   TVirtualMC::GetMC()->Gspos("FLO3",  2, "FAIA", 24., ycoor,-zcoor, 0, "MANY");
    1614           1 :   TVirtualMC::GetMC()->Gspos("FLO3",  4, "FAIC",-24., ycoor,-zcoor, 0, "MANY");
    1615           1 :   TVirtualMC::GetMC()->Gspos("FLO3",  2, "FAIC", 24., ycoor,-zcoor, 0, "MANY");
    1616           1 :   TVirtualMC::GetMC()->Gspos("FLO3",  8, "FAIA",-24., ycoor, zcoor, 0, "MANY");
    1617           1 :   TVirtualMC::GetMC()->Gspos("FLO3",  6, "FAIA", 24., ycoor, zcoor, 0, "MANY");
    1618           1 :   TVirtualMC::GetMC()->Gspos("FLO3",  8, "FAIC",-24., ycoor, zcoor, 0, "MANY");
    1619           1 :   TVirtualMC::GetMC()->Gspos("FLO3",  6, "FAIC", 24., ycoor, zcoor, 0, "MANY");
    1620             : 
    1621           1 :   ycoor =  ytub - (tubepar[1] + 2.*bar2[1] + lonpar1[1]);
    1622           1 :   TVirtualMC::GetMC()->Gspos("FLO1",  3, "FAIA",-24., ycoor, 0., 0, "MANY");
    1623           1 :   TVirtualMC::GetMC()->Gspos("FLO1",  1, "FAIA", 24., ycoor, 0., 0, "MANY");
    1624           1 :   TVirtualMC::GetMC()->Gspos("FLO1",  3, "FAIC",-24., ycoor, 0., 0, "MANY");
    1625           1 :   TVirtualMC::GetMC()->Gspos("FLO1",  1, "FAIC", 24., ycoor, 0., 0, "MANY");
    1626             : 
    1627             :   zcoor = (198.8 + 56.82)*0.5;
    1628           1 :   TVirtualMC::GetMC()->Gspos("FLO2",  3, "FAIA",-24., ycoor,-zcoor, 0, "MANY");
    1629           1 :   TVirtualMC::GetMC()->Gspos("FLO2",  1, "FAIA", 24., ycoor,-zcoor, 0, "MANY");
    1630           1 :   TVirtualMC::GetMC()->Gspos("FLO2",  3, "FAIC",-24., ycoor,-zcoor, 0, "MANY");
    1631           1 :   TVirtualMC::GetMC()->Gspos("FLO2",  1, "FAIC", 24., ycoor,-zcoor, 0, "MANY");
    1632           1 :   TVirtualMC::GetMC()->Gspos("FLO2",  7, "FAIA",-24., ycoor, zcoor, 0, "MANY");
    1633           1 :   TVirtualMC::GetMC()->Gspos("FLO2",  5, "FAIA", 24., ycoor, zcoor, 0, "MANY");
    1634           1 :   TVirtualMC::GetMC()->Gspos("FLO2",  7, "FAIC",-24., ycoor, zcoor, 0, "MANY");
    1635           1 :   TVirtualMC::GetMC()->Gspos("FLO2",  5, "FAIC", 24., ycoor, zcoor, 0, "MANY");
    1636             : 
    1637             :   zcoor = (366.9 + 198.8)*0.5;
    1638           1 :   TVirtualMC::GetMC()->Gspos("FLO3",  3, "FAIA",-24., ycoor,-zcoor, 0, "MANY");
    1639           1 :   TVirtualMC::GetMC()->Gspos("FLO3",  1, "FAIA", 24., ycoor,-zcoor, 0, "MANY");
    1640           1 :   TVirtualMC::GetMC()->Gspos("FLO3",  3, "FAIC",-24., ycoor,-zcoor, 0, "MANY");
    1641           1 :   TVirtualMC::GetMC()->Gspos("FLO3",  1, "FAIC", 24., ycoor,-zcoor, 0, "MANY");
    1642           1 :   TVirtualMC::GetMC()->Gspos("FLO3",  7, "FAIA",-24., ycoor, zcoor, 0, "MANY");
    1643           1 :   TVirtualMC::GetMC()->Gspos("FLO3",  5, "FAIA", 24., ycoor, zcoor, 0, "MANY");
    1644           1 :   TVirtualMC::GetMC()->Gspos("FLO3",  7, "FAIC",-24., ycoor, zcoor, 0, "MANY");
    1645           1 :   TVirtualMC::GetMC()->Gspos("FLO3",  5, "FAIC", 24., ycoor, zcoor, 0, "MANY");
    1646             : 
    1647             : 
    1648           1 :   Float_t carpos[3] = {static_cast<Float_t>(25. - xtof*0.5),
    1649           1 :                        static_cast<Float_t>((11.5 - (ytof*0.5 - fgkModuleCoverThickness))*0.5),
    1650             :                        0.};
    1651           1 :   if (fTOFHoles) {
    1652           6 :     for (Int_t sg= -1; sg< 2; sg+= 2) {
    1653           2 :       carpos[2] = sg*zlenA*0.5;
    1654           2 :       TVirtualMC::GetMC()->Gspos("FTLN", 5+4*sg, "FAIB", 0., yFLTN, 369.9*sg, 0, "MANY");
    1655           2 :       TVirtualMC::GetMC()->Gspos("FTLN", 5+3*sg, "FAIB", 0., yFLTN, 366.9*sg, 0, "MANY");
    1656           2 :       TVirtualMC::GetMC()->Gspos("FTLN", 5+2*sg, "FAIB", 0., yFLTN, 198.8*sg, 0, "MANY");
    1657           2 :       TVirtualMC::GetMC()->Gspos("FTLN",   5+sg, "FAIB", 0., yFLTN, 56.82*sg, 0, "MANY");
    1658             :     }
    1659             : 
    1660           1 :     ycoor =  ytub + (tubepar[1] + 2.*bar2[1] + lonpar1[1]);
    1661             :     zcoor = (198.8 + 56.82)*0.5;
    1662           1 :     TVirtualMC::GetMC()->Gspos("FLO2", 2, "FAIB",-24., ycoor,-zcoor, 0, "MANY");
    1663           1 :     TVirtualMC::GetMC()->Gspos("FLO2", 1, "FAIB",-24., ycoor, zcoor, 0, "MANY");
    1664             :     zcoor = (366.9 + 198.8)*0.5;
    1665           1 :     TVirtualMC::GetMC()->Gspos("FLO3", 2, "FAIB",-24., ycoor,-zcoor, 0, "MANY");
    1666           1 :     TVirtualMC::GetMC()->Gspos("FLO3", 1, "FAIB",-24., ycoor, zcoor, 0, "MANY");
    1667           1 :     ycoor =  ytub - (tubepar[1] + 2.*bar2[1] + lonpar1[1]);
    1668             :     zcoor = (198.8 + 56.82)*0.5;
    1669           1 :     TVirtualMC::GetMC()->Gspos("FLO2", 4, "FAIB", 24., ycoor,-zcoor, 0, "MANY");
    1670           1 :     TVirtualMC::GetMC()->Gspos("FLO2", 3, "FAIB", 24., ycoor, zcoor, 0, "MANY");
    1671             :     zcoor = (366.9 + 198.8)*0.5;
    1672           1 :     TVirtualMC::GetMC()->Gspos("FLO3", 4, "FAIB", 24., ycoor,-zcoor, 0, "MANY");
    1673           1 :     TVirtualMC::GetMC()->Gspos("FLO3", 3, "FAIB", 24., ycoor, zcoor, 0, "MANY");
    1674             : 
    1675           1 :   }
    1676             : 
    1677           1 :   Float_t barS[3] = {fgkBarS[0], fgkBarS[1], fgkBarS[2]};
    1678           1 :   TVirtualMC::GetMC()->Gsvolu("FBAS", "BOX ", idtmed[504], barS, 3); // Al
    1679             : 
    1680           1 :   Float_t barS1[3] = {fgkBarS1[0], fgkBarS1[1], fgkBarS1[2]};
    1681           1 :   TVirtualMC::GetMC()->Gsvolu("FBS1", "BOX ", idtmed[504], barS1, 3); // Al
    1682             : 
    1683           1 :   Float_t barS2[3] = {fgkBarS2[0], fgkBarS2[1], fgkBarS2[2]};
    1684           1 :   TVirtualMC::GetMC()->Gsvolu("FBS2", "BOX ", idtmed[504], barS2, 3); // Al
    1685             : 
    1686           1 :   Float_t ytubBis = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - 2.*barS2[1] - tubepar[1];
    1687             :   ycoor = ytubBis;
    1688           1 :   zcoor =-carpar[2] + barS[2];
    1689           1 :   TVirtualMC::GetMC()->Gspos("FBAS", 1, "FCA1",-24., ycoor, zcoor, 0, "ONLY");
    1690           1 :   TVirtualMC::GetMC()->Gspos("FBAS", 2, "FCA1", 24., ycoor, zcoor, 0, "ONLY");
    1691           1 :   TVirtualMC::GetMC()->Gspos("FBAS", 1, "FCA2",-24., ycoor, zcoor, 0, "ONLY");
    1692           1 :   TVirtualMC::GetMC()->Gspos("FBAS", 2, "FCA2", 24., ycoor, zcoor, 0, "ONLY");
    1693             : 
    1694           1 :   zcoor =-carpar[2] + 2.*barS[2] + 2.*tubepar[1] + barS1[2];
    1695           1 :   TVirtualMC::GetMC()->Gspos("FBS1", 1, "FCA1",-24., ycoor, zcoor, 0, "ONLY");
    1696           1 :   TVirtualMC::GetMC()->Gspos("FBS1", 2, "FCA1", 24., ycoor, zcoor, 0, "ONLY");
    1697           1 :   TVirtualMC::GetMC()->Gspos("FBS1", 1, "FCA2",-24., ycoor, zcoor, 0, "ONLY");
    1698           1 :   TVirtualMC::GetMC()->Gspos("FBS1", 2, "FCA2", 24., ycoor, zcoor, 0, "ONLY");
    1699             : 
    1700           1 :   ycoor = ytubBis + (tubepar[1] + barS2[1]);
    1701           1 :   zcoor =-carpar[2] + 2.*barS[2] + barS2[2];
    1702           1 :   TVirtualMC::GetMC()->Gspos("FBS2", 1, "FCA1",-24., ycoor, zcoor, 0, "ONLY");
    1703           1 :   TVirtualMC::GetMC()->Gspos("FBS2", 2, "FCA1", 24., ycoor, zcoor, 0, "ONLY");
    1704           1 :   TVirtualMC::GetMC()->Gspos("FBS2", 1, "FCA2",-24., ycoor, zcoor, 0, "ONLY");
    1705           1 :   TVirtualMC::GetMC()->Gspos("FBS2", 2, "FCA2", 24., ycoor, zcoor, 0, "ONLY");
    1706             : 
    1707           1 :   ycoor = ytubBis - (tubepar[1] + barS2[1]);
    1708             :   //zcoor =-carpar[2] + 2.*barS[2] + barS2[2];
    1709           1 :   TVirtualMC::GetMC()->Gspos("FBS2", 3, "FCA1",-24., ycoor, zcoor, 0, "ONLY");
    1710           1 :   TVirtualMC::GetMC()->Gspos("FBS2", 4, "FCA1", 24., ycoor, zcoor, 0, "ONLY");
    1711           1 :   TVirtualMC::GetMC()->Gspos("FBS2", 3, "FCA2",-24., ycoor, zcoor, 0, "ONLY");
    1712           1 :   TVirtualMC::GetMC()->Gspos("FBS2", 4, "FCA2", 24., ycoor, zcoor, 0, "ONLY");
    1713             : 
    1714           1 : }
    1715             : 
    1716             : //_____________________________________________________________________________
    1717             : void AliTOFv6T0::MakeSuperModuleServices(Float_t xtof, Float_t ytof, Float_t zlenA) const
    1718             : {
    1719             :   //
    1720             :   // Make signal cables (FCAB/L and FCBL/B volumes),
    1721             :   // supemodule cover (FCOV volume) and wall (FSAW volume)
    1722             :   // in FAIA/B/C volume containers.
    1723             :   //
    1724             : 
    1725           2 :   Int_t *idtmed = fIdtmed->GetArray()-499;
    1726             : 
    1727           1 :   Int_t idrotm[3]={0,0,0};
    1728             : 
    1729           1 :   Float_t tubepar[3] = {0., 0.4, static_cast<Float_t>(xtof*0.5 - fgkCBLw - fgkSawThickness)};
    1730             :   Float_t al1[3] = {fgkAl1parameters[0], fgkAl1parameters[1], fgkAl1parameters[2]};
    1731             :   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
    1732           1 :   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
    1733             :   //Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
    1734             :   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
    1735             : 
    1736             :   // FEA cables definition
    1737           1 :   Float_t cbpar[3] = {0., 0.5, static_cast<Float_t>((tubepar[2] - (fgkFEAwidth2 - fgkFEAwidth1/6.)*0.5)*0.5)};
    1738           1 :   TVirtualMC::GetMC()->Gsvolu("FCAB", "TUBE", idtmed[510], cbpar, 3);    // copper+alu
    1739             : 
    1740           1 :   Float_t cbparS[3] = {cbpar[0], cbpar[1], static_cast<Float_t>((tubepar[2] - (xtof*0.5 - 25. + (fgkFEAwidth1 - fgkFEAwidth1/6.)*0.5))*0.5)};
    1741           1 :   TVirtualMC::GetMC()->Gsvolu("FCAL", "TUBE", idtmed[510], cbparS, 3);    // copper+alu
    1742             : 
    1743             :   // rotation matrix
    1744           1 :   AliMatrix(idrotm[0], 180., 90., 90., 90., 90., 0.);
    1745             : 
    1746             :   Float_t carpar[3] = {static_cast<Float_t>(xtof*0.5 - fgkCBLw - fgkSawThickness),
    1747           1 :                        static_cast<Float_t>(feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5),
    1748           1 :                        static_cast<Float_t>(feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2])};
    1749             : 
    1750           1 :   Float_t bar2[3] = {fgkBar2[0], fgkBar2[1], fgkBar2[2]};
    1751           2 :   Float_t ytub =-(ytof*0.5 - fgkModuleCoverThickness)*0.5 + carpar[1] +
    1752           1 :     carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - 2.*bar2[1] - tubepar[1];
    1753             : 
    1754             :   // FEA cables positioning
    1755           1 :   Float_t xcoor = (tubepar[2] + (fgkFEAwidth2 - fgkFEAwidth1/6.)*0.5)*0.5;
    1756           1 :   Float_t ycoor = ytub - 3.;
    1757           1 :   Float_t zcoor =-carpar[2] + (2.*feaRoof1[2] - 2.*al1[2] - 2.*feaParam[2] - cbpar[1]);
    1758           1 :   TVirtualMC::GetMC()->Gspos("FCAB", 1, "FCA1",-xcoor, ycoor, zcoor, idrotm[0], "ONLY");
    1759           1 :   TVirtualMC::GetMC()->Gspos("FCAB", 2, "FCA1", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
    1760           1 :   TVirtualMC::GetMC()->Gspos("FCAB", 1, "FCA2",-xcoor, ycoor, zcoor, idrotm[0], "ONLY");
    1761           1 :   TVirtualMC::GetMC()->Gspos("FCAB", 2, "FCA2", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
    1762           1 :   xcoor = (tubepar[2] + (xtof*0.5 - 25. + (fgkFEAwidth1 - fgkFEAwidth1/6.)*0.5))*0.5;
    1763           1 :   ycoor -= 2.*cbpar[1];
    1764           1 :   TVirtualMC::GetMC()->Gspos("FCAL", 1, "FCA1",-xcoor, ycoor, zcoor, idrotm[0], "ONLY");
    1765           1 :   TVirtualMC::GetMC()->Gspos("FCAL", 2, "FCA1", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
    1766           1 :   TVirtualMC::GetMC()->Gspos("FCAL", 1, "FCA2",-xcoor, ycoor, zcoor, idrotm[0], "ONLY");
    1767           1 :   TVirtualMC::GetMC()->Gspos("FCAL", 2, "FCA2", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
    1768             : 
    1769             : 
    1770             :   // Cables and tubes on the side blocks
    1771             :   // constants definition
    1772           1 :   const Float_t kCBLl   = zlenA*0.5; // length of block
    1773           1 :   const Float_t kCBLlh  = zlenA*0.5 - fgkInterCentrModBorder2; // length  of block in case of holes
    1774             :   //const Float_t fgkCBLw   = 13.5;      // width of block
    1775             :   //const Float_t fgkCBLh1  = 2.;        // min. height of block
    1776             :   //const Float_t fgkCBLh2  = 12.3;      // max. height of block
    1777             :   //const Float_t fgkSawThickness = 1.; // Al wall thickness
    1778             : 
    1779             :   // lateral cable and tube volume definition
    1780           1 :   Float_t tgal =  (fgkCBLh2 - fgkCBLh1)/(2.*kCBLl);
    1781           1 :   Float_t cblpar[11];
    1782           1 :   cblpar[0] = fgkCBLw *0.5;
    1783           1 :   cblpar[1] = 0.;
    1784           1 :   cblpar[2] = 0.;
    1785           1 :   cblpar[3] = kCBLl *0.5;
    1786           1 :   cblpar[4] = fgkCBLh1 *0.5;
    1787           1 :   cblpar[5] = fgkCBLh2 *0.5;
    1788           1 :   cblpar[6] = TMath::ATan(tgal)*kRaddeg;
    1789           1 :   cblpar[7] = kCBLl *0.5;
    1790           1 :   cblpar[8] = fgkCBLh1 *0.5;
    1791           1 :   cblpar[9] = fgkCBLh2 *0.5;
    1792           1 :   cblpar[10]= cblpar[6];
    1793           1 :   TVirtualMC::GetMC()->Gsvolu("FCBL", "TRAP", idtmed[511], cblpar, 11); // cables and tubes mix 
    1794             : 
    1795             :   // Side Al Walls definition
    1796           1 :   Float_t sawpar[3] = {static_cast<Float_t>(fgkSawThickness*0.5), static_cast<Float_t>(fgkCBLh2*0.5), kCBLl};
    1797           1 :   TVirtualMC::GetMC()->Gsvolu("FSAW", "BOX ", idtmed[504], sawpar,  3); // Al
    1798             : 
    1799           1 :   AliMatrix(idrotm[1], 90., 90., 180., 0., 90., 180.);
    1800           1 :   AliMatrix(idrotm[2], 90., 90., 0., 0., 90., 0.);
    1801             : 
    1802             :   // lateral cable and tube volume positioning
    1803           1 :   xcoor = (xtof - fgkCBLw)*0.5 - 2.*sawpar[0];
    1804           1 :   ycoor = (fgkCBLh1 + fgkCBLh2)*0.25 - (ytof*0.5 - fgkModuleCoverThickness)*0.5;
    1805             :   zcoor = kCBLl*0.5;
    1806           1 :   TVirtualMC::GetMC()->Gspos("FCBL", 1, "FAIA", -xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
    1807           1 :   TVirtualMC::GetMC()->Gspos("FCBL", 2, "FAIA",  xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
    1808           1 :   TVirtualMC::GetMC()->Gspos("FCBL", 3, "FAIA", -xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
    1809           1 :   TVirtualMC::GetMC()->Gspos("FCBL", 4, "FAIA",  xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
    1810           1 :   TVirtualMC::GetMC()->Gspos("FCBL", 1, "FAIC", -xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
    1811           1 :   TVirtualMC::GetMC()->Gspos("FCBL", 2, "FAIC",  xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
    1812           1 :   TVirtualMC::GetMC()->Gspos("FCBL", 3, "FAIC", -xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
    1813           1 :   TVirtualMC::GetMC()->Gspos("FCBL", 4, "FAIC",  xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
    1814             : 
    1815           1 :   if (fTOFHoles) {
    1816           1 :     cblpar[3] = kCBLlh *0.5;
    1817           1 :     cblpar[5] = fgkCBLh1*0.5 + kCBLlh*tgal;
    1818           1 :     cblpar[7] = kCBLlh *0.5;
    1819           1 :     cblpar[9] = cblpar[5];
    1820           1 :     TVirtualMC::GetMC()->Gsvolu("FCBB", "TRAP", idtmed[511], cblpar, 11); // cables and tubes mix
    1821             : 
    1822           1 :     xcoor = (xtof - fgkCBLw)*0.5 - 2.*sawpar[0];
    1823           1 :     ycoor = (fgkCBLh1 + 2.*cblpar[5])*0.25 - (ytof*0.5 - fgkModuleCoverThickness)*0.5;
    1824           1 :     zcoor = kCBLl-kCBLlh*0.5;
    1825           1 :     TVirtualMC::GetMC()->Gspos("FCBB", 1, "FAIB", -xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
    1826           1 :     TVirtualMC::GetMC()->Gspos("FCBB", 2, "FAIB",  xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
    1827           1 :     TVirtualMC::GetMC()->Gspos("FCBB", 3, "FAIB", -xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
    1828           1 :     TVirtualMC::GetMC()->Gspos("FCBB", 4, "FAIB",  xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
    1829           1 :   }
    1830             : 
    1831             :   // lateral cable and tube volume positioning
    1832           1 :   xcoor = xtof*0.5 - sawpar[0];
    1833           1 :   ycoor = (fgkCBLh2 - ytof*0.5 + fgkModuleCoverThickness)*0.5;
    1834             :   zcoor = 0.;
    1835           1 :   TVirtualMC::GetMC()->Gspos("FSAW", 1, "FAIA", -xcoor, ycoor, zcoor, 0, "ONLY");
    1836           1 :   TVirtualMC::GetMC()->Gspos("FSAW", 2, "FAIA",  xcoor, ycoor, zcoor, 0, "ONLY");
    1837           1 :   TVirtualMC::GetMC()->Gspos("FSAW", 1, "FAIC", -xcoor, ycoor, zcoor, 0, "ONLY");
    1838           1 :   TVirtualMC::GetMC()->Gspos("FSAW", 2, "FAIC",  xcoor, ycoor, zcoor, 0, "ONLY");
    1839             : 
    1840           1 :   if (fTOFHoles) {
    1841           1 :     xcoor = xtof*0.5 - sawpar[0];
    1842             :     ycoor = (fgkCBLh2 - ytof*0.5 + fgkModuleCoverThickness)*0.5;
    1843           1 :     TVirtualMC::GetMC()->Gspos("FSAW", 1, "FAIB", -xcoor, ycoor, 0., 0, "ONLY");
    1844           1 :     TVirtualMC::GetMC()->Gspos("FSAW", 2, "FAIB",  xcoor, ycoor, 0., 0, "ONLY");
    1845           1 :   }
    1846             : 
    1847             :   // TOF Supermodule cover definition and positioning
    1848           1 :   Float_t covpar[3] = {static_cast<Float_t>(xtof*0.5), 0.075, static_cast<Float_t>(zlenA*0.5)};
    1849           1 :   TVirtualMC::GetMC()->Gsvolu("FCOV", "BOX ", idtmed[504], covpar, 3); // Al
    1850           1 :   if (fTOFHoles) {
    1851           1 :     covpar[2] = (zlenA*0.5 - fgkInterCentrModBorder2)*0.5;
    1852           1 :     TVirtualMC::GetMC()->Gsvolu("FCOB", "BOX ", idtmed[504], covpar, 3); // Al
    1853           1 :     covpar[2] = fgkInterCentrModBorder2;
    1854           1 :     TVirtualMC::GetMC()->Gsvolu("FCOP", "BOX ", idtmed[513], covpar, 3); // Plastic (CH2)
    1855           1 :   }
    1856             : 
    1857             :   xcoor = 0.;
    1858           1 :   ycoor = (ytof*0.5 - fgkModuleCoverThickness)*0.5 - covpar[1];
    1859             :   zcoor = 0.;
    1860           1 :   TVirtualMC::GetMC()->Gspos("FCOV", 0, "FAIA", xcoor, ycoor, zcoor, 0, "ONLY");
    1861           1 :   TVirtualMC::GetMC()->Gspos("FCOV", 0, "FAIC", xcoor, ycoor, zcoor, 0, "ONLY");
    1862           1 :   if (fTOFHoles) {
    1863           1 :     zcoor = (zlenA*0.5 + fgkInterCentrModBorder2)*0.5;
    1864           1 :     TVirtualMC::GetMC()->Gspos("FCOB", 1, "FAIB", xcoor, ycoor,  zcoor, 0, "ONLY");
    1865           1 :     TVirtualMC::GetMC()->Gspos("FCOB", 2, "FAIB", xcoor, ycoor, -zcoor, 0, "ONLY");
    1866             :     zcoor = 0.;
    1867           1 :     TVirtualMC::GetMC()->Gspos("FCOP", 0, "FAIB", xcoor, ycoor,  zcoor, 0, "ONLY");
    1868           1 :   }
    1869             : 
    1870           1 : }
    1871             : 
    1872             : //_____________________________________________________________________________
    1873             : void AliTOFv6T0::MakeReadoutCrates(Float_t ytof) const
    1874             : {
    1875             :   // Services Volumes
    1876             : 
    1877             :   // Empty crate weight: 50 Kg, electronics cards + cables ~ 52 Kg.
    1878             :   // Per each side (A and C) the total weight is: 2x102 ~ 204 Kg.
    1879             :   // ... + weight of the connection pannel for the steel cooling system (Cr 18%, Ni 12%, Fe 70%)
    1880             :   // + other remaining elements + various supports
    1881             : 
    1882             :   // Each FEA card weight + all supports
    1883             :   // (including all bolts and not including the cable connectors)
    1884             :   //  353.1 g.
    1885             :   // Per each strip there are 4 FEA cards, then
    1886             :   // the total weight of the front-end electonics section is: 353.1 g x 4 = 1412.4 g.
    1887             : 
    1888             :   // Services Volumes
    1889             : 
    1890             :   // Empty crate weight: 50 Kg, electronics cards + cables ~ 52 Kg.
    1891             :   // Per each side (A and C) the total weight is: 2x102 ~ 204 Kg.
    1892             :   // ... + weight of the connection pannel for the steel cooling system (Cr 18%, Ni 12%, Fe 70%)
    1893             :   // + other remaining elements + various supports
    1894             : 
    1895             :   // Each FEA card weight + all supports
    1896             :   // (including all bolts and not including the cable connectors)
    1897             :   //  353.1 g.
    1898             :   // Per each strip there are 4 FEA cards, then
    1899             :   // the total weight of the front-end electonics section is: 353.1 g x 4 = 1412.4 g.
    1900             :   //
    1901             : 
    1902           2 :   Int_t *idtmed = fIdtmed->GetArray()-499;
    1903             : 
    1904          38 :   Int_t idrotm[18]; for (Int_t ii=0; ii<18; ii++) idrotm[ii]=0;
    1905             : 
    1906             :   // volume definition
    1907           1 :   Float_t serpar[3] = {29.*0.5, 121.*0.5, 90.*0.5};
    1908           1 :   TVirtualMC::GetMC()->Gsvolu("FTOS", "BOX ", idtmed[514], serpar, 3); // Al + Cu + steel
    1909             : 
    1910             :   Float_t xcoor, ycoor, zcoor;
    1911             :   zcoor = (118.-90.)*0.5;
    1912           1 :   Float_t phi = -10.,  ra = fTOFGeometry->Rmin() + ytof*0.5;
    1913          38 :   for (Int_t i = 0; i < fTOFGeometry->NSectors(); i++) {
    1914          18 :     phi += 20.;
    1915          18 :     xcoor = ra * TMath::Cos(phi * kDegrad);
    1916          18 :     ycoor = ra * TMath::Sin(phi * kDegrad);
    1917          18 :     AliMatrix(idrotm[i], 90., phi, 90., phi + 270., 0., 0.);
    1918          18 :     TVirtualMC::GetMC()->Gspos("FTOS", i, "BFMO", xcoor, ycoor, zcoor, idrotm[i], "ONLY");
    1919             :   }
    1920             : 
    1921             :   zcoor = (90. - 223.)*0.5;
    1922           1 :   TVirtualMC::GetMC()->Gspos("FTOS", 1, "BBCE", ra, -3., zcoor, 0, "ONLY");
    1923             : 
    1924           1 : }
    1925             : 
    1926             : //_____________________________________________________________________________
    1927             : void AliTOFv6T0::CreateMaterials()
    1928             : {
    1929             :   //
    1930             :   // Define materials for the Time Of Flight
    1931             :   //
    1932             : 
    1933             :   //AliTOF::CreateMaterials();
    1934             : 
    1935           2 :   AliMagF *magneticField = (AliMagF*)((AliMagF*)TGeoGlobalMagField::Instance()->GetField());
    1936             : 
    1937           1 :   Int_t   isxfld = magneticField->Integ();
    1938           1 :   Float_t sxmgmx = magneticField->Max();
    1939             : 
    1940             :   //--- Quartz (SiO2) ---
    1941           1 :   Float_t   aq[2] = { 28.0855,15.9994};
    1942           1 :   Float_t   zq[2] = { 14.,8. };
    1943           1 :   Float_t   wq[2] = { 1.,2. };
    1944             :   Float_t   dq = 2.7; // (+5.9%)
    1945             :   Int_t nq = -2;
    1946             : 
    1947             :   // --- Nomex (C14H22O2N2) ---
    1948           1 :   Float_t anox[4] = {12.011,1.00794,15.9994,14.00674};
    1949           1 :   Float_t znox[4] = { 6.,  1.,  8.,  7.};
    1950           1 :   Float_t wnox[4] = {14., 22., 2., 2.};
    1951             :   //Float_t dnox  = 0.048; //old value
    1952             :   Float_t dnox  = 0.22;    // (x 4.6)
    1953             :   Int_t nnox   = -4;
    1954             : 
    1955             :   // --- G10  {Si, O, C, H, O} ---
    1956           1 :   Float_t we[7], na[7];
    1957             : 
    1958           1 :   Float_t ag10[5] = {28.0855,15.9994,12.011,1.00794,15.9994};
    1959           1 :   Float_t zg10[5] = {14., 8., 6., 1., 8.};
    1960           1 :   Float_t wmatg10[5];
    1961             :   Int_t nlmatg10 = 5;
    1962           1 :   na[0]= 1. ,   na[1]= 2. ,   na[2]= 0. ,   na[3]= 0. ,   na[4]= 0.;
    1963           1 :   MaterialMixer(we,ag10,na,5);
    1964           1 :   wmatg10[0]= we[0]*0.6;
    1965           1 :   wmatg10[1]= we[1]*0.6;
    1966           1 :   na[0]= 0. ,   na[1]= 0. ,   na[2]= 14. ,   na[3]= 20. ,   na[4]= 3.;
    1967           1 :   MaterialMixer(we,ag10,na,5);
    1968           1 :   wmatg10[2]= we[2]*0.4;
    1969           1 :   wmatg10[3]= we[3]*0.4;
    1970           1 :   wmatg10[4]= we[4]*0.4;
    1971           3 :   AliDebug(1,Form("wg10  %f  %f  %f  %f  %f", wmatg10[0], wmatg10[1], wmatg10[2], wmatg10[3], wmatg10[4]));
    1972             :   //Float_t densg10 = 1.7; //old value
    1973             :   Float_t densg10 = 2.0; // (+17.8%)
    1974             : 
    1975             :   // --- Water ---
    1976           1 :   Float_t awa[2] = {  1.00794, 15.9994 };
    1977           1 :   Float_t zwa[2] = {  1.,  8. };
    1978           1 :   Float_t wwa[2] = {  2.,  1. };
    1979             :   Float_t dwa    = 1.0;
    1980             :   Int_t nwa = -2;
    1981             : 
    1982             :   // --- Air ---
    1983           1 :   Float_t aAir[4]={12.011,14.00674,15.9994,39.948};
    1984           1 :   Float_t zAir[4]={6.,7.,8.,18.};
    1985           1 :   Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
    1986             :   Float_t dAir   = 1.20479E-3;
    1987             : 
    1988             :   // --- Fibre Glass ---
    1989           1 :   Float_t afg[4] = {28.0855,15.9994,12.011,1.00794};
    1990           1 :   Float_t zfg[4] = {14., 8., 6., 1.};
    1991           1 :   Float_t wfg[4] = {0.12906,0.29405,0.51502,0.06187};
    1992             :   //Float_t dfg    = 1.111;
    1993             :   Float_t dfg    = 2.05; // (x1.845)
    1994             :   Int_t nfg      = 4;
    1995             : 
    1996             :   // --- Freon C2F4H2 + SF6 ---
    1997           1 :   Float_t afre[4] = {12.011,1.00794,18.9984032,32.0065};
    1998           1 :   Float_t zfre[4] = { 6., 1., 9., 16.};
    1999           1 :   Float_t wfre[4] = {0.21250,0.01787,0.74827,0.021355};
    2000             :   Float_t densfre = 0.00375;
    2001             :   Int_t nfre     = 4;
    2002             : 
    2003             :   // --- Cables and tubes {Al, Cu} ---
    2004           1 :   Float_t acbt[2] = {26.981539,63.546};
    2005           1 :   Float_t zcbt[2] = {13., 29.};
    2006           1 :   Float_t wcbt[2] = {0.407,0.593};
    2007             :   Float_t decbt   = 0.68;
    2008             : 
    2009             :   // --- Cable {CH2, Al, Cu} ---
    2010           1 :   Float_t asc[4] = {12.011, 1.00794, 26.981539,63.546};
    2011           1 :   Float_t zsc[4] = { 6., 1., 13., 29.};
    2012           1 :   Float_t wsc[4];
    2013          10 :   for (Int_t ii=0; ii<4; ii++) wsc[ii]=0.;
    2014             : 
    2015           1 :   Float_t wDummy[4], nDummy[4];
    2016          10 :   for (Int_t ii=0; ii<4; ii++) wDummy[ii]=0.;
    2017          10 :   for (Int_t ii=0; ii<4; ii++) nDummy[ii]=0.;
    2018           1 :   nDummy[0] = 1.;
    2019           1 :   nDummy[1] = 2.;
    2020           1 :   MaterialMixer(wDummy,asc,nDummy,2);
    2021           1 :   wsc[0] = 0.4375*wDummy[0];
    2022           1 :   wsc[1] = 0.4375*wDummy[1];
    2023           1 :   wsc[2] = 0.3244;
    2024           1 :   wsc[3] = 0.2381;
    2025             :   Float_t dsc = 1.223;
    2026             : 
    2027             :   // --- Crates boxes {Al, Cu, Fe, Cr, Ni} ---
    2028           1 :   Float_t acra[5]= {26.981539,63.546,55.845,51.9961,58.6934};
    2029           1 :   Float_t zcra[5]= {13., 29., 26., 24., 28.};
    2030           1 :   Float_t wcra[5]= {0.7,0.2,0.07,0.018,0.012};
    2031             :   Float_t dcra   = 0.77;
    2032             : 
    2033             :   // --- Polietilene CH2 ---
    2034           1 :   Float_t aPlastic[2] = {12.011, 1.00794};
    2035           1 :   Float_t zPlastic[2] = { 6., 1.};
    2036           1 :   Float_t wPlastic[2] = { 1., 2.};
    2037             :   //Float_t dPlastic = 0.92; // PDB value
    2038             :   Float_t dPlastic = 0.93; // (~+1.1%)
    2039             :   Int_t nwPlastic = -2;
    2040             : 
    2041           1 :   AliMixture ( 0, "Air$", aAir, zAir, dAir, 4, wAir);
    2042           1 :   AliMixture ( 1, "Nomex$", anox, znox, dnox, nnox, wnox);
    2043           1 :   AliMixture ( 2, "G10$", ag10, zg10, densg10, nlmatg10, wmatg10);
    2044           1 :   AliMixture ( 3, "fibre glass$", afg, zfg, dfg, nfg, wfg);
    2045           1 :   AliMaterial( 4, "Al $", 26.981539, 13., 2.7, -8.9, 999.);
    2046             :   Float_t factor = 0.4/1.5*2./3.;
    2047           1 :   AliMaterial( 5, "Al honeycomb$", 26.981539, 13., 2.7*factor, -8.9/factor, 999.);
    2048           1 :   AliMixture ( 6, "Freon$", afre, zfre, densfre, nfre, wfre);
    2049           1 :   AliMixture ( 7, "Glass$", aq, zq, dq, nq, wq);
    2050           1 :   AliMixture ( 8, "Water$",  awa, zwa, dwa, nwa, wwa);
    2051           1 :   AliMixture ( 9, "cables+tubes$", acbt, zcbt, decbt, 2, wcbt);
    2052           1 :   AliMaterial(10, "Cu $", 63.546, 29., 8.96, -1.43, 999.);
    2053           1 :   AliMixture (11, "cable$", asc, zsc, dsc, 4, wsc);
    2054           1 :   AliMixture (12, "Al+Cu+steel$", acra, zcra, dcra, 5, wcra);
    2055           1 :   AliMixture (13, "plastic$", aPlastic, zPlastic, dPlastic, nwPlastic, wPlastic);
    2056             :   Float_t factorHoles = 1./36.5;
    2057           1 :   AliMaterial(14, "Al honey for holes$", 26.981539, 13., 2.7*factorHoles, -8.9/factorHoles, 999.);
    2058             : 
    2059             :   Float_t epsil, stmin, deemax, stemax;
    2060             : 
    2061             :   //   STD data
    2062             :   //  EPSIL  = 0.1   ! Tracking precision,
    2063             :   //  STEMAX = 0.1   ! Maximum displacement for multiple scattering
    2064             :   //  DEEMAX = 0.1   ! Maximum fractional energy loss, DLS
    2065             :   //  STMIN  = 0.1
    2066             : 
    2067             :   // TOF data
    2068             :   epsil  = .001;  // Tracking precision,
    2069             :   stemax = -1.;   // Maximum displacement for multiple scattering
    2070             :   deemax = -.3;   // Maximum fractional energy loss, DLS
    2071             :   stmin  = -.8;
    2072             : 
    2073           1 :   AliMedium( 1,"Air$",          0, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
    2074           1 :   AliMedium( 2,"Nomex$",        1, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
    2075           1 :   AliMedium( 3,"G10$",          2, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
    2076           1 :   AliMedium( 4,"fibre glass$",  3, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
    2077           1 :   AliMedium( 5,"Al Frame$",     4, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
    2078           1 :   AliMedium( 6,"honeycomb$",    5, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
    2079           1 :   AliMedium( 7,"Fre$",          6, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
    2080           1 :   AliMedium( 8,"Cu-S$",        10, 1, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
    2081           1 :   AliMedium( 9,"Glass$",        7, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
    2082           1 :   AliMedium(10,"Water$",        8, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
    2083           1 :   AliMedium(11,"Cable$",       11, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
    2084           1 :   AliMedium(12,"Cables+Tubes$", 9, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
    2085           1 :   AliMedium(13,"Copper$",      10, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
    2086           1 :   AliMedium(14,"Plastic$",     13, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
    2087           1 :   AliMedium(15,"Crates$",      12, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
    2088           1 :   AliMedium(16,"honey_holes$", 14, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
    2089             : 
    2090           1 : }
    2091             : //_____________________________________________________________________________
    2092             : void AliTOFv6T0::Init()
    2093             : {
    2094             :   //
    2095             :   // Initialise the detector after the geometry has been defined
    2096             :   //
    2097           4 :   AliDebug(1, "**************************************"
    2098             :            "  TOF  "
    2099             :            "**************************************");
    2100           3 :   AliDebug(1, "  Version 4 of TOF initialing, "
    2101             :            "symmetric TOF - Full Coverage version");
    2102             :   
    2103           1 :   AliTOF::Init();
    2104             :   
    2105           1 :   fIdFTOA = TVirtualMC::GetMC()->VolId("FTOA");
    2106           1 :   if (fTOFHoles) {
    2107           1 :     fIdFTOB = TVirtualMC::GetMC()->VolId("FTOB");
    2108           1 :     fIdFTOC = TVirtualMC::GetMC()->VolId("FTOC");
    2109           1 :   }
    2110           1 :   fIdFLTA = TVirtualMC::GetMC()->VolId("FLTA");
    2111           1 :   if (fTOFHoles) {
    2112           1 :     fIdFLTB = TVirtualMC::GetMC()->VolId("FLTB");
    2113           1 :     fIdFLTC = TVirtualMC::GetMC()->VolId("FLTC");
    2114           1 :   }
    2115             : 
    2116           3 :   AliDebug(1, "**************************************"
    2117             :            "  TOF  "
    2118             :            "**************************************");
    2119           1 : }
    2120             :  
    2121             : //_____________________________________________________________________________
    2122             : void AliTOFv6T0::StepManager()
    2123             : {
    2124             : 
    2125             :   //
    2126             :   // Procedure called at each step in the Time Of Flight
    2127             :   //
    2128             : 
    2129      157238 :   TLorentzVector mom, pos;
    2130       78619 :   Float_t xm[3],pm[3],xpad[3],ppad[3];
    2131       78619 :   Float_t hits[14];
    2132       78619 :   Int_t   vol[5];
    2133             :   Int_t   sector, plate, padx, padz, strip;
    2134       78619 :   Int_t   copy, padzid, padxid, stripid, i;
    2135       78619 :   Int_t   *idtmed = fIdtmed->GetArray()-499;
    2136             :   Float_t incidenceAngle;
    2137             : 
    2138             :   const char* volpath;
    2139             : 
    2140             :   Int_t index = 0;
    2141             : 
    2142             :   if(
    2143      157322 :      TVirtualMC::GetMC()->IsTrackEntering()
    2144      186175 :      && TVirtualMC::GetMC()->TrackCharge()
    2145             :      //&& TVirtualMC::GetMC()->GetMedium()==idtmed[507]
    2146       48005 :      && TVirtualMC::GetMC()->CurrentMedium()==idtmed[507]
    2147        4303 :      && TVirtualMC::GetMC()->CurrentVolID(copy)==fIdSens
    2148             :      )
    2149             :   {
    2150             : 
    2151          84 :     AliMC *mcApplication = (AliMC*)gAlice->GetMCApp();
    2152             : 
    2153         168 :     AddTrackReference(mcApplication->GetCurrentTrackNumber(), AliTrackReference::kTOF);
    2154             :     //AddTrackReference(mcApplication->GetCurrentTrackNumber());
    2155             : 
    2156             :     // getting information about hit volumes
    2157             :     
    2158         168 :     padzid=TVirtualMC::GetMC()->CurrentVolOffID(1,copy);
    2159          84 :     padz=copy;
    2160          84 :     padz--;
    2161             : 
    2162         168 :     padxid=TVirtualMC::GetMC()->CurrentVolOffID(0,copy);
    2163          84 :     padx=copy; 
    2164          84 :     padx--;
    2165             :     
    2166         168 :     stripid=TVirtualMC::GetMC()->CurrentVolOffID(4,copy);
    2167          84 :     strip=copy; 
    2168          84 :     strip--;
    2169             : 
    2170         168 :     TVirtualMC::GetMC()->TrackPosition(pos);
    2171         168 :     TVirtualMC::GetMC()->TrackMomentum(mom);
    2172             : 
    2173         168 :     Double_t normMom=1./mom.Rho();
    2174             : 
    2175             :     //  getting the coordinates in pad ref system
    2176             : 
    2177         168 :     xm[0] = (Float_t)pos.X();
    2178         168 :     xm[1] = (Float_t)pos.Y();
    2179         168 :     xm[2] = (Float_t)pos.Z();
    2180             : 
    2181         168 :     pm[0] = (Float_t)mom.X()*normMom;
    2182         168 :     pm[1] = (Float_t)mom.Y()*normMom;
    2183         168 :     pm[2] = (Float_t)mom.Z()*normMom;
    2184             :  
    2185         168 :     TVirtualMC::GetMC()->Gmtod(xm,xpad,1); // from MRS to DRS: coordinates convertion
    2186         168 :     TVirtualMC::GetMC()->Gmtod(pm,ppad,2); // from MRS to DRS: direction cosinus convertion
    2187             : 
    2188             : 
    2189          84 :     if (TMath::Abs(ppad[1])>1) {
    2190           0 :       AliWarning("Abs(ppad) > 1");
    2191           0 :       ppad[1]=TMath::Sign((Float_t)1,ppad[1]);
    2192           0 :     }
    2193          84 :     incidenceAngle = TMath::ACos(ppad[1])*kRaddeg;
    2194             : 
    2195             :     plate = -1;
    2196          84 :     if      (strip <  fTOFGeometry->NStripC()) {
    2197             :       plate = 0;
    2198             :       //strip = strip;
    2199           7 :     }
    2200         154 :     else if (strip >= fTOFGeometry->NStripC() && 
    2201          77 :              strip <  fTOFGeometry->NStripC() + fTOFGeometry->NStripB()) {
    2202             :       plate = 1;
    2203           9 :       strip = strip - fTOFGeometry->NStripC();
    2204           9 :     }
    2205         136 :     else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() &&
    2206          68 :              strip <  fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA()) {
    2207             :       plate = 2;
    2208          57 :       strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB();
    2209          57 :     }
    2210          22 :     else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() &&
    2211          11 :              strip <  fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() + fTOFGeometry->NStripB()) {
    2212             :       plate = 3;
    2213          10 :       strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA();
    2214          10 :     }
    2215             :     else                                {
    2216             :       plate = 4;
    2217           1 :       strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA() - fTOFGeometry->NStripB();
    2218             :     }
    2219             : 
    2220         168 :     volpath=TVirtualMC::GetMC()->CurrentVolOffName(7);
    2221          84 :     index=atoi(&volpath[4]);
    2222             :     sector=-1;
    2223             :     sector=index;
    2224             : 
    2225             :     //Old 6h convention
    2226             :     // if(index<5){
    2227             :     //   sector=index+13;
    2228             :     //  }
    2229             :     // else{
    2230             :     //   sector=index-5;
    2231             :     // } 
    2232             :  
    2233         672 :     for(i=0;i<3;++i) {
    2234         504 :       hits[i]   = pos[i];
    2235         252 :       hits[i+3] = pm[i];
    2236             :     }
    2237             : 
    2238         168 :     hits[6] = mom.Rho();
    2239         168 :     hits[7] = pos[3];
    2240          84 :     hits[8] = xpad[0];
    2241          84 :     hits[9] = xpad[1];
    2242          84 :     hits[10]= xpad[2];
    2243          84 :     hits[11]= incidenceAngle;
    2244         252 :     hits[12]= TVirtualMC::GetMC()->Edep();
    2245         252 :     hits[13]= TVirtualMC::GetMC()->TrackLength();
    2246             :     
    2247          84 :     vol[0]= sector;
    2248          84 :     vol[1]= plate;
    2249          84 :     vol[2]= strip;
    2250          84 :     vol[3]= padx;
    2251          84 :     vol[4]= padz;    
    2252             : 
    2253         168 :     AddT0Hit(mcApplication->GetCurrentTrackNumber(),vol, hits);
    2254             :     //AddT0Hit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, hits);
    2255          84 :   }
    2256       78619 : }
    2257             : //-------------------------------------------------------------------
    2258             : void AliTOFv6T0::MaterialMixer(Float_t * p, const Float_t * const a,
    2259             :                                const Float_t * const m, Int_t n) const
    2260             : {
    2261             :   // a[] atomic weights vector      (in)
    2262             :   //     (atoms present in more compound appear separately)
    2263             :   // m[] number of corresponding atoms in the compound  (in)
    2264             :   Float_t t = 0.;
    2265          33 :   for (Int_t i = 0; i < n; ++i) {
    2266          12 :     p[i] = a[i]*m[i];
    2267          12 :     t  += p[i];
    2268             :   }
    2269          30 :   for (Int_t i = 0; i < n; ++i) {
    2270          12 :     p[i] = p[i]/t;
    2271             :     //AliDebug(1,Form((\n weight[%i] = %f (,i,p[i]));
    2272             :   }
    2273           3 : }

Generated by: LCOV version 1.11