]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONCheck.cxx
Don't misalign geometry when creating snapshot.
[u/mrichter/AliRoot.git] / MUON / AliMUONCheck.cxx
index baba9508e99977fefa73b194db1aa062eab59321..fd8c8dd441bb1186850fc63b926d535f9b360341 100644 (file)
@@ -15,6 +15,7 @@
 
 // $Id$
 
+//-----------------------------------------------------------------------------
 /// \class AliMUONCheck
 ///
 /// This class check the ESD tree, providing the matching with the trigger
 /// DumpDigit() as a replacement of the function from MUONCheck.C macro.
 ///
 /// \author Frederic Yermia, INFN Torino
+//-----------------------------------------------------------------------------
 
 #include "AliMUONCheck.h"
 #include "AliMUONConstants.h"
-#include "AliMUONTrack.h"
-#include "AliMUONTrackParam.h"
-#include "AliMUONTrackExtrap.h"
 #include "AliMUONMCDataInterface.h"
 #include "AliMUONDataInterface.h"
+#include "AliMpCDB.h"
 #include "AliMpSegmentation.h"
 #include "AliMpVSegmentation.h"
 #include "AliMpDEManager.h"
+#include "AliMpCDB.h"
 #include "AliMUONVDigitStore.h"
 
 #include "AliRunLoader.h"
 #include "AliStack.h"
 #include "AliTrackReference.h"
 #include "AliTracker.h"
-#include "AliESD.h"
+#include "AliESDEvent.h"
 #include "AliESDMuonTrack.h"
-#include "AliMagFMaps.h"
+#include "AliESDVertex.h"
+#include "AliMagF.h"
 #include "AliLog.h"
 
 #include <TSystem.h>
 ClassImp(AliMUONCheck)
 /// \endcond
 
+//_____________________________________________________________________________
+const TString& AliMUONCheck::GetDefaultOutFileName()
+{
+  /// Default output file name 
+  static const TString kDefaultOutFileName = "output.txt";
+  return kDefaultOutFileName;
+}  
+
+//_____________________________________________________________________________
 AliMUONCheck::AliMUONCheck(const char* galiceFile, const char* esdFile,Int_t firstEvent, Int_t lastEvent,const char* outDir) 
 : TObject(),
 fFileName(galiceFile),
 fFileNameSim(),
 fesdFileName(esdFile),
-foutDir(outDir),
+fkOutDir(outDir),
+fOutFileName(GetDefaultOutFileName()),
 fFirstEvent(firstEvent),
 fLastEvent(lastEvent)
 {
-  /// ctor
+  /// ctor  
 }
 
 //_____________________________________________________________________________
