CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
FP420Test Class Reference
Inheritance diagram for FP420Test:
Observer< const EndOfEvent * > Observer< const EndOfTrack * > Observer< const G4Step * > Observer< const BeginOfTrack * > Observer< const BeginOfEvent * > Observer< const EndOfRun * > Observer< const BeginOfRun * > Observer< const BeginOfJob * > SimWatcher

Public Member Functions

 FP420Test (const edm::ParameterSet &p)
 
 ~FP420Test () override
 
- Public Member Functions inherited from SimWatcher
virtual void beginRun (edm::EventSetup const &)
 
bool isMT () const
 
const SimWatcheroperator= (const SimWatcher &)=delete
 
virtual void registerConsumes (edm::ConsumesCollector)
 
 SimWatcher ()
 
 SimWatcher (const SimWatcher &)=delete
 
virtual ~SimWatcher ()
 
- Public Member Functions inherited from Observer< const BeginOfJob * >
 Observer ()
 
void slotForUpdate (const BeginOfJob *iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const BeginOfRun * >
 Observer ()
 
void slotForUpdate (const BeginOfRun *iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const EndOfRun * >
 Observer ()
 
void slotForUpdate (const EndOfRun *iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const BeginOfEvent * >
 Observer ()
 
void slotForUpdate (const BeginOfEvent *iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const BeginOfTrack * >
 Observer ()
 
void slotForUpdate (const BeginOfTrack *iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const G4Step * >
 Observer ()
 
void slotForUpdate (const G4Step *iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const EndOfTrack * >
 Observer ()
 
void slotForUpdate (const EndOfTrack *iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const EndOfEvent * >
 Observer ()
 
void slotForUpdate (const EndOfEvent *iT)
 
virtual ~Observer ()
 

Private Member Functions

void detectorLevel (const G4VTouchable *, int &, int *, G4String *) const
 
int detLevels (const G4VTouchable *) const
 
G4String detName (const G4VTouchable *, int, int) const
 
void update (const BeginOfJob *run) override
 This routine will be called when the appropriate signal arrives. More...
 
void update (const BeginOfRun *run) override
 This routine will be called when the appropriate signal arrives. More...
 
void update (const EndOfRun *run) override
 This routine will be called when the appropriate signal arrives. More...
 
void update (const BeginOfEvent *evt) override
 This routine will be called when the appropriate signal arrives. More...
 
void update (const BeginOfTrack *trk) override
 This routine will be called when the appropriate signal arrives. More...
 
void update (const G4Step *step) override
 This routine will be called when the appropriate signal arrives. More...
 
void update (const EndOfTrack *trk) override
 This routine will be called when the appropriate signal arrives. More...
 
void update (const EndOfEvent *evt) override
 This routine will be called when the appropriate signal arrives. More...
 

Private Attributes

int dn0
 
G4double entot0
 
std::string fDataLabel
 
std::string fOutputFile
 
Float_t fp420eventarray [1]
 
TNtuple * fp420eventntuple
 
TFile fp420OutputFile
 
std::string fRecreateFile
 
double gapBlade
 
int iev
 
int itrk
 
G4ThreeVector lastpo
 
int lastTrackID
 
int numofpart
 
int pn0
 
double rinCalo
 
int rn0
 
int rn00
 
int sn0
 
G4double sumEnerDeposit
 
G4double sumStepc
 
G4double sumStepl
 
Fp420AnalysisHistManagertheHistManager
 
G4double tracklength0
 
int verbosity
 
int whichevent
 
double z1
 
double z2
 
double z3
 
double z4
 
double z420
 
double zBlade
 
double zBoundDet
 
double zD2
 
double zD3
 
double zGapLDet
 
double zinCalo
 
double zinibeg
 
double zSiDet
 
double zSiPlane
 
double zSiStep
 

Additional Inherited Members

- Protected Member Functions inherited from SimWatcher
void setMT (bool val)
 

Detailed Description

Definition at line 91 of file FP420Test.cc.

Constructor & Destructor Documentation

FP420Test::FP420Test ( const edm::ParameterSet p)

Definition at line 161 of file FP420Test.cc.

References fDataLabel, fOutputFile, fp420eventntuple, fRecreateFile, gapBlade, edm::ParameterSet::getParameter(), pn0, rn00, sn0, AlCaHLTBitMon_QueryRunRegistry::string, theHistManager, verbosity, whichevent, z1, z2, z3, z4, z420, zBlade, zBoundDet, zD2, zD3, zGapLDet, zinibeg, zSiDet, zSiPlane, and zSiStep.

161  {
162  //constructor
163  edm::ParameterSet m_Anal = p.getParameter<edm::ParameterSet>("FP420Test");
164  verbosity = m_Anal.getParameter<int>("Verbosity");
165  //verbosity = 1;
166 
167  fDataLabel = m_Anal.getParameter<std::string>("FDataLabel");
168  fOutputFile = m_Anal.getParameter<std::string>("FOutputFile");
169  fRecreateFile = m_Anal.getParameter<std::string>("FRecreateFile");
170 
171  if (verbosity > 0) {
172  edm::LogVerbatim("FP420Test") << "============================================================================";
173  edm::LogVerbatim("FP420Test") << "FP420Testconstructor :: Initialized as observer";
174  }
175  // Initialization:
176 
177  pn0 = 6;
178  sn0 = 3;
179  rn00 = 7;
180 
181  z420 = 420000.0; // mm
182  zD2 = 4000.0; // mm
183  zD3 = 8000.0; // mm
184  //
185  zBlade = 5.00;
186  gapBlade = 1.6;
187  double gapSupplane = 1.6;
188  zSiPlane = 2 * zBlade + gapBlade + gapSupplane;
189 
190  double zKapton = 0.1;
191  zSiStep = zSiPlane + zKapton;
192 
193  double zBoundDet = 0.020;
194  double zSiElectr = 0.250;
195  double zCeramDet = 0.500;
196  //
197  zSiDet = 0.250;
198  zGapLDet = zBlade / 2 - (zSiDet + zSiElectr + zBoundDet + zCeramDet / 2);
199  //
200  // zSiStation = 5*(2*(5.+1.6)+0.1)+2*6.+1.0 = 79.5
201  double zSiStation = (pn0 - 1) * (2 * (zBlade + gapBlade) + zKapton) + 2 * 6. + 0.0; // = 78.5
202  // 11.=e1, 12.=e2 in zzzrectangle.xml
203  double eee1 = 11.;
204  double eee2 = 12.;
205 
206  zinibeg = (eee1 - eee2) / 2.;
207 
208  z1 = zinibeg + (zSiStation + 10.) / 2 + z420; // z1 - right after 1st Station
209  z2 = z1 + zD2; //z2 - right after middle Station
210  z3 = z1 + zD3; //z3 - right after last Station
211  z4 = z1 + 2 * zD3;
212  //==================================
213 
214  fp420eventntuple = new TNtuple("NTfp420event", "NTfp420event", "evt");
215 
216  whichevent = 0;
217 
218  // fDataLabel = "defaultData";
219  // fOutputFile = "TheAnlysis.root";
220  // fRecreateFile = "RECREATE";
221 
222  theHistManager = new Fp420AnalysisHistManager(fDataLabel);
223 
224  if (verbosity > 0) {
225  edm::LogVerbatim("FP420Test") << "FP420Test constructor :: Initialized Fp420AnalysisHistManager";
226  }
227 }
Log< level::Info, true > LogVerbatim
double z4
Definition: FP420Test.cc:140
double zinibeg
Definition: FP420Test.cc:144
double z2
Definition: FP420Test.cc:140
int verbosity
Definition: FP420Test.cc:130
std::string fRecreateFile
Definition: FP420Test.cc:155
double zGapLDet
Definition: FP420Test.cc:144
Fp420AnalysisHistManager * theHistManager
Definition: FP420Test.cc:152
double zD2
Definition: FP420Test.cc:140
std::string fOutputFile
Definition: FP420Test.cc:154
double zBoundDet
Definition: FP420Test.cc:144
int whichevent
Definition: FP420Test.cc:150
double zD3
Definition: FP420Test.cc:140
double zSiPlane
Definition: FP420Test.cc:144
double z3
Definition: FP420Test.cc:140
double z1
Definition: FP420Test.cc:140
double z420
Definition: FP420Test.cc:143
double zSiStep
Definition: FP420Test.cc:144
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
double gapBlade
Definition: FP420Test.cc:145
double zSiDet
Definition: FP420Test.cc:143
TNtuple * fp420eventntuple
Definition: FP420Test.cc:148
std::string fDataLabel
Definition: FP420Test.cc:153
double zBlade
Definition: FP420Test.cc:145
FP420Test::~FP420Test ( )
override

Definition at line 229 of file FP420Test.cc.

References fOutputFile, fp420eventntuple, fp420OutputFile, fRecreateFile, theHistManager, verbosity, and Fp420AnalysisHistManager::writeToFile().

229  {
230  // delete UserNtuples;
231 
232  TFile fp420OutputFile("newntfp420.root", "RECREATE");
233  edm::LogVerbatim("FP420Test") << "FP420 output root file has been created";
234  fp420eventntuple->Write();
235  edm::LogVerbatim("FP420Test") << "FP420 output root file has been written";
236  fp420OutputFile.Close();
237  edm::LogVerbatim("FP420Test") << "FP420 output root file has been closed";
238  delete fp420eventntuple;
239  edm::LogVerbatim("FP420Test") << "FP420 output root file pointer has been deleted";
240 
241  //------->while end
242 
243  // Write histograms to file
245  if (verbosity > 0) {
246  edm::LogVerbatim("FP420Test") << std::endl << "FP420Test Destructor --------> End of FP420Test : ";
247  }
248 }
Log< level::Info, true > LogVerbatim
void writeToFile(const TString &fOutputFile, const TString &fRecreateFile)
Definition: FP420Test.cc:310
int verbosity
Definition: FP420Test.cc:130
TFile fp420OutputFile
Definition: FP420Test.cc:149
std::string fRecreateFile
Definition: FP420Test.cc:155
Fp420AnalysisHistManager * theHistManager
Definition: FP420Test.cc:152
std::string fOutputFile
Definition: FP420Test.cc:154
TNtuple * fp420eventntuple
Definition: FP420Test.cc:148

Member Function Documentation

void FP420Test::detectorLevel ( const G4VTouchable *  touch,
int &  level,
int *  copyno,
G4String *  name 
) const
private

Definition at line 835 of file FP420Test.cc.

References mps_fire::i, cuy::ii, testEve_cfg::level, and MetAnalyzer::pv().

Referenced by update().

835  {
836  //Get name and copy numbers
837  if (level > 0) {
838  for (int ii = 0; ii < level; ii++) {
839  int i = level - ii - 1;
840  G4VPhysicalVolume* pv = touch->GetVolume(i);
841  if (pv != nullptr)
842  name[ii] = pv->GetName();
843  else
844  name[ii] = "Unknown";
845  copyno[ii] = touch->GetReplicaNumber(i);
846  }
847  }
848 }
int ii
Definition: cuy.py:589
tuple level
Definition: testEve_cfg.py:47
int FP420Test::detLevels ( const G4VTouchable *  touch) const
private

Definition at line 816 of file FP420Test.cc.

Referenced by update().

816  {
817  //Return number of levels
818  if (touch)
819  return ((touch->GetHistoryDepth()) + 1);
820  else
821  return 0;
822 }
G4String FP420Test::detName ( const G4VTouchable *  touch,
int  level,
int  currentlevel 
) const
private

Definition at line 825 of file FP420Test.cc.

References cuy::ii.

825  {
826  //Go down to current level
827  if (level > 0 && level >= currentlevel) {
828  int ii = level - currentlevel;
829  return touch->GetVolume(ii)->GetName();
830  } else {
831  return "NotFound";
832  }
833 }
int ii
Definition: cuy.py:589
tuple level
Definition: testEve_cfg.py:47
void FP420Test::update ( const BeginOfJob )
overrideprivatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfJob * >.

Definition at line 414 of file FP420Test.cc.

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), progressbar.ProgressBar::finish(), and MatrixUtil.Steps::overwrite().

414  {
415  //job
416  edm::LogVerbatim("FP420Test") << "FP420Test:beggining of job";
417  ;
418 }
Log< level::Info, true > LogVerbatim
void FP420Test::update ( const BeginOfRun )
overrideprivatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfRun * >.

Definition at line 421 of file FP420Test.cc.

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), progressbar.ProgressBar::finish(), and MatrixUtil.Steps::overwrite().

421  {
422  //run
423 
424  edm::LogVerbatim("FP420Test") << std::endl << "FP420Test:: Begining of Run";
425 }
Log< level::Info, true > LogVerbatim
void FP420Test::update ( const EndOfRun )
overrideprivatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const EndOfRun * >.

Definition at line 427 of file FP420Test.cc.

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), progressbar.ProgressBar::finish(), and MatrixUtil.Steps::overwrite().

427 { ; }
void FP420Test::update ( const BeginOfEvent )
overrideprivatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfEvent * >.

Definition at line 430 of file FP420Test.cc.

References iev, verbosity, and whichevent.

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), progressbar.ProgressBar::finish(), and MatrixUtil.Steps::overwrite().

430  {
431  iev = (*evt)()->GetEventID();
432  if (verbosity > 0) {
433  edm::LogVerbatim("FP420Test") << "FP420Test:update Event number = " << iev;
434  }
435  whichevent++;
436 }
Log< level::Info, true > LogVerbatim
int verbosity
Definition: FP420Test.cc:130
int whichevent
Definition: FP420Test.cc:150
void FP420Test::update ( const BeginOfTrack )
overrideprivatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfTrack * >.

Definition at line 439 of file FP420Test.cc.

References itrk, numofpart, sumEnerDeposit, sumStepc, sumStepl, tracklength0, and verbosity.

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), progressbar.ProgressBar::finish(), and MatrixUtil.Steps::overwrite().

439  {
440  itrk = (*trk)()->GetTrackID();
441  if (verbosity > 1) {
442  edm::LogVerbatim("FP420Test") << "FP420Test:update BeginOfTrack number = " << itrk;
443  }
444  if (itrk == 1) {
445  sumEnerDeposit = 0.;
446  numofpart = 0;
447  sumStepl = 0.;
448  sumStepc = 0.;
449  tracklength0 = 0.;
450  }
451 }
Log< level::Info, true > LogVerbatim
G4double sumEnerDeposit
Definition: FP420Test.cc:133
int verbosity
Definition: FP420Test.cc:130
G4double sumStepl
Definition: FP420Test.cc:133
int numofpart
Definition: FP420Test.cc:135
G4double sumStepc
Definition: FP420Test.cc:133
G4double tracklength0
Definition: FP420Test.cc:126
void FP420Test::update ( const G4Step *  )
overrideprivatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const G4Step * >.

Definition at line 554 of file FP420Test.cc.

References detectorLevel(), detLevels(), entot0, mps_fire::i, numofpart, HLT_FULL_cff::particleType, sumEnerDeposit, sumStepc, sumStepl, tracklength0, and verbosity.

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), progressbar.ProgressBar::finish(), and MatrixUtil.Steps::overwrite().

554  {
555  // ==========================================================================
556 
557  if (verbosity > 2) {
558  G4int stepnumber = aStep->GetTrack()->GetCurrentStepNumber();
559  edm::LogVerbatim("FP420Test") << "FP420Test:update Step number = " << stepnumber;
560  }
561  // track on aStep: !
562  G4Track* theTrack = aStep->GetTrack();
563  TrackInformation* trkInfo = dynamic_cast<TrackInformation*>(theTrack->GetUserInformation());
564  if (trkInfo == nullptr) {
565  edm::LogVerbatim("FP420Test") << "FP420Test on aStep: No trk info !!!! abort ";
566  }
567  G4int id = theTrack->GetTrackID();
568  G4String particleType = theTrack->GetDefinition()->GetParticleName(); // !!!
569  G4int parentID = theTrack->GetParentID(); // !!!
570  G4TrackStatus trackstatus = theTrack->GetTrackStatus(); // !!!
571  G4double tracklength = theTrack->GetTrackLength(); // Accumulated track length
572  G4ThreeVector trackmom = theTrack->GetMomentum();
573  G4double entot = theTrack->GetTotalEnergy(); // !!! deposited on step
574  G4int curstepnumber = theTrack->GetCurrentStepNumber();
575  // const G4ThreeVector& vert_pos = theTrack->GetVertexPosition(); // vertex ,where this track was created
576  // const G4ThreeVector& vert_mom = theTrack->GetVertexMomentumDirection();
577 
578  // double costheta =vert_mom.z()/sqrt(vert_mom.x()*vert_mom.x()+vert_mom.y()*vert_mom.y()+vert_mom.z()*vert_mom.z());
579  // double theta = acos(min(max(costheta,double(-1.)),double(1.)));
580  // float eta = -log(tan(theta/2));
581  // double phi = -1000.;
582  // if (vert_mom.x() != 0) phi = atan2(vert_mom.y(),vert_mom.x());
583  // if (phi < 0.) phi += twopi;
584  // double phigrad = phi*360./twopi;
585 
586  //G4double trackvel = theTrack->GetVelocity();
587 
588  //edm::LogVerbatim("FP420Test") << " trackstatus= " << trackstatus << " entot= " << entot ;
589 
590  // step points: !
591  G4double stepl = aStep->GetStepLength();
592  G4double EnerDeposit = aStep->GetTotalEnergyDeposit();
593  // pointers: !
594  //G4VPhysicalVolume* physvol = theTrack->GetVolume();
595  //G4VPhysicalVolume* nextphysvol = theTrack->GetNextVolume();
596  //G4Material* materialtr = theTrack->GetMaterial();
597  //G4Material* nextmaterialtr = theTrack->GetNextMaterial();
598 
599  // preStep
600  G4StepPoint* preStepPoint = aStep->GetPreStepPoint();
601  const G4ThreeVector& preposition = preStepPoint->GetPosition();
602  G4ThreeVector prelocalpoint = theTrack->GetTouchable()->GetHistory()->GetTopTransform().TransformPoint(preposition);
603  G4VPhysicalVolume* currentPV = preStepPoint->GetPhysicalVolume();
604  const G4String& prename = currentPV->GetName();
605 
606  const G4VTouchable* pre_touch = preStepPoint->GetTouchable();
607  int pre_levels = detLevels(pre_touch);
608 
609  G4String name1[20];
610  int copyno1[20];
611  for (int i = 0; i < 20; ++i) {
612  name1[i] = "";
613  copyno1[i] = 0;
614  }
615  if (pre_levels > 0) {
616  detectorLevel(pre_touch, pre_levels, copyno1, name1);
617  }
618 
619  // gen_track:
620  // id=1 parentID=1 trackstatus=0,2 tracklength(accumulated) curstepnumber entot vert_pos
621  if (id == 1) {
622  // on 1-st step:
623  if (curstepnumber == 1) {
624  entot0 = entot;
625  //UserNtuples->fillg519(entot0,1.);
626  }
627 
628  // on every step:
629 
630  // for Copper:
631  if (prename == "SBST") {
632  sumStepc += stepl;
633  // =========
634  }
635  // for ststeel:
636  // if(prename == "SBSTs") {
637  if (prename == "SBSTs") {
638  sumStepl += stepl;
639  // =========
640  }
641  // =========
642  // =========
643 
644  // exclude last track point if it is in SD (MI was started their)
645  if (trackstatus != 2) {
646  // for SD: Si Det.: SISTATION:SIPLANE:(SIDETL+BOUNDDET +SIDETR + CERAMDET)
647  if (prename == "SIDETL" || prename == "SIDETR") {
648  if (prename == "SIDETL") {
649  //UserNtuples->fillg569(EnerDeposit,1.);
650  }
651  if (prename == "SIDETR") {
652  //UserNtuples->fillg570(EnerDeposit,1.);
653  }
654 
655  // double numbcont = 10.*(copyno1[2]-1)+copyno1[3];
656 
657  // =========
658  // double xx = preposition.x();
659  // double yy = preposition.y();
660  // double zz = preposition.z();
661  // =========
662  //UserNtuples->fillg580(theta,1.);
663  //UserNtuples->fillg07(phigrad,1.);
664  // double xPrimAtZhit = vert_pos.x() + (zz-vert_pos.z())*tan(theta)*cos(phi);
665  // double yPrimAtZhit = vert_pos.y() + (zz-vert_pos.z())*tan(theta)*sin(phi);
666  // =========
667  // double dx = xPrimAtZhit - xx;
668  // double dy = yPrimAtZhit - yy;
669  // =========
670 
671  // //UserNtuples->fillp212(numbcont,dx,1.);
672  // //UserNtuples->fillp213(numbcont,dy,1.);
673  // =========
674 
675  // last step of current SD Volume:
676  G4String posname = aStep->GetPostStepPoint()->GetPhysicalVolume()->GetName();
677  if ((prename == "SIDETL" && posname != "SIDETL") || (prename == "SIDETR" && posname != "SIDETR")) {
678  if (name1[2] == "SISTATION") {
679  //UserNtuples->fillg539(copyno1[2],1.);
680  }
681  if (name1[3] == "SIPLANE") {
682  //UserNtuples->fillg540(copyno1[3],1.);
683  }
684 
685  if (prename == "SIDETL") {
686  //UserNtuples->fillg541(EnerDeposit,1.);
687  //UserNtuples->fillg561(numbcont,1.);
688  if (copyno1[2] < 2) {
689  //UserNtuples->fillg571(dx,1.);
690  } else if (copyno1[2] < 3) {
691  //UserNtuples->fillg563(dx,1.);
692  if (copyno1[3] < 2) {
693  } else if (copyno1[3] < 3) {
694  //UserNtuples->fillg572(dx,1.);
695  } else if (copyno1[3] < 4) {
696  //UserNtuples->fillg573(dx,1.);
697  } else if (copyno1[3] < 5) {
698  //UserNtuples->fillg574(dx,1.);
699  } else if (copyno1[3] < 6) {
700  //UserNtuples->fillg575(dx,1.);
701  } else if (copyno1[3] < 7) {
702  //UserNtuples->fillg576(dx,1.);
703  } else if (copyno1[3] < 8) {
704  //UserNtuples->fillg577(dx,1.);
705  } else if (copyno1[3] < 9) {
706  //UserNtuples->fillg578(dx,1.);
707  } else if (copyno1[3] < 10) {
708  //UserNtuples->fillg579(dx,1.);
709  }
710  } else if (copyno1[2] < 4) {
711  //UserNtuples->fillg565(dx,1.);
712  } else if (copyno1[2] < 5) {
713  //UserNtuples->fillg567(dx,1.);
714  }
715  }
716  if (prename == "SIDETR") {
717  //UserNtuples->fillg542(EnerDeposit,1.);
718  //UserNtuples->fillg562(numbcont,1.);
719  if (copyno1[2] < 2) {
720  //UserNtuples->fillg581(dy,1.);
721  } else if (copyno1[2] < 3) {
722  //UserNtuples->fillg564(dy,1.);
723  if (copyno1[3] < 2) {
724  } else if (copyno1[3] < 3) {
725  //UserNtuples->fillg582(dy,1.);
726  } else if (copyno1[3] < 4) {
727  //UserNtuples->fillg583(dy,1.);
728  } else if (copyno1[3] < 5) {
729  //UserNtuples->fillg584(dy,1.);
730  } else if (copyno1[3] < 6) {
731  //UserNtuples->fillg585(dy,1.);
732  } else if (copyno1[3] < 7) {
733  //UserNtuples->fillg586(dy,1.);
734  } else if (copyno1[3] < 8) {
735  //UserNtuples->fillg587(dy,1.);
736  } else if (copyno1[3] < 9) {
737  //UserNtuples->fillg588(dy,1.);
738  } else if (copyno1[3] < 10) {
739  //UserNtuples->fillg589(dy,1.);
740  }
741  } else if (copyno1[2] < 4) {
742  //UserNtuples->fillg566(dy,1.);
743  } else if (copyno1[2] < 5) {
744  //UserNtuples->fillg568(dy,1.);
745  }
746  }
747  }
748  }
749  // end of prenames SIDETL // SIDETR
750  }
751  // end of trackstatus != 2
752 
753  // deposition of energy on steps along primary track
754  //UserNtuples->fillg500(EnerDeposit,1.);
755  // collect sum deposited energy on all steps along primary track
756  sumEnerDeposit += EnerDeposit;
757  // position of step for primary track:
758  //UserNtuples->fillg501(preposition.x(),1.);
759  //UserNtuples->fillg502(preposition.y(),1.);
760  //UserNtuples->fillg503(preposition.z(),1.);
761  //UserNtuples->fillg504(preposition.x(),EnerDeposit);
762  //UserNtuples->fillg505(preposition.y(),EnerDeposit);
763  //UserNtuples->fillg506(preposition.z(),EnerDeposit);
764  // 2D step coordinates weighted by energy deposited on step
765  // //UserNtuples->fillp201(preposition.x(),preposition.y(),EnerDeposit);
766  // //UserNtuples->fillp202(preposition.x(),preposition.z(),EnerDeposit);
767  // //UserNtuples->fillp203(preposition.y(),preposition.z(),EnerDeposit);
768  //UserNtuples->filld204(preposition.x(),preposition.y(),EnerDeposit);
769  //UserNtuples->filld205(preposition.x(),preposition.z(),EnerDeposit);
770  //UserNtuples->filld206(preposition.y(),preposition.z(),EnerDeposit);
771  //UserNtuples->filld223(preposition.y(),preposition.z(),EnerDeposit);
772  // last step of primary track
773  if (trackstatus == 2) {
774  // primary track length
775  // //UserNtuples->fillg508(tracklength,1.);
776  tracklength0 = tracklength;
777  // how many steps primary track consist
778  //UserNtuples->fillg509(curstepnumber,1.);
779  // tot. energy of primary track at the end of trajectory(before disappeare)
780  //UserNtuples->fillg510((entot0-entot),1.);
781  //UserNtuples->fillg520((entot0-entot),1.);
782  }
783  }
784  // end of primary track !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
785 
786  if (parentID == 1 && curstepnumber == 1) {
787  // particles deposit their energy along primary track
788  numofpart += 1;
789  // energy of radiated particle
790  //UserNtuples->fillg511(entot,1.);
791  // coordinates of radiated particle
792  //UserNtuples->fillg512(vert_pos.x(),1.);
793  //UserNtuples->fillg513(vert_pos.y(),1.);
794  //UserNtuples->fillg514(vert_pos.z(),1.);
795  //UserNtuples->fillg515(vert_pos.x(),entot);
796  //UserNtuples->fillg516(vert_pos.y(),entot);
797  //UserNtuples->fillg517(vert_pos.z(),entot);
798 
799  //UserNtuples->filld214(vert_pos.x(),vert_pos.y(),1.);
800  //UserNtuples->filld215(vert_pos.x(),vert_pos.z(),1.);
801  //UserNtuples->filld216(vert_pos.y(),vert_pos.z(),1.);
802  //UserNtuples->filld219(vert_pos.y(),vert_pos.z(),1.);
803  //UserNtuples->filld224(vert_pos.y(),vert_pos.z(),1.);
804  if (prename == "SBST") {
805  //UserNtuples->filld225(vert_pos.y(),vert_pos.z(),1.);
806  }
807  if (prename == "SBSTs") {
808  //UserNtuples->filld226(vert_pos.y(),vert_pos.z(),1.);
809  }
810  }
811 
812  // ==========================================================================
813 }
Log< level::Info, true > LogVerbatim
G4double sumEnerDeposit
Definition: FP420Test.cc:133
int verbosity
Definition: FP420Test.cc:130
G4double entot0
Definition: FP420Test.cc:126
G4double sumStepl
Definition: FP420Test.cc:133
int numofpart
Definition: FP420Test.cc:135
int detLevels(const G4VTouchable *) const
Definition: FP420Test.cc:816
G4double sumStepc
Definition: FP420Test.cc:133
G4double tracklength0
Definition: FP420Test.cc:126
void detectorLevel(const G4VTouchable *, int &, int *, G4String *) const
Definition: FP420Test.cc:835
void FP420Test::update ( const EndOfTrack )
overrideprivatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const EndOfTrack * >.

Definition at line 454 of file FP420Test.cc.

References Fp420AnalysisHistManager::getHisto(), itrk, lastpo, sumEnerDeposit, theHistManager, verbosity, z1, z2, z3, and z4.

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), progressbar.ProgressBar::finish(), and MatrixUtil.Steps::overwrite().

