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