]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUON.cxx
Additional protection
[u/mrichter/AliRoot.git] / MUON / AliMUON.cxx
index 56a11c0dd7fda8f36a3eaf919b769d813f611752..d6a4a2e350f7e54237be1c34d5de6ab1c998ac8b 100644 (file)
@@ -49,6 +49,7 @@
 #include "AliHeader.h"
 #include "AliHitMap.h"
 #include "AliLoader.h"
+#include "AliRunDigitizer.h"
 #include "AliESD.h"
 #include "AliESDMuonTrack.h"
 #include "AliMC.h"
@@ -76,7 +77,8 @@
 #include "AliMUONTriggerDecision.h"
 #include "AliMUONVGeometryBuilder.h"   
 #include "AliRun.h"    
-#include "AliMUONDigitizerv1.h"
+#include "AliMUONDigitizerv2.h"
+#include "AliMUONSDigitizerv1.h"
 
 
 // Defaults parameters for Z positions of chambers
@@ -239,16 +241,17 @@ Int_t AliMUON::DistancetoPrimitive(Int_t , Int_t )
 void  AliMUON::SetTreeAddress()
 {
   GetMUONData()->SetLoader(fLoader); 
-  //  GetMUONData()->MakeBranch("D,RC");
-  //  GetMUONData()->SetTreeAddress("H,D,RC");
+  //  GetMUONData()->MakeBranch("D,S,RC");
+  //  GetMUONData()->SetTreeAddress("H,D,S,RC");
   GetMUONData()->SetTreeAddress("H");
-
   if (fHits !=  GetMUONData()->Hits())  {
-    if (gAlice->GetMCApp())
-      gAlice->GetMCApp()->AddHitList (fHits); // For purifyKine, only necessary when Hit list is created in AliMUONData
+    if ( gAlice->GetMCApp() )
+      if ( gAlice->GetMCApp()->GetHitLists() ) {
+       fHits = GetMUONData()->Hits();
+       gAlice->GetMCApp()->AddHitList(fHits); // For purifyKine, only necessary when Hit list is created in AliMUONData
+      }  
   }
-  fHits = GetMUONData()->Hits(); // Added by Ivana to use the methods FisrtHit, NextHit of AliDetector
-           
+  fHits = GetMUONData()->Hits(); // Added by Ivana to use the methods FisrtHit, NextHit of AliDetector    
 }
 
 //____________________________________________________________________
@@ -416,7 +419,7 @@ void   AliMUON::SetNsec(Int_t id, Int_t nsec)
 //____________________________________________________________________
 AliDigitizer* AliMUON::CreateDigitizer(AliRunDigitizer* manager) const
 {
-  return new AliMUONDigitizerv1(manager);
+  return new AliMUONDigitizerv2(manager);
 }
 //_____________________________________________________________________
 void AliMUON::SDigits2Digits()
@@ -439,6 +442,21 @@ void AliMUON::SDigits2Digits()
     fLoader->TreeD()->Reset();
 }
 
