X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FAliTRDalignment.cxx;h=80e511f5c341725ec4121f8a9c53b15705f8a0ec;hb=e348db2b607f572167637af01992c49b319f2ca3;hp=a3820e5061b84f7c1c508f1af9cd6ba5774e619e;hpb=afba1460e79990c60a0ff584928869181d3bab31;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/AliTRDalignment.cxx b/TRD/AliTRDalignment.cxx index a3820e5061b..80e511f5c34 100644 --- a/TRD/AliTRDalignment.cxx +++ b/TRD/AliTRDalignment.cxx @@ -46,7 +46,7 @@ // TGeoManager::Import("geometry.root"); a.WriteRoot("kuku.root"); // // TGeoManager::Import("geometry.root"); a.WriteDB("kukudb.root",0,0); // // TGeoManager::Import("geometry.root"); // -// a.WriteDB("local://$ALICE_ROOT", "TRD/Align/Data", 0,0); // +// a.WriteDB("local://$ALICE_ROOT/OCDB", "TRD/Align/Data", 0,0); // // TGeoManager::Import("geometry.root"); a.WriteGeo("kukugeometry.root"); // // // // b.ReadAscii("kuku.dat"); // @@ -67,7 +67,6 @@ #include #include -//#include #include "TMath.h" #include "TFile.h" @@ -85,7 +84,6 @@ #include "AliCDBStorage.h" #include "AliCDBMetaData.h" #include "AliCDBEntry.h" -#include "AliCDBId.h" #include "AliSurveyObj.h" #include "AliSurveyPoint.h" @@ -93,6 +91,8 @@ void trdAlignmentFcn(Int_t &npar, Double_t *gin, Double_t &f, Double_t *x, Int_t iflag); +using std::ostream; +using std::fstream; ClassImp(AliTRDalignment) //_____________________________________________________________________________ @@ -148,6 +148,11 @@ AliTRDalignment::AliTRDalignment() fSurveyZ0[j][k][l] = z[k]; } + for (int i=0; i<1000; i++) { + fIbuffer[i] = 0; + fDbuffer[i] = 0.0; + } + } //_____________________________________________________________________________ @@ -175,6 +180,10 @@ AliTRDalignment::AliTRDalignment(const AliTRDalignment& source) fSurveyY0[j][k][l] = source.fSurveyY0[j][k][l]; fSurveyZ0[j][k][l] = source.fSurveyZ0[j][k][l]; } + for (int i=0; i<1000; i++) { + fIbuffer[i] = 0; + fDbuffer[i] = 0.0; + } } @@ -296,12 +305,12 @@ void AliTRDalignment::SetSmRandom(double a[6]) // double x[6]; + double xmax[6]={999, 0.6, 999, 999, 999, 999}; for (int i = 0; i < 18; i++) { - fRan.Rannor(x[0],x[1]); - fRan.Rannor(x[2],x[3]); - fRan.Rannor(x[4],x[5]); - for (int j = 0; j < 6; j++) x[j] *= a[j]; + for (int j = 0; j < 6; j++) { + do {x[j] = fRan.Gaus(0,a[j]);} while (TMath::Abs(x[j]) > xmax[j]); + } SetSm(i,x); //PrintSm(i); } @@ -405,7 +414,7 @@ void AliTRDalignment::SetChResidual() } //_____________________________________________________________________________ -void AliTRDalignment::PrintSm(int i, FILE *fp) const +void AliTRDalignment::PrintSm(int i, FILE * const fp) const { // // print the supermodule data @@ -418,7 +427,7 @@ void AliTRDalignment::PrintSm(int i, FILE *fp) const } //_____________________________________________________________________________ -void AliTRDalignment::PrintCh(int i, FILE *fp) const +void AliTRDalignment::PrintCh(int i, FILE * const fp) const { // // print the chamber data @@ -431,7 +440,7 @@ void AliTRDalignment::PrintCh(int i, FILE *fp) const } //_____________________________________________________________________________ -void AliTRDalignment::ReadAscii(char *filename) +void AliTRDalignment::ReadAscii(const char * const filename) { // // read the alignment data from ascii file @@ -485,15 +494,13 @@ void AliTRDalignment::ReadCurrentGeo() // represent just the last alignment. -- check this! // + TGeoPNEntry *pne; TGeoHMatrix *ideSm[18]; // ideal TGeoHMatrix *misSm[18]; // misaligned - for (int i = 0; i < 18; i++) { + for (int i = 0; i < 18; i++) if ((pne = gGeoManager->GetAlignableEntry(GetSmName(i)))) { // read misaligned and original matrices - TGeoPNEntry *pne = gGeoManager->GetAlignableEntry(GetSmName(i)); - if (!pne) AliError(Form("no such physical node entry: %s",GetSmName(i))); - if (!pne) continue; TGeoPhysicalNode *node = pne->GetPhysicalNode(); if (!node) AliError(Form("physical node entry %s has no physical node",GetSmName(i))); if (!node) continue; @@ -525,13 +532,10 @@ void AliTRDalignment::ReadCurrentGeo() TGeoHMatrix *ideCh[540]; // ideal TGeoHMatrix *misCh[540]; // misaligned - for (int i = 0; i < 540; i++) { + for (int i = 0; i < 540; i++) if ((pne = gGeoManager->GetAlignableEntry(GetChName(i)))) { // read misaligned and original matrices - TGeoPNEntry *pne = gGeoManager->GetAlignableEntry(GetChName(i)); - if (!pne) AliError(Form("no such physical node entry: %s",GetChName(i))); - if (!pne) continue; TGeoPhysicalNode *node = pne->GetPhysicalNode(); if (!node) AliError(Form("physical node entry %s has no physical node",GetChName(i))); if (!node) continue; @@ -568,7 +572,7 @@ void AliTRDalignment::ReadCurrentGeo() } //_____________________________________________________________________________ -void AliTRDalignment::ReadRoot(char *filename) +void AliTRDalignment::ReadRoot(const char * const filename) { // // read the alignment data from root file @@ -588,7 +592,7 @@ void AliTRDalignment::ReadRoot(char *filename) } //_____________________________________________________________________________ -void AliTRDalignment::ReadDB(char *filename) +void AliTRDalignment::ReadDB(const char * const filename) { // // read the alignment data from database file @@ -611,8 +615,8 @@ void AliTRDalignment::ReadDB(char *filename) } //_____________________________________________________________________________ -void AliTRDalignment::ReadDB(char *db, char *path, int run - , int version, int subversion) +void AliTRDalignment::ReadDB(const char * const db, const char * const path, + int run, int version, int subversion) { // // read the alignment data from database @@ -645,13 +649,16 @@ Bool_t AliTRDalignment::DecodeSurveyPointName(TString pna, Int_t &sm, Int_t &iz, ir = -1; if (pna(9) == 'l') ir=0; // low radius if (pna(9) == 'h') ir=1; // high radius - iphi = atoi(pna(10,0).Data()); // phi within supermodule + iphi = -1; + if (pna(10) == '0') iphi = 0; // low phi within supermodule + if (pna(10) == '1') iphi = 1; // high phi within supermodule if (sm>=0 && sm<18 && iz>=0 && iz<2 && ir>=0 && ir<2 && iphi>=0 && iphi<2) return kTRUE; AliError(Form("cannot decode point name: %s",pna.Data())); return kFALSE; } + //_____________________________________________________________________________ -void AliTRDalignment::ReadSurveyReport(char *filename) +void AliTRDalignment::ReadSurveyReport(const char * const filename) { // // Read survey report and store the numbers in fSurveyX, fSurveyY, fSurveyZ, @@ -747,24 +754,21 @@ void AliTRDalignment::ReadSurveyReport(char *filename) fSurveyEZ[i][j][k][l] = precision/10; // "precision" is supposed to be in mm // if, at some point, separate precision numbers for x,y,z show up in the // survey reports the function will fail here - std::cout << "decoded "<GetData(); - for (int i = 0; iGetEntries(); i++) { - AliSurveyPoint *po = (AliSurveyPoint *) points->At(i); + for (int ip = 0; ipGetEntries(); ++ip) { + AliSurveyPoint *po = (AliSurveyPoint *) points->At(ip); TString pna = po->GetPointName(); Int_t i,j,k,l; if (DecodeSurveyPointName(pna,i,j,k,l)) { @@ -842,13 +846,10 @@ void AliTRDalignment::ReadSurveyReport(AliSurveyObj *so) fSurveyEX[i][j][k][l] = po->GetPrecisionX()/10; // "precision" is supposed to be in mm fSurveyEY[i][j][k][l] = po->GetPrecisionY()/10; fSurveyEZ[i][j][k][l] = po->GetPrecisionZ()/10; - std::cout << "decoded "<GetAlignableEntry(GetSmName(i)); if (!pne) AliError(Form("no such physical node entry: %s",GetSmName(i))); TGeoPhysicalNode *node = pne->GetPhysicalNode(); - if (!node) AliError(Form("physical node entry %s has no physical node",GetSmName(i))); + if (!node) { + AliWarning(Form("physical node entry %s has no physical node; making a new one",GetSmName(i))); + node = gGeoManager->MakeAlignablePN(pne); + } // al.ApplyToGeometry(); // node = pne->GetPhysicalNode(); // changed in the meantime @@ -920,14 +925,14 @@ void trdAlignmentFcn(int &npar, double *g, double &f, double *par, int iflag) { AliTRDalignment *alignment = (AliTRDalignment*) gMinuit->GetObjectFit(); f = alignment->SurveyChi2(par); - if (iflag==3); - if (npar); - if (g); // no warnings about unused stuff... + if (iflag==3) {} + if (npar) {} + if (g) {} // no warnings about unused stuff... } //_____________________________________________________________________________ -void AliTRDalignment::SurveyToAlignment(int i,char *flag) { +void AliTRDalignment::SurveyToAlignment(int i, const char * const flag) { // // Find the supermodule alignment parameters needed to make the survey @@ -975,7 +980,7 @@ void AliTRDalignment::SurveyToAlignment(int i,char *flag) { } //_____________________________________________________________________________ -void AliTRDalignment::ReadAny(char *filename) +void AliTRDalignment::ReadAny(const char * const filename) { // // read the alignment data from any kind of file @@ -992,7 +997,7 @@ void AliTRDalignment::ReadAny(char *filename) } //_____________________________________________________________________________ -void AliTRDalignment::WriteAscii(char *filename) const +void AliTRDalignment::WriteAscii(const char * const filename) const { // // store the alignment data on ascii file @@ -1012,7 +1017,7 @@ void AliTRDalignment::WriteAscii(char *filename) const } //_____________________________________________________________________________ -void AliTRDalignment::WriteRoot(char *filename) +void AliTRDalignment::WriteRoot(const char * const filename) { // // store the alignment data on root file @@ -1033,7 +1038,7 @@ void AliTRDalignment::WriteRoot(char *filename) } //_____________________________________________________________________________ -void AliTRDalignment::WriteDB(char *filename, int run0, int run1) +void AliTRDalignment::WriteDB(const char * const filename, int run0, int run1, int ver, int subver) { // // dumping on a DB-like file @@ -1041,12 +1046,14 @@ void AliTRDalignment::WriteDB(char *filename, int run0, int run1) TClonesArray *ar = new TClonesArray("AliAlignObjParams",10000); NumbersToAr(ar); - char *path = "TRD/Align/Data"; + const Char_t *path = "TRD/Align/Data"; AliCDBId id(path,run0,run1); AliCDBMetaData *md = new AliCDBMetaData(); md->SetResponsible("Dariusz Miskowiec"); md->SetComment(fComment.GetString().Data()); - AliCDBEntry *e = new AliCDBEntry(ar, id, md); + AliCDBEntry *e = new AliCDBEntry(ar, id, md); + e->SetVersion(ver); + e->SetSubVersion(subver); TFile fi(filename,"RECREATE"); if (fi.IsOpen()) { e->Write(); @@ -1063,7 +1070,7 @@ void AliTRDalignment::WriteDB(char *filename, int run0, int run1) } //_____________________________________________________________________________ -void AliTRDalignment::WriteDB(char *db, char *path, int run0, int run1) +void AliTRDalignment::WriteDB(char * const db, const char * const path, int run0, int run1) { // // store the alignment data in database @@ -1161,7 +1168,7 @@ void AliTRDalignment::PrintChRMS() const } //_____________________________________________________________________________ -void AliTRDalignment::ArToNumbers(TClonesArray *ar) +void AliTRDalignment::ArToNumbers(TClonesArray * const ar) { // // for each of the alignment objects in array ar extract the six local @@ -1181,7 +1188,7 @@ void AliTRDalignment::ArToNumbers(TClonesArray *ar) } //_____________________________________________________________________________ -void AliTRDalignment::NumbersToAr(TClonesArray *ar) +void AliTRDalignment::NumbersToAr(TClonesArray * const ar) { // // build array of AliAlignObj objects based on fSm and fCh data @@ -1204,13 +1211,15 @@ void AliTRDalignment::NumbersToAr(TClonesArray *ar) } for (int i = 0; i < 540; i++) { - new(alobj[nobj]) AliAlignObjParams(GetChName(i) - ,GetVoi(i) - ,fCh[i][0],fCh[i][1],fCh[i][2] - ,fCh[i][3],fCh[i][4],fCh[i][5] - ,0); - ((AliAlignObj *) alobj[nobj])->ApplyToGeometry(); - nobj++; + if (gGeoManager->GetAlignableEntry(GetChName(i))) { + new(alobj[nobj]) AliAlignObjParams(GetChName(i) + ,GetVoi(i) + ,fCh[i][0],fCh[i][1],fCh[i][2] + ,fCh[i][3],fCh[i][4],fCh[i][5] + ,0); + ((AliAlignObj *) alobj[nobj])->ApplyToGeometry(); + nobj++; + } } AliInfo("current geometry modified");