Adding more bins in QA (Alis)
[u/mrichter/AliRoot.git] / MUON / AliMUONResponseTrigger.cxx
index 37a2804..d1a8e1a 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-Revision 1.4  2000/11/20 21:44:17  pcrochet
-some modifications to account for the new class AliMUONResponseTriggerV1
+/* $Id$ */
 
-Revision 1.3  2000/07/03 11:54:57  morsch
-AliMUONSegmentation and AliMUONHitMap have been replaced by AliSegmentation and AliHitMap in STEER
-The methods GetPadIxy and GetPadXxy of AliMUONSegmentation have changed name to GetPadI and GetPadC.
 
-Revision 1.2  2000/06/15 07:58:48  morsch
-Code from MUON-dev joined
+//-----------------------------------------------------------------------------
+// Class AliMUONResponseTrigger
+// -------------------------------
+// Implementation 
+// of RPC response
+//-----------------------------------------------------------------------------
 
-Revision 1.1.2.1  2000/06/09 21:48:28  morsch
-Code from AliMUONSegResTrigger.cxx
-
-*/
 
 #include "AliMUONResponseTrigger.h"
-#include "AliSegmentation.h"
-#include <TMath.h>
-#include <TRandom.h>
-#include <Riostream.h> 
+#include "AliMUON.h"
+#include "AliMUONDigit.h"
+#include "AliMUONGeometryTransformer.h"
+#include "AliMUONHit.h"
+#include "AliMUONConstants.h"
+
+#include "AliMpPad.h"
+#include "AliMpCathodType.h"
+#include "AliMpPlaneType.h"
+#include "AliMpSegmentation.h"
+#include "AliMpVSegmentation.h"
+
+#include "AliRun.h"
+#include "AliLog.h"
+#include "TList.h"
 
+/// \cond CLASSIMP
 ClassImp(AliMUONResponseTrigger)
+/// \endcond
 
-//------------------------------------------------------------------   
-Int_t AliMUONResponseTrigger::SetGenerCluster(){
-// nothing to be done except return 0
-  return 0;
-} 
+namespace
+{
+  AliMUON* muon()
+  {
+    return static_cast<AliMUON*>(gAlice->GetModule("MUON"));
+  }
+
+  void Global2Local(Int_t detElemId, Double_t xg, Double_t yg, Double_t zg,
+                  Double_t& xl, Double_t& yl, Double_t& zl)
+  {  
+  // ideally should be : 
+  // Double_t x,y,z;
+  // AliMUONGeometry::Global2Local(detElemId,xg,yg,zg,x,y,z);
+  // but while waiting for this geometry singleton, let's go through
+  // AliMUON still.
+  
+    const AliMUONGeometryTransformer* transformer = muon()->GetGeometryTransformer();
+    transformer->Global2Local(detElemId,xg,yg,zg,xl,yl,zl);
+  }
+}
 
 //------------------------------------------------------------------   
-Int_t AliMUONResponseTrigger::DigitResponse(Int_t digit){
-//  only digital (0/1) information available
-  if (digit) digit=1;
-  return digit;
+AliMUONResponseTrigger::AliMUONResponseTrigger()
+  : AliMUONResponse()
+{
+/// Default constructor
 }
 
+//------------------------------------------------------------------   
+AliMUONResponseTrigger::~AliMUONResponseTrigger()
+{
+/// Destructor
+}
 
+//_____________________________________________________________________________
+void 
+AliMUONResponseTrigger::DisIntegrate(const AliMUONHit& hit, TList& digits, Float_t /*timeDif*/)
+{
+  /// Generate 2 digits (one on each cathode) from 1 hit, i.e. no cluster-size
+  /// generation (simplest response case).
+  
+  digits.Clear();
+  
+  Float_t xhit = hit.X();
+  Float_t yhit = hit.Y();
+  Float_t zhit = hit.Z();
+  Int_t detElemId = hit.DetElemId();  
+  
+  Double_t x,y,z;
+  Global2Local(detElemId,xhit,yhit,zhit,x,y,z);
+  
+  Float_t tof = hit.Age();
+  Int_t twentyNano(100);
+  if (tof<AliMUONConstants::TriggerTofLimit())
+  {
+    twentyNano=1;
+  }
+  
+  Int_t nboard=0;
 
+  for ( Int_t cath = AliMp::kCath0; cath <= AliMp::kCath1; ++cath )
+  {
+    const AliMpVSegmentation* seg 
+      = AliMpSegmentation::Instance()
+        ->GetMpSegmentation(detElemId,AliMp::GetCathodType(cath));
+    
+    AliMpPad pad = seg->PadByPosition(x,y,kFALSE);
+    Int_t ix = pad.GetIx();
+    Int_t iy = pad.GetIy();
+    
+    AliDebug(1,Form("xhit,yhit=%e,%e lx,ly,lz=%e,%e,%e ix,iy=%d,%d",
+                    xhit,yhit,x,y,z,ix,iy));
+    
+    if ( !pad.IsValid() )
+    {
+      AliWarning(Form("hit w/o strip %d-%d xhit,yhit=%e,%e local x,y,z "
+                      "%e,%e,%e ix,iy=%d,%d",detElemId,
+                      cath,
+                      xhit,yhit,x,y,z,ix,iy));
+      continue;
+    }
+    
+    if ( cath == AliMp::kCath0 ) nboard = pad.GetLocalBoardId(0);
+        
+    AliMUONDigit* d = new AliMUONDigit(detElemId,nboard,
+                                       pad.GetLocalBoardChannel(0),cath);
+    d->SetPadXY(ix,iy);
 
+    //FIXME : a trigger digit can have several locations. 
+    //this is not currently supported by the digit class. Change that or not ?
+    d->SetCharge(twentyNano);
 
 
+    digits.Add(d);   
+  }
+}