Go to the documentation of this file.00001 #include "TTree.h"
00002
00003 #include "Alignment/CommonAlignment/interface/Alignable.h"
00004 #include "Alignment/CommonAlignment/interface/AlignmentParameters.h"
00005 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00006
00007
00008 #include "Alignment/CommonAlignmentAlgorithm/interface/AlignmentCorrelationsIORoot.h"
00009
00010
00011
00012
00013 AlignmentCorrelationsIORoot::AlignmentCorrelationsIORoot()
00014 {
00015 treename = "AlignmentCorrelations";
00016 treetxt = "Correlations";
00017 }
00018
00019
00020
00021 void AlignmentCorrelationsIORoot::createBranches(void)
00022 {
00023 tree->Branch("Ali1Id", &Ali1Id, "Ali1Id/i");
00024 tree->Branch("Ali2Id", &Ali2Id, "Ali2Id/i");
00025 tree->Branch("Ali1ObjId", &Ali1ObjId, "Ali1ObjId/I");
00026 tree->Branch("Ali2ObjId", &Ali2ObjId, "Ali2ObjId/I");
00027 tree->Branch("corSize", &corSize, "corSize/I");
00028 tree->Branch("CorMatrix", &CorMatrix, "CorMatrix[corSize]/D");
00029 }
00030
00031
00032
00033 void AlignmentCorrelationsIORoot::setBranchAddresses(void)
00034 {
00035 tree->SetBranchAddress("corSize", &corSize);
00036 tree->SetBranchAddress("Ali1Id", &Ali1Id);
00037 tree->SetBranchAddress("Ali2Id", &Ali2Id);
00038 tree->SetBranchAddress("Ali1ObjId", &Ali1ObjId);
00039 tree->SetBranchAddress("Ali2ObjId", &Ali2ObjId);
00040 tree->SetBranchAddress("CorMatrix", &CorMatrix);
00041 }
00042
00043
00044
00045 int AlignmentCorrelationsIORoot::write(const align::Correlations& cor, bool validCheck)
00046 {
00047 int icount=0;
00048
00049 for(align::Correlations::const_iterator it=cor.begin();
00050 it!=cor.end();it++) {
00051 AlgebraicMatrix mat=(*it).second;
00052 std::pair<Alignable*,Alignable*> Pair = (*it).first;
00053 Alignable* ali1 = Pair.first;
00054 Alignable* ali2 = Pair.second;
00055 if( (ali1->alignmentParameters()->isValid()
00056 && ali2->alignmentParameters()->isValid()) || !(validCheck)) {
00057 Ali1ObjId = ali1->alignableObjectId();
00058 Ali2ObjId = ali2->alignableObjectId();
00059 Ali1Id = ali1->id();
00060 Ali2Id = ali2->id();
00061 int maxColumn = mat.num_row();
00062 corSize = maxColumn*maxColumn;
00063 for(int row = 0;row<maxColumn;row++)
00064 for(int col = 0;col<maxColumn;col++)
00065 CorMatrix[row+col*maxColumn] =mat[row][col];
00066 tree->Fill();
00067 icount++;
00068 }
00069 }
00070 edm::LogInfo("AlignmentCorrelationsIORoot") << "Writing correlations: all,written: "
00071 << cor.size() << "," << icount;
00072 return 0;
00073 }
00074
00075
00076
00077
00078 align::Correlations
00079 AlignmentCorrelationsIORoot::read(const align::Alignables& alivec, int& ierr)
00080 {
00081 align::Correlations theMap;
00082
00083
00084 align::Alignables::const_iterator it1;
00085 std::map< std::pair<unsigned int,int>, Alignable* > idAlis;
00086 for( it1=alivec.begin();it1!=alivec.end();it1++ )
00087 idAlis[std::make_pair((*it1)->id(),(*it1)->alignableObjectId())] = (*it1);
00088
00089 std::map<std::pair<unsigned int,int>,Alignable*>::const_iterator aliSearch1;
00090 std::map<std::pair<unsigned int,int>,Alignable*>::const_iterator aliSearch2;
00091 int nfound=0;
00092 double maxEntry = tree->GetEntries();
00093 for( int entry = 0;entry<maxEntry;entry++ )
00094 {
00095 tree->GetEntry(entry);
00096 aliSearch1 = idAlis.find(std::make_pair(Ali1Id,Ali1ObjId));
00097 aliSearch2 = idAlis.find(std::make_pair(Ali2Id,Ali2ObjId));
00098 if (aliSearch1!=idAlis.end()
00099 && aliSearch2!=idAlis.end())
00100 {
00101
00102 nfound++;
00103 Alignable* myAli1 = (*aliSearch1).second;
00104 Alignable* myAli2 = (*aliSearch2).second;
00105
00106
00107
00108 AlgebraicMatrix mat(nParMax,nParMax);
00109 for(int row = 0;row<nParMax;row++)
00110 for(int col = 0;col<nParMax;col++)
00111 mat[row][col] = CorMatrix[row+col*nParMax];
00112 theMap[ std::make_pair(myAli1,myAli2) ] = mat;
00113 }
00114 }
00115
00116 edm::LogInfo("AlignmentCorrelationsIORoot") << "Read correlations: all,read: "
00117 << alivec.size() << "," << nfound;
00118
00119 ierr=0;
00120 return theMap;
00121 }