32 return Watcher::GetFromTrigger(trigger,
"data:psa", fFrame);
37 Float_t PSACrystal3D::fgMetric = 10.;
38 Float_t PSACrystal3D::fRadius = 5. ;
39 Float_t PSACrystal3D::fDepht = 10.;
40 Int_t PSACrystal3D::fNBinX = 50;
41 Int_t PSACrystal3D::fNBinZ = 50;
42 Float_t PSACrystal3D::fDefaultECutMin = 0.;
43 Float_t PSACrystal3D::fDefaultECutMax = 100000000.;
57 fCurrentECutMin(fDefaultECutMin),
58 fCurrentECutMax(fDefaultECutMax)
60 fH3DHitPosition = MakeTH3<TH3F>(
"H3DHitPosition",
"Distribution of Hits in the crystal; x (cm); y (cm); z (cm)",
64 fE0 = MakeTH1<TH1F>(
"ECore0",
"Core energy 0, (high gain)",6000, 0, 6000);
65 fE1 = MakeTH1<TH1F>(
"ECore1",
"Core energy 1, (low gain) ",1000, 0, 10000);
66 fE1->SetLineColor(kRed);
67 fT0 = MakeTH1<TH1F>(
"TCore0",
"Core time 0",300, 0, 100);
68 fT1 = MakeTH1<TH1F>(
"TCore1",
"Core time 1",300, 0, 100);
69 fT1->SetLineColor(kRed);
70 fTE0 = MakeTH2<TH2F>(
"TECore0",
"Time energy 0",600,0,6000,300, 0, 100);
71 fTE1 = MakeTH2<TH2F>(
"TECore1",
"Time energy 1",600, 0,6000,300, 0, 100);
73 fEnergySeg = MakeTH1<TH1F>(
"ESum",
"Sum of segment",6000, 0, 6000);
74 fNbHits = MakeTH1<TH1F>(
"NbHits",
"Nb hits in crystal",20, 0, 20);
86 if ( option ==
"3D" ) {
87 fH3DHitPosition->Draw(o);
116 for( UShort_t i=0u; i < data->
GetNbHits(); i++ ) {
119 fH3DHitPosition->Fill(data->
GetHit(i)->
GetX()/fgMetric,
124 fE0->Fill(data->
GetE(0u));
125 fE1->Fill(data->
GetE(1u));
126 fT0->Fill(data->
GetT(0));
127 fT1->Fill(data->
GetT(1));
128 fTE0->Fill(data->
GetE(0u),data->
GetT(0));
129 fTE1->Fill(data->
GetE(1u),data->
GetT(1));
134 if( EcutMax < EcutMin ) {
135 std::cerr <<
"ERROR: PSACrystal3D::SetEnergyCut( Float_t EcutMin,Float_t EcutMax)"
137 <<
"ECutMin greater than ECutMax, the cut has not been changed : "
138 <<
"ECutMin = " << fCurrentECutMin
139 <<
" EcutMax = " << fCurrentECutMax <<
std::endl;
143 if( EcutMin != fCurrentECutMin && EcutMax != fCurrentECutMax ) {
144 fCurrentECutMin = EcutMin;
145 fCurrentECutMax = EcutMax;
146 fH3DHitPosition->Reset();
147 TString newtitle = Form(
"Distribution of Hits in the crystal E #in [%lf,%lf]; x (cm); y (cm); z (cm)",
150 fH3DHitPosition->SetTitle(newtitle.Data());
156 fCurrentECutMin = EcutMin;
160 fCurrentECutMax = EcutMax;
164 return(fCurrentECutMin);
168 return(fCurrentECutMax);
virtual Bool_t IsValid() const
true if it is a valid pointer
virtual UShort_t GetNbHits() const =0
To know the number of Hits currently on the stack.
virtual Double_t GetY() const
Float_t GetCurrentECutMax() const
void SetCurrentECutMin(Float_t EcutMin)
virtual Double_t GetE(UInt_t=0u) const =0
to get the energy associated to the core
virtual Double_t GetE() const
void SetCurrentECutMax(Float_t EcutMax)
virtual Double_t GetT(UInt_t=0u) const =0
to get the time associated to the core
virtual void DoCanvas(TCanvas *c, Option_t *)
To be overwritten by real implementation if a canvas is produced.
To get a 3D map of hits in a particular crystal.
void SetLastExecStatus(Short_t s=0)
reset last status. 0 means no error, 0 < means error, > 0 means ok with conditions ...
PSACrystal3D(const char *name, const char *title, TDirectory *sp_dir=0x0, TDirectory *tag_dir=0x0)
virtual Double_t GetX() const
virtual void Exec(Option_t *option="")
Base class for a trigger on a data flow.
ADF::LogMessage & endl(ADF::LogMessage &log)
virtual Double_t GetZ() const
Float_t GetCurrentECutMin() const
virtual Bool_t SetTrigger(ADF::DFTrigger *=0x0)
Set the frame to be watched from the trigger.
virtual Hit * GetHit(UShort_t)=0
To get back a particular Hit (already on the stack !)
Base Watcher working for any kind of Frame (Frame interface)
void SetEnergyCut(Float_t EcutMin, Float_t EcutMax)
to apply cut on the hits