454  {
455  itrk = (*trk)()->GetTrackID();
456  if (verbosity > 1) {
457  edm::LogVerbatim("FP420Test") << "FP420Test:update EndOfTrack number = " << itrk;
458  }
459  if (itrk == 1) {
460  G4double tracklength = (*trk)()->GetTrackLength(); // Accumulated track length
461 
462  theHistManager->getHisto("SumEDep")->Fill(sumEnerDeposit);
463  theHistManager->getHisto("TrackL")->Fill(tracklength);
464 
465  // direction !!!
466  G4ThreeVector vert_mom = (*trk)()->GetVertexMomentumDirection();
467  G4ThreeVector vert_pos = (*trk)()->GetVertexPosition(); // vertex ,where this track was created
468 
469  // float eta = 0.5 * log( (1.+vert_mom.z()) / (1.-vert_mom.z()) );
470  // float phi = atan2(vert_mom.y(),vert_mom.x());
471  // if (phi < 0.) phi += twopi;
472  // float phigrad = phi*180./pi;
473 
474  // float XV = vert_pos.x(); // mm
475  // float YV = vert_pos.y(); // mm
476  //UserNtuples->fillg543(phigrad,1.);
477  //UserNtuples->fillp203(phigrad,sumStepl,1.);
478  //UserNtuples->fillg544(XV,1.);
479  //UserNtuples->fillp201(XV,sumStepl,1.);
480  //UserNtuples->fillg545(YV,1.);
481  //UserNtuples->fillp202(YV,sumStepl,1.);
482 
483  //UserNtuples->fillg524(eta,1.);
484 
485  //UserNtuples->fillg534(sumStepl,1.);
486  //UserNtuples->fillg535(eta,sumStepl);
487  //UserNtuples->fillp207(eta,sumStepl,1.);
488  //UserNtuples->filld217(eta,sumStepl,1.);
489  //UserNtuples->filld220(phigrad,sumStepl,1.);
490  //UserNtuples->filld221(XV,sumStepl,1.);
491  //UserNtuples->filld222(YV,sumStepl,1.);
492  //UserNtuples->fillg537(sumStepc,1.);
493  //UserNtuples->fillg84(sumStepl,1.);
494 
495  // MI = (multiple interactions):
496  if (tracklength < z4) {
497  // //UserNtuples->fillp208(eta,tracklength,1.);
498  //UserNtuples->filld218(eta,tracklength,1.);
499  //UserNtuples->fillg538(sumStepc,1.);
500  //UserNtuples->fillg85(sumStepl,1.);
501  }
502 
503  // last step information
504  const G4Step* aStep = (*trk)()->GetStep();
505  // G4int csn = (*trk)()->GetCurrentStepNumber();
506  // G4double sl = (*trk)()->GetStepLength();
507  // preStep
508  G4StepPoint* preStepPoint = aStep->GetPreStepPoint();
509  lastpo = preStepPoint->GetPosition();
510 
511  // Analysis:
512  if (lastpo.z() < z1 && lastpo.perp() < 100.) {
513  //UserNtuples->fillg525(eta,1.);
514  //UserNtuples->fillg546(XV,1.);
515  //UserNtuples->fillg551(YV,1.);
516  //UserNtuples->fillg556(phigrad,1.);
517  }
518  if ((lastpo.z() > z1 && lastpo.z() < z2) && lastpo.perp() < 100.) {
519  //UserNtuples->fillg526(eta,1.);
520  //UserNtuples->fillg547(XV,1.);
521  //UserNtuples->fillg552(YV,1.);
522  //UserNtuples->fillg557(phigrad,1.);
523  }
524  if (lastpo.z() < z2 && lastpo.perp() < 100.) {
525  //UserNtuples->fillg527(eta,1.);
526  //UserNtuples->fillg548(XV,1.);
527  //UserNtuples->fillg553(YV,1.);
528  //UserNtuples->fillg558(phigrad,1.);
529  //UserNtuples->fillg521(lastpo.x(),1.);
530  //UserNtuples->fillg522(lastpo.y(),1.);
531  //UserNtuples->fillg523(lastpo.z(),1.);
532  }
533  if (lastpo.z() < z3 && lastpo.perp() < 100.) {
534  //UserNtuples->fillg528(eta,1.);
535  //UserNtuples->fillg549(XV,1.);
536  //UserNtuples->fillg554(YV,1.);
537  //UserNtuples->fillg559(phigrad,1.);
538  }
539  if (lastpo.z() < z4 && lastpo.perp() < 100.) {
540  //UserNtuples->fillg529(eta,1.);
541  //UserNtuples->fillg550(XV,1.);
542  //UserNtuples->fillg555(YV,1.);
543  //UserNtuples->fillg560(phigrad,1.);
544  //UserNtuples->fillg531(lastpo.x(),1.);
545  //UserNtuples->fillg532(lastpo.y(),1.);
546  //UserNtuples->fillg533(lastpo.z(),1.);
547  }
548  }
549 }
Log< level::Info, true > LogVerbatim
double z4
Definition: FP420Test.cc:140
G4double sumEnerDeposit
Definition: FP420Test.cc:133
double z2
Definition: FP420Test.cc:140
int verbosity
Definition: FP420Test.cc:130
G4ThreeVector lastpo
Definition: FP420Test.cc:137
Fp420AnalysisHistManager * theHistManager
Definition: FP420Test.cc:152
double z3
Definition: FP420Test.cc:140
double z1
Definition: FP420Test.cc:140
TH1F * getHisto(Int_t Number)
Definition: FP420Test.cc:351
void FP420Test::update ( const EndOfEvent )
overrideprivatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const EndOfEvent * >.

