Various updates
authorabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 8 May 2012 13:01:44 +0000 (13:01 +0000)
committerabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 8 May 2012 13:01:44 +0000 (13:01 +0000)
infoGen :: add ITS track minitoring. Preparing for ITS seeding of TRD
           new chamber map definition
recoTask :: general definition of pt significant ranges
resolution :: extend user steering
run.C :: extend for using directly alien files

PWGPP/TRD/AliTRDefficiency.cxx
PWGPP/TRD/AliTRDefficiency.h
PWGPP/TRD/AliTRDinfoGen.cxx
PWGPP/TRD/AliTRDinfoGen.h
PWGPP/TRD/AliTRDrecoTask.cxx
PWGPP/TRD/AliTRDrecoTask.h
PWGPP/TRD/AliTRDresolution.cxx
PWGPP/TRD/AliTRDresolution.h
PWGPP/TRD/run.C

index 3897b96..b05a746 100644 (file)
@@ -371,20 +371,6 @@ Int_t AliTRDefficiency::GetPtBin(Float_t pt)
 }
 
 //____________________________________________________________________
-Int_t AliTRDefficiency::GetPtBinSignificant(Float_t pt)
-{
-// Get significant (very low, low, medium, high, very high) pt bin
-
-  Float_t pt0[] = {0.5, 0.8, 1.5, 5};
-  Int_t ipt(0);
-  while(ipt<4){
-    if(pt<pt0[ipt]) break;
-    ipt++;
-  }
-  return ipt-1;
-}
-
-//____________________________________________________________________
 Bool_t AliTRDefficiency::GetRefFigure(Int_t ifig)
 {
 // Steer reference figures
@@ -654,9 +640,6 @@ void AliTRDefficiency::MakeSummary()
   TH2 *h2(NULL);
   gStyle->SetPalette(1);
 
-  const Char_t cid[]={'T','P'};
-  const Char_t *labEff[] = {"Propagated", "Stopped", "Missed"};
-  const Char_t *labMC[] = {"TRD == ESD [good]", "TRD == -ESD [accept]", "TRD != ESD [bad]"};
   Int_t nbins(DebugLevel()==0?3:20);
   //calculate true pt bin
   Float_t ptBins[23]; ptBins[0] = 0.;
@@ -676,6 +659,7 @@ void AliTRDefficiency::MakeSummary()
     return;// kFALSE;
   }
 
+  const Char_t cid[]={'T','P'};
   cOut = new TCanvas(Form("%s_Eff", GetName()), "TRD Efficiency", 1536, 1536); cOut->Divide(2,2,1.e-5,1.e-5);
   // tracking eff :: eta-phi dependence
   for(Int_t it(0); it<2; it++){
@@ -683,18 +667,18 @@ void AliTRDefficiency::MakeSummary()
       AliError(Form("Missing \"H2Eff%c\".", cid[it]));
       continue;
     }
-    h2->SetContour(10); h2->Scale(1.e2); SetRangeZ(h2, 80, 100, 30);
+    h2->SetContour(10); h2->Scale(1.e2); SetRangeZ(h2, 80, 100, 5);
     h2->GetZaxis()->SetTitle("Efficiency [%]"); h2->GetZaxis()->CenterTitle();
     p=cOut->cd(it+1);p->SetRightMargin(0.1572581);p->SetTopMargin(0.08262712);
     h2->Draw("colz");
-    //MakeDetectorPlot();
+    MakeDetectorPlot();
   }
   if(!(h2 = (TH2*)fProj->FindObject("HEff0En"))) {
     AliError("Missing \"HEff0En\".");
     return;
   }
   p=cOut->cd(3);p->SetRightMargin(0.1572581);p->SetTopMargin(0.08262712);
-  h2->Draw("colz");
+  h2->Draw("colz"); MakeDetectorPlot();
   // tracking eff :: pt dependence
   TH1 *h[2] = {0};
   if(!(h[0] = (TH1*)fProj->FindObject("H2EffP_z"))){
@@ -719,6 +703,7 @@ void AliTRDefficiency::MakeSummary()
     h1[1]->SetBinContent(ip+1, 1.e2*(h[1]->GetBinContent(ip) - h[0]->GetBinContent(ip))); // stopped
     h1[2]->SetBinContent(ip+1, 1.e2*(1 - h[1]->GetBinContent(ip))); // missed
   }
+  const Char_t *labEff[] = {"Propagated", "Stopped", "Missed"};
   THStack *hs = new THStack("hEff","Tracking Efficiency;p_{t} [GeV/c];Efficiency [%]");
   TLegend *leg = new TLegend(0.671371,0.1313559,0.9576613,0.2923729,NULL,"brNDC");
   leg->SetBorderSize(0); leg->SetFillColor(kWhite); leg->SetFillStyle(1001);
@@ -738,19 +723,22 @@ void AliTRDefficiency::MakeSummary()
     p=cOut->cd(ipad+1);p->SetRightMargin(0.1572581);p->SetTopMargin(0.08262712);
     if(!(h2 = (TH2*)fProj->FindObject(Form("HEffLb%dEn", ipad)))) continue;
     h2->SetContour(10);
-    h2->Scale(1.e2); SetRangeZ(h2, ipad==1?80:0., ipad==1?100.:10, ipad==1?30:0.01);
+    h2->Scale(1.e2); SetRangeZ(h2, ipad==1?80:0., ipad==1?100.:10., ipad==1?30:0.01);
     h2->GetZaxis()->SetTitle("Efficiency [%]"); h2->GetZaxis()->CenterTitle();
     h2->Draw("colz");
+    MakeDetectorPlot();
   }
