// required for global cluster position recalculation
if (!gGeoManager)
- Fatal("AliEMCALAfterBurnerUF::Init", "failed to import geometry.root");
+ Info("AliEMCALAfterBurnerUF::Init", "gGeoManager was not set, be careful");
// initialize geometry, if not yet initialized
if (!AliEMCALGeometry::GetInstance()) {
- Warning("AliEMCALAfterBurnerUF::Init", "AliEMCALGeometry is not yet initialized. Initializing with EMCAL_FIRSTYEARV1");
- AliEMCALGeometry::GetInstance("EMCAL_FIRSTYEARV1");
+ Warning("AliEMCALAfterBurnerUF::Init", "AliEMCALGeometry is not yet initialized. Initializing with EMCAL_COMPLETEV1");
+ AliEMCALGeometry::GetInstance("EMCAL_COMPLETEV1");
}
// AliEMCALRecPoint is using exactly this call
{
if (fClusterUnfolding) delete fClusterUnfolding;
- if (fRecPoints) delete fRecPoints;
+ if (fRecPoints) {
+ fRecPoints->Delete();
+ delete fRecPoints;
+ }
if (fDigitsArr) {
fDigitsArr->Clear("C");
delete fDigitsArr;
}
}
+//------------------------------------------------------------------------
+void AliEMCALAfterBurnerUF::Clear()
+{
+ //Clean the arrays
+
+ if (fRecPoints) fRecPoints->Delete(); // do not Clear(), it leaks, why?
+ if (fDigitsArr) fDigitsArr->Clear("C");
+
+}
//------------------------------------------------------------------------
void AliEMCALAfterBurnerUF::RecPoints2Clusters(TObjArray *clusArray)
{
RecPoints2Clusters(clusArray);
// clean up
- fRecPoints->Clear();
+ fRecPoints->Delete(); // do not Clear(), it leaks, why?
fDigitsArr->Clear("C");
clusArray->Compress();
public:
AliEMCALAfterBurnerUF();
- AliEMCALAfterBurnerUF(Float_t logWeight, Float_t ECALocMaxCut);
+ AliEMCALAfterBurnerUF(Float_t logWeight, Float_t locMaxCut);
virtual ~AliEMCALAfterBurnerUF();
private:
AliEMCALAfterBurnerUF & operator = (const AliEMCALAfterBurnerUF & uf) ;//cpy assignment, put here to avoid compilation warning
public:
+ virtual void Clear();
virtual void Init();
virtual void RecPoints2Clusters(TObjArray *clusArray);
virtual void UnfoldClusters(TObjArray *clusArray, AliVCaloCells *cellsEMCAL); // does the job
-
+
// getters and setters
virtual AliEMCALUnfolding *GetClusterUnfoldingInstance() { return fClusterUnfolding; }
AliEMCALGeometry *fGeom; // EMCAL geometry
Float_t fLogWeight; // used in AliEMCALRecPoint::EvalGlobalPosition()
Float_t fECALocMaxCut; // this amount of energy must distinguish a local maximum from its neighbours
- TObjArray *fRecPoints; // cluster <=> recPoint
- TClonesArray *fDigitsArr; // cell <=> digit
+ TObjArray *fRecPoints; //! cluster <=> recPoint
+ TClonesArray *fDigitsArr; //-> cell <=> digit
AliEMCALUnfolding *fClusterUnfolding; // unfolding class instance
#include "AliEMCALCalibData.h"
class AliCDBStorage;
#include "AliCDBEntry.h"
-#include "AliEMCALUnfolding.h"
ClassImp(AliEMCALClusterizer)
fPar6[i] = recParam->GetPar6(i);
}//end of loop over parameters
- fClusterUnfolding=new AliEMCALUnfolding(fGeom,fECALocMaxCut,fSSPars,fPar5,fPar6);
+ InitClusterUnfolding();
for (i = 0; i < 8; i++) {
AliDebug(1,Form("unfolding shower shape parameters: fSSPars=%f \n",fSSPars[i]));
class AliEMCALGeometry ;
class AliEMCALCalibData ;
class AliCaloCalibPedestal ;
-class AliEMCALUnfolding ;
+#include "AliEMCALUnfolding.h"
class AliEMCALClusterizer : public TObject {
virtual void SetMinECut(Float_t mine) { fMinECut = mine; }
virtual void SetECALocalMaxCut(Float_t cut) { fECALocMaxCut = cut ; }
virtual void SetECALogWeight(Float_t w) { fECAW0 = w ; }
- virtual void SetUnfolding(Bool_t toUnfold = kTRUE ) {fToUnfold = toUnfold ;}
-
+
+ //Unfolding
+ virtual void SetUnfolding(Bool_t toUnfold = kTRUE ) { fToUnfold = toUnfold ;}
+ virtual void SetSSPars (Int_t ipar, Double_t par) { fSSPars[ipar] = par ;}
+ virtual void SetPar5 (Int_t ipar, Double_t par) { fPar5 [ipar] = par ;}
+ virtual void SetPar6 (Int_t ipar, Double_t par) { fPar6 [ipar] = par ;}
+ virtual void InitClusterUnfolding() {
+ fClusterUnfolding=new AliEMCALUnfolding(fGeom,fECALocMaxCut,fSSPars,fPar5,fPar6);
+ }
+
virtual void SetInput(TTree *digitsTree);
virtual void SetOutput(TTree *clustersTree);
{
AliEMCALRecPoint * rp = dynamic_cast<AliEMCALRecPoint *>(fRecPoints->At(index));
if(rp){
- rp->EvalAll(fECAW0,fDigitsArr) ;
+ rp->EvalAll(fECAW0,fDigitsArr,fgkIsInputCalibrated) ;
AliDebug(5, Form("MAX INDEX %d ", rp->GetMaximalEnergyIndex()));
//For each rec.point set the distance to the nearest bad crystal
rp->EvalDistanceToBadChannels(fCaloPed);
for(index = 0; index < fRecPoints->GetEntries(); index++) {
AliEMCALRecPoint * rp = dynamic_cast<AliEMCALRecPoint *>(fRecPoints->At(index));
if(rp){
- rp->EvalAll(fECAW0,fDigitsArr) ;
+ rp->EvalAll(fECAW0,fDigitsArr,fgkIsInputCalibrated) ;
//For each rec.point set the distance to the nearest bad crystal
rp->EvalDistanceToBadChannels(fCaloPed);
}
//}
//____________________________________________________________________________
-void AliEMCALRecPoint::EvalAll(Float_t logWeight,TClonesArray * digits)
+void AliEMCALRecPoint::EvalAll(Float_t logWeight,TClonesArray * digits, const Bool_t justClusters)
{
// Evaluates cluster parameters
EvalParents(digits);
//Called last because it sets the global position of the cluster?
- EvalLocal2TrackingCSTransform();
+ //Do not call it when recalculating clusters out of standard reconstruction
+ if(!justClusters) EvalLocal2TrackingCSTransform();
}
virtual void SetClusterType(Int_t ver) { fClusterType = ver; }
virtual Int_t GetClusterType() const { return fClusterType; }
- virtual void EvalAll(Float_t logWeight, TClonesArray * digits);
+ virtual void EvalAll(Float_t logWeight, TClonesArray * digits, const Bool_t justClusters);
virtual void EvalLocalPosition (Float_t logWeight, TClonesArray * digits);
virtual void EvalGlobalPosition(Float_t logWeight, TClonesArray * digits);