diff --git a/Inputs/DetectorConfiguration/Sharc.detector b/Inputs/DetectorConfiguration/Sharc.detector index 3bf7193ed3366e88119da2de1b785d9aba308d20..f1146d2767c6573384f1d78c2cd8c1a7fa81f5f6 100644 --- a/Inputs/DetectorConfiguration/Sharc.detector +++ b/Inputs/DetectorConfiguration/Sharc.detector @@ -4,7 +4,7 @@ GeneralTarget %0.2mg/cm2 Target - THICKNESS= 9 + THICKNESS= 0.01 RADIUS= 5 MATERIAL= CD2 ANGLE= 0 @@ -52,10 +52,10 @@ Sharc %Down Stream Box SharcBOX Z= 31.4 - ThicknessDector1= 100 - ThicknessDector2= 100 - ThicknessDector3= 100 - ThicknessDector4= 100 + ThicknessDector1= 140 + ThicknessDector2= 140 + ThicknessDector3= 140 + ThicknessDector4= 140 ThicknessPAD1= 1000 ThicknessPAD2= 1000 ThicknessPAD3= 1000 diff --git a/Inputs/EventGenerator/28Mgdp.reaction b/Inputs/EventGenerator/28Mgdp.reaction index 378c137462a49176522da8f3967c15e7a3ab4435..d9e0b8827a38c5806c59b28aae0f7099643acb0e 100644 --- a/Inputs/EventGenerator/28Mgdp.reaction +++ b/Inputs/EventGenerator/28Mgdp.reaction @@ -24,7 +24,7 @@ TwoBodyReaction Light= 1H Heavy= 29Mg ExcitationEnergyLight= 0.0 - ExcitationEnergyHeavy= 5.0 + ExcitationEnergyHeavy= 0.0 CrossSectionPath= flat.txt CSR ShootLight= 1 ShootHeavy= 1 diff --git a/NPAnalysis/Sharc/Analysis.cxx b/NPAnalysis/Sharc/Analysis.cxx index 8d36cdcfe44d7cd9dbb635d07707a05882f275e9..4cd8a8b54b3831c706b731d35a368a22f5c5110d 100644 --- a/NPAnalysis/Sharc/Analysis.cxx +++ b/NPAnalysis/Sharc/Analysis.cxx @@ -38,9 +38,9 @@ void Analysis::Init(){ InitInputBranch(); Sharc = (TSharcPhysics*) m_DetectorManager -> GetDetector("Sharc"); - LightCD2 = EnergyLoss("proton_CD2.G4table","G4Table",100 ); - LightSi = EnergyLoss("proton_Si.G4table","G4Table",100); - BeamCD2 = EnergyLoss("Mg28_CD2.G4table","G4Table",100); + LightCD2 = EnergyLoss("proton_CD2.G4table","G4Table",10 ); + LightSi = EnergyLoss("proton_Si.G4table","G4Table",1); + BeamCD2 = EnergyLoss("Mg28_CD2.G4table","G4Table",10); myReaction = new NPL::Reaction(); myReaction->ReadConfigurationFile(NPOptionManager::getInstance()->GetReactionFile()); TargetThickness = m_DetectorManager->GetTargetThickness()*micrometer; @@ -62,7 +62,11 @@ void Analysis::Init(){ E_Sharc = 0; Si_X_Sharc = 0; Si_Y_Sharc = 0; -} + + double BeamEnergy = BeamCD2.Slow(OriginalBeamEnergy,TargetThickness*0.5,0); + myReaction->SetBeamEnergy(BeamEnergy); + cout << "Beam energy set at " << BeamEnergy << " MeV" << endl; +} //////////////////////////////////////////////////////////////////////////////// void Analysis::TreatEvent(){ @@ -71,12 +75,10 @@ void Analysis::TreatEvent(){ double XTarget = 0; double YTarget = 0; TVector3 BeamDirection = TVector3(0,0,1); - double BeamEnergy = BeamCD2.Slow(OriginalBeamEnergy,TargetThickness*0.5,0); - myReaction->SetBeamEnergy(BeamEnergy); //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////// LOOP on Sharc////////////////// - if(Sharc->Strip_E.size()>0){ + if(Sharc->Strip_E.size()==1){ /************************************************/ // Part 1 : Impact Angle ThetaSharcSurface = 0; @@ -100,7 +102,7 @@ void Analysis::TreatEvent(){ /************************************************/ // Part 2 : Impact Energy - Energy = ELab = 0; + Energy = 0; if(Sharc->PAD_E[0]>0){ Energy = Sharc->PAD_E[0]; } @@ -108,7 +110,7 @@ void Analysis::TreatEvent(){ Energy += Sharc->Strip_E[0]; // Target Correction - ELab = LightCD2.EvaluateInitialEnergy( Energy ,TargetThickness*0.5, ThetaNormalTarget); + ELab = LightCD2.EvaluateInitialEnergy( Energy ,TargetThickness*0.5, ThetaNormalTarget); /************************************************/ /************************************************/ @@ -121,9 +123,8 @@ void Analysis::TreatEvent(){ // Part 4 : Theta CM Calculation ThetaCM = myReaction -> EnergyLabToThetaCM( ELab , ThetaLab)/deg; ThetaLab=ThetaLab/deg; - ThetaLab=Rand.Uniform(ThetaLab-0.5,ThetaLab+0.5); /************************************************/ - }//end loop GASPARD + }//end loop Sharc } diff --git a/NPLib/Sharc/TSharcPhysics.cxx b/NPLib/Sharc/TSharcPhysics.cxx index a253fb63360e6907ab289e32a339cbf7880e5124..ab99398734034cfa3d290a8fdaefc70fb76673e9 100644 --- a/NPLib/Sharc/TSharcPhysics.cxx +++ b/NPLib/Sharc/TSharcPhysics.cxx @@ -718,33 +718,85 @@ void TSharcPhysics::InitializeRootOutput(){ //////////////////////////////////////////////////////////////////////////////// ///// Specific to SharcArray //// void TSharcPhysics::AddBoxDetector(double Z){ +// BOX // + double BOX_PCB_Width = 61.10; + double BOX_PCB_Length = 104.00; + double BOX_PCB_Thickness = 3.4; + double BOX_PCB_Border_LongSide = 1; + double BOX_PCB_Border_ShortSide = 2; + + // Single stage box case (DSSD only) + double BOX_PCB_Slot_Width1 = BOX_PCB_Thickness; + double BOX_PCB_Slot_Border1 = 4; + double BOX_PCB_Slot_Deepness1 = BOX_PCB_Border_ShortSide; + + // BOX Wafer double BOX_Wafer_Width = 52.20; double BOX_Wafer_Length = 76.20; - double BOX_ActiveArea_Length = 76.2; - double BOX_ActiveArea_Width = 52.2; - - int BOX_Wafer_Back_NumberOfStrip = 48 ; int BOX_Wafer_Front_NumberOfStrip = 24 ; + int BOX_Wafer_Back_NumberOfStrip = 48 ; + + // Compute + double BOX_LeftOver1 = BOX_PCB_Length - BOX_PCB_Border_ShortSide - BOX_Wafer_Length - BOX_PCB_Slot_Border1 - BOX_PCB_Slot_Width1 ; + double BOX_Exposed_Length1 = BOX_Wafer_Length + BOX_PCB_Slot_Border1 ; + + double BOX_CenterOffset1 = - 0.5 * BOX_PCB_Length+BOX_PCB_Border_ShortSide+0.5*BOX_Exposed_Length1; + double BOX_DetectorSpacing1 = 0.5*BOX_Exposed_Length1+0.5*BOX_PCB_Slot_Width1; + + double BOX_Wafer_Width_Offset1 = -0.5*BOX_PCB_Width + BOX_PCB_Border_LongSide + 0.5*BOX_Wafer_Width; + double BOX_Wafer_Length_Offset1 = -0.5*BOX_PCB_Length + BOX_PCB_Border_ShortSide + 0.5*BOX_Wafer_Length; + + double BOX_PCB_Slot_Position1 = 0.5*BOX_PCB_Length-BOX_LeftOver1 - 0.5*BOX_PCB_Slot_Width1; + + double StripPitchFront = BOX_Wafer_Length/BOX_Wafer_Front_NumberOfStrip ; //mm + double StripPitchBack = BOX_Wafer_Width/BOX_Wafer_Back_NumberOfStrip ; //mm - double StripPitchFront = BOX_ActiveArea_Length/BOX_Wafer_Front_NumberOfStrip ; //mm - double StripPitchBack = BOX_ActiveArea_Width/BOX_Wafer_Back_NumberOfStrip ; //mm + // Double stage box case (DSSD+PAD) (the wafer is the same but the slot is different to accomodate the additional PAD) + double PAD_PCB_Thickness = 3.4; + + double BOX_PCB_Slot_Width2 = BOX_PCB_Thickness + PAD_PCB_Thickness ; + double BOX_PCB_Slot_Border2 = 2.7; + double BOX_PCB_Slot_Deepness2 = BOX_PCB_Border_ShortSide; + + double BOX_LeftOver2 = BOX_PCB_Length - BOX_PCB_Border_ShortSide - BOX_Wafer_Length - BOX_PCB_Slot_Border2 - BOX_PCB_Slot_Width2; + double BOX_Exposed_Length2 = BOX_Wafer_Length + BOX_PCB_Slot_Border2 ; + + double BOX_CenterOffset2 = - 0.5*BOX_PCB_Length+BOX_PCB_Border_ShortSide + 0.5*BOX_Exposed_Length2; + double BOX_DetectorSpacing2 = 0.5*BOX_Exposed_Length2 + 0.5*BOX_PCB_Thickness; + + double BOX_Wafer_Width_Offset2 = - 0.5*BOX_PCB_Width + BOX_PCB_Border_LongSide + 0.5*BOX_Wafer_Width; + double BOX_Wafer_Length_Offset2 = - 0.5*BOX_PCB_Length + BOX_PCB_Border_ShortSide + 0.5*BOX_Wafer_Length; + double BOX_PCB_Slot_Position2 = 0.5*BOX_PCB_Length-BOX_LeftOver2 - 0.5*BOX_PCB_Slot_Width2; + TVector3 U; TVector3 V;TVector3 Strip_1_1; + + + // TVector3 WaferCenter1 = TVector3(BOX_CenterOffset2, BOX_DetectorSpacing1, Z ) + // StripPos = WaferCenter1 + TVector3(BOX_Wafer_Length*0.5- 0.5*StripPitchFront ,0,BOX_Wafer_Width*0.5 - StripPitchBack*0.5) + double A1 = BOX_Exposed_Length1*0.5 -BOX_PCB_Slot_Border1- 0.5*StripPitchFront ; + double B1 = BOX_DetectorSpacing1 - 0.5*BOX_PCB_Thickness; + double Z1 = Z - BOX_Wafer_Width*0.5 + StripPitchBack*0.5 ; + + double A2 = BOX_Exposed_Length2*0.5 -BOX_PCB_Slot_Border2- 0.5*StripPitchFront ; + double B2 = BOX_DetectorSpacing2 - 0.5*BOX_PCB_Thickness; + double Z2 = Z + BOX_Wafer_Width*0.5 - StripPitchBack*0.5 ; + for(int i = 0 ; i < 4 ; i++){ m_NumberOfDetector++; if(Z<0){// Up Stream - if(i==0) {U=TVector3(1,0,0);V=TVector3(0,0,1); Strip_1_1=TVector3(-36,42.5,Z-BOX_Wafer_Width/2.) ;} - else if(i==1) {U=TVector3(0,1,0);V=TVector3(0,0,1); Strip_1_1=TVector3(-42.5,-36,Z-BOX_Wafer_Width/2.) ;} - else if(i==2) {U=TVector3(-1,0,0);V=TVector3(0,0,1); Strip_1_1=TVector3(36,-42.5,Z-BOX_Wafer_Width/2.) ;} - else if(i==3) {U=TVector3(0,-1,0);V=TVector3(0,0,1); Strip_1_1=TVector3(42.5,36,Z-BOX_Wafer_Width/2.) ;} + if(i==0) {U=TVector3(1,0,0);V=TVector3(0,0,1); Strip_1_1=TVector3( -A1 , B1 ,Z1) ;} + else if(i==1) {U=TVector3(0,1,0);V=TVector3(0,0,1); Strip_1_1=TVector3( -B1 , -A1 ,Z1) ;} + else if(i==2) {U=TVector3(-1,0,0);V=TVector3(0,0,1); Strip_1_1=TVector3( A1 , -B1 ,Z1) ;} + else if(i==3) {U=TVector3(0,-1,0);V=TVector3(0,0,1); Strip_1_1=TVector3( B1 , A1 ,Z1) ;} } if(Z>0){//Down Stream - if(i==0) {U=TVector3(-1,0,0);V=TVector3(0,0,-1); Strip_1_1=TVector3(36,40.5,Z+BOX_Wafer_Width/2.) ;} - else if(i==1) {U=TVector3(0,-1,0);V=TVector3(0,0,-1); Strip_1_1=TVector3(-40.5,36,Z+BOX_Wafer_Width/2.) ;} - else if(i==2) {U=TVector3(1,0,0);V=TVector3(0,0,-1); Strip_1_1=TVector3(-36,-40.5,Z+BOX_Wafer_Width/2.) ;} - else if(i==3) {U=TVector3(0,1,0);V=TVector3(0,0,-1); Strip_1_1=TVector3(40.5,-36,Z+BOX_Wafer_Width/2.) ;} + if(i==0) {U=TVector3(-1,0,0);V=TVector3(0,0,-1); Strip_1_1=TVector3( A2 ,B2 ,Z2) ;} + else if(i==1) {U=TVector3(0,-1,0);V=TVector3(0,0,-1); Strip_1_1=TVector3( -B2 ,A2 ,Z2) ;} + else if(i==2) {U=TVector3(1,0,0);V=TVector3(0,0,-1); Strip_1_1=TVector3( -A2 ,-B2 ,Z2) ;} + else if(i==3) {U=TVector3(0,1,0);V=TVector3(0,0,-1); Strip_1_1=TVector3( B2 ,-A2 ,Z2) ;} } // Buffer object to fill Position Array