+  color[0] = kRed; color[1] = kGreen; color[2] = kBlue;
   for(Int_t il=0;il<3;il++){
     if(!(h[il] = (TH1D*)fProj->FindObject(Form("HEffLb%d_z", il)))) continue;
     h1[il]=new TH1F(Form("h1Lab%d", il), "", nbins+2, ptBins);
     for(Int_t ip(0);ip<=(nbins+1);ip++) h1[il]->SetBinContent(ip+1, 1.e2*h[il]->GetBinContent(ip));
-    h1[il]->SetFillColor(il+2);
+    h1[il]->SetFillColor(color[il]);
     h1[il]->SetFillStyle(il==2?3002:1001);
-    h1[il]->SetLineColor(il+2);
+    h1[il]->SetLineColor(color[il]);
     h1[il]->SetLineWidth(1);
   }
+  const Char_t *labMC[] = {"TRD != ESD [bad]", "TRD == ESD [good]", "TRD == -ESD [accept]"};
   leg = new TLegend(0.671371,0.1313559,0.9576613,0.2923729,NULL,"brNDC");
   leg->SetBorderSize(0); leg->SetFillColor(kWhite); leg->SetFillStyle(1001);
   hs = new THStack("hLab","TRD Label;p_{t} [GeV/c];Efficiency [%]");
index b10f434..10f9c49 100644 (file)
@@ -30,7 +30,6 @@ public:
   void          LocalUserExec(Option_t *);
   Bool_t        GetRefFigure(Int_t ifig);
   static Int_t  GetPtBin(Float_t pt);
-  static Int_t  GetPtBinSignificant(Float_t pt);
   TObjArray*    Histos();
   TH1*          PlotBasicEff(const AliTRDtrackV1 *t=NULL);
 //  TH1*          PlotMC(const AliTRDtrackV1 *t=NULL);
index c631a2a..1619292 100644 (file)
@@ -247,6 +247,7 @@ void AliTRDinfoGen::UserCreateOutputObjects()
   ax->SetBinLabel(Int_t(kTracksMC) + 1, "MC");\r
   ax->SetBinLabel(Int_t(kV0) + 1, "V0");\r
   ax->SetBinLabel(Int_t(kTPC) + 1, "TPC");\r
+  ax->SetBinLabel(Int_t(kITS) + 1, "ITS");\r
   ax->SetBinLabel(Int_t(kTRDin) + 1, "TRDin");\r
   ax->SetBinLabel(Int_t(kTRDout) + 1, "TRDout");\r
   ax->SetBinLabel(Int_t(kBarrel) + 1, "Barrel");\r
@@ -421,7 +422,10 @@ void AliTRDinfoGen::UserExec(Option_t *){
   }\r
 \r
   // event selection based on vertex cuts and trigger\r
