CMS 3D CMS Logo

Public Member Functions | Private Attributes

ApeSettingAlgorithm Class Reference

Inheritance diagram for ApeSettingAlgorithm:
AlignmentAlgorithmBase

List of all members.

Public Member Functions

 ApeSettingAlgorithm (const edm::ParameterSet &cfg)
 Constructor.
virtual void initialize (const edm::EventSetup &setup, AlignableTracker *tracker, AlignableMuon *muon, AlignableExtras *extras, AlignmentParameterStore *store)
 Call at beginning of job.
virtual void run (const edm::EventSetup &setup, const EventInfo &eventInfo)
 Run the algorithm.
virtual void terminate ()
 Call at end of job.
virtual ~ApeSettingAlgorithm ()
 Destructor.

Private Attributes

bool readApeFromAscii_
bool readFullLocalMatrix_
bool readLocalNotGlobal_
bool saveApeToAscii_
bool saveComposites_
bool saveLocalNotGlobal_
bool setComposites_
AlignableNavigatortheAlignableNavigator
edm::ParameterSet theConfig
AlignableTrackertheTracker

Detailed Description

Definition at line 56 of file ApeSettingAlgorithm.cc.


Constructor & Destructor Documentation

ApeSettingAlgorithm::ApeSettingAlgorithm ( const edm::ParameterSet cfg)
ApeSettingAlgorithm::~ApeSettingAlgorithm ( ) [virtual]

Destructor.

Definition at line 110 of file ApeSettingAlgorithm.cc.

References theAlignableNavigator.


Member Function Documentation

void ApeSettingAlgorithm::initialize ( const edm::EventSetup setup,
AlignableTracker tracker,
AlignableMuon muon,
AlignableExtras extras,
AlignmentParameterStore store 
) [virtual]

Call at beginning of job.

Implements AlignmentAlgorithmBase.

Definition at line 117 of file ApeSettingAlgorithm.cc.

References AlignableNavigator::alignableFromDetId(), edm::FileInPath::fullPath(), edm::ParameterSet::getParameter(), ExpressReco_HICollisions_FallBack::id, readApeFromAscii_, readFullLocalMatrix_, readLocalNotGlobal_, setComposites_, theAlignableNavigator, theConfig, theTracker, patCandidatesForDimuonsSequences_cff::tracker, TkRotation< T >::xx(), TkRotation< T >::xy(), TkRotation< T >::xz(), TkRotation< T >::yx(), TkRotation< T >::yy(), TkRotation< T >::yz(), TkRotation< T >::zx(), TkRotation< T >::zy(), and TkRotation< T >::zz().

{
 theAlignableNavigator = new AlignableNavigator(tracker, muon);
 theTracker = tracker;
 
 if (readApeFromAscii_)
   { std::ifstream apeReadFile(theConfig.getParameter<edm::FileInPath>("apeASCIIReadFile").fullPath().c_str()); //requires <fstream>
   if (!apeReadFile.good())
     { edm::LogInfo("Alignment") << "@SUB=initialize" <<"Problem opening APE file: skipping"
                                 << theConfig.getParameter<edm::FileInPath>("apeASCIIReadFile").fullPath();
     return;
     }
   std::set<int> apeList; //To avoid duplicates
   while (!apeReadFile.eof())
     { int apeId=0; double x11,x21,x22,x31,x32,x33;
     if (!readLocalNotGlobal_ || readFullLocalMatrix_) 
       { apeReadFile>>apeId>>x11>>x21>>x22>>x31>>x32>>x33>>std::ws;}
     else
       { apeReadFile>>apeId>>x11>>x22>>x33>>std::ws;}
     //idr What sanity checks do we need to put here?
     if (apeId != 0) //read appears valid?
       { if (apeList.find(apeId) == apeList.end()) //Not previously done
         {  DetId id(apeId);
         AlignableDetOrUnitPtr alidet(theAlignableNavigator->alignableFromDetId(id)); //NULL if none
         if (alidet)
           { if ((alidet->components().size()<1) || setComposites_) //the problem with glued dets...
             { GlobalError globErr;
             if (readLocalNotGlobal_)
               { AlgebraicSymMatrix as(3,0); 
               if (readFullLocalMatrix_)
                 { as[0][0]=x11; as[1][0]=x21; as[1][1]=x22;
                 as[2][0]=x31; as[2][1]=x32; as[2][2]=x33;
                 }
               else
                 { as[0][0]=x11*x11; as[1][1]=x22*x22; as[2][2]=x33*x33;} //local cov.
               align::RotationType rt=alidet->globalRotation();
               AlgebraicMatrix am(3,3);
               am[0][0]=rt.xx(); am[0][1]=rt.xy(); am[0][2]=rt.xz();
               am[1][0]=rt.yx(); am[1][1]=rt.yy(); am[1][2]=rt.yz();
               am[2][0]=rt.zx(); am[2][1]=rt.zy(); am[2][2]=rt.zz();
               as=as.similarityT(am); //symmetric matrix
               globErr = GlobalError( as );
               }
             else
               {
                 globErr = GlobalError(x11,x21,x22,x31,x32,x33);
               }
             alidet->setAlignmentPositionError(globErr, false); // do not propagate down!
             apeList.insert(apeId); //Flag it's been set
             }
           else
             { edm::LogInfo("Alignment") << "@SUB=initialize" << "Not Setting APE for Composite DetId "<<apeId;
             }
           }
         }
       else
         { edm::LogInfo("Alignment") << "@SUB=initialize" << "Skipping duplicate APE for DetId "<<apeId;
         }
       }
     }
   apeReadFile.close();
   edm::LogInfo("Alignment") << "@SUB=initialize" << "Set "<<apeList.size()<<" APE values.";
   }
}
void ApeSettingAlgorithm::run ( const edm::EventSetup setup,
const EventInfo eventInfo 
) [virtual]

