114 LogTrace(
"Calibration") <<
"--- [DTVDriftCalibration] Event analysed #Run: " <<
event.id().run()
115 <<
" #Event: " <<
event.id().event();
120 stringstream linestr;
121 int selWheel, selStation, selSector;
123 linestr >> selWheel >> selStation >> selSector;
124 chosenChamberId =
DTChamberId(selWheel, selStation, selSector);
125 LogTrace(
"Calibration") <<
"chosen chamber " << chosenChamberId;
147 for (chamberIdIt = all4DSegments->id_begin(); chamberIdIt != all4DSegments->id_end(); ++chamberIdIt) {
150 LogTrace(
"Calibration") <<
"Chamber Id: " << *chamberIdIt;
161 if (!(*segment).hasZed() && !(*segment).hasPhi()) {
162 LogError(
"Calibration") <<
"4D segment without Z and Phi segments";
166 LogTrace(
"Calibration") <<
"Segment local pos (in chamber RF): " << (*segment).localPosition()
167 <<
"\nSegment global pos: " << chamber->
toGlobal((*segment).localPosition());
169 if (!((*
select_)(*segment, event, eventSetup)))
174 map<DTSuperLayerId, vector<DTRecHit1D> > hitsBySLMap;
175 if ((*segment).hasPhi()) {
180 for (vector<DTRecHit1D>::const_iterator
hit = phiHits.begin();
hit != phiHits.end(); ++
hit) {
183 hitsBySLMap[slId].push_back(*
hit);
189 if ((*segment).hasZed()) {
192 zSeg2DPosInCham = chamber->
toLocal(sl->
toGlobal((*zSeg).localPosition()));
193 zSeg2DDirInCham = chamber->
toLocal(sl->
toGlobal((*zSeg).localDirection()));
197 LocalPoint segment4DLocalPos = (*segment).localPosition();
198 LocalVector segment4DLocalDir = (*segment).localDirection();
199 double chiSquare = ((*segment).chi2() / (*segment).degreesOfFreedom());
201 hChi2->Fill(chiSquare);
202 if ((*segment).hasPhi())
203 h2DSegmRPhi->
Fill(phiSeg2DPosInCham.
x(), phiSeg2DDirInCham.
x() / phiSeg2DDirInCham.
z());
204 if ((*segment).hasZed())
205 h2DSegmRZ->
Fill(zSeg2DPosInCham.
y(), zSeg2DDirInCham.
y() / zSeg2DDirInCham.
z());
207 if ((*segment).hasZed() && (*segment).hasPhi())
209 segment4DLocalPos.
y(),
210 atan(segment4DLocalDir.
x() / segment4DLocalDir.
z()) * 180. /
Geom::pi(),
211 atan(segment4DLocalDir.
y() / segment4DLocalDir.
z()) * 180. /
Geom::pi(),
213 else if ((*segment).hasPhi())
215 atan(segment4DLocalDir.
x() / segment4DLocalDir.
z()) * 180. /
Geom::pi());
216 else if ((*segment).hasZed())
217 LogWarning(
"Calibration") <<
"4d segment with only Z";
220 for (
map<
DTSuperLayerId, vector<DTRecHit1D> >::const_iterator slIdAndHits = hitsBySLMap.begin();
221 slIdAndHits != hitsBySLMap.end();
223 if (slIdAndHits->second.size() < 3)
228 DTTMax slSeg(slIdAndHits->second,
230 chamber->
toGlobal((*segment).localDirection()),
231 chamber->
toGlobal((*segment).localPosition()),
235 vector<const TMax*> tMaxes = slSeg.getTMax(slId);
239 if (cell ==
nullptr) {
240 TString
name = (((((TString)
"TMax" + (
long)slId.
wheel()) + (
long)slId.
station()) + (
long)slId.
sector()) +
242 cell =
new cellInfo(name);
248 LogWarning(
"Calibration") <<
"[DTVDriftCalibration] ###Warning: the chosen granularity is not implemented " 249 "yet, only bySL available!";
const DTSuperLayer * superLayer(const DTSuperLayerId &id) const
Return the superlayer corresponding to the given id.
std::pair< const_iterator, const_iterator > range
iterator range
TMaxGranularity theGranularity
const DTChamber * chamber(const DTChamberId &id) const
Return a DTChamber given its id.
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
std::unique_ptr< DTTTrigBaseSync > theSync
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
std::map< DTWireId, cellInfo * > theWireIdAndCellMap
int superLayer() const
Return the superlayer number.
edm::EDGetTokenT< DTRecSegment4DCollection > theRecHits4DToken
std::vector< DTRecHit1D > specificRecHits() const
Access to specific components.
DTSuperLayerId superLayerId() const
The id of the superlayer on which reside the segment.
LocalPoint localPosition() const override
local position in SL frame
std::unique_ptr< DTSegmentSelector > select_
std::string theCalibChamber
LocalVector localDirection() const override
the local direction in SL frame
int station() const
Return the station number.
int wheel() const
Return the wheel number.