ATO-97, ATO-78 - speed-up creation of the AliTPCCalPad objects from TTree
authormivanov <marian.ivanov@cern.ch>
Sun, 2 Nov 2014 22:04:00 +0000 (23:04 +0100)
committermivanov <marian.ivanov@cern.ch>
Sat, 22 Nov 2014 23:18:01 +0000 (00:18 +0100)
TPC/Base/AliTPCCalPad.cxx
TPC/Base/AliTPCCalPad.h
TPC/Base/AliTPCcalibDButil.cxx

index 2fd9f1a..85e0be3 100644 (file)
@@ -911,7 +911,7 @@ AliTPCCalPad * AliTPCCalPad::MakeCalPadFromHistoRPHI(TH2 * hisA, TH2* hisC){
   return calPad;
 }
 
-AliTPCCalPad *AliTPCCalPad::MakePadFromTree(TTree * treePad, const char *query, const char* name){
+AliTPCCalPad *AliTPCCalPad::MakePadFromTree(TTree * treePad, const char *query, const char* name, Bool_t doFast){
   //
   // make cal pad from the tree 
   //
@@ -922,14 +922,30 @@ AliTPCCalPad *AliTPCCalPad::MakePadFromTree(TTree * treePad, const char *query,
   if (treePad->GetEntries()!=kNsec) return 0;
   AliTPCCalPad * calPad= new AliTPCCalPad(name,name);
   if (name) calPad->SetName(name);
-  for (Int_t iSec=0; iSec<72; iSec++){
-    AliTPCCalROC* calROC  = calPad->GetCalROC(iSec);
-    UInt_t nchannels = (UInt_t)treePad->Draw(query,"1","goff",1,iSec);
-    if (nchannels!=calROC->GetNchannels()) {
-      ::Error("AliTPCCalPad::MakePad",TString::Format("%s\t:Wrong query sector\t%d\t%d",treePad->GetName(),iSec,nchannels).Data());
-      break;
+  if (!doFast){
+    for (Int_t iSec=0; iSec<72; iSec++){
+      AliTPCCalROC* calROC  = calPad->GetCalROC(iSec);
+      UInt_t nchannels = (UInt_t)treePad->Draw(query,"1","goff",1,iSec);
+      if (nchannels!=calROC->GetNchannels()) {
+       ::Error("AliTPCCalPad::MakePad",TString::Format("%s\t:Wrong query sector\t%d\t%d",treePad->GetName(),iSec,nchannels).Data());
+       break;
+      }
+      for (UInt_t index=0; index<nchannels; index++) calROC->SetValue(index,treePad->GetV1()[index]);
+    }
+  }else{    
+    UInt_t nchannelsTree = (UInt_t)treePad->Draw(query,"1","goff");
+    UInt_t nchannelsAll=0;
+    for (Int_t iSec=0; iSec<72; iSec++){
+      AliTPCCalROC* calROC  = calPad->GetCalROC(iSec);
+      UInt_t nchannels=calROC->GetNchannels();
+      for (UInt_t index=0; index<nchannels; index++) {
+       if (nchannelsAll<=nchannelsTree)calROC->SetValue(index,treePad->GetV1()[nchannelsAll]);
+       nchannelsAll++;
+      }
+    }
+    if (nchannelsAll>nchannelsTree){
+      ::Error("AliTPCCalPad::MakePad",TString::Format("%s\t:Wrong query: cout mismatch\t%d\t%d",query, nchannelsAll,nchannelsTree).Data());
     }
-    for (UInt_t index=0; index<nchannels; index++) calROC->SetValue(index,treePad->GetV1()[index]);
   }
   return calPad;
 }
index 5898be2..82eeb1f 100644 (file)
@@ -44,7 +44,7 @@ class AliTPCCalPad : public TNamed {
   void SetCalROC(AliTPCCalROC* roc, Int_t sector = -1);  
   virtual void Draw(Option_t* option = "");
   // TTree functions
-  static AliTPCCalPad *MakePadFromTree(TTree * tree, const char *query, const char*name=0);  
+  static AliTPCCalPad *MakePadFromTree(TTree * tree, const char *query, const char*name=0, Bool_t doFast=kFALSE);  
   void AddFriend(TTree * tree, const char *friendName, const char *fname=0);
   //
   // convolution
index d2c2374..e7c9ee4 100644 (file)
@@ -3398,6 +3398,7 @@ TTree* AliTPCcalibDButil::ConnectCalPadTrees(TString baseDir, TString pattern, T
     friendName.ReplaceAll(baseDir.Data(),"");
     friendName.ReplaceAll("^/","");
     friendName.ReplaceAll("/",".");
+    friendName.ReplaceAll(".tree.",".");
     friendName.ReplaceAll(".root","");
     printf("%s\n", friendName.Data());
     ::Info("AliTPCcalibDButil::ConnectCalPadTrees","%s",friendName.Data());