/////////////////////////////////////////////////////////////////////////////// // // // Time Of Flight // // This class contains the functions for version 1 of the Time Of Flight // // detector. // // // //Begin_Html /* */ //End_Html // // /////////////////////////////////////////////////////////////////////////////// #include "AliTOFv1.h" #include "AliRun.h" #include "AliMC.h" #include "AliConst.h" ClassImp(AliTOFv1) //_____________________________________________________________________________ AliTOFv1::AliTOFv1() : AliTOF() { // // Default constructor // } //_____________________________________________________________________________ AliTOFv1::AliTOFv1(const char *name, const char *title) : AliTOF(name,title) { // // Standard constructor for version 1 of Time Of Flight // } //_____________________________________________________________________________ void AliTOFv1::CreateGeometry() { // // Create geometry for version 1 of Time Of Flight // Authors : Maxim Martemianov, Boris Zagreev (ITEP) 18/09/98 //Begin_Html /* */ //End_Html // AliMC* pMC = AliMC::GetMC(); Float_t fil_rich; Int_t lmax; Float_t phos_phi, zcor2, zcor3, ztof0, ztof1, ztof2; Float_t zl, phos_r, zazor; Int_t idrotm[101]; Float_t phos_x; Float_t rp1, rp2; Float_t par[10], fil_min, fil_max, ysz, fil0; // Int_t *idtmed = gAlice->Idtmed(); // // barrel size along Z axis rp1 = 360.; rp2 = 372.; zl = 720.; // // TOF width along radius of barrel //xtof = rp2 - rp1; ztof0 = 350.; ztof1 = 200.; ztof2 = 150.; // // Plate width ysz = .3; // // DME barrel width zazor = 0.03; // // PHOS and RICH angles phos_x = 214.6; phos_r = 467.; //phos_z = 260.; //rich_z = 472.5; fil_rich = 30.; lmax = 19; zcor2 = ztof0 - ztof1 / 2.; zcor3 = ztof0 - ztof2 / 2.; phos_phi = TMath::ATan(phos_x / (phos_r * 2.)); fil_min = (kPI - phos_phi * 4.) * kRaddeg - 180. / lmax; fil_max = (phos_phi * 4. + kPI) * kRaddeg + 180. / lmax; // // barrel radius in ALIC par[0] = rp1; par[1] = rp2; par[2] = zl / 2.; pMC->Gsvolu("FBAR", "TUBE", idtmed[500], par, 3); pMC->Gspos("FBAR", 1, "ALIC", 0., 0., 0., 0, "ONLY"); pMC->Gsatt("FBAR", "SEEN", 0); // // --- First Block par[0] = (rp1+rp2-zazor)/2.; par[1] = (rp1+rp2+zazor)/2.; par[2] = ztof0; par[3] = 90. - fil_min; par[4] = 90. - fil_rich; fil0 = 180. - (par[3] + par[4]); // // --- Sensitive volume pMC->Gsvolu("FBT1", "TUBS", idtmed[509], par, 5); AliMatrix(idrotm[1], 90., fil0, 90., fil0 + 90., 0., 0.); pMC->Gspos("FBT1", 0, "FBAR", 0., 0., 0., 0, "ONLY"); pMC->Gspos("FBT1", 1, "FBAR", 0., 0., 0., idrotm[1], "ONLY"); // // ALUMINA par[0] = (rp1+rp2+zazor)/2.; par[1] = (rp1+rp2+zazor)/2.+ysz; pMC->Gsvolu("FPE1","TUBS",idtmed[507], par, 0); pMC->Gsposp("FPE1",2,"FBAR", 0., 0., 0., 0, "ONLY", par, 5); pMC->Gsposp("FPE1",3,"FBAR", 0., 0., 0., idrotm[1], "ONLY", par, 5); // par[0] = (rp1+rp2-zazor)/2.-ysz; par[1] = (rp1+rp2-zazor)/2.; pMC->Gsposp("FPE1",4,"FBAR", 0., 0., 0., 0, "ONLY", par, 5); pMC->Gsposp("FPE1",5,"FBAR", 0., 0., 0., idrotm[1], "ONLY", par, 5); // --- Second block par[0] = (rp1+rp2-zazor)/2.; par[1] = (rp1+rp2+zazor)/2.; par[2] = ztof1 / 2.; par[3] = 90. - fil_max; par[4] = 90. - fil_min; pMC->Gsvolu("FBT2", "TUBS", idtmed[509], par, 5); pMC->Gspos("FBT2", 0, "FBAR", 0., 0., zcor2, 0, "ONLY"); pMC->Gspos("FBT2", 1, "FBAR", 0., 0., -zcor2, 0, "ONLY"); // par[0]=(rp1+rp2+zazor)/2.; par[1]=(rp1+rp2+zazor)/2.+ysz; pMC->Gsvolu("FPE2","TUBS",idtmed[507], par, 0); pMC->Gsposp("FPE2",2,"FBAR",0.,0.,zcor2,0,"ONLY",par,5); pMC->Gsposp("FPE2",3,"FBAR",0.,0.,-zcor2,0,"ONLY",par,5); // par[0]=(rp1+rp2-zazor)/2.-ysz; par[1]=(rp1+rp2-zazor)/2.; pMC->Gsposp("FPE2",4,"FBAR",0.,0.,zcor2,0,"ONLY",par,5); pMC->Gsposp("FPE2",5,"FBAR",0.,0.,-zcor2,0,"ONLY",par,5); // // --- Third block par[0] = (rp1+rp2-zazor)/2.; par[1] = (rp1+rp2-zazor)/2.; par[2] = ztof2 / 2.; par[3] = 90. - fil_rich; par[4] = fil_rich + 90.; pMC->Gsvolu("FBT3", "TUBS", idtmed[509], par, 5); pMC->Gspos("FBT3", 0, "FBAR", 0., 0., zcor3, 0, "ONLY"); pMC->Gspos("FBT3", 1, "FBAR", 0., 0., -zcor3, 0, "ONLY"); // par[0]=(rp1+rp2+zazor)/2.; par[1]=(rp1+rp2+zazor)/2.+ysz; pMC->Gsvolu("FPE3","TUBS",idtmed[507], par, 0); pMC->Gsposp("FPE3",2,"FBAR",0.,0.,zcor3,0,"ONLY",par,5); pMC->Gsposp("FPE3",3,"FBAR",0.,0.,-zcor3,0,"ONLY",par,5); // par[0]=(rp1+rp2-zazor)/2.-ysz; par[1]=(rp1+rp2-zazor)/2.; pMC->Gsposp("FPE3",4,"FBAR",0.,0.,zcor3,0,"ONLY",par,5); pMC->Gsposp("FPE3",5,"FBAR",0.,0.,-zcor3,0,"ONLY",par,5); // } //_____________________________________________________________________________ void AliTOFv1::DrawDetector() { // // Draw a shaded view of the Time Of Flight version 1 // AliMC* pMC = AliMC::GetMC(); // Set everything unseen pMC->Gsatt("*", "seen", -1); // // Set ALIC mother transparent pMC->Gsatt("ALIC","SEEN",0); // // Set the volumes visible pMC->Gsatt("FBAR","SEEN",0); pMC->Gsatt("FPE1","SEEN",1); pMC->Gsatt("FPE2","SEEN",1); pMC->Gsatt("FPE3","SEEN",1); // pMC->Gdopt("hide", "on"); pMC->Gdopt("shad", "on"); pMC->Gsatt("*", "fill", 7); pMC->SetClipBox("."); pMC->SetClipBox("*", 0, 1000, -1000, 1000, -1000, 1000); pMC->DefaultRange(); pMC->Gdraw("alic", 40, 30, 0, 12, 9.5, .02, .02); pMC->Gdhead(1111, "Time Of Flight"); pMC->Gdman(18, 4, "MAN"); pMC->Gdopt("hide","off"); } //___________________________________________ void AliTOFv1::CreateMaterials() { // // Define materials for Time Of Flight // AliTOF::CreateMaterials(); } //______________________________________________________________________________ void AliTOFv1::Init() { // // Initialise Time Of Flight after it has been built AliMC* pMC = AliMC::GetMC(); AliTOF::Init(); fIdFBT2=pMC->VolId("FBT2"); fIdFBT3=pMC->VolId("FBT3"); } //______________________________________________________________________________ void AliTOFv1::StepManager() { Float_t hits[8]; Int_t vol[3]; Int_t copy, id; AliMC *pMC= AliMC::GetMC(); Int_t *idtmed = gAlice->Idtmed(); if(pMC->GetMedium()==idtmed[510-1] && pMC->TrackEntering() && pMC->TrackCharge() && (id=pMC->CurrentVol(0,copy))==fIdSens) { TClonesArray &lhits = *fHits; // // Record only charged tracks at entrance vol[2]=copy; vol[1]=pMC->CurrentVolOff(1,0,copy); if(id==fIdFBT2) copy+=2; else if(id==fIdFBT2) copy+=4; vol[0]=1; pMC->TrackPosition(hits); pMC->TrackMomentum(&hits[3]); hits[7]=pMC->TrackTime(); new(lhits[fNhits++]) AliTOFhit(fIshunt,gAlice->CurrentTrack(),vol,hits); } }