Definition at line 852 of file FP420Test.cc.

References PVValHelper::eta, fp420eventarray, gapBlade, FP420G4Hit::getEnergyLoss(), FP420G4Hit::getEntry(), FP420G4Hit::getEntryLocalP(), FP420G4Hit::getExitLocalP(), Fp420AnalysisHistManager::getHisto(), FP420G4Hit::getTrackID(), FP420G4Hit::getUnitID(), mps_fire::i, iev, cuy::ii, dqmiolumiharvest::j, lastpo, log, nhits, npart, ntfp420_evt, numofpart, FP420NumberingScheme::packFP420Index(), FP420NumberingScheme::packMYIndex(), phi, pi, pn0, FP420NumberingScheme::realzside(), rn00, sn0, funct::tan(), theHistManager, tracklength0, FP420NumberingScheme::unpackCopyIndex(), FP420NumberingScheme::unpackFP420Index(), FP420NumberingScheme::unpackLayerIndex(), FP420NumberingScheme::unpackOrientation(), verbosity, whichevent, z2, z3, z4, z420, zBlade, zD2, zD3, zGapLDet, zinibeg, ecaldqm::zside(), zSiDet, zSiPlane, and zSiStep.

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), progressbar.ProgressBar::finish(), and MatrixUtil.Steps::overwrite().

