]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONRecoCheck.cxx
RAW QA only for calibration events
[u/mrichter/AliRoot.git] / MUON / AliMUONRecoCheck.cxx
index 4cfa4b784c4f080bbdeadb8c52c73df84b81a3be..5a83d2e54e687711da3c90390206a1f5a89eba7b 100644 (file)
@@ -31,6 +31,7 @@
 // 25 Jan 2008:
 // Use the new ESDInterface to create MUON objects from ESD data
 // - Philippe Pillot
+// 
 
 #include "AliMUONRecoCheck.h"
 #include "AliMUONTrack.h"
@@ -39,7 +40,7 @@
 #include "AliMUONVClusterStore.h"
 #include "AliMUONConstants.h"
 #include "AliMUONESDInterface.h"
-
+#include "AliMUONTrackParam.h"
 #include "AliMCEventHandler.h"
 #include "AliMCEvent.h"
 #include "AliStack.h"
@@ -59,7 +60,7 @@ ClassImp(AliMUONRecoCheck)
 /// \endcond
 
 //_____________________________________________________________________________
-AliMUONRecoCheck::AliMUONRecoCheck(Char_t *esdFileName, Char_t *pathSim)
+AliMUONRecoCheck::AliMUONRecoCheck(const Char_t *esdFileName, const Char_t *pathSim)
 : TObject(),
 fMCEventHandler(new AliMCEventHandler()),
 fESDEvent(new AliESDEvent()),
@@ -68,7 +69,8 @@ fESDFile (0x0),
 fCurrentEvent(0),
 fTrackRefStore(0x0),
 fRecoTrackRefStore(0x0),
-fRecoTrackStore(0x0)
+fRecoTrackStore(0x0),
+fESDEventOwner(kTRUE)
 {
   /// Normal ctor
   
@@ -93,13 +95,38 @@ fRecoTrackStore(0x0)
   fESDEvent->ReadFromTree(fESDTree); // link fESDEvent to the tree
 }
 
+//_____________________________________________________________________________
+AliMUONRecoCheck::AliMUONRecoCheck(AliESDEvent *esdEvent, AliMCEventHandler *mcEventHandler)
+: TObject(),
+fMCEventHandler(0),
+fESDEvent(0),
+fESDTree (0x0),
+fESDFile (0x0),
+fCurrentEvent(0),
+fTrackRefStore(0x0),
+fRecoTrackRefStore(0x0),
+fRecoTrackStore(0x0),
+fESDEventOwner(kFALSE)
+{
+  /// Normal ctor
+  
+  // TrackRefs and Particules
+  fMCEventHandler = mcEventHandler;
+  
+  // ESD MUON Tracks
+  fESDEvent = esdEvent;
+  
+}
+
 //_____________________________________________________________________________
 AliMUONRecoCheck::~AliMUONRecoCheck()
 {
   /// Destructor
-  delete fMCEventHandler;
-  delete fESDEvent;
-  if (fESDFile) fESDFile->Close();
+  if (fESDEventOwner) {
+    delete fMCEventHandler;
+    delete fESDEvent;
+    if (fESDFile) fESDFile->Close();
+  }
   ResetStores();
 }
 
@@ -116,7 +143,7 @@ void AliMUONRecoCheck::ResetStores()
 Int_t AliMUONRecoCheck::NumberOfEvents() const
 {
   /// Return the number of events
-  if (fESDTree) return fESDTree->GetEntries();
+  if (fESDEventOwner && fESDTree) return fESDTree->GetEntries();
   return 0;
 }
 
@@ -125,6 +152,12 @@ AliMUONVTrackStore* AliMUONRecoCheck::ReconstructedTracks(Int_t event)
 {
   /// Return a track store containing the reconstructed tracks (converted into 
   /// MUONTrack objects) for a given event
+  
+  if (!fESDEventOwner) {
+    MakeReconstructedTracks();
+    return fRecoTrackStore;
+  }
+
   if (event != fCurrentEvent) {
     ResetStores();
     fCurrentEvent = event;
@@ -147,6 +180,12 @@ AliMUONVTrackStore* AliMUONRecoCheck::TrackRefs(Int_t event)
 {
   /// Return a track store containing the track references (converted into 
   /// MUONTrack objects) for a given event
+  
+  if (!fESDEventOwner) {
+    MakeTrackRefs();
+    return fTrackRefStore;
+  }
+
   if (event != fCurrentEvent) {
     ResetStores();
     fCurrentEvent = event;
@@ -167,6 +206,13 @@ AliMUONVTrackStore* AliMUONRecoCheck::TrackRefs(Int_t event)
 AliMUONVTrackStore* AliMUONRecoCheck::ReconstructibleTracks(Int_t event)
 {
   /// Return a track store containing the reconstructible tracks for a given event
+
+  if (!fESDEventOwner) {
+    if (TrackRefs(event) == 0x0) return 0x0;
+    MakeReconstructibleTracks();
+    return fRecoTrackRefStore;
+  }
+
   if (event != fCurrentEvent) {
     ResetStores();
     fCurrentEvent = event;
@@ -186,10 +232,12 @@ void AliMUONRecoCheck::MakeReconstructedTracks()
   /// Make reconstructed tracks
   if (!(fRecoTrackStore = AliMUONESDInterface::NewTrackStore())) return;
   
-  // loop over all reconstructed tracks and add them to the store
+  // loop over all reconstructed tracks and add them to the store (skip ghosts)
   Int_t nTracks = (Int_t) fESDEvent->GetNumberOfMuonTracks();
-  for (Int_t iTrack = 0; iTrack < nTracks; iTrack++)
-    AliMUONESDInterface::Add(*(fESDEvent->GetMuonTrack(iTrack)), *fRecoTrackStore);
+  for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
+    AliESDMuonTrack* esdTrack = fESDEvent->GetMuonTrack(iTrack);
+    if (esdTrack->ContainTrackerData()) AliMUONESDInterface::Add(*esdTrack, *fRecoTrackStore);
+  }
   
 }
 
@@ -217,7 +265,7 @@ void AliMUONRecoCheck::MakeTrackRefs()
     
     // get the particle charge for further calculation
     TParticlePDG* ppdg = particle->GetPDG();
-    Int_t charge = (Int_t)(ppdg->Charge()/3.0);
+    Int_t charge = ppdg != NULL ? (Int_t)(ppdg->Charge()/3.0) : 0;
     
     AliMUONTrack track;
     
@@ -237,18 +285,19 @@ void AliMUONRecoCheck::MakeTrackRefs()
       pZ = trackReference->Pz();
       
       // check chamberId of current trackReference
-      Int_t chamberId = AliMUONConstants::ChamberNumber(z);
+      Int_t detElemId = trackReference->UserId();
+      Int_t chamberId = detElemId / 100 - 1;
       if (chamberId < 0 || chamberId >= AliMUONConstants::NTrackingCh()) continue;
       
       // set hit parameters
-      hit->SetUniqueID(AliMUONVCluster::BuildUniqueID(chamberId, 0, 0));
+      hit->SetUniqueID(AliMUONVCluster::BuildUniqueID(chamberId, detElemId, iHit));
       hit->SetXYZ(x,y,z);
       hit->SetErrXY(0.,0.);
       
       // compute track parameters at hit
-      Double_t bendingSlope = 0;
-      Double_t nonBendingSlope = 0;
-      Double_t inverseBendingMomentum = 0;
+      bendingSlope = 0;
+      nonBendingSlope = 0;
+      inverseBendingMomentum = 0;
       if (TMath::Abs(pZ) > 0) {
        bendingSlope = pY/pZ;
        nonBendingSlope = pX/pZ;
@@ -306,7 +355,7 @@ void AliMUONRecoCheck::MakeTrackRefs()
     track.SetTrackParamAtVertex(&trackParamAtVertex);
     
     // store the track
-    track.SetTrackID(iTrackRef);
+    track.SetUniqueID(iTrackRef);
     tmpTrackRefStore->Add(track);
   }
   
@@ -404,7 +453,7 @@ void AliMUONRecoCheck::CleanMuonTrackRef(const AliMUONVTrackStore *tmpTrackRefSt
       inverseBendingMomentum *= trackParam1->GetCharge();
       
       // set hit parameters
-      hit->SetUniqueID(AliMUONVCluster::BuildUniqueID(trackParam1->GetClusterPtr()->GetChamberId(), 0, 0));
+      hit->SetUniqueID(trackParam1->GetClusterPtr()->GetUniqueID());
       hit->SetXYZ(x,y,z);
       hit->SetErrXY(0.,0.);
       
@@ -423,7 +472,7 @@ void AliMUONRecoCheck::CleanMuonTrackRef(const AliMUONVTrackStore *tmpTrackRefSt
       iHit1++;
     }
     
-    newTrack.SetTrackID(track->GetTrackID());
+    newTrack.SetUniqueID(track->GetUniqueID());
     newTrack.SetTrackParamAtVertex(track->GetTrackParamAtVertex());
     fTrackRefStore->Add(newTrack);