X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONResponseTrigger.cxx;h=c00811074e7692d06944f816fb65502849a83e13;hb=934a7423617a028f016540d885ae2d6f4491bc09;hp=5a899c67bb1442d7ff646e3a1a60a5bff2b2f829;hpb=30178c30974cdd6a3b59f09e4d479925642e175b;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONResponseTrigger.cxx b/MUON/AliMUONResponseTrigger.cxx index 5a899c67bb1..c00811074e7 100644 --- a/MUON/AliMUONResponseTrigger.cxx +++ b/MUON/AliMUONResponseTrigger.cxx @@ -15,38 +15,156 @@ /* $Id$ */ -//#include -//#include -//#include + +//----------------------------------------------------------------------------- +// Class AliMUONResponseTrigger +// ------------------------------- +// Implementation +// of RPC response +//----------------------------------------------------------------------------- + #include "AliMUONResponseTrigger.h" -//#include "AliSegmentation.h" +#include "AliMUON.h" +#include "AliMUONDigit.h" +#include "AliMUONGeometryTransformer.h" +#include "AliMUONHit.h" +#include "AliMUONConstants.h" +#include "AliMUONTriggerEfficiencyCells.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 -//------------------------------------------------------------------ -AliMUONResponseTrigger::AliMUONResponseTrigger() - : AliMUONResponseV0() +namespace { -// Default constructor -}; + AliMUON* muon() + { + return static_cast(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::SetGenerCluster(){ -// nothing to be done except return 0 - return 0; -} +AliMUONResponseTrigger::AliMUONResponseTrigger() + : AliMUONResponse(), + fTriggerEfficiency(0x0) +{ +/// Default constructor +} //------------------------------------------------------------------ -Int_t AliMUONResponseTrigger::DigitResponse(Int_t digit, - AliMUONTransientDigit* /*where*/){ -// only digital (0/1) information available - if (digit) digit=1; - return digit; +AliMUONResponseTrigger::~AliMUONResponseTrigger() +{ +/// Destructor } +//_____________________________________________________________________________ +void +AliMUONResponseTrigger::DisIntegrate(const AliMUONHit& hit, TList& digits) +{ + /// 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 = 0; // FIXME : should it be 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 (tofGetMpSegmentation(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; + } + AliMUONDigit* d = new AliMUONDigit(detElemId,pad.GetLocalBoardId(0), + 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); + if(fTriggerEfficiency){ + if(cath==0){ + Int_t nboard = pad.GetLocalBoardId(0); + fTriggerEfficiency->IsTriggered(detElemId, nboard, + isTrig[0], isTrig[1]); + } + if(!isTrig[cath]) continue; + } + + digits.Add(d); + } + +} + +//_____________________________________________________________________________ +void +AliMUONResponseTrigger::InitTriggerEfficiency(AliMUONTriggerEfficiencyCells *triggerEfficiency) +{ +/// Initialize trigger chamber efficiency (on demand) + + fTriggerEfficiency = triggerEfficiency; + if ( fTriggerEfficiency ) + { + AliDebug(1, "Will apply trigger efficiency"); + } + else + { + AliFatal("I was requested to apply trigger efficiency, but I could " + "not get it !"); + } +}