]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONMerger.cxx
Further modifications in OpenOutput and WriteCluster
[u/mrichter/AliRoot.git] / MUON / AliMUONMerger.cxx
index 7ee5f22bef36642a35fe0387bcf076c49c4e9b2b..9cc4308026bb1f8f6c35e99c7bd91fe4f4cac094 100644 (file)
 
 /*
 $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
 
@@ -33,23 +48,23 @@ AliMUONMerger prototype to be called by the merge manager.
 
 */
 
-#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)
 
@@ -69,6 +84,7 @@ AliMUONMerger::AliMUONMerger()
     fHitMap     = 0;
     fList       = 0;
     fBgrFile    = 0;
+    fDebug      = 0;
 }
 
 //------------------------------------------------------------------------
@@ -78,7 +94,7 @@ AliMUONMerger::~AliMUONMerger()
     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;
 }
@@ -86,12 +102,14 @@ AliMUONMerger::~AliMUONMerger()
 //------------------------------------------------------------------------
 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()));
@@ -118,6 +136,7 @@ void AliMUONMerger::Update(AliMUONPadHit *padhit)
 //------------------------------------------------------------------------
 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);
@@ -224,10 +243,12 @@ void AliMUONMerger::Digitise()
 
        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); 
@@ -251,6 +272,7 @@ void AliMUONMerger::Digitise()
 //                 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;
@@ -303,6 +325,7 @@ void AliMUONMerger::Digitise()
                        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;
@@ -342,7 +365,7 @@ void AliMUONMerger::Digitise()
 //
 //  Digit Response (noise, threshold, saturation, ...)
            AliMUONResponse * response = iChamber->ResponseModel();
-           q = response->DigitResponse(q);
+           q = response->DigitResponse(q,address);
            
            if (!q) continue;
            
@@ -356,12 +379,15 @@ void AliMUONMerger::Digitise()
            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);