852  {
853  // ==========================================================================
854 
855  if (verbosity > 1) {
856  iev = (*evt)()->GetEventID();
857  edm::LogVerbatim("FP420Test") << "FP420Test:update EndOfEvent = " << iev;
858  }
859  // Fill-in ntuple
861 
862  //
863  int trackID = 0;
864  G4PrimaryParticle* thePrim = nullptr;
865 
866  // prim.vertex:
867  G4int nvertex = (*evt)()->GetNumberOfPrimaryVertex();
868  if (nvertex != 1)
869  edm::LogVerbatim("FP420Test") << "FP420Test: My warning: NumberOfPrimaryVertex != 1 --> = " << nvertex;
870 
871  for (int i = 0; i < nvertex; i++) {
872  G4PrimaryVertex* avertex = (*evt)()->GetPrimaryVertex(i);
873  if (avertex == nullptr)
874  edm::LogVerbatim("FP420Test") << "FP420Test End Of Event ERR: pointer to vertex = 0";
875  G4int npart = avertex->GetNumberOfParticle();
876  if (npart != 1)
877  edm::LogVerbatim("FP420Test") << "FP420Test: My warning: NumberOfPrimaryPart != 1 --> = " << npart;
878  if (npart == 0)
879  edm::LogVerbatim("FP420Test") << "FP420Test End Of Event ERR: no NumberOfParticle";
880 
881  // find just primary track: track pointer: thePrim
882  if (thePrim == nullptr)
883  thePrim = avertex->GetPrimary(trackID);
884 
885  if (thePrim != nullptr) {
886  // primary vertex:
887  G4double vx = 0., vy = 0., vz = 0.;
888  vx = avertex->GetX0();
889  vy = avertex->GetY0();
890  vz = avertex->GetZ0();
891  //UserNtuples->fillh01(vx);
892  //UserNtuples->fillh02(vy);
893  //UserNtuples->fillh03(vz);
894  theHistManager->getHisto("VtxX")->Fill(vx);
895  theHistManager->getHisto("VtxY")->Fill(vy);
896  theHistManager->getHisto("VtxZ")->Fill(vz);
897  }
898  }
899  // prim.vertex loop end
900 
901  //=========================== thePrim != 0 ================================================================================
902  if (thePrim != nullptr) {
903  // inline G4ParticleDefinition * GetG4code() const
904  // inline G4PrimaryParticle * GetNext() const
905  // inline G4PrimaryParticle * GetDaughter() const
906 
907  // prim.vertex
908  //int ivert = 0 ;
909  //G4PrimaryVertex* avertex = (*evt)()->GetPrimaryVertex(ivert);
910  //G4double vx=0.,vy=0.,vz=0.;
911  //vx = avertex->GetX0();
912  //vy = avertex->GetY0();
913  //vz = avertex->GetZ0();
914 
915  //
916  // number of secondary particles deposited their energy along primary track
917  //UserNtuples->fillg518(numofpart,1.);
918  if (lastpo.z() < z4 && lastpo.perp() < 100.) {
919  //UserNtuples->fillg536(numofpart,1.);
920  }
921  //
922 
923  // direction !!!
924  G4ThreeVector mom = thePrim->GetMomentum();
925 
926  double phi = atan2(mom.y(), mom.x());
927  if (phi < 0.)
928  phi += twopi;
929  double phigrad = phi * 180. / pi;
930 
931  double th = mom.theta();
932  double eta = -log(tan(th / 2));
933  // works OK:
934  // double costheta =mom.z()/sqrt(mom.x()*mom.x()+mom.y()*mom.y()+mom.z()*mom.z());
935  // double theta = acos(min(max(costheta,double(-1.)),double(1.)));
936 
937  //UserNtuples->fillh04(eta);
938  //UserNtuples->fillh05(phigrad);
939  //UserNtuples->fillh06(th);
940 
941  //UserNtuples->fillg13(lastpo.x(),1.);
942  //UserNtuples->fillg14(lastpo.y(),1.);
943  //UserNtuples->fillg15(lastpo.z(),1.);
944 
945  theHistManager->getHisto("PrimaryEta")->Fill(eta);
946  theHistManager->getHisto("PrimaryPhigrad")->Fill(phigrad);
947  theHistManager->getHisto("PrimaryTh")->Fill(th * 180. / pi);
948 
949  theHistManager->getHisto("PrimaryLastpoZ")->Fill(lastpo.z());
950  if (lastpo.z() < z4) {
951  theHistManager->getHisto("PrimaryLastpoX")->Fill(lastpo.x());
952  theHistManager->getHisto("PrimaryLastpoY")->Fill(lastpo.y());
953  }
954  if (numofpart > 4) {
955  theHistManager->getHisto("XLastpoNumofpart")->Fill(lastpo.x());
956  theHistManager->getHisto("YLastpoNumofpart")->Fill(lastpo.y());
957  }
958 
959  // ==========================================================================
960 
961  // hit map for FP420
962  // ==================================
963 
964  std::map<int, float, std::less<int> > themap;
965  std::map<int, float, std::less<int> > themap1;
966 
967  std::map<int, float, std::less<int> > themapxy;
968  std::map<int, float, std::less<int> > themapz;
969  // access to the G4 hit collections: -----> this work OK:
970 
971  // edm::LogInfo("FP420Test") << "1";
972  G4HCofThisEvent* allHC = (*evt)()->GetHCofThisEvent();
973  // edm::LogInfo("FP420Test") << "2";
974  if (verbosity > 0) {
975  edm::LogVerbatim("FP420Test") << "FP420Test: accessed all HC";
976  ;
977  }
978  int CAFIid = G4SDManager::GetSDMpointer()->GetCollectionID("FP420SI");
979  // edm::LogInfo("FP420Test") << "3";
980  // edm::LogVerbatim("FP420Test") << " CAFIid = " << CAFIid;;
981 
982  FP420G4HitCollection* theCAFI = (FP420G4HitCollection*)allHC->GetHC(CAFIid);
983  // CaloG4HitCollection* theCAFI = (CaloG4HitCollection*) allHC->GetHC(CAFIid);
984  if (verbosity > 0) {
985  //edm::LogVerbatim("FP420Test") << "FP420Test: theCAFI = " << theCAFI;
986  edm::LogVerbatim("FP420Test") << "FP420Test: theCAFI->entries = " << theCAFI->entries();
987  }
988  // edm::LogInfo("FP420Test") << "theCAFI->entries="<< theCAFI->entries();
989  theHistManager->getHisto("NumberOfHits")->Fill(theCAFI->entries());
990 
991  // access to the G4 hit collections ----> variant 2: give 0 hits
992  // FP420G4HitCollection * theCAFI;
993  // theCAFI = new FP420G4HitCollection();
994  // ==========================================================================
995  // Silicon Hit collection start
996  //0) if particle goes into flat beam pipe below detector:
997  int varia; // = 0 -all; =1 - MI; =2 - noMI
998  // Select MI or noMI over all 3 stations
999  // 1)MI:
1000  // if particle goes through window into detector:
1001  // lastpoint of track in lateral dir. outside the detector and inside in z
1002  // lastpoint of track in lateral dir. outside the detector and inside in z
1003  // for all except zzzmarta.xml
1004  // if( lastpo.z()<z4 || abs(lastpo.x())> 5. || lastpo.y()< 10.2 || lastpo.y()>30.2 ) {
1005  // for zzzmarta.xml
1006  // if( lastpo.z()<z4 || abs(lastpo.x())> 10. || lastpo.y()< 3.2 || lastpo.y()>43.2 ) {
1007  if (lastpo.z() < z4) {
1008  // if( lastpo.z()<z4 && lastpo.perp()< 100. ) {
1009  // if(lastpo.z()<z4 || lastpo.perp()> 45.) {
1010  //UserNtuples->fillg66(theCAFI->entries(),1.);
1011  varia = 1;
1012  } else {
1013  // 2) no MI start in detector:
1014  //UserNtuples->fillg31(numofpart,1.);
1015  //UserNtuples->fillg67(theCAFI->entries(),1.);
1016  varia = 2;
1017  } // no MI end:
1018  int nhits = theCAFI->entries();
1019  for (int j = 0; j < nhits; j++) {
1020  FP420G4Hit* aHit = (*theCAFI)[j];
1021  G4ThreeVector hitPoint = aHit->getEntry();
1022  double zz = hitPoint.z();
1023  theHistManager->getHisto("zHits")->Fill(zz);
1024  if (tracklength0 > 8300.)
1025  theHistManager->getHisto("zHitsTrLoLe")->Fill(zz);
1026  }
1027  // varia = 0;
1028  // if( varia == 0) {
1029  if (varia == 2) {
1030  // .............
1031  // number of hits < 50
1032  // if(theCAFI->entries() <50) {
1033  // if(theCAFI->entries() > 0) {
1034  // if(theCAFI->entries() > -1) {
1035  // .............
1036  int nhit11 = 0, nhit12 = 0, nhit13 = 0;
1037  double totallosenergy = 0.;
1038  for (int j = 0; j < nhits; j++) {
1039  FP420G4Hit* aHit = (*theCAFI)[j];
1040 
1041  G4ThreeVector hitEntryLocalPoint = aHit->getEntryLocalP();
1042  G4ThreeVector hitExitLocalPoint = aHit->getExitLocalP();
1043  G4ThreeVector hitPoint = aHit->getEntry();
1044  // double elmenergy = aHit->getEM();
1045  // double hadrenergy = aHit->getHadr();
1046  // double incidentEnergyHit = aHit->getIncidentEnergy();
1047  int trackIDhit = aHit->getTrackID();
1048  unsigned int unitID = aHit->getUnitID();
1049  // double timeslice = aHit->getTimeSlice();
1050  // int timesliceID = aHit->getTimeSliceID();
1051  // double depenergy = aHit->getEnergyDeposit();
1052  // float pabs = aHit->getPabs();
1053  // float tof = aHit->getTof();
1054  double losenergy = aHit->getEnergyLoss();
1055  // int particletype = aHit->getParticleType();
1056  // float thetaEntry = aHit->getThetaAtEntry();
1057  // float phiEntry = aHit->getPhiAtEntry();
1058  // float xEntry = aHit->getX();
1059  // float yEntry = aHit->getY();
1060  // float zEntry = aHit->getZ();
1061  // int parentID = aHit->getParentId();
1062  // float vxget = aHit->getVx();
1063  // float vyget = aHit->getVy();
1064  // float vzget = aHit->getVz();
1065 
1066  // double th_hit = hitPoint.theta();
1067  // double eta_hit = -log(tan(th_hit/2));
1068  // double phi_hit = hitPoint.phi();
1069  // if (phi_hit < 0.) phi_hit += twopi;
1070  // double phigrad_hit = phi_hit*180./pi;
1071  //UserNtuples->fillg60(eta_hit,losenergy);
1072  //UserNtuples->fillg61(eta_hit,1.);
1073  //UserNtuples->fillg62(phigrad_hit,losenergy);
1074  //UserNtuples->fillg63(phigrad_hit,1.);
1075 
1076  // double xx = hitPoint.x();
1077  // double yy = hitPoint.y();
1078  double zz = hitPoint.z();
1079 
1080  theHistManager->getHisto("zHitsnoMI")->Fill(zz);
1081 
1082  if (verbosity > 2) {
1083  edm::LogVerbatim("FP420Test") << "FP420Test:zHits = " << zz;
1084  }
1085  // double rr = hitPoint.perp();
1086  /*
1087  if(aHit->getTrackID() == 1) {
1088  emu += aHit->getEnergyDeposit();} else {
1089  erest += aHit->getEnergyDeposit();}
1090  */
1091 
1092  //collect lost in Si en.of hits in every plane and put it into themap[]
1093  //UserNtuples->fillg30(losenergy,1.);
1094  themap[unitID] += losenergy;
1095  totallosenergy += losenergy;
1096 
1097  int det, zside, sector, zmodule;
1098  // CaloNumberingPacker::unpackCastorIndex(unitID, det, zside, sector, zmodule);
1099  FP420NumberingScheme::unpackFP420Index(unitID, det, zside, sector, zmodule);
1100  int justlayer = FP420NumberingScheme::unpackLayerIndex(rn00, zside); // 1,2
1101  if (justlayer < 1 || justlayer > 2) {
1102  edm::LogVerbatim("FP420Test") << "FP420Test:WRONG justlayer= " << justlayer;
1103  }
1104  // zside=1,2 ; zmodule=1,10 ; sector=1,3
1105  //UserNtuples->fillg44(float(sector),1.);
1106  //UserNtuples->fillg45(float(zmodule),1.);
1107  //UserNtuples->fillg46(float(zside),1.);
1108  // int sScale = 20;
1109  // intindex is a continues numbering of FP420
1110  //int zScale = 2; unsigned int intindex = sScale*(sector - 1)+zScale*(zmodule - 1)+zside; //intindex=1-30:X,Y,X,Y,X,Y...
1111  // int zScale = 10; unsigned int intindex = sScale*(sector - 1)+zScale*(zside - 1)+zmodule; //intindex=1-30:XXXXXXXXXX,YYYYYYYYYY,...
1112  //UserNtuples->fillg40(float(intindex),1.);
1113  //UserNtuples->fillg48(float(intindex),losenergy);
1114  //
1115  //=======================================
1116  // G4ThreeVector middle = (hitExitLocalPoint+hitEntryLocalPoint)/2.;
1117  G4ThreeVector middle = (hitExitLocalPoint - hitEntryLocalPoint) / 2.;
1118  themapz[unitID] = hitPoint.z() + fabs(middle.z());
1119  if (verbosity > 2) {
1120  edm::LogVerbatim("FP420Test") << "1111111111111111111111111111111111111111111111111111111111111111111111111 ";
1121  edm::LogVerbatim("FP420Test") << "FP420Test: det, zside, sector, zmodule = " << det << zside << sector
1122  << zmodule;
1123  edm::LogVerbatim("FP420Test") << "FP420Test: justlayer = " << justlayer;
1124  edm::LogVerbatim("FP420Test") << "FP420Test: hitExitLocalPoint = " << hitExitLocalPoint;
1125  edm::LogVerbatim("FP420Test") << "FP420Test: hitEntryLocalPoint = " << hitEntryLocalPoint;
1126  edm::LogVerbatim("FP420Test") << "FP420Test: middle= " << middle;
1127  edm::LogVerbatim("FP420Test") << "FP420Test: hitPoint.z()-419000.= " << hitPoint.z() - 419000.;
1128 
1129  edm::LogVerbatim("FP420Test") << "FP420Test:zHits-419000. = " << themapz[unitID] - 419000.;
1130  }
1131  //=======================================
1132  // Y
1133  if (zside == 1) {
1134  //UserNtuples->fillg24(losenergy,1.);
1135  if (losenergy > 0.00003) {
1136  themap1[unitID] += 1.;
1137  }
1138  }
1139  //X
1140  if (zside == 2) {
1141  //UserNtuples->fillg25(losenergy,1.);
1142  if (losenergy > 0.00005) {
1143  themap1[unitID] += 1.;
1144  }
1145  }
1146  // }
1147  //
1148  if (sector == 1) {
1149  nhit11 += 1;
1150  //UserNtuples->fillg33(rr,1.);
1151  //UserNtuples->fillg11(yy,1.);
1152  }
1153  if (sector == 2) {
1154  nhit12 += 1;
1155  //UserNtuples->fillg34(rr,1.);
1156  //UserNtuples->fillg86(yy,1.);
1157  }
1158  if (sector == 3) {
1159  nhit13 += 1;
1160  //UserNtuples->fillg35(rr,1.);
1161  //UserNtuples->fillg87(yy,1.);
1162  }
1163  //UserNtuples->fillg10(xx,1.);
1164  //UserNtuples->fillg12(zz,1.);
1165  //UserNtuples->fillg32(rr,1.);
1166 
1167  // =========
1168  // double xPrimAtZhit = vx + (zz-vz)*tan(th)*cos(phi);
1169  // double yPrimAtZhit = vy + (zz-vz)*tan(th)*sin(phi);
1170 
1171  // double dx = xPrimAtZhit - xx;
1172  // double dy = yPrimAtZhit - yy;
1173 
1174  // Select SD hits
1175  // if(rr<120.) {
1176  // Select MI or noMI over all 3 stations
1177  if (lastpo.z() < z4 && lastpo.perp() < 120.) {
1178  // MIonly:
1179  //UserNtuples->fillg16(lastpo.z(),1.);
1180  //UserNtuples->fillg18(zz,1.);
1181  // Station I
1182  if (zz < z2) {
1183  //UserNtuples->fillg54(dx,1.);
1184  //UserNtuples->fillg55(dy,1.);
1185  }
1186  // Station II
1187  if (zz < z3 && zz > z2) {
1188  //UserNtuples->fillg50(dx,1.);
1189  //UserNtuples->fillg51(dy,1.);
1190  }
1191  // Station III
1192  if (zz < z4 && zz > z3) {
1193  //UserNtuples->fillg64(dx,1.);
1194  //UserNtuples->fillg65(dy,1.);
1195  //UserNtuples->filld209(xx,yy,1.);
1196  }
1197  } else {
1198  // no MIonly:
1199  //UserNtuples->fillg17(lastpo.z(),1.);
1200  //UserNtuples->fillg19(zz,1.);
1201  //UserNtuples->fillg74(incidentEnergyHit,1.);
1202  //UserNtuples->fillg75(float(trackIDhit),1.);
1203  // Station I
1204  if (zz < z2) {
1205  //UserNtuples->fillg56(dx,1.);
1206  //UserNtuples->fillg57(dy,1.);
1207  //UserNtuples->fillg20(numofpart,1.);
1208  //UserNtuples->fillg21(sumEnerDeposit,1.);
1209  if (zside == 1) {
1210  //UserNtuples->fillg26(losenergy,1.);
1211  }
1212  if (zside == 2) {
1213  //UserNtuples->fillg76(losenergy,1.);
1214  }
1215  if (trackIDhit == 1) {
1216  //UserNtuples->fillg70(dx,1.);
1217  //UserNtuples->fillg71(incidentEnergyHit,1.);
1218  //UserNtuples->fillg79(losenergy,1.);
1219  } else {
1220  //UserNtuples->fillg82(dx,1.);
1221  }
1222  }
1223  // Station II
1224  if (zz < z3 && zz > z2) {
1225  //UserNtuples->fillg52(dx,1.);
1226  //UserNtuples->fillg53(dy,1.);
1227  //UserNtuples->fillg22(numofpart,1.);
1228  //UserNtuples->fillg23(sumEnerDeposit,1.);
1229  //UserNtuples->fillg80(incidentEnergyHit,1.);
1230  //UserNtuples->fillg81(float(trackIDhit),1.);
1231  if (zside == 1) {
1232  //UserNtuples->fillg27(losenergy,1.);
1233  }
1234  if (zside == 2) {
1235  //UserNtuples->fillg77(losenergy,1.);
1236  }
1237  if (trackIDhit == 1) {
1238  //UserNtuples->fillg72(dx,1.);
1239  //UserNtuples->fillg73(incidentEnergyHit,1.);
1240  } else {
1241  //UserNtuples->fillg83(dx,1.);
1242  }
1243  }
1244  // Station III
1245  if (zz < z4 && zz > z3) {
1246  //UserNtuples->fillg68(dx,1.);
1247  //UserNtuples->fillg69(dy,1.);
1248  //UserNtuples->filld210(xx,yy,1.);
1249  //UserNtuples->fillg22(numofpart,1.);
1250  //UserNtuples->fillg23(sumEnerDeposit,1.);
1251  if (zside == 1) {
1252  //UserNtuples->fillg28(losenergy,1.);
1253  }
1254  if (zside == 2) {
1255  //UserNtuples->fillg78(losenergy,1.);
1256  }
1257  }
1258  } // MIonly or noMIonly ENDED
1259  // }
1260 
1261  // !!!!!!!!!!!!!
1262 
1263  } // for loop on all hits ENDED ENDED ENDED !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1264 
1265  // !!!!!!!!!!!!!
1266 
1267  //======================================================================================================SUMHIT
1268  //UserNtuples->fillg29(totallosenergy,1.);
1269  //UserNtuples->fillg36(nhit11,1.);
1270  //UserNtuples->fillg37(nhit12,1.);
1271  //UserNtuples->fillg38(nhit13,1.);
1272  //======================================================================================================SUMHIT
1273  // int rn00=3;//test only with 2 sensors in superlayer, not 4
1274  // int rn00=rn0;//always
1275  if (verbosity > 2) {
1276  edm::LogVerbatim("FP420Test") << "22222222222222222222222222222222222222222222222222222222222222222222222222 ";
1277  }
1278  int det = 1;
1279  int allplacesforsensors = 7;
1280  for (int sector = 1; sector < sn0; sector++) {
1281  for (int zmodule = 1; zmodule < pn0; zmodule++) {
1282  for (int zsideinorder = 1; zsideinorder < allplacesforsensors; zsideinorder++) {
1283  int zside = FP420NumberingScheme::realzside(rn00, zsideinorder); //1,3,5,2,4,6
1284  if (verbosity > 2) {
1285  edm::LogVerbatim("FP420Test") << "FP420Test: sector= " << sector << " zmodule= " << zmodule
1286  << " zsideinorder= " << zsideinorder << " zside= " << zside;
1287  }
1288  if (zside != 0) {
1289  int justlayer = FP420NumberingScheme::unpackLayerIndex(rn00, zside); // 1,2
1290  if (justlayer < 1 || justlayer > 2) {
1291  edm::LogVerbatim("FP420Test") << "FP420Test:WRONG justlayer= " << justlayer;
1292  }
1293  int copyinlayer = FP420NumberingScheme::unpackCopyIndex(rn00, zside); // 1,2,3
1294  if (copyinlayer < 1 || copyinlayer > 3) {
1295  edm::LogVerbatim("FP420Test") << "FP420Test:WRONG copyinlayer= " << copyinlayer;
1296  }
1297  int orientation = FP420NumberingScheme::unpackOrientation(rn00, zside); // Front: = 1; Back: = 2
1298  if (orientation < 1 || orientation > 2) {
1299  edm::LogVerbatim("FP420Test") << "FP420Test:WRONG orientation= " << orientation;
1300  }
1301 
1302  // iu is a continues numbering of planes(!) over two arm FP420 set up
1303  int detfixed =
1304  1; // use this treatment for each set up arm, hence no sense to do it defferently for +FP420 and -FP420;
1305  // and ...[ii] massives have prepared in such a way
1306  unsigned int ii =
1307  FP420NumberingScheme::packMYIndex(rn00, pn0, sn0, detfixed, justlayer, sector, zmodule) - 1;
1308  // ii = 0-19 --> 20 items
1309  if (verbosity > 2) {
1310  edm::LogVerbatim("FP420Test")
1311  << "FP420Test: justlayer = " << justlayer << " copyinlayer = " << copyinlayer
1312  << " orientation = " << orientation << " ii= " << ii;
1313  }
1314  double zdiststat = 0.;
1315  if (sn0 < 4) {
1316  if (sector == 2)
1317  zdiststat = zD3;
1318  } else {
1319  if (sector == 2)
1320  zdiststat = zD2;
1321  if (sector == 3)
1322  zdiststat = zD3;
1323  }
1324  double kplane = -(pn0 - 1) / 2 - 0.5 + (zmodule - 1); //-3.5 +0...5 = -3.5,-2.5,-1.5,+2.5,+1.5
1325  double zcurrent = zinibeg + z420 + (zSiStep - zSiPlane) / 2 + kplane * zSiStep + zdiststat;
1326  //double zcurrent = zinibeg +(zSiStep-zSiPlane)/2 + kplane*zSiStep + (sector-1)*zUnit;
1327  if (verbosity > 2) {
1328  edm::LogVerbatim("FP420Test") << "FP420Test: Leftzcurrent-419000. = " << zcurrent - 419000.;
1329  edm::LogVerbatim("FP420Test") << "FP420Test: zGapLDet = " << zGapLDet;
1330  }
1331  if (justlayer == 1) {
1332  if (orientation == 1)
1333  zcurrent += (zGapLDet + zSiDet / 2);
1334  if (orientation == 2)
1335  zcurrent += zBlade - (zGapLDet + zSiDet / 2);
1336  }
1337  if (justlayer == 2) {
1338  if (orientation == 1)
1339  zcurrent += (zGapLDet + zSiDet / 2) + zBlade + gapBlade;
1340  if (orientation == 2)
1341  zcurrent += 2 * zBlade + gapBlade - (zGapLDet + zSiDet / 2);
1342  }
1343  // .
1344  //
1345  if (det == 2)
1346  zcurrent = -zcurrent;
1347  //
1348  if (verbosity > 2) {
1349  edm::LogVerbatim("FP420Test") << "FP420Test: zcurrent-419000. = " << zcurrent - 419000.;
1350  }
1351  //================================== end of for loops in continuius number iu:
1352  } //if(zside!=0
1353  } // for superlayer
1354  } // for zmodule
1355  } // for sector
1356 
1357  if (verbosity > 2) {
1358  edm::LogVerbatim("FP420Test")
1359  << "----------------------------------------------------------------------------- ";
1360  }
1361 
1362  //======================================================================================================CHECK
1363  if (totallosenergy == 0.0) {
1364  edm::LogVerbatim("FP420Test") << "FP420Test: number of hits = " << theCAFI->entries();
1365  for (int j = 0; j < nhits; j++) {
1366  FP420G4Hit* aHit = (*theCAFI)[j];
1367  double losenergy = aHit->getEnergyLoss();
1368  edm::LogVerbatim("FP420Test") << " j hits = " << j << "losenergy = " << losenergy;
1369  }
1370  }
1371  //======================================================================================================CHECK
1372 
1373  //====================================================================================================== HIT START
1374 
1375  // FIBRE Hit collected analysis
1376  double totalEnergy = 0.;
1377  int nhitsX = 0, nhitsY = 0, nsumhit = 0;
1378  for (int sector = 1; sector < 4; sector++) {
1379  int nhitsecX = 0, nhitsecY = 0;
1380  for (int zmodule = 1; zmodule < 11; zmodule++) {
1381  for (int zside = 1; zside < 3; zside++) {
1382  int det = 1;
1383  // int nhit = 0;
1384  // int sScale = 20;
1385  int index = FP420NumberingScheme::packFP420Index(det, zside, sector, zmodule);
1386  double theTotalEnergy = themap[index];
1387  // X planes
1388  if (zside < 2) {
1389  //UserNtuples->fillg47(theTotalEnergy,1.);
1390  if (theTotalEnergy > 0.00003) {
1391  nhitsX += 1;
1392  // nhitsecX += themap1[index];
1393  // nhit=1;
1394  }
1395  }
1396  // Y planes
1397  else {
1398  //UserNtuples->fillg49(theTotalEnergy,1.);
1399  if (theTotalEnergy > 0.00005) {
1400  nhitsY += 1;
1401  // nhitsecY += themap1[index];
1402  // nhit=1;
1403  }
1404  }
1405  // intindex is a continues numbering of FP420
1406  // int zScale=2; unsigned int intindex = sScale*(sector - 1)+zScale*(zmodule - 1)+zside;
1407  // int zScale=10; unsigned int intindex = sScale*(sector - 1)+zScale*(zside - 1)+zmodule;
1408  //UserNtuples->fillg41(float(intindex),theTotalEnergy);
1409  //UserNtuples->fillg42(float(intindex),1.);
1410  //UserNtuples->fillp208(float(intindex),float(nhit),1.);
1411  //UserNtuples->fillp211(float(intindex),float(themap1[index]),1.);
1412  totalEnergy += themap[index];
1413  } // for
1414  } // for
1415  //UserNtuples->fillg39(nhitsecY,1.);
1416  if (nhitsecX > 10 || nhitsecY > 10) {
1417  nsumhit += 1;
1418  //UserNtuples->fillp213(float(sector),float(1.),1.);
1419  } else { //UserNtuples->fillp213(float(sector),float(0.),1.);
1420  }
1421  } // for
1422  //====================================================================================================== HIT END
1423 
1424  //====================================================================================================== HIT ALL
1425  //UserNtuples->fillg43(totalEnergy,1.);
1426  //UserNtuples->fillg58(nhitsX,1.);
1427  //UserNtuples->fillg59(nhitsY,1.);
1428  // if( nsumhit !=0 ) { //UserNtuples->fillp212(vy,float(1.),1.);
1429  if (nsumhit >= 2) { //UserNtuples->fillp212(vy,float(1.),1.);
1430  } else { //UserNtuples->fillp212(vy,float(0.),1.);
1431  }
1432 
1433  //====================================================================================================== HIT ALL
1434 
1435  //====================================================================================================== number of hits
1436  // .............
1437  // } // number of hits < 50
1438  // .............
1439  } // MI or no MI or all - end
1440 
1441  } // primary end
1442  //=========================== thePrim != 0 end ===
1443  // ==========================================================================
1444  if (verbosity > 0) {
1445  edm::LogVerbatim("FP420Test") << "FP420Test: END OF Event " << (*evt)()->GetEventID();
1446  }
1447 }
static int unpackCopyIndex(int rn0, int zside)
Log< level::Info, true > LogVerbatim
double z4
Definition: FP420Test.cc:140
static std::vector< std::string > checklist log
G4ThreeVector getExitLocalP() const
Definition: FP420G4Hit.cc:109
static int realzside(int rn0, int zsideinorder)
static void unpackFP420Index(const unsigned int &idx, int &det, int &zside, int &station, int &superplane)
double zinibeg
Definition: FP420Test.cc:144
double z2
Definition: FP420Test.cc:140
int verbosity
Definition: FP420Test.cc:130
double npart
Definition: HydjetWrapper.h:46
int zside(DetId const &)
static int unpackLayerIndex(int rn0, int zside)
int ii
Definition: cuy.py:589
double zGapLDet
Definition: FP420Test.cc:144
unsigned int getTrackID() const
Definition: FP420G4Hit.cc:121
G4ThreeVector lastpo
Definition: FP420Test.cc:137
const Double_t pi
unsigned int getUnitID() const
Definition: FP420G4Hit.cc:124
static unsigned packMYIndex(int rn0, int pn0, int sn0, int det, int zside, int sector, int zmodule)
Fp420AnalysisHistManager * theHistManager
Definition: FP420Test.cc:152
double zD2
Definition: FP420Test.cc:140
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
int whichevent
Definition: FP420Test.cc:150
double zD3
Definition: FP420Test.cc:140
G4ThreeVector getEntryLocalP() const
Definition: FP420G4Hit.cc:106
double zSiPlane
Definition: FP420Test.cc:144
double z3
Definition: FP420Test.cc:140
Float_t fp420eventarray[1]
Definition: FP420Test.cc:147
static unsigned int packFP420Index(int det, int zside, int station, int superplane)
float getEnergyLoss() const
Definition: FP420G4Hit.cc:140
TH1F * getHisto(Int_t Number)
Definition: FP420Test.cc:351
double z420
Definition: FP420Test.cc:143
G4THitsCollection< FP420G4Hit > FP420G4HitCollection
double zSiStep
Definition: FP420Test.cc:144
int numofpart
Definition: FP420Test.cc:135
double gapBlade
Definition: FP420Test.cc:145
double zSiDet
Definition: FP420Test.cc:143
G4double tracklength0
Definition: FP420Test.cc:126
G4ThreeVector getEntry() const
Definition: FP420G4Hit.cc:103
static int unpackOrientation(int rn0, int zside)
double zBlade
Definition: FP420Test.cc:145

