]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONResponseTrigger.cxx
Correct function Compare() for "pixels" from MLEM cluster finder.
[u/mrichter/AliRoot.git] / MUON / AliMUONResponseTrigger.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 /* $Id$ */
17
18 // -------------------------------
19 // Class AliMUONResponseTrigger
20 // -------------------------------
21 // Implementation 
22 // of RPC response
23
24
25 #include "AliMUONResponseTrigger.h"
26 #include "AliMUON.h"
27 #include "AliMUONDigit.h"
28 #include "AliMUONGeometryTransformer.h"
29 #include "AliMUONHit.h"
30 #include "AliMUONConstants.h"
31
32 #include "AliMpPad.h"
33 #include "AliMpCathodType.h"
34 #include "AliMpPlaneType.h"
35 #include "AliMpSegmentation.h"
36 #include "AliMpVSegmentation.h"
37
38 #include "AliRun.h"
39 #include "AliLog.h"
40 #include "TList.h"
41
42 /// \cond CLASSIMP
43 ClassImp(AliMUONResponseTrigger)
44 /// \endcond
45
46 namespace
47 {
48   AliMUON* muon()
49   {
50     return static_cast<AliMUON*>(gAlice->GetModule("MUON"));
51   }
52
53   void Global2Local(Int_t detElemId, Double_t xg, Double_t yg, Double_t zg,
54                   Double_t& xl, Double_t& yl, Double_t& zl)
55   {  
56   // ideally should be : 
57   // Double_t x,y,z;
58   // AliMUONGeometry::Global2Local(detElemId,xg,yg,zg,x,y,z);
59   // but while waiting for this geometry singleton, let's go through
60   // AliMUON still.
61   
62     const AliMUONGeometryTransformer* transformer = muon()->GetGeometryTransformer();
63     transformer->Global2Local(detElemId,xg,yg,zg,xl,yl,zl);
64   }
65 }
66
67 //------------------------------------------------------------------   
68 AliMUONResponseTrigger::AliMUONResponseTrigger()
69   : AliMUONResponse()
70 {
71 /// Default constructor
72 }
73
74 //------------------------------------------------------------------   
75 AliMUONResponseTrigger::~AliMUONResponseTrigger()
76 {
77 /// Destructor
78 }
79
80 //_____________________________________________________________________________
81 void 
82 AliMUONResponseTrigger::DisIntegrate(const AliMUONHit& hit, TList& digits)
83 {
84   /// Generate 2 digits (one on each cathode) from 1 hit, i.e. no cluster-size
85   /// generation (simplest response case).
86   
87   digits.Clear();
88   
89   Float_t xhit = hit.X();
90   Float_t yhit = hit.Y();
91   Float_t zhit = 0; // FIXME : should it be hit.Z() ?
92   Int_t detElemId = hit.DetElemId();  
93   
94   Double_t x,y,z;
95   Global2Local(detElemId,xhit,yhit,zhit,x,y,z);
96   
97   Float_t tof = hit.Age();
98   Int_t twentyNano(100);
99   if (tof<AliMUONConstants::TriggerTofLimit())
100   {
101     twentyNano=1;
102   }
103   
104   for ( Int_t cath = AliMp::kCath0; cath <= AliMp::kCath1; ++cath )
105   {
106     const AliMpVSegmentation* seg 
107       = AliMpSegmentation::Instance()
108         ->GetMpSegmentation(detElemId,AliMp::GetCathodType(cath));
109     
110     AliMpPad pad = seg->PadByPosition(TVector2(x,y),kFALSE);
111     Int_t ix = pad.GetIndices().GetFirst();
112     Int_t iy = pad.GetIndices().GetSecond();
113     
114     AliDebug(1,Form("xhit,yhit=%e,%e lx,ly,lz=%e,%e,%e ix,iy=%d,%d",
115                     xhit,yhit,x,y,z,ix,iy));
116     
117     if ( !pad.IsValid() )
118     {
119       AliWarning(Form("hit w/o strip %d-%d xhit,yhit=%e,%e local x,y,z "
120                       "%e,%e,%e ix,iy=%d,%d",detElemId,
121                       cath,
122                       xhit,yhit,x,y,z,ix,iy));
123       continue;
124     }
125     AliMUONDigit* d = new AliMUONDigit(detElemId,pad.GetLocation(0).GetFirst(),
126                                        pad.GetLocation(0).GetSecond(),cath);
127     d->SetPadXY(ix,iy);
128
129     //FIXME : a trigger digit can have several locations. 
130     //this is not currently supported by the digit class. Change that or not ?
131     d->SetCharge(twentyNano);
132     digits.Add(d);   
133   }
134   
135 }
136
137
138
139
140