ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */


//-----------------------------------------------------------------------------
// Class AliMUONResponseTrigger
// -------------------------------
// Implementation 
// of RPC response
//-----------------------------------------------------------------------------


#include "AliMUONResponseTrigger.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

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);
  }
}

//------------------------------------------------------------------   
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);   
  }
}
 AliMUONResponseTrigger.cxx:1
 AliMUONResponseTrigger.cxx:2
 AliMUONResponseTrigger.cxx:3
 AliMUONResponseTrigger.cxx:4
 AliMUONResponseTrigger.cxx:5
 AliMUONResponseTrigger.cxx:6
 AliMUONResponseTrigger.cxx:7
 AliMUONResponseTrigger.cxx:8
 AliMUONResponseTrigger.cxx:9
 AliMUONResponseTrigger.cxx:10
 AliMUONResponseTrigger.cxx:11
 AliMUONResponseTrigger.cxx:12
 AliMUONResponseTrigger.cxx:13
 AliMUONResponseTrigger.cxx:14
 AliMUONResponseTrigger.cxx:15
 AliMUONResponseTrigger.cxx:16
 AliMUONResponseTrigger.cxx:17
 AliMUONResponseTrigger.cxx:18
 AliMUONResponseTrigger.cxx:19
 AliMUONResponseTrigger.cxx:20
 AliMUONResponseTrigger.cxx:21
 AliMUONResponseTrigger.cxx:22
 AliMUONResponseTrigger.cxx:23
 AliMUONResponseTrigger.cxx:24
 AliMUONResponseTrigger.cxx:25
 AliMUONResponseTrigger.cxx:26
 AliMUONResponseTrigger.cxx:27
 AliMUONResponseTrigger.cxx:28
 AliMUONResponseTrigger.cxx:29
 AliMUONResponseTrigger.cxx:30
 AliMUONResponseTrigger.cxx:31
 AliMUONResponseTrigger.cxx:32
 AliMUONResponseTrigger.cxx:33
 AliMUONResponseTrigger.cxx:34
 AliMUONResponseTrigger.cxx:35
 AliMUONResponseTrigger.cxx:36
 AliMUONResponseTrigger.cxx:37
 AliMUONResponseTrigger.cxx:38
 AliMUONResponseTrigger.cxx:39
 AliMUONResponseTrigger.cxx:40
 AliMUONResponseTrigger.cxx:41
 AliMUONResponseTrigger.cxx:42
 AliMUONResponseTrigger.cxx:43
 AliMUONResponseTrigger.cxx:44
 AliMUONResponseTrigger.cxx:45
 AliMUONResponseTrigger.cxx:46
 AliMUONResponseTrigger.cxx:47
 AliMUONResponseTrigger.cxx:48
 AliMUONResponseTrigger.cxx:49
 AliMUONResponseTrigger.cxx:50
 AliMUONResponseTrigger.cxx:51
 AliMUONResponseTrigger.cxx:52
 AliMUONResponseTrigger.cxx:53
 AliMUONResponseTrigger.cxx:54
 AliMUONResponseTrigger.cxx:55
 AliMUONResponseTrigger.cxx:56
 AliMUONResponseTrigger.cxx:57
 AliMUONResponseTrigger.cxx:58
 AliMUONResponseTrigger.cxx:59
 AliMUONResponseTrigger.cxx:60
 AliMUONResponseTrigger.cxx:61
 AliMUONResponseTrigger.cxx:62
 AliMUONResponseTrigger.cxx:63
 AliMUONResponseTrigger.cxx:64
 AliMUONResponseTrigger.cxx:65
 AliMUONResponseTrigger.cxx:66
 AliMUONResponseTrigger.cxx:67
 AliMUONResponseTrigger.cxx:68
 AliMUONResponseTrigger.cxx:69
 AliMUONResponseTrigger.cxx:70
 AliMUONResponseTrigger.cxx:71
 AliMUONResponseTrigger.cxx:72
 AliMUONResponseTrigger.cxx:73
 AliMUONResponseTrigger.cxx:74
 AliMUONResponseTrigger.cxx:75
 AliMUONResponseTrigger.cxx:76
 AliMUONResponseTrigger.cxx:77
 AliMUONResponseTrigger.cxx:78
 AliMUONResponseTrigger.cxx:79
 AliMUONResponseTrigger.cxx:80
 AliMUONResponseTrigger.cxx:81
 AliMUONResponseTrigger.cxx:82
 AliMUONResponseTrigger.cxx:83
 AliMUONResponseTrigger.cxx:84
 AliMUONResponseTrigger.cxx:85
 AliMUONResponseTrigger.cxx:86
 AliMUONResponseTrigger.cxx:87
 AliMUONResponseTrigger.cxx:88
 AliMUONResponseTrigger.cxx:89
 AliMUONResponseTrigger.cxx:90
 AliMUONResponseTrigger.cxx:91
 AliMUONResponseTrigger.cxx:92
 AliMUONResponseTrigger.cxx:93
 AliMUONResponseTrigger.cxx:94
 AliMUONResponseTrigger.cxx:95
 AliMUONResponseTrigger.cxx:96
 AliMUONResponseTrigger.cxx:97
 AliMUONResponseTrigger.cxx:98
 AliMUONResponseTrigger.cxx:99
 AliMUONResponseTrigger.cxx:100
 AliMUONResponseTrigger.cxx:101
 AliMUONResponseTrigger.cxx:102
 AliMUONResponseTrigger.cxx:103
 AliMUONResponseTrigger.cxx:104
 AliMUONResponseTrigger.cxx:105
 AliMUONResponseTrigger.cxx:106
 AliMUONResponseTrigger.cxx:107
 AliMUONResponseTrigger.cxx:108
 AliMUONResponseTrigger.cxx:109
 AliMUONResponseTrigger.cxx:110
 AliMUONResponseTrigger.cxx:111
 AliMUONResponseTrigger.cxx:112
 AliMUONResponseTrigger.cxx:113
 AliMUONResponseTrigger.cxx:114
 AliMUONResponseTrigger.cxx:115
 AliMUONResponseTrigger.cxx:116
 AliMUONResponseTrigger.cxx:117
 AliMUONResponseTrigger.cxx:118
 AliMUONResponseTrigger.cxx:119
 AliMUONResponseTrigger.cxx:120
 AliMUONResponseTrigger.cxx:121
 AliMUONResponseTrigger.cxx:122
 AliMUONResponseTrigger.cxx:123
 AliMUONResponseTrigger.cxx:124
 AliMUONResponseTrigger.cxx:125
 AliMUONResponseTrigger.cxx:126
 AliMUONResponseTrigger.cxx:127
 AliMUONResponseTrigger.cxx:128
 AliMUONResponseTrigger.cxx:129
 AliMUONResponseTrigger.cxx:130
 AliMUONResponseTrigger.cxx:131
 AliMUONResponseTrigger.cxx:132
 AliMUONResponseTrigger.cxx:133
 AliMUONResponseTrigger.cxx:134
 AliMUONResponseTrigger.cxx:135
 AliMUONResponseTrigger.cxx:136
 AliMUONResponseTrigger.cxx:137
 AliMUONResponseTrigger.cxx:138
 AliMUONResponseTrigger.cxx:139
 AliMUONResponseTrigger.cxx:140
 AliMUONResponseTrigger.cxx:141
 AliMUONResponseTrigger.cxx:142
 AliMUONResponseTrigger.cxx:143