-  if(UseLocalEvSelection() && !fEventCut->IsSelected(fESDev, IsCollision())) return;\r
+  if(UseLocalEvSelection() && !fEventCut->IsSelected(fESDev, IsCollision())){\r
+    AliDebug(2, "Event failed selection on vertex and trigger");\r
+    return;\r
+  }\r
 \r
   if(!fESDfriend){\r
     AliError("Failed retrieving ESD friend event");\r
@@ -467,7 +471,7 @@ void AliTRDinfoGen::UserExec(Option_t *){
   }\r
   \r
   Double32_t dedx[100]; Int_t nSlices(0);\r
-  Int_t nTRDout(0), nTRDin(0), nTPC(0)\r
+  Int_t nTRDout(0), nTRDin(0), nTPC(0), nITS(0)\r
        ,nclsTrklt\r
        ,nBarrel(0), nSA(0), nKink(0)\r
        ,nBarrelFriend(0), nSAFriend(0)\r
@@ -502,14 +506,16 @@ void AliTRDinfoGen::UserExec(Option_t *){
     new(fTrackInfo) AliTRDtrackInfo();\r
     esdTrack = fESDev->GetTrack(itrk);\r
     AliDebug(3, Form("\n%3d ITS[%d] TPC[%d] TRD[%d] TOF-BC[%d]\n", itrk, esdTrack->GetNcls(0), esdTrack->GetNcls(1), esdTrack->GetNcls(2), esdTrack->GetTOFBunchCrossing()));\r
+    if(esdTrack->GetStatus()&AliESDtrack::kITSout) nITS++;\r
     if(esdTrack->GetStatus()&AliESDtrack::kTPCout) nTPC++;\r
     if(esdTrack->GetStatus()&AliESDtrack::kTRDout) nTRDout++;\r
     if(esdTrack->GetStatus()&AliESDtrack::kTRDin) nTRDin++;\r
-/*    printf("TRD[%c %c %c] N[%3d] label[%3d %3d]\n",\r
-      (esdTrack->GetStatus()&AliESDtrack::kTRDin)?'y':'n',\r
-      (esdTrack->GetStatus()&AliESDtrack::kTRDStop)?'y':'n',\r
-      (esdTrack->GetStatus()&AliESDtrack::kTRDout)?'y':'n',\r
-      esdTrack->GetTRDncls(), esdTrack->GetLabel(), esdTrack->GetTRDLabel());*/\r
+//     printf("  %3d ITS[%c] TPC[%c] TRDin[%c] TRDout[%c] TRDStop[%c]\n", itrk,\r
+//       (esdTrack->GetStatus()&AliESDtrack::kITSout)?'y':'n',\r
+//       (esdTrack->GetStatus()&AliESDtrack::kTPCout)?'y':'n',\r
+//       (esdTrack->GetStatus()&AliESDtrack::kTRDin)?'y':'n',\r
+//       (esdTrack->GetStatus()&AliESDtrack::kTRDout)?'y':'n',\r
+//       (esdTrack->GetStatus()&AliESDtrack::kTRDStop)?'y':'n');\r
     // look at external track param\r
     const AliExternalTrackParam *op = esdTrack->GetOuterParam();\r
     Double_t xyz[3];\r
@@ -602,8 +608,7 @@ void AliTRDinfoGen::UserExec(Option_t *){
     }\r
 \r
     // read track REC info\r
-    esdFriendTrack = (fESDfriend->GetNumberOfTracks() > itrk) ? fESDfriend->GetTrack(itrk): NULL;\r
-    if(esdFriendTrack){\r
+    if((esdFriendTrack = (fESDfriend->GetNumberOfTracks() > itrk) ? fESDfriend->GetTrack(itrk): NULL)) {\r
       fTrackInfo->SetTPCoutParam(esdFriendTrack->GetTPCOut());\r
       fTrackInfo->SetITSoutParam(esdFriendTrack->GetITSOut());\r
       const AliTrackPointArray *tps(NULL);\r
@@ -623,8 +628,8 @@ void AliTRDinfoGen::UserExec(Option_t *){
         ((TH2I*)fContainer->At(kBC))->Fill(evBC, esdTrack->GetTOFBunchCrossing());\r
         break;\r
       }\r
-      AliDebug(3, Form("Ntracklets[%d]\n", fTrackInfo->GetNTracklets()));\r
-    } else AliDebug(3, "No ESD friends");\r
+      AliDebug(3, Form("Ntracklets[%d]", fTrackInfo->GetNTracklets()));\r
+    } else AliDebug(3, Form("No Friends for trk[%3d] Ntrk[%3d]", itrk, fESDfriend->GetNumberOfTracks()));\r
     if(op) fTrackInfo->SetOuterParam(op);\r
 \r
     if(DebugLevel() >= 1){\r
@@ -636,7 +641,7 @@ void AliTRDinfoGen::UserExec(Option_t *){
     }\r
 \r
     ULong_t status(esdTrack->GetStatus());\r
-    if((status&AliESDtrack::kTPCout)){\r
+    if((status&AliESDtrack::kTPCout)){  // TPC prolongation\r
       if(!esdTrack->GetKinkIndex(0)){ // Barrel  Track Selection\r
         Bool_t selected(kTRUE);\r
         if(UseLocalTrkSelection()){\r
@@ -679,7 +684,41 @@ void AliTRDinfoGen::UserExec(Option_t *){
         fTracksKink->Add(new AliTRDtrackInfo(*fTrackInfo));\r
         nKink++;\r
       }\r
-    } else if((status&AliESDtrack::kTRDout) && !(status&AliESDtrack::kTRDin)){ \r
+    } else if((status&AliESDtrack::kITSout)) { // ITS prolongation \r
+      Bool_t selected(kTRUE);\r
+      if(UseLocalTrkSelection()){\r
+        if(esdTrack->Pt() < fgkPt){\r
+          AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] Pt[%5.2f]", itrk, fESDev->GetEventNumberInFile(), esdTrack->Pt()));\r
+          selected = kFALSE;\r
+        }\r
+        if(selected && TMath::Abs(esdTrack->Eta()) > fgkEta){\r
+          AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] Eta[%5.2f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(esdTrack->Eta())));\r
+          selected = kFALSE;\r
+        }\r
+        Float_t par[2], cov[3];\r
+        esdTrack->GetImpactParameters(par, cov);\r
+        if(IsCollision()){ // cuts on DCA\r
+          if(selected && TMath::Abs(par[0]) > fgkTrkDCAxy){\r
+            AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] DCAxy[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[0])));\r
+            selected = kFALSE;\r
+          }\r
+          if(selected && TMath::Abs(par[1]) > fgkTrkDCAz){\r
+            AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] DCAz[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[1])));\r
+            selected = kFALSE;\r
+          }\r
+        } else if(selected && fMCev && !fMCev->IsPhysicalPrimary(alab)){;\r
+          AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] Primary", itrk, fESDev->GetEventNumberInFile()));\r
+          selected = kFALSE;\r
+        }\r
+      }\r
+      if(fTrackCut && !fTrackCut->IsSelected(esdTrack)) selected = kFALSE;\r
+      if(selected){\r
+        fTracksBarrel->Add(new AliTRDtrackInfo(*fTrackInfo));\r
+        nBarrel++;\r
+        if(fTrackInfo->GetTrack())\r
+          nBarrelFriend++;\r
+      }\r
+    } else if((status&AliESDtrack::kTRDout) && !(status&AliESDtrack::kTRDin)){ // TRD SA tracking\r
       fTracksSA->Add(new AliTRDtrackInfo(*fTrackInfo));\r
       nSA++;\r
       if(fTrackInfo->GetTrack()) \r
@@ -772,10 +811,10 @@ void AliTRDinfoGen::UserExec(Option_t *){
   }\r
   AliDebug(1, Form(\r
     "\nEv[%3d] Tracks: ESD[%d] MC[%d] V0[%d]\n"\r
-    "        TPCout[%d] TRDin[%d] TRDout[%d]\n"\r
+    "        TPCout[%d] ITSout[%d] TRDin[%d] TRDout[%d]\n"\r
     "        Barrel[%3d+%3d=%3d] SA[%2d+%2d=%2d] Kink[%2d+%2d=%2d]"\r
     ,(Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), nTracksESD, nTracksMC, fV0List->GetEntries()\r
-    , nTPC, nTRDin, nTRDout\r
+    , nTPC, nITS, nTRDin, nTRDout\r
     ,nBarrel, nBarrelMC, fTracksBarrel->GetEntries()\r
     ,nSA, nSAMC, fTracksSA->GetEntries()\r
     ,nKink, nKinkMC, fTracksKink->GetEntries()\r
@@ -786,6 +825,7 @@ void AliTRDinfoGen::UserExec(Option_t *){
   h->Fill(Float_t(kTracksMC), nTracksMC);\r
   h->Fill(Float_t(kV0), fV0List->GetEntries());\r
   h->Fill(Float_t(kTPC), nTPC);\r
+  h->Fill(Float_t(kITS), nITS);\r
   h->Fill(Float_t(kTRDin), nTRDin);\r
   h->Fill(Float_t(kTRDout), nTRDout);\r
   h->Fill(Float_t(kBarrel), nBarrel);\r
index 3ba5a54..ae77952 100644 (file)
@@ -43,6 +43,7 @@ public:
     ,kTracksMC\r
     ,kV0\r
     ,kTPC\r
+    ,kITS\r
     ,kTRDin\r
     ,kTRDout\r
     ,kBarrel\r
index f87e10a..74a3dde 100644 (file)
@@ -44,6 +44,7 @@
 \r
 ClassImp(AliTRDrecoTask)\r
 \r
+Float_t AliTRDrecoTask::fgPt0[AliTRDrecoTask::fgNPt0] = {0.5, 0.8, 1.5, 5};\r
 TList* AliTRDrecoTask::fgTrendPoint(NULL);\r
 TTreeSRedirector* AliTRDrecoTask::fgDebugStream(NULL);\r
 //_______________________________________________________\r
@@ -51,6 +52,7 @@ AliTRDrecoTask::AliTRDrecoTask()
   : AliAnalysisTaskSE()\r
   ,fNRefFigures(0)\r
   ,fDets(NULL)\r
+  ,fDetsV(NULL)\r
   ,fContainer(NULL)\r
   ,fEvent(NULL)\r
   ,fTracks(NULL)\r
@@ -76,6 +78,7 @@ AliTRDrecoTask::AliTRDrecoTask(const char *name, const char *title)
   : AliAnalysisTaskSE(name)\r
   ,fNRefFigures(0)\r
   ,fDets(NULL)\r
+  ,fDetsV(NULL)\r
   ,fContainer(NULL)\r
   ,fEvent(NULL)\r
   ,fTracks(NULL)\r
@@ -130,6 +133,7 @@ AliTRDrecoTask::~AliTRDrecoTask()
     delete fDets;\r
     fDets = NULL;\r
   }\r
+  if(fDetsV) delete fDetsV; fDetsV=NULL;\r
 \r
   if(fContainer && !(AliAnalysisManager::GetAnalysisManager() && AliAnalysisManager::GetAnalysisManager()->IsProofMode())){\r
     if(fContainer->IsOwner()) fContainer->Delete();\r
@@ -153,6 +157,19 @@ Int_t AliTRDrecoTask::GetNRefFigures() const
   return fNRefFigures; \r
 } \r
 \r
+//____________________________________________________________________\r
+Int_t AliTRDrecoTask::GetPtBinSignificant(Float_t pt)\r
+{\r
+// Get significant (very low, low, medium, high, very high) pt bin\r
+\r
+  Int_t ipt(0);\r
+  while(ipt<fgNPt0){\r
+    if(pt<fgPt0[ipt]) break;\r
+    ipt++;\r
+  }\r
+  return ipt-1;\r
+}\r
+\r
 //_______________________________________________________\r
 void AliTRDrecoTask::UserCreateOutputObjects()\r
 {\r
@@ -305,11 +322,12 @@ Bool_t AliTRDrecoTask::LoadDetectorMap(const Char_t *file, const Char_t *dir)
   }\r
   TObjArray *dets = (TObjArray*)info->FindObject("Chambers");\r
   if(!dets){\r
-    AliWarning("Missing detector map from TRDinfoGen results.");\r
-    info->ls();\r
-    return kFALSE;\r
-  }\r
-  fDets = (TObjArray*)dets->Clone("Chambers");\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
   gFile->Close();\r
   return kTRUE;\r
 }\r
@@ -354,7 +372,8 @@ void AliTRDrecoTask::MakeDetectorPlot(Int_t ly, const Option_t *opt)
 // based on info collected by AliTRDinfoGen\r
 \r
   if(!fDets){\r
-    AliWarning("Detector map and status not available.");\r
+    AliWarning("OLD Detector map and status not available. Try NEW");\r
+    MakeDetectorPlotNEW(ly, opt);\r
     return;\r
   }\r
   Float_t xmin(0.), xmax(0.);\r
@@ -395,6 +414,52 @@ void AliTRDrecoTask::MakeDetectorPlot(Int_t ly, const Option_t *opt)
   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
+//_______________________________________________________\r
+void AliTRDrecoTask::MakeDetectorPlotNEW(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
+\r
+  if(!fDetsV){\r
+    AliWarning("NEW Detector map and status not available.");\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), jdet(0); idet<AliTRDgeometry::kNdet; idet++, jdet+=5){\r
+    if(idet%6 != ly) continue;\r
+    Int_t iopt = Int_t((*fDetsV)[jdet+4]);\r
+    if(strcmp(opt, "eta")==0){\r
+      xmin=(*fDetsV)[jdet+0]; xmax=(*fDetsV)[jdet+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
+    if(iopt==1){\r
+      gdet->SetFillStyle(style[1]);gdet->SetFillColor(kBlack);\r
+      gdet->DrawBox(xmin, (*fDetsV)[jdet+1], xmax, (*fDetsV)[jdet+3]);\r
+    } else {\r
+      gdet->SetFillStyle(style[0]);\r
+      gdet->DrawBox(xmin, (*fDetsV)[jdet+1], xmax, (*fDetsV)[jdet+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
+      } 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
+      } 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
+  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
 \r
 //_______________________________________________________\r
 void AliTRDrecoTask::MakeSummary()\r
@@ -657,23 +722,24 @@ TH2* AliTRDrecoTask::AliTRDrecoProjection::Projection2D(const Int_t nstat, const
   AliDebug(2, Form("%s[%s] nx[%d] ny[%d]", h2->GetName(), h2->GetTitle(), nx, ny));\r
   for(Int_t iy(0); iy<ny; iy++){\r
     for(Int_t ix(0); ix<nx; ix++){\r
-      h = fH->ProjectionZ(Form("%s_z", h2->GetName()), ix*dxBin+1, (ix+1)*dxBin+1, iy*dyBin+1, (iy+1)*dyBin+1);\r
+      h = fH->ProjectionZ(Form("%s_z", h2->GetName()), ix*dxBin+1, ix*dxBin+1, iy*dyBin+1, iy*dyBin+1);\r
       Int_t ne((Int_t)h->Integral());\r
       if(ne<nstat/2){\r
         h2->SetBinContent(ix+1, iy+1, -999);\r
         h2->SetBinError(ix+1, iy+1, 1.);\r
         n++;\r
       }else{\r
+        h = fH->ProjectionZ(Form("%s_z", h2->GetName()), (ix-1)*dxBin+1, (ix+1)*dxBin+1, (iy-1)*dyBin+1, (iy+1)*dyBin+1);\r
         Float_t v(h->GetMean()), ve(h->GetRMS());\r
         if(mid==1){\r
           TF1 fg("fg", "gaus", az->GetXmin(), az->GetXmax());\r
           fg.SetParameter(0, Float_t(ne)); fg.SetParameter(1, v); fg.SetParameter(2, ve);\r
-          h->Fit(&fg, "WQ");\r
+          h->Fit(&fg, "WQ0");\r
           v = fg.GetParameter(1); ve = fg.GetParameter(2);\r
         } else if (mid==2) {\r
           TF1 fl("fl", "landau", az->GetXmin(), az->GetXmax());\r
           fl.SetParameter(0, Float_t(ne)); fl.SetParameter(1, v); fl.SetParameter(2, ve);\r
-          h->Fit(&fl, "WQ");\r
+          h->Fit(&fl, "WQ0");\r
           v = fl.GetMaximumX(); ve = fl.GetParameter(2);\r
 /*          TF1 fgle("gle", "[0]*TMath::Landau(x, [1], [2], 1)*TMath::Exp(-[3]*x/[1])", az->GetXmin(), az->GetXmax());\r
           fgle.SetParameter(0, fl.GetParameter(0));\r
index 67819a1..8ffa104 100644 (file)
@@ -30,6 +30,8 @@ class TList;
 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
 {\r
 friend class AliEveTRDTrackList;\r
@@ -81,9 +83,11 @@ public:
   Int_t          GetNRefFigures() const; \r
   const Char_t*  GetNameId() const       { return fNameId;}\r
   TList*         GetPlotFunctors() const { return fPlotFuncList;}\r
+  static Int_t   GetPtBinSignificant(Float_t pt);\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
   Bool_t         IsHeavyIon() const      { return TestBit(kHeavyIon);};\r
   Bool_t         IsPP() const            { return !TestBit(kHeavyIon);};\r
   Bool_t         HasFriends() const      { return TestBit(kFriends);};\r
@@ -114,7 +118,8 @@ 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;            //! container to store detector position and status\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             *fContainer;       //! container to store results\r
   AliTRDeventInfo       *fEvent;           //! Event Info\r
   TObjArray             *fTracks;          //! Array of tracks\r
@@ -137,6 +142,8 @@ private:
   Bool_t            fRunTerminate;         // Switch for Terminate Function\r
   static TList      *fgTrendPoint;         //! trend point\r
   static TTreeSRedirector *fgDebugStream;  //! Debug stream\r
+  static const Int_t fgNPt0 = 4;           // No of significant pt bins \r
+  static Float_t fgPt0[fgNPt0];            // Array with limits for significant pt bins \r
 \r
   ClassDef(AliTRDrecoTask, 5) // base TRD reconstruction task\r
 };\r
index d476032..2affa6a 100644 (file)
@@ -48,6 +48,7 @@
 //                                                                        //
 ////////////////////////////////////////////////////////////////////////////
 
+#include <TFile.h>
 #include <TSystem.h>
 #include <TStyle.h>
 #include <TROOT.h>
@@ -497,7 +498,7 @@ TH1* AliTRDresolution::PlotTracklet(const AliTRDtrackV1 *track)
     val[kEta] = -TMath::Log(TMath::Tan(0.5 *  (0.5*TMath::Pi() - TMath::ATan(tgl))));
 
     val[kSpeciesChgRC]= fTracklet->IsRowCross()?0:fkTrack->Charge();// fSpecies;
-    val[kPt]  = fPt<0.8?0:(fPt<1.5?1:2);//GetPtBin(fTracklet->GetMomentum());
+    val[kPt]  = GetPtBinSignificant(fPt); //fPt<0.8?0:(fPt<1.5?1:2);//GetPtBin(fTracklet->GetMomentum());
     Double_t dyt(fTracklet->GetYfit(0) - fTracklet->GetYref(0)),
              dzt(fTracklet->GetZfit(0) - fTracklet->GetZref(0)),
              dydx(fTracklet->GetYfit(1)),
@@ -624,7 +625,6 @@ TH1* AliTRDresolution::PlotTrackIn(const AliTRDtrackV1 *track)
     if((h = (TH1*)gDirectory->Get(Form("%s_proj_%d", H->GetName(), kYrez)))) delete h;
     return H->Projection(kYrez);
   }
-//  printf("USE y[%+f] dydx[%+f]\n", fTracklet->GetYfit(0), fTracklet->GetYfit(1));
 
   Int_t bc(fkESD?fkESD->GetTOFbc()/2:0);
   const Double_t *parR(tin->GetParameter());
@@ -652,7 +652,7 @@ TH1* AliTRDresolution::PlotTrackIn(const AliTRDtrackV1 *track)
   val[kZrez]        = fTracklet->IsRowCross()?dz:(fTracklet->GetdQdl()*5.e-4 - 2.5);
   val[kPrez]        = dphi*TMath::RadToDeg();
   val[kSpeciesChgRC]= fTracklet->IsRowCross()?0:fSpecies; //printf("val[%d] = %4.2f\n", kSpeciesChgRC, val[kSpeciesChgRC]);
-  val[kPt]          = fPt<0.8?0:(fPt<1.5?1:2);//GetPtBin(fPt);
+  val[kPt]          = GetPtBinSignificant(fPt); //fPt<0.8?0:(fPt<1.5?1:2);//GetPtBin(fPt);
   val[kNdim]        = GetPtBin(fTracklet->GetMomentum());
   val[kNdim+1]      = dx;
   val[kNdim+2]      = fEvent?fEvent->GetBunchFill():0;
@@ -1515,6 +1515,19 @@ Bool_t AliTRDresolution::MakeProjectionCluster(Bool_t mc)
     }
     for(Int_t jh(0); jh<np[isel]; jh++) ((AliTRDrecoProjection*)php.At(ioff+jh))->Increment(coord, v);
   }
+  if(HasDump3DFor(kCluster)){
+    TDirectory *cwd = gDirectory;
+    TFile::Open(Form("ResDump_%s.root", H->GetName()), "RECREATE");
+    for(Int_t ip(0); ip<php.GetEntriesFast(); ip++){
+      if(!(pr0 = (AliTRDrecoProjection*)php.At(ip))) continue;
+      if(!pr0->H()) continue;
+      TH3 *h3=(TH3*)pr0->H()->Clone();
+      h3->Write();
+    }
+    gFile->Close();
+    cwd->cd();
+  }
+
   TObjArray *arr(NULL);
   fProj->AddAt(arr = new TObjArray(kClNproj), cidx);
 
@@ -1536,7 +1549,7 @@ Bool_t AliTRDresolution::MakeProjectionCluster(Bool_t mc)
         /*!dy*/
         if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClY%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, 0)))){
           for(Int_t ipad(1); ipad<nNpad; ipad++){
-            if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClY%c%d%d%d", mc?"MC":"", chName[1], ily, icen, ipad)))) continue;
+            if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClY%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, ipad)))) continue;
             (*pr0)+=(*pr1);
           }
           pr0->H()->SetNameTitle(Form("H%sClY%c%d%d", mc?"MC":"", chName[ich], ily, icen), Form("Clusters[%c] :: #Deltay Ly[%d] Cen[%s]", chSgn[ich], ily, cenName[icen]));
@@ -1546,7 +1559,7 @@ Bool_t AliTRDresolution::MakeProjectionCluster(Bool_t mc)
         /*!Q*/
         if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClQ%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, 0)))){
           for(Int_t ipad(1); ipad<nNpad; ipad++){
-            if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClQ%c%d%d%d", mc?"MC":"", chName[1], ily, icen, ipad)))) continue;
+            if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClQ%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, ipad)))) continue;
             (*pr0)+=(*pr1);
           }
           pr0->H()->SetNameTitle(Form("H%sClQ%c%d%d", mc?"MC":"", chName[ich], ily, icen), Form("Clusters[%c] :: Q Ly[%d] Cen[%s]", chSgn[ich], ily, cenName[icen]));
