/*
$Log$
+Revision 1.10 2003/01/14 10:50:19 alibrary
+Cleanup of STEER coding conventions
+
+Revision 1.9 2002/03/13 07:04:11 jchudoba
+Connect only MUON branches when reading the event to speed up digitisation.
+
+Revision 1.8 2002/02/22 12:14:21 morsch
+Validate pad hit before digitization.
+
+Revision 1.7 2001/11/22 11:15:41 jchudoba
+Proper deletion of arrays (thanks to Rene Brun)
+
+Revision 1.6 2001/11/02 12:55:45 jchudoba
+cleanup of the code, add const to Get methods
+
Revision 1.5 2001/10/31 16:35:07 jchudoba
some functionality move to AliMUONTransientDigit class
*/
-#include <TTree.h>
-#include <TObjArray.h>
-#include <TFile.h>
#include <TDirectory.h>
+#include <TFile.h>
+#include <TObjArray.h>
+#include <TPDGCode.h>
+#include <TTree.h>
-#include "AliMUONMerger.h"
-#include "AliMUONConstants.h"
-#include "AliMUONChamber.h"
#include "AliHitMap.h"
-#include "AliMUONHitMapA1.h"
#include "AliMUON.h"
+#include "AliMUONChamber.h"
+#include "AliMUONConstants.h"
+#include "AliMUONDigit.h"
#include "AliMUONHit.h"
+#include "AliMUONHitMapA1.h"
+#include "AliMUONMerger.h"
#include "AliMUONPadHit.h"
-#include "AliMUONDigit.h"
#include "AliMUONTransientDigit.h"
#include "AliRun.h"
-#include "AliPDG.h"
ClassImp(AliMUONMerger)
fHitMap = 0;
fList = 0;
fBgrFile = 0;
+ fDebug = 0;
}
//------------------------------------------------------------------------
if (fTrH1) delete fTrH1;
if (fHitsBgr) delete fHitsBgr;
if (fPadHitsBgr) delete fPadHitsBgr;
- if (fHitMap) delete fHitMap;
+ if (fHitMap) delete [] fHitMap;
if (fList) delete fList;
if (fBgrFile) delete fBgrFile;
}
//------------------------------------------------------------------------
Bool_t AliMUONMerger::Exists(const AliMUONPadHit *padhit) const
{
+// test if the given padhit was already fired
return (fHitMap[fNch]->TestHit(padhit->PadX(),padhit->PadY()));
}
//------------------------------------------------------------------------
void AliMUONMerger::Update(AliMUONPadHit *padhit)
{
+// add new contribution to the fired padhit
AliMUONTransientDigit *pdigit =
static_cast<AliMUONTransientDigit*>(
fHitMap[fNch]->GetHit(padhit->PadX(),padhit->PadY()));
//------------------------------------------------------------------------
void AliMUONMerger::CreateNew(AliMUONPadHit *padhit)
{
+// add new transient digit to the list, update hit map
fList->AddAtAndExpand(
new AliMUONTransientDigit(fNch,fDigits),fCounter);
fHitMap[fNch]->SetHit(padhit->PadX(),padhit->PadY(),fCounter);
TTree *treeH = gAlice->TreeH();
Int_t ntracks = (Int_t) treeH->GetEntries();
+ treeH->SetBranchStatus("*",0); // switch off all branches
+ treeH->SetBranchStatus("MUON*",1); // switch on only MUON
for (fTrack = 0; fTrack < ntracks; fTrack++) {
gAlice->ResetHits();
- treeH->GetEvent(fTrack);
+ treeH->GetEntry(fTrack,0);
//
// Loop over hits
for(AliMUONHit* mHit = (AliMUONHit*)pMUON->FirstHit(-1);
// segmentation = iChamber->SegmentationModel(cathode);
fDigits[0] = mPad->PadX();
fDigits[1] = mPad->PadY();
+ if (!(fHitMap[fNch]->ValidateHit(fDigits[0], fDigits[1]))) continue;
fDigits[2] = icat;
fDigits[3] = iqpad;
fDigits[4] = iqpad;
Int_t ipx = mPad->PadX(); // pad number on X
Int_t ipy = mPad->PadY(); // pad number on Y
Int_t iqpad = Int_t(mPad->QPad()); // charge per pad
+ if (!(fHitMap[fNch]->ValidateHit(ipx, ipy))) continue;
if (cathode != (icat+1)) continue;
fDigits[0] = ipx;
//
// Digit Response (noise, threshold, saturation, ...)
AliMUONResponse * response = iChamber->ResponseModel();
- q = response->DigitResponse(q);
+ q = response->DigitResponse(q,address);
if (!q) continue;
Int_t nptracks = address->GetNTracks();
if (nptracks > kMAXTRACKS) {
- printf("\n Attention - nptracks > kMAXTRACKS %d \n", nptracks);
+ if (fDebug>0)
+ printf("\n Attention - nptracks > kMAXTRACKS %d \n", nptracks);
nptracks = kMAXTRACKS;
}
if (nptracks > 2) {
- printf("Attention - nptracks > 2 %d \n",nptracks);
- printf("cat,ich,ix,iy,q %d %d %d %d %d \n",icat,ich,fDigits[0],fDigits[1],q);
+ if (fDebug>0) {
+ printf("Attention - nptracks > 2 %d \n",nptracks);
+ printf("cat,ich,ix,iy,q %d %d %d %d %d \n",icat,ich,fDigits[0],fDigits[1],q);
+ }
}
for (Int_t tr = 0; tr < nptracks; tr++) {
tracks[tr] = address->GetTrack(tr);