Member Data Documentation

int FP420Test::dn0
private

Definition at line 141 of file FP420Test.cc.

G4double FP420Test::entot0
private

Definition at line 126 of file FP420Test.cc.

Referenced by update().

std::string FP420Test::fDataLabel
private

Definition at line 153 of file FP420Test.cc.

Referenced by FP420Test().

std::string FP420Test::fOutputFile
private

Definition at line 154 of file FP420Test.cc.

Referenced by FP420Test(), and ~FP420Test().

Float_t FP420Test::fp420eventarray[1]
private

Definition at line 147 of file FP420Test.cc.

Referenced by update().

TNtuple* FP420Test::fp420eventntuple
private

Definition at line 148 of file FP420Test.cc.

Referenced by FP420Test(), and ~FP420Test().

TFile FP420Test::fp420OutputFile
private

Definition at line 149 of file FP420Test.cc.

Referenced by ~FP420Test().

std::string FP420Test::fRecreateFile
private

Definition at line 155 of file FP420Test.cc.

Referenced by FP420Test(), and ~FP420Test().

double FP420Test::gapBlade
private

Definition at line 145 of file FP420Test.cc.

Referenced by FP420Test(), and update().

int FP420Test::iev
private

Definition at line 124 of file FP420Test.cc.

Referenced by update().