@@ -1559,7 +1572,7 @@ Bool_t AliTRDresolution::MakeProjectionCluster(Bool_t mc)
         /*!YXTC*/
         if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXTC%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, 0)))){
           for(Int_t ipad(1); ipad<nNpad; ipad++){
-            if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXTC%c%d%d%d", mc?"MC":"", chName[1], ily, icen, ipad)))) continue;
+            if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXTC%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, ipad)))) continue;
             (*pr0)+=(*pr1);
           }
           pr0->H()->SetNameTitle(Form("H%sClYXTC%c%d%d", mc?"MC":"", chName[ich], ily, icen), Form("Clusters[%c] :: #Deltay(x,TC) Ly[%d] Cen[%s]", chSgn[ich], ily, cenName[icen]));
@@ -1569,7 +1582,7 @@ Bool_t AliTRDresolution::MakeProjectionCluster(Bool_t mc)
         /*!YXPh*/
         if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXPh%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, 0)))){
           for(Int_t ipad(1); ipad<nNpad; ipad++){
-            if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXPh%c%d%d%d", mc?"MC":"", chName[1], ily, icen, ipad)))) continue;
+            if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXPh%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, ipad)))) continue;
             (*pr0)+=(*pr1);
           }
           pr0->H()->SetNameTitle(Form("H%sClYXPh%c%d%d", mc?"MC":"", chName[ich], ily, icen), Form("Clusters[%c] :: #Deltay(x,#Phi) Ly[%d] Cen[%s]", chSgn[ich], ily, cenName[icen]));
