]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EMCAL/AliEMCALReconstructor.cxx
do not delete fGeom in ~AliEMCALReconstructor since it is owned by AliRun. When delet...
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALReconstructor.cxx
index c191ec92c2223c1a90b50b73b5e826be170661cf..9d3dc7239c166d0076c101d38dd2c6f495e0b02e 100644 (file)
@@ -103,7 +103,7 @@ AliEMCALReconstructor::AliEMCALReconstructor()
   if(!fCalibData)
     {
       AliCDBEntry *entry = (AliCDBEntry*) 
-       AliCDBManager::Instance()->Get("EMCAL/Calib/Data");
+      AliCDBManager::Instance()->Get("EMCAL/Calib/Data");
       if (entry) fCalibData =  (AliEMCALCalibData*) entry->GetObject();
     }
   
@@ -114,7 +114,7 @@ AliEMCALReconstructor::AliEMCALReconstructor()
   if(!fPedestalData)
     {
       AliCDBEntry *entry = (AliCDBEntry*) 
-       AliCDBManager::Instance()->Get("EMCAL/Calib/Pedestals");
+      AliCDBManager::Instance()->Get("EMCAL/Calib/Pedestals");
       if (entry) fPedestalData =  (AliCaloCalibPedestal*) entry->GetObject();
     }
   
@@ -135,7 +135,9 @@ AliEMCALReconstructor::AliEMCALReconstructor()
   //Init temporary list of digits
   fgDigitsArr     = new TClonesArray("AliEMCALDigit",1000);
   fgClustersArr   = new TObjArray(1000);
-  fgTriggerDigits = new TClonesArray("AliEMCALTriggerRawDigit", 32 * 96);      
+
+  const int kNTRU = fGeom->GetNTotalTRU();
+  fgTriggerDigits = new TClonesArray("AliEMCALTriggerRawDigit", kNTRU * 96);   
        
   //Track matching
   fMatches = new TList();
@@ -149,30 +151,31 @@ AliEMCALReconstructor::~AliEMCALReconstructor()
 
   //AliDebug(2, "Mark.");
 
-  if(fGeom)              delete fGeom;
+  ////RS  if(fGeom)              delete fGeom;
   
   //No need to delete, recovered from OCDB
   //if(fCalibData)         delete fCalibData;
   //if(fPedestalData)      delete fPedestalData;
   
-  if(fgDigitsArr){
-    fgDigitsArr->Clear("C");
-    delete fgDigitsArr; 
-  }
+  if(fgDigitsArr) fgDigitsArr->Clear("C");
+  delete fgDigitsArr; 
+  fgDigitsArr = 0;
   
-  if(fgClustersArr){
-    fgClustersArr->Clear();
-    delete fgClustersArr; 
-  }
+  if(fgClustersArr) fgClustersArr->Clear();
+  delete fgClustersArr; 
+  fgClustersArr = 0;
   
-  if(fgTriggerDigits){
-    fgTriggerDigits->Clear();
-    delete fgTriggerDigits; 
-  }
+  if(fgTriggerDigits) fgTriggerDigits->Clear();
+  delete fgTriggerDigits; 
+  fgTriggerDigits = 0;
+  
+  delete fgRawUtils;
+  fgRawUtils = 0;
+  delete fgClusterizer;
+  fgClusterizer = 0;
   
-  if(fgRawUtils)         delete fgRawUtils;
-  if(fgClusterizer)      delete fgClusterizer;
-  if(fgTriggerProcessor) delete fgTriggerProcessor;
+  delete fgTriggerProcessor;
+  fgTriggerProcessor = 0;
   
   if(fMatches) { fMatches->Delete(); delete fMatches; fMatches = 0;}
   
@@ -289,7 +292,8 @@ void AliEMCALReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digits
   
   if(fgDigitsArr) fgDigitsArr->Clear("C");
   
-  TClonesArray *digitsTrg = new TClonesArray("AliEMCALTriggerRawDigit", 32 * 96);
+  const int kNTRU = fGeom->GetNTotalTRU();
+  TClonesArray *digitsTrg = new TClonesArray("AliEMCALTriggerRawDigit", kNTRU * 96);
   
   Int_t bufsize = 32000;
   digitsTree->Branch("EMCAL", &fgDigitsArr, bufsize);
@@ -311,7 +315,8 @@ void AliEMCALReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digits
     fgRawUtils->SetRemoveBadChannels(GetRecParam()->GetRemoveBadChannels());
     if (!fgRawUtils->GetFittingAlgorithm()) fgRawUtils->SetFittingAlgorithm(GetRecParam()->GetFittingAlgorithm());
     fgRawUtils->SetFALTROUsage(GetRecParam()->UseFALTRO());
