/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* *
* Author: The ALICE Off-line Project. *
* Contributors are mentioned in the code where appropriate. *
* *
* Permission to use, copy, modify and distribute this software and its *
* documentation strictly for non-commercial purposes is hereby granted *
* without fee, provided that the above copyright notice appears in all *
* copies and that both the copyright notice and this permission notice *
* appear in the supporting documentation. The authors make no claims *
* about the suitability of this software for any purpose. It is *
* provided "as is" without express or implied warranty. *
**************************************************************************/
//////////////////////////////////////////////////////////////////////////////
// //
// Forward Multiplicity Detector based on Silicon plates //
// This class contains the base procedures for the Forward Multiplicity //
// detector //
// Detector consists of 6 Si volumes covered pseudorapidity interval //
// from 1.6 to 6.0. //
// //
//Begin_Html
/*
The responsible person for this module is
Alla Maevskaia.
*/ //End_Html // // // // /////////////////////////////////////////////////////////////////////////////// #include#include #include #include #include "AliRun.h" #include "AliMC.h" #include "AliFMD.h" #include "AliFMDhit.h" ClassImp(AliFMD) //_____________________________________________________________________________ AliFMD::AliFMD(): AliDetector() { // // Default constructor for class AliFMD // fIshunt = 0; } //_____________________________________________________________________________ AliFMD::AliFMD(const char *name, const char *title) : AliDetector(name,title) { // // Standard constructor for Forward Multiplicity Detector // // // Initialise Hit array fHits = new TClonesArray("AliFMDhit", 1000); gAlice->AddHitList(fHits); fIshunt = 0; fIdSens1 = 0; SetMarkerColor(kRed); } AliFMD::~AliFMD() { delete fHits; } //_____________________________________________________________________________ void AliFMD::AddHit(Int_t track, Int_t *vol, Float_t *hits) { // // Add a hit to the list // TClonesArray &lhits = *fHits; new(lhits[fNhits++]) AliFMDhit(fIshunt,track,vol,hits); } //_____________________________________________________________________________ void AliFMD::BuildGeometry() { // // Build simple ROOT TNode geometry for event display // TNode *node, *top; const int kColorFMD = 7; // top=gAlice->GetGeometry()->GetNode("alice"); // FMD define the different volumes new TRotMatrix("rot901","rot901", 90, 0, 90, 90, 180, 0); new TTUBE("S_FMD0","FMD volume 0","void",4.73,17.7,1.5); top->cd(); node = new TNode("FMD0","FMD0","S_FMD0",0,0,64,""); node->SetLineColor(kColorFMD); fNodes->Add(node); new TTUBE("S_FMD1","FMD volume 1","void",23.4,36.,1.5); top->cd(); node = new TNode("FMD1","FMD1","S_FMD1",0,0,85,""); node->SetLineColor(kColorFMD); fNodes->Add(node); new TTUBE("S_FMD2","FMD volume 2","void",4.73,17.7,1.5); top->cd(); node = new TNode("FMD2","FMD2","S_FMD2",0,0,-64,""); node->SetLineColor(kColorFMD); fNodes->Add(node); new TTUBE("S_FMD3","FMD volume 3","void",23.4,36.,1.5); top->cd(); node = new TNode("FMD3","FMD3","S_FMD3",0,0,-85,""); node->SetLineColor(kColorFMD); fNodes->Add(node); new TTUBE("S_FMD4","FMD volume 4","void",5,15,0.015); top->cd(); node = new TNode("FMD4","FMD4","S_FMD4",0,0,-270,""); node->SetLineColor(kColorFMD); fNodes->Add(node); new TTUBE("S_FMD5","FMD volume 5","void",5,14,0.015); top->cd(); node = new TNode("FMD5","FMD5","S_FMD5",0,0,-630,""); node->SetLineColor(kColorFMD); fNodes->Add(node); } //_____________________________________________________________________________ Int_t AliFMD::DistanceToPrimitive(Int_t px, Int_t py) { // // Calculate the distance from the mouse to the FMD on the screen // Dummy routine // return 9999; } //_____________________________________________________________________________ //------------------------------------------------------------------------- void AliFMD::Init() { // // Initialis the FMD after it has been built Int_t i; AliMC* pMC = AliMC::GetMC(); // printf("\n"); for(i=0;i<35;i++) printf("*"); printf(" FMD_INIT "); for(i=0;i<35;i++) printf("*"); printf("\n"); // // Here the FMD initialisation code (if any!) for(i=0;i<80;i++) printf("*"); printf("\n"); // // fIdSens1=pMC->VolId("GFSI"); //Si sensetive volume } //--------------------------------------------------------------------- void AliFMD::MakeBranch(Option_t* option) { // Create Tree branches for the FMD. Int_t buffersize = 4000; char branchname[10]; sprintf(branchname,"%s",GetName()); AliDetector::MakeBranch(option); if (fDigits && gAlice->TreeD()) { gAlice->TreeD()->Branch(branchname,&fDigits, buffersize); printf("Making Branch %s for digits\n",branchname); } } //--------------------------------------------------------------------- void AliFMD::Eta2Radius(Float_t eta, Float_t zDisk, Float_t *radius) { Float_t expEta=TMath::Exp(-eta); Float_t theta=TMath::ATan(expEta); theta=2.*theta; Float_t rad=zDisk*(TMath::Tan(theta)); *radius=rad; printf(" eta %f radius %f\n", eta, rad); }