@@ -1780,6 +1793,19 @@ Bool_t AliTRDresolution::MakeProjectionTracklet(Bool_t mc)
     }
     for(Int_t jh(0); jh<np[isel]; jh++) ((AliTRDrecoProjection*)php.At(ioff+jh))->Increment(coord, v);
   }
+  if(HasDump3DFor(kTracklet)){
+    TDirectory *cwd = gDirectory;
+    TFile::Open(Form("ResDump_%s.root", H->GetName()), "RECREATE");
+    for(Int_t ip(0); ip<php.GetEntriesFast(); ip++){
+      if(!(pr0 = (AliTRDrecoProjection*)php.At(ip))) continue;
+      if(!pr0->H()) continue;
+      TH3 *h3=(TH3*)pr0->H()->Clone();
+      h3->Write();
+    }
+    gFile->Close();
+    cwd->cd();
+  }
+
   TObjArray *arr(NULL);
   fProj->AddAt(arr = new TObjArray(kTrkltNproj), cidx);
 
@@ -1987,13 +2013,13 @@ Bool_t AliTRDresolution::MakeProjectionTrackIn(Bool_t mc)
   if(ndim > Int_t(kNdim)+1)       ax = H->GetAxis(kNdim+1);
   if(ndim > Int_t(kNdim)+2)      abf = H->GetAxis(kNdim+2);
   //AliInfo(Form("Using : Species[%c] Pt[%c] BunchFill[%c]", as?'y':'n', ap?'y':'n', abf?'y':'n'));
