#pragma link C++ class AliTRDtrendValue+;
#pragma link C++ class AliTRDtrendingManager+;
#pragma link C++ class AliTRDclusterInfo+;
+#pragma link C++ class AliTRDtriggerInfo+;
+#pragma link C++ class AliTRDchmbInfo+;
#pragma link C++ class AliTRDv0Info+;
#pragma link C++ class AliTRDtrackInfo+;
#pragma link C++ class AliTRDtrackInfo::AliESDinfo+;
} // end loop over tracks\r
\r
\r
- \r
+ triggers->Delete(); delete triggers;\r
delete [] valuesMatchingPhiEtaCF;\r
delete [] valuesMatchingPtCF;\r
delete [] valuesBCCF;\r
// Assign an index into the trigger histogram and the CF container for this trigger\r
GetTriggerIndex(arr2->At(jt)->GetName(), kTRUE);\r
}\r
+ arr2->Delete(); delete arr2;\r
+ arr->Delete(); delete arr;\r
}\r
}\r
// Add background triggers from PhysicsSelection\r
// Assign an index into the trigger histogram and the CF container for this trigger\r
GetTriggerIndex(arr2->At(jt)->GetName(), kTRUE);\r
}\r
+ arr2->Delete(); delete arr2;\r
+ arr->Delete(); delete arr;\r
}\r
}\r
if(!fNAssignedTriggers) {GetTriggerIndex("All triggers", kTRUE);}\r
for(Int_t it=0; it<arr->GetEntries(); ++it) {\r
GetTriggerIndex(arr->At(it)->GetName(), kTRUE);\r
}\r
+ arr->Delete(); delete arr;\r
}\r
\r
\r
nVars++;\r
}\r
else {\r
- TObjArray* arr = fExpertCFVarBins[ivar].Tokenize(";");\r
- nBins[nVars] = arr->GetEntries()-1;\r
- if(nBins[nVars]>0) nVars++;\r
+ TObjArray* arr = fExpertCFVarBins[ivar].Tokenize(";");\r
+ nBins[nVars] = arr->GetEntries()-1;\r
+ if(nBins[nVars]>0) nVars++;\r
+ arr->Delete(); delete arr;\r
}\r
}\r
if(nVars<1) return 0x0;\r
Int_t iUsedVar = 0;\r
for(Int_t ivar=0; ivar<kNTrdCfVariables; ++ivar) {\r
if(!fExpertCFVarsEnabled[ivar]) continue;\r
- if(fExpertCFVarBins[ivar][0]=='\0')\r
- cf->SetBinLimits(iUsedVar, fExpertCFVarRanges[ivar][0], fExpertCFVarRanges[ivar][1]);\r
- else {\r
- TObjArray* arr = fExpertCFVarBins[ivar].Tokenize(";");\r
- if(arr->GetEntries()-1>0) {\r
- Double_t* binLims = new Double_t[arr->GetEntries()];\r
- for(Int_t ib=0;ib<arr->GetEntries();++ib) {\r
- TString binStr = arr->At(ib)->GetName();\r
- binLims[ib] = binStr.Atof();\r
- }\r
- cf->SetBinLimits(iUsedVar++, binLims);\r
- }\r
+ if(fExpertCFVarBins[ivar][0]=='\0'){\r
+ cf->SetBinLimits(iUsedVar, fExpertCFVarRanges[ivar][0], fExpertCFVarRanges[ivar][1]);\r
+ } else {\r
+ TObjArray* arr = fExpertCFVarBins[ivar].Tokenize(";");\r
+ if(arr->GetEntries()-1>0) {\r
+ Double_t* binLims = new Double_t[arr->GetEntries()];\r
+ for(Int_t ib=0;ib<arr->GetEntries();++ib) {\r
+ TString binStr = arr->At(ib)->GetName();\r
+ binLims[ib] = binStr.Atof();\r
+ }\r
+ cf->SetBinLimits(iUsedVar++, binLims);\r
+ }\r
+ arr->Delete(); delete arr;\r
}\r
cf->SetVarTitle(iUsedVar, varNames[ivar]);\r
}\r
#include "info/AliTRDtrackInfo.h"\r
#include "info/AliTRDeventInfo.h"\r
#include "info/AliTRDv0Info.h"\r
+#include "info/AliTRDchmbInfo.h"\r
+#include "info/AliTRDtriggerInfo.h"\r
#include "info/AliTRDeventCuts.h"\r
\r
ClassImp(AliTRDinfoGen)\r
fContainer->AddAt(h, kEvType);\r
TH2I* h2=new TH2I("hBCtrack", "Track Statistics;Fill Bunch;TOF BC;Entries", 3500, -0.5, 3499.5, 31, -10.5, 20.5);\r
fContainer->AddAt(h2, kBC);\r
- h=new TH1I("hTriggers", "Triggers statistics;;Entries", 21, -0.5, 20.5);\r
- fContainer->AddAt(h, kTrigger);\r
+ fContainer->AddAt(new AliTRDtriggerInfo(), kTrigger);\r
TObjArray *chmb = new TObjArray(AliTRDgeometry::kNdet);\r
- chmb->SetName("Chambers"); chmb->SetOwner();\r
+ chmb->SetName("Chambers Status"); chmb->SetOwner(kTRUE);\r
fContainer->AddAt(chmb, kChmb);\r
\r
PostData(AliTRDpwgppHelper::kTracksBarrel, fTracksBarrel);\r
// load misalignment\r
fgGeo = new AliTRDgeometry;\r
fgGeo->CreateClusterMatrixArray();\r
- //MakeChambers();\r
+ MakeChambers();\r
+ printf("After MakeChambers()\n");\r
// load reco param list from OCDB\r
AliInfo("Initializing TRD reco params ...");\r
fgReconstructor = new AliTRDReconstructor();\r
fMCev = MCEvent();\r
\r
// trigger monitor\r
- h = (TH1I*)fContainer->At(kTrigger);\r
- TAxis *ax(h->GetXaxis());\r
+ AliTRDtriggerInfo *ti = (AliTRDtriggerInfo*)fContainer->At(kTrigger);\r
TObjArray *evTriggers = fESDev->GetFiredTriggerClasses().Tokenize(" ");\r
- for(Int_t iet(evTriggers->GetEntriesFast()); iet--;){\r
- Int_t ix(1);\r
- for(; ix<=ax->GetNbins(); ix++){\r
- if(!Int_t(h->GetBinContent(ix))){\r
- ax->SetBinLabel(ix, (*evTriggers)[iet]->GetName());\r
- break;\r
- }\r
- if(strcmp((*evTriggers)[iet]->GetName(), ax->GetBinLabel(ix))==0) break;\r
- }\r
- h->AddBinContent(ix);\r
- }\r
+ //printf("Ev[%03d] Triggers[%s]\n", fESDev->GetEventNumberInFile(), fESDev->GetFiredTriggerClasses().Data());\r
+ for(Int_t iet(evTriggers->GetEntriesFast()); iet--;) ti->Add((*evTriggers)[iet]->GetName());\r
+ evTriggers->Delete(); delete evTriggers;\r
\r
// event selection based on vertex cuts and trigger\r
if(UseLocalEvSelection() && !fEventCut->IsSelected(fESDev, IsCollision())){\r
AliError("No access to calibration data");\r
return;\r
}\r
-\r
- Double_t alpha(0.), cs(-2.), sn(0.);\r
- TVectorF pos(5*AliTRDgeometry::kNdet);\r
+ TObjArray *chmb = (TObjArray*)fContainer->At(kChmb);\r
+ Int_t stat(0);\r
+ Double_t alpha(0.), cs(-2.), sn(0.), pos[4];\r
for(Int_t isec(0); isec<AliTRDgeometry::kNsector; isec++){\r
alpha = (0.5+isec)*AliTRDgeometry::GetAlpha();\r
cs = TMath::Cos(alpha);\r
for(Int_t istk(0); istk<AliTRDgeometry::kNstack; istk++){\r
for(Int_t ilyr(0); ilyr<AliTRDgeometry::kNlayer; ilyr++){\r
Int_t idet(AliTRDgeometry::GetDetector(ilyr, istk, isec));\r
- Int_t jdet = 5*idet;\r
TGeoHMatrix *matrix(fgGeo->GetClusterMatrix(idet));\r
if(!matrix){\r
AliDebug(2, Form("Missing matrix for %03d [%02d_%d_%d]", idet, isec, istk, ilyr));\r
Double_t zm(0.5 * (pp->GetRow0() + pp->GetRowEnd())),\r
loc0[] = {AliTRDgeometry::AnodePos(), pp->GetCol0(), zm-pp->GetRow0()},\r
loc1[] = {AliTRDgeometry::AnodePos(), pp->GetColEnd(), zm-pp->GetRowEnd()},\r
- glb[3];\r
+ glb[3] = {1,1,1};\r
matrix->LocalToMaster(loc0, glb);\r
Float_t phi = TMath::ATan2(glb[0]*sn + glb[1]*cs, glb[0]*cs - glb[1]*sn),\r
tgl = glb[2]/glb[0]/TMath::Sqrt(1.+glb[1]*glb[1]/glb[0]/glb[0]),\r
eta = -TMath::Log(TMath::Tan(0.5 * (0.5*TMath::Pi() - TMath::ATan(tgl))));\r
- pos[jdet+0] = eta; pos[jdet+1] = phi;\r
+ pos[0] = eta; pos[1] = phi;\r
matrix->LocalToMaster(loc1, glb);\r
phi = TMath::ATan2(glb[0]*sn + glb[1]*cs, glb[0]*cs - glb[1]*sn);\r
tgl = glb[2]/glb[0]/TMath::Sqrt(1.+glb[1]*glb[1]/glb[0]/glb[0]);\r
eta = -TMath::Log(TMath::Tan(0.5 * (0.5*TMath::Pi() - TMath::ATan(tgl))));\r
- pos[jdet+2] = eta; pos[jdet+3] = phi;\r
- pos[jdet+4] = 0.;\r
+ pos[2] = eta; pos[3] = phi;\r
+ stat = 0;\r
if(calib->IsChamberGood(idet)){\r
- if(calib->IsHalfChamberNoData(idet, 0)) pos[jdet+4] += 2.;\r
- if(calib->IsHalfChamberNoData(idet, 1)) pos[jdet+4] += 3.;\r
- } else pos[jdet+4] = 1.;\r
+ if(calib->IsHalfChamberNoData(idet, 0)) stat += 2;\r
+ if(calib->IsHalfChamberNoData(idet, 1)) stat += 3;\r
+ } else stat = 1;\r
+ chmb->Add(new AliTRDchmbInfo(idet, stat, pos));\r
}\r
}\r
}\r
- fContainer->AddAt(new TVectorF(pos), kChmb);\r
}\r
\r
//____________________________________________________________________\r
}\r
TH1 *h1(NULL); TVirtualPad *p(NULL); TCanvas *cOut(NULL);\r
\r
- const Int_t nx(2048), ny(750);\r
- cOut = new TCanvas(GetName(), "Run Statistics", nx, ny);\r
- cOut->Divide(3,1, 1.e-5, 1.e-5);\r
+ const Int_t nx(1024), ny(1024);\r
+ cOut = new TCanvas("infoGenSummary", "Run Statistics", nx, ny);\r
+ cOut->Divide(2,2, 1.e-5, 1.e-5);\r
//=========\r
p=cOut->cd(1);p->SetRightMargin(0.025);p->SetTopMargin(0.01);p->SetLogy();\r
h1 = (TH1*)fContainer->At(kStatTrk);\r
- h1->SetBarOffset(0.06); h1->SetBarWidth(0.88); h1->SetFillColor(3);\r
+ h1->SetBarOffset(0.06); h1->SetBarWidth(0.88); h1->SetFillColor(kGreen); h1->SetFillStyle(3001);\r
h1->Draw("bar1");\r
//=========\r
p=cOut->cd(2);p->SetRightMargin(0.025);p->SetTopMargin(0.01);p->SetLogy();\r
h1 = (TH1*)fContainer->At(kEvType);\r
- h1->SetBarOffset(0.04); h1->SetBarWidth(0.92);h1->SetFillColor(6);\r
+ h1->SetBarOffset(0.04); h1->SetBarWidth(0.92);h1->SetFillColor(kGreen); h1->SetFillStyle(3001);\r
h1->Draw("bar1");\r
//=========\r
p=cOut->cd(3);p->SetRightMargin(0.025);p->SetTopMargin(0.01);p->SetLogz();\r
n, -0.5, n-0.5, ay->GetNbins(), ay->GetXmin(), ay->GetXmax());\r
hs->SetLineColor(kBlack);hs->SetLineWidth(1);\r
hs->SetMarkerColor(kRed);\r
- TAxis *ax(hs->GetXaxis());\r
+ TAxis *ax(hs->GetXaxis()); ax->CenterTitle(); ax->SetTitleOffset(1.4);\r
for(Int_t ib(0); ib<n; ib++){\r
ax->SetBinLabel(ib+1, Form("%d", bins[ib]));\r
for(Int_t iy(1); iy<=ay->GetNbins(); iy++){\r
}\r
}\r
hs->Draw("textbox");\r
+\r
+ //=========\r
+ p=cOut->cd(4); p->SetRightMargin(0.0215);p->SetLeftMargin(0.414);//p->SetLogz();\r
+ TObject *o = fContainer->At(kTrigger);\r
+ if(o){\r
+ if(!strcmp("TH1I", o->IsA()->GetName())){\r
+ h1 = dynamic_cast<TH1I*>(o);\r
+ h1->GetXaxis()->SetTitleOffset(6.5); h1->GetXaxis()->CenterTitle();\r
+ h1->SetFillStyle(3001);h1->SetFillColor(kGreen);\r
+ h1->SetBarWidth(0.8);h1->SetBarOffset(0.1);\r
+ ((TH1I*)o)->Draw("hbar2");\r
+ } else ((AliTRDtriggerInfo*)o)->Draw();\r
+ }\r
cOut->SaveAs(Form("%s.gif", cOut->GetName()));\r
}\r
\r
AliInfo("");\r
if(!(fContainer = dynamic_cast<TObjArray *>(GetOutputData(AliTRDpwgppHelper::kMonitor)))) return;\r
AliInfo(Form("fContainer(%p)", (void*)fContainer));\r
+\r
+ AliTRDtriggerInfo* ti(NULL);\r
if(UseLocalEvSelection()){\r
- TH1 *h1 = (TH1*)fContainer->At(kTrigger); TAxis *ax(h1->GetXaxis());\r
- AliInfo(Form("h1(%p)", (void*)h1));\r
- for(Int_t ix(1); ix<=ax->GetNbins(); ix++){\r
- if(fEventCut->CheckTrigger(ax->GetBinLabel(ix))) ax->SetBinLabel(ix, Form("#color[2]{%s}", ax->GetBinLabel(ix)));\r
+ if(!(ti = (AliTRDtriggerInfo*)fContainer->At(kTrigger))) return;\r
+ for(Int_t ix(0); ix<ti->GetNTriggers(); ix++){\r
+ if(fEventCut->CheckTrigger(ti->GetTrigger(ix))) ti->SetSelectTrigger(ix);\r
+ //ax->SetBinLabel(ix, Form("#color[2]{%s}", ax->GetBinLabel(ix)));\r
}\r
}\r
}\r
if(!foundOpt) Warning("AliTRDpwgppHelper::ParseOptions()", "TRD task %s not implemented (yet).", s.Data());
}
}
+ tasksArray->Delete(); delete tasksArray;
+
// extra rules for calibration tasks
// if(TESTBIT(fSteerTask, kCheckTRK)) SETBIT(fSteerTask, kResolution);
if(TESTBIT(fSteerTask, kCalibration)) SETBIT(fSteerTask, kCheckDET);
#include "AliAnalysisManager.h"\r
#include "AliExternalTrackParam.h"\r
\r
+#include "info/AliTRDchmbInfo.h"\r
#include "info/AliTRDeventInfo.h"\r
#include "info/AliTRDtrendingManager.h"\r
#include "AliTRDrecoTask.h"\r
,fkMC(NULL)\r
,fkESD(NULL)\r
,fSpecies(-6)\r
+ ,fTriggerSlot(-1)\r
,fPt(-1.)\r
,fPhi(0.)\r
,fEta(0.)\r
+ ,fTriggerList(NULL)\r
,fPlotFuncList(NULL)\r
,fDetFuncList(NULL)\r
,fRunTerminate(kFALSE)\r
,fkMC(NULL)\r
,fkESD(NULL)\r
,fSpecies(-6)\r
+ ,fTriggerSlot(-1)\r
,fPt(-1.)\r
,fPhi(0.)\r
,fEta(0.)\r
+ ,fTriggerList(NULL)\r
,fPlotFuncList(NULL)\r
,fDetFuncList(NULL)\r
,fRunTerminate(kFALSE)\r
fDets = NULL;\r
}\r
if(fDetsV) delete fDetsV; fDetsV=NULL;\r
+ if(fTriggerList){fTriggerList->Delete(); delete fTriggerList;}\r
\r
if(fContainer && !(AliAnalysisManager::GetAnalysisManager() && AliAnalysisManager::GetAnalysisManager()->IsProofMode())){\r
if(fContainer->IsOwner()) fContainer->Delete();\r
\r
fTracks = dynamic_cast<TObjArray *>(GetInputData(1));\r
fEvent = dynamic_cast<AliTRDeventInfo *>(GetInputData(2));\r
+ fTriggerSlot=0;\r
+ if(fTriggerList){\r
+ for(Int_t itrig(0); itrig<fTriggerList->GetEntries(); itrig++){\r
+ if(!fEvent->GetFiredTriggerClasses().Contains(((TObjString*)(*fTriggerList)[itrig])->GetName())) continue;\r
+ //printf("\"%s\" selected\n", ((TObjString*)(*fTriggerList)[itrig])->GetName());\r
+ SETBIT(fTriggerSlot,itrig);\r
+ }\r
+ if(!fTriggerSlot){\r
+ AliDebug(2, Form("Triggers[%s] not used for %s", fEvent->GetFiredTriggerClasses().Data(), GetName()));\r
+ return;\r
+ }\r
+ }\r
fClusters = dynamic_cast<TObjArray*>(GetInputData(3));\r
\r
if(!fPlotFuncList){\r
AliWarning("Missing TRDinfoGen container.");\r
return kFALSE;\r
}\r
- TObjArray *dets = (TObjArray*)info->FindObject("Chambers");\r
+ TObjArray *dets = (TObjArray*)info->FindObject("Chambers Status");\r
if(!dets){\r
- TVector *vdets = (TVector*)info->At(4);\r
- if(!vdets){\r
- AliWarning("Missing detector map from TRDinfoGen results.");\r
- return kFALSE;\r
- } else fDetsV = (TVector*)vdets->Clone();\r
- } else fDets = (TObjArray*)dets->Clone("Chambers");\r
+ if(strcmp("TObjArray", info->At(4)->IsA()->GetName())) AliError("Looking for old style chamber status map. Failed.");\r
+ else {\r
+ AliWarning("Looking for old style chamber status map.");\r
+ TObjArray *vdets = (TObjArray*)info->At(4);\r
+ fDetsV = (TObjArray*)vdets->Clone();\r
+ }\r
+ } else fDets = (TObjArray*)dets->Clone();\r
gFile->Close();\r
return kTRUE;\r
}\r
// based on info collected by AliTRDinfoGen\r
\r
if(!fDets){\r
- AliWarning("OLD Detector map and status not available. Try NEW");\r
- MakeDetectorPlotNEW(ly, opt);\r
+ AliWarning("NEW Detector map and status not available. Try OLD");\r
+ MakeDetectorPlotOLD(ly, opt);\r
return;\r
}\r
- Float_t xmin(0.), xmax(0.);\r
- TBox *gdet = new TBox();\r
- gdet->SetLineColor(kBlack);gdet->SetFillColor(kBlack);\r
- Int_t style[] = {0, 3003};\r
- for(Int_t idet(0); idet<540; idet++){\r
- if(idet%6 != ly) continue;\r
- TVectorF *det((TVectorF*)fDets->At(idet));\r
- if(!det) continue;\r
- Int_t iopt = Int_t((*det)[4]);\r
- if(strcmp(opt, "eta")==0){\r
- xmin=(*det)[0]; xmax=(*det)[2];\r
- } else if(strcmp(opt, "pad")==0){\r
- Int_t stk(AliTRDgeometry::GetStack(idet));\r
- xmin=-0.6+16*(4-stk)-(stk<2?4:0); xmax=xmin+(stk==2?12:16)-0.2;\r
- } else continue;\r
- AliDebug(2, Form("det[%03d] 0[%+4.1f(%+4.1f) %+4.1f] 1[%+4.1f(%+4.1f) %+4.1f] opt[%d]", idet, xmin, (*det)[0], (*det)[1], xmax, (*det)[2], (*det)[3], iopt));\r
- if(iopt==1){\r
- gdet->SetFillStyle(style[1]);gdet->SetFillColor(kBlack);\r
- gdet->DrawBox(xmin, (*det)[1], xmax, (*det)[3]);\r
- } else {\r
- gdet->SetFillStyle(style[0]);\r
- gdet->DrawBox(xmin, (*det)[1], xmax, (*det)[3]);\r
- if(iopt==2){\r
- gdet->SetFillStyle(style[1]);gdet->SetFillColor(kGreen);\r
- gdet->DrawBox(xmin, (*det)[1], xmax, 0.5*((*det)[3]+(*det)[1]));\r
- } else if(iopt==3){\r
- gdet->SetFillStyle(style[1]);gdet->SetFillColor(kRed);\r
- gdet->DrawBox(xmin, 0.5*((*det)[3]+(*det)[1]), xmax, (*det)[3]);\r
- } else if(iopt!=0) AliError(Form("Wrong chmb. status[%d] for det[%03d]", iopt, idet));\r
- }\r
+ AliTRDchmbInfo *ci(NULL);\r
+ for(Int_t idet(0); idet<fDets->GetEntriesFast(); idet++){\r
+ if(!(ci = (AliTRDchmbInfo*)fDets->At(idet))) continue;\r
+ if(AliTRDgeometry::GetLayer(ci->GetDetector()) != ly) continue;\r
+ ci->Draw(opt);\r
}\r
+ \r
Float_t dsm = TMath::TwoPi()/AliTRDgeometry::kNsector;\r
- xmin=0.;\r
- if(strcmp(opt, "pad")==0) xmin=38.;\r
- TLatex *sm = new TLatex(); sm->SetTextAlign(22);sm->SetTextColor(0); sm->SetTextFont(32);sm->SetTextSize(0.03);\r
- for(Int_t is(0); is<AliTRDgeometry::kNsector; is++) sm->DrawLatex(xmin, -TMath::Pi()+(is+0.5)*dsm, Form("%02d", is>=9?(is-9):(is+9)));\r
+ Float_t xmed=0.;\r
+ if(strcmp(opt, "pad")==0) xmed=38.;\r
+ TLatex *sm = new TLatex(); sm->SetTextAlign(22);sm->SetTextColor(kBlack); sm->SetTextFont(32);sm->SetTextSize(0.03);\r
+ for(Int_t is(0); is<AliTRDgeometry::kNsector; is++) sm->DrawLatex(xmed, -TMath::Pi()+(is+0.5)*dsm, Form("%02d", is>=9?(is-9):(is+9)));\r
}\r
\r
//_______________________________________________________\r
-void AliTRDrecoTask::MakeDetectorPlotNEW(Int_t ly, const Option_t *opt)\r
+void AliTRDrecoTask::MakeDetectorPlotOLD(Int_t ly, const Option_t *opt)\r
{\r
// Draw chamber boundaries in eta/phi plots with misalignments\r
-// based on info collected by AliTRDinfoGen NEW data storage\r
+// based on info collected by AliTRDinfoGen OLD data storage\r
\r
if(!fDetsV){\r
- AliWarning("NEW Detector map and status not available.");\r
+ AliError("OLD Detector map and status not available.");\r
+ return;\r
+ }\r
+ if(!fDetsV->GetEntries()){\r
+ AliError("OLD Detector map and status not filled.");\r
return;\r
}\r
+\r
Float_t xmin(0.), xmax(0.);\r
TBox *gdet = new TBox();\r
gdet->SetLineColor(kBlack);gdet->SetFillColor(kBlack);\r
Int_t style[] = {0, 3003};\r
- for(Int_t idet(0), jdet(0); idet<AliTRDgeometry::kNdet; idet++, jdet+=5){\r
+ for(Int_t idet(0); idet<540; idet++){\r
if(idet%6 != ly) continue;\r
- Int_t iopt = Int_t((*fDetsV)[jdet+4]);\r
+ TVectorF *det((TVectorF*)fDetsV->At(idet));\r
+ if(!det) continue;\r
+ Int_t iopt = Int_t((*det)[4]);\r
if(strcmp(opt, "eta")==0){\r
- xmin=(*fDetsV)[jdet+0]; xmax=(*fDetsV)[jdet+2];\r
+ xmin=(*det)[0]; xmax=(*det)[2];\r
} else if(strcmp(opt, "pad")==0){\r
Int_t stk(AliTRDgeometry::GetStack(idet));\r
xmin=-0.6+16*(4-stk)-(stk<2?4:0); xmax=xmin+(stk==2?12:16)-0.2;\r
} else continue;\r
- AliDebug(2, Form("det[%03d] 0[%+4.1f(%+4.1f) %+4.1f] 1[%+4.1f(%+4.1f) %+4.1f] opt[%d]", idet, xmin, (*fDetsV)[jdet+0], (*fDetsV)[jdet+1], xmax, (*fDetsV)[jdet+2], (*fDetsV)[jdet+3], iopt));\r
+ AliDebug(2, Form("det[%03d] 0[%+4.1f(%+4.1f) %+4.1f] 1[%+4.1f(%+4.1f) %+4.1f] opt[%d]", idet, xmin, (*det)[0], (*det)[1], xmax, (*det)[2], (*det)[3], iopt));\r
if(iopt==1){\r
gdet->SetFillStyle(style[1]);gdet->SetFillColor(kBlack);\r
- gdet->DrawBox(xmin, (*fDetsV)[jdet+1], xmax, (*fDetsV)[jdet+3]);\r
+ gdet->DrawBox(xmin, (*det)[1], xmax, (*det)[3]);\r
} else {\r
gdet->SetFillStyle(style[0]);\r
- gdet->DrawBox(xmin, (*fDetsV)[jdet+1], xmax, (*fDetsV)[jdet+3]);\r
+ gdet->DrawBox(xmin, (*det)[1], xmax, (*det)[3]);\r
if(iopt==2){\r
gdet->SetFillStyle(style[1]);gdet->SetFillColor(kGreen);\r
- gdet->DrawBox(xmin, (*fDetsV)[jdet+1], xmax, 0.5*((*fDetsV)[jdet+3]+(*fDetsV)[jdet+1]));\r
+ gdet->DrawBox(xmin, (*det)[1], xmax, 0.5*((*det)[3]+(*det)[1]));\r
} else if(iopt==3){\r
gdet->SetFillStyle(style[1]);gdet->SetFillColor(kRed);\r
- gdet->DrawBox(xmin, 0.5*((*fDetsV)[jdet+3]+(*fDetsV)[jdet+1]), xmax, (*fDetsV)[jdet+3]);\r
+ gdet->DrawBox(xmin, 0.5*((*det)[3]+(*det)[1]), xmax, (*det)[3]);\r
} else if(iopt!=0) AliError(Form("Wrong chmb. status[%d] for det[%03d]", iopt, idet));\r
}\r
}\r
Float_t dsm = TMath::TwoPi()/AliTRDgeometry::kNsector;\r
xmin=0.;\r
if(strcmp(opt, "pad")==0) xmin=38.;\r
- TLatex *sm = new TLatex(); sm->SetTextAlign(22);sm->SetTextColor(0); sm->SetTextFont(32);sm->SetTextSize(0.03);\r
+ TLatex *sm = new TLatex(); sm->SetTextAlign(22);sm->SetTextColor(kBlack); sm->SetTextFont(32);sm->SetTextSize(0.03);\r
for(Int_t is(0); is<AliTRDgeometry::kNsector; is++) sm->DrawLatex(xmin, -TMath::Pi()+(is+0.5)*dsm, Form("%02d", is>=9?(is-9):(is+9)));\r
}\r
\r
h2 = new TH2F(Form("%s_2D", fH->GetName()),\r
Form("%s;%s;%s;%s(%s) %s", fH->GetTitle(), ax->GetTitle(), ay->GetTitle(), title[mid], nt>0?(*tokenTitle)[0]->GetName():"", nt>1?(*tokenTitle)[1]->GetName():""),\r
nx, ax->GetXmin(), ax->GetXmax(), ny, ay->GetXmin(), ay->GetXmax());\r
+ tokenTitle->Delete(); delete tokenTitle;\r
h2->SetContour(ncol);\r
h2->GetZaxis()->CenterTitle();\r
h2->GetZaxis()->SetTitleOffset(1.4);\r
fRebinY = new Int_t[n]; memcpy(fRebinY, reby, n*sizeof(Int_t));\r
}\r
\r
+//________________________________________________________\r
+void AliTRDrecoTask::SetTriggerList(const Char_t *tl)\r
+{\r
+// Store list of triggers to be monitored\r
+ TString stl(tl);\r
+ if(fTriggerList){ fTriggerList->Delete(); delete fTriggerList;}\r
+ TObjArray *atl = stl.Tokenize(" ");\r
+ fTriggerList = (TObjArray*)atl->Clone("");\r
+ atl->Delete(); delete atl;\r
+ AliInfo("Running only for triggers::");\r
+ fTriggerList->Print();\r
+}\r
\r
\r
class TObjArray;\r
class TTreeSRedirector;\r
class AliTRDtrackV1;\r
-template <typename Value> class TVectorT;\r
-typedef class TVectorT<Float_t> TVector;\r
-class AliTRDrecoTask : public AliAnalysisTaskSE \r
+class AliTRDrecoTask : public AliAnalysisTaskSE\r
{\r
friend class AliEveTRDTrackList;\r
public:\r
virtual Bool_t GetRefFigure(Int_t ifig);\r
virtual void MakeSummary();\r
void MakeDetectorPlot(Int_t ly=0, const Option_t *opt="eta");\r
- void MakeDetectorPlotNEW(Int_t ly=0, const Option_t *opt="eta");\r
+ void MakeDetectorPlotOLD(Int_t ly=0, const Option_t *opt="eta");\r
Bool_t IsHeavyIon() const { return TestBit(kHeavyIon);};\r
Bool_t IsPP() const { return !TestBit(kHeavyIon);};\r
Bool_t HasFriends() const { return TestBit(kFriends);};\r
static Float_t SetNormZ(TH2 *h2, Int_t bxmin=1, Int_t bxmax=-1, Int_t bymin=1, Int_t bymax=-1, Float_t thr=0.);\r
static void SetRangeZ(TH2 *h2, Float_t m, Float_t M, Float_t thr=0.);\r
void SetRunTerminate(Bool_t runTerminate = kTRUE) { fRunTerminate = runTerminate; }\r
+ void SetTriggerList(const Char_t *tl);\r
virtual void Terminate(Option_t *);\r
\r
protected:\r
Char_t fNameId[10]; // unique identifier of task particularity\r
UChar_t fNRefFigures; // no of reference figures reported by task\r
TObjArray *fDets; //! OLD container to store detector position and status support should be discontinued \r
- TVector *fDetsV; //! NEW container to store detector position and status\r
+ TObjArray *fDetsV; //! NEW container to store detector position and status\r
TObjArray *fContainer; //! container to store results\r
AliTRDeventInfo *fEvent; //! Event Info\r
TObjArray *fTracks; //! Array of tracks\r
const AliTRDtrackInfo::AliMCinfo *fkMC; //! MC info\r
const AliTRDtrackInfo::AliESDinfo *fkESD;//! ESD info\r
Char_t fSpecies; //! species index +1 with charge sign\r
+ Char_t fTriggerSlot; //! selected triggers map (if requested)\r
Float_t fPt; //! p_t of the track being analyzed\r
Float_t fPhi; //! phi of the track being analyzed\r
Float_t fEta; //! eta of the track being analyzed\r
+ TObjArray *fTriggerList; //! optional trigger list to be monitored\r
\r
private:\r
AliTRDrecoTask(const AliTRDrecoTask&);\r
AliTRDresolution::AliTRDresolution()
:AliTRDrecoTask()
,fSteer(0)
- ,fIdxFrame(0)
,fPtThreshold(.3)
- ,fDyRange(0.75)
,fBCbinTOF(0)
,fBCbinFill(0)
,fBsign(kFALSE)
AliTRDresolution::AliTRDresolution(char* name, Bool_t xchange)
:AliTRDrecoTask(name, "TRD spatial and momentum resolution")
,fSteer(0)
- ,fIdxFrame(0)
,fPtThreshold(.3)
- ,fDyRange(0.75)
,fBCbinTOF(0)
,fBCbinFill(0)
,fBsign(kFALSE)
//
// Additionally the momentum resolution/pulls are calculated for usage in the
// PID calculation.
- //printf("AliTRDresolution::PlotTrackIn() :: track[%p]\n", (void*)track);
- const Int_t np(27);
- Float_t vp[np] = {
- 0.3375, 0.3625, 0.3875, 0.4125, 0.4375, 0.4625, 0.4875, 0.5125, 0.5375, 0.5625, 0.5875, 0.6125, 0.6375, 0.6625, 0.6875, 0.7125, 0.7375, 0.7625, 0.7875, 0.8125, 0.8375, 0.8625, 0.8875, 0.9125, 0.9375, 0.9625, 0.9875};
- Float_t vpar[np][7] = {
- {1620.77, 1637.76, 1033.49, 219.90, 300.00, 11234.87, 1113.33},
- {1761.62, 1772.56, 1002.12, 219.44, 300.00, 9247.25, 1180.65},
- {1759.54, 1805.76, 1011.67, 226.35, 54.74, 7739.81, 1120.52},
- {1785.01, 1847.86, 993.53, 225.54, 48.02, 6575.87, 1001.27},
- {1816.10, 1893.11, 993.37, 219.72, 70.20, 5860.19, 924.65},
- {1745.73, 1769.14, 984.64, 217.80, 99.74, 4987.99, 729.97},
- {1630.73, 1739.22, 987.80, 210.79, 140.88, 4404.52, 661.83},
- {1532.09, 1637.25, 969.80, 208.23, 183.06, 4023.80, 593.95},
- {1406.39, 1457.61, 973.71, 214.04, 221.52, 3684.11, 568.14},
- {1319.60, 1363.47, 973.81, 214.03, 213.82, 3358.99, 602.18},
- {1204.52, 1286.62, 975.00, 213.85, 249.08, 3086.86, 451.61},
- {1108.89, 1172.44, 969.34, 209.29, 234.00, 2857.36, 512.79},
- {1080.99, 1119.23, 956.90, 199.72, 232.16, 2662.46, 511.70},
- { 932.87, 1022.37, 996.10, 211.59, 191.86, 2495.88, 472.64},
- { 870.37, 927.52, 979.59, 211.22, 185.93, 2352.64, 471.50},
- { 813.63, 862.36, 976.39, 208.70, 170.30, 2228.81, 543.72},
- { 719.08, 764.51, 979.11, 216.24, 159.93, 2121.21, 483.85},
- { 686.97, 746.95, 981.91, 208.64, 172.86, 2027.26, 428.23},
- { 657.16, 660.34, 979.22, 220.23, 146.15, 1874.18, 418.02},
- { 586.85, 617.01, 994.70, 225.71, 151.23, 1816.44, 317.01},
- { 590.84, 553.40, 973.50, 208.46, 153.81, 1608.13, 407.54},
- { 548.43, 501.37, 979.41, 209.70, 130.38, 1551.19, 422.07},
- { 500.07, 476.37, 969.69, 209.10, 159.85, 1500.49, 321.93},
- { 484.45, 476.31, 990.48, 204.98, 117.53, 1608.40, 304.42},
- { 448.54, 447.14, 981.36, 205.21, 128.96, 1513.62, 244.57},
- { 412.45, 398.59, 999.26, 201.71, 164.19, 1441.81, 196.49},
- { 385.75, 390.55, 983.29, 214.26, 117.22, 1360.23, 174.48}
- };
- Float_t vqq[np][2] = {
- {10.1500, 0.0050},
- {37.4500, 0.0050},
- {39.8500, 0.0050},
- {37.1500, 0.0050},
- {39.5500, 0.0050},
- {38.9500, 0.0050},
- {37.1500, 0.0050},
- {32.6500, 0.0250},
- {22.1500, 0.0250},
- {10.1500, 0.0750},
- {15.5500, 0.0650},
- {10.1500, 0.1150},
- {11.0500, 0.1750},
- {10.1500, 0.1050},
- {10.1500, 0.1150},
- {10.1500, 0.1750},
- {10.7500, 0.1950},
- {11.0500, 0.2050},
- {11.3500, 0.1950},
- {12.8500, 0.1950},
- {10.1500, 0.2650},
- {10.1500, 0.2950},
- {10.1500, 0.3050},
- {10.1500, 0.2350},
- {11.6500, 0.2750},
- {10.7500, 0.2750},
- {10.1500, 0.2450}
- };
-
+
if(track) fkTrack = track;
if(!fkTrack){
AliDebug(4, "No Track defined.");
// down scale PID resolution
Int_t spc(fSpecies); if(spc==3) spc=2; if(spc==-3) spc=-2; if(spc>3) spc=3; if(spc<-3) spc=-3;
- //identify high dEdx component
- Int_t xid(0);
- if(!fTracklet->IsRowCross()){
- TF1 fl1("fl1", "landau", 5.5e2, 6.5e3);
- TF1 fl2("fl2", "landau", 5.5e2, 6.5e3);
- TF1 fg("fg", "gausn", -100, 100);
- fg.SetParameter(0, 1.);
- fg.SetParameter(1, -20.88);
- fg.SetParameter(2, 14.47);
- Double_t ang(TMath::DegToRad()*50.), cs[2] = {TMath::Cos(ang), TMath::Sin(ang)};
- Float_t p(fTracklet->GetMomentum()),
- dqdl(fTracklet->GetdQdl());
- if(p>vp[0] && p<vp[np-1]){
- Int_t jp(0); while(jp<np && p>vp[jp]) jp++;
- Int_t imin=TMath::Max(0, jp-1), imax=TMath::Min(jp, np-1);
- //if(spc==2) printf("p[%6.4f] [%6.4f %6.4f]\n", p, vp[imin], vp[imax]);
- for(Int_t ip(0); ip<3; ip++){
- fl1.SetParameter(ip, 0.5*(vpar[imin][ip+1] + vpar[imax][ip+1]));
- fl2.SetParameter(ip, 0.5*(vpar[imin][ip+4] + vpar[imax][ip+4]));
- }
- Float_t q0=fl1.Eval(dqdl), q1=fl2.Eval(dqdl);
- q1/=(q0+q1); q1*=1.e2;
-
- // calculate shape
- AliTRDcluster *c(NULL);
- Int_t ntb=0, q[26];Float_t qm(0.), qs(0.);
- for(Int_t itb(0); itb<26/*AliTRDseedV1::kNtb*/; itb++){
- q[itb]=0;
- if(!(c=fTracklet->GetClusters(itb))) continue;
- //Int_t col(c->GetPadCol());
- Short_t *sig = c->GetSignals();
- for(Int_t ipad(0); ipad<7; ipad++){
- if(sig[ipad]<0) continue; // avoid signals below baseline
- q[itb]+=sig[ipad];
- }
- if(!q[itb]) continue;
- qm+=q[itb]; ntb++;
- }
- if(ntb) qm/=ntb;
- for(Int_t itb(0); itb<26/*AliTRDseedV1::kNtb*/; itb++) qs += (q[itb]-qm)*(q[itb]-qm);
- if(ntb) qs/=ntb;
- if(qs>0.) qs=TMath::Sqrt(qs);
- Float_t qsm = cs[0]*qm-cs[1]*qs;
- Float_t q2 = 1.e2*fg.Eval(qsm);
- if(q1>0.5*(vqq[imin][0]+vqq[imax][0])&&q2<=0.5*(vqq[imin][1]+vqq[imax][1])) xid = 1;
- }
- }
-
if(DebugLevel()>=3){
Float_t tpc(fkESD->GetTPCdedx());
Float_t tof(fkESD->GetTOFbeta());
(*DebugStream()) << "trackIn"
- <<"xid=" << xid
<<"spc=" << spc
<<"tpc=" << tpc
<<"tof=" << tof
Double_t dphi = TMath::ATan(phit) - TMath::ASin(parR[2]);
Double_t val[kNdim+2];
- val[kBC] = xid;//bc==0?0:(bc<0?-1.:1.);
+ val[kBC] = fTriggerSlot;//bc==0?0:(bc<0?-1.:1.);
Double_t alpha = (0.5+AliTRDgeometry::GetSector(fTracklet->GetDetector()))*AliTRDgeometry::GetAlpha(),
cs = TMath::Cos(alpha),
sn = TMath::Sin(alpha);
h2->SetContour(9);
h2->GetZaxis()->SetRangeUser(zmin[ispec], zmax[ispec]);
h2->GetZaxis()->SetTitle("Rel. Abundancy [%]");h2->GetZaxis()->CenterTitle();
- TString tit(h2->GetTitle()); h2->SetTitle(Form("%s :: Relative Abundancy", ((*(tit.Tokenize("::")))[0])->GetName()));
+ TString tit(h2->GetTitle()); TObjArray *atit = tit.Tokenize("::");
+ h2->SetTitle(Form("%s :: Relative Abundancy", ((*atit)[0])->GetName()));
+ atit->Delete(); delete atit;
h2->Draw("colz");
MakeDetectorPlot(0);
}
}
php.AddLast(&specY[idx]);
if((h2 = specY[idx].Projection2D(kNstat, kNcontours, 1, kFALSE))) arr->AddAt(h2, jh++);
- if((h2 = (TH2*)gDirectory->Get(Form("%sEn", specY[idx].H()->GetName())))) arr->AddAt(h2, jh++);
if(ich && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInY%c%d", mc?"MC":"", chName[0], isp)))) (*pr1)+=specY[idx];
}
/*!dphi*/
f->SetParameter(5, 2.e-1);
}
-//________________________________________________________
-TObjArray* AliTRDresolution::BuildMonitorContainerCluster(const char* name, Bool_t expand, Float_t range)
-{
-// Build performance histograms for AliTRDcluster.vs TRD track or MC
-// - y reziduals/pulls
-
- TObjArray *arr = new TObjArray(2);
- arr->SetName(name); arr->SetOwner();
- TH1 *h(NULL); char hname[100], htitle[300];
-
- // tracklet resolution/pull in y direction
- snprintf(hname, 100, "%s_%s_Y", GetNameId(), name);
- snprintf(htitle, 300, "Y res for \"%s\" @ %s;tg(#phi);#Delta y [cm];%s", GetNameId(), name, "Detector");
- Float_t rr = range<0.?fDyRange:range;
- if(!(h = (TH3S*)gROOT->FindObject(hname))){
- Int_t nybins=50;
- if(expand) nybins*=2;
- h = new TH3S(hname, htitle,
- 48, -.48, .48, // phi
- 60, -rr, rr, // dy
- nybins, -0.5, nybins-0.5);// segment
- } else h->Reset();
- arr->AddAt(h, 0);
- snprintf(hname, 100, "%s_%s_YZpull", GetNameId(), name);
- snprintf(htitle, 300, "YZ pull for \"%s\" @ %s;%s;#Delta y / #sigma_{y};#Delta z / #sigma_{z}", GetNameId(), name, "Detector");
- if(!(h = (TH3S*)gROOT->FindObject(hname))){
- h = new TH3S(hname, htitle, 540, -0.5, 540-0.5, 100, -4.5, 4.5, 100, -4.5, 4.5);
- } else h->Reset();
- arr->AddAt(h, 1);
-
- return arr;
-}
-
-//________________________________________________________
-TObjArray* AliTRDresolution::BuildMonitorContainerTracklet(const char* name, Bool_t expand)
-{
-// Build performance histograms for AliExternalTrackParam.vs TRD tracklet
-// - y reziduals/pulls
-// - z reziduals/pulls
-// - phi reziduals
- TObjArray *arr = BuildMonitorContainerCluster(name, expand, 0.05);
- arr->Expand(5);
- TH1 *h(NULL); char hname[100], htitle[300];
-
- // tracklet resolution/pull in z direction
- snprintf(hname, 100, "%s_%s_Z", GetNameId(), name);
- snprintf(htitle, 300, "Z res for \"%s\" @ %s;tg(#theta);#Delta z [cm]", GetNameId(), name);
- if(!(h = (TH2S*)gROOT->FindObject(hname))){
- h = new TH2S(hname, htitle, 50, -1., 1., 100, -.05, .05);
- } else h->Reset();
- arr->AddAt(h, 2);
- snprintf(hname, 100, "%s_%s_Zpull", GetNameId(), name);
- snprintf(htitle, 300, "Z pull for \"%s\" @ %s;tg(#theta);#Delta z / #sigma_{z};row cross", GetNameId(), name);
- if(!(h = (TH3S*)gROOT->FindObject(hname))){
- h = new TH3S(hname, htitle, 50, -1., 1., 100, -5.5, 5.5, 2, -0.5, 1.5);
- h->GetZaxis()->SetBinLabel(1, "no RC");
- h->GetZaxis()->SetBinLabel(2, "RC");
- } else h->Reset();
- arr->AddAt(h, 3);
-
- // tracklet to track phi resolution
- snprintf(hname, 100, "%s_%s_PHI", GetNameId(), name);
- snprintf(htitle, 300, "#Phi res for \"%s\" @ %s;tg(#phi);#Delta #phi [rad];%s", GetNameId(), name, "Detector");
- Int_t nsgms=540;
- if(!(h = (TH3S*)gROOT->FindObject(hname))){
- h = new TH3S(hname, htitle, 48, -.48, .48, 100, -.5, .5, nsgms, -0.5, nsgms-0.5);
- } else h->Reset();
- arr->AddAt(h, 4);
-
- return arr;
-}
-
-//________________________________________________________
-TObjArray* AliTRDresolution::BuildMonitorContainerTrack(const char* name)
-{
-// Build performance histograms for AliExternalTrackParam.vs MC
-// - y resolution/pulls
-// - z resolution/pulls
-// - phi resolution, snp pulls
-// - theta resolution, tgl pulls
-// - pt resolution, 1/pt pulls, p resolution
-
- TObjArray *arr = BuildMonitorContainerTracklet(name);
- arr->Expand(11);
- TH1 *h(NULL); char hname[100], htitle[300];
- //TAxis *ax(NULL);
-
- // snp pulls
- snprintf(hname, 100, "%s_%s_SNPpull", GetNameId(), name);
- snprintf(htitle, 300, "SNP pull for \"%s\" @ %s;tg(#phi);#Delta snp / #sigma_{snp};entries", GetNameId(), name);
- if(!(h = (TH2I*)gROOT->FindObject(hname))){
- h = new TH2I(hname, htitle, 60, -.3, .3, 100, -4.5, 4.5);
- } else h->Reset();
- arr->AddAt(h, 5);
-
- // theta resolution
- snprintf(hname, 100, "%s_%s_THT", GetNameId(), name);
- snprintf(htitle, 300, "#Theta res for \"%s\" @ %s;tg(#theta);#Delta #theta [rad];entries", GetNameId(), name);
- if(!(h = (TH2I*)gROOT->FindObject(hname))){
- h = new TH2I(hname, htitle, 100, -1., 1., 100, -5e-3, 5e-3);
- } else h->Reset();
- arr->AddAt(h, 6);
- // tgl pulls
- snprintf(hname, 100, "%s_%s_TGLpull", GetNameId(), name);
- snprintf(htitle, 300, "TGL pull for \"%s\" @ %s;tg(#theta);#Delta tgl / #sigma_{tgl};entries", GetNameId(), name);
- if(!(h = (TH2I*)gROOT->FindObject(hname))){
- h = new TH2I(hname, htitle, 100, -1., 1., 100, -4.5, 4.5);
- } else h->Reset();
- arr->AddAt(h, 7);
-
- const Int_t kNdpt(150);
- const Int_t nNspc = 2*kNspc+1;
- Float_t lPt=0.1, lDPt=-.1, lSpc=-5.5;
- Float_t binsPt[kNpt+1], binsSpc[nNspc+1], binsDPt[kNdpt+1];
- for(Int_t i=0;i<kNpt+1; i++,lPt=TMath::Exp(i*.15)-1.) binsPt[i]=lPt;
- for(Int_t i=0; i<nNspc+1; i++,lSpc+=1.) binsSpc[i]=lSpc;
- for(Int_t i=0; i<kNdpt+1; i++,lDPt+=2.e-3) binsDPt[i]=lDPt;
-
- // Pt resolution
- snprintf(hname, 100, "%s_%s_Pt", GetNameId(), name);
- snprintf(htitle, 300, "#splitline{P_{t} res for}{\"%s\" @ %s};p_{t} [GeV/c];#Delta p_{t}/p_{t}^{MC};SPECIES", GetNameId(), name);
- if(!(h = (TH3S*)gROOT->FindObject(hname))){
- h = new TH3S(hname, htitle,
- kNpt, binsPt, kNdpt, binsDPt, nNspc, binsSpc);
- //ax = h->GetZaxis();
- //for(Int_t ib(1); ib<=ax->GetNbins(); ib++) ax->SetBinLabel(ib, fgParticle[ib-1]);
- } else h->Reset();
- arr->AddAt(h, 8);
- // 1/Pt pulls
- snprintf(hname, 100, "%s_%s_1Pt", GetNameId(), name);
- snprintf(htitle, 300, "#splitline{1/P_{t} pull for}{\"%s\" @ %s};1/p_{t}^{MC} [c/GeV];#Delta(1/p_{t})/#sigma(1/p_{t});SPECIES", GetNameId(), name);
- if(!(h = (TH3S*)gROOT->FindObject(hname))){
- h = new TH3S(hname, htitle,
- kNpt, 0., 2., 100, -4., 4., kNspc, -5.5, kNspc-.5);
- //ax = h->GetZaxis();
- //for(Int_t ib(1); ib<=ax->GetNbins(); ib++) ax->SetBinLabel(ib, fgParticle[ib-1]);
- } else h->Reset();
- arr->AddAt(h, 9);
- // P resolution
- snprintf(hname, 100, "%s_%s_P", GetNameId(), name);
- snprintf(htitle, 300, "P res for \"%s\" @ %s;p [GeV/c];#Delta p/p^{MC};SPECIES", GetNameId(), name);
- if(!(h = (TH3S*)gROOT->FindObject(hname))){
- h = new TH3S(hname, htitle,
- kNpt, binsPt, kNdpt, binsDPt, nNspc, binsSpc);
- //ax = h->GetZaxis();
- //for(Int_t ib(1); ib<=ax->GetNbins(); ib++) ax->SetBinLabel(ib, fgParticle[ib-1]);
- } else h->Reset();
- arr->AddAt(h, 10);
-
- return arr;
-}
-
-
//________________________________________________________
TObjArray* AliTRDresolution::Histos()
{
Int_t trinNbins[mdim]; memcpy(trinNbins, fgkNbins, kNdim*sizeof(Int_t));
Double_t trinMin[mdim]; memcpy(trinMin, fgkMin, kNdim*sizeof(Double_t));
Double_t trinMax[mdim]; memcpy(trinMax, fgkMax, kNdim*sizeof(Double_t));
+ if(fTriggerList){
+ trinTitle[kBC]=StrDup("trigger");
+ trinNbins[kBC] = TMath::Power(2.,fTriggerList->GetEntriesFast())-1;
+ trinMin[kBC] = 0.5; trinMax[kBC] = trinNbins[kBC]+.5;
+ }
trinNbins[kSpeciesChgRC] = Int_t(kNcharge)*(kNspc-1)+1; trinMin[kSpeciesChgRC] = -kNspc+0.5; trinMax[kSpeciesChgRC] = kNspc-0.5;
if(DebugLevel()>=1){trinNbins[kPt]=24; trinMax[kPt] = 23.5;}
trinTitle[kNdim]=StrDup("bin_p"); trinNbins[kNdim] = (DebugLevel()>=1?24:kNpt); trinMin[kNdim] = -0.5; trinMax[kNdim] = trinNbins[kNdim]-.5;
void UserCreateOutputObjects();
// Float_t GetCorrectionX(Int_t det, Int_t tb) const {return fXcorr[det][tb];}
static void GetRangeZ(TH2 *h2, Float_t &m, Float_t &M);
- Float_t GetDyRange() const {return fDyRange;}
Float_t GetPtThreshold() const {return fPtThreshold;}
static Int_t GetPtBin(Float_t pt);
Bool_t GetRefFigure(Int_t ifig);
TH1* PlotMC(const AliTRDtrackV1 *t=NULL);
static Bool_t Process(TH2* const /*h2*/, TGraphErrors **/*g*/, Int_t stat=100){ return Bool_t(stat);}
- void SetDyRange(Float_t dy) {fDyRange = dy;}
void SetPtThreshold(Float_t pt) { fPtThreshold = pt;}
- void SetBCselectTOF(Int_t b=0) { fBCbinTOF = b==0?2:(b<0?1:3);}
+ void SetBCselectTOF(Int_t b=0) { fBCbinTOF = b;}
void SetBCselectFill(Int_t b=0) { fBCbinFill = b<0||b>3499?1:b+1;}
void SetBsign(Int_t b=0) { fBsign = Bool_t(b);}
void SetProcesses(Bool_t det, Bool_t cl, Bool_t trklt, Bool_t trkin);
static Bool_t UseTrack(const Int_t np, const AliTrackPoint *points, Float_t params[10]);
void AdjustF1(TH1 *h, TF1 *f);
- TObjArray* BuildMonitorContainerCluster(const char* name, Bool_t expand=kFALSE, Float_t range=-1.);
- TObjArray* BuildMonitorContainerTracklet(const char* name, Bool_t expand=kFALSE);
- TObjArray* BuildMonitorContainerTrack(const char* name);
void DrawSigma(TH2 *h2, const Char_t *t, Float_t m=0., Float_t M=-1., Float_t scale=1);
void GetLandauMpvFwhm(TF1 * const f, Float_t &mpv, Float_t &xm, Float_t &xM);
void GetRange(TH2 *h2, Char_t mod, Float_t *range);
UShort_t fSteer; // bit map to steer internal behaviour of class
// MakeProjection [kTrackIn kTracklet kCluster kDetector]
// Dump3D [4+kTrackIn 4+kTracklet 4+kCluster 4+kDetector]
- UShort_t fIdxFrame; // frame counter (internal)
Float_t fPtThreshold; // pt threshold for some performance plots
- Float_t fDyRange; // min/max dy
Int_t fBCbinTOF; // set/select by TOF BC index
Int_t fBCbinFill; // set/select by Bunch Fill index
Bool_t fBsign; // sign of magnetic field (kFALSE[-] kTRUE[+])
TObjArray *fCl; //! cluster2track calib
TObjArray *fMCcl; //! cluster2mc calib
- ClassDef(AliTRDresolution, 10) // TRD tracking resolution task
+ ClassDef(AliTRDresolution, 11) // TRD tracking resolution task
};
#endif
--- /dev/null
+////////////////////////////////////////////////////////////////////////////
+// //
+// Chamber Info Incapsulation //
+// //
+// Authors: //
+// Alexandru Bercuci <A.Bercuci@gsi.de> //
+// //
+////////////////////////////////////////////////////////////////////////////
+
+
+
+#include "TBox.h"
+
+#include "AliLog.h"
+#include "AliTRDchmbInfo.h"
+#include "AliTRDgeometry.h"
+
+ClassImp(AliTRDchmbInfo)
+//____________________________________________
+AliTRDchmbInfo::AliTRDchmbInfo()
+ :TNamed()
+ ,fDet(-1)
+ ,fStatus(0)
+ ,fBox(NULL)
+{
+// Constructor. Reset all fields.
+ memset(fPosition, 0, 4*sizeof(Double_t));
+}
+
+
+//____________________________________________
+AliTRDchmbInfo::AliTRDchmbInfo(Int_t det, Int_t stat, Double_t p[4])
+ :TNamed(Form("D%03d", det), "")
+ ,fDet(det)
+ ,fStatus(stat)
+ ,fBox(NULL)
+{
+// Constructor. Set position fields.
+ SetPosition(p);
+}
+
+//____________________________________________
+AliTRDchmbInfo::~AliTRDchmbInfo()
+{
+// Destructor.
+ if(fBox) delete fBox;
+}
+
+//____________________________________________
+void AliTRDchmbInfo::Print(Option_t */*o*/) const
+{
+// Dump formated chamber info
+
+ printf(" DET[%03d] Status[%d]\n", fDet, fStatus);
+ printf(" eta[%f %f] phi[%f %f]\n", fPosition[0], fPosition[2], fPosition[1], fPosition[3]);
+}
+
+//____________________________________________
+void AliTRDchmbInfo::SetDetector(Int_t det)
+{
+// register detector no.
+ fDet = det;
+ SetName(Form("D%03d", det));
+}
+
+//____________________________________________
+void AliTRDchmbInfo::Draw(Option_t *opt)
+{
+// set style parameters according to chamber status
+
+ Int_t style[] = {0, 3003, 3008};
+ if(!fBox) fBox = new TBox();
+ fBox->SetLineColor(kBlack);fBox->SetFillColor(kWhite);fBox->SetFillStyle(style[0]);
+
+ Float_t xmin(0.), xmax(0.);
+ if(strcmp(opt, "eta")==0){
+ xmin=fPosition[0]; xmax=fPosition[2];
+ } else if(strcmp(opt, "pad")==0){
+ Int_t stk(AliTRDgeometry::GetStack(fDet));
+ xmin=-0.6+16*(4-stk)-(stk<2?4:0); xmax=xmin+(stk==2?12:16)-0.2;
+ } else {
+ AliWarning(Form("Unknow option \"%s\"", opt));
+ return;
+ }
+
+ AliDebug(2, Form("D[%03d] 0[%+4.1f(%+4.1f) %+4.1f] 1[%+4.1f(%+4.1f) %+4.1f] opt[%d]", fDet, xmin, fPosition[0], fPosition[1], xmax, fPosition[2], fPosition[3], fStatus));
+ fBox->SetX1(xmin); fBox->SetX2(xmax); fBox->SetY1(fPosition[1]); fBox->SetY2(fPosition[3]);
+ if(fStatus==1){
+ fBox->SetFillStyle(style[1]);fBox->SetFillColor(kBlack);
+ } else {
+ if(fStatus==2){
+ TBox *b = fBox->DrawBox(xmin, fPosition[1], xmax, 0.5*(fPosition[3]+fPosition[1]));
+ b->SetFillStyle(style[2]);b->SetFillColor(kGreen);
+ } else if(fStatus==3){
+ TBox *b = fBox->DrawBox(xmin, 0.5*(fPosition[3]+fPosition[1]), xmax, fPosition[3]);
+ b->SetFillStyle(style[2]);b->SetFillColor(kRed);
+ } else if(fStatus!=0){
+ AliError(Form("Wrong chmb. status[%d] for det[%03d]", fStatus, fDet));
+ return;
+ }
+ }
+ fBox->Draw();
+}
--- /dev/null
+#ifndef ALITRDCHMBINFO_H
+#define ALITRDCHMBINFO_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+////////////////////////////////////////////////////////////////////////////
+// //
+// Chamber Info Incapsulation //
+// //
+// Authors: //
+// Alexandru Bercuci <A.Bercuci@gsi.de> //
+// //
+////////////////////////////////////////////////////////////////////////////
+
+#ifndef ROOT_TNamed
+#include "TNamed.h"
+#endif
+
+class TBox;
+class TCollection;
+class AliTRDchmbInfo : public TNamed
+{
+public:
+ AliTRDchmbInfo();
+ AliTRDchmbInfo(Int_t det, Int_t stat, Double_t p[4]);
+ virtual ~AliTRDchmbInfo();
+
+ void Draw(Option_t* option = "eta");
+ Short_t GetDetector() const { return fDet;}
+ const Double_t* GetPosition() const { return &fPosition[0];}
+ Char_t GetStatus() const { return fStatus;}
+ Long64_t Merge(TCollection* /*list*/) { return 0;}
+ void Print(Option_t *o="") const; // *MENU*
+ void SetDetector(Int_t det);
+ void SetPosition(Double_t p[4]) { memcpy(fPosition, p, 4*sizeof(Double_t));}
+ void SetStatus(Int_t stat) { fStatus = stat;}
+
+private:
+ AliTRDchmbInfo(const AliTRDchmbInfo &ref);
+ const AliTRDchmbInfo& operator=(const AliTRDchmbInfo &ref);
+
+ Short_t fDet; // chamber no.
+ Char_t fStatus; // status of chamber
+ Double_t fPosition[4]; // eta-phi position
+ TBox *fBox; //! graph representation of chmb info
+ ClassDef(AliTRDchmbInfo, 1) // TRD chamber position/status representation
+};
+
+#endif
+
TObjString *trg(NULL);
while((trg = dynamic_cast<TObjString *>(trgIter->Next())))
passTrigger = passTrigger || CheckTrigger(trg->String().Data());
- delete triggers; delete trgIter;
+ triggers->Delete(); delete triggers; delete trgIter;
select = select && passTrigger;
}
if(!select){
return -1;
}
+//____________________________________________________________________
+TString AliTRDeventInfo::GetFiredTriggerClasses()
+{
+// copy of similar function from AliESDEvent
+ return (fRun&&fHeader)?fRun->GetFiredTriggerClasses(fHeader->GetTriggerMask()):"";
+}
+
//____________________________________________________________________
Int_t AliTRDeventInfo::GetMultiplicityBin(Int_t n)
{
////////////////////////////////////////////////////////////////////////////
#include <TObject.h>
+#include <TString.h>
class AliESDHeader;
class AliESDRun;
AliESDRun* GetRunInfo() const { return fRun; }
Int_t GetCentrality() const { return fCentrality; }
static Int_t GetCentralityBin(Float_t cenPer);
+ TString GetFiredTriggerClasses();
Int_t GetMultiplicity() const { return fMult; }
static Int_t GetMultiplicityBin(Int_t n);
UShort_t GetBunchFill() const;
if(names->GetEntriesFast()!=2){
AliError(Form("Wrong trend value name format. Trend value name should be of the form \"trendClass_trendValue\" with only one \"_\" character."));
} else SetName(n);
+ names->Delete(); delete names;
//memset(fAlarmMessage, 0, kNlevels*sizeof(Char_t*));
memset(fNotifiable, 0, kNnotifiable*sizeof(TNamed*));
//____________________________________________
const char* AliTRDtrendValue::GetClassName() const
{
-// Check task to which value belong
+// Check task to which value belong. Return value on heap !
TString s(TNamed::GetName());
TObjArray *names(s.Tokenize("_"));
if(names->GetEntriesFast()!=2){
AliError(Form("Wrong trend value name format."));
return NULL;
}
-
- return ((TObjString*)names->At(0))->String().Data();
+ char *cn=StrDup(((TObjString*)(*names)[0])->GetName());
+ names->Delete(); delete names;
+ return cn;
}
//____________________________________________
const char* AliTRDtrendValue::GetValueName() const
{
-// value name
+// Value name. Return value on heap !
TString s(TNamed::GetName());
TObjArray *names(s.Tokenize("_"));
if(names->GetEntriesFast()!=2){
AliError(Form("Wrong trend value name format."));
return NULL;
}
- return ((TObjString*)names->At(1))->String().Data();
+ char *vn=StrDup(((TObjString*)(*names)[1])->GetName());
+ names->Delete(); delete names;
+ return vn;
}
//____________________________________________
#include "TH1F.h"
#include "TAxis.h"
#include "TGraph.h"
+#include "TLine.h"
#include "TCanvas.h"
#include "TString.h"
} else {
fValue->SetResponsible(((TObjString*)r->At(0))->String().Data(), ((TObjString*)r->At(1))->String().Data());
}
+ r->Delete(); delete r;
}
if(notifiables){
TString s(notifiables);
} else {
fValue->SetNotifiable(((TObjString*)r->At(0))->String().Data(), ((TObjString*)r->At(1))->String().Data());
}
+ r->Delete(); delete r;
}
+ n->Delete(); delete n;
}
}
}
//____________________________________________
-Bool_t AliTRDtrendingManager::MakeTrends(const char *fileList)
+TH1* AliTRDtrendingManager::MakeTrends(const char *fileList, TObjArray *dump)
{
// Make trends with reference to DB for all trend files in "fileList".
// The DB should be loaded
if(!fEntries){
AliWarning("Trending map undefined");
- return kFALSE;
+ return NULL;
}
Int_t ntv(fEntries->GetEntries());
FILE *fp(NULL);
if(!(fp= fopen(fileList, "rt"))){
AliWarning(Form("Can not open file list \"%s\"", fileList));
- return kFALSE;
+ return NULL;
}
+ Int_t *na = new Int_t[ntv]; memset(na, 0, ntv*sizeof(Int_t));
+ Float_t *la = new Float_t[ntv]; memset(la, 0, ntv*sizeof(Float_t));
Float_t *lm = new Float_t[ntv]; for(Int_t im(0); im<ntv; im++) lm[im] = 1.e5;
Float_t *lM = new Float_t[ntv]; for(Int_t im(0); im<ntv; im++) lM[im] = -1.e5;
TGraph **g = new TGraph*[ntv]; memset(g, 0, ntv*sizeof(TGraph*));
TObjArray *afp=sfp.Tokenize("/");
Int_t idx = afp->GetEntries()-2;
Int_t rno = ((TObjString*)(*afp)[idx])->GetString().Atoi();
-
+ afp->Delete(); delete afp;
if(!TFile::Open(sfp.Data())) continue;
+
run[nr] = rno;
for(Int_t it(0); it<ntv; it++){
if(!(TV = (AliTRDtrendValue*)fEntries->At(it))) continue;
AliWarning(Form("Missing %09d.%s", rno, TV->GetName()));
continue;
}
- if(IsRelativeMeanSigma()) (*tv)/=(*TV);
+ if(tv->GetVal()<-998. ||
+ (strstr(TV->GetName(), "TRDcheckDET")&&TMath::Abs(tv->GetVal())<1.e-5)) continue;
+ if(IsRelativeMeanSigma()){
+ (*tv)/=(*TV);
+ la[it]+=tv->GetVal(); na[it]++;
+ } else {
+ if(tv->GetVal()<lm[it]) lm[it]=tv->GetVal();
+ if(tv->GetVal()>lM[it])lM[it]=tv->GetVal();
+ }
if(!g[it]){
g[it] = new TGraph();
g[it]->SetNameTitle(TV->GetName(), TV->GetTitle());
- g[it]->SetMarkerStyle(4);g[it]->SetMarkerSize(0.8);
+ g[it]->SetMarkerStyle(4);g[it]->SetMarkerSize(1.2);
+ g[it]->SetLineStyle(2);g[it]->SetLineWidth(1);
}
g[it]->SetPoint(g[it]->GetN(), nr, tv->GetVal());
- if(!IsRelativeMeanSigma() && tv->GetVal()>-999.){
- if(tv->GetVal()<lm[it]) lm[it]=tv->GetVal();
- if(tv->GetVal()>lM[it]) lM[it]=tv->GetVal();
- }
}
nr++;
}
TAxis *ay = hT->GetYaxis(); ay->SetTitleOffset(IsRelativeMeanSigma()?0.4:0.75);ay->CenterTitle(); ay->SetAxisColor(kRed); ay->SetDecimals();
for(Int_t ir(0); ir<nr; ir++) ax->SetBinLabel(ir+1, Form("%09d", run[ir]));
- TCanvas *c = new TCanvas("c", "TRD Trend", 1, 1, 1200, 500);
+ TLine *line(NULL);
+ TCanvas *c = new TCanvas("c", "TRD Trend", 1, 1, 2400, 1000);
c->SetLeftMargin(IsRelativeMeanSigma()?0.03666361:0.05685619);
c->SetRightMargin(0.005499542);
c->SetTopMargin(0.02542373);
if(IsRelativeMeanSigma()){
ay->SetRangeUser(-5, 5);
ay->SetTitle(Form("#bf{%s [#sigmau]}", g[it]->GetTitle()));
+ line = new TLine(-0.5, na[it]?(la[it]/na[it]):0., nr-0.5, na[it]?(la[it]/na[it]):0.);
+ line->SetLineColor(kBlue);
} else {
ay->SetRangeUser(lm[it]-0.1*(lM[it]-lm[it]), lM[it]+0.1*(lM[it]-lm[it]));
ay->SetTitle(Form("#bf{%s}", g[it]->GetTitle()));
}
hT->Draw("p");
- g[it]->Draw("p");
+ g[it]->Draw("pl");
+ if(line) line->Draw();
c->Modified(); c->Update(); c->SaveAs(Form("Trend_%s.gif", g[it]->GetName()));
- delete g[it];
+ if(dump) dump->Add(g[it]);
+ else delete g[it];
+ if(line) delete line;
}
delete [] g;
delete [] lm;
delete [] lM;
- return kTRUE;
+ delete [] la;
+ delete [] na;
+ return hT;
}
//____________________________________________
} else {
fValue->SetResponsible(((TObjString*)r->At(0))->String().Data(), ((TObjString*)r->At(1))->String().Data());
}
+ r->Delete(); delete r;
}
if(notifiables){
s=notifiables;
} else {
fValue->SetNotifiable(((TObjString*)r->At(0))->String().Data(), ((TObjString*)r->At(1))->String().Data());
}
+ r->Delete(); delete r;
}
+ n->Delete(); delete n;
}
return kTRUE;
}
#include "AliTRDtrendValue.h"
#endif
+class TH1;
class TObjArray;
class AliTRDtrendingManager : public TObject
{
static AliTRDtrendingManager* Instance();
Bool_t IsRelativeMeanSigma() const { return TestBit(kRelative);}
void Load(const char *fn = "$ALICE_ROOT/PWGPP/TRD/data/TRD.Trend.root");
- Bool_t MakeTrends(const char *fileList);
+ TH1* MakeTrends(const char *fileList, TObjArray *dump=NULL);
Bool_t ModifyValue(const Char_t *name
,const Char_t *title
,Double_t mean,Double_t sigm
--- /dev/null
+////////////////////////////////////////////////////////////////////////////
+// //
+// Mergable Trigger List //
+// //
+// Authors: //
+// Alexandru Bercuci <A.Bercuci@gsi.de> //
+// //
+////////////////////////////////////////////////////////////////////////////
+
+
+
+#include "TObjArray.h"
+#include "TObjString.h"
+#include "TH1.h"
+
+#include "AliLog.h"
+
+#include "AliTRDtriggerInfo.h"
+
+ClassImp(AliTRDtriggerInfo)
+//____________________________________________
+AliTRDtriggerInfo::AliTRDtriggerInfo()
+ :TObject()
+ ,fTriggerList(NULL)
+ ,fHisto(NULL)
+{
+// Constructor. Reset all fields.
+ memset(fTriggerSel, 0, kTriggerListSize *sizeof(Bool_t));
+ memset(fTriggerStat, 0, kTriggerListSize *sizeof(Int_t));
+}
+
+//____________________________________________
+AliTRDtriggerInfo::~AliTRDtriggerInfo()
+{
+// Destructor.
+ if(fHisto) delete fHisto;
+ if(fTriggerList){ fTriggerList->Delete(); delete fTriggerList;}
+}
+
+//____________________________________________
+Int_t AliTRDtriggerInfo::Add(const Char_t *trigger, Int_t nstat, Bool_t select)
+{
+// Add trigger named "trigger" to the list. If trigger is not on the list it is add.
+// The statistics of this trigger is set to "nstat" [default=1]
+// On return the position incremented
+
+ Int_t itrig(-1), nt(0);
+ if((nt=GetNTriggers()) && (itrig = GetTrigger(trigger))>=0){
+ fTriggerSel[itrig] = select;
+ fTriggerStat[itrig]+= nstat;
+ } else {
+ if(!nt) fTriggerList = new TObjArray;
+ fTriggerList->AddAt(new TObjString(trigger), nt);
+ fTriggerStat[nt] = nstat;
+ fTriggerSel[nt] = select;
+ nt++;
+ }
+ return nt;
+}
+
+//____________________________________________
+void AliTRDtriggerInfo::Draw(Option_t *opt)
+{
+// Draw trigger statistics. Via parameter "opt" one can select a sublist of trigger names
+
+ Int_t nt(0);
+ if(!(nt = GetNTriggers())) return;
+ if(fHisto && fHisto->GetNbinsX() != nt){ delete fHisto; fHisto=NULL;}
+//
+ if(!fHisto) fHisto = new TH1I("hTriggerStat", "Trigger Statistics;TRIGGER;Freq. [%]", nt, 0.5, nt+0.5);
+ TAxis *ax(fHisto->GetXaxis()); fHisto->Reset();
+ ax->SetTitleOffset(6.5); ax->CenterTitle();
+ fHisto->SetFillStyle(3001);fHisto->SetFillColor(kGreen);
+ fHisto->SetBarWidth(0.8);fHisto->SetBarOffset(0.1);
+//
+ Int_t ibin(0);
+ if(strcmp(opt, "")!=0){
+ TString sopt(opt);
+ TObjArray *optTriggers = sopt.Tokenize(" ");
+ for(Int_t iopt(0); iopt<optTriggers->GetEntries(); iopt++){
+ const Char_t *trigger = ((TObjString*)(*optTriggers)[iopt])->GetName();
+ Int_t itrig(-1);
+ if((itrig = GetTrigger(trigger))<0) continue;
+ ibin++;
+ ax->SetBinLabel(ibin, trigger);
+ fHisto->SetBinContent(ibin, fTriggerStat[itrig]);
+ }
+ optTriggers->Delete(); delete optTriggers;
+ } else {
+ for(Int_t jtrig(nt); jtrig--;){
+ ibin++;
+ ax->SetBinLabel(ibin, ((TObjString*)(*fTriggerList)[jtrig])->GetName());
+ fHisto->SetBinContent(ibin, fTriggerStat[jtrig]);
+ }
+ }
+ ax->SetRange(1, ibin);
+ fHisto->Scale(1.e2/fHisto->Integral());
+ fHisto->Draw("hbar2");
+
+ return;
+}
+
+//____________________________________________
+Int_t AliTRDtriggerInfo::GetNTriggers() const
+{
+// Return no of trigger classes
+ return fTriggerList?fTriggerList->GetEntries():0;
+}
+
+//____________________________________________
+const char* AliTRDtriggerInfo::GetTrigger(Int_t it) const
+{
+// Return trigger by index. 0 in case it is not found
+ if(it<0||it>=GetNTriggers()) return 0;
+ return ((TObjString*)(*fTriggerList)[it])->GetName();
+}
+
+//____________________________________________
+Int_t AliTRDtriggerInfo::GetTrigger(const char *trigger) const
+{
+// Return trigger index by name. -1 in case trigger not registred
+
+ for(Int_t jtrig(GetNTriggers()); jtrig--;){
+ if(((TObjString*)(*fTriggerList)[jtrig])->String().CompareTo(trigger)==0) return jtrig;
+ }
+ return -1;
+}
+
+//____________________________________________
+Long64_t AliTRDtriggerInfo::Merge(TCollection* list)
+{
+// Merge list of trigger statistics. Add new triggers if neccessary
+
+ Int_t imerge(1);
+ AliTRDtriggerInfo *o(NULL);
+ TIterator *it(list->MakeIterator());
+ while((o = (AliTRDtriggerInfo*)it->Next())){
+ for(Int_t jtrig(o->GetNTriggers()); jtrig--;) Add(((TObjString*)(*o->fTriggerList)[jtrig])->GetName(), o->fTriggerStat[jtrig], o->fTriggerSel[jtrig]);
+ imerge++;
+ }
+ return imerge;
+}
+
+//____________________________________________
+void AliTRDtriggerInfo::Print(Option_t *opt) const
+{
+// Print trigger statistics. If opt="a" detailed trigger/statistics is also provided
+
+ Int_t nt(GetNTriggers());
+ Int_t stat(0); for(Int_t jtrig(0); jtrig<nt; jtrig++) stat+=fTriggerStat[jtrig];
+ printf("TriggerClasses[%3d] Stat[%5d]\n", nt, stat);
+ if(!nt || strcmp(opt,"a")!=0) return;
+
+ for(Int_t jtrig(0); jtrig<nt; jtrig++) printf(" %3d \"%s\" [%5d]\n", jtrig, ((TObjString*)(*fTriggerList)[jtrig])->GetName(), fTriggerStat[jtrig]);
+}
+
+
--- /dev/null
+#ifndef ALITRDTRIGGERINFO_H
+#define ALITRDTRIGGERINFO_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+////////////////////////////////////////////////////////////////////////////
+// //
+// Chamber Info Incapsulation //
+// //
+// Authors: //
+// Alexandru Bercuci <A.Bercuci@gsi.de> //
+// //
+////////////////////////////////////////////////////////////////////////////
+
+#ifndef ROOT_TObject
+#include "TObject.h"
+#endif
+#define kTriggerListSize 1000
+
+class TH1;
+class TCollection;
+class TObjArray;
+class AliTRDtriggerInfo : public TObject
+{
+public:
+ AliTRDtriggerInfo();
+ virtual ~AliTRDtriggerInfo();
+
+ Int_t Add(const Char_t *trigger, Int_t nstat=1, Bool_t select=kFALSE);
+ void Draw(Option_t* option = ""); // *MENU*
+ Int_t GetNTriggers() const;
+ const char* GetTrigger(Int_t it) const;
+ Int_t GetTrigger(const char *trigger) const;
+
+ Bool_t IsSelected(Int_t it) const { return it>=0&&it<GetNTriggers()?fTriggerSel[it]:kFALSE;}
+ Bool_t IsSelected(const char* trigger) const { Int_t idx(GetTrigger(trigger)); return IsSelected(idx);}
+
+ Long64_t Merge(TCollection* list);
+ void Print(Option_t *o="") const; // *MENU*
+ void SetSelectTrigger(Int_t it, Bool_t sel=kTRUE) { if(it>=0&&it<GetNTriggers()) fTriggerSel[it]=sel;}
+private:
+ AliTRDtriggerInfo(const AliTRDtriggerInfo &ref);
+ const AliTRDtriggerInfo& operator=(const AliTRDtriggerInfo &ref);
+
+ Bool_t fTriggerSel[kTriggerListSize]; // trigger selection corresponding to fTriggerList
+ Int_t fTriggerStat[kTriggerListSize]; // trigger statistics corresponding to fTriggerList
+ TObjArray *fTriggerList; // list of trigger names
+ TH1 *fHisto; //! graphic representation of trigger statistics
+
+ ClassDef(AliTRDtriggerInfo, 1) // trigger statistics
+};
+
+#endif
+
res->SetPostProcess(kFALSE);
//res->SetDebugLevel(3);
res->SetPtThreshold(0.2);
+ //res->SetTriggerList("CINT7WUHJT-S-NOPF-CENT CINT7WUHSE-S-NOPF-CENT CINT7WUHQU-S-NOPF-CENT CEMC7WU-S-NOPF-ALL");
res->SetNameId(suffix[itq]);
mgr->ConnectInput(res, 0, mgr->GetCommonInputContainer()); // connect main (ESD) container
mgr->ConnectInput(res, 1, ci[itq]); // conect track info container
delete info;
return;
}
- if(summary) Info("processGEN", "MakeSummary() not implemented yet");//info->MakeSummary();
- else{
- for(Int_t ipic(0); ipic<info->GetNRefFigures(); ipic++){
- c->Clear();
- if(!info->GetRefFigure(ipic)) continue;
- c->SaveAs(Form("%s_Fig%02d.gif", info->GetName(), ipic));
- }
- }
+ info->MakeSummary();
+// else{
+// for(Int_t ipic(0); ipic<info->GetNRefFigures(); ipic++){
+// c->Clear();
+// if(!info->GetRefFigure(ipic)) continue;
+// c->SaveAs(Form("%s_Fig%02d.gif", info->GetName(), ipic));
+// }
+// }
delete info;
}
AliTRDtrendingManager *tm = AliTRDtrendingManager::Instance();
tm->Load(db);
tm->SetRelativeMeanSigma(relative);
- tm->MakeTrends(fl);
+
+ TH1 *h1(NULL); TObjArray *trend = new TObjArray(100);
+ h1 = tm->MakeTrends(fl, trend);
+
+ TFile *fOut = TFile::Open("Trend_TRDgraph.root", "RECREATE");
+ h1->SetDirectory(fOut); h1->Write();
+ trend->Write();
+ fOut->Close();
return;
}
continue;
}
if((h =(TH1F*)gROOT->FindObject("hp"))){delete h; h = NULL;}
- h = new TH1F("hp", Form(";%s;entries", tvn[it][0]), 10, 0.5*(3*xmin-xmax), 0.5*(3*xmax - xmin));
+ h = new TH1F("hp", Form(";%s;entries", tvn[it][0]), 25, 0.5*(3*xmin-xmax), 0.5*(3*xmax - xmin));
tDB->Draw(Form("%s>>hp", tvn[it][0]), Form("%s>-100", tvn[it][0]));
if(h->Integral() < 1) continue;
f.SetParameter(0, h->Integral());
/* } else if(strstr(tvn[it][0], "TrkInQ") || strstr(tvn[it][0], "TrkInQS")) {
m=-2.; s=0.2;*/
// } else {
- m=f.GetParameter(1); s=f.GetParameter(2);
+ m=f.GetParameter(1); s=h->GetRMS()/*f.GetParameter(2)*/;
// }
tm->AddValue(tvn[it][0], m, s, tvn[it][1], res[it>13], notifiable);
}