+//_____________________________________________________________________
+void AliMUON::Hits2SDigits()
+{
+  // Adaption of AliMUONSDigitizerv1 to be excuted by the AliSimulation framework
+  AliRunLoader* runLoader = fLoader->GetRunLoader();
+  AliRunDigitizer   * manager = new AliRunDigitizer(1,1);
+  manager->SetInputStream(0,runLoader->GetFileName(),AliConfig::GetDefaultEventFolderName());
+  AliMUONDigitizer * dMUON   = new AliMUONSDigitizerv1(manager);
+  fLoader->LoadHits("READ");
+  for (Int_t iEvent = 0; iEvent < runLoader->GetNumberOfEvents(); iEvent++) {
+    runLoader->GetEvent(iEvent);
+    dMUON->Exec("");
+  }
+  fLoader->UnloadHits();
+}
 //_______________________________________________________________________
 AliLoader* AliMUON::MakeLoader(const char* topfoldername)
 { 
@@ -812,11 +830,6 @@ void AliMUON::Reconstruct() const
 
     //---------------------------- Track & TriggerTrack ---------------------
     if (!fLoader->TreeT()) fLoader->MakeTracksContainer();
-    // tracking branch
-    dataEvent->MakeBranch("RT"); //track
-    dataEvent->SetTreeAddress("RT");
-    recoEvent->EventReconstruct();
-    dataEvent->Fill("RT");
 
     // trigger branch
     dataEvent->MakeBranch("RL"); //trigger track
@@ -824,6 +837,12 @@ void AliMUON::Reconstruct() const
     recoEvent->EventReconstructTrigger();
     dataEvent->Fill("RL");
 
+    // tracking branch
+    dataEvent->MakeBranch("RT"); //track
+    dataEvent->SetTreeAddress("RT");
+    recoEvent->EventReconstruct();
+    dataEvent->Fill("RT");
+
     fLoader->WriteTracks("OVERWRITE");  
   
     //--------------------------- Resetting branches -----------------------
@@ -855,116 +874,98 @@ void AliMUON::FillESD(AliESD* event) const
   TClonesArray* recTrigTracksArray;
   
   //YS AliLoader* loader = GetLoader();
-  AliRunLoader* runLoader = fLoader->GetRunLoader(); //YS loader->GetRunLoader();
+  AliRunLoader* runLoader = fLoader->GetRunLoader(); 
   fLoader->LoadTracks("READ"); //YS
 
 
   // declaration  
-  Int_t ievent;
-  Int_t ntrackhits;
-  Double_t fitfmin;
+  Int_t iEvent;
+  Int_t nTrackHits;
+  Double_t fitFmin;
  
 
-  Double_t bendingSlope, nonBendingSlope, fInverseBendingMomentum;
-  Double_t fXRec, fYRec, fZRec;
-
-  Float_t  x11, y11, thetaX,thetaY ;
+  Double_t bendingSlope, nonBendingSlope, inverseBendingMomentum;
+  Double_t xRec, yRec, zRec, chi2MatchTrigger;
+  Bool_t matchTrigger;
 
   //YS Int_t nEvents = runLoader->GetNumberOfEvents();
 
   // setting pointer for tracks, triggertracks& trackparam at vertex
-  AliMUONTrack * rectrack;
-  AliMUONTriggerTrack * rectriggertrack;
-  AliMUONTrackParam *trackParam;
-  
-  ievent = runLoader->GetEventNumber() ; //YS, seems not to be implemented yet (Ch. F)
-  //YS for (ievent = 0; ievent < nEvents; ievent++) {
-    runLoader->GetEvent(ievent);
+  AliMUONTrack* recTrack;
+  AliMUONTrackParam* trackParam;
+  AliMUONTriggerTrack* recTriggerTrack;
 
-    // setting ESD MUON class
-    AliESDMuonTrack* ESDTrack = new  AliESDMuonTrack() ;
+  iEvent = runLoader->GetEventNumber() ; //YS, seems not to be implemented yet (Ch. F)
+  runLoader->GetEvent(iEvent);
 
-    // -------------------- tracks-------------
-    fMUONData->SetTreeAddress("RT");
-    fMUONData->GetRecTracks();
-    recTracksArray = fMUONData->RecTracks();
-        
-    Int_t nrectracks = (Int_t) recTracksArray->GetEntriesFast(); //
-
-    //-------------------- trigger tracks-------------
-    Bool_t ifirst = true;
-    Long_t trigPat = 0;
-    fMUONData->SetTreeAddress("RL");
-    fMUONData->GetRecTriggerTracks();
-    recTrigTracksArray = fMUONData->RecTriggerTracks();
-        
-    Int_t ntrectracks = (Int_t) recTrigTracksArray->GetEntriesFast(); //YS
-    //printf(">>> Event %d Number of Recconstructed tracks %d \n",ievent, nrectracks);
-   
-    Int_t ntracks = TMath::Max(nrectracks, ntrectracks);
-
-    // loop over tracks
-    for (Int_t irectracks = 0; irectracks <  ntracks;  irectracks++) {
-
-    // -------------------- tracks-------------
-    // not the best way to do, avoid creating two "branches" in fMuonTracks
-      if (irectracks < nrectracks) { 
-       rectrack = (AliMUONTrack*) recTracksArray->At(irectracks);
-
-       trackParam = rectrack->GetTrackParamAtVertex();
-
-       bendingSlope            = trackParam->GetBendingSlope();
-       nonBendingSlope         = trackParam->GetNonBendingSlope();
-       fInverseBendingMomentum = trackParam->GetInverseBendingMomentum();
-       fXRec  = trackParam->GetNonBendingCoor();
-       fYRec  = trackParam->GetBendingCoor();
-       fZRec  = trackParam->GetZ();
-
-       ntrackhits = rectrack->GetNTrackHits();
-       fitfmin = rectrack->GetFitFMin();
-
-       // setting data member of ESD MUON
-       ESDTrack->SetInverseBendingMomentum(fInverseBendingMomentum);
-       ESDTrack->SetThetaX(TMath::ATan(nonBendingSlope));
-       ESDTrack->SetThetaY(TMath::ATan(bendingSlope));
-       ESDTrack->SetZ(fZRec);
-       ESDTrack->SetBendingCoor(fYRec);
-       ESDTrack->SetNonBendingCoor(fXRec);
-       ESDTrack->SetChi2(fitfmin);
-       ESDTrack->SetNHit(ntrackhits);
-      }
-    // -------------------- trigger tracks-------------
-      if (irectracks < ntrectracks) { 
-       rectriggertrack = (AliMUONTriggerTrack*) recTrigTracksArray->At(irectracks);
-       if (ifirst) {
-         ifirst = false;
-         trigPat = rectriggertrack->GetGTPattern();
-       }
+  // setting ESD MUON class
+  AliESDMuonTrack* ESDTrack = new  AliESDMuonTrack() ;
 
-       x11 = rectriggertrack->GetY11();
-       y11 = rectriggertrack->GetY11();
-       thetaX = rectriggertrack->GetThetax();
-       thetaY = rectriggertrack->GetThetay();
+  //-------------------- trigger tracks-------------
+  Long_t trigPat = 0;
+  fMUONData->SetTreeAddress("RL");
+  fMUONData->GetRecTriggerTracks();
+  recTrigTracksArray = fMUONData->RecTriggerTracks();
 
-       // setting data member of ESD MUON trigger
-       ESDTrack->SetThetaX11(thetaX);
-       ESDTrack->SetThetaY11(thetaY);
-       ESDTrack->SetX11(x11);
-       ESDTrack->SetY11(y11);
-      }
-      // storing ESD MUON Track into ESD Event & reset muondata
-      if (ntrectracks+ntrectracks != 0)  
-       event->AddMuonTrack(ESDTrack);
-    } // end loop tracks
-
-    //    if (ntrectracks+ntrectracks != 0)  
-      //  event->SetTrigger(trigPat);
-      // Waiting for STEER update
-    fMUONData->ResetRecTracks();
-    fMUONData->ResetRecTriggerTracks();
-
-    //} // end loop on event  
-    fLoader->UnloadTracks(); 
+  // ready global trigger pattern from first track
+  recTriggerTrack = (AliMUONTriggerTrack*) recTrigTracksArray->First();
+  trigPat = recTriggerTrack->GetGTPattern();
+
+  //printf(">>> Event %d Number of Recconstructed tracks %d \n",iEvent, nrectracks);
+  // -------------------- tracks-------------
+  fMUONData->SetTreeAddress("RT");
+  fMUONData->GetRecTracks();
+  recTracksArray = fMUONData->RecTracks();
+        
+  Int_t nRecTracks = (Int_t) recTracksArray->GetEntriesFast(); //
+  
+  // loop over tracks
+  for (Int_t iRecTracks = 0; iRecTracks <  nRecTracks;  iRecTracks++) {
+
+    // reading info from tracks
+    recTrack = (AliMUONTrack*) recTracksArray->At(iRecTracks);
+
+    trackParam = recTrack->GetTrackParamAtVertex();
+
+    bendingSlope            = trackParam->GetBendingSlope();
+    nonBendingSlope         = trackParam->GetNonBendingSlope();
+    inverseBendingMomentum = trackParam->GetInverseBendingMomentum();
+    xRec  = trackParam->GetNonBendingCoor();
+    yRec  = trackParam->GetBendingCoor();
+    zRec  = trackParam->GetZ();
+
+    nTrackHits       = recTrack->GetNTrackHits();
+    fitFmin          = recTrack->GetFitFMin();
+    matchTrigger     = recTrack->GetMatchTrigger();
+    chi2MatchTrigger = recTrack->GetChi2MatchTrigger();
+
+    // setting data member of ESD MUON
+    ESDTrack->SetInverseBendingMomentum(inverseBendingMomentum);
+    ESDTrack->SetThetaX(TMath::ATan(nonBendingSlope));
+    ESDTrack->SetThetaY(TMath::ATan(bendingSlope));
+    ESDTrack->SetZ(zRec);
+    ESDTrack->SetBendingCoor(yRec);
+    ESDTrack->SetNonBendingCoor(xRec);
+    ESDTrack->SetChi2(fitFmin);
+    ESDTrack->SetNHit(nTrackHits);
+    ESDTrack->SetMatchTrigger(matchTrigger);
+    ESDTrack->SetChi2MatchTrigger(chi2MatchTrigger);
+
+    // storing ESD MUON Track into ESD Event 
+    if (nRecTracks != 0)  
+      event->AddMuonTrack(ESDTrack);
+  } // end loop tracks
+
+  // add global trigger pattern
+  if (nRecTracks != 0)  
+    event->SetTrigger(trigPat);
+
+  // reset muondata
+  fMUONData->ResetRecTracks();
+  fMUONData->ResetRecTriggerTracks();
+
+  //} // end loop on event  
+  fLoader->UnloadTracks(); 
 }