-  const Int_t nPt(ndim>Int_t(kNdimTrkIn)?Int_t(kNpt):1);
+  const Int_t nPt(ndim>Int_t(kNdimTrkIn)?Int_t(kNpt+2):1);
 
   // build list of projections
-  const Int_t nsel(kNpt*(AliPID::kSPECIES*kNcharge + 1));
+  const Int_t nsel((kNpt+2)*(AliPID::kSPECIES*kNcharge + 1));
   const Char_t chName[kNcharge] = {'n', 'p'};const Char_t chSgn[kNcharge] = {'-', '+'};
-  const Char_t ptName[kNpt] = {'l', 'i', 'h'};
-  const Char_t *ptCut[kNpt] = {"p_{t}[GeV/c]<0.8", "0.8<=p_{t}[GeV/c]<1.5", "p_{t}[GeV/c]>=1.5"};
+  const Char_t ptName[kNpt+2] = {'L', 'l', 'i', 'h', 'H'};
+  const Char_t *ptCut[kNpt+2] = {"p_{t}[GeV/c]<0.5", "0.5<=p_{t}[GeV/c]<0.8", "0.8<=p_{t}[GeV/c]<1.5", "1.5<=p_{t}[GeV/c]<5.0", "p_{t}[GeV/c]>=5.0"};
   // define rebinning strategy
   const Int_t nEtaPhi(4); Int_t rebinEtaPhiX[nEtaPhi] = {1, 2, 5, 1}, rebinEtaPhiY[nEtaPhi] = {2, 1, 1, 5};
   AliTRDrecoProjection hp[kMCTrkInNproj]; TObjArray php(kMCTrkInNproj+2);