int FP420Test::itrk
private

Definition at line 125 of file FP420Test.cc.

Referenced by update().

G4ThreeVector FP420Test::lastpo
private

Definition at line 137 of file FP420Test.cc.

Referenced by update().

int FP420Test::lastTrackID
private

Definition at line 129 of file FP420Test.cc.

int FP420Test::numofpart
private

Definition at line 135 of file FP420Test.cc.

Referenced by update().

int FP420Test::pn0
private

Definition at line 141 of file FP420Test.cc.

Referenced by FP420Test(), and update().

double FP420Test::rinCalo
private

Definition at line 128 of file FP420Test.cc.

int FP420Test::rn0
private

Definition at line 141 of file FP420Test.cc.

int FP420Test::rn00
private

Definition at line 142 of file FP420Test.cc.

Referenced by FP420Test(), and update().

int FP420Test::sn0
private

Definition at line 141 of file FP420Test.cc.

Referenced by FP420Test(), and update().

G4double FP420Test::sumEnerDeposit
private

Definition at line 133 of file FP420Test.cc.

Referenced by update().

G4double FP420Test::sumStepc
private

Definition at line 133 of file FP420Test.cc.

Referenced by update().

G4double FP420Test::sumStepl
private

Definition at line 133 of file FP420Test.cc.

