/************************************************************************** * 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 purpeateose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ /* $Id$ */ ///////////////////////////////////////////////////////// // Manager and hits classes for set:MUON version 2 // ///////////////////////////////////////////////////////// #include #include #include #include #include #include #include "AliMUONv3.h" #include "AliRun.h" #include "AliMagF.h" #include "AliCallf77.h" #include "AliConst.h" #include "AliMUONChamber.h" #include "AliMUONHit.h" #include "AliMUONPadHit.h" #include "AliMUONConstants.h" #include "AliMUONTriggerCircuit.h" #include "AliMUONFactory.h" ClassImp(AliMUONv3) //___________________________________________ AliMUONv3::AliMUONv3() : AliMUONv1() { // Constructor fChambers = 0; fStations = 0; } //___________________________________________ AliMUONv3::AliMUONv3(const char *name, const char *title) : AliMUONv1(name,title) { // Constructor // By default include all stations fStations = new Int_t[5]; for (Int_t i=0; i<5; i++) fStations[i] = 1; AliMUONFactory factory; factory.Build(this, title); } //___________________________________________ void AliMUONv3::StepManager() { // Volume id Int_t copy, id; Int_t idvol; Int_t iChamber=0; // Particule id, pos and mom vectors, // theta, phi angles with respect the normal of the chamber, // spatial step, delta_energy and time of flight Int_t ipart; TLorentzVector pos, mom; Float_t theta, phi, tof; Float_t destep, step; TClonesArray &lhits = *fHits; // Only charged tracks if( !(gMC->TrackCharge()) ) return; // Only gas gap inside chamber // Tag chambers and record hits when track enters idvol=-1; id=gMC->CurrentVolID(copy); for (Int_t i = 1; i <= AliMUONConstants::NCh(); i++) { if(id==((AliMUONChamber*)(*fChambers)[i-1])->GetGid()) { iChamber = i; idvol = i-1; } } if (idvol == -1) return; // Get current particle id (ipart), track position (pos) and momentum (mom) gMC->TrackPosition(pos); gMC->TrackMomentum(mom); ipart = gMC->TrackPid(); theta = mom.Theta()*kRaddeg; // theta of track phi = mom.Phi() *kRaddeg; // phi of the track tof = gMC->TrackTime(); // Time of flight // // momentum loss and steplength in last step destep = gMC->Edep(); step = gMC->TrackStep(); //new hit if (destep>0.) new(lhits[fNhits++]) AliMUONHit(fIshunt, gAlice->GetCurrentTrackNumber(), iChamber, ipart, pos.X(), pos.Y(), pos.Z(), tof, mom.P(), theta, phi, step, destep); }