@@ -2072,7 +2098,7 @@ Bool_t AliTRDresolution::MakeProjectionTrackIn(Bool_t mc)
     }
     // pt selection
     pt = 0; // low pt
-    if(ap) pt = TMath::Min(coord[kPt]-1, Int_t(kNpt)-1);
+    if(ap) pt = TMath::Min(coord[kPt], Int_t(kNpt)+1);
     // global selection
     isel = pt*(AliPID::kSPECIES*kNcharge+1); isel+=sp<0?(AliPID::kSPECIES*kNcharge):(sp*kNcharge+ch);
     ioff = isel*(ax?4:3);
@@ -2097,6 +2123,19 @@ Bool_t AliTRDresolution::MakeProjectionTrackIn(Bool_t mc)
     }
     for(Int_t jh(0); jh<np[isel]; jh++) ((AliTRDrecoProjection*)php.At(ioff+jh))->Increment(coord, v);
   }
+  if(HasDump3DFor(kTrackIn)){
+    TDirectory *cwd = gDirectory;
+    TFile::Open(Form("ResDump_%s.root", H->GetName()), "RECREATE");
+    for(Int_t ip(0); ip<php.GetEntriesFast(); ip++){
+      if(!(pr0 = (AliTRDrecoProjection*)php.At(ip))) continue;
+      if(!pr0->H()) continue;
+      TH3 *h3=(TH3*)pr0->H()->Clone();
+      h3->Write();
+    }
+    gFile->Close();
+    cwd->cd();
+  }
+
   TObjArray *arr(NULL);
   fProj->AddAt(arr = new TObjArray(mc?kMCTrkInNproj:kTrkInNproj), cidx);
 
@@ -2534,34 +2573,34 @@ Bool_t AliTRDresolution::PostProcess()
 
   //PROCESS EXPERIMENTAL DISTRIBUTIONS
   // Clusters detector
-  if(HasProcessDetector() && !MakeProjectionDetector()) return kFALSE;
+  if(HasProcess(kDetector)) if(!MakeProjectionDetector()) return kFALSE;
   // Clusters residuals
-  if(HasProcessCluster() && !MakeProjectionCluster()) return kFALSE;
+  if(HasProcess(kCluster)) if(!MakeProjectionCluster()) return kFALSE;
   fNRefFigures = 3;
   // Tracklet residual/pulls
-  if(HasProcessTrklt() && !MakeProjectionTracklet()) return kFALSE;
+  if(HasProcess(kTracklet)) if(!MakeProjectionTracklet()) return kFALSE;
   fNRefFigures = 7;
   // TRDin residual/pulls
-  if(HasProcessTrkIn() && !MakeProjectionTrackIn()) return kFALSE;
+  if(HasProcess(kTrackIn)) if(!MakeProjectionTrackIn()) return kFALSE;
   fNRefFigures = 11;
 
   if(!HasMCdata()) return kTRUE;
   //PROCESS MC RESIDUAL DISTRIBUTIONS
 
   // CLUSTER Y RESOLUTION/PULLS
-  if(!MakeProjectionCluster(kTRUE)) return kFALSE;
+  if(HasProcess(kCluster)) if(!MakeProjectionCluster(kTRUE)) return kFALSE;
   fNRefFigures = 17;
 
   // TRACKLET RESOLUTION/PULLS
-  if(!MakeProjectionTracklet(kTRUE)) return kFALSE;
+  if(HasProcess(kTracklet)) if(!MakeProjectionTracklet(kTRUE)) return kFALSE;
   fNRefFigures = 21;
 
   // TRACK RESOLUTION/PULLS
-  if(!MakeProjectionTrack()) return kFALSE;
+  if(HasProcess(kTracklet)) if(!MakeProjectionTrack()) return kFALSE;
   fNRefFigures+=16;
 
   // TRACK TRDin RESOLUTION/PULLS
-  if(!MakeProjectionTrackIn(kTRUE)) return kFALSE;
+  if(HasProcess(kTrackIn)) if(!MakeProjectionTrackIn(kTRUE)) return kFALSE;
   fNRefFigures+=8;
 
   return kTRUE;