Run the algorithm.

Implements AlignmentAlgorithmBase.

Definition at line 224 of file ApeSettingAlgorithm.cc.

{
  // nothing to do here?
}
void ApeSettingAlgorithm::terminate ( void  ) [virtual]

Call at end of job.

Implements AlignmentAlgorithmBase.

Definition at line 187 of file ApeSettingAlgorithm.cc.

References AlignableNavigator::alignableFromDetId(), AlignableTracker::alignmentErrors(), edm::ParameterSet::getUntrackedParameter(), i, ExpressReco_HICollisions_FallBack::id, j, gen::k, AlignmentErrors::m_alignError, saveApeToAscii_, saveComposites_, saveLocalNotGlobal_, theAlignableNavigator, theConfig, theTracker, TkRotation< T >::xx(), TkRotation< T >::xy(), TkRotation< T >::xz(), TkRotation< T >::yx(), TkRotation< T >::yy(), TkRotation< T >::yz(), TkRotation< T >::zx(), TkRotation< T >::zy(), and TkRotation< T >::zz().

{
  if (saveApeToAscii_)
    { AlignmentErrors* aliErr=theTracker->alignmentErrors();
    int theSize=aliErr->m_alignError.size();
    std::ofstream apeSaveFile(theConfig.getUntrackedParameter<std::string>("apeASCIISaveFile").c_str()); //requires <fstream>
    for (int i=0; i < theSize; ++i)
      { int id= aliErr->m_alignError[i].rawId();
      AlignableDetOrUnitPtr alidet(theAlignableNavigator->alignableFromDetId(DetId(id))); //NULL if none
      if (alidet && ((alidet->components().size()<1) || saveComposites_))
        { apeSaveFile<<id;
        CLHEP::HepSymMatrix sm = aliErr->m_alignError[i].matrix();
        if (saveLocalNotGlobal_)
          { align::RotationType rt=alidet->globalRotation();
          AlgebraicMatrix am(3,3);
          am[0][0]=rt.xx(); am[0][1]=rt.xy(); am[0][2]=rt.xz();
          am[1][0]=rt.yx(); am[1][1]=rt.yy(); am[1][2]=rt.yz();
          am[2][0]=rt.zx(); am[2][1]=rt.zy(); am[2][2]=rt.zz();
          sm=sm.similarity(am); //symmetric matrix
          } //transform to local
        for (int j=0; j < 3; ++j)
          for (int k=0; k <= j; ++k)
            apeSaveFile<<"  "<<sm[j][k]; //always write full matrix
        
        apeSaveFile<<std::endl;
        }
      }
    delete aliErr;
    apeSaveFile.close();
    }
  // clean up at end:  // FIXME: should we delete here or in destructor?
  delete theAlignableNavigator;
  theAlignableNavigator = 0;
}

Member Data Documentation

Definition at line 80 of file ApeSettingAlgorithm.cc.

Referenced by ApeSettingAlgorithm(), and initialize().

Definition at line 80 of file ApeSettingAlgorithm.cc.

Referenced by ApeSettingAlgorithm(), and initialize().

Definition at line 81 of file ApeSettingAlgorithm.cc.

Referenced by ApeSettingAlgorithm(), and initialize().

Definition at line 80 of file ApeSettingAlgorithm.cc.

Referenced by ApeSettingAlgorithm(), and terminate().

Definition at line 82 of file ApeSettingAlgorithm.cc.

Referenced by ApeSettingAlgorithm(), and terminate().

Definition at line 81 of file ApeSettingAlgorithm.cc.

Referenced by ApeSettingAlgorithm(), and terminate().

Definition at line 82 of file ApeSettingAlgorithm.cc.

Referenced by ApeSettingAlgorithm(), and initialize().

Definition at line 78 of file ApeSettingAlgorithm.cc.

Referenced by initialize(), terminate(), and ~ApeSettingAlgorithm().

Definition at line 77 of file ApeSettingAlgorithm.cc.

Referenced by ApeSettingAlgorithm(), initialize(), and terminate().

Definition at line 79 of file ApeSettingAlgorithm.cc.

Referenced by initialize(), and terminate().