Referenced by update().

Fp420AnalysisHistManager* FP420Test::theHistManager
private

Definition at line 152 of file FP420Test.cc.

Referenced by FP420Test(), update(), and ~FP420Test().

G4double FP420Test::tracklength0
private

Definition at line 126 of file FP420Test.cc.

Referenced by update().

int FP420Test::verbosity
private

Definition at line 130 of file FP420Test.cc.

Referenced by FP420Test(), update(), and ~FP420Test().

int FP420Test::whichevent
private

Definition at line 150 of file FP420Test.cc.

Referenced by FP420Test(), and update().

double FP420Test::z1
private

Definition at line 140 of file FP420Test.cc.

Referenced by FP420Test(), and update().

double FP420Test::z2
private

Definition at line 140 of file FP420Test.cc.

Referenced by FP420Test(), and update().

double FP420Test::z3
private

Definition at line 140 of file FP420Test.cc.

Referenced by FP420Test(), and update().

double FP420Test::z4
private

Definition at line 140 of file FP420Test.cc.

Referenced by FP420Test(), and update().

double FP420Test::z420
private

Definition at line 143 of file FP420Test.cc.

Referenced by FP420Test(), and update().

double FP420Test::zBlade
private

Definition at line 145 of file FP420Test.cc.

Referenced by FP420Test(), and update().

double FP420Test::zBoundDet
private

Definition at line 144 of file FP420Test.cc.

Referenced by FP420Test().

double FP420Test::zD2
private

Definition at line 140 of file FP420Test.cc.

Referenced by FP420Test(), and update().

double FP420Test::zD3
private

Definition at line 140 of file FP420Test.cc.

Referenced by FP420Test(), and update().

double FP420Test::zGapLDet
private

Definition at line 144 of file FP420Test.cc.

Referenced by FP420Test(), and update().

double FP420Test::zinCalo
private

Definition at line 128 of file FP420Test.cc.

double FP420Test::zinibeg
private

Definition at line 144 of file FP420Test.cc.

Referenced by FP420Test(), and update().

double FP420Test::zSiDet
private

Definition at line 143 of file FP420Test.cc.

Referenced by FP420Test(), and update().

double FP420Test::zSiPlane
private

Definition at line 144 of file FP420Test.cc.

Referenced by FP420Test(), and update().

double FP420Test::zSiStep
private

Definition at line 144 of file FP420Test.cc.

Referenced by FP420Test(), and update().