@@ -81,7 +93,8 @@ AliMUONCheck::AliMUONCheck(const char* galiceFile, const char* galiceFileSim,
 fFileName(galiceFile),
 fFileNameSim(galiceFileSim),
 fesdFileName(esdFile),
-foutDir(outDir),
+fkOutDir(outDir),
+fOutFileName(GetDefaultOutFileName()),
 fFirstEvent(firstEvent),
 fLastEvent(lastEvent)
 {
@@ -147,14 +160,13 @@ AliMUONCheck::CheckESD(Bool_t pdc06TriggerResponse)
   Float_t muonMass = 0.105658389;
   Double_t thetaX, thetaY, pYZ;
   Double_t fPxRec1, fPyRec1, fPzRec1, fE1;
-  Int_t fZ1;
   
-  AliESD* fESD = new AliESD();
+  AliESDEvent* fESD = new AliESDEvent();
   TTree* tree = (TTree*) esdFile->Get("esdTree");
   if (!tree) 
   {
     Error("CheckESD", "no ESD tree found");
-    AliError(Form("CheckESD", "no ESD tree found"));
+    AliError(Form("no ESD tree found"));
     return ;
   }
   fESD->ReadFromTree(tree);
@@ -169,8 +181,7 @@ AliMUONCheck::CheckESD(Bool_t pdc06TriggerResponse)
   for (ievent = fFirstEvent; ievent < endOfLoop; ++ievent ) 
   {
     nev++;    
-    tree->GetEvent(ievent);
-    if (!fESD) 
+    if (tree->GetEvent(ievent) <= 0) 
     {
       Error("CheckESD", "no ESD object found for event %d", ievent);
       return ;
@@ -262,6 +273,10 @@ AliMUONCheck::CheckESD(Bool_t pdc06TriggerResponse)
     for ( Int_t iTrack1 = 0; iTrack1<nTracks; ++iTrack1 ) 
     { //1st loop
       AliESDMuonTrack* muonTrack = fESD->GetMuonTrack(iTrack1);
+      
+      // skip fake tracks (ghosts)
+      if (!muonTrack->ContainTrackerData()) continue;
+      
       ftracktot++;
       
       thetaX = muonTrack->GetThetaX();
@@ -271,7 +286,6 @@ AliMUONCheck::CheckESD(Bool_t pdc06TriggerResponse)
       fPzRec1  = - pYZ / TMath::Sqrt(1.0 + TMath::Tan(thetaY)*TMath::Tan(thetaY));
       fPxRec1  = fPzRec1 * TMath::Tan(thetaX);
       fPyRec1  = fPzRec1 * TMath::Tan(thetaY);
-      fZ1 = Int_t(TMath::Sign(1.,muonTrack->GetInverseBendingMomentum()));
       fE1 = TMath::Sqrt(muonMass * muonMass + fPxRec1 * fPxRec1 + fPyRec1 * fPyRec1 + fPzRec1 * fPzRec1);
       fV1.SetPxPyPzE(fPxRec1, fPyRec1, fPzRec1, fE1);
       // -----------> transverse momentum
@@ -329,10 +343,9 @@ AliMUONCheck::CheckESD(Bool_t pdc06TriggerResponse)
     
   }//if(pdc06TriggerResponse)
   
-  gSystem->cd(foutDir);
+  gSystem->cd(fkOutDir);
   
-  FILE *outtxt=fopen("output.txt","a");
-  freopen("output.txt","a",outtxt);
+  FILE *outtxt=fopen(fOutFileName.Data(),"a");
   
   if(pdc06TriggerResponse){
     fprintf(outtxt,"                                                   \n");
@@ -445,7 +458,7 @@ AliMUONCheck::CheckKine()
       p->Print("");
       Int_t pdg=p->GetPdgCode(); 
       
-      if (abs(pdg) == 13) 
+      if (TMath::Abs(pdg) == 13)
       {
         ++nmu2;
       }
@@ -512,9 +525,8 @@ AliMUONCheck::CheckKine()
   printf("***                       Leaving MuonKine()                 *** \n");
   printf("**************************************************************** \n");
   
-  gSystem->cd(foutDir);
-  FILE *outtxt=fopen("output.txt","a");
-  freopen("output.txt","a",outtxt);
+  gSystem->cd(fkOutDir);
+  FILE *outtxt=fopen(fOutFileName.Data(),"a");
   fprintf(outtxt,"                                                   \n");
   fprintf(outtxt,"=================================================================\n");
   fprintf(outtxt,"================         MUONkine SUMMARY        ================\n");
@@ -653,13 +665,11 @@ AliMUONCheck::CheckTrackRef()
         
       }//hits de tTR
       
-      delete trackRefs;
-      
     }//entree de tTR 
     
   }//evt loop
   
-  gSystem->cd(foutDir);
+  gSystem->cd(fkOutDir);
   TCanvas *c6 = new TCanvas("c6","TOF",400,10,600,700);
   c6->Divide(1,2);
   c6->cd(1);
@@ -756,7 +766,7 @@ AliMUONCheck::CheckOccupancy(Bool_t perDetEle) const
         ndigits = digitStore->GetSize(detele,1-cathode);
         
              dEchannelsNonBending[ichamber][idetele] = nchannels;
-        dEoccupancyBending[ichamber][idetele] = ndigits;
+        dEoccupancyNonBending[ichamber][idetele] = ndigits;
              cHchannelsNonBending[ichamber] += nchannels;
              cHoccupancyNonBending[ichamber] += ndigits;
              totalchannelsNonBending += nchannels;
@@ -776,16 +786,18 @@ AliMUONCheck::CheckOccupancy(Bool_t perDetEle) const
   
   // Output values
   
-  for ( Int_t ichamber = 0; ichamber < 14; ++ichamber ) 
+  for ( Int_t ichamber = 0; ichamber < nchambers; ++ichamber ) 
   {
     printf(">>> Chamber %2d  nChannels Bending %5d  nChannels NonBending %5d \n", 
          ichamber+1, 
          cHoccupancyBending[ichamber],
-         cHoccupancyNonBending[ichamber]);           
-    printf(">>> Chamber %2d  Occupancy Bending %5.2f %%  Occupancy NonBending %5.2f %% \n", 
-         ichamber+1, 
-         100.*((Float_t) cHoccupancyBending[ichamber])/((Float_t) cHchannelsBending[ichamber]),
-         100.*((Float_t) cHoccupancyNonBending[ichamber])/((Float_t) cHchannelsBending[ichamber])            );
+         cHoccupancyNonBending[ichamber]);  
+    if ( cHchannelsBending[ichamber] != 0 && cHchannelsBending[ichamber] ) {               
+      printf(">>> Chamber %2d  Occupancy Bending %5.2f %%  Occupancy NonBending %5.2f %% \n", 
+           ichamber+1, 
+           100.*((Float_t) cHoccupancyBending[ichamber])/((Float_t) cHchannelsBending[ichamber]),
+           100.*((Float_t) cHoccupancyNonBending[ichamber])/((Float_t) cHchannelsBending[ichamber]));
+    }
   
     if ( perDetEle )
     {
@@ -798,66 +810,23 @@ AliMUONCheck::CheckOccupancy(Bool_t perDetEle) const
                idetele+100*(ichamber+1), 
                dEoccupancyBending[ichamber][idetele],
                dEoccupancyNonBending[ichamber][idetele]);  
-          printf(">>> DetEle %4d Occupancy Bending %5.2f %%  Occupancy NonBending %5.2f %% \n", 
-               idetele+100*(ichamber+1), 
-               100.*((Float_t) dEoccupancyBending[ichamber][idetele])/((Float_t) dEchannelsBending[ichamber][idetele]),
-               100.*((Float_t) dEoccupancyNonBending[ichamber][idetele])/((Float_t) dEchannelsBending[ichamber][idetele]));  
+               
+          if ( dEchannelsBending[ichamber][idetele] != 0 && dEchannelsBending[ichamber][idetele] !=0 ) {     
+            printf(">>> DetEle %4d Occupancy Bending %5.2f %%  Occupancy NonBending %5.2f %% \n", 
+                 idetele+100*(ichamber+1), 
+                 100.*((Float_t) dEoccupancyBending[ichamber][idetele])/((Float_t) dEchannelsBending[ichamber][idetele]),
+                 100.*((Float_t) dEoccupancyNonBending[ichamber][idetele])/((Float_t) dEchannelsBending[ichamber][idetele]));
+          }       
         }
       }
     }
   }
 
