116 LogTrace(
"Calibration") <<
"--- [DTVDriftCalibration] Event analysed #Run: " <<
event.id().run()
117 <<
" #Event: " <<
event.id().event();
122 stringstream linestr;
123 int selWheel, selStation, selSector;
125 linestr >> selWheel >> selStation >> selSector;
126 chosenChamberId =
DTChamberId(selWheel, selStation, selSector);
127 LogTrace(
"Calibration") <<
"chosen chamber " << chosenChamberId;
149 for (chamberIdIt = all4DSegments->id_begin();
150 chamberIdIt != all4DSegments->id_end();
154 const DTChamber* chamber = dtGeom->chamber(*chamberIdIt);
155 LogTrace(
"Calibration") <<
"Chamber Id: " << *chamberIdIt;
166 segment!=range.second; ++segment){
168 if( !(*segment).hasZed() && !(*segment).hasPhi() ){
169 LogError(
"Calibration") <<
"4D segment without Z and Phi segments";
173 LogTrace(
"Calibration") <<
"Segment local pos (in chamber RF): " << (*segment).localPosition()
174 <<
"\nSegment global pos: " << chamber->
toGlobal((*segment).localPosition());
176 if( !
select_(*segment, event, eventSetup) )
continue;
180 map<DTSuperLayerId,vector<DTRecHit1D> > hitsBySLMap;
181 if((*segment).hasPhi()){
186 for(vector<DTRecHit1D>::const_iterator
hit = phiHits.begin();
187 hit != phiHits.end(); ++
hit) {
190 hitsBySLMap[slId].push_back(*
hit);
196 if((*segment).hasZed()) {
199 zSeg2DPosInCham = chamber->
toLocal(sl->
toGlobal((*zSeg).localPosition()));
200 zSeg2DDirInCham = chamber->
toLocal(sl->
toGlobal((*zSeg).localDirection()));
204 LocalPoint segment4DLocalPos = (*segment).localPosition();
205 LocalVector segment4DLocalDir = (*segment).localDirection();
206 double chiSquare = ((*segment).chi2()/(*segment).degreesOfFreedom());
208 hChi2->Fill(chiSquare);
209 if((*segment).hasPhi())
210 h2DSegmRPhi->
Fill(phiSeg2DPosInCham.
x(), phiSeg2DDirInCham.
x()/phiSeg2DDirInCham.
z());
211 if((*segment).hasZed())
212 h2DSegmRZ->
Fill(zSeg2DPosInCham.
y(), zSeg2DDirInCham.
y()/zSeg2DDirInCham.
z());
214 if((*segment).hasZed() && (*segment).hasPhi())
216 segment4DLocalPos.
y(),
217 atan(segment4DLocalDir.
x()/segment4DLocalDir.
z())*180./
Geom::pi(),
218 atan(segment4DLocalDir.
y()/segment4DLocalDir.
z())*180./
Geom::pi(),
220 else if((*segment).hasPhi())
222 atan(segment4DLocalDir.
x()/segment4DLocalDir.
z())*180./
Geom::pi());
223 else if((*segment).hasZed())
224 LogWarning(
"Calibration") <<
"4d segment with only Z";
227 for(
map<
DTSuperLayerId,vector<DTRecHit1D> >::const_iterator slIdAndHits = hitsBySLMap.begin(); slIdAndHits != hitsBySLMap.end(); ++slIdAndHits) {
228 if (slIdAndHits->second.size() < 3)
continue;
235 vector<const TMax*> tMaxes = slSeg.getTMax(slId);
240 TString
name = (((((TString)
"TMax"+(
long) slId.
wheel()) +(
long) slId.
station())
242 cell =
new cellInfo(name);
249 LogWarning(
"Calibration") <<
"[DTVDriftCalibration] ###Warning: the chosen granularity is not implemented yet, only bySL available!";
std::pair< const_iterator, const_iterator > range
iterator range
TMaxGranularity theGranularity
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
void Fill(float x, float y, float phi, float theta, float impact)
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
void Fill(float pos, float localAngle)
DTSuperLayerId superlayerId() const
Return the corresponding SuperLayerId.
Geom::Theta< T > theta() const
C::const_iterator const_iterator
constant access iterator type
virtual void setES(const edm::EventSetup &setup)=0
Pass the Event Setup to the synchronization module at each event.
std::map< DTWireId, cellInfo * > theWireIdAndCellMap
int superLayer() const
Return the superlayer number.
std::vector< DTRecHit1D > specificRecHits() const
Access to specific components.
DTSuperLayerId superLayerId() const
The id of the superlayer on which reside the segment.
virtual LocalPoint localPosition() const
local position in SL frame
DTSegmentSelector select_
std::string theCalibChamber
virtual LocalVector localDirection() const
the local direction in SL frame
int station() const
Return the station number.
int wheel() const
Return the wheel number.
DTTTrigBaseSync * theSync
edm::InputTag theRecHits4DLabel
const DTSuperLayer * superLayer(DTSuperLayerId id) const
Return the superlayer corresponding to the given id.