]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ZDC/AliZDC.cxx
New code from Piergiorgio added
[u/mrichter/AliRoot.git] / ZDC / AliZDC.cxx
CommitLineData
4c039060 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$
68ca986e 18Revision 1.7 2000/01/19 17:17:40 fca
19
1cedd08a 20Revision 1.6 1999/09/29 09:24:35 fca
21Introduction of the Copyright and cvs Log
22
4c039060 23*/
24
fe4da5cc 25///////////////////////////////////////////////////////////////////////////////
26// //
27// Zero Degree Calorimeter //
28// This class contains the basic functions for the Time Of Flight //
29// detector. Functions specific to one particular geometry are //
30// contained in the derived classes //
31// //
fe4da5cc 32///////////////////////////////////////////////////////////////////////////////
33
34#include <TBRIK.h>
35#include <TNode.h>
36
37#include "AliZDC.h"
38#include "AliRun.h"
39#include "AliCallf77.h"
40#include "AliConst.h"
41#include "AliMC.h"
42
fe4da5cc 43
44ClassImp(AliZDC)
45
46//_____________________________________________________________________________
47AliZDC::AliZDC()
48{
49 //
50 // Default constructor for the Zero Degree Calorimeter base class
51 //
68ca986e 52 fIshunt = 1;
53 fHits = 0;
fe4da5cc 54}
55
56//_____________________________________________________________________________
57AliZDC::AliZDC(const char *name, const char *title)
58 : AliDetector(name,title)
59{
60 //
61 // Standard constructor for the Zero Degree Calorimeter base class
62 //
63
64 //
65 // Allocate the array of hits
66 fHits = new TClonesArray("AliZDChit", 405);
1cedd08a 67 gAlice->AddHitList(fHits);
fe4da5cc 68
68ca986e 69 fIshunt = 1;
70
71 fDimZN[0] = 3.52;
72 fDimZN[1] = 3.52;
73 fDimZN[2] = 50.;
74 fDimZP[0] = 11.2;
75 fDimZP[1] = 6.;
76 fDimZP[2] = 75.;
77 fPosZN[0] = 0.;
78 fPosZN[1] = 0.;
79 fPosZN[2] = 11650.;
80 fPosZP[0] = -23.;
81 fPosZP[1] = 0.;
82 fPosZP[2] = 11600.;
83 fFibZN[0] = 0.;
84 fFibZN[1] = 0.01825;
85 fFibZN[2] = 50.;
86 fFibZP[0] = 0.;
87 fFibZP[1] = 0.0275;
88 fFibZP[2] = 75.;
89 fGrvZN[0] = 0.03;
90 fGrvZN[1] = 0.03;
91 fGrvZN[2] = 50.;
92 fGrvZP[0] = 0.04;
93 fGrvZP[1] = 0.04;
94 fGrvZP[2] = 75.;
95 fDivZN[0] = 11;
96 fDivZN[1] = 11;
97 fDivZN[2] = 0;
98 fDivZP[0] = 7;
99 fDivZP[1] = 15;
100 fDivZP[2] = 0;
101 fTowZN[0] = 2;
102 fTowZN[1] = 2;
103 fTowZP[0] = 4;
104 fTowZP[1] = 1;
fe4da5cc 105}
106
107//_____________________________________________________________________________
108void AliZDC::AddHit(Int_t track, Int_t *vol, Float_t *hits)
109{
110 //
68ca986e 111 // Add a ZDC hit
fe4da5cc 112 //
68ca986e 113 static Float_t primKinEn, xImpact, yImpact, sFlag;
114
fe4da5cc 115 TClonesArray &lhits = *fHits;
68ca986e 116
117 AliZDChit *newquad, *curquad;
118 newquad = new AliZDChit(fIshunt, track, vol, hits);
119 Int_t i;
120 for(i=0; i<fNhits; i++){
121 // If the hits are equal (same track, same volume), sum them.
122 curquad=(AliZDChit*) lhits[i];
123 if(*curquad==*newquad){
124 *curquad = *curquad+*newquad;
125 delete newquad;
126// fHits->Print("");
127 return;
128 }
129 }
130
131 //Otherwise create a new hit.
132 if(fNhits==0){
133 // First hit -> setting flag for primary or secondary particle
134 Int_t primary = gAlice->GetPrimary(track);
135 if(track != primary){
136 newquad->fSFlag = 1; // Hit created by secondary particle entering the ZDC
137 }
138 else if(track == primary){
139 newquad->fSFlag = 0; // Hit created by PRIMARY particle entering the ZDC
140 }
141 sFlag = newquad->fSFlag;
142 primKinEn = newquad->fPrimKinEn;
143 xImpact = newquad->fXImpact;
144 yImpact = newquad->fYImpact;
145 }
146 else{
147 newquad->fPrimKinEn = primKinEn;
148 newquad->fXImpact = xImpact;
149 newquad->fYImpact = yImpact;
150 newquad->fSFlag = sFlag;
151 }
152 new(lhits[fNhits++]) AliZDChit(newquad);
153 if(fNhits==1) {
154// Int_t Curtrack = gAlice->CurrentTrack();
155// Int_t Prim = gAlice->GetPrimary(Curtrack);
156// printf (" Primary track: %d, Current track: %d \n",
157// Prim, Curtrack);
158// fHits->Print("");
159 }
160 delete newquad;
161// fHits->Print("");
162
fe4da5cc 163}
68ca986e 164
fe4da5cc 165//_____________________________________________________________________________
166void AliZDC::BuildGeometry()
167{
168 //
169 // Build the ROOT TNode geometry for event display
170 // in the Zero Degree Calorimeter
171 // This routine is dummy for the moment
172 //
173
68ca986e 174 TNode *node, *top;
175 TBRIK *brik;
176 const int kColorZDC = kRed;
fe4da5cc 177
178 //
68ca986e 179 top=gAlice->GetGeometry()->GetNode("alice");
fe4da5cc 180
181 // ZDC
fe4da5cc 182 brik = new TBRIK("S_ZDC","ZDC box","void",300,300,5);
68ca986e 183 top->cd();
184 node = new TNode("ZDC","ZDC","S_ZDC",0,0,600,"");
185 node->SetLineColor(kColorZDC);
186 fNodes->Add(node);
fe4da5cc 187}
188
189//_____________________________________________________________________________
190Int_t AliZDC::DistancetoPrimitive(Int_t , Int_t )
191{
192 //
193 // Distance from the mouse to the Zero Degree Calorimeter
194 // Dummy routine
195 //
196 return 9999;
197}
198
fe4da5cc 199//_____________________________________________________________________________
200void AliZDC::StepManager()
201{
202 //
203 // Routine called at every step in the Zero Degree Calorimeter
fe4da5cc 204 //
fe4da5cc 205}
206
207ClassImp(AliZDChit)
208
209//_____________________________________________________________________________
210AliZDChit::AliZDChit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits):
211 AliHit(shunt, track)
212{
213 //
68ca986e 214 // Add a ZDC hit
fe4da5cc 215 //
216 Int_t i;
68ca986e 217 for(i=0; i<2; i++) fVolume[i] = vol[i];
218 fX = hits[0];
219 fY = hits[1];
220 fZ = hits[2];
221 fPrimKinEn = hits[3];
222 fXImpact = hits[4];
223 fYImpact = hits[5];
224 fSFlag = hits[6];
225 fLightPMQ = hits[7];
226 fLightPMC = hits[8];
227 fEnergy = hits[9];
fe4da5cc 228}