@@ -3182,3 +3221,14 @@ void AliTRDresolution::SetProcesses(Bool_t det, Bool_t cl, Bool_t trklt, Bool_t
   if(trkin) SETBIT(fSteer, kTrackIn); else CLRBIT(fSteer, kTrackIn);
 }
 
+
+//________________________________________________________
+void AliTRDresolution::SetDump3D(Bool_t det, Bool_t cl, Bool_t trklt, Bool_t trkin)
+{
+// steer processes
+  if(det) SETBIT(fSteer, 4+kDetector); else CLRBIT(fSteer, 4+kDetector);
+  if(cl)  SETBIT(fSteer, 4+kCluster); else CLRBIT(fSteer, 4+kCluster);
+  if(trklt) SETBIT(fSteer, 4+kTracklet); else CLRBIT(fSteer, 4+kTracklet);
+  if(trkin) SETBIT(fSteer, 4+kTrackIn); else CLRBIT(fSteer, 4+kTrackIn);
+}
+
index 6b43232..0941cf7 100644 (file)
@@ -67,7 +67,7 @@ public:
     kDetNproj=460      // detector projections
     ,kClNproj=2800     // cluster projections
     ,kTrkltNproj=8000  // tracklet projections
-    ,kTrkInNproj=245   // trackIn projections
+    ,kTrkInNproj=300   // trackIn projections
     ,kTrkNproj=2500    // track projections
     ,kMCTrkInNproj=260 // trackIn projections
   };
@@ -116,10 +116,6 @@ public:
   TObjArray*      Results(ETRDresolutionClass c) const  { if(!fProj) return NULL; return (TObjArray*)fProj->At(c);}
   void            UserExec(Option_t * opt);
   void            InitExchangeContainers();
-  Bool_t          HasProcessDetector() const            { return TESTBIT(fSteer, kDetector);}
-  Bool_t          HasProcessCluster() const             { return TESTBIT(fSteer, kCluster);}
-  Bool_t          HasProcessTrklt() const               { return TESTBIT(fSteer, kTracklet);}
-  Bool_t          HasProcessTrkIn() const               { return TESTBIT(fSteer, kTrackIn);}
   Bool_t          HasTrackRefit() const                 { return TestBit(kTrackRefit);}
   Bool_t          HasTrackSelection() const             { return TestBit(kTrackSelect);}
   Bool_t          IsVerbose() const                     { return TestBit(kVerbose);}
@@ -143,6 +139,7 @@ public:
   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);
+  void            SetDump3D(Bool_t det, Bool_t cl, Bool_t trklt, Bool_t trkin);
   void            SetVerbose(Bool_t v = kTRUE)          { SetBit(kVerbose, v);}
   void            SetVisual(Bool_t v = kTRUE)           { SetBit(kVisual, v);}
   void            SetTrackRefit(Bool_t v = kTRUE)       { SetBit(kTrackRefit, v);}
@@ -161,6 +158,8 @@ public:
   void        GetRange(TH2 *h2, Char_t mod, Float_t *range);
 
 protected:
+  Bool_t      HasDump3DFor(ETRDresolutionClass cls) const { return TESTBIT(fSteer, 4+cls);}
+  Bool_t      HasProcess(ETRDresolutionClass cls) const   { return TESTBIT(fSteer, cls);}
   Bool_t      MakeProjectionDetector();
   Bool_t      MakeProjectionCluster(Bool_t mc=kFALSE);
   Bool_t      MakeProjectionTracklet(Bool_t mc=kFALSE);
@@ -170,6 +169,8 @@ protected:
   Bool_t      Pulls(Double_t dyz[2], Double_t cc[3], Double_t tilt) const;
 
   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
index bce0b9d..a26c3ab 100644 (file)
@@ -31,7 +31,9 @@
 // gSystem->Load("libANALYSIS.so")
 // gSystem->Load("libANALYSISalice.so")
 // gSystem->Load("libTENDER.so");
+// gSystem->Load("libCORRFW.so");
 // gSystem->Load("libPWGPP.so");
+// gSystem->Load("libPWGmuon.so");
 // gSystem->Load("libNetx.so") ;
 // gSystem->Load("libRAliEn.so");
 //
@@ -47,6 +49,7 @@
 #include "TMemStat.h"
 #include "TMemStatViewerGUI.h"
 
+#include "TGrid.h"
 #include "TROOT.h"
 #include "TClass.h"
 #include "TSystem.h"
@@ -181,7 +184,6 @@ TChain* MakeChainLST(const char* filename)
 {
   // Create the chain
   TChain* chain = new TChain("esdTree");
-
   if(!filename){
     chain->Add(Form("%s/AliESDs.root", gSystem->pwd()));
     return chain;
@@ -189,16 +191,22 @@ TChain* MakeChainLST(const char* filename)
 
 
   // read ESD files from the input list.
-  ifstream in;
-  in.open(filename);
-  TString esdfile;
-  while(in.good()) {
-    in >> esdfile;
-    if (!esdfile.Contains("root")) continue; // protection
-    chain->Add(esdfile.Data());
+  FILE *fp(NULL);
+  if(!(fp = fopen(filename, "rt"))){
+    Error("run::MakeChainLST()", Form("Input list \"%s\" not readable", filename));
+    return NULL;
   }
-
-  in.close();
+  TString esdFile;
+  while(esdFile.Gets(fp)){
+    if (!esdFile.Contains("root")) continue; // protection
+    if(esdFile.BeginsWith("alien://") && !gGrid){
+      if(gSystem->Load("libNetx.so")<0) return NULL;
+      if(gSystem->Load("libRAliEn.so")<0) return NULL;
+      TGrid::Connect("alien://");
+    }
+    chain->Add(esdFile.Data());
+  }
+  fclose(fp);
 
   return chain;
 }