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 #include "AliMUONSegmentationTrigger.h"
19 #include "AliMUONTriggerConstants.h"
25 #include "AliMUONChamber.h"
26 #include <Riostream.h>
28 ClassImp(AliMUONSegmentationTrigger)
30 //------------------------------------------------------------------
31 void AliMUONSegmentationTrigger::Init(Int_t chamber)
33 // initialize Module geometry
34 AliMUON *pMUON = (AliMUON *) gAlice->GetModule("MUON");
35 AliMUONChamber* iChamber=&(pMUON->Chamber(chamber));
37 if(pMUON->GetDebug()>1) printf("%s: Initialize Trigger Chamber Module Geometry\n",ClassName());
39 Float_t zPos=iChamber->Z();
40 Float_t z1Pos=-1603.5;
47 // Float_t z1PosPlus=z1Pos+dz/2.;
48 // Float_t z1PosMinus=z1Pos-dz/2.;
49 Float_t z1PosPlus=z1Pos-dz/2.;
50 Float_t z1PosMinus=z1Pos+dz/2.;
52 Float_t z1pm=z1PosPlus/z1PosMinus;
53 Float_t z1mp=z1PosMinus/z1PosPlus;
55 if(pMUON->GetDebug()>1) printf("%s: fZscale = %f \n",ClassName(),fZscale);
57 // calculate yCmin and fYcmax
59 for (i=62; i>=0; i--) {
60 Int_t j=ModuleNumber(-AliMUONTriggerConstants::ModuleId(i)); // i == right, j == left
61 if (Int_t(AliMUONTriggerConstants::ModuleId(i)/10)==5) { // start with middle chamber
62 if (AliMUONTriggerConstants::ModuleId(i)==51) { // special case (empty module)
63 fYcmin[i]=fYcmax[i]=fYcmin[j]=fYcmax[j]=0.;
65 y1Cmin[i]=y1Cmin[j]=-34;
66 y1Cmax[i]=y1Cmax[j]=34;
67 fYcmin[i]=fYcmin[j]=-34.;
69 fYcmax[i]=fYcmax[j]=34.;
71 } else if (Int_t(AliMUONTriggerConstants::ModuleId(i)/10)==4) { // up
72 if (AliMUONTriggerConstants::ModuleId(i)!=41) {
73 y1Cmin[i]=y1Cmax[i+7]*z1pm;
74 y1Cmax[i]=y1Cmin[i]+68.;
76 fYcmax[i]=fYcmin[i]+68.;
78 y1Cmin[j]=y1Cmax[j+7]*z1mp;
79 y1Cmax[j]=y1Cmin[j]+68.;
81 fYcmax[j]=fYcmin[j]+68.;
83 y1Cmin[i]=y1Cmin[ModuleNumber(42)]+17;
84 y1Cmax[i]=y1Cmin[i]+51.;
86 fYcmax[i]=fYcmin[i]+51.;
88 y1Cmin[j]=y1Cmin[ModuleNumber(-42)]+17;
89 y1Cmax[j]=y1Cmin[j]+51.;
91 fYcmax[j]=fYcmin[j]+51.;
93 } else if (Int_t(AliMUONTriggerConstants::ModuleId(i)/10)==3) {
94 y1Cmin[i]=y1Cmax[i+7]*z1mp;
95 y1Cmax[i]=y1Cmin[i]+68.;
97 fYcmax[i]=fYcmin[i]+68.;
99 y1Cmin[j]=y1Cmax[j+7]*z1pm;
100 y1Cmax[j]=y1Cmin[j]+68.;
102 fYcmax[j]=fYcmin[j]+68.;
103 } else if (Int_t(AliMUONTriggerConstants::ModuleId(i)/10)==2) {
104 y1Cmin[i]=y1Cmax[i+7]*z1pm;
105 y1Cmax[i]=y1Cmin[i]+68.;
107 fYcmax[i]=fYcmin[i]+68.;
109 y1Cmin[j]=y1Cmax[j+7]*z1mp;
110 y1Cmax[j]=y1Cmin[j]+68.;
112 fYcmax[j]=fYcmin[j]+68.;
113 } else if (Int_t(AliMUONTriggerConstants::ModuleId(i)/10)==1) {
114 y1Cmin[i]=y1Cmax[i+7]*z1mp;
115 y1Cmax[i]=y1Cmin[i]+68.;
117 fYcmax[i]=fYcmin[i]+68.;
119 y1Cmin[j]=y1Cmax[j+7]*z1pm;
120 y1Cmax[j]=y1Cmin[j]+68.;
122 fYcmax[j]=fYcmin[j]+68.;
126 for (i=0; i<63; i++) { // second loop (fill lower part)
127 Int_t j=ModuleNumber(-AliMUONTriggerConstants::ModuleId(i)); // i == right, j == left
128 if (TMath::Abs(Int_t(AliMUONTriggerConstants::ModuleId(i)/10))==6) {
129 fYcmin[i]=-fYcmax[i-14];
130 fYcmax[i]=-fYcmin[i-14];
131 fYcmin[j]=-fYcmax[j-14];
132 fYcmax[j]=-fYcmin[j-14];
133 } else if (TMath::Abs(Int_t(AliMUONTriggerConstants::ModuleId(i)/10))==7) {
134 fYcmin[i]=-fYcmax[i-28];
135 fYcmax[i]=-fYcmin[i-28];
136 fYcmin[j]=-fYcmax[j-28];
137 fYcmax[j]=-fYcmin[j-28];
138 } else if (TMath::Abs(Int_t(AliMUONTriggerConstants::ModuleId(i)/10))==8) {
139 fYcmin[i]=-fYcmax[i-42];
140 fYcmax[i]=-fYcmin[i-42];
141 fYcmin[j]=-fYcmax[j-42];
142 fYcmax[j]=-fYcmin[j-42];
143 } else if (TMath::Abs(Int_t(AliMUONTriggerConstants::ModuleId(i)/10))==9) {
144 fYcmin[i]=-fYcmax[i-56];
145 fYcmax[i]=-fYcmin[i-56];
146 fYcmin[j]=-fYcmax[j-56];
147 fYcmax[j]=-fYcmin[j-56];
154 // Set parent chamber number
155 fChamber=&(pMUON->Chamber(chamber));
159 //------------------------------------------------------------------
160 void AliMUONSegmentationTrigger::Draw(const char * /*opt*/) const {}
161 //------------------------------------------------------------------
162 Int_t AliMUONSegmentationTrigger::ModuleNumber(Int_t imodule){
163 // returns module number (from 0 to 126) corresponding to module imodule
165 for (Int_t i=0; i<AliMUONTriggerConstants::Nmodule(); i++) {
166 if (AliMUONTriggerConstants::ModuleId(i)==imodule) {
173 //------------------------------------------------------------------
174 void AliMUONSegmentationTrigger::SetHit(Float_t xhit, Float_t yhit, Float_t /*zhit*/)
178 //------------------------------------------------------------------
179 Float_t AliMUONSegmentationTrigger::StripSizeX(Int_t imodule){
180 // Returns x-strip size for given module imodule
182 Int_t absimodule=TMath::Abs(imodule);
183 Int_t moduleNum=ModuleNumber(imodule);
184 if (absimodule==51) {
187 return TMath::Abs((fYcmax[moduleNum]-fYcmin[moduleNum])/
188 AliMUONTriggerConstants::NstripX(moduleNum));
192 //------------------------------------------------------------------
193 Float_t AliMUONSegmentationTrigger::StripSizeY(Int_t imodule){
194 // Returns y-strip size for given module imodule
196 Int_t absimodule=TMath::Abs(imodule);
197 Int_t moduleNum=ModuleNumber(imodule);
198 if (absimodule==51) {
201 return TMath::Abs((AliMUONTriggerConstants::XcMax(moduleNum) -
202 AliMUONTriggerConstants::XcMin(moduleNum)) /
203 AliMUONTriggerConstants::NstripY(moduleNum));
207 //------------------------------------------------------------------
208 void AliMUONSegmentationTrigger::SetHit(Float_t xhit, Float_t yhit)
210 // Sets virtual hit position, needed for evaluating pad response
211 // outside the tracking program