-    
+    //  fgRawUtils->SetFALTROUsage(0);
     //fgRawUtils->SetTimeMin(GetRecParam()->GetTimeMin());
     //fgRawUtils->SetTimeMax(GetRecParam()->GetTimeMax());
     
@@ -475,7 +480,10 @@ void AliEMCALReconstructor::FillESD(TTree* digitsTree, TTree* clustersTree,
           } // all primaries in digit      
         } // select primary label
         
-        emcCells.SetCell(idignew,dig->GetId(),energy, time,digLabel);   
+        Bool_t highGain = kFALSE;
+        if( dig->GetType() == AliEMCALDigit::kHG ) highGain = kTRUE;
+        
+        emcCells.SetCell(idignew,dig->GetId(),energy, time,digLabel,0.,highGain);
         idignew++;
       }
     }
@@ -672,11 +680,25 @@ void AliEMCALReconstructor::FillMisalMatrixes(AliESDEvent* esd)const{
   const Int_t bufsize = 255;
   char path[bufsize] ;
   TGeoHMatrix * m = 0x0;
+  Int_t tmpType = -1;
+  Int_t SMOrder = 0;
+  TString SMName;
   for(Int_t sm = 0; sm < fGeom->GetNumberOfSuperModules(); sm++){
-    snprintf(path,bufsize,"/ALIC_1/XEN1_1/SMOD_%d",sm+1) ; //In Geometry modules numbered 1,2,.,5
-    if(sm >= 10 && !((fGeom->GetEMCGeometry()->GetGeoName()).Contains("12SMV1"))) snprintf(path,bufsize,"/ALIC_1/XEN1_1/SM10_%d",sm-10+1) ;
-    if(sm >= 10 &&  ((fGeom->GetEMCGeometry()->GetGeoName()).Contains("12SMV1"))) snprintf(path,bufsize,"/ALIC_1/XEN1_1/SM3rd_%d",sm-10+1) ;
-    
+    if(fGeom->GetSMType(sm) == AliEMCALGeometry::kEMCAL_Standard )      SMName = "SMOD";
+    else if(fGeom->GetSMType(sm) == AliEMCALGeometry::kEMCAL_Half )     SMName = "SM10";
+    else if(fGeom->GetSMType(sm) == AliEMCALGeometry::kEMCAL_3rd )      SMName = "SM3rd";
+    else if( fGeom->GetSMType(sm) == AliEMCALGeometry::kDCAL_Standard ) SMName = "DCSM";
+    else if( fGeom->GetSMType(sm) == AliEMCALGeometry::kDCAL_Ext )      SMName = "DCEXT";
+    else AliError("Unkown SM Type!!");
+
+    if(fGeom->GetSMType(sm) == tmpType) {
+      SMOrder++;
+    } else {
+      tmpType = fGeom->GetSMType(sm);
+      SMOrder = 1;
+    }
+    snprintf(path,bufsize,"/ALIC_1/XEN1_1/%s_%d", SMName.Data(), SMOrder) ;
+
     if (gGeoManager->CheckPath(path)){
       gGeoManager->cd(path);
       m = gGeoManager->GetCurrentMatrix() ;
@@ -729,18 +751,28 @@ Bool_t AliEMCALReconstructor::CalculateResidual(AliESDtrack *track, AliESDCaloCl
   // Otherwise use the TPCInner point
 
   dEta = -999, dPhi = -999;
+  Bool_t ITSTrackSA = 0;
 
   AliExternalTrackParam *trkParam = 0;
+  
   const AliESDfriendTrack*  friendTrack = track->GetFriendTrack();
   if(friendTrack && friendTrack->GetTPCOut())
     trkParam = const_cast<AliExternalTrackParam*>(friendTrack->GetTPCOut());
-  else
+  else if(track->GetInnerParam())
     trkParam = const_cast<AliExternalTrackParam*>(track->GetInnerParam());
+  else{
+    trkParam = new AliExternalTrackParam(*track); //If there is ITSSa track 
+    ITSTrackSA = 1;    
+  }
   if(!trkParam) return kFALSE;
-
+  
   AliExternalTrackParam trkParamTmp (*trkParam);
-  if(!AliEMCALRecoUtils::ExtrapolateTrackToCluster(&trkParamTmp, cluster, track->GetMass(kTRUE), GetRecParam()->GetExtrapolateStep(), dEta, dPhi)) return kFALSE;
+  if(!AliEMCALRecoUtils::ExtrapolateTrackToCluster(&trkParamTmp, cluster, track->GetMass(kTRUE), GetRecParam()->GetExtrapolateStep(), dEta, dPhi)){
+       if(ITSTrackSA) delete trkParam;
+       return kFALSE;
+  }
 
+  if(ITSTrackSA) delete trkParam;
   return kTRUE;
 }