#include "TMethodArg.h"
#include "TFile.h"
#include "TList.h"
+#include "TH1.h"
+#include "TF1.h"
#include "TObjArray.h"
#include "TDirectory.h"
#include "TTreeStream.h"
#include "AliTRDrecoTask.h"
ClassImp(AliTRDrecoTask)
-
+FILE* AliTRDrecoTask::fgFile = 0x0;
//_______________________________________________________
AliTRDrecoTask::AliTRDrecoTask(const char *name, const char *title)
: AliAnalysisTask(name, title)
//_______________________________________________________
AliTRDrecoTask::~AliTRDrecoTask()
{
+ printf(" %s (%s)\n", GetName(), GetTitle());
if(fDebugStream){
delete fDebugStream;
fDebugStream = 0x0;
}
if(fContainer){
- //fContainer->Delete();
+ if(fContainer->IsOwner()) fContainer->Delete();
delete fContainer;
fContainer = 0x0;
}
+
+ if(fgFile){
+ fflush(fgFile);
+ fclose(fgFile);
+ fgFile = 0x0;
+ }
}
//_______________________________________________________
}
//_______________________________________________________
-void AliTRDrecoTask::GetRefFigure(Int_t /*ifig*/)
+Bool_t AliTRDrecoTask::GetRefFigure(Int_t /*ifig*/)
{
AliWarning("Retrieving reference figures not implemented.");
+ return kFALSE;
+}
+
+//_______________________________________________________
+Bool_t AliTRDrecoTask::PutTrendValue(Char_t *name, Double_t val, Double_t err)
+{
+ if(!fgFile){
+ fgFile = fopen("TRD.Performance.txt", "at");
+ }
+ fprintf(fgFile, "%s_%s %f %f\n", GetName(), name, val, err);
+ return kTRUE;
}
//_______________________________________________________
if(!name.BeginsWith("Plot")) continue;
if(!fPlotFuncList) fPlotFuncList = new TList();
fPlotFuncList->AddLast(new TMethodCall(c, (const char*)name, ""));
- printf("%s%s\n", m->GetName(), m->GetSignature());
}
}
//_______________________________________________________
Bool_t AliTRDrecoTask::Load(const Char_t *filename)
{
- if(!TFile::Open(filename)) return kFALSE;
- TObjArray *o = (TObjArray*)gFile->Get(GetName());
+ if(!TFile::Open(filename)){
+ AliWarning(Form("Couldn't open file %s.", filename));
+ return kFALSE;
+ }
+ TObjArray *o = 0x0;
+ if(!(o = (TObjArray*)gFile->Get(GetName()))){
+ AliWarning("Missing histogram container.");
+ return kFALSE;
+ }
fContainer = (TObjArray*)o->Clone(GetName());
gFile->Close();
- return kFALSE;
+ return kTRUE;
+}
+
+//________________________________________________________
+Bool_t AliTRDrecoTask::Save(TObjArray *results){
+ //
+ // Store the output graphs in a ROOT file
+ // Input TObject array will not be written as Key to the file,
+ // only content itself
+ //
+
+ TDirectory *cwd = gDirectory;
+ if(!TFile::Open(Form("TRD.Result%s.root", GetName()), "RECREATE")) return kFALSE;
+
+ TIterator *iter = results->MakeIterator();
+ TObject *inObject = 0x0, *outObject = 0x0;
+ while((inObject = iter->Next())){
+ outObject = inObject->Clone();
+ outObject->Write(0x0, TObject::kSingleKey);
+ }
+ delete iter;
+ gFile->Close(); delete gFile;
+ cwd->cd();
+ return kTRUE;
}
//_______________________________________________________
fDebugLevel = level;
if(fDebugLevel>=1){
TDirectory *savedir = gDirectory;
- fDebugStream = new TTreeSRedirector(Form("TRD.Debug%s.root", GetName()));
+ fDebugStream = new TTreeSRedirector(Form("TRD.DBG%s.root", GetName()));
savedir->cd();
}
}
+
+//________________________________________________________
+void AliTRDrecoTask::Adjust(TF1 *f, TH1 *h)
+{
+// Helper function to avoid duplication of code
+// Make first guesses on the fit parameters
+
+ // find the intial parameters of the fit !! (thanks George)
+ Int_t nbinsy = Int_t(.5*h->GetNbinsX());
+ Double_t sum = 0.;
+ for(Int_t jbin=nbinsy-4; jbin<=nbinsy+4; jbin++) sum+=h->GetBinContent(jbin); sum/=9.;
+ f->SetParLimits(0, 0., 3.*sum);
+ f->SetParameter(0, .9*sum);
+
+ f->SetParLimits(1, -.2, .2);
+ f->SetParameter(1, -0.1);
+
+ f->SetParLimits(2, 0., 4.e-1);
+ f->SetParameter(2, 2.e-2);
+ if(f->GetNpar() <= 4) return;
+
+ f->SetParLimits(3, 0., sum);
+ f->SetParameter(3, .1*sum);
+
+ f->SetParLimits(4, -.3, .3);
+ f->SetParameter(4, 0.);
+
+ f->SetParLimits(5, 0., 1.e2);
+ f->SetParameter(5, 2.e-1);
+}