]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TOF/AliTOFAlignment.cxx
Improved QAchecker and plots for DQM
[u/mrichter/AliRoot.git] / TOF / AliTOFAlignment.cxx
index eb16c2a611046040e2b795b70888038bfe07f782..511cd4c0dc99103fc361e770810aade794adf095 100644 (file)
@@ -15,6 +15,9 @@
 
 /*
 $Log$
+Revision 1.19  2007/10/02 09:46:08  arcelli
+add methods to retrieve real survey data, and make some analysis (by B. Guerzoni)
+
 Revision 1.17  2007/06/06 16:26:46  arcelli
 remove fall-back call to local CDB storage
 
@@ -79,12 +82,20 @@ author: Silvia Arcelli, arcelli@bo.infn.it
 
 #include <Rtypes.h>
 
+#include "TGeoMatrix.h"
 #include "TMath.h"
 #include "TFile.h"
 #include "TRandom.h"
+#include "TGeoManager.h"
+#include "TGeoVolume.h"
+#include "TGeoBBox.h"
+#include "TGeoTrd1.h"
+#include "TGeoPhysicalNode.h"
+#include "TGeoNode.h"
+#include "TObjString.h"
 
 #include "AliLog.h"
-#include "AliAlignObj.h"
+//#include "AliAlignObj.h"
 #include "AliAlignObjParams.h"
 #include "AliAlignObjMatrix.h"
 #include "AliCDBManager.h"
@@ -94,7 +105,7 @@ author: Silvia Arcelli, arcelli@bo.infn.it
 #include "AliTOFAlignment.h"
 #include "AliSurveyObj.h"
 #include "AliSurveyPoint.h"
-#include "TObjString.h"
+
 ClassImp(AliTOFAlignment)
 
 const Double_t AliTOFAlignment::fgkRorigTOF  = 384.5; // Mean Radius of the TOF ext. volume, cm
@@ -120,18 +131,20 @@ AliTOFAlignment::AliTOFAlignment():
    for(Int_t i=0; i<72; i++)
     for (Int_t j=0; j<6; j++)
       fCombFMData[i][j]=0;
+
+   for(Int_t i=0; i<18;i++)
+     fTOFMatrixId[i]=0;
+
 }
 //_____________________________________________________________________________
 AliTOFAlignment::AliTOFAlignment(const AliTOFAlignment &t):
-  TTask("AliTOFAlignment",""),
-  fNTOFAlignObj(0),
+  TTask(t),
+  fNTOFAlignObj(t.fNTOFAlignObj),
   fTOFmgr(0x0),
-  fTOFAlignObjArray(0x0)
+  fTOFAlignObjArray(t.fTOFAlignObjArray)
 { 
   //AliTOFAlignment copy Ctor
 
-  fNTOFAlignObj=t.fNTOFAlignObj;
-  fTOFAlignObjArray=t.fTOFAlignObjArray;
   //AliTOFalignment main Ctor
   for(Int_t i=0; i<18;i++)
      for(Int_t j=0; j<5; j++)
@@ -139,14 +152,25 @@ AliTOFAlignment::AliTOFAlignment(const AliTOFAlignment &t):
   for(Int_t i=0; i<72; i++)
     for (Int_t j=0; j<6; j++)
       fCombFMData[i][j]=t.fCombFMData[i][j]; 
+
+  for(Int_t i=0; i<18;i++)
+    fTOFMatrixId[i]=t.fTOFMatrixId[i];
+
 }
 //_____________________________________________________________________________
 AliTOFAlignment& AliTOFAlignment::operator=(const AliTOFAlignment &t){ 
   //AliTOFAlignment assignment operator
 
-  this->fNTOFAlignObj=t.fNTOFAlignObj;
-  this->fTOFmgr=t.fTOFmgr;
-  this->fTOFAlignObjArray=t.fTOFAlignObjArray;
+  if (&t == this)
+    return *this;
+
+  TTask::operator=(t);
+  fNTOFAlignObj=t.fNTOFAlignObj;
+  fTOFmgr=t.fTOFmgr;
+  fTOFAlignObjArray=t.fTOFAlignObjArray;
+  for(Int_t i=0; i<18;i++)
+    fTOFMatrixId[i]=t.fTOFMatrixId[i];
+
   return *this;
 
 }
@@ -157,7 +181,7 @@ AliTOFAlignment::~AliTOFAlignment() {
 }
 
 //_____________________________________________________________________________
-void AliTOFAlignment::Smear( Float_t *tr, Float_t *rot)
+void AliTOFAlignment::Smear(Float_t * const tr, Float_t * const rot)
 {
   //Introduce Random Offset/Tilts
   fTOFAlignObjArray = new TObjArray(kMaxAlignObj);
@@ -172,9 +196,11 @@ void AliTOFAlignment::Smear( Float_t *tr, Float_t *rot)
   //  Int_t iIndex=1; //dummy volume index
   UShort_t dvoluid = AliGeomManager::LayerToVolUID(iLayer,iIndex); //dummy volume identity 
   Int_t i;
+
+  const Int_t kSize=100;
+  Char_t  path[kSize];
   for (i = 0; i<nSMTOF ; i++) {
-    Char_t  path[100];
-    sprintf(path,"/ALIC_1/B077_1/BSEGMO%i_1/BTOF%i_1",i,i);
+    snprintf(path,kSize,"/ALIC_1/B077_1/BSEGMO%i_1/BTOF%i_1",i,i);
 
     dx = (rnd->Gaus(0.,1.))*tr[0];
     dy = (rnd->Gaus(0.,1.))*tr[1];
@@ -192,7 +218,7 @@ void AliTOFAlignment::Smear( Float_t *tr, Float_t *rot)
 }
 
 //_____________________________________________________________________________
-void AliTOFAlignment::Align( Float_t *tr, Float_t *rot)
+void AliTOFAlignment::Align(Float_t * const tr, Float_t * const rot)
 {
   //Introduce Offset/Tilts
 
@@ -205,11 +231,13 @@ void AliTOFAlignment::Align( Float_t *tr, Float_t *rot)
   AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
   UShort_t iIndex=0; //dummy volume index
   UShort_t dvoluid = AliGeomManager::LayerToVolUID(iLayer,iIndex); //dummy volume identity 
+
+  const Int_t kSize=100;
+  Char_t  path[kSize];
   Int_t i;
   for (i = 0; i<nSMTOF ; i++) {
 
-    Char_t  path[100];
-    sprintf(path,"/ALIC_1/B077_1/BSEGMO%i_1/BTOF%i_1",i,i);
+    snprintf(path,kSize,"/ALIC_1/B077_1/BSEGMO%i_1/BTOF%i_1",i,i);
     dx = tr[0];
     dy = tr[1];
     dz = tr[2];
@@ -224,13 +252,14 @@ void AliTOFAlignment::Align( Float_t *tr, Float_t *rot)
   AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
 }
 //_____________________________________________________________________________
-void AliTOFAlignment::WriteParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun)
+void AliTOFAlignment::WriteParOnCDB(const Char_t *sel, Int_t minrun, Int_t maxrun)
 {
   //Write Align Par on CDB
   AliCDBManager *man = AliCDBManager::Instance();
-  Char_t *sel1 = "AlignPar" ;
-  Char_t  out[100];
-  sprintf(out,"%s/%s",sel,sel1); 
+  const Char_t *sel1 = "AlignPar" ;
+  const Int_t kSize=100;
+  Char_t  out[kSize];
+  snprintf(out,kSize,"%s/%s",sel,sel1); 
   AliCDBId idTOFAlign(out,minrun,maxrun);
   AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
   mdTOFAlign->SetResponsible("TOF");
@@ -238,13 +267,15 @@ void AliTOFAlignment::WriteParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun)
   man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
 }
 //_____________________________________________________________________________
-void AliTOFAlignment::ReadParFromCDB(Char_t *sel, Int_t nrun)
+void AliTOFAlignment::ReadParFromCDB(const Char_t *sel, Int_t nrun)
 {
   //Read Align Par from CDB
   AliCDBManager *man = AliCDBManager::Instance();
-  Char_t *sel1 = "AlignPar" ;
-  Char_t  out[100];
-  sprintf(out,"%s/%s",sel,sel1); 
+  const Char_t *sel1 = "AlignPar" ;
+  const Int_t kSize=100;
+  Char_t  out[kSize];
+
+  snprintf(out,kSize,"%s/%s",sel,sel1); 
   AliCDBEntry *entry = man->Get(out,nrun);
   if (!entry) { 
     AliError(Form("Failed to get entry: %s",out));
@@ -256,13 +287,14 @@ void AliTOFAlignment::ReadParFromCDB(Char_t *sel, Int_t nrun)
 
 }
 //_____________________________________________________________________________
-void AliTOFAlignment::WriteSimParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun)
+void AliTOFAlignment::WriteSimParOnCDB(const Char_t *sel, Int_t minrun, Int_t maxrun)
 {
   //Write Sim Align Par on CDB
   AliCDBManager *man = AliCDBManager::Instance();
-  Char_t *sel1 = "AlignSimPar" ;
-  Char_t  out[100];
-  sprintf(out,"%s/%s",sel,sel1); 
+  const Char_t *sel1 = "AlignSimPar" ;
+  const Int_t kSize=100;
+  Char_t  out[kSize];
+  snprintf(out,kSize,"%s/%s",sel,sel1); 
   AliCDBId idTOFAlign(out,minrun,maxrun);
   AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
   mdTOFAlign->SetResponsible("TOF");
@@ -270,13 +302,18 @@ void AliTOFAlignment::WriteSimParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun)
   man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
 }
 //_____________________________________________________________________________
-void AliTOFAlignment::ReadSimParFromCDB(Char_t *sel, Int_t nrun){
+void AliTOFAlignment::ReadSimParFromCDB(const Char_t *sel, Int_t nrun){
   //Read Sim Align Par from CDB
   AliCDBManager *man = AliCDBManager::Instance();
-  Char_t *sel1 = "AlignSimPar" ;
-  Char_t  out[100];
-  sprintf(out,"%s/%s",sel,sel1); 
+  const Char_t *sel1 = "AlignSimPar" ;
+  const Int_t kSize=100;
+  Char_t  out[kSize];
+  snprintf(out,kSize,"%s/%s",sel,sel1); 
   AliCDBEntry *entry = man->Get(out,nrun);
+  if (!entry) { 
+    AliError(Form("Failed to get entry: %s",out));
+    return; 
+  }
   fTOFAlignObjArray=(TObjArray*)entry->GetObject();
   fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
   AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));
@@ -338,7 +375,8 @@ void AliTOFAlignment::BuildGeomForSurvey()
 
   // position all this stuff in the global ALICE frame
 
-  char name[16];
+  const Int_t kSize=100;
+  char name[kSize];
   Double_t smX = 0.;
   Double_t smY = 0.;
   Double_t smZ = 0.;
@@ -346,7 +384,7 @@ void AliTOFAlignment::BuildGeomForSurvey()
   for (Int_t iSM = 0; iSM < 18; iSM++) {
     Int_t mod = iSM + 13;
     if (mod > 17) mod -= 18;
-    sprintf(name, "BTOF%d",mod);
+    snprintf(name,kSize, "BTOF%d",mod);
     trd1[iSM] = new TGeoVolume(name,strd1);
     Float_t phi  = iSM * 20.;
     Float_t phi2 = 270 + phi;
@@ -379,7 +417,7 @@ void AliTOFAlignment::BuildGeomForSurvey()
   
   for (Int_t iSM = 0; iSM < 18; iSM++) {
 
-    sprintf(name, "TOP_1/BTOF%d_1", iSM);
+    snprintf(name,kSize, "TOP_1/BTOF%d_1", iSM);
     printf("\n\n*****************  TOF SuperModule:  %s ****************** \n",name);
     TGeoPhysicalNode* pn3 = fTOFmgr->MakePhysicalNode(name);
     fTOFMatrixId[iSM] = pn3->GetMatrix(); //save "ideal" global matrix
@@ -390,7 +428,7 @@ void AliTOFAlignment::BuildGeomForSurvey()
 }
 
 //_____________________________________________________________________________
-void AliTOFAlignment::InsertMisAlignment(Float_t *mis)
+void AliTOFAlignment::InsertMisAlignment(Float_t * const mis)
 {
   // Now Apply the Displacements and store the misaligned FM positions...
   //
@@ -401,9 +439,11 @@ void AliTOFAlignment::InsertMisAlignment(Float_t *mis)
   Double_t lC[3]={fgkXFM, fgkYFM ,fgkZFM};
   Double_t lD[3]={-fgkXFM, fgkYFM ,fgkZFM};
 
+  const Int_t kSize=16;
+  char name[kSize];
+
   for(Int_t iSM=0;iSM<18;iSM++){
-     char name[16];
-     sprintf(name, "TOP_1/BTOF%d_1", iSM);
+    snprintf(name,kSize, "TOP_1/BTOF%d_1", iSM);
      fTOFmgr->cd(name);
      printf("\n\n******Misaligning TOF SuperModule ************** %s \n",name);
 
@@ -555,29 +595,30 @@ void AliTOFAlignment::MakeDefData(const Int_t nf,TString namefiles[])
   Int_t nfm=0;
   Int_t nsm=0;
   Long64_t totdata[72]={0};
-  AliSurveyObj *so = new AliSurveyObj();
-  for (Int_t i=0;i<nf; i++)
+
+  for (Int_t ii=0;ii<nf; ii++)
     {
-      const Char_t *nome=namefiles[i];
+      AliSurveyObj *so = new AliSurveyObj();
+      const Char_t *nome=namefiles[ii];
       so->FillFromLocalFile(nome);
       TObjArray *points = so->GetData();
       Int_t nSurveyPoint=points->GetEntries();
-      for(Int_t i=0;i<nSurveyPoint;i++){
-        const char* pointName= ((AliSurveyPoint *) points->At(i))->GetPointName().Data();
+      for(Int_t jj=0;jj<nSurveyPoint;jj++){
+        const char* pointName= ((AliSurveyPoint *) points->At(jj))->GetPointName().Data();
         nfm=atoi(&pointName[6]);
         nsm=atoi(&pointName[2]);
-        data[nsm*4+nfm][0][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(i))->GetX();
-        data[nsm*4+nfm][2][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(i))->GetY();
-        data[nsm*4+nfm][4][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(i))->GetZ();
-        data[nsm*4+nfm][1][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(i))->GetPrecisionX();
-        data[nsm*4+nfm][3][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(i))->GetPrecisionY();
-        data[nsm*4+nfm][5][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(i))->GetPrecisionZ();
+        data[nsm*4+nfm][0][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(jj))->GetX();
+        data[nsm*4+nfm][2][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(jj))->GetY();
+        data[nsm*4+nfm][4][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(jj))->GetZ();
+        data[nsm*4+nfm][1][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(jj))->GetPrecisionX();
+        data[nsm*4+nfm][3][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(jj))->GetPrecisionY();
+        data[nsm*4+nfm][5][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(jj))->GetPrecisionZ();
         totdata[nsm*4+nfm]=totdata[nsm*4+nfm]+1;
       } 
+      delete so;
     }
 
-  //  delete so;
-
+  
   for(Int_t i=0; i<72 ;i++){
     Float_t numx=0, numy=0,numz=0, comodox=0, comodoy=0, comodoz=0,denx=0, deny=0, denz=0;
     if(totdata[i]!=0){    
@@ -687,6 +728,7 @@ void AliTOFAlignment::ReadSurveyDataAndAlign(){
   f.cd();
   f.WriteObject(fTOFAlignObjArray,"TOFAlignObjs","kSingleKey");
   f.Close();
+  
 
 }