/*
$Log$
+Revision 1.9 2002/10/23 06:47:56 alibrary
+Introducing Riostream.h
+
+Revision 1.8 2002/10/14 14:55:34 hristov
+Merging the VirtualMC branch to the main development branch (HEAD)
+
+Revision 1.4.2.4 2002/10/10 14:40:31 hristov
+Updating VirtualMC to v3-09-02
+
+Revision 1.7 2002/10/07 11:13:25 gamez
+Access shafts added
+
+Revision 1.6 2002/07/26 06:21:12 gamez
+CRT3 volume taken as sensitive volume
+
+Revision 1.5 2002/07/25 12:52:34 morsch
+AddHit call only if hit has been defined.
+
Revision 1.4 2002/07/12 12:57:29 gamez
Division of CRT1 corrected
// ALICE Cosmic Ray Trigger //
// //
// This class contains the functions for version 0 of the ALICE Cosmic Ray //
-// Trigger. //
+// Trigger. This version will be used to simulation comic rays in alice //
+// with all the detectors. //
//
// Authors:
//
// //
///////////////////////////////////////////////////////////////////////////////
-#include <iostream.h>
+#include <Riostream.h>
-#include <TMath.h>
#include <TGeometry.h>
-#include <TTUBE.h>
+#include <TBRIK.h>
#include <TNode.h>
#include <TLorentzVector.h>
-#include "AliCRTv0.h"
-#include "AliCRTConstants.h"
-
#include "AliRun.h"
#include "AliMC.h"
#include "AliMagF.h"
#include "AliConst.h"
#include "AliPDG.h"
+#include "AliCRTv0.h"
+#include "AliCRTConstants.h"
+
ClassImp(AliCRTv0)
//_____________________________________________________________________________
AliCRTv0::AliCRTv0() : AliCRT()
{
//
- // Default constructor for CRT
+ // Default constructor for CRT v0
//
- fMucur = 0;
}
//_____________________________________________________________________________
: AliCRT(name,title)
{
//
- // Standard constructor for CRT
+ // Standard constructor for CRT v0
//
//Begin_Html
/*
//End_Html
}
+//_____________________________________________________________________________
+AliCRTv0::AliCRTv0(const AliCRTv0& crt)
+{
+ //
+ // Copy ctor.
+ //
+ crt.Copy(*this);
+}
+
+//_____________________________________________________________________________
+AliCRTv0& AliCRTv0::operator= (const AliCRTv0& crt)
+{
+ //
+ // Asingment operator.
+ //
+ crt.Copy(*this);
+ return *this;
+}
+
//_____________________________________________________________________________
void AliCRTv0::BuildGeometry()
{
+ //
+ // Create the ROOT TNode geometry for the CRT
+ //
+
+ TNode *node, *top;
+
+ const Int_t kColorCRT = kRed;
+
+ // Find the top node alice.
+ top = gAlice->GetGeometry()->GetNode("alice");
+
+ new TBRIK("S_CRT_A", "CRT box", "void",
+ AliCRTConstants::fgActiveAreaLenght/2.,
+ AliCRTConstants::fgActiveAreaHeight/2.,
+ AliCRTConstants::fgActiveAreaWidth/2.);
+
+
+ new TRotMatrix("Left", "Left", 90., 315., 90., 45., 0., 337.5);
+ new TRotMatrix("Right", "Right", 90., 45., 90., 315., 180., 202.5);
+ new TRotMatrix("Up", "Up", 90., 0., 90., 90., 0., 90.);
+ top->cd();
+
+ //
+ // Put 4 modules on the top of the magnet
+ Float_t box = AliCRTConstants::fgCageWidth/2.;
+ top->cd();
+ node = new TNode("upper1", "upper1", "S_CRT_A", 0., 790., 3.*box, "Up");
+ node->SetLineColor(kColorCRT);
+ fNodes->Add(node);
+
+ top->cd();
+ node = new TNode("upper2", "upper2", "S_CRT_A", 0., 790., box, "Up");
+ node->SetLineColor(kColorCRT);
+ fNodes->Add(node);
+
+ top->cd();
+ node = new TNode("upper3", "upper3", "S_CRT_A", 0., 790., -1.*box, "Up");
+ node->SetLineColor(kColorCRT);
+ fNodes->Add(node);
+
+ top->cd();
+ node = new TNode("upper4", "upper4", "S_CRT_A", 0., 790., -3.*box, "Up");
+ node->SetLineColor(kColorCRT);
+ fNodes->Add(node);
+
+
+ // Modules on the left side.
+ Float_t xtragap = 10.;
+ Float_t initXside = (790.+xtragap)*TMath::Sin(2*22.5*kDegrad); //rigth side
+ Float_t initYside = (790.+xtragap)*TMath::Cos(2*22.5*kDegrad);
+ top->cd();
+ node = new TNode("upper5", "upper5", "S_CRT_A", initXside, initYside, 3.*box, "Left");
+ node->SetLineColor(kColorCRT);
+ fNodes->Add(node);
+
+ top->cd();
+ node = new TNode("upper6", "upper6", "S_CRT_A", initXside, initYside, box, "Left");
+ node->SetLineColor(kColorCRT);
+ fNodes->Add(node);
+
+ top->cd();
+ node = new TNode("upper7", "upper7", "S_CRT_A", initXside, initYside, -1.*box, "Left");
+ node->SetLineColor(kColorCRT);
+ fNodes->Add(node);
+
+ top->cd();
+ node = new TNode("upper8", "upper8", "S_CRT_A", initXside, initYside, -3.*box, "Left");
+ node->SetLineColor(kColorCRT);
+ fNodes->Add(node);
+
+
+ // Modules on the right side.
+ top->cd();
+ node = new TNode("upper9", "upper9", "S_CRT_A", -initXside, initYside, 3.*box, "Right");
+ node->SetLineColor(kColorCRT);
+ fNodes->Add(node);
+
+ top->cd();
+ node = new TNode("upper10", "upper10", "S_CRT_A", -initXside, initYside, box, "Right");
+ node->SetLineColor(kColorCRT);
+ fNodes->Add(node);
+
+ top->cd();
+ node = new TNode("upper11","upper11", "S_CRT_A", -initXside, initYside, -1.*box, "Right");
+ node->SetLineColor(kColorCRT);
+ fNodes->Add(node);
+
+ top->cd();
+ node = new TNode("upper12","upper12", "S_CRT_A", -initXside, initYside, -3.*box, "Right");
+ node->SetLineColor(kColorCRT);
+ fNodes->Add(node);
+
}
//
// Create geometry for the CRT array
//
+ Int_t idrotm[2499]; // The rotation matrix.
+
+ Int_t * idtmed = fIdtmed->GetArray() - 1099 ;
+
+ //
+ // Molasse
+ CreateMolasse();
+
+ //
+ // Scintillators
+
+ Float_t box[3];
+ box[0] = AliCRTConstants::fgCageLenght/2.; // Half Length of the box along the X axis, cm.
+ box[1] = AliCRTConstants::fgCageHeight/2.; // Half Length of the box along the Y axis, cm.
+ box[2] = AliCRTConstants::fgCageWidth/2.; // Half Length of the box along the Z axis, cm.
+
+ // Define the Scintillators. as a big box.
+ Float_t scint[3];
+ scint[0] = AliCRTConstants::fgActiveAreaLenght/2.; // Half Length in X
+ scint[1] = AliCRTConstants::fgActiveAreaHeight/2.; // Half Length in Y
+ scint[2] = AliCRTConstants::fgActiveAreaWidth/2.; // Half Length in Z
+ gMC->Gsvolu("CRT1", "BOX ", idtmed[1112], scint, 3); // Scintillators
+
+ //
+ // Define the coordinates where the draw will begin.
+ //
+
+ //
+ // -- X axis.
+ // we'll start dawing from the center.
+ Float_t initX = 0.;
+
+ //
+ // -- Y axis
+ Float_t gapY = 30.; // 30 cms. above the barrel.
+ // For the height we staimate the from the center of the ceiling,
+ // if were a cilinder, must be about 280cm.
+ Float_t barrel = 790.; // Barrel radius.
+ Float_t height = barrel + gapY - 30.;
+ Float_t initY = height;
+
+ //
+ // -- Z axis.
+ // we'll start dawing from the center.
+
+ //
+ // Put 4 modules on the top of the magnet
+ Int_t step = 4;
+ for ( Int_t i = 1 ; i <= 4 ; i++ ) {
+ gMC->Gspos("CRT1", i, "ALIC", initX, initY, (i-step)*box[2], 0, "ONLY");
+ step--;
+ }
+
+ // Modules on the barrel sides.
+ // Because the openenig angle for each face is 22.5, and if we want to
+ // put the modules right in the middle
+ Float_t xtragap = 10.;
+ Float_t initXside = (height+xtragap)*TMath::Sin(2*22.5*kDegrad); //rigth side
+ Float_t initYside = (height+xtragap)*TMath::Cos(2*22.5*kDegrad);
+
+ // Put 4 modules on the left side of the magnet
+ // The rotation matrix parameters, for the left side.
+ AliMatrix(idrotm[232], 90., 315., 90., 45., 0., 337.5);
+ Int_t stepl = 4;
+ for ( Int_t i = 1 ; i <= 4 ; i++ ) {
+ gMC->Gspos("CRT1", i+4, "ALIC", initXside, initYside, (i-stepl)*box[2],
+ idrotm[232], "ONLY");
+ stepl--;
+ }
+
+ // Put 4 modules on the right side of the magnet
+ // The rotation matrix parameters for the right side.
+ AliMatrix(idrotm[231], 90., 45., 90., 315., 180., 202.5);
+ Int_t stepr = 4;
+ for ( Int_t i = 1 ; i <= 4 ; i++ ) {
+ gMC->Gspos("CRT1", i+8, "ALIC", -initXside, initYside, (i-stepr)*box[2],
+ idrotm[231], "ONLY");
+ stepr--;
+ }
+
+ // Divide the modules in 2 planes.
+ //gMC->Gsdvn("CRT2", "CRT1", 2, 2);
+ // Now divide each plane in 8 palettes
+ //gMC->Gsdvn("CRT3", "CRT2", 8, 3);
+
+}
+
+//_____________________________________________________________________________
+void AliCRTv0::CreateMolasse()
+{
Int_t idrotm[2499]; // The rotation matrix.
Int_t * idtmed = fIdtmed->GetArray() - 1099 ;
// Behind the PGC2 up to the end of the M. volume.
tbox[0] = 12073.;
tbox[1] = 2575. + 95.;
- tbox[2] = (12073. - 1900.+2987.7+650.)/2.;
+ tbox[2] = (12073. - 1900.-2987.7-650.)/2.;
gMC->Gsvolu("CMO7", "BOX", idtmed[1123], tbox, 3);
gMC->Gspos("CMO7", 1, "ALIC", 0., 4420.-tbox[1], 1900.+2987.7+650.+tbox[2], 0, "MANY");
gMC->Gsvolu("CM11", "BOX", idtmed[1123], tbox, 3);
gMC->Gspos("CM11", 1, "ALIC", -1250.-tbox[0], 4420.-tbox[1], 555.+tbox[2], 0, "MANY");
- //
- // Scintillators
- Float_t box[3];
- box[0] = AliCRTConstants::fgCageLenght/2.; // Half Length of the box along the X axis, cm.
- box[1] = AliCRTConstants::fgCageHeight/2.; // Half Length of the box along the Y axis, cm.
- box[2] = AliCRTConstants::fgCageWidth/2.; // Half Length of the box along the Z axis, cm.
+}
+//_____________________________________________________________________________
+void AliCRTv0::CreateShafts()
+{
+ //
+ //
+ //
+ Int_t idrotm[2499]; // The rotation matrix.
- // Define the Scintillators. as a big box.
- Float_t scint[3];
- scint[0] = AliCRTConstants::fgActiveAreaLenght/2.; // Half Length in X
- scint[1] = AliCRTConstants::fgActiveAreaHeight/2.; // Half Length in Y
- scint[2] = AliCRTConstants::fgActiveAreaWidth/2.; // Half Length in Z
- gMC->Gsvolu("CRT1", "BOX ", idtmed[1112], scint, 3); // Scintillators
- // Divide the modules in 2 planes.
- gMC->Gsdvn("CRT2", "CRT1", 2, 2);
- // Now divide each plane in 8 palettes
- gMC->Gsdvn("CRT3", "CRT2", 8, 3);
+ Int_t * idtmed = fIdtmed->GetArray() - 1099 ;
+
+ // HAll ceiling
+ Float_t ptubs[5];
+ ptubs[0] = 1070.;
+ ptubs[1] = 1170.;
+ ptubs[2] = 1900.;
+ ptubs[3] = 0.;
+ ptubs[4] = 180.;
+ gMC->Gsvolu("CHC1", "TUBS", idtmed[1116], ptubs, 5);
+ gMC->Gspos("CHC1", 1, "ALIC", 0., 500., 0., 0, "ONLY");
//
- // Define the coordinates where the draw will begin.
+ // Acces shafts
//
-
+ AliMatrix(idrotm[2001], 0., 0., 90., 0., 90., 90.);
+
+ // PX24
+ ptubs[0] = 1150.;
+ ptubs[1] = 1250.;
+ ptubs[2] = 1300.;
+ ptubs[3] = kRaddeg*TMath::ASin(1070./ptubs[0]);
+ ptubs[4] = 360 - ptubs[3];
+ gMC->Gsvolu("CSF1", "TUBS", idtmed[1116], ptubs, 5);
+ gMC->Gspos("CSF1", 1, "ALIC", 0., 404., -2300., idrotm[2001], "MANY");
+
+ Float_t ptube[3];
+ ptube[0] = ptubs[0];
+ ptube[1] = ptubs[1];
+ ptube[2] = 2575. - ptubs[2] + 95.;
+ gMC->Gsvolu("CSF2", "TUBE", idtmed[1116], ptube, 3);
+ gMC->Gspos("CSF2", 1, "ALIC", 0., 404.+ptubs[2]+ptube[2], -2300., idrotm[2001], "MANY");
+
+ // Concrete walls along the shaft
+ Float_t pbox[3];
+ pbox[0] = 585./2.;
+ pbox[1] = 2575. + 95.;
+ pbox[2] = 20.;
+ gMC->Gsvolu("CSW1", "BOX", idtmed[1116], pbox, 3);
+ gMC->Gspos("CSW1", 1, "ALIC", -290-pbox[0], 404.-1300.+pbox[1], -3450.+210.*2, 0, "MANY");
+
//
- // -- X axis.
- // we'll start dawing from the center.
- Float_t initX = 0.;
-
+ pbox[0] = 750./2.;
+ pbox[1] = 2575. + 95.;
+ pbox[2] = 20.;
+ gMC->Gsvolu("CSW3", "BOX", idtmed[1116], pbox, 3);
+ gMC->Gspos("CSW3", 1, "ALIC", 420.-290.+pbox[0], 404.-1300.+pbox[1], -3450.+210.*2, 0, "MANY");
+
//
- // -- Y axis
- Float_t gapY = 30.; // 30 cms. above the barrel.
- // For the height we staimate the from the center of the ceiling,
- // if were a cilinder, must be about 280cm.
- Float_t barrel = 790.; // Barrel radius.
- Float_t height = barrel + gapY - 30.;
- Float_t initY = height;
-
+ pbox[0] = 60.;
+ pbox[1] = 2575. + 95.;
+ pbox[2] = 210.;
+ gMC->Gsvolu("CSW2", "BOX", idtmed[1116], pbox, 3);
+ gMC->Gspos("CSW2", 1, "ALIC", -290-pbox[0], 404.-1300.+pbox[1], -3450.+pbox[2], 0, "MANY");
+ gMC->Gspos("CSW2", 2, "ALIC", 420.-290.+pbox[0], 404.-1300.+pbox[1], -3450.+pbox[2], 0, "MANY");
+
+
+ //
+ pbox[0] = 1000.;
+ pbox[1] = 80.;
+ pbox[2] = 200.;
+ gMC->Gsvolu("CSP1", "BOX", idtmed[1116], pbox, 3);
+ gMC->Gspos("CSP1", 1, "ALIC", 0., 2600.-700., -1150-pbox[2], 0, "MANY");
+
//
- // -- Z axis.
- // we'll start dawing from the center.
-
+ pbox[0] = 340.8;
+ pbox[1] = 300./2.;
+ pbox[2] = 460./2.;
+ gMC->Gsvolu("CSP2", "BOX", idtmed[1116], pbox, 3);
+ gMC->Gspos("CSP2", 1, "ALIC", 0., 2950.-700., -3450+pbox[2], 0, "MANY");
+
//
- // Put 4 modules on the top of the magnet
- Int_t step = 4;
- for ( Int_t i = 1 ; i <= 4 ; i++ ) {
- gMC->Gspos("CRT1", i, "ALIC", initX, initY, (i-step)*box[2], 0, "ONLY");
- step--;
- }
-
- // Modules on the barrel sides.
- // Because the openenig angle for each face is 22.5, and if we want to
- // put the modules right in the middle
- Float_t xtragap = 10.;
- Float_t initXside = (height+xtragap)*TMath::Sin(2*22.5*kDegrad); //rigth side
- Float_t initYside = (height+xtragap)*TMath::Cos(2*22.5*kDegrad);
-
- // Put 4 modules on the left side of the magnet
- // The rotation matrix parameters, for the left side.
- AliMatrix(idrotm[232], 90., 315., 90., 45., 0., 337.5);
- Int_t stepl = 4;
- for ( Int_t i = 1 ; i <= 4 ; i++ ) {
- gMC->Gspos("CRT1", i+4, "ALIC", initXside, initYside, (i-stepl)*box[2],
- idrotm[232], "ONLY");
- stepl--;
- }
-
- // Put 4 modules on the right side of the magnet
- // The rotation matrix parameters for the right side.
- AliMatrix(idrotm[231], 90., 45., 90., 315., 180., 202.5);
- Int_t stepr = 4;
- for ( Int_t i = 1 ; i <= 4 ; i++ ) {
- gMC->Gspos("CRT1", i+8, "ALIC", -initXside, initYside, (i-stepr)*box[2],
- idrotm[231], "ONLY");
- stepr--;
- }
+ pbox[0] = 600.;
+ pbox[1] = 150.;
+ pbox[2] = 75.;
+ gMC->Gsvolu("CSP3", "BOX", idtmed[1116], pbox, 3);
+ gMC->Gspos("CSP3", 1, "ALIC", 0., 2950.-700., -1150.-210.-pbox[2], 0, "MANY");
+
+ //
+ pbox[0] = 600.;
+ pbox[1] = 250.;
+ pbox[2] = 38.;
+ gMC->Gsvolu("CSP4", "BOX", idtmed[1116], pbox, 3);
+ gMC->Gspos("CSP4", 1, "ALIC", 0., 2950.-700.+155.+pbox[1], -1150.-210.-pbox[2], 0, "MANY");
+
+
+ // Shielding plug
+ pbox[0] = 850.;
+ pbox[1] = 90.;
+ pbox[2] = 720.;
+ gMC->Gsvolu("CSP5", "BOX", idtmed[1116], pbox, 3);
+ gMC->Gspos("CSP5", 1, "ALIC", 0., 2950.-700., -3450.+460.+pbox[2], 0, "MANY");
+
+ //
+ pbox[0] = 80.;
+ pbox[1] = 150.;
+ pbox[2] = 720.;
+ gMC->Gsvolu("CSP6", "BOX", idtmed[1116], pbox, 3);
+ gMC->Gspos("CSP6", 1, "ALIC", 1150.-600., 2950.-700., -3450.+460.+pbox[2], 0, "MANY");
+ gMC->Gspos("CSP6", 2, "ALIC", -1150.+600., 2950.-700., -3450.+460.+pbox[2], 0, "MANY");
+
+
+ //
+ pbox[0] = 130.;
+ pbox[1] = 60.;
+ pbox[2] = 750.;
+ gMC->Gsvolu("CSP7", "BOX", idtmed[1116], pbox, 3);
+ gMC->Gspos("CSP7", 1, "ALIC", 850.+pbox[0], 2950.-700.+100., -3450.+460.+pbox[2], 0, "MANY");
+ gMC->Gspos("CSP7", 2, "ALIC", -850.-pbox[0], 2950.-700.+100., -3450.+460.+pbox[2], 0, "MANY");
+
+
+ // PM25 Acces Shaft
+ ptube[0] = 910./2.;
+ ptube[1] = ptube[0] + 100.;
+ ptube[2] = (5150. - 1166.)/2.;
+ gMC->Gsvolu("CSF3", "TUBE", idtmed[1116], ptube, 3);
+ gMC->Gspos("CSF3", 1, "ALIC", -2100., AliCRTConstants::fgDepth-ptube[2], 0., idrotm[2001], "MANY");
+
+ // PGC2 Access Shaft
+ ptube[0] = 1100./2.;
+ ptube[1] = ptube[0] + 100.;
+ ptube[2] = (5150. - 690.)/2.;
+ gMC->Gsvolu("CSF4", "TUBE", idtmed[1116], ptube, 3);
+ gMC->Gspos("CSF4", 1, "ALIC", 375., AliCRTConstants::fgDepth-ptube[2], 1900.+2987.7, idrotm[2001], "MANY");
}
//_____________________________________________________________________________
+
void AliCRTv0::CreateMaterials()
{
- //
- //--
- //
-
// Use the standard materials.
- AliCRT::CreateMaterials();
+ AliCRT::CreateMaterials();
}
//_____________________________________________________________________________
void AliCRTv0::DrawDetector()
-{
-
-}
-
-//_____________________________________________________________________________
-void AliCRTv0::DrawModule()
{
//
// Draw a shaded view of the L3 magnet
void AliCRTv0::StepManager()
{
//
- // Called for every step in the CRT Detector
- //
- Float_t hits[12];
- Int_t vol[5];
-
- // Check if this is the last step of the track in the current volume
- Bool_t laststepvol = gMC->IsTrackEntering();
- // Obtain the medium
- TLorentzVector xyz;
- gMC->TrackPosition(xyz);
- TLorentzVector pxyz;
- gMC->TrackMomentum(pxyz);
-
- if ( laststepvol && (strcmp(gMC->CurrentVolName(),"CRT1") == 0) ) {
- if ( gMC->TrackCharge() != 0 || gMC->TrackPid() == kGamma ) {
- Float_t vert[3];
-
- hits[0] = fMucur++;
-
- if ( (gMC->TrackPid() != kMuonPlus)
- && (gMC->TrackPid() != kMuonMinus)) {
- hits[1] = -(Float_t)gMC->TrackPid();
- } else {
- hits[1] = (Float_t)gMC->TrackPid();
- }
-
- TLorentzVector xyz;
- gMC->TrackPosition(xyz);
- TLorentzVector pxyz;
- gMC->TrackMomentum(pxyz);
-
- hits[2] = xyz[0]; // X pit
- hits[3] = xyz[1]; // Y pit
- hits[4] = xyz[2]; // Z pit
- hits[5] = pxyz[0]; // pxug
- hits[6] = pxyz[1]; // pyug
- hits[7] = pxyz[2]; // pzug
-
- hits[8] = gMC->GetMedium(); // layer
- hits[9] = vert[0]; // xver
- hits[10] = vert[1]; // yver
- hits[11] = vert[2]; // zver
- // Store the hit.
- AddHit(gAlice->CurrentTrack(),vol, hits);
- }
+ // Called for every step in the Cosmic Ray Trigger
+ //
+ static Int_t vol[5];
+ Int_t copy;
+ Int_t ipart;
+ TLorentzVector pos;
+ TLorentzVector mom;
+
+ static Float_t hits[14];
+ Int_t tracknumber = gAlice->CurrentTrack();
+
+ static Float_t eloss;
+ static Float_t tlength;
+ Float_t theta;
+ Float_t phi;
+
+ if ( !gMC->IsTrackAlive() ) return;
+
+ if (gMC->IsNewTrack()) {
+ // Reset the deposited energy
+ eloss = 0.;
}
-}
+
+ eloss += gMC->Edep(); // Store the energy loss along the trajectory.
+ tlength += gMC->TrackStep();
+
+ if (gMC->IsTrackEntering() && (strcmp(gMC->CurrentVolName(),"CM12") == 0) ) {
+
+ // Get current particle id (ipart), track position (pos) and momentum (mom)
+ gMC->TrackPosition(pos);
+ gMC->TrackMomentum(mom);
+ ipart = gMC->TrackPid();
+
+ Double_t tc = mom[0]*mom[0]+mom[1]*mom[1];
+ Double_t pt = TMath::Sqrt(tc);
+ theta = Float_t(TMath::ATan2(pt,Double_t(mom[2])))*kRaddeg;
+ phi = Float_t(TMath::ATan2(Double_t(mom[1]),Double_t(mom[0])))*kRaddeg;
+
+
+ vol[0] = gMC->CurrentVolOffID(1, vol[1]);
+ vol[2] = gMC->CurrentVolID(copy);
+ vol[3] = copy;
+
+ hits[0] = 0.f; // (fnmou)
+ hits[1] = (Float_t)ipart; // (fId)
+
+ hits[2] = pos[0]; // X coordinate (fX)
+ hits[3] = pos[1]; // Y coordinate (fY)
+ hits[4] = pos[2]; // Z coordinate (fZ)
+ hits[5] = mom[0]; // Px (fpxug)
+ hits[6] = mom[1]; // Py (fpyug)
+ hits[7] = mom[2]; // Pz (fpzug)
+
+ hits[8] = gMC->GetMedium();//layer(flay)
+ hits[9] = theta; // arrival angle
+ hits[10] = phi; //
+ hits[11] = eloss; // Energy loss
+ hits[12] = tlength; // Trajectory lenght
+ hits[13] = (Float_t)tracknumber;
+
+ AddHit(gAlice->CurrentTrack(),vol, hits);
+ }
+
+}