]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONClusterReconstructor.cxx
Reverted direct flow parameters
[u/mrichter/AliRoot.git] / MUON / AliMUONClusterReconstructor.cxx
index 71e749fa170125ae5f6623b4349d8783ca5e444f..657f7b58760a8c2f81013f4357c458b4c2f85979 100644 (file)
 
 ////////////////////////////////////
 //
-// MUON event reconstructor in ALICE
-//
-// This class contains as data:
-// * the parameters for the event reconstruction
-// * a pointer to the array of hits to be reconstructed (the event)
-// * a pointer to the array of segments made with these hits inside each station
-// * a pointer to the array of reconstructed tracks
-//
-// It contains as methods, among others:
-// * MakeEventToBeReconstructed to build the array of hits to be reconstructed
-// * MakeSegments to build the segments
-// * MakeTracks to build the tracks
+// MUON cluster reconstructor for MUON
 //
+// Should implement a virtual class ClusterFinder to chose between VS and AZ method
 ////////////////////////////////////
 
-#include <Riostream.h> // for cout
-#include <stdlib.h> // for exit()
-
-#include <TTree.h>
+#include "AliMUONClusterReconstructor.h"
+#include "AliRun.h" // for gAlice
+#include "AliRunLoader.h"
+#include "AliLoader.h"
 
 #include "AliMUON.h"
-#include "AliMUONClusterReconstructor.h"
 #include "AliMUONDigit.h"
 #include "AliMUONConstants.h"
 #include "AliMUONData.h"
 #include "AliMUONClusterFinderVS.h"
-#include "AliMUONClusterFinderAZ.h"
 #include "AliMUONClusterInput.h"
 #include "AliMUONRawCluster.h"
-#include "AliRun.h" // for gAlice
-#include "AliConfig.h"
-#include "AliRunLoader.h"
-#include "AliLoader.h"
+#include "AliRawReader.h" // for raw data
+#include "AliLog.h"
+
 
-static const Int_t kDefaultPrintLevel = 0;
+const Int_t AliMUONClusterReconstructor::fgkDefaultPrintLevel = 0;
 
 ClassImp(AliMUONClusterReconstructor) // Class implementation in ROOT context
 
 //__________________________________________________________________________
-AliMUONClusterReconstructor::AliMUONClusterReconstructor(AliLoader* loader)
+  AliMUONClusterReconstructor::AliMUONClusterReconstructor(AliLoader* loader, AliMUONData* data)
+  : TObject(),
+    fMUONData(0),
+    fPrintLevel(fgkDefaultPrintLevel),
+    fDebug(0)
 {
-  // Default Constructor
-  fDebug           = 0;
-  fNCh             = 0;
-  fNTrackingCh     = 0;
-  fChambers        = 0;
-  fMUONData        = 0;
-  fChambers = new TObjArray(AliMUONConstants::NCh());
-
-  fPrintLevel = kDefaultPrintLevel;
+  // Standard Constructor
 
   // initialize loader's
   fLoader = loader;
 
   // initialize container
-  fMUONData  = new AliMUONData(fLoader,"MUON","MUON");
+  if (data == 0x0)
+    fMUONData  = new AliMUONData(fLoader,"MUON","MUON");
+  else
+    fMUONData = data;
+  
+  // reconstruction model
+  fRecModel = new AliMUONClusterFinderVS();
+  //fRecModel = new AliMUONClusterFinderAZ();
 
-  // Loading AliRun master
-  AliRunLoader* runloader = fLoader->GetRunLoader();
-  if (runloader->GetAliRun() == 0x0) runloader->LoadgAlice();
-  gAlice = runloader->GetAliRun();
-
-  // getting MUON
-  fMUON = (AliMUON*) gAlice->GetDetector("MUON");
-
-  return; 
 }
-//____________________________________________________________________
-void AliMUONClusterReconstructor::SetReconstructionModel(Int_t id, AliMUONClusterFinderVS *reconst)
-{
-  // take infos chambers from AliMUON
-  AliMUONChamber* pCh = 0;
-  pCh = &(fMUON->Chamber(id));
-
-  fChambers->AddAt(pCh, id);
 
-  // Set ClusterFinder for chamber id
-  ((AliMUONChamber*) fChambers->At(id))->SetReconstructionModel(reconst);
+//__________________________________________________________________________
+AliMUONClusterReconstructor::AliMUONClusterReconstructor()
+  : TObject(),
+    fMUONData(0),
+    fPrintLevel(fgkDefaultPrintLevel),
+    fDebug(0),
+    fLoader(0)
+{
+  // Default Constructor
 }
+
 //_______________________________________________________________________
-AliMUONClusterReconstructor::AliMUONClusterReconstructor (const AliMUONClusterReconstructor& Reconstructor):TObject(Reconstructor)
+AliMUONClusterReconstructor::AliMUONClusterReconstructor (const AliMUONClusterReconstructor& rhs)
+  : TObject(rhs)
 {
-  // Dummy copy constructor
+// Protected copy constructor
+
+  AliFatal("Not implemented.");
 }
 
-AliMUONClusterReconstructor & AliMUONClusterReconstructor::operator=(const AliMUONClusterReconstructor& /*Reconstructor*/)
+//_______________________________________________________________________
+AliMUONClusterReconstructor & 
+AliMUONClusterReconstructor::operator=(const AliMUONClusterReconstructor& rhs)
 {
-  // Dummy assignment operator
-    return *this;
+// Protected assignement operator
+
+  if (this == &rhs) return *this;
+
+  AliFatal("Not implemented.");
+    
+  return *this;  
 }
 
 //__________________________________________________________________________
 AliMUONClusterReconstructor::~AliMUONClusterReconstructor(void)
 {
-  if (fChambers){
-    fChambers->Clear(); // Sets pointers to 0 sinche it is not the owner
-    delete fChambers;
-  } 
+
   if (fMUONData)
     delete fMUONData;
 
@@ -124,66 +111,98 @@ AliMUONClusterReconstructor::~AliMUONClusterReconstructor(void)
 //____________________________________________________________________
 void AliMUONClusterReconstructor::Digits2Clusters()
 {
-//
-//  Perform cluster finding
-//
-    TClonesArray *dig1, *dig2;
-    Int_t ndig, k;
+
+    TClonesArray *dig1, *dig2, *digAll;
+    Int_t ndig, k, idDE, idDE_prev;
     dig1 = new TClonesArray("AliMUONDigit",1000);
     dig2 = new TClonesArray("AliMUONDigit",1000);
-    AliMUONDigit *digit;
-// Loop on chambers and on cathode planes
-//
-//    fMUONData->ResetRawClusters();        
-    TClonesArray * muonDigits;
-
-    for (Int_t ich = 0; ich < 10; ich++) {
-       AliMUONChamber* iChamber = (AliMUONChamber*) fChambers->At(ich);
-       AliMUONClusterFinderVS* rec = iChamber->ReconstructionModel();
-       //AliMUONClusterFinderAZ* rec = (AliMUONClusterFinderAZ*)iChamber->ReconstructionModel();
-
-       fMUONData->ResetDigits();
-       fMUONData->GetCathode(0);
-       //TClonesArray *
-       muonDigits = fMUONData->Digits(ich); 
-       ndig=muonDigits->GetEntriesFast();
-       if(fDebug)
-         printf("1 Found %d digits in %p chamber %d\n", ndig, (void*)muonDigits,ich);
-       TClonesArray &lhits1 = *dig1;
-       Int_t n = 0;
-       for (k = 0; k < ndig; k++) {
-           digit = (AliMUONDigit*) muonDigits->UncheckedAt(k);
-           if (rec->TestTrack(digit->Track(0)))
-             new(lhits1[n++]) AliMUONDigit(*digit);
+    digAll = new TClonesArray("AliMUONDigit",2000);
+
+    AliMUONDigit* digit;
+
+    TArrayI id(200); // contains the different IdDE
+   
+  
+// Loop on chambers and on cathode planes     
+    TClonesArray* muonDigits;
+    Int_t n2;
+    Int_t n1;
+  
+    for (Int_t ich = 0; ich < AliMUONConstants::NTrackingCh(); ich++) {
+      id.Reset();
+      n1 = 0;
+      n2 = 0;
+      //cathode 0 & 1
+      fMUONData->ResetDigits();
+      fMUONData->GetDigits();
+      muonDigits = fMUONData->Digits(ich); 
+      ndig = muonDigits->GetEntriesFast();
+      TClonesArray &lDigit = *digAll;
+
+      idDE_prev = 0;
+      muonDigits->Sort();
+      for (k = 0; k < ndig; k++) {
+
+       digit = (AliMUONDigit*) muonDigits->UncheckedAt(k);
+       new(lDigit[n1++]) AliMUONDigit(*digit);
+       idDE = digit->DetElemId();
+       if (idDE != idDE_prev) {
+         id.AddAt(idDE,n2++);
        }
-       fMUONData->ResetDigits();
-       fMUONData->GetCathode(1);
-       muonDigits =  fMUONData->Digits(ich);  
-       ndig=muonDigits->GetEntriesFast();
-       if(fDebug)
-         printf("\n 2 Found %d digits in %p %d", ndig, (void*)muonDigits, ich);
+       idDE_prev = idDE;
+      }
+
+
+      Int_t idSize = n2;
+
+      // loop over id DE
+      for (idDE = 0; idDE < idSize; idDE++) {
+       TClonesArray &lhits1 = *dig1;
        TClonesArray &lhits2 = *dig2;
-       n=0;
-       
-       for (k=0; k<ndig; k++) {
-           digit= (AliMUONDigit*) muonDigits->UncheckedAt(k);
-           if (rec->TestTrack(digit->Track(0)))
-             new(lhits2[n++]) AliMUONDigit(*digit);
+       dig1->Clear();
+       dig2->Clear();
+       n1 = n2 = 0;
+
+       for (k = 0; k < digAll->GetEntriesFast(); k++) {
+         digit = (AliMUONDigit*) digAll->UncheckedAt(k);
+         //      printf("digit idDE %d\n", digit->DetElemId());
+         if (id[idDE] == digit->DetElemId()) {
+           if (digit->Cathode() == 0)
+             new(lhits1[n1++]) AliMUONDigit(*digit);
+           else 
+             new(lhits2[n2++]) AliMUONDigit(*digit);
+         }
        }
 
-       if (rec) {       
-           AliMUONClusterInput::Instance()->SetDigits(ich, dig1, dig2);
-           rec->FindRawClusters();
+       //      if (id[idDE] < 500 && id[idDE] > 299) continue; // temporary patch til St2 geometry is not yet ok (CF)
+
+       // cluster finder
+       if (fRecModel) {
+         AliMUONClusterInput::Instance()->SetDigits(ich, id[idDE], dig1, dig2);
+         fRecModel->FindRawClusters();
        }
        // copy into the container
-       TClonesArray* tmp = rec->GetRawClusters();
+       TClonesArray* tmp = fRecModel->GetRawClusters();
        for (Int_t id = 0; id < tmp->GetEntriesFast(); id++) {
          AliMUONRawCluster* pClus = (AliMUONRawCluster*) tmp->At(id);
          fMUONData->AddRawCluster(ich, *pClus);
        }
        dig1->Delete();
        dig2->Delete();
+      } // idDE
+      digAll->Delete();
     } // for ich
     delete dig1;
     delete dig2;
+    delete digAll;
+}
+
+//_______________________________________________________________________
+void AliMUONClusterReconstructor::Trigger2Trigger() 
+{
+// copy trigger from TreeD to TreeR
+
+  fMUONData->SetTreeAddress("GLT");
+  fMUONData->GetTriggerD();
 }