1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 //////////////////////////////////////////////////////////////////////
20 // (V-zero) detector version 6 as designed by the Lyon group //
21 // All comments should be sent to Brigitte CHEYNIS : //
22 // b.cheynis@ipnl.in2p3.fr //
23 // Geometry of september 2005 done with ROOT geometrical modeler // //
24 // V0R (now V0C) sits between Z values -89.5 and -84.8 cm //
25 // V0L (now V0A) sits between Z values +339.0 and +341.0 cm //
26 // New coordinate system has been implemented in october 2003 //
28 //////////////////////////////////////////////////////////////////////
30 #include <TGeoGlobalMagField.h>
32 #include "AliVZEROv6.h"
36 //_____________________________________________________________________________
37 AliVZEROv6:: AliVZEROv6():AliVZERO(),
47 fV0CLidThickness(0.30),
48 fV0CCellThickness(2.00),
49 fV0CBoxThickness(4.70),
50 fV0COffsetFibers(1.0),
56 fV0ACellThickness(2.00),
58 fLightAttenuation(0.05),
63 // Standard default constructor
66 //_____________________________________________________________________________
67 AliVZEROv6::AliVZEROv6(const char *name, const char *title):
78 fV0CLidThickness(0.30),
79 fV0CCellThickness(2.00),
80 fV0CBoxThickness(4.70),
81 fV0COffsetFibers(1.0),
87 fV0ACellThickness(2.00),
89 fLightAttenuation(0.05),
95 // Standard constructor for V-zero Detector version 6
97 AliDebug(2,"Create VZERO object ");
99 fVersion = 6; // version number
101 // Parameters related to geometry :
102 // V0 part in front of muon arm absorber
104 // fV0CHeight1 = 2.5; // height of cell 1, in cm
105 // fV0CHeight2 = 4.4; // height of cell 2, in cm
106 // fV0CHeight3 = 7.4; // height of cell 3, in cm
107 // fV0CHeight4 = 12.5; // height of cell 4, in cm
109 // fV0CRBox = 38.0; // outer radius of box, in cm
110 // fV0CLidThickness = 0.30; // thickness of Carbon lid
111 // fV0CCellThickness = 2.00; // thickness of elementary cell
112 // fV0CBoxThickness = 4.70; // thickness of V0C Box
113 // fV0COffsetFibers = 1.0; // offset to output fibers, in cm
115 // V0 part on the other side with respect to Interaction Point
117 // fV0AHeight1 = 3.3; // height of cell 1, in cm
118 // fV0AHeight2 = 6.2; // height of cell 2, in cm
119 // fV0AHeight3 = 8.9; // height of cell 3, in cm
120 // fV0AHeight4 = 20.9; // height of cell 4, in cm
122 // fV0ACellThickness = 2.00; // thickness of elementary cell
124 // Parameters related to light output :
126 // fLightYield = 93.75; // Light yield in BC408 (93.75 eV per photon)
127 // fLightAttenuation = 0.05; // Light attenuation in fiber (0.05 per meter)
128 // fnMeters = 15.0; // Number of meters of clear fibers to PM
129 // fFibToPhot = 0.3; // Attenuation at fiber-photocathode interface
132 //_____________________________________________________________________________
133 void AliVZEROv6::CreateGeometry()
136 // Constructs TGeo geometry
138 const int kColorVZERO = kGreen;
140 AliDebug(2,"VZERO ConstructGeometry");
142 // TGeoMedium *medAir = gGeoManager->GetMedium("VZERO_Air");
143 TGeoMedium *medAlu = gGeoManager->GetMedium("VZERO_Aluminum");
144 TGeoMedium *medCar = gGeoManager->GetMedium("VZERO_Carbon");
145 TGeoMedium *medSci = gGeoManager->GetMedium("VZERO_Scintillator");
147 TGeoVolume *top = gGeoManager->GetVolume("ALIC");
149 Float_t heightRight, r4Right;
151 Float_t zdet = 90.0 - 0.5 - fV0CBoxThickness/2.0;
152 heightRight = fV0CHeight1 + fV0CHeight2 + fV0CHeight3 + fV0CHeight4;
153 r4Right = fV0CRMin + heightRight + 3.0*0.2; // 3 spacings of 2mm between rings
155 // Creation of assembly V0RI - right part - :
157 TGeoVolume *v0RI = new TGeoVolumeAssembly("V0RI");
158 TGeoTranslation *tr1 = new TGeoTranslation(0.,0.,-zdet);
159 top->AddNode(v0RI,1,tr1);
161 // Creation of carbon lids (3.0 mm thick) to keep V0C box shut :
165 partube[0] = fV0CRMin;
166 partube[1] = fV0CRBox;
167 partube[2] = fV0CLidThickness/2.0;
169 TGeoTube *sV0CA = new TGeoTube("V0CA", partube[0], partube[1], partube[2]);
170 TGeoVolume *v0CA = new TGeoVolume("V0CA",sV0CA,medCar);
171 TGeoTranslation *tr2 = new TGeoTranslation(0.,0., fV0CBoxThickness/2.0-partube[2]);
172 TGeoTranslation *tr3 = new TGeoTranslation(0.,0.,-fV0CBoxThickness/2.0+partube[2]);
173 v0RI->AddNode(v0CA,1,tr2);
174 v0RI->AddNode(v0CA,2,tr3);
175 v0CA->SetLineColor(kYellow);
177 // Creation of aluminum rings 3.0 mm thick to maintain the v0RI pieces :
179 partube[0] = fV0CRMin - 0.3;
180 partube[1] = fV0CRMin;
181 partube[2] = fV0CBoxThickness/2.0;
183 TGeoTube *sV0IR = new TGeoTube("V0IR", partube[0], partube[1], partube[2]);
184 TGeoVolume *v0IR = new TGeoVolume("V0IR",sV0IR,medAlu);
185 v0RI->AddNode(v0IR,1,0);
186 v0IR->SetLineColor(kYellow);
188 partube[0] = fV0CRBox;
189 partube[1] = fV0CRBox + 0.3;
190 partube[2] = fV0CBoxThickness/2.0;
192 TGeoTube *sV0ER = new TGeoTube("V0ER", partube[0], partube[1], partube[2]);
193 TGeoVolume *v0ER = new TGeoVolume("V0ER",sV0ER,medAlu);
194 v0RI->AddNode(v0ER,1,0);
195 v0ER->SetLineColor(kYellow);
197 // Creation of assembly V0R0 of scintillator cells within one sector
199 TGeoVolume *v0R0 = new TGeoVolumeAssembly("V0R0");
201 // Elementary cell of ring 1 - right part - :
202 // (cells of ring 1 will be shifted by 2.0 cm backwards to output fibers)
204 Float_t r1Right = fV0CRMin + fV0CHeight1;
205 Float_t offset = fV0CBoxThickness/2.0 - fV0CLidThickness - fV0CCellThickness/2.0;
209 partubs[0] = fV0CRMin;
210 partubs[1] = r1Right;
211 partubs[2] = fV0CCellThickness/2.0;
212 partubs[3] = 90.0-22.5;
213 partubs[4] = 135.0-22.5;
215 TGeoTubeSeg *sV0R1 = new TGeoTubeSeg("V0R1", partubs[0], partubs[1], partubs[2],
216 partubs[3], partubs[4]);
217 TGeoVolume *v0R1 = new TGeoVolume("V0R1",sV0R1,medSci);
218 TGeoTranslation *tr4 = new TGeoTranslation(0.,0.,-offset);
219 v0R0->AddNode(v0R1,1,tr4);
220 v0R1->SetLineColor(kColorVZERO);
222 // Elementary cell of ring 2 - right part - :
223 // (cells of ring 2 will be shifted by 1.0 cm backwards to output fibers)
225 Float_t r2Right = r1Right + fV0CHeight2;
227 partubs[0] = r1Right; // must be equal to 7.1
228 partubs[1] = r2Right; // must be equal to 11.5
229 TGeoTubeSeg *sV0R2 = new TGeoTubeSeg("V0R2", partubs[0], partubs[1], partubs[2],
230 partubs[3], partubs[4]);
231 TGeoVolume *v0R2 = new TGeoVolume("V0R2",sV0R2,medSci);
232 TGeoTranslation *tr5 = new TGeoTranslation(0.0,0.2,-offset + fV0COffsetFibers);
233 v0R0->AddNode(v0R2,1,tr5);
234 v0R2->SetLineColor(kColorVZERO);
236 // Ring 3 - right part - :
238 // Float_t x = TMath::ATan(1.0/156.0) * ((180./TMath::Pi()));
240 r2Right = r2Right + 0.2;
241 Float_t r3Right = r2Right + fV0CHeight3;
242 // printf(" r2 = %f, r3 = %f \n\n", r2Right,r3Right);
244 partubs[0] = r2Right; // must be equal to 11.7
245 partubs[1] = r3Right; // must be equal to 19.1
246 partubs[3] = 90.0-22.5;
247 partubs[4] = 112.5-22.5;
249 TGeoTubeSeg *sV0R3 = new TGeoTubeSeg("V0R3", partubs[0], partubs[1], partubs[2],
250 partubs[3], partubs[4]);
251 TGeoVolume *v0R3 = new TGeoVolume("V0R3",sV0R3,medSci);
252 TGeoTranslation *tr6 = new TGeoTranslation(0.,0.2,-offset + 2.0*fV0COffsetFibers);
253 v0R0->AddNode(v0R3,1,tr6);
254 v0R3->SetLineColor(kColorVZERO);
256 partubs[3] = 112.5-22.5;
257 partubs[4] = 135.0-22.5;
259 TGeoTubeSeg *sV0R4 = new TGeoTubeSeg("V0R4", partubs[0], partubs[1], partubs[2],
260 partubs[3], partubs[4]);
261 TGeoVolume *v0R4 = new TGeoVolume("V0R4",sV0R4,medSci);
262 v0R0->AddNode(v0R4,1,tr6);
263 v0R4->SetLineColor(kColorVZERO);
265 // Ring 4 - right part - :
267 Float_t x = TMath::ATan(3.5/257.5) * ((180./TMath::Pi()));
268 r3Right = r3Right + 0.2 + 0.2; // + 0.2 because no shift in translation here !!
270 partubs[0] = r3Right; // must be equal to 19.5
271 partubs[1] = r4Right; // must be equal to 32.0
272 partubs[3] = 90.0-22.5+x;
273 partubs[4] = 112.5-22.5-x;
275 TGeoTubeSeg *sV0R5 = new TGeoTubeSeg("V0R5", partubs[0], partubs[1], partubs[2],
276 partubs[3], partubs[4]);
277 TGeoVolume *v0R5 = new TGeoVolume("V0R5",sV0R5,medSci);
278 TGeoTranslation *tr7 = new TGeoTranslation(0.,0.0,-offset + 2.0*fV0COffsetFibers);
279 v0R0->AddNode(v0R5,1,tr7);
280 v0R5->SetLineColor(kColorVZERO);
282 partubs[3] = 112.5-22.5+x;
283 partubs[4] = 135.0-22.5-x;
285 TGeoTubeSeg *sV0R6 = new TGeoTubeSeg("V0R6", partubs[0], partubs[1], partubs[2],
286 partubs[3], partubs[4]);
287 TGeoVolume *v0R6 = new TGeoVolume("V0R6",sV0R6,medSci);
288 v0R0->AddNode(v0R6,1,tr7);
289 v0R6->SetLineColor(kColorVZERO);
292 Float_t phiDeg= 180./4.;
294 Int_t nsecR = 1; // number of sectors in right part of V0
295 Int_t ncellsR; // number of scintillating cells
297 for (phi = 22.5; phi < 360.0; phi = phi + phiDeg)
300 TGeoRotation *rot1 = new TGeoRotation("rot1", 90.0, +phi, 90., 90.+phi, 0.0, 0.0 );
302 v0RI->AddNode(v0R0,nsecR,rot1);
306 ncellsR = (nsecR - 1) * 6; // 6 cells per sector (2 cells in ring 3 and 4)
307 AliInfo(Form("Number of cells on Right side - V0C = %d", ncellsR));
309 // Creation of assembly v0LE - left part - :
310 // Entrance face at +339.0 cm (new coordinate system) ...
312 Float_t heightLeft = fV0AHeight1 + fV0AHeight2 + fV0AHeight3 + fV0AHeight4;
313 Float_t r4Left = fV0ARMin + heightLeft;
315 TGeoVolume *v0LE = new TGeoVolumeAssembly("V0LE");
317 TGeoTranslation *tr8 = new TGeoTranslation(0.,0.,339.0 + fV0ACellThickness/2.0);
318 top->AddNode(v0LE,1,tr8);
320 // Creation of assembly V0L0 of scintillator cells within one sector
322 TGeoVolume *v0L0 = new TGeoVolumeAssembly("V0L0");
325 offsetLeft = - fV0ACellThickness/2.0;
327 Float_t r1Left = fV0ARMin + fV0AHeight1;
329 partubs[0] = fV0ARMin;
331 partubs[2] = fV0ACellThickness/2.0;
332 partubs[3] = 90.0-22.5;
333 partubs[4] = 135.0-22.5;
335 TGeoTubeSeg *sV0L1 = new TGeoTubeSeg("V0L1", partubs[0], partubs[1], partubs[2],
336 partubs[3], partubs[4]);
337 TGeoVolume *v0L1 = new TGeoVolume("V0L1",sV0L1,medSci);
338 v0L0->AddNode(v0L1,1,gGeoIdentity);
339 v0L1->SetLineColor(kColorVZERO);
340 v0L1->SetVisibility(kTRUE);
342 Float_t r2Left = r1Left + fV0AHeight2;
347 TGeoTubeSeg *sV0L2 = new TGeoTubeSeg("V0L2", partubs[0], partubs[1], partubs[2],
348 partubs[3], partubs[4]);
349 TGeoVolume *v0L2 = new TGeoVolume("V0L2",sV0L2,medSci);
350 v0L0->AddNode(v0L2,1,gGeoIdentity);
351 v0L2->SetLineColor(kColorVZERO);
352 v0L2->SetVisibility(kTRUE);
354 Float_t r3Left = r2Left + fV0AHeight3;
359 TGeoTubeSeg *sV0L3 = new TGeoTubeSeg("V0L3", partubs[0], partubs[1], partubs[2],
360 partubs[3], partubs[4]);
361 TGeoVolume *v0L3 = new TGeoVolume("V0L3",sV0L3,medSci);
362 v0L0->AddNode(v0L3,1,gGeoIdentity);
363 v0L3->SetLineColor(kColorVZERO);
364 v0L3->SetVisibility(kTRUE);
369 TGeoTubeSeg *sV0L4 = new TGeoTubeSeg("V0L4", partubs[0], partubs[1], partubs[2],
370 partubs[3], partubs[4]);
371 TGeoVolume *v0L4 = new TGeoVolume("V0L4",sV0L4,medSci);
372 v0L0->AddNode(v0L4,1,gGeoIdentity);
373 v0L4->SetLineColor(kColorVZERO);
374 v0L4->SetVisibility(kTRUE);
376 Int_t nsecL = 1; // number of sectors in left part of V0
377 Int_t ncellsL; // number of scintillating cells
379 for (phi = 22.5; phi < 360.0; phi = phi + phiDeg)
382 TGeoRotation *rot1 = new TGeoRotation("rot1", 90.0, +phi, 90., 90.+phi, 0.0, 0.0 );
383 v0LE->AddNode(v0L0,nsecL,rot1);
387 ncellsL = (nsecL - 1) * 4; // 4 cells per sector
388 AliInfo(Form("Number of cells on Left side - V0A = %d\n", ncellsL));
390 gGeoManager->SetTopVolume(top);
391 gGeoManager->CloseGeometry();
392 // gGeoManager-> SetVisLevel(4);
395 //_____________________________________________________________________________
396 void AliVZEROv6::CreateMaterials()
399 // Creates materials used for geometry
401 AliDebug(2,"Create materials");
403 // Int_t *idtmed = fIdtmed->GetArray()-2999;
405 Int_t fieldType = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ(); // Field type
406 Double_t maxField = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max(); // Field max.
407 Double_t maxBending = 0; // Max Angle
408 Double_t maxStepSize = 0.001; // Max step size
409 Double_t maxEnergyLoss = 1; // Max Delta E
410 Double_t precision = 0.001; // Precision
411 Double_t minStepSize = 0.001; // Minimum step size
413 Double_t a, z, density, radLength, absLength;
414 Float_t tmaxfd, stemax, deemax, epsil, stmin;
426 // Parameters for Air (= 0.01% C + 75% N + 23% O + 1% Ar )
428 Float_t aa[] = { 12.0107, 14.0067, 15.9994, 39.948 };
429 Float_t za[] = { 6., 7., 8., 18. };
430 Float_t wa[] = { 0.000124, 0.755267, 0.231781, 0.012827 };
431 density = 0.00120479;
437 AliMixture(id, "Air", aa, za, density, 4, wa);
438 AliMedium(id, "Air", id, 1, fieldType, maxField, maxBending,
439 maxStepSize, maxEnergyLoss, precision, minStepSize);
441 // Parameters for Aluminum
452 AliMaterial( id, "Aluminum", a, z, density, radLength, 37.2, 0, 0);
453 AliMedium(id, "Aluminum", id, 1, fieldType, maxField, maxBending,
454 maxStepSize, maxEnergyLoss, precision, minStepSize);
456 // Parameters for Carbon
463 AliMaterial(id, "Carbon", a, z, density, radLength, 49.9, 0, 0);
464 AliMedium(id, "Carbon", id, 1, fieldType, maxField, maxBending,
465 maxStepSize, maxEnergyLoss, precision, minStepSize);
467 // Parameters for scintillator
469 Float_t as[] = { 1.00794, 12.011};
470 Float_t zs[] = { 1., 6.};
471 Float_t ws[] = { 1., 1.};
478 AliMixture(id, "Scintillator", as, zs, density, -2, ws);
479 AliMedium(id, "Scintillator", id, 1, fieldType, maxField, maxBending,
480 maxStepSize,maxEnergyLoss,precision,minStepSize);
485 //_____________________________________________________________________________
486 void AliVZEROv6::DrawModule() const
489 // Drawing is done in DrawVZERO.C
491 AliDebug(2,"DrawModule");
495 //_____________________________________________________________________________
496 void AliVZEROv6::DrawGeometry()
499 // Drawing of V0 geometry done in DrawV0.C
501 AliDebug(2,"DrawGeometry");
503 // Here is DrawV0.C :
507 // TGeoVolume *top = gGeoManager->GetMasterVolume();
508 // gGeoManager->SetNsegments(80);
509 // Int_t nd = top->GetNdaughters();
510 // for (Int_t i=0; i<nd; i++) top->GetNode(i)->GetVolume()->InvisibleAll();
511 // TGeoVolume *v0ri = gGeoManager->GetVolume("V0RI");
512 // TGeoVolume *v0le = gGeoManager->GetVolume("V0LE");
513 // v0ri->SetVisibility(kTRUE);
514 // v0ri->VisibleDaughters(kTRUE);
515 // v0le->SetVisibility(kTRUE);
516 // v0le->VisibleDaughters(kTRUE);
517 // top->SetVisibility(kTRUE);
523 //_____________________________________________________________________________
524 void AliVZEROv6::Init()
526 // Initialises version of the VZERO Detector given in Config
527 // Just prints an information message
529 AliInfo(Form("VZERO version %d initialized \n",IsVersion()));
534 //_____________________________________________________________________________
535 void AliVZEROv6::StepManager()
538 // Step Manager, called at each step
542 static Float_t hits[21];
543 static Float_t eloss, tlength;
544 static Int_t nPhotonsInStep;
545 static Int_t nPhotons;
546 static Int_t numStep;
548 Float_t destep, step;
552 // We keep only charged tracks :
554 if ( !gMC->TrackCharge() || !gMC->IsTrackAlive() ) return;
556 vol[0] = gMC->CurrentVolOffID(1, vol[1]);
557 vol[2] = gMC->CurrentVolID(copy);
560 static Int_t idV0R1 = gMC->VolId("V0R1");
561 static Int_t idV0L1 = gMC->VolId("V0L1");
562 static Int_t idV0R2 = gMC->VolId("V0R2");
563 static Int_t idV0L2 = gMC->VolId("V0L2");
564 static Int_t idV0R3 = gMC->VolId("V0R3");
565 static Int_t idV0L3 = gMC->VolId("V0L3");
566 static Int_t idV0R4 = gMC->VolId("V0R4");
567 static Int_t idV0L4 = gMC->VolId("V0L4");
568 static Int_t idV0R5 = gMC->VolId("V0R5");
569 static Int_t idV0R6 = gMC->VolId("V0R6");
571 if ( gMC->CurrentVolID(copy) == idV0R1 ||
572 gMC->CurrentVolID(copy) == idV0L1 )
574 else if ( gMC->CurrentVolID(copy) == idV0R2 ||
575 gMC->CurrentVolID(copy) == idV0L2 )
577 else if ( gMC->CurrentVolID(copy) == idV0R3 ||
578 gMC->CurrentVolID(copy) == idV0R4 ||
579 gMC->CurrentVolID(copy) == idV0L3 )
581 else if ( gMC->CurrentVolID(copy) == idV0R5 ||
582 gMC->CurrentVolID(copy) == idV0R6 ||
583 gMC->CurrentVolID(copy) == idV0L4 )
589 if ( ringNumber > 0.5 ) {
591 destep = gMC->Edep();
592 step = gMC->TrackStep();
594 nPhotonsInStep = Int_t(destep / (fLightYield *1e-9) );
595 nPhotonsInStep = gRandom->Poisson(nPhotonsInStep);
600 if ( gMC->IsTrackEntering() ) {
602 nPhotons = nPhotonsInStep;
603 gMC->TrackPosition(fTrackPosition);
604 gMC->TrackMomentum(fTrackMomentum);
606 Float_t pt = TMath::Sqrt( fTrackMomentum.Px() * fTrackMomentum.Px() +
607 fTrackMomentum.Py() * fTrackMomentum.Py() );
609 hits[0] = fTrackPosition.X();
610 hits[1] = fTrackPosition.Y();
611 hits[2] = fTrackPosition.Z();
612 hits[3] = Float_t (gMC->TrackPid());
614 hits[4] = gMC->TrackTime();
615 hits[5] = gMC->TrackCharge();
616 hits[6] = fTrackMomentum.Theta()*TMath::RadToDeg();
617 hits[7] = fTrackMomentum.Phi()*TMath::RadToDeg();
618 hits[8] = ringNumber;
621 hits[10] = fTrackMomentum.P();
622 hits[11] = fTrackMomentum.Px();
623 hits[12] = fTrackMomentum.Py();
624 hits[13] = fTrackMomentum.Pz();
626 TParticle *par = gAlice->GetMCApp()->Particle(gAlice->GetMCApp()->GetCurrentTrackNumber());
627 hits[14] = par->Vx();
628 hits[15] = par->Vy();
629 hits[16] = par->Vz();
635 nPhotons = nPhotons + nPhotonsInStep;
637 if( gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared()){
639 nPhotons = nPhotons - Int_t((Float_t(nPhotons) * fLightAttenuation * fnMeters));
640 nPhotons = nPhotons - Int_t( Float_t(nPhotons) * fFibToPhot);
645 hits[20] = GetCellId (vol, hits);
647 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
660 //_____________________________________________________________________________
661 void AliVZEROv6::AddHit(Int_t track, Int_t *vol, Float_t *hits)
666 TClonesArray &lhits = *fHits;
667 new(lhits[fNhits++]) AliVZEROhit(fIshunt,track,vol,hits);
670 //_____________________________________________________________________________
671 void AliVZEROv6::AddDigits(Int_t *tracks, Int_t* digits)
674 // Adds a VZERO digit
676 TClonesArray &ldigits = *fDigits;
677 new(ldigits[fNdigits++]) AliVZEROdigit(tracks, digits);
680 //_____________________________________________________________________________
681 void AliVZEROv6::MakeBranch(Option_t *option)
684 // Creates new branches in the current Root Tree
687 sprintf(branchname,"%s",GetName());
688 AliDebug(2,Form("fBufferSize = %d",fBufferSize));
690 const char *cH = strstr(option,"H");
692 if (fHits && fLoader->TreeH() && cH) {
693 fLoader->TreeH()->Branch(branchname,&fHits, fBufferSize);
694 AliDebug(2,Form("Making Branch %s for hits",branchname));
697 const char *cD = strstr(option,"D");
699 if (fDigits && fLoader->TreeD() && cD) {
700 fLoader->TreeD()->Branch(branchname,&fDigits, fBufferSize);
701 AliDebug(2,Form("Making Branch %s for digits",branchname));
706 //_____________________________________________________________________________
707 Int_t AliVZEROv6::GetCellId(Int_t *vol, Float_t *hits)
710 // Returns Id of scintillator cell
711 // Right side from 0 to 47
712 // Left side from 48 to 95
714 // hits[8] = ring number (1 to 4)
715 // vol[1] = copy number (1 to 8)
717 Int_t index = vol[1];
718 Int_t ringNumber = Int_t(hits[8]);
721 // cout << "volID = " << vol[0] << " copy = " << vol[1] << endl;
722 // cout << "X = " << hits[0] << " Y = " << hits[1] << endl;
724 Float_t phi = Float_t(TMath::ATan2(Double_t(hits[1]),Double_t(hits[0])) );
727 if (index < 7) index = index + 8;
731 index = (index - 7) + ( ( ringNumber - 1 ) * 8);}
732 else if(ringNumber >= 3){
733 if(gMC->CurrentVolID(vol[1]) == gMC->VolId("V0R3")||
734 gMC->CurrentVolID(vol[1]) == gMC->VolId("V0R5") )
735 {index = (index*2 - 14) + ( ( ringNumber - 2 ) * 16); }
736 if(gMC->CurrentVolID(vol[1]) == gMC->VolId("V0R4")||
737 gMC->CurrentVolID(vol[1]) == gMC->VolId("V0R6") )
738 {index = (index*2 - 13) + ( ( ringNumber - 2 ) * 16); }
743 else if (hits[2] > 0.0){
744 index = (index - 7 + 48) + ( ( ringNumber - 1 ) * 8);
747 // cout << " ring = " << ringNumber << " phi = "<< phi << endl;
748 // cout << " cellID = " << fCellId << endl;
749 // cout << "**********" << endl;