-  printf(">>> Muon Spectrometer  Occupancy Bending %5.2f %%  Occupancy NonBending %5.2f %% \n",  
-       100.*((Float_t) totaloccupancyBending)/((Float_t) totalchannelsBending),
-       100.*((Float_t) totaloccupancyNonBending)/((Float_t) totalchannelsNonBending)            );
-
-  delete digitStore;
-}
-
-//_____________________________________________________________________________
-void 
-AliMUONCheck::CheckRecTracks () const
-{
-  /// Reads and dumps rec tracks objects
-  
-  AliWarning("Reimplement me ? or use AliMUONDumper simply ?");
-  
-  //  // waiting for mag field in CDB 
-  //  AliInfoStream() << "Loading field map...\n";
-  //  if (!AliTracker::GetFieldMap()) {
-  //    AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);
-  //    AliTracker::SetFieldMap(field, kFALSE);
-  //  }
-  //  
-  //  // Loading data
-  //  fLoader->LoadTracks("READ");
-  //  
-  //  Int_t endOfLoop = fLastEvent+1;
-  //  if ( fLastEvent == -1 ) endOfLoop = fRunLoader->GetNumberOfEvents();
-  //
-  //  for (Int_t ievent=fFirstEvent; ievent<endOfLoop; ievent++) {
-  //    fRunLoader->GetEvent(ievent);
-  //    
-  //    fRecData->SetTreeAddress("RT");
-  //    fRecData->GetRecTracks();
-  //    TClonesArray* recTracks = fRecData->RecTracks();
-  //    
-  //    Int_t nrectracks = (Int_t) recTracks->GetEntriesFast(); //
-  //    printf(">>> Event %d, Number of Recconstructed tracks %d \n",ievent, nrectracks);
-  //
-  //    // Set the magnetic field for track extrapolations
-  //    AliMUONTrackExtrap::SetField(AliTracker::GetFieldMap());
-  //
-  //    // Loop over tracks
-  //    for (Int_t iRecTracks = 0; iRecTracks <  nrectracks;  iRecTracks++) {
-  //      AliMUONTrack* recTrack = (AliMUONTrack*) recTracks->At(iRecTracks);
-  //      AliMUONTrackParam* trackParam = (AliMUONTrackParam*) (recTrack->GetTrackParamAtHit())->First();
-  //      AliMUONTrackExtrap::ExtrapToZ(trackParam,0.);
-  //      recTrack->Print("full");
-  //    }
-  //    fRecData->ResetRecTracks();
-  //  }   
-  //  fLoader->UnloadTracks();
+  if ( totalchannelsBending != 0 && totalchannelsNonBending != 0 ) {
+    printf(">>> Muon Spectrometer  Occupancy Bending %5.2f %%  Occupancy NonBending %5.2f %% \n",  
+         100.*((Float_t) totaloccupancyBending)/((Float_t) totalchannelsBending),
+         100.*((Float_t) totaloccupancyNonBending)/((Float_t) totalchannelsNonBending));
+  }       
 }
